Skip to content

Commit

Permalink
feat: Add Space Template Form Drawers - MEED-7612 - Meeds-io/MIPs#150 (
Browse files Browse the repository at this point in the history
…#4121)

This change will add Two drawers to allow creating and editing a Space
Template.
  • Loading branch information
boubaker authored and exo-swf committed Oct 18, 2024
1 parent e6df321 commit 82dddc1
Show file tree
Hide file tree
Showing 27 changed files with 1,427 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public class SpaceTemplateTranslationPlugin extends TranslationPlugin {

public static final String OBJECT_TYPE = "spaceTemplate";

public static final String DESCRIPTION_FIELD_NAME = "description";
public static final String NAME_FIELD_NAME = "name";

public static final String TITLE_FIELD_NAME = "title";
public static final String DESCRIPTION_FIELD_NAME = "description";

@Autowired
protected SpaceTemplateService spaceTemplateService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ public void deleteSpaceTemplate(long templateId) throws ObjectNotFoundException
private void computeSpaceTemplateAttributes(SpaceTemplate spaceTemplate, Locale locale) {
spaceTemplate.setName(translationService.getTranslationLabelOrDefault(SpaceTemplateTranslationPlugin.OBJECT_TYPE,
spaceTemplate.getId(),
SpaceTemplateTranslationPlugin.TITLE_FIELD_NAME,
SpaceTemplateTranslationPlugin.NAME_FIELD_NAME,
locale));
spaceTemplate.setDescription(translationService.getTranslationLabelOrDefault(SpaceTemplateTranslationPlugin.OBJECT_TYPE,
spaceTemplate.getId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ public SpaceTemplate createSpaceTemplate(HttpServletRequest request,
@RequestBody
SpaceTemplate spaceTemplate) {
try {
return spaceTemplateService.createSpaceTemplate(spaceTemplate, request.getRemoteUser());
spaceTemplate = spaceTemplateService.createSpaceTemplate(spaceTemplate, request.getRemoteUser());
return getSpaceTemplate(request, spaceTemplate.getId());
} catch (IllegalArgumentException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
} catch (IllegalAccessException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ spaceTemplate.delete.error=An unknown error occurred while deleting template. Pl
spaceTemplate.label.delete=Delete
spaceTemplate.label.editLayout=Edit Layout
spaceTemplate.label.editProperties=Edit Properties
spaceTemplate.label.duplicate=Duplicate
spaceTemplate.label.templateMenu={0}
spaceTemplate.label.closeMenu=Close Menu
spaceTemplate.label.close=Close
Expand All @@ -31,3 +30,64 @@ spaceTemplate.label.confirmDeleteTitle=Delete space template?
spaceTemplate.label.confirmDeleteMessage=Would you like to delete space template: {0}
spaceTemplate.label.confirm=Confirm
spaceTemplate.label.cancel=Cancel
spaceTemplate.add.drawer.newTemplate=Add Space Template
spaceTemplate.add.drawer.editTemplate=Edit Space Template
spaceTemplate.nameLabel=Name
spaceTemplate.namePlaceholder=Give a name to your template
spaceTemplate.nameDrawerTitle=Space Template Name
spaceTemplate.nameExceedsMaxLength=Name length should be less than {0}
spaceTemplate.descriptionLabel=Description
spaceTemplate.descriptionPlaceholder=Explain how this template can be used
spaceTemplate.descriptionDrawerTitle=Space Template Description
spaceTemplate.descriptionExceedsMaxLength=The description length should be less than {0}
spaceTemplate.start=Start
spaceTemplate.mandatoryCreationStep=Mandatory Creation steps
spaceTemplate.editName=Edit name, description or icon
spaceTemplate.mandatoryCreationStepDescription=To create a space, creators must complete the following:
spaceTemplate.mandatoryCreationStepName=Name
spaceTemplate.mandatoryCreationStepInvitation=Invitation
spaceTemplate.mandatoryCreationStepProperties=Properties (Description, logo, banner)
spaceTemplate.mandatoryCreationStepAccessControl=Access Control
spaceTemplate.mandatoryCreationStepNameOrInvitationMandatory=Name or Invitation must be selected at minimum
spaceTemplate.defaultSpaceConfigurationStep=Default Space Configuration
spaceTemplate.defaultSpaceConfigurationStepDescription=Select the default configuration for space created using this template.
spaceTemplate.defaultSpaceConfigurationStepBanner=Default {0}Banner{1}
spaceTemplate.defaultSpaceConfigurationStepBannerTooltip=Why using a banner?
spaceTemplate.defaultSpaceConfigurationStepBannerHelp1=The banner can be used to feature your space in its public site. It also can be used in any pages of your space.
spaceTemplate.defaultSpaceConfigurationStepBannerHelp2=Recommended banner size: 1280 x 175 pixels
spaceTemplate.defaultSpaceConfigurationStepBannerCropperDrawer=Sapce Template Banner
spaceTemplate.defaultSpaceConfigurationStepBannerButtonTooltip=Change Banner
spaceTemplate.defaultSpaceConfigurationStepAccess=Access
spaceTemplate.defaultSpaceConfigurationStepAccessOpen=Open
spaceTemplate.defaultSpaceConfigurationStepAccessOpenDescription=Any user can join the space. No approval required.
spaceTemplate.defaultSpaceConfigurationStepAccessValidation=Request Approval
spaceTemplate.defaultSpaceConfigurationStepAccessValidationDescription=User can request to join. Membership must be approved by an admin
spaceTemplate.defaultSpaceConfigurationStepAccessClosed=Invite Only
spaceTemplate.defaultSpaceConfigurationStepAccessClosedDescription=Users can't request to join. Admins must send invitations
spaceTemplate.defaultSpaceConfigurationStepVisibility=Visibility
spaceTemplate.defaultSpaceConfigurationStepVisibilityListed=Listed
spaceTemplate.defaultSpaceConfigurationStepVisibilityListedDescription=The space is visible in the directory
spaceTemplate.defaultSpaceConfigurationStepVisibilityUnlisted=Unlisted
spaceTemplate.defaultSpaceConfigurationStepVisibilityUnlistedDescription=The space is not listed in the space directory
spaceTemplate.permissionsStep=Permissions
spaceTemplate.permissionsStepDescription1=Permissions are managed using the {0}Spaces Management Page{1}.
spaceTemplate.permissionsStepDescription2=Yet, you can specify permissions for spaces created using this template.
spaceTemplate.permissionsStepCreateSpacePermissionLabel=Who can create spaces?
spaceTemplate.permissionsStepEditSpaceLayoutPermissionLabel=Who can edit navigation?
spaceTemplate.permissionsStepIsSpaceEditorialLabel=Are spaces editorial ones?
spaceTemplate.permissionsStepIsSpaceEditorialDescription=Only admins and content writers can add contents
spaceTemplate.permissionsStepDeleteSpacePermissionLabel=Who can delete spaces?
spaceTemplate.permissionsStepUsers=Users
spaceTemplate.permissionsStepAdministrators=Administrators
spaceTemplate.permissionsStepGroupMembers=Group Members
spaceTemplate.permissionsStepSpaceAdmins=Space Admins
spaceTemplate.groupSuggester.placeholder=Enter group
spaceTemplate.groupSuggester.noData=No data
spaceTemplate.previous=Previous
spaceTemplate.cancel=Cancel
spaceTemplate.next=Next
spaceTemplate.create=Create
spaceTemplate.update=Update
spaceTemplate.spaceTemplateCreatedSuccessfully=Space template created successfully
spaceTemplate.spaceTemplateUpdatedSuccessfully=Space template updated successfully
spaceTemplate.bannerImage=Banner Image
10 changes: 10 additions & 0 deletions webapp/src/main/webapp/WEB-INF/gatein-resources.xml
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,13 @@
<additional-module>ImageCropper</additional-module>
</portlet-skin>

<portlet-skin>
<application-name>social</application-name>
<portlet-name>SpaceTemplateManagement</portlet-name>
<skin-name>Enterprise</skin-name>
<additional-module>ImageCropper</additional-module>
</portlet-skin>

<portlet-skin>
<application-name>social</application-name>
<portlet-name>SpaceTopbarMenu</portlet-name>
Expand Down Expand Up @@ -2069,6 +2076,9 @@
<depends>
<module>applicationToolbarComponent</module>
</depends>
<depends>
<module>imageCropper</module>
</depends>
<depends>
<module>eXoVueI18n</module>
</depends>
Expand Down
Binary file not shown.
2 changes: 1 addition & 1 deletion webapp/src/main/webapp/js/lib/jquery.atwho.js
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ EditableController = (function(superClass) {
EditableController.prototype._getRange = function() {
var sel;
sel = this.app.window.getSelection();
if (sel.rangeCount > 0) {
if (sel?.rangeCount) {
return sel.getRangeAt(0);
}
};
Expand Down
7 changes: 6 additions & 1 deletion webapp/src/main/webapp/js/suggester.js
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,12 @@
.on('click', '.remove', function(e) {
$(this).closest('[data-atwho-at-query]').remove();
});
if (range = this._getRange()) {
try {
range = this._getRange()
} catch (e) {
return;
}
if (range) {
if (this.query.el.length) {
range.setEndAfter(this.query.el[0]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,14 @@
:close="!disabled"
class="identitySuggesterItem"
@click:close="remove(item)">
<v-icon
v-if="item.providerId === 'group'"
color="white"
class="me-2">
fa-users
</v-icon>
<v-avatar
v-else
:class="{
'spaceAvatar': item.providerId === 'space',
}"
Expand All @@ -80,8 +87,13 @@
</template>

<template slot="item" slot-scope="{item}">
<v-list-item-icon
v-if="item?.providerId === 'group'"
class="me-4">
<v-icon size="16">fa-users</v-icon>
</v-list-item-icon>
<v-list-item-avatar
v-if="item?.profile?.avatarUrl"
v-else-if="item?.profile?.avatarUrl"
:class="{
'spaceAvatar': item?.providerId === 'space',
}"
Expand Down
5 changes: 4 additions & 1 deletion webapp/src/main/webapp/vue-apps/common/js/IdentityService.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ export function getIdentityById(identityId, expand) {
}

export function getIdentityByProviderIdAndRemoteId(providerId, remoteId) {
return fetch(`${eXo.env.portal.context}/${eXo.env.portal.rest}/v1/social/identities/${providerId}/${remoteId}`, {
const url = remoteId.includes('/') ?
`${eXo.env.portal.context}/${eXo.env.portal.rest}/v1/social/identities/byParams?providerId=${providerId}&remoteId=${remoteId}`
: `${eXo.env.portal.context}/${eXo.env.portal.rest}/v1/social/identities/${providerId}/${remoteId}`;
return fetch(url, {
method: 'GET',
credentials: 'include',
}).then(resp => {
Expand Down
5 changes: 2 additions & 3 deletions webapp/src/main/webapp/vue-apps/common/js/SuggesterService.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,14 @@ function searchGroups(filter, groupMember, groupType, items, allGroupsForAdmin,

return fetch(`/portal/rest/v1/groups/treeMembers?${params}`, { credentials: 'include' })
.then(resp => resp && resp.ok && resp.json())
.catch((e) => {
errorCallback(e);
})
.catch(errorCallback)
.then(data => {
data.entities.forEach((item) => {
items.push({
id: `group:${item.groupName}`,
remoteId: item.groupName,
spaceId: item.id,
groupId: item.id,
providerId: 'group',
displayName: item.label,
profile: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
ref="list"
:keyword="keyword" />
</v-card>
<space-templates-form-drawer />
<space-templates-management-name-drawer />
<space-templates-management-characteristics-drawer />
</v-app>
</template>
<script>
Expand Down
Loading

0 comments on commit 82dddc1

Please sign in to comment.