Skip to content
Snippets Groups Projects
Commit a971f45e authored by Makhtar DIAGNE's avatar Makhtar DIAGNE
Browse files

[TECH] Change categories format and fix display

parent c2971f7c
No related branches found
No related tags found
1 merge request!1Feature/design/1
Showing
with 34 additions and 71 deletions
......@@ -41,7 +41,6 @@ import java.util.Map;
import fr.gouv.vitamui.commons.rest.client.configuration.RestClientConfiguration;
import fr.gouv.vitamui.ui.commons.property.BaseUrl;
import fr.gouv.vitamui.ui.commons.property.PortalCategoryConfig;
import fr.gouv.vitamui.ui.commons.property.UIProperties;
import lombok.Getter;
import lombok.Setter;
......@@ -83,5 +82,5 @@ public class UIPropertiesImpl implements UIProperties {
/**
* Map of application categories (key: category ID, value: category properties)
*/
private Map<String, PortalCategoryConfig> portalCategories;
private Map<String, Map<String,Object>> portalCategories;
}
package fr.gouv.vitamui.ui.commons.property;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PortalCategoryConfig {
public String title;
public Boolean displayTitle;
public Integer order;
}
......@@ -64,5 +64,5 @@ public interface UIProperties {
public Map<String, String> getCustomer();
public Map<String, PortalCategoryConfig> getPortalCategories();
public Map<String, Map<String,Object>> getPortalCategories();
}
......@@ -41,6 +41,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
......@@ -64,7 +65,6 @@ import fr.gouv.vitamui.commons.rest.client.ExternalHttpContext;
import fr.gouv.vitamui.commons.security.client.logout.CasLogoutUrl;
import fr.gouv.vitamui.iam.external.client.ApplicationExternalRestClient;
import fr.gouv.vitamui.iam.external.client.IamExternalRestClientFactory;
import fr.gouv.vitamui.ui.commons.property.PortalCategoryConfig;
import fr.gouv.vitamui.ui.commons.property.UIProperties;
/**
......@@ -118,11 +118,18 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
query.addCriterion(new Criterion("filterApp", filterApp, CriterionOperator.EQUALS));
Collection<ApplicationDto> applications = client.getAll(context, Optional.of(query.toJson()));
Map<String, PortalCategoryConfig> categories = properties.getPortalCategories();
Map<String, Map<String,Object>> categories = properties.getPortalCategories();
Collection<Map<String,Object>> listCategories = new ArrayList<>();
categories.keySet().stream().forEach(category -> {
Map<String,Object> categoryProperties = new HashMap<>();
categoryProperties.putAll(categories.get(category));
categoryProperties.put("identifier", category);
listCategories.add(categoryProperties);
});
Map<String, Object> portalConfig = new HashMap<>();
portalConfig.put(CommonConstants.APPLICATION_CONFIGURATION, applications);
portalConfig.put(CommonConstants.CATEGORY_CONFIGURATION, categories);
portalConfig.put(CommonConstants.CATEGORY_CONFIGURATION, listCategories);
return portalConfig;
}
......
......@@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.isNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
......@@ -28,7 +29,6 @@ import fr.gouv.vitamui.commons.security.client.logout.CasLogoutUrl;
import fr.gouv.vitamui.iam.external.client.ApplicationExternalRestClient;
import fr.gouv.vitamui.ui.commons.config.UIPropertiesImpl;
import fr.gouv.vitamui.ui.commons.property.BaseUrl;
import fr.gouv.vitamui.ui.commons.property.PortalCategoryConfig;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ServerIdentityAutoConfiguration.class)
......@@ -43,9 +43,6 @@ public class ApplicationServiceTest extends ServiceTest<ApplicationDto> {
@Mock
private BaseUrl baseUrl;
@Mock
private Map<String, PortalCategoryConfig> categoriesConfig;
@Mock
private CasLogoutUrl casLogoutUrl;
......@@ -58,8 +55,6 @@ public class ApplicationServiceTest extends ServiceTest<ApplicationDto> {
Mockito.when(baseUrl.getPortal()).thenReturn("http://portal.vitamui.com");
Mockito.when(baseUrl.getAdminIdentity()).thenReturn("http://identity.vitamui.com");
Mockito.when(baseUrl.getIdentity()).thenReturn("http://identity.vitamui.com");
Mockito.when(properties.getPortalCategories()).thenReturn(categoriesConfig);
Mockito.when(categoriesConfig.size()).thenReturn(2);
Mockito.when(casLogoutUrl.getValueWithRedirection(any())).thenReturn("http://identity.vitamui.com");
Mockito.when(factory.getApplicationExternalRestClient()).thenReturn(client);
service = new ApplicationService(properties, casLogoutUrl, factory);
......@@ -74,6 +69,10 @@ public class ApplicationServiceTest extends ServiceTest<ApplicationDto> {
public void testGetApplications() {
final List<ApplicationDto> applicationsMock = buildCollectionDto("USERS", "CUSTOMERS");
Mockito.when(client.getAll(isNull(), any(Optional.class))).thenReturn(applicationsMock);
Map<String, Map<String, Object>> categoriesConfig = new HashMap<>();
categoriesConfig.put("users", new HashMap<>());
categoriesConfig.put("management", new HashMap<>());
Mockito.when(properties.getPortalCategories()).thenReturn(categoriesConfig);
Map<String, Object> config = service.getApplications(null, true);
Assert.assertNotNull(config);
......@@ -83,7 +82,7 @@ public class ApplicationServiceTest extends ServiceTest<ApplicationDto> {
final Collection<String> applicationsId = applications.stream().map(a -> a.getId()).collect(Collectors.toList());
assertThat(applicationsId).containsExactly("USERS", "CUSTOMERS");
final Map<String, PortalCategoryConfig> categories = (Map<String, PortalCategoryConfig>) config.get(CommonConstants.CATEGORY_CONFIGURATION);
final Collection<Map<String, Object>> categories = (Collection<Map<String, Object>>) config.get(CommonConstants.CATEGORY_CONFIGURATION);
Assert.assertNotNull(categories);
assertThat(categories.size()).isEqualTo(2);
}
......
......@@ -66,9 +66,9 @@ export class ApplicationService {
/*
* Categories of the application.
*/
set categories(categories: Category[]) { this.categories = categories; }
set categories(categories: Category[]) { this._categories = categories; }
get categories(): Category[] { return this.categories; }
get categories(): Category[] { return this._categories; }
// tslint:disable-next-line:variable-name
_categories: Category[];
......@@ -85,7 +85,7 @@ export class ApplicationService {
catchError(() => of({ APPLICATION_CONFIGURATION: [], CATEGORY_CONFIGURATION: {}})),
map((applicationInfo: ApplicationInfo) => {
this._applications = applicationInfo.APPLICATION_CONFIGURATION;
this._categories = applicationInfo.CATEGORY_CONFIGURATION;
this._categories = this.sortCategories(applicationInfo.CATEGORY_CONFIGURATION);
return applicationInfo;
})
);
......@@ -130,4 +130,11 @@ export class ApplicationService {
return a.position < b.position ? -1 : 1;
});
}
private sortCategories(categories: Category[]): Category[] {
// Sort apps inside categories
return categories.sort((a, b) => {
return a.order > b.order ? 1 : -1;
});
}
}
......@@ -119,10 +119,10 @@ export class ApplicationSelectContentComponent {
}
this.categoryList.forEach(category => {
if (category.id === 'default') {
if (category.identifier === 'default') {
category.applications = sortedApps.filter((app) => !identifiers.includes(app.category));
} else {
category.applications = sortedApps.filter((app) => app.category === category.id);
category.applications = sortedApps.filter((app) => app.category === category.identifier);
}
});
......
......@@ -31,7 +31,7 @@
</ng-container>
<ng-template #displayMats>
<mat-tab-group animationDuration="300ms" mat-align-tabs="start" [selectedIndex]="tabSelectedIndex" (selectedTabChange)="changeTabFocus($event)">
<mat-tab *ngFor="let category of appMap | keyvalue" [label]="category.key.name">
<mat-tab *ngFor="let category of appMap | keyvalue" [label]="category.key.title">
<mat-selection-list
class="py-3"
(selectionChange)="openApplication($event.option.value);">
......
......@@ -6,10 +6,8 @@
</a>
<ng-template #button>
<div class="app-box clickable archive-tile" [class.modal-app-box]="isModalMenu"
<div class="app-box clickable archive-tile category-app" [class.modal-app-box]="isModalMenu"
[class.archive-tile]="application?.identifier === 'ARCHIVE_APP'"
[class.settings-app]="application?.category === 'settings'"
[class.admin-app]="application?.category === 'administrators'" [class.user-app]="application?.category === 'users'"
[class.highlight]="application?.hasHighlight" [vitamuiCommonTooltip]="application?.tooltip"
[vitamuiCommonTooltipShowDelay]="800" id="{{ application.identifier }}">
......
......@@ -29,7 +29,7 @@
}
}
.user-app {
.category-app {
i {
color: var(--vitamui-primary);
......@@ -44,39 +44,6 @@
}
}
.admin-app {
i {
color: var(--vitamui-primary-light);
&.chevron-icon {
font-size: 24px;
margin-left: auto;
}
}
&.highlight {
border: 1px solid var(--vitamui-primary-light);
}
}
.settings-app {
i {
color: var(--vitamui-secondary);
&.chevron-icon {
font-size: 24px;
margin-left: auto;
}
}
&.highlight {
border: 1px solid var(--vitamui-secondary);
}
}
.chevron-icon {
font-size: 24px;
margin-left: auto;
......
<div class="content">
<mat-tab-group>
<div *ngFor="let category of appMap | keyvalue">
<mat-tab label="{{category.key.name}}">
<mat-tab label="{{category.key.title}}">
<div class="row category">
<div class="col-sm-12 col-md-6 col-lg-4 col-xl-3" *ngFor="let application of category.value">
<mat-card (click)="applicationClick.emit(application)">
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment