Unverified Commit 75e244bf authored by Le Roy Loïc's avatar Le Roy Loïc Committed by GitHub
Browse files

Merge pull request #48 from ProgrammeVitam/cea_app_referential_pr5

[CEA] Suite des corrections d'anomalies sur les applications référentiel (lot1)
parents 2cba1814 c659d029
......@@ -40,9 +40,11 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -50,6 +52,8 @@ import org.springframework.http.HttpStatus;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import fr.gouv.vitam.access.external.client.AdminExternalClient;
......@@ -184,8 +188,26 @@ public class VitamContextService {
final List<ContextVitamDto> listOfContexts = convertContextsToModelOfCreation(contextDto);
final ObjectMapper mapper = new ObjectMapper();
final JsonNode node = mapper.convertValue(listOfContexts, JsonNode.class);
LOGGER.debug("The json for creation access contract, sent to Vitam {}", node);
// The "accessContracts" and "ingestContracts" in the permissions must be rename to "AccessContracts" and "IngestContracts" to be saved in Vitam
final ArrayNode arrayNode = (ArrayNode) node;
arrayNode.forEach(contextNode -> {
final ArrayNode permissionsNode = (ArrayNode) contextNode.get("Permissions");
if (permissionsNode != null) {
permissionsNode.forEach(permissionNode -> {
final ObjectNode objectNode = (ObjectNode) permissionNode;
if (permissionNode.get("accessContracts") != null) {
objectNode.set("AccessContracts", permissionNode.get("accessContracts"));
objectNode.remove("accessContracts");
}
if (permissionNode.get("ingestContracts") != null) {
objectNode.set("IngestContracts", permissionNode.get("ingestContracts"));
objectNode.remove("ingestContracts");
}
});
}
});
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
mapper.writeValue(byteArrayOutputStream, node);
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
......
......@@ -75,7 +75,7 @@ public class ContextConverter {
PermissionDto permissionDto = new PermissionDto();
permissionDto.setTenant(permission.getTenant().toString());
permissionDto.setAccessContracts(permission.getAccessContract());
permissionDto.setAccessContracts(permission.getAccessContract());
permissionDto.setIngestContracts(permission.getIngestContract());
permissions.add(permissionDto);
}
......
......@@ -52,7 +52,6 @@ import {ContextCreateComponent} from './context-create.component';
import {ContextCreateValidators} from './context-create.validators';
import {ContextEditPermissionModule} from './context-edit-permission/context-edit-permission.module';
@NgModule({
imports: [
CommonModule,
......
......@@ -33,6 +33,10 @@
<mat-select [(value)]="permission.accessContracts" placeholder="Contrats d'accès" (selectionChange)="onContractSelect()"
i18n-placeholder="Application@@accessContractsFormApplicationPlaceholder" panelclass="vitamui-mat-select"
multiple required>
<vitamui-select-all-option [value]="permission.accessContracts" [values]="getAccessContractKeys(permission.tenant)"
title="Tous les contrats d'accès" i18n-title="Application@@accessContractsFormApplicationSelectAll"
(toggleSelection)="permission.accessContracts = $event">
</vitamui-select-all-option>
<mat-option *ngFor='let contract of accessContracts.get(permission.tenant)' [value]="contract.key">
{{contract.label}}
</mat-option>
......@@ -47,6 +51,10 @@
<mat-select [(value)]="permission.ingestContracts" placeholder="Contrats d'entrée" (selectionChange)="onContractSelect()"
i18n-placeholder="Application@@accessContractsFormApplicationPlaceholder" panelclass="vitamui-mat-select"
multiple required>
<vitamui-select-all-option [value]="permission.ingestContracts" [values]="getIngestContractKeys(permission.tenant)"
title="Tous les contrats d'entrée" i18n-title="Application@@ingestContractsFormApplicationSelectAll"
(toggleSelection)="permission.ingestContracts = $event">
</vitamui-select-all-option>
<mat-option *ngFor='let contract of ingestContracts.get(permission.tenant)' [value]="contract.key">
{{contract.label}}
</mat-option>
......
......@@ -165,4 +165,13 @@ export class ContextEditPermissionComponent implements ControlValueAccessor, OnI
this.disabled = isDisabled;
}
getAccessContractKeys(tenant: string): string[] {
const contracts: Option[] = this.accessContracts.get(tenant);
return contracts != null ? contracts.map(item => item.key) : [];
}
getIngestContractKeys(tenant: string) {
const contracts: Option[] = this.ingestContracts.get(tenant);
return contracts != null ? contracts.map(item => item.key) : [];
}
}
......@@ -45,6 +45,7 @@ import {MatSelectModule} from '@angular/material/select';
import {MatSnackBarModule} from '@angular/material/snack-bar';
import {MatTooltipModule} from '@angular/material/tooltip';
import {VitamUILibraryModule} from 'projects/vitamui-library/src/public-api';
import {VitamUICommonModule} from 'ui-frontend-common';
import {ContextEditPermissionComponent} from './context-edit-permission.component';
......@@ -59,7 +60,8 @@ import {ContextEditPermissionComponent} from './context-edit-permission.componen
MatSnackBarModule,
MatTooltipModule,
ReactiveFormsModule,
VitamUICommonModule
VitamUICommonModule,
VitamUILibraryModule,
],
declarations: [
ContextEditPermissionComponent
......
......@@ -160,6 +160,7 @@ export class ContextInformationTabComponent {
}
resetForm(context: Context) {
this.statusControl.setValue(context.status === 'ACTIVE');
this.form.reset(context, {emitEvent: false});
}
}
......@@ -34,7 +34,7 @@
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*/
import {Component, EventEmitter, HostListener, Input, OnInit, Output, ViewChild} from '@angular/core';
import {AfterViewInit, Component, EventEmitter, HostListener, Input, Output, ViewChild} from '@angular/core';
import {MatDialog} from '@angular/material/dialog';
import {MatTab, MatTabGroup, MatTabHeader} from '@angular/material/tabs';
import {ConfirmActionComponent, Context} from 'projects/vitamui-library/src/public-api';
......@@ -49,7 +49,7 @@ import {ContextPermissionTabComponent} from './context-permission-tab/context-pe
templateUrl: './context-preview.component.html',
styleUrls: ['./context-preview.component.scss']
})
export class ContextPreviewComponent implements OnInit {
export class ContextPreviewComponent implements AfterViewInit {
@Output() previewClose: EventEmitter<any> = new EventEmitter();
@Input() context: Context;
......@@ -73,10 +73,7 @@ export class ContextPreviewComponent implements OnInit {
constructor(private matDialog: MatDialog, private contextService: ContextService) {
}
ngOnInit() {
}
ngAfterViewInit = () => {
ngAfterViewInit() {
this.tabs._handleClick = this.interceptTabChange.bind(this);
this.tabLinks[0] = this.infoTab;
this.tabLinks[1] = this.permsTab;
......
......@@ -61,6 +61,7 @@ export class ProbativeValueCreateComponent implements OnInit {
this.form = this.formBuilder.group({
unitId: [null, Validators.required],
accessContract: this.accessContractSelect,
usage: [null, Validators.required],
version: [null, Validators.required]
});
......
......@@ -28,17 +28,17 @@
<tr class="vitamui-table-row">
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)">
<i class="vitamui-icon vitamui-icon-probativeValue vitamui-row-icon status-badge"
[ngClass]="{'status-badge-green': probativeVlaueStatus(probativeValue) == 'OK', 'status-badge-grey':probativeVlaueStatus(probativeValue) == 'STARTED',
'status-badge-orange': probativeVlaueStatus(probativeValue) == 'WARNING', 'status-badge-red': probativeVlaueStatus(probativeValue) == 'KO' || probativeVlaueStatus(probativeValue) == 'FATAL' }"></i>
[ngClass]="{'status-badge-green': probativeValueStatus(probativeValue) == 'OK', 'status-badge-grey':probativeValueStatus(probativeValue) == 'STARTED',
'status-badge-orange': probativeValueStatus(probativeValue) == 'WARNING', 'status-badge-red': probativeValueStatus(probativeValue) == 'KO' || probativeValueStatus(probativeValue) == 'FATAL' }"></i>
</td>
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)">{{ probativeValue?.id }}</td>
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)">{{ probativeValue?.dateTime | date: 'dd/MM/yyyy' }}
</td>
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)"
[ngClass]="{'text-green': probativeVlaueStatus(probativeValue) == 'OK', 'text-grey':probativeVlaueStatus(probativeValue) == 'STARTED',
'text-orange': probativeVlaueStatus(probativeValue) == 'WARNING', 'text-red': probativeVlaueStatus(probativeValue) == 'KO' || probativeVlaueStatus(probativeValue) == 'FATAL' }">
{{ probativeVlaueStatus(probativeValue) }}</td>
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)">{{ probativeVlaueMessage(probativeValue) }}</td>
[ngClass]="{'text-green': probativeValueStatus(probativeValue) == 'OK', 'text-grey':probativeValueStatus(probativeValue) == 'STARTED',
'text-orange': probativeValueStatus(probativeValue) == 'WARNING', 'text-red': probativeValueStatus(probativeValue) == 'KO' || probativeValueStatus(probativeValue) == 'FATAL' }">
{{ probativeValueStatus(probativeValue) }}</td>
<td class="clickable" (click)="probativeValueClick.emit(probativeValue)">{{ probativeValueMessage(probativeValue) }}</td>
</tr>
</ng-container>
</tbody>
......
......@@ -7,6 +7,11 @@ import {ProbativeValueService} from '../probative-value.service';
const FILTER_DEBOUNCE_TIME_MS = 400;
export class ProbativeValueFilters {
startDate: string;
endDate: string;
}
@Component({
selector: 'app-probative-value-list',
templateUrl: './probative-value-list.component.html',
......@@ -23,6 +28,15 @@ export class ProbativeValueListComponent extends InfiniteScrollTable<any> implem
// tslint:disable-next-line:variable-name
private _searchText: string;
@Input('filters')
set filters(filters: ProbativeValueFilters) {
this._filters = filters;
this.filterChange.next(filters);
}
// tslint:disable-next-line:variable-name
private _filters: ProbativeValueFilters;
loaded = false;
orderBy = '#id';
......@@ -30,6 +44,7 @@ export class ProbativeValueListComponent extends InfiniteScrollTable<any> implem
private readonly searchChange = new Subject<string>();
private readonly orderChange = new Subject<string>();
private readonly filterChange = new Subject<any>();
@Output() probativeValueClick = new EventEmitter<any>();
......@@ -46,29 +61,38 @@ export class ProbativeValueListComponent extends InfiniteScrollTable<any> implem
DEFAULT_PAGE_SIZE,
this.orderBy,
Direction.ASCENDANT,
JSON.stringify(this.buildProbativeVlaueCriteriaFromSearch())))
JSON.stringify(this.buildProbativeValueCriteriaFromSearch())))
.subscribe((data: any[]) => {
this.dataSource = data;
});
const searchCriteriaChange = merge(this.searchChange, this.orderChange)
const searchCriteriaChange = merge(this.searchChange, this.orderChange, this.filterChange)
.pipe(debounceTime(FILTER_DEBOUNCE_TIME_MS));
searchCriteriaChange.subscribe(() => {
const query: any = this.buildProbativeVlaueCriteriaFromSearch();
console.log('query: ', query);
const query: any = this.buildProbativeValueCriteriaFromSearch();
const pageRequest = new PageRequest(0, DEFAULT_PAGE_SIZE, this.orderBy, this.direction, JSON.stringify(query));
this.search(pageRequest);
});
}
buildProbativeVlaueCriteriaFromSearch() {
buildProbativeValueCriteriaFromSearch() {
const criteria: any = {};
criteria.evTypeProc = 'AUDIT';
criteria.evType = 'EXPORT_PROBATIVE_VALUE';
if (this._searchText !== undefined && this._searchText.length > 0) {
criteria['#id'] = this._searchText;
}
if (this._filters) {
if (this._filters.startDate) {
criteria.evDateTime_Start = this._filters.startDate;
}
if (this._filters.endDate) {
criteria.evDateTime_End = this._filters.endDate;
}
}
return criteria;
}
......@@ -76,23 +100,24 @@ export class ProbativeValueListComponent extends InfiniteScrollTable<any> implem
this.updatedData.unsubscribe();
}
searchProbativeVlaueOrdered() {
this.search(new PageRequest(0, DEFAULT_PAGE_SIZE, this.orderBy, Direction.ASCENDANT));
searchProbativeValueOrdered() {
const query: any = this.buildProbativeValueCriteriaFromSearch();
this.search(new PageRequest(0, DEFAULT_PAGE_SIZE, this.orderBy, Direction.ASCENDANT, JSON.stringify(query)));
}
emitOrderChange() {
this.orderChange.next();
}
probativeVlaueStatus(probativeVlaue: any): string {
return (probativeVlaue.events !== undefined && probativeVlaue.events.length !== 0) ?
probativeVlaue.events[probativeVlaue.events.length - 1].outcome :
probativeVlaue.outcome;
probativeValueStatus(probativeValue: any): string {
return (probativeValue.events !== undefined && probativeValue.events.length !== 0) ?
probativeValue.events[probativeValue.events.length - 1].outcome :
probativeValue.outcome;
}
probativeVlaueMessage(probativeVlaue: any): string {
return (probativeVlaue.events !== undefined && probativeVlaue.events.length !== 0) ?
probativeVlaue.events[probativeVlaue.events.length - 1].outMessage :
probativeVlaue.outMessage;
probativeValueMessage(probativeValue: any): string {
return (probativeValue.events !== undefined && probativeValue.events.length !== 0) ?
probativeValue.events[probativeValue.events.length - 1].outMessage :
probativeValue.outMessage;
}
}
<mat-sidenav-container [autosize]="true" [hasBackdrop]="false">
<mat-sidenav #panel mode="side" position="end" [fixedInViewport]="true">
<app-probative-value-preview *ngIf="openedItem" (previewClose)="closePanel()" [probativeValue]="openedItem"></app-probative-value-preview>
</mat-sidenav>
<mat-sidenav #panel mode="side" position="end" [fixedInViewport]="true">
<app-probative-value-preview *ngIf="openedItem" (previewClose)="closePanel()" [probativeValue]="openedItem">
</app-probative-value-preview>
</mat-sidenav>
<mat-sidenav-content>
<mat-sidenav-content>
<div class="vitamui-header">
<div class="vitamui-container">
<vitamui-common-navbar [appId]="appId" (tenantSelect)="changeTenant($event)" [hideCustomerMenu]="true"></vitamui-common-navbar>
<vitamui-common-navbar [appId]="appId" (tenantSelect)="changeTenant($event)" [hideCustomerMenu]="true">
</vitamui-common-navbar>
<h2>
Rechercher mes <strong>Relevés de valeur probante</strong>
......@@ -17,14 +19,16 @@
<div class="controls">
<div class="search-bar-filters">
<vitamui-common-search-bar #searchBar name="probativeVlaue-search" (search)="onSearchSubmit($event)"
placeholder="Identifiant de relevé, identifiant d'UA" i18n-placeholder="@@probativeValueSearchPlaceholder">
<vitamui-common-search-bar #searchBar name="probativeValue-search"
(search)="onSearchSubmit($event)" placeholder="Identifiant de relevé, identifiant d'UA"
i18n-placeholder="@@probativeValueSearchPlaceholder">
</vitamui-common-search-bar>
<div class="reset-filters" (click)="resetFilters()">Effacer les filtres et la recherche</div>
</div>
<div class="actions">
<button class="btn secondary" (click)="openCreateProbativeVlaueDialog()">
<i class="vitamui-icon vitamui-icon-probativeVlaue btn-create"></i> <span>Lancer un relevé</span>
<button class="btn secondary" (click)="openCreateProbativeValueDialog()">
<i class="vitamui-icon vitamui-icon-probativeValue btn-create"></i> <span>Lancer un
relevé</span>
</button>
</div>
......@@ -65,8 +69,9 @@
</div>
</div>
<div class="vitamui-body vitamui-container">
<app-probative-value-list (probativeValueClick)="showProbativeValue($event)" [search]="search"></app-probative-value-list>
<app-probative-value-list (probativeValueClick)="showProbativeValue($event)" [search]="search"
[filters]="filters"></app-probative-value-list>
</div>
</mat-sidenav-content>
</mat-sidenav-container>
</mat-sidenav-container>
\ No newline at end of file
......@@ -20,7 +20,7 @@ export class ProbativeValueComponent extends SidenavPage<Event> implements OnIni
filters: any = {};
@ViewChild(SearchBarComponent, {static: true}) searchBar: SearchBarComponent;
@ViewChild(ProbativeValueListComponent, {static: true}) probativeVlaueListComponent: ProbativeValueListComponent;
@ViewChild(ProbativeValueListComponent, {static: true}) probativeValueListComponent: ProbativeValueListComponent;
constructor(
public dialog: MatDialog,
......@@ -35,12 +35,20 @@ export class ProbativeValueComponent extends SidenavPage<Event> implements OnIni
endDate: null
});
this.dateRangeFilterForm.valueChanges.subscribe((value) => {
this.filters.dateRange = value;
this.dateRangeFilterForm.controls.startDate.valueChanges.subscribe(value => {
this.filters.startDate = value;
this.probativeValueListComponent.filters = this.filters;
});
this.dateRangeFilterForm.controls.endDate.valueChanges.subscribe((value: Date) => {
if (value) {
value.setDate(value.getDate() + 1);
}
this.filters.endDate = value;
this.probativeValueListComponent.filters = this.filters;
});
}
openCreateProbativeVlaueDialog() {
openCreateProbativeValueDialog() {
const dialogRef = this.dialog.open(ProbativeValueCreateComponent, {
panelClass: 'vitamui-modal',
disableClose: true
......@@ -53,10 +61,10 @@ export class ProbativeValueComponent extends SidenavPage<Event> implements OnIni
}
private refreshList() {
if (!this.probativeVlaueListComponent) {
if (!this.probativeValueListComponent) {
return;
}
this.probativeVlaueListComponent.searchProbativeVlaueOrdered();
this.probativeValueListComponent.searchProbativeValueOrdered();
}
onSearchSubmit(search: string) {
......@@ -86,6 +94,6 @@ export class ProbativeValueComponent extends SidenavPage<Event> implements OnIni
}
changeTenant(tenantIdentifier: number) {
this.router.navigate(['..', tenantIdentifier], { relativeTo: this.route });
this.router.navigate(['..', tenantIdentifier], {relativeTo: this.route});
}
}
<ng-container *ngIf="securisation.events[securisation.events.length - 1].outcome !== 'WARNING'">
<mat-form-field class="vitamui-mat-select">
<mat-select placeholder="Selectionnez un contrat d'accès" panelclass="vitamui-mat-select" (selectionChange)="updateAccessContractId($event)">
<mat-option *ngFor='let accessContract of accessContracts'
......@@ -11,4 +12,4 @@
<vitamui-common-collapse *ngIf="display && events && events.length > 0" collapseTitle="Etapes de vérification" i18n-collapseTitle="@@historySectionTitleUnit">
<vitamui-common-history-events [events]="events" ></vitamui-common-history-events>
</vitamui-common-collapse>
</ng-container>
......@@ -47,6 +47,51 @@ describe('SecurisationCheckTabComponent', () => {
let component: SecurisationCheckTabComponent;
let fixture: ComponentFixture<SecurisationCheckTabComponent>;
const securisationValue = {
id: 'id',
idAppSession: 'idAppSession',
idRequest: 'idRequest',
parentId: 'parentId',
type: 'type',
typeProc: 'typeProc',
dateTime: new Date('1995-12-17'),
outcome: 'outcome',
outDetail: 'outDetail',
outMessage: 'outMessage',
data: 'data',
parsedData: {
Size: 2
},
objectId: 'objectId',
collectionName: 'collectionName',
agId: 'agId',
agIdApp: 'agIdApp',
agIdExt: 'agIdExt',
rightsStatementIdentifier: 'rightsStatementIdentifier',
events: [{
id: 'id2',
idAppSession: 'idAppSession2',
idRequest: 'idRequest2',
parentId: 'id',
type: 'type',
typeProc: 'typeProc',
dateTime: new Date('1995-12-17'),
outcome: 'outcome',
outDetail: 'outDetail',
outMessage: 'outMessage',
data: 'data',
parsedData: {
dataKey: 'dataValue'
},
objectId: 'objectId',
collectionName: 'collectionName',
agId: 'agId',
agIdApp: 'agIdApp',
agIdExt: 'agIdExt',
rightsStatementIdentifier: 'rightsStatementIdentifier'
}]
};
beforeEach(async(() => {
const activatedRouteMock = {
params: of({tenantIdentifier: 1}),
......@@ -72,6 +117,7 @@ describe('SecurisationCheckTabComponent', () => {
beforeEach(() => {
fixture = TestBed.createComponent(SecurisationCheckTabComponent);
component = fixture.componentInstance;
component.securisation = securisationValue;
fixture.detectChanges();
});
......
......@@ -49,6 +49,7 @@ import {SecurisationService} from '../../securisation.service';
export class SecurisationCheckTabComponent implements OnChanges, OnInit {
@Input() id: string;
@Input() securisation: Event;
events: Event[] = [];
display = false;
......
......@@ -25,7 +25,7 @@
</mat-tab>
<mat-tab label="Vérification" i18n-label="History tab@@userPreviewTabVerification">
<app-securisation-check-tab [id]="securisation?.id"></app-securisation-check-tab>
<app-securisation-check-tab [id]="securisation?.id" [securisation]="securisation"></app-securisation-check-tab>
</mat-tab>
<mat-tab label="Historique" i18n-label="History tab@@userPreviewTabHistory">
......
......@@ -65,13 +65,13 @@
<note priority="1" from="description">Management category</note>
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">10</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/application-select-content/application-select-content.component.html</context><context context-type="linenumber">40</context></context-group><context-group purpose="location"><context context-type="sourcefile">../../dist/vitamui-library/lib/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">40</context></context-group></trans-unit><trans-unit id="PortalSettingsCategory" datatype="html">
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">10</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/application-select-content/application-select-content.component.html</context><context context-type="linenumber">40</context></context-group></trans-unit><trans-unit id="PortalSettingsCategory" datatype="html">
<source>Paramétrage</source><target state="new"/>
<note priority="1" from="description">Settings category</note>
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">20</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/application-select-content/application-select-content.component.html</context><context context-type="linenumber">50</context></context-group><context-group purpose="location"><context context-type="sourcefile">../../dist/vitamui-library/lib/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">50</context></context-group></trans-unit><trans-unit id="downloadBarCancelled" datatype="html">
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/application-select-content/application-select-content.component.d.ts</context><context context-type="linenumber">20</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/application-select-content/application-select-content.component.html</context><context context-type="linenumber">50</context></context-group></trans-unit><trans-unit id="downloadBarCancelled" datatype="html">
<source>
<x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;i>"/>info<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i>"/> <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span>"/>Téléchargement annulé<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span>"/>
</source><target state="new"/>
......@@ -90,7 +90,7 @@
</trans-unit><trans-unit id="closePopupConfirmDialogTitle" datatype="html">
<source>Fermer la fenêtre ?</source><target state="new"/>
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/confirm-dialog/close-popup-dialog.component.d.ts</context><context context-type="linenumber">3</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/confirm-action/confirm-action.component.html</context><context context-type="linenumber">2</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/confirm-action/confirm-action.component.html</context><context context-type="linenumber">9</context></context-group><context-group purpose="location"><context context-type="sourcefile">../../dist/vitamui-library/lib/components/confirm-action/confirm-action.component.d.ts</context><context context-type="linenumber">2</context></context-group><context-group purpose="location"><context context-type="sourcefile">../../dist/vitamui-library/lib/components/confirm-action/confirm-action.component.d.ts</context><context context-type="linenumber">9</context></context-group></trans-unit><trans-unit id="closePopupConfirmDialogConfirmLabel" datatype="html">
<context-group purpose="location"><context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/confirm-dialog/close-popup-dialog.component.d.ts</context><context context-type="linenumber">3</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/confirm-action/confirm-action.component.html</context><context context-type="linenumber">2</context></context-group><context-group purpose="location"><context context-type="sourcefile">../vitamui-library/src/lib/components/confirm-action/confirm-action.component.html</context><context context-type="linenumber">9</context></context-group></trans-unit><trans-unit id="closePopupConfirmDialogConfirmLabel" datatype="html">
<source>Fermer</source><target state="new"/>
<context-group purpose="location">
<context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/confirm-dialog/close-popup-dialog.component.d.ts</context>
......@@ -311,14 +311,14 @@
</context-group>
<note priority="1" from="description">at least one email</note>
</trans-unit><trans-unit id="EnabledLabel" datatype="html">
<source>Yes</source><target state="new"/>
<source>Oui</source><target state="new"/>
<context-group purpose="location">
<context context-type="sourcefile">../../node_modules/ui-frontend-common/app/modules/components/slide-toggle/slide-toggle.component.d.ts</context>
<context context-type="linenumber">15</context>