diff --git a/webapp/src/main/webapp/WEB-INF/portlet.xml b/webapp/src/main/webapp/WEB-INF/portlet.xml
index a84b33f6758..79f4e854653 100644
--- a/webapp/src/main/webapp/WEB-INF/portlet.xml
+++ b/webapp/src/main/webapp/WEB-INF/portlet.xml
@@ -432,10 +432,8 @@
org.exoplatform.commons.api.portlet.GenericDispatchedViewPortlet
portlet-view-dispatched-file-path
- /html/spacesAdministration.html
+ /WEB-INF/jsp/portlet/spacesAdministration.jsp
-
-1
-
PUBLIC
text/html
@@ -1057,10 +1055,8 @@
org.exoplatform.commons.api.portlet.GenericDispatchedViewPortlet
portlet-view-dispatched-file-path
- /html/spaceTemplateManagement.html
+ /WEB-INF/jsp/portlet/spaceTemplateManagement.jsp
-
-1
-
PUBLIC
text/html
diff --git a/webapp/src/main/webapp/html/spaceTemplateManagement.html b/webapp/src/main/webapp/html/spaceTemplateManagement.html
deleted file mode 100644
index 2cbaacc41a2..00000000000
--- a/webapp/src/main/webapp/html/spaceTemplateManagement.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/webapp/src/main/webapp/html/spacesAdministration.html b/webapp/src/main/webapp/html/spacesAdministration.html
deleted file mode 100644
index ddcbfcee67c..00000000000
--- a/webapp/src/main/webapp/html/spacesAdministration.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/common/js/SuggesterService.js b/webapp/src/main/webapp/vue-apps/common/js/SuggesterService.js
index e4b9b1c0fa7..6586e378bdd 100644
--- a/webapp/src/main/webapp/vue-apps/common/js/SuggesterService.js
+++ b/webapp/src/main/webapp/vue-apps/common/js/SuggesterService.js
@@ -51,6 +51,7 @@ function searchSpaces(filter, items, onlyRedactor, excludeRedactionalSpace, only
fullName: item.displayName,
originalName: item.shortName,
avatarUrl: item.avatarUrl ? item.avatarUrl : `/portal/rest/v1/social/spaces/${item.prettyName}/avatar`,
+ membersCount: item.membersCount,
},
});
}
diff --git a/webapp/src/main/webapp/vue-apps/hamburger-menu/components/Sidebar.vue b/webapp/src/main/webapp/vue-apps/hamburger-menu/components/Sidebar.vue
index 25172bcb99a..b11521445ea 100644
--- a/webapp/src/main/webapp/vue-apps/hamburger-menu/components/Sidebar.vue
+++ b/webapp/src/main/webapp/vue-apps/hamburger-menu/components/Sidebar.vue
@@ -189,6 +189,11 @@ export default {
this.interval = window.setTimeout(() => this.closeMenu(), 500);
}
},
+ icon() {
+ if (this.icon) {
+ this.firstLevelDrawer = false;
+ }
+ },
site() {
this.$root.openedSiteName = this.site?.name;
},
diff --git a/webapp/src/main/webapp/vue-apps/hamburger-menu/components/SidebarButton.vue b/webapp/src/main/webapp/vue-apps/hamburger-menu/components/SidebarButton.vue
index 4f9a8d45e20..a140ff73eb1 100644
--- a/webapp/src/main/webapp/vue-apps/hamburger-menu/components/SidebarButton.vue
+++ b/webapp/src/main/webapp/vue-apps/hamburger-menu/components/SidebarButton.vue
@@ -30,12 +30,8 @@
fa-bars
+ :class="$vuetify.rtl && 'l-0' || 'r-0'"
+ class="hamburger-unread-badge position-absolute">
diff --git a/webapp/src/main/webapp/vue-apps/hamburger-menu/main.js b/webapp/src/main/webapp/vue-apps/hamburger-menu/main.js
index bb440e51eb8..652cc73fee5 100644
--- a/webapp/src/main/webapp/vue-apps/hamburger-menu/main.js
+++ b/webapp/src/main/webapp/vue-apps/hamburger-menu/main.js
@@ -39,7 +39,7 @@ document.dispatchEvent(new CustomEvent('displayTopBarLoading'));
const appId = 'HamburgerNavigationMenu';
-export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl) {
+export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl, isExternalFeatureEnabled) {
exoi18n.loadLanguageAsync(lang, url)
.then(i18n => {
// init Vue app when locale ressources are ready
@@ -49,6 +49,7 @@ export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl) {
unreadPerSpace,
avatarUrl,
mode,
+ isExternalFeatureEnabled,
hoverFirstLevel: false,
hoverSecondLevel: false,
hoverThirdLevel: false,
@@ -61,7 +62,7 @@ export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl) {
openedSpaceTemplateName: null,
sites: null,
settings: null,
- overlayOpened: null,
+ openedOverlay: false,
hoverDeferred: false,
rtl: eXo.env.portal.orientation === 'rtl',
ltr: eXo.env.portal.orientation === 'ltr',
@@ -112,14 +113,14 @@ export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl) {
expand() {
if (this.icon) {
window.setTimeout(() => {
- if (this.expand && !this.overlayOpened) {
+ if (this.expand && !this.openedOverlay) {
document.dispatchEvent(new CustomEvent('drawerOpened'));
- this.overlayOpened = true;
- } else if (!this.expand && this.overlayOpened) {
+ this.openedOverlay = true;
+ } else if (!this.expand && this.openedOverlay) {
if (!eXo.openedDrawers?.length) {
document.dispatchEvent(new CustomEvent('drawerClosed'));
}
- this.overlayOpened = false;
+ this.openedOverlay = false;
}
}, 200);
}
@@ -142,8 +143,29 @@ export function init(mode, defaultUserPath, unreadPerSpace, avatarUrl) {
immediate: true,
handler() {
this.updateParentStyle();
+ if (this.hover) {
+ this.openedOverlay = true;
+ } else {
+ window.setTimeout(() => {
+ document.dispatchEvent(new CustomEvent('drawerClosed'));
+ }, 300);
+ }
},
- }
+ },
+ sticky() {
+ if (this.sticky) {
+ window.setTimeout(() => {
+ document.dispatchEvent(new CustomEvent('drawerClosed'));
+ }, 300);
+ }
+ },
+ hidden() {
+ if (!this.hidden) {
+ if (eXo.openedDrawers?.find?.(d => d?.$el?.classList?.contains('HamburgerMenuFirstLevelParent'))) {
+ eXo.openedDrawers = eXo.openedDrawers.filter(d => !d?.$el?.classList?.contains('HamburgerMenuFirstLevelParent'));
+ }
+ }
+ },
},
created() {
document.addEventListener('homeLinkUpdated', this.updateUserHome);
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAccess.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAccess.vue
new file mode 100644
index 00000000000..1e75d8010ea
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAccess.vue
@@ -0,0 +1,152 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAvatar.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAvatar.vue
new file mode 100644
index 00000000000..9f94c71d3c3
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormAvatar.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+ fa-camera
+
+
+ fa-undo
+
+
+
+
+
+
+ {{ nameInitials }}
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormBanner.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormBanner.vue
new file mode 100644
index 00000000000..4a22b410d83
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormBanner.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+ fa-camera
+
+
+ fa-undo
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormDrawer.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormDrawer.vue
index d0032c904da..f85e5234b9a 100644
--- a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormDrawer.vue
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormDrawer.vue
@@ -29,196 +29,155 @@
@opened="stepper = 1"
@closed="stepper = 0">
- {{ title }}
+ {{ $t('spacesList.label.addNewSpace') }}
-
+
+
+
+ {{ item.icon }}
+
+ {{ item.name }}
+
+
+ {{ item.description }}
+
+
+
+
+
-
- {{ $t('spacesList.label.spaceDetails') }}
-
-
-
-
-
- {{ $t('spacesList.label.spaceAccess') }}
-
-
-
-
-
- {{ $t('spacesList.label.inviteUsers') }}
-
-
-
-
+ flat>
+
+
+ {{ $t('spacesList.label.nameTitle') }}
+
+
+
+
+
+
+
+ {{ $t('spacesList.label.propertiesTitle') }}
+
+
+
+
+
+
+
+ {{ $t('spacesList.label.inviteUsers') }}
+
+
+
+
+
+
+
+ {{ $t('spacesList.label.spaceAccessTitle') }}
+
+
+
+
+
-
+
-
+
+
+ {{ $t('spacesList.button.back') }}
+
+ {{ $t('spacesList.button.next') }}
+
+
this.maxDescriptionLength;
},
sortedTemplates() {
@@ -279,10 +245,7 @@ export default {
}) || spaceTemplates;
},
spaceTemplate() {
- return this.templates?.find?.(temp => temp.id === this.templateId);
- },
- displayedForm() {
- return this.$refs && this.$refs[`form${this.stepper}`];
+ return this.templates?.find?.(t => t.id === this.templateId);
},
suggesterLabels() {
return {
@@ -301,6 +264,36 @@ export default {
spaceInvitedMembers() {
return this.space?.invitedMembers;
},
+ bannerUrl() {
+ return this.spaceTemplate?.bannerFileId && `${eXo.env.portal.context}/${eXo.env.portal.rest}/v1/social/attachments/spaceTemplateBanner/${this.spaceTemplate?.id}/${this.spaceTemplate?.bannerFileId}?size=0` || this.defaultBannerSrc;
+ },
+ includeName() {
+ return this.spaceTemplate?.spaceFields?.includes?.('name');
+ },
+ includeProperties() {
+ return this.spaceTemplate?.spaceFields?.includes?.('properties');
+ },
+ includeAccess() {
+ return this.spaceTemplate?.spaceFields?.includes?.('access');
+ },
+ includeInvitation() {
+ return this.spaceTemplate?.spaceFields?.includes?.('invitation');
+ },
+ propertiesStep() {
+ return (this.includeName ? 1 : 0) + 1;
+ },
+ invitationStep() {
+ return (this.includeName ? 1 : 0) + (this.includeProperties ? 1 : 0) + 1;
+ },
+ accessStep() {
+ return (this.includeName ? 1 : 0) + (this.includeProperties ? 1 : 0) + (this.includeInvitation ? 1 : 0) + 1;
+ },
+ lastStep() {
+ return (this.includeName ? 1 : 0) + (this.includeProperties ? 1 : 0) + (this.includeInvitation ? 1 : 0) + (this.includeAccess ? 1 : 0);
+ },
+ singleStep() {
+ return this.lastStep === 1;
+ },
},
watch: {
savingSpace() {
@@ -373,43 +366,31 @@ export default {
}
},
mounted() {
- document.addEventListener('meeds.social.editSpace', this.editSpace);
this.$root.$on('addNewSpace', this.open);
- this.$root.$on('editSpace', this.editSpace);
},
methods: {
- open(templateId) {
- this.spaceToUpdate = null;
+ async open(templateId) {
+ this.templateId = templateId && Number(templateId);
+ this.noGoBack = !!templateId;
this.space = {
+ templateId: templateId,
subscription: 'open',
visibility: 'private',
};
+ if (!this.$root.spaceTemplates) {
+ this.$root.spaceTemplates = await this.$spaceTemplateService.getSpaceTemplates();
+ }
+ this.templates = this.$root.spaceTemplates;
+ if (this.templates?.length === 1) {
+ this.templateId = this.templates[0].id;
+ }
this.setSpaceTemplateProperties();
- this.title = this.$t('spacesList.label.addNewSpace');
- this.$spaceTemplateService.getSpaceTemplates()
- .then(data => {
- this.templates = data || [];
- this.templateId = templateId || this.sortedTemplates?.[0]?.id;
- });
this.$refs.spaceFormDrawer.open();
},
- editSpace(space) {
- space = space.detail && space.detail.data || space;
- if (!space || !space.id) {
- // eslint-disable-next-line no-console
- console.warn('space does not have an id ', space, ' ignore user action');
- return;
- }
- this.spaceToUpdate = space;
- this.space = {...space};
- this.templateId = this.space.templateId;
- this.title = this.$t('spacesList.label.editSpace', { 0: this.space.displayName });
- this.$spaceTemplateService.getSpaceTemplates()
- .then(data => {
- this.templates = data || [];
- this.templateId = this.sortedTemplates?.[0]?.id;
- });
- this.$refs.spaceFormDrawer.open();
+ async chooseTemplate(template) {
+ this.templateId = template?.id;
+ await this.$nextTick();
+ this.setSpaceTemplateProperties();
},
setSpaceTemplateProperties() {
if (this.spaceTemplate) {
@@ -419,7 +400,11 @@ export default {
}
},
previousStep() {
- this.stepper--;
+ if (this.stepper > 1) {
+ this.stepper--;
+ } else {
+ this.templateId = null;
+ }
},
nextStep(event) {
if (event) {
@@ -427,71 +412,24 @@ export default {
event.stopPropagation();
}
- if (this.displayedForm && this.displayedForm.reportValidity()) {
- this.stepper++;
- }
+ this.stepper++;
},
cancel() {
this.$refs.spaceFormDrawer.close();
},
- saveSpace(event) {
- if (event) {
- event.preventDefault();
- event.stopPropagation();
- }
-
+ saveSpace() {
if (this.spaceSaved || this.savingSpace) {
return;
}
this.savingSpace = true;
- if (this.space.id) {
- this.$spaceService.updateSpace({
- id: this.space.id,
- displayName: this.space.displayName,
- description: this.space.description,
- visibility: this.space.visibility,
- subscription: this.space.subscription,
- invitedMembers: this.space.invitedMembers,
+ this.space.templateId = this.templateId;
+ return this.$spaceService.createSpace(this.space)
+ .then(space => {
+ this.spaceSaved = true;
+ window.location.href = `${eXo.env.portal.context}/s/${space.id}`;
})
- .then(space => {
- Object.assign(this.spaceToUpdate, space, {managers: this.spaceToUpdate.managers}, {description: space.description || ''});
- this.spaceSaved = true;
-
- window.setTimeout(() => {
- this.$refs.spaceFormDrawer.close();
- }, 200);
- })
- .catch(e => {
- // eslint-disable-next-line no-console
- console.warn('Error updating space ', this.space, e);
- if (String(e).indexOf('SPACE_ALREADY_EXIST') >= 0) {
- this.displayAlert(this.$t('spacesList.error.spaceWithSameNameExists'), 'error');
- } else {
- this.displayAlert(this.$t('spacesList.error.unknownErrorWhenSavingSpace'), 'error');
- }
- })
- .finally(() => this.savingSpace = false);
- } else {
- this.space.templateId = this.templateId;
- this.$spaceService.createSpace(this.space)
- .then(space => {
- this.spaceSaved = true;
- window.location.href = `${eXo.env.portal.context}/s/${space.id}`;
- })
- .catch(e => {
- if (String(e).indexOf('SPACE_ALREADY_EXIST') >= 0) {
- this.displayAlert(this.$t('spacesList.error.spaceWithSameNameExists'), 'error');
- } else if (String(e).indexOf('INVALID_SPACE_NAME') >= 0) {
- this.displayAlert(this.$t('spacesList.error.InvalidSpaceName'), 'error');
- } else {
- this.displayAlert(this.$t('spacesList.error.unknownErrorWhenSavingSpace'), 'error');
- }
- })
- .finally(() => this.savingSpace = false);
- }
- },
- displayAlert(message, type) {
- this.$root.$emit('alert-message', message, type || 'success');
+ .catch(() => this.$root.$emit(this.$t('spacesList.error.unknownErrorWhenSavingSpace'), 'error'))
+ .finally(() => this.savingSpace = false);
},
},
};
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInvitation.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInvitation.vue
new file mode 100644
index 00000000000..1104fe2db67
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInvitation.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+ {{ $t('SpaceSettings.users.button.inviteInternalMembers') }}
+ {{ $t('SpaceSettings.users.button.inviteInternalMembers.description') }}
+
+
+
+ {{ invitedMembersSize }}
+
+
+
+
+
+ {{ $t('SpaceSettings.users.button.inviteByEmail') }}
+ {{ $t('SpaceSettings.users.button.inviteByEmail.description') }}
+
+
+
+ {{ externalInvitedUsersSize }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailDrawer.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailDrawer.vue
new file mode 100644
index 00000000000..c480f4c44c7
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailDrawer.vue
@@ -0,0 +1,229 @@
+
+
+
+
+ {{ $t('spacesList.title.usersToInvite') }}
+
+
+
+
+
+
+ {{ hintMessage }}
+
+
+
+ fa-check
+
+
+ fa-times
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('spacesList.label.cancel') }}
+
+
+ {{ $t('spacesList.button.add') }}
+
+
+
+
+
+
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailListItem.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailListItem.vue
new file mode 100644
index 00000000000..d11fbbda5df
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteEmailListItem.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+ fa-question
+
+
+
+
+ {{ email }}
+
+
+
+ {{ $t('SpaceSettings.invitation.alreadyInvitedWillBeResent') }}
+
+
+ {{ $t('SpaceSettings.invitation.invalidEmail') }}
+
+
+ {{ $t('spacesList.label.pending') }}
+
+
+
+
+
+
+ fa-trash
+
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUserListItem.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUserListItem.vue
new file mode 100644
index 00000000000..28409ed35a7
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUserListItem.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+ {{ fullName }}
+
+
+ {{ subtitle }}
+
+
+
+
+ fa-trash
+
+
+
+
+
\ No newline at end of file
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersDrawer.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersDrawer.vue
new file mode 100644
index 00000000000..c1bad8ace1b
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersDrawer.vue
@@ -0,0 +1,94 @@
+
+
+
+
+ {{ $t('spacesList.title.usersToInvite') }}
+
+
+
+
+
+
+
+
+ {{ $t('spacesList.label.cancel') }}
+
+
+ {{ $t('spacesList.button.add') }}
+
+
+
+
+
+
diff --git a/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersInput.vue b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersInput.vue
new file mode 100644
index 00000000000..59f172d4716
--- /dev/null
+++ b/webapp/src/main/webapp/vue-apps/space-form/components/SpaceFormInviteUsersInput.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/webapp/src/main/webapp/vue-apps/space-form/initComponents.js b/webapp/src/main/webapp/vue-apps/space-form/initComponents.js
index 221fb0f8e91..8a3f4ea6e26 100644
--- a/webapp/src/main/webapp/vue-apps/space-form/initComponents.js
+++ b/webapp/src/main/webapp/vue-apps/space-form/initComponents.js
@@ -16,10 +16,31 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import SpaceFormAccess from './components/SpaceFormAccess.vue';
+import SpaceFormAvatar from './components/SpaceFormAvatar.vue';
+import SpaceFormBanner from './components/SpaceFormBanner.vue';
import SpaceFormDrawer from './components/SpaceFormDrawer.vue';
+import SpaceFormInvitation from './components/SpaceFormInvitation.vue';
+
+import SpaceFormInviteEmailDrawer from './components/SpaceFormInviteEmailDrawer.vue';
+import SpaceFormInviteUsersDrawer from './components/SpaceFormInviteUsersDrawer.vue';
+
+import SpaceFormInviteUsersInput from './components/SpaceFormInviteUsersInput.vue';
+
+import SpaceFormInviteEmailListItem from './components/SpaceFormInviteEmailListItem.vue';
+import SpaceFormInviteUserListItem from './components/SpaceFormInviteUserListItem.vue';
const components = {
+ 'space-form-access': SpaceFormAccess,
+ 'space-form-avatar': SpaceFormAvatar,
+ 'space-form-banner': SpaceFormBanner,
'space-form-drawer': SpaceFormDrawer,
+ 'space-form-invitation': SpaceFormInvitation,
+ 'space-form-invite-email-drawer': SpaceFormInviteEmailDrawer,
+ 'space-form-invite-users-drawer': SpaceFormInviteUsersDrawer,
+ 'space-form-invite-email-list-item': SpaceFormInviteEmailListItem,
+ 'space-form-invite-user-list-item': SpaceFormInviteUserListItem,
+ 'space-form-invite-users-input': SpaceFormInviteUsersInput,
};
for (const key in components) {
diff --git a/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputEmailDrawer.vue b/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputEmailDrawer.vue
index 5e1c8bf371b..1af5ae25861 100644
--- a/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputEmailDrawer.vue
+++ b/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputEmailDrawer.vue
@@ -144,7 +144,7 @@ export default {
this.$root.$on('space-settings-invite-email', this.open);
},
beforeDestroy() {
- this.$root.$on('space-settings-invite-email', this.open);
+ this.$root.$off('space-settings-invite-email', this.open);
},
methods: {
open(goBackButton) {
diff --git a/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputUsersDrawer.vue b/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputUsersDrawer.vue
index 4ee05a34d9a..cc304822879 100644
--- a/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputUsersDrawer.vue
+++ b/webapp/src/main/webapp/vue-apps/space-invitation/components/drawer/SpaceInviteInputUsersDrawer.vue
@@ -115,7 +115,7 @@ export default {
this.$root.$on('space-settings-invite-member', this.open);
},
beforeDestroy() {
- this.$root.$on('space-settings-invite-member', this.open);
+ this.$root.$off('space-settings-invite-member', this.open);
},
methods: {
open(goBackButton) {
diff --git a/webapp/src/main/webapp/vue-apps/space-templates-management/main.js b/webapp/src/main/webapp/vue-apps/space-templates-management/main.js
index 3fa21b84f07..36c42ea67c7 100644
--- a/webapp/src/main/webapp/vue-apps/space-templates-management/main.js
+++ b/webapp/src/main/webapp/vue-apps/space-templates-management/main.js
@@ -36,11 +36,12 @@ const lang = eXo?.env.portal.language || 'en';
const url = `/social/i18n/locale.portlet.SpaceTemplatesManagement?lang=${lang}`;
const appId = 'SpaceTemplatesManagement';
-export function init() {
+export function init(isExternalFeatureEnabled) {
exoi18n.loadLanguageAsync(lang, url)
.then(i18n =>
Vue.createApp({
data: {
+ isExternalFeatureEnabled,
spacesCountByTemplates: null,
usersPermission: '*:/platform/users',
administratorsPermission: '*:/platform/administrators',
diff --git a/webapp/src/main/webapp/vue-apps/spaces-administration/main.js b/webapp/src/main/webapp/vue-apps/spaces-administration/main.js
index 566ca4672ea..5699af59bdd 100644
--- a/webapp/src/main/webapp/vue-apps/spaces-administration/main.js
+++ b/webapp/src/main/webapp/vue-apps/spaces-administration/main.js
@@ -31,7 +31,7 @@ if (extensionRegistry) {
}
}
-export function init() {
+export function init(isExternalFeatureEnabled) {
const appId = 'spacesAdministration';
const lang = eXo?.env?.portal?.language || 'en';
exoi18n.loadLanguageAsync(lang, [
@@ -42,6 +42,7 @@ export function init() {
])
.then(i18n => Vue.createApp({
data: {
+ isExternalFeatureEnabled,
spaceTemplates: null,
mainExtensions: [],
tableColumnExtensions: [],
diff --git a/webapp/src/main/webapp/vue-apps/spaces-list/main.js b/webapp/src/main/webapp/vue-apps/spaces-list/main.js
index 2c1ae8c2f5c..e63ed1b5643 100644
--- a/webapp/src/main/webapp/vue-apps/spaces-list/main.js
+++ b/webapp/src/main/webapp/vue-apps/spaces-list/main.js
@@ -28,11 +28,13 @@ const url = `/social/i18n/locale.portlet.social.SpacesListApplication?lang=${lan
const appId = 'spacesListApplication';
-export function init(filter, canCreateSpace) {
+export function init(filter, canCreateSpace, isExternalFeatureEnabled) {
exoi18n.loadLanguageAsync(lang, url).then(i18n => {
// init Vue app when locale ressources are ready
Vue.createApp({
data: {
+ canCreateSpace,
+ isExternalFeatureEnabled,
filter: filter || 'all',
invitationsCount: 0,
pendingCount: 0,