geonetwork-ui 2.9.0-dev.079fe7365 → 2.9.0-dev.1d02043e4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/geonetwork-ui.mjs +488 -461
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/index.d.ts +237 -157
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +5 -1
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +13 -6
- package/src/libs/feature/editor/src/index.ts +8 -7
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +6 -1
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +5 -1
- package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +4 -0
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +9 -3
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +5 -5
- package/translations/de.json +1 -0
- package/translations/en.json +1 -0
- package/translations/es.json +1 -0
- package/translations/fr.json +1 -0
- package/translations/it.json +1 -0
- package/translations/nl.json +1 -0
- package/translations/pt.json +1 -0
- package/translations/sk.json +1 -0
|
@@ -41,7 +41,7 @@ import * as TOML from '@ltd/j-toml';
|
|
|
41
41
|
import { Style, Stroke, Fill, Circle } from 'ol/style.js';
|
|
42
42
|
import CircleStyle from 'ol/style/Circle.js';
|
|
43
43
|
import EmblaCarousel from 'embla-carousel';
|
|
44
|
-
import { iconoirNavArrowLeft, iconoirNavArrowRight, iconoirLongArrowDownLeft, iconoirSearch, iconoirCalendar, iconoirArrowUp, iconoirLink, iconoirFramePlusIn, iconoirCloudUpload, iconoirReduce, iconoirNavArrowUp, iconoirNavArrowDown, iconoirExpand, iconoirSettings, iconoirDownload, iconoirPlus, iconoirBin, iconoirMediaImageXmark, iconoirMediaImage, iconoirAppWindow, iconoirCode, iconoirDatabase, iconoirAppleWallet, iconoirBank, iconoirList, iconoirTranslate, iconoirLock, iconoirUser, iconoirArrowLeft, iconoirLightBulbOn, iconoirImport,
|
|
44
|
+
import { iconoirNavArrowLeft, iconoirNavArrowRight, iconoirLongArrowDownLeft, iconoirSearch, iconoirCalendar, iconoirArrowUp, iconoirLink, iconoirFramePlusIn, iconoirCloudUpload, iconoirReduce, iconoirNavArrowUp, iconoirNavArrowDown, iconoirExpand, iconoirSettings, iconoirDownload, iconoirPlus, iconoirBin, iconoirMediaImageXmark, iconoirMediaImage, iconoirAppWindow, iconoirCode, iconoirDatabase, iconoirAppleWallet, iconoirBank, iconoirList, iconoirTranslate, iconoirLock, iconoirUser, iconoirArrowLeft, iconoirLightBulbOn, iconoirImport, iconoirBadgeCheck, iconoirSystemShut, iconoirCircle, iconoirCheckCircle, iconoirAttachment, iconoirRefresh } from '@ng-icons/iconoir';
|
|
45
45
|
import { MatButtonModule } from '@angular/material/button';
|
|
46
46
|
import * as i1$8 from '@angular/cdk/overlay';
|
|
47
47
|
import { OverlayContainer, ScrollStrategyOptions, OverlayModule, CdkConnectedOverlay, ScrollDispatcher, Overlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
@@ -18975,6 +18975,7 @@ var de = {
|
|
|
18975
18975
|
"multiselect.filter.placeholder": "Suche",
|
|
18976
18976
|
"nav.back": "Zurück",
|
|
18977
18977
|
"navbar.mobile.menuTitle": "Schnellzugriff",
|
|
18978
|
+
"ogc.geojson.notsupported": "Dieser OGC API-Dienst unterstützt das GeoJSON-Format nicht.",
|
|
18978
18979
|
"ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
|
|
18979
18980
|
"organisation.filter.placeholder": "Ergebnisse filtern",
|
|
18980
18981
|
"organisation.sort.sortBy": "Sortieren nach:",
|
|
@@ -19645,6 +19646,7 @@ var en = {
|
|
|
19645
19646
|
"multiselect.filter.placeholder": "Search",
|
|
19646
19647
|
"nav.back": "Back",
|
|
19647
19648
|
"navbar.mobile.menuTitle": "Quick access",
|
|
19649
|
+
"ogc.geojson.notsupported": "This OGC API does not support the GeoJSON format",
|
|
19648
19650
|
"ogc.unreachable.unknown": "The service could not be reached",
|
|
19649
19651
|
"organisation.filter.placeholder": "Filter results",
|
|
19650
19652
|
"organisation.sort.sortBy": "Sort by:",
|
|
@@ -20316,6 +20318,7 @@ var es = {
|
|
|
20316
20318
|
"multiselect.filter.placeholder": "",
|
|
20317
20319
|
"nav.back": "",
|
|
20318
20320
|
"navbar.mobile.menuTitle": "Acceso rápido",
|
|
20321
|
+
"ogc.geojson.notsupported": "",
|
|
20319
20322
|
"ogc.unreachable.unknown": "",
|
|
20320
20323
|
"organisation.filter.placeholder": "",
|
|
20321
20324
|
"organisation.sort.sortBy": "",
|
|
@@ -20987,6 +20990,7 @@ var fr = {
|
|
|
20987
20990
|
"multiselect.filter.placeholder": "Rechercher",
|
|
20988
20991
|
"nav.back": "Retour",
|
|
20989
20992
|
"navbar.mobile.menuTitle": "Navigation rapide",
|
|
20993
|
+
"ogc.geojson.notsupported": "Le service OGC API ne supporte pas le format GeoJSON",
|
|
20990
20994
|
"ogc.unreachable.unknown": "Le service n'est pas accessible",
|
|
20991
20995
|
"organisation.filter.placeholder": "Filtrer les résultats",
|
|
20992
20996
|
"organisation.sort.sortBy": "Trier par :",
|
|
@@ -21658,6 +21662,7 @@ var it = {
|
|
|
21658
21662
|
"multiselect.filter.placeholder": "Cerca",
|
|
21659
21663
|
"nav.back": "Indietro",
|
|
21660
21664
|
"navbar.mobile.menuTitle": "Accesso rapido",
|
|
21665
|
+
"ogc.geojson.notsupported": "Il servizio OGC API non supporta il formato GeoJSON.",
|
|
21661
21666
|
"ogc.unreachable.unknown": "Il servizio non è accessibile",
|
|
21662
21667
|
"organisation.filter.placeholder": "Filtra i risultati",
|
|
21663
21668
|
"organisation.sort.sortBy": "Ordina per:",
|
|
@@ -22329,6 +22334,7 @@ var nl = {
|
|
|
22329
22334
|
"multiselect.filter.placeholder": "",
|
|
22330
22335
|
"nav.back": "",
|
|
22331
22336
|
"navbar.mobile.menuTitle": "",
|
|
22337
|
+
"ogc.geojson.notsupported": "",
|
|
22332
22338
|
"ogc.unreachable.unknown": "",
|
|
22333
22339
|
"organisation.filter.placeholder": "",
|
|
22334
22340
|
"organisation.sort.sortBy": "",
|
|
@@ -23000,6 +23006,7 @@ var pt = {
|
|
|
23000
23006
|
"multiselect.filter.placeholder": "",
|
|
23001
23007
|
"nav.back": "",
|
|
23002
23008
|
"navbar.mobile.menuTitle": "",
|
|
23009
|
+
"ogc.geojson.notsupported": "",
|
|
23003
23010
|
"ogc.unreachable.unknown": "",
|
|
23004
23011
|
"organisation.filter.placeholder": "",
|
|
23005
23012
|
"organisation.sort.sortBy": "",
|
|
@@ -23671,6 +23678,7 @@ var sk = {
|
|
|
23671
23678
|
"multiselect.filter.placeholder": "Hľadať",
|
|
23672
23679
|
"nav.back": "Späť",
|
|
23673
23680
|
"navbar.mobile.menuTitle": "",
|
|
23681
|
+
"ogc.geojson.notsupported": "",
|
|
23674
23682
|
"ogc.unreachable.unknown": "So službou sa nedalo spojiť",
|
|
23675
23683
|
"organisation.filter.placeholder": "Filtrovať výsledky",
|
|
23676
23684
|
"organisation.sort.sortBy": "Zoradiť podľa:",
|
|
@@ -25511,7 +25519,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
25511
25519
|
}] } });
|
|
25512
25520
|
|
|
25513
25521
|
var name = "geonetwork-ui";
|
|
25514
|
-
var version = "2.9.0-dev.
|
|
25522
|
+
var version = "2.9.0-dev.1d02043e4";
|
|
25515
25523
|
var engines = {
|
|
25516
25524
|
node: ">=20"
|
|
25517
25525
|
};
|
|
@@ -25925,14 +25933,18 @@ class ElasticsearchService {
|
|
|
25925
25933
|
})
|
|
25926
25934
|
.join(' OR ');
|
|
25927
25935
|
};
|
|
25928
|
-
|
|
25936
|
+
let queryString = typeof filters === 'string'
|
|
25929
25937
|
? filters
|
|
25930
25938
|
: Object.keys(filters)
|
|
25939
|
+
.filter((fieldname) => fieldname !== 'gn-ui-crossFieldFilter')
|
|
25931
25940
|
.filter((fieldname) => !isDateRange(filters[fieldname]))
|
|
25932
25941
|
.filter((fieldname) => filters[fieldname] &&
|
|
25933
25942
|
JSON.stringify(filters[fieldname]) !== '{}')
|
|
25934
25943
|
.map((fieldname) => `${fieldname}:(${makeQuery(filters[fieldname])})`)
|
|
25935
25944
|
.join(' AND ');
|
|
25945
|
+
if (filters['gn-ui-crossFieldFilter']) {
|
|
25946
|
+
queryString = `${queryString} AND (${filters['gn-ui-crossFieldFilter']})`;
|
|
25947
|
+
}
|
|
25936
25948
|
const queryRange = Object.entries(filters)
|
|
25937
25949
|
.filter(([, value]) => isDateRange(value))
|
|
25938
25950
|
.map(([searchField, dateRange]) => {
|
|
@@ -32978,8 +32990,8 @@ class RecordKindField extends SimpleSearchField {
|
|
|
32978
32990
|
};
|
|
32979
32991
|
const presentationFormFilter = {};
|
|
32980
32992
|
if (values.includes('reuse') && !values.includes('dataset')) {
|
|
32981
|
-
|
|
32982
|
-
|
|
32993
|
+
filters['gn-ui-crossFieldFilter'] =
|
|
32994
|
+
`(resourceType:("dataset" OR "document") AND cl_presentationForm.key:("mapDigital" OR "mapHardcopy")) OR resourceType:("application" OR "interactiveMap" OR "map" OR "map/static" OR "map/interactive" OR "map-interactive" OR "map-static" OR "mapDigital" OR "mapHardcopy" OR "staticMap")`;
|
|
32983
32995
|
}
|
|
32984
32996
|
else if (values.includes('dataset') && !values.includes('reuse')) {
|
|
32985
32997
|
presentationFormFilter['mapDigital'] = false;
|
|
@@ -33072,7 +33084,12 @@ class FieldsService {
|
|
|
33072
33084
|
: [fieldValues[fieldName]];
|
|
33073
33085
|
return this.getFiltersForValues(fieldName, values);
|
|
33074
33086
|
});
|
|
33075
|
-
return forkJoin(filtersByField$).pipe(map$1((filters) =>
|
|
33087
|
+
return forkJoin(filtersByField$).pipe(map$1((filters) => {
|
|
33088
|
+
if (typeof filters === 'string') {
|
|
33089
|
+
return filters;
|
|
33090
|
+
}
|
|
33091
|
+
return filters.reduce((prev, curr) => ({ ...prev, ...curr }), {});
|
|
33092
|
+
}));
|
|
33076
33093
|
}
|
|
33077
33094
|
readFieldValuesFromFilters(filters) {
|
|
33078
33095
|
const fieldValues$ = this.supportedFields.map((fieldName) => this.getValuesForFilters(fieldName, filters).pipe(map$1((values) => ({ [fieldName]: values }))));
|
|
@@ -38227,6 +38244,7 @@ marker('dataset.error.forbidden');
|
|
|
38227
38244
|
marker('wfs.unreachable.unknown');
|
|
38228
38245
|
marker('wfs.featuretype.notfound');
|
|
38229
38246
|
marker('wfs.geojsongml.notsupported');
|
|
38247
|
+
marker('ogc.geojson.notsupported');
|
|
38230
38248
|
marker('ogc.unreachable.unknown');
|
|
38231
38249
|
marker('dataset.error.network');
|
|
38232
38250
|
marker('dataset.error.http');
|
|
@@ -38454,12 +38472,14 @@ class DataService {
|
|
|
38454
38472
|
else if (link.type === 'service' &&
|
|
38455
38473
|
link.accessServiceProtocol === 'ogcFeatures') {
|
|
38456
38474
|
return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
|
|
38457
|
-
const
|
|
38458
|
-
|
|
38459
|
-
|
|
38460
|
-
|
|
38461
|
-
|
|
38475
|
+
const isMimeTypeJson = (mimeType) => {
|
|
38476
|
+
return mimeType.toLowerCase().indexOf('json') > -1;
|
|
38477
|
+
};
|
|
38478
|
+
const geojsonUrl = collectionInfo.bulkDownloadLinks[Object.keys(collectionInfo.bulkDownloadLinks).find((mimeType) => isMimeTypeJson(mimeType))];
|
|
38479
|
+
if (!geojsonUrl) {
|
|
38480
|
+
return throwError(() => 'ogc.geojson.notsupported');
|
|
38462
38481
|
}
|
|
38482
|
+
return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
|
|
38463
38483
|
}));
|
|
38464
38484
|
}
|
|
38465
38485
|
return throwError(() => 'protocol not supported');
|
|
@@ -41101,6 +41121,7 @@ const saveRecordSuccess = createAction('[Editor] Save record success');
|
|
|
41101
41121
|
const saveRecordFailure = createAction('[Editor] Save record failure', props());
|
|
41102
41122
|
const draftSaveSuccess = createAction('[Editor] Draft save success');
|
|
41103
41123
|
const undoRecordDraft = createAction('[Editor] Undo record draft');
|
|
41124
|
+
const setEditorConfiguration = createAction('[Editor] Set editor configuration', props());
|
|
41104
41125
|
const setCurrentPage = createAction('[Editor] Set current page', props());
|
|
41105
41126
|
const setFieldVisibility = createAction('[Editor] Set field visibility', props());
|
|
41106
41127
|
const hasRecordChangedSinceDraft = createAction('[Editor] Has Record Changed Since Draft', props());
|
|
@@ -41523,6 +41544,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
|
|
|
41523
41544
|
})), on(markRecordAsChanged, (state) => ({
|
|
41524
41545
|
...state,
|
|
41525
41546
|
changedSinceSave: true,
|
|
41547
|
+
})), on(setEditorConfiguration, (state, { configuration }) => ({
|
|
41548
|
+
...state,
|
|
41549
|
+
editorConfig: configuration,
|
|
41526
41550
|
})), on(setCurrentPage, (state, { page }) => ({
|
|
41527
41551
|
...state,
|
|
41528
41552
|
currentPage: page,
|
|
@@ -41625,6 +41649,9 @@ class EditorFacade {
|
|
|
41625
41649
|
updateRecordLanguages(defaultLanguage, otherLanguages) {
|
|
41626
41650
|
this.store.dispatch(updateRecordLanguages({ defaultLanguage, otherLanguages }));
|
|
41627
41651
|
}
|
|
41652
|
+
setConfiguration(configuration) {
|
|
41653
|
+
this.store.dispatch(setEditorConfiguration({ configuration }));
|
|
41654
|
+
}
|
|
41628
41655
|
setCurrentPage(page) {
|
|
41629
41656
|
this.store.dispatch(setCurrentPage({ page }));
|
|
41630
41657
|
}
|
|
@@ -41647,149 +41674,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
41647
41674
|
type: Injectable
|
|
41648
41675
|
}] });
|
|
41649
41676
|
|
|
41650
|
-
function evaluate(expression) {
|
|
41651
|
-
if (expression.match(/^\${.*}$/)) {
|
|
41652
|
-
return evaluate(expression.slice(2, -1));
|
|
41653
|
-
}
|
|
41654
|
-
const operator = expression.split('(')[0];
|
|
41655
|
-
switch (operator) {
|
|
41656
|
-
case 'dateNow':
|
|
41657
|
-
return () => new Date();
|
|
41658
|
-
default:
|
|
41659
|
-
throw new Error(`Unknown operator: ${operator}`);
|
|
41660
|
-
}
|
|
41661
|
-
}
|
|
41662
|
-
|
|
41663
|
-
class EditorService {
|
|
41664
|
-
constructor() {
|
|
41665
|
-
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
41666
|
-
}
|
|
41667
|
-
// returns the record as it was when saved, alongside its source
|
|
41668
|
-
saveRecord(record, recordSource, fieldsConfig) {
|
|
41669
|
-
const savedRecord = { ...record };
|
|
41670
|
-
const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
|
|
41671
|
-
// run onSave processes
|
|
41672
|
-
for (const field of fields) {
|
|
41673
|
-
if (field.onSaveProcess && field.model) {
|
|
41674
|
-
const evaluator = evaluate(field.onSaveProcess);
|
|
41675
|
-
savedRecord[field.model] = evaluator({
|
|
41676
|
-
model: field.model,
|
|
41677
|
-
value: record[field.model],
|
|
41678
|
-
});
|
|
41679
|
-
}
|
|
41680
|
-
}
|
|
41681
|
-
let publishToAll = true;
|
|
41682
|
-
// if the record is new, generate a new unique identifier and pass publishToAll as false
|
|
41683
|
-
if (!record.uniqueIdentifier) {
|
|
41684
|
-
savedRecord.uniqueIdentifier = null;
|
|
41685
|
-
publishToAll = false;
|
|
41686
|
-
}
|
|
41687
|
-
return this.recordsRepository
|
|
41688
|
-
.saveRecord(savedRecord, recordSource, publishToAll)
|
|
41689
|
-
.pipe(switchMap((uniqueIdentifier) => this.recordsRepository.openRecordForEdition(uniqueIdentifier)), tap$1(() => {
|
|
41690
|
-
// if saving was successful, the original draft can be discarded
|
|
41691
|
-
this.recordsRepository.clearRecordDraft(record.uniqueIdentifier);
|
|
41692
|
-
}), map$1(([record, recordSource]) => [record, recordSource]));
|
|
41693
|
-
}
|
|
41694
|
-
// emits and completes once saving is done
|
|
41695
|
-
// note: onSave processes are not run for drafts
|
|
41696
|
-
saveRecordAsDraft(record, recordSource) {
|
|
41697
|
-
record.recordUpdated = new Date();
|
|
41698
|
-
return this.recordsRepository
|
|
41699
|
-
.saveRecordAsDraft(record, recordSource)
|
|
41700
|
-
.pipe(map$1(() => undefined));
|
|
41701
|
-
}
|
|
41702
|
-
undoRecordDraft(record) {
|
|
41703
|
-
this.recordsRepository.clearRecordDraft(record.uniqueIdentifier);
|
|
41704
|
-
return this.recordsRepository.openRecordForEdition(record.uniqueIdentifier);
|
|
41705
|
-
}
|
|
41706
|
-
hasRecordChangedSinceDraft(localRecord) {
|
|
41707
|
-
return this.recordsRepository.hasRecordChangedSinceDraft(localRecord);
|
|
41708
|
-
}
|
|
41709
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41710
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
41711
|
-
}
|
|
41712
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, decorators: [{
|
|
41713
|
-
type: Injectable,
|
|
41714
|
-
args: [{
|
|
41715
|
-
providedIn: 'root',
|
|
41716
|
-
}]
|
|
41717
|
-
}] });
|
|
41718
|
-
|
|
41719
|
-
class EditorEffects {
|
|
41720
|
-
constructor() {
|
|
41721
|
-
this.actions$ = inject(Actions);
|
|
41722
|
-
this.editorService = inject(EditorService);
|
|
41723
|
-
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
41724
|
-
this.plateformService = inject(PlatformServiceInterface);
|
|
41725
|
-
this.store = inject(Store);
|
|
41726
|
-
this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource), this.store.select(selectEditorConfig)), switchMap$1(([, record, recordSource, fieldsConfig]) => this.editorService.saveRecord(record, recordSource, fieldsConfig).pipe(switchMap$1(([savedRecord, savedRecordSource]) => {
|
|
41727
|
-
const actions = [saveRecordSuccess()];
|
|
41728
|
-
if (!record?.uniqueIdentifier) {
|
|
41729
|
-
actions.push(openRecord({
|
|
41730
|
-
record: savedRecord,
|
|
41731
|
-
recordSource: savedRecordSource,
|
|
41732
|
-
}));
|
|
41733
|
-
}
|
|
41734
|
-
return of(...actions);
|
|
41735
|
-
}), catchError((error) => of(saveRecordFailure({
|
|
41736
|
-
error,
|
|
41737
|
-
})))))));
|
|
41738
|
-
this.cleanRecordAttachments$ = createEffect(() => this.actions$.pipe(ofType(saveRecordSuccess), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([_, record]) => {
|
|
41739
|
-
if (record.uniqueIdentifier !== null) {
|
|
41740
|
-
this.plateformService.cleanRecordAttachments(record).subscribe({
|
|
41741
|
-
next: (_) => undefined,
|
|
41742
|
-
error: (err) => {
|
|
41743
|
-
console.error(err);
|
|
41744
|
-
},
|
|
41745
|
-
});
|
|
41746
|
-
}
|
|
41747
|
-
return EMPTY;
|
|
41748
|
-
}), catchError((error) => {
|
|
41749
|
-
console.error(error);
|
|
41750
|
-
return EMPTY;
|
|
41751
|
-
})), { dispatch: false });
|
|
41752
|
-
this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField, updateRecordLanguages), map$1(() => markRecordAsChanged())));
|
|
41753
|
-
this.saveRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField, updateRecordLanguages), debounceTime$1(1000), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource)), switchMap$1(([, record, recordSource]) => this.editorService.saveRecordAsDraft(record, recordSource)), map$1(() => draftSaveSuccess())));
|
|
41754
|
-
this.undoRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(undoRecordDraft), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([, record]) => this.editorService.undoRecordDraft(record)), map$1(([record, recordSource]) => openRecord({
|
|
41755
|
-
record,
|
|
41756
|
-
recordSource,
|
|
41757
|
-
}))));
|
|
41758
|
-
this.checkHasChangesOnOpen$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => this.recordsRepository.recordHasDraft(record.uniqueIdentifier)), filter((hasDraft) => hasDraft), map$1(() => markRecordAsChanged())));
|
|
41759
|
-
this.hasRecordChangedSinceDraft$ = createEffect(() => this.actions$.pipe(ofType(hasRecordChangedSinceDraft), switchMap$1(({ record }) => this.editorService
|
|
41760
|
-
.hasRecordChangedSinceDraft(record)
|
|
41761
|
-
.pipe(map$1((changes) => hasRecordChangedSinceDraftSuccess({ changes }))))));
|
|
41762
|
-
this.checkIsRecordPublished$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => record.uniqueIdentifier), switchMap$1((uniqueIdentifier) => this.recordsRepository.getRecordPublicationStatus(uniqueIdentifier)), map$1((isPublished$1) => isPublished({
|
|
41763
|
-
isPublished: isPublished$1,
|
|
41764
|
-
}))));
|
|
41765
|
-
this.checkCanEditRecord$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => record.uniqueIdentifier), switchMap$1((uniqueIdentifier) => this.recordsRepository.canEditRecord(uniqueIdentifier)), map$1((canEditRecord$1) => canEditRecord({
|
|
41766
|
-
canEditRecord: canEditRecord$1,
|
|
41767
|
-
}))));
|
|
41768
|
-
}
|
|
41769
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41770
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects }); }
|
|
41771
|
-
}
|
|
41772
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects, decorators: [{
|
|
41773
|
-
type: Injectable
|
|
41774
|
-
}] });
|
|
41775
|
-
|
|
41776
|
-
class FeatureEditorModule {
|
|
41777
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
41778
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, imports: [i1.StoreFeatureModule, i2$2.EffectsFeatureModule] }); }
|
|
41779
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, providers: [EditorFacade, provideHttpClient()], imports: [StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
41780
|
-
EffectsModule.forFeature([EditorEffects])] }); }
|
|
41781
|
-
}
|
|
41782
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, decorators: [{
|
|
41783
|
-
type: NgModule,
|
|
41784
|
-
args: [{
|
|
41785
|
-
imports: [
|
|
41786
|
-
StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
41787
|
-
EffectsModule.forFeature([EditorEffects]),
|
|
41788
|
-
],
|
|
41789
|
-
providers: [EditorFacade, provideHttpClient()],
|
|
41790
|
-
}]
|
|
41791
|
-
}] });
|
|
41792
|
-
|
|
41793
41677
|
class ImportRecordComponent {
|
|
41794
41678
|
constructor() {
|
|
41795
41679
|
this.router = inject(Router);
|
|
@@ -41885,6 +41769,328 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
41885
41769
|
type: Output
|
|
41886
41770
|
}] } });
|
|
41887
41771
|
|
|
41772
|
+
//forced translations that are not available in fields.config.ts
|
|
41773
|
+
marker('editor.record.form.field.keywords');
|
|
41774
|
+
marker('editor.record.form.field.topics');
|
|
41775
|
+
marker('editor.record.form.field.contacts');
|
|
41776
|
+
marker('editor.record.form.field.organisation');
|
|
41777
|
+
class MetadataQualityPanelComponent {
|
|
41778
|
+
constructor() {
|
|
41779
|
+
this.propsToValidate = getAllKeysValidator();
|
|
41780
|
+
this.propertiesByPage = [];
|
|
41781
|
+
}
|
|
41782
|
+
ngOnChanges() {
|
|
41783
|
+
if (this.editorConfig && this.record) {
|
|
41784
|
+
const fieldsByPage = this.editorConfig.pages.map((page) => page.sections.flatMap((section) => section.fields
|
|
41785
|
+
.filter((field) => this.propsToValidate.includes(field.model))
|
|
41786
|
+
.map((field) => field.model)));
|
|
41787
|
+
// FIXME: temporarily add topics and organisation to the first and third page
|
|
41788
|
+
// as long as they are not handled by the editor
|
|
41789
|
+
if (fieldsByPage.length > 0) {
|
|
41790
|
+
fieldsByPage[0].includes('topics') || fieldsByPage[0].push('topics');
|
|
41791
|
+
fieldsByPage[2].includes('organisation') ||
|
|
41792
|
+
fieldsByPage[2].push('organisation');
|
|
41793
|
+
}
|
|
41794
|
+
this.propertiesByPage = fieldsByPage
|
|
41795
|
+
.map((fields) => getQualityValidators(this.record, fields).map(({ name, validator }) => ({
|
|
41796
|
+
label: `editor.record.form.field.${name}`, // use same translations as in fields.config.ts
|
|
41797
|
+
value: validator(),
|
|
41798
|
+
})))
|
|
41799
|
+
.filter((arr) => arr.length > 0);
|
|
41800
|
+
}
|
|
41801
|
+
}
|
|
41802
|
+
getExtraClass(checked) {
|
|
41803
|
+
const baseClasses = 'flex flex-row justify-between rounded mb-1 h-[34px] w-full focus:ring-0 hover:border-none border-none hover:text-black text-black cursor-default';
|
|
41804
|
+
return checked
|
|
41805
|
+
? `${baseClasses} bg-neutral-100 hover:bg-neutral-100`
|
|
41806
|
+
: `${baseClasses} bg-transparent hover:bg-transparent`;
|
|
41807
|
+
}
|
|
41808
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MetadataQualityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41809
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel", inputs: { editorConfig: "editorConfig", record: "record" }, providers: [
|
|
41810
|
+
provideIcons({
|
|
41811
|
+
iconoirSystemShut,
|
|
41812
|
+
iconoirBadgeCheck,
|
|
41813
|
+
}),
|
|
41814
|
+
provideNgIconsConfig({
|
|
41815
|
+
size: '1.25em',
|
|
41816
|
+
}),
|
|
41817
|
+
], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (properties of propertiesByPage; track properties; let i = $index) {\n <div class=\"flex flex-col gap-2\">\n @for (property of properties; track property) {\n <gn-ui-button\n [extraClass]=\"getExtraClass(property.value)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (property.value) {\n <ng-icon class=\"text-primary\" name=\"iconoirBadgeCheck\"></ng-icon>\n } @else {\n <ng-icon\n class=\"text-neutral-300\"\n name=\"iconoirSystemShut\"\n ></ng-icon>\n }\n </div>\n </gn-ui-button>\n }\n @if (i !== propertiesByPage.length - 1) {\n <hr class=\"border-gray-300 w-11/12 mx-auto\" />\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
41818
|
+
}
|
|
41819
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MetadataQualityPanelComponent, decorators: [{
|
|
41820
|
+
type: Component,
|
|
41821
|
+
args: [{ selector: 'gn-ui-metadata-quality-panel', standalone: true, imports: [
|
|
41822
|
+
TranslateDirective,
|
|
41823
|
+
TranslatePipe,
|
|
41824
|
+
ButtonComponent,
|
|
41825
|
+
NgIconComponent,
|
|
41826
|
+
], providers: [
|
|
41827
|
+
provideIcons({
|
|
41828
|
+
iconoirSystemShut,
|
|
41829
|
+
iconoirBadgeCheck,
|
|
41830
|
+
}),
|
|
41831
|
+
provideNgIconsConfig({
|
|
41832
|
+
size: '1.25em',
|
|
41833
|
+
}),
|
|
41834
|
+
], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (properties of propertiesByPage; track properties; let i = $index) {\n <div class=\"flex flex-col gap-2\">\n @for (property of properties; track property) {\n <gn-ui-button\n [extraClass]=\"getExtraClass(property.value)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (property.value) {\n <ng-icon class=\"text-primary\" name=\"iconoirBadgeCheck\"></ng-icon>\n } @else {\n <ng-icon\n class=\"text-neutral-300\"\n name=\"iconoirSystemShut\"\n ></ng-icon>\n }\n </div>\n </gn-ui-button>\n }\n @if (i !== propertiesByPage.length - 1) {\n <hr class=\"border-gray-300 w-11/12 mx-auto\" />\n }\n </div>\n }\n</div>\n" }]
|
|
41835
|
+
}], propDecorators: { editorConfig: [{
|
|
41836
|
+
type: Input
|
|
41837
|
+
}], record: [{
|
|
41838
|
+
type: Input
|
|
41839
|
+
}] } });
|
|
41840
|
+
|
|
41841
|
+
const extraFlagMap = {
|
|
41842
|
+
ar: 'arab',
|
|
41843
|
+
en: 'gb',
|
|
41844
|
+
ko: 'kr',
|
|
41845
|
+
cs: 'cz',
|
|
41846
|
+
zh: 'cn',
|
|
41847
|
+
ca: 'es-ct',
|
|
41848
|
+
rm: 'ch',
|
|
41849
|
+
da: 'dk',
|
|
41850
|
+
sv: 'se',
|
|
41851
|
+
cy: 'gb-wls',
|
|
41852
|
+
hy: 'am',
|
|
41853
|
+
ka: 'ge',
|
|
41854
|
+
uk: 'ua',
|
|
41855
|
+
};
|
|
41856
|
+
class MultilingualPanelComponent {
|
|
41857
|
+
constructor() {
|
|
41858
|
+
this.facade = inject(EditorFacade);
|
|
41859
|
+
this.dialog = inject(MatDialog);
|
|
41860
|
+
this.translateService = inject(TranslateService);
|
|
41861
|
+
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
41862
|
+
this.overlay = inject(Overlay);
|
|
41863
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
41864
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
41865
|
+
this.selectedLanguages = [];
|
|
41866
|
+
this.recordLanguages = [];
|
|
41867
|
+
this.formLanguage = '';
|
|
41868
|
+
this.isActionMenuOpen = false;
|
|
41869
|
+
this.subscription = new Subscription();
|
|
41870
|
+
this.supportedLanguages$ = this.recordsRepository
|
|
41871
|
+
.getApplicationLanguages()
|
|
41872
|
+
.pipe(map$2((languages) => this.sortLanguages(languages)));
|
|
41873
|
+
}
|
|
41874
|
+
set record(value) {
|
|
41875
|
+
this._record = value;
|
|
41876
|
+
this.isMultilingual = value.otherLanguages.length > 0;
|
|
41877
|
+
this.editTranslations = false;
|
|
41878
|
+
this.recordLanguages = [...value.otherLanguages, value.defaultLanguage];
|
|
41879
|
+
this.selectedLanguages = this.recordLanguages;
|
|
41880
|
+
this.formLanguage = value.defaultLanguage;
|
|
41881
|
+
}
|
|
41882
|
+
ngOnDestroy() {
|
|
41883
|
+
this.subscription.unsubscribe();
|
|
41884
|
+
}
|
|
41885
|
+
sortLanguages(languages) {
|
|
41886
|
+
return languages
|
|
41887
|
+
.map((lang) => {
|
|
41888
|
+
const label = this.translateService.instant('language.' + lang);
|
|
41889
|
+
const isTranslated = label !== 'language.' + lang;
|
|
41890
|
+
return {
|
|
41891
|
+
lang,
|
|
41892
|
+
label,
|
|
41893
|
+
isTranslated,
|
|
41894
|
+
};
|
|
41895
|
+
})
|
|
41896
|
+
.sort((a, b) => {
|
|
41897
|
+
if (a.isTranslated && !b.isTranslated)
|
|
41898
|
+
return -1;
|
|
41899
|
+
if (!a.isTranslated && b.isTranslated)
|
|
41900
|
+
return 1;
|
|
41901
|
+
return a.label.localeCompare(b.label);
|
|
41902
|
+
})
|
|
41903
|
+
.map((item) => item.lang);
|
|
41904
|
+
}
|
|
41905
|
+
toggleLanguageSelection() {
|
|
41906
|
+
this.editTranslations = !this.editTranslations;
|
|
41907
|
+
}
|
|
41908
|
+
getIconClass(lang) {
|
|
41909
|
+
return extraFlagMap[lang]
|
|
41910
|
+
? `fi fi-${extraFlagMap[lang]} w-4 h-3`
|
|
41911
|
+
: `fi fi-${lang} w-4 h-3`;
|
|
41912
|
+
}
|
|
41913
|
+
switchMultilingual() {
|
|
41914
|
+
if (this.isMultilingual && this.selectedLanguages.length > 1) {
|
|
41915
|
+
this.confirmDeleteAction();
|
|
41916
|
+
}
|
|
41917
|
+
else {
|
|
41918
|
+
this.isMultilingual = true;
|
|
41919
|
+
this.editTranslations = true;
|
|
41920
|
+
}
|
|
41921
|
+
}
|
|
41922
|
+
getExtraClass(lang) {
|
|
41923
|
+
const baseClass = 'h-[34px] w-full font-bold justify-start hover:bg-white';
|
|
41924
|
+
if (this.selectedLanguages.includes(lang)) {
|
|
41925
|
+
return `${baseClass} bg-white border border-black`;
|
|
41926
|
+
}
|
|
41927
|
+
return baseClass;
|
|
41928
|
+
}
|
|
41929
|
+
toggleLanguage(lang) {
|
|
41930
|
+
if (this.selectedLanguages.includes(lang)) {
|
|
41931
|
+
this.removeSelectedLanguage(lang);
|
|
41932
|
+
}
|
|
41933
|
+
else {
|
|
41934
|
+
this.selectedLanguages.push(lang);
|
|
41935
|
+
}
|
|
41936
|
+
}
|
|
41937
|
+
removeSelectedLanguage(lang) {
|
|
41938
|
+
this.selectedLanguages = this.selectedLanguages.filter((language) => language !== lang);
|
|
41939
|
+
}
|
|
41940
|
+
validateTranslations() {
|
|
41941
|
+
const equalLength = this.selectedLanguages.length === this.recordLanguages.length;
|
|
41942
|
+
if (this.selectedLanguages.length < this.recordLanguages.length ||
|
|
41943
|
+
(equalLength && this.selectedLanguages !== this.recordLanguages)) {
|
|
41944
|
+
this.confirmDeleteAction(this.selectedLanguages);
|
|
41945
|
+
}
|
|
41946
|
+
else {
|
|
41947
|
+
this.updateTranslations();
|
|
41948
|
+
}
|
|
41949
|
+
}
|
|
41950
|
+
updateTranslations() {
|
|
41951
|
+
const newLanguageSelection = this.selectedLanguages.filter((lang) => lang !== this.formLanguage);
|
|
41952
|
+
this.facade.updateRecordLanguages(this.formLanguage, newLanguageSelection);
|
|
41953
|
+
this.recordLanguages = newLanguageSelection;
|
|
41954
|
+
this.editTranslations = false;
|
|
41955
|
+
}
|
|
41956
|
+
switchFormLang(lang) {
|
|
41957
|
+
// TO IMPLEMENT FURTHER
|
|
41958
|
+
}
|
|
41959
|
+
switchDefaultLang(lang) {
|
|
41960
|
+
this.formLanguage = lang;
|
|
41961
|
+
this.facade.updateRecordLanguages(lang, this.selectedLanguages.filter((lang) => lang !== this.formLanguage));
|
|
41962
|
+
this.closeActionMenu();
|
|
41963
|
+
}
|
|
41964
|
+
confirmDeleteAction(lang) {
|
|
41965
|
+
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
41966
|
+
data: {
|
|
41967
|
+
title: this.translateService.instant('editor.record.multilingual.confirmation.title'),
|
|
41968
|
+
message: this.translateService.instant('editor.record.multilingual.confirmation.message'),
|
|
41969
|
+
confirmText: this.translateService.instant('editor.record.multilingual.confirmation.confirmText'),
|
|
41970
|
+
cancelText: this.translateService.instant('editor.record.multilingual.confirmation.cancelText'),
|
|
41971
|
+
focusCancel: true,
|
|
41972
|
+
},
|
|
41973
|
+
restoreFocus: true,
|
|
41974
|
+
});
|
|
41975
|
+
this.subscription.add(dialogRef.afterClosed().subscribe((confirmed) => {
|
|
41976
|
+
if (confirmed) {
|
|
41977
|
+
if (lang) {
|
|
41978
|
+
if (!Array.isArray(lang)) {
|
|
41979
|
+
this.removeSelectedLanguage(lang);
|
|
41980
|
+
this.closeActionMenu();
|
|
41981
|
+
}
|
|
41982
|
+
this.updateTranslations();
|
|
41983
|
+
}
|
|
41984
|
+
else {
|
|
41985
|
+
this.facade.updateRecordLanguages(this.formLanguage, []);
|
|
41986
|
+
this.isMultilingual = false;
|
|
41987
|
+
this.selectedLanguages = [];
|
|
41988
|
+
}
|
|
41989
|
+
}
|
|
41990
|
+
else {
|
|
41991
|
+
this.isMultilingual = true;
|
|
41992
|
+
this.selectedLanguages = this.recordLanguages;
|
|
41993
|
+
}
|
|
41994
|
+
this.editTranslations = false;
|
|
41995
|
+
}));
|
|
41996
|
+
}
|
|
41997
|
+
isFirstUnsupported(index) {
|
|
41998
|
+
const langs = this.sortLanguages(this.recordLanguages);
|
|
41999
|
+
return (langs[index].length === 3 &&
|
|
42000
|
+
langs.slice(0, index).every((lang) => lang.length !== 3));
|
|
42001
|
+
}
|
|
42002
|
+
isLangSupported(lang) {
|
|
42003
|
+
return lang.length === 2;
|
|
42004
|
+
}
|
|
42005
|
+
getToggleTitle(lang) {
|
|
42006
|
+
if (lang === this._record.defaultLanguage) {
|
|
42007
|
+
return this.translateService.instant('editor.record.form.multilingual.forbidden');
|
|
42008
|
+
}
|
|
42009
|
+
return '';
|
|
42010
|
+
}
|
|
42011
|
+
openActionMenu(item, template) {
|
|
42012
|
+
this.isActionMenuOpen = true;
|
|
42013
|
+
const index = this.sortLanguages(this.selectedLanguages).indexOf(item);
|
|
42014
|
+
const buttonElement = this.actionMenuButtons.toArray()[index];
|
|
42015
|
+
const positionStrategy = this.overlay
|
|
42016
|
+
.position()
|
|
42017
|
+
.flexibleConnectedTo(buttonElement)
|
|
42018
|
+
.withFlexibleDimensions(true)
|
|
42019
|
+
.withPush(true)
|
|
42020
|
+
.withPositions([
|
|
42021
|
+
{
|
|
42022
|
+
originX: 'end',
|
|
42023
|
+
originY: 'bottom',
|
|
42024
|
+
overlayX: 'end',
|
|
42025
|
+
overlayY: 'top',
|
|
42026
|
+
},
|
|
42027
|
+
{
|
|
42028
|
+
originX: 'end',
|
|
42029
|
+
originY: 'top',
|
|
42030
|
+
overlayX: 'end',
|
|
42031
|
+
overlayY: 'bottom',
|
|
42032
|
+
},
|
|
42033
|
+
]);
|
|
42034
|
+
this.overlayRef = this.overlay.create({
|
|
42035
|
+
hasBackdrop: true,
|
|
42036
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
42037
|
+
positionStrategy: positionStrategy,
|
|
42038
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
42039
|
+
});
|
|
42040
|
+
const portal = new TemplatePortal(template, this.viewContainerRef);
|
|
42041
|
+
this.overlayRef.attach(portal);
|
|
42042
|
+
this.subscription.add(this.overlayRef.backdropClick().subscribe(() => {
|
|
42043
|
+
this.closeActionMenu();
|
|
42044
|
+
}));
|
|
42045
|
+
}
|
|
42046
|
+
closeActionMenu() {
|
|
42047
|
+
if (this.overlayRef) {
|
|
42048
|
+
this.isActionMenuOpen = false;
|
|
42049
|
+
this.overlayRef.dispose();
|
|
42050
|
+
this.cdr.markForCheck();
|
|
42051
|
+
}
|
|
42052
|
+
}
|
|
42053
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultilingualPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42054
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: MultilingualPanelComponent, isStandalone: true, selector: "gn-ui-multilingual-panel", inputs: { record: "record" }, providers: [
|
|
42055
|
+
provideIcons({
|
|
42056
|
+
iconoirSettings,
|
|
42057
|
+
matMoreHorizOutline,
|
|
42058
|
+
iconoirCheckCircle,
|
|
42059
|
+
iconoirCircle,
|
|
42060
|
+
}),
|
|
42061
|
+
provideNgIconsConfig({
|
|
42062
|
+
size: '1.25em',
|
|
42063
|
+
}),
|
|
42064
|
+
], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n @if (isMultilingual) {\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n }\n </div>\n @if (editTranslations || !isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n @if (isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"flex flex-row justify-between border-t border-gray-300 p-3\"\n >\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n @if (supportedLanguages$ | async; as languages) {\n @for (lang of languages; track lang) {\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n [attr.data-test-lang]=\"lang\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n @if (!editTranslations && isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n @for (\n recordLang of sortLanguages(recordLanguages);\n track recordLang;\n let i = $index\n ) {\n <gn-ui-button\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <ng-icon\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n }\n @if (recordLang !== formLanguage) {\n <ng-icon\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n }\n @if (recordLang.length === 2) {\n <span [class]=\"getIconClass(recordLang) + 'mt-1'\"></span>\n }\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <span class=\"text-xs text-base\" translate\n >editor.record.form.multilingual.default</span\n >\n }\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "isDuplicating", "canDelete", "page"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback", "switch"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
42065
|
+
}
|
|
42066
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: MultilingualPanelComponent, decorators: [{
|
|
42067
|
+
type: Component,
|
|
42068
|
+
args: [{ selector: 'gn-ui-multilingual-panel', standalone: true, imports: [
|
|
42069
|
+
CommonModule,
|
|
42070
|
+
CheckToggleComponent,
|
|
42071
|
+
TranslateDirective,
|
|
42072
|
+
TranslatePipe,
|
|
42073
|
+
ButtonComponent,
|
|
42074
|
+
NgIconComponent,
|
|
42075
|
+
ActionMenuComponent,
|
|
42076
|
+
], providers: [
|
|
42077
|
+
provideIcons({
|
|
42078
|
+
iconoirSettings,
|
|
42079
|
+
matMoreHorizOutline,
|
|
42080
|
+
iconoirCheckCircle,
|
|
42081
|
+
iconoirCircle,
|
|
42082
|
+
}),
|
|
42083
|
+
provideNgIconsConfig({
|
|
42084
|
+
size: '1.25em',
|
|
42085
|
+
}),
|
|
42086
|
+
], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n @if (isMultilingual) {\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n }\n </div>\n @if (editTranslations || !isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n @if (isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"flex flex-row justify-between border-t border-gray-300 p-3\"\n >\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n @if (supportedLanguages$ | async; as languages) {\n @for (lang of languages; track lang) {\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n [attr.data-test-lang]=\"lang\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n @if (!editTranslations && isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n @for (\n recordLang of sortLanguages(recordLanguages);\n track recordLang;\n let i = $index\n ) {\n <gn-ui-button\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <ng-icon\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n }\n @if (recordLang !== formLanguage) {\n <ng-icon\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n }\n @if (recordLang.length === 2) {\n <span [class]=\"getIconClass(recordLang) + 'mt-1'\"></span>\n }\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <span class=\"text-xs text-base\" translate\n >editor.record.form.multilingual.default</span\n >\n }\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n }\n </div>\n }\n</div>\n" }]
|
|
42087
|
+
}], propDecorators: { record: [{
|
|
42088
|
+
type: Input
|
|
42089
|
+
}], actionMenuButtons: [{
|
|
42090
|
+
type: ViewChildren,
|
|
42091
|
+
args: ['actionMenuButton', { read: ElementRef }]
|
|
42092
|
+
}] } });
|
|
42093
|
+
|
|
41888
42094
|
class GenericKeywordsComponent {
|
|
41889
42095
|
constructor() {
|
|
41890
42096
|
this.platformService = inject(PlatformServiceInterface);
|
|
@@ -43763,327 +43969,148 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
43763
43969
|
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateDirective], template: "<div class=\"flex flex-col gap-6\">\n @for (\n section of facade.currentSections$ | async;\n track sectionTracker($index, section)\n ) {\n @if (!section.hidden) {\n <div class=\"flex flex-col gap-6 border p-8 rounded-[8px] shadow\">\n <div class=\"flex flex-col gap-2\">\n @if (section.labelKey) {\n <div class=\"text-2xl font-title text-black\" translate>\n {{ section.labelKey }}\n </div>\n }\n @if (section.descriptionKey) {\n <div class=\"text-gray-800 text-sm\" translate>\n {{ section.descriptionKey }}\n </div>\n }\n </div>\n <div class=\"grid auto-rows-auto grid-cols-2 gap-[32px]\">\n @for (\n field of section.fieldsWithValues;\n track fieldTracker($index, field)\n ) {\n @if (!field.config.hidden) {\n <gn-ui-form-field\n [ngClass]=\"\n field.config.gridColumnSpan === 1\n ? 'col-span-1'\n : 'col-span-2'\n \"\n [uniqueIdentifier]=\"recordUniqueIdentifier$ | async\"\n [model]=\"field.config.model!\"\n [modelSpecifier]=\"field.config.modelSpecifier!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n [componentName]=\"field.config.componentName\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n }\n }\n </div>\n </div>\n }\n }\n</div>\n" }]
|
|
43764
43970
|
}] });
|
|
43765
43971
|
|
|
43766
|
-
|
|
43767
|
-
|
|
43768
|
-
|
|
43769
|
-
ko: 'kr',
|
|
43770
|
-
cs: 'cz',
|
|
43771
|
-
zh: 'cn',
|
|
43772
|
-
ca: 'es-ct',
|
|
43773
|
-
rm: 'ch',
|
|
43774
|
-
da: 'dk',
|
|
43775
|
-
sv: 'se',
|
|
43776
|
-
cy: 'gb-wls',
|
|
43777
|
-
hy: 'am',
|
|
43778
|
-
ka: 'ge',
|
|
43779
|
-
uk: 'ua',
|
|
43780
|
-
};
|
|
43781
|
-
class MultilingualPanelComponent {
|
|
43782
|
-
constructor() {
|
|
43783
|
-
this.facade = inject(EditorFacade);
|
|
43784
|
-
this.dialog = inject(MatDialog);
|
|
43785
|
-
this.translateService = inject(TranslateService);
|
|
43786
|
-
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
43787
|
-
this.overlay = inject(Overlay);
|
|
43788
|
-
this.viewContainerRef = inject(ViewContainerRef);
|
|
43789
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
43790
|
-
this.selectedLanguages = [];
|
|
43791
|
-
this.recordLanguages = [];
|
|
43792
|
-
this.formLanguage = '';
|
|
43793
|
-
this.isActionMenuOpen = false;
|
|
43794
|
-
this.subscription = new Subscription();
|
|
43795
|
-
this.supportedLanguages$ = this.recordsRepository
|
|
43796
|
-
.getApplicationLanguages()
|
|
43797
|
-
.pipe(map$2((languages) => this.sortLanguages(languages)));
|
|
43798
|
-
}
|
|
43799
|
-
set record(value) {
|
|
43800
|
-
this._record = value;
|
|
43801
|
-
this.isMultilingual = value.otherLanguages.length > 0;
|
|
43802
|
-
this.editTranslations = false;
|
|
43803
|
-
this.recordLanguages = [...value.otherLanguages, value.defaultLanguage];
|
|
43804
|
-
this.selectedLanguages = this.recordLanguages;
|
|
43805
|
-
this.formLanguage = value.defaultLanguage;
|
|
43806
|
-
}
|
|
43807
|
-
ngOnDestroy() {
|
|
43808
|
-
this.subscription.unsubscribe();
|
|
43809
|
-
}
|
|
43810
|
-
sortLanguages(languages) {
|
|
43811
|
-
return languages
|
|
43812
|
-
.map((lang) => {
|
|
43813
|
-
const label = this.translateService.instant('language.' + lang);
|
|
43814
|
-
const isTranslated = label !== 'language.' + lang;
|
|
43815
|
-
return {
|
|
43816
|
-
lang,
|
|
43817
|
-
label,
|
|
43818
|
-
isTranslated,
|
|
43819
|
-
};
|
|
43820
|
-
})
|
|
43821
|
-
.sort((a, b) => {
|
|
43822
|
-
if (a.isTranslated && !b.isTranslated)
|
|
43823
|
-
return -1;
|
|
43824
|
-
if (!a.isTranslated && b.isTranslated)
|
|
43825
|
-
return 1;
|
|
43826
|
-
return a.label.localeCompare(b.label);
|
|
43827
|
-
})
|
|
43828
|
-
.map((item) => item.lang);
|
|
43829
|
-
}
|
|
43830
|
-
toggleLanguageSelection() {
|
|
43831
|
-
this.editTranslations = !this.editTranslations;
|
|
43832
|
-
}
|
|
43833
|
-
getIconClass(lang) {
|
|
43834
|
-
return extraFlagMap[lang]
|
|
43835
|
-
? `fi fi-${extraFlagMap[lang]} w-4 h-3`
|
|
43836
|
-
: `fi fi-${lang} w-4 h-3`;
|
|
43837
|
-
}
|
|
43838
|
-
switchMultilingual() {
|
|
43839
|
-
if (this.isMultilingual && this.selectedLanguages.length > 1) {
|
|
43840
|
-
this.confirmDeleteAction();
|
|
43841
|
-
}
|
|
43842
|
-
else {
|
|
43843
|
-
this.isMultilingual = true;
|
|
43844
|
-
this.editTranslations = true;
|
|
43845
|
-
}
|
|
43846
|
-
}
|
|
43847
|
-
getExtraClass(lang) {
|
|
43848
|
-
const baseClass = 'h-[34px] w-full font-bold justify-start hover:bg-white';
|
|
43849
|
-
if (this.selectedLanguages.includes(lang)) {
|
|
43850
|
-
return `${baseClass} bg-white border border-black`;
|
|
43851
|
-
}
|
|
43852
|
-
return baseClass;
|
|
43972
|
+
function evaluate(expression) {
|
|
43973
|
+
if (expression.match(/^\${.*}$/)) {
|
|
43974
|
+
return evaluate(expression.slice(2, -1));
|
|
43853
43975
|
}
|
|
43854
|
-
|
|
43855
|
-
|
|
43856
|
-
|
|
43857
|
-
|
|
43858
|
-
|
|
43859
|
-
|
|
43860
|
-
}
|
|
43976
|
+
const operator = expression.split('(')[0];
|
|
43977
|
+
switch (operator) {
|
|
43978
|
+
case 'dateNow':
|
|
43979
|
+
return () => new Date();
|
|
43980
|
+
default:
|
|
43981
|
+
throw new Error(`Unknown operator: ${operator}`);
|
|
43861
43982
|
}
|
|
43862
|
-
|
|
43863
|
-
|
|
43983
|
+
}
|
|
43984
|
+
|
|
43985
|
+
class EditorService {
|
|
43986
|
+
constructor() {
|
|
43987
|
+
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
43864
43988
|
}
|
|
43865
|
-
|
|
43866
|
-
|
|
43867
|
-
|
|
43868
|
-
|
|
43869
|
-
|
|
43989
|
+
// returns the record as it was when saved, alongside its source
|
|
43990
|
+
saveRecord(record, recordSource, fieldsConfig) {
|
|
43991
|
+
const savedRecord = { ...record };
|
|
43992
|
+
const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
|
|
43993
|
+
// run onSave processes
|
|
43994
|
+
for (const field of fields) {
|
|
43995
|
+
if (field.onSaveProcess && field.model) {
|
|
43996
|
+
const evaluator = evaluate(field.onSaveProcess);
|
|
43997
|
+
savedRecord[field.model] = evaluator({
|
|
43998
|
+
model: field.model,
|
|
43999
|
+
value: record[field.model],
|
|
44000
|
+
});
|
|
44001
|
+
}
|
|
43870
44002
|
}
|
|
43871
|
-
|
|
43872
|
-
|
|
44003
|
+
let publishToAll = true;
|
|
44004
|
+
// if the record is new, generate a new unique identifier and pass publishToAll as false
|
|
44005
|
+
if (!record.uniqueIdentifier) {
|
|
44006
|
+
savedRecord.uniqueIdentifier = null;
|
|
44007
|
+
publishToAll = false;
|
|
43873
44008
|
}
|
|
44009
|
+
return this.recordsRepository
|
|
44010
|
+
.saveRecord(savedRecord, recordSource, publishToAll)
|
|
44011
|
+
.pipe(switchMap((uniqueIdentifier) => this.recordsRepository.openRecordForEdition(uniqueIdentifier)), tap$1(() => {
|
|
44012
|
+
// if saving was successful, the original draft can be discarded
|
|
44013
|
+
this.recordsRepository.clearRecordDraft(record.uniqueIdentifier);
|
|
44014
|
+
}), map$1(([record, recordSource]) => [record, recordSource]));
|
|
43874
44015
|
}
|
|
43875
|
-
|
|
43876
|
-
|
|
43877
|
-
|
|
43878
|
-
|
|
43879
|
-
this.
|
|
43880
|
-
|
|
43881
|
-
|
|
43882
|
-
// TO IMPLEMENT FURTHER
|
|
43883
|
-
}
|
|
43884
|
-
switchDefaultLang(lang) {
|
|
43885
|
-
this.formLanguage = lang;
|
|
43886
|
-
this.facade.updateRecordLanguages(lang, this.selectedLanguages.filter((lang) => lang !== this.formLanguage));
|
|
43887
|
-
this.closeActionMenu();
|
|
43888
|
-
}
|
|
43889
|
-
confirmDeleteAction(lang) {
|
|
43890
|
-
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
43891
|
-
data: {
|
|
43892
|
-
title: this.translateService.instant('editor.record.multilingual.confirmation.title'),
|
|
43893
|
-
message: this.translateService.instant('editor.record.multilingual.confirmation.message'),
|
|
43894
|
-
confirmText: this.translateService.instant('editor.record.multilingual.confirmation.confirmText'),
|
|
43895
|
-
cancelText: this.translateService.instant('editor.record.multilingual.confirmation.cancelText'),
|
|
43896
|
-
focusCancel: true,
|
|
43897
|
-
},
|
|
43898
|
-
restoreFocus: true,
|
|
43899
|
-
});
|
|
43900
|
-
this.subscription.add(dialogRef.afterClosed().subscribe((confirmed) => {
|
|
43901
|
-
if (confirmed) {
|
|
43902
|
-
if (lang) {
|
|
43903
|
-
if (!Array.isArray(lang)) {
|
|
43904
|
-
this.removeSelectedLanguage(lang);
|
|
43905
|
-
this.closeActionMenu();
|
|
43906
|
-
}
|
|
43907
|
-
this.updateTranslations();
|
|
43908
|
-
}
|
|
43909
|
-
else {
|
|
43910
|
-
this.facade.updateRecordLanguages(this.formLanguage, []);
|
|
43911
|
-
this.isMultilingual = false;
|
|
43912
|
-
this.selectedLanguages = [];
|
|
43913
|
-
}
|
|
43914
|
-
}
|
|
43915
|
-
else {
|
|
43916
|
-
this.isMultilingual = true;
|
|
43917
|
-
this.selectedLanguages = this.recordLanguages;
|
|
43918
|
-
}
|
|
43919
|
-
this.editTranslations = false;
|
|
43920
|
-
}));
|
|
43921
|
-
}
|
|
43922
|
-
isFirstUnsupported(index) {
|
|
43923
|
-
const langs = this.sortLanguages(this.recordLanguages);
|
|
43924
|
-
return (langs[index].length === 3 &&
|
|
43925
|
-
langs.slice(0, index).every((lang) => lang.length !== 3));
|
|
43926
|
-
}
|
|
43927
|
-
isLangSupported(lang) {
|
|
43928
|
-
return lang.length === 2;
|
|
43929
|
-
}
|
|
43930
|
-
getToggleTitle(lang) {
|
|
43931
|
-
if (lang === this._record.defaultLanguage) {
|
|
43932
|
-
return this.translateService.instant('editor.record.form.multilingual.forbidden');
|
|
43933
|
-
}
|
|
43934
|
-
return '';
|
|
44016
|
+
// emits and completes once saving is done
|
|
44017
|
+
// note: onSave processes are not run for drafts
|
|
44018
|
+
saveRecordAsDraft(record, recordSource) {
|
|
44019
|
+
record.recordUpdated = new Date();
|
|
44020
|
+
return this.recordsRepository
|
|
44021
|
+
.saveRecordAsDraft(record, recordSource)
|
|
44022
|
+
.pipe(map$1(() => undefined));
|
|
43935
44023
|
}
|
|
43936
|
-
|
|
43937
|
-
this.
|
|
43938
|
-
|
|
43939
|
-
const buttonElement = this.actionMenuButtons.toArray()[index];
|
|
43940
|
-
const positionStrategy = this.overlay
|
|
43941
|
-
.position()
|
|
43942
|
-
.flexibleConnectedTo(buttonElement)
|
|
43943
|
-
.withFlexibleDimensions(true)
|
|
43944
|
-
.withPush(true)
|
|
43945
|
-
.withPositions([
|
|
43946
|
-
{
|
|
43947
|
-
originX: 'end',
|
|
43948
|
-
originY: 'bottom',
|
|
43949
|
-
overlayX: 'end',
|
|
43950
|
-
overlayY: 'top',
|
|
43951
|
-
},
|
|
43952
|
-
{
|
|
43953
|
-
originX: 'end',
|
|
43954
|
-
originY: 'top',
|
|
43955
|
-
overlayX: 'end',
|
|
43956
|
-
overlayY: 'bottom',
|
|
43957
|
-
},
|
|
43958
|
-
]);
|
|
43959
|
-
this.overlayRef = this.overlay.create({
|
|
43960
|
-
hasBackdrop: true,
|
|
43961
|
-
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
43962
|
-
positionStrategy: positionStrategy,
|
|
43963
|
-
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
43964
|
-
});
|
|
43965
|
-
const portal = new TemplatePortal(template, this.viewContainerRef);
|
|
43966
|
-
this.overlayRef.attach(portal);
|
|
43967
|
-
this.subscription.add(this.overlayRef.backdropClick().subscribe(() => {
|
|
43968
|
-
this.closeActionMenu();
|
|
43969
|
-
}));
|
|
44024
|
+
undoRecordDraft(record) {
|
|
44025
|
+
this.recordsRepository.clearRecordDraft(record.uniqueIdentifier);
|
|
44026
|
+
return this.recordsRepository.openRecordForEdition(record.uniqueIdentifier);
|
|
43970
44027
|
}
|
|
43971
|
-
|
|
43972
|
-
|
|
43973
|
-
this.isActionMenuOpen = false;
|
|
43974
|
-
this.overlayRef.dispose();
|
|
43975
|
-
this.cdr.markForCheck();
|
|
43976
|
-
}
|
|
44028
|
+
hasRecordChangedSinceDraft(localRecord) {
|
|
44029
|
+
return this.recordsRepository.hasRecordChangedSinceDraft(localRecord);
|
|
43977
44030
|
}
|
|
43978
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
43979
|
-
static { this.ɵ
|
|
43980
|
-
provideIcons({
|
|
43981
|
-
iconoirSettings,
|
|
43982
|
-
matMoreHorizOutline,
|
|
43983
|
-
iconoirCheckCircle,
|
|
43984
|
-
iconoirCircle,
|
|
43985
|
-
}),
|
|
43986
|
-
provideNgIconsConfig({
|
|
43987
|
-
size: '1.25em',
|
|
43988
|
-
}),
|
|
43989
|
-
], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n @if (isMultilingual) {\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n }\n </div>\n @if (editTranslations || !isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n @if (isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"flex flex-row justify-between border-t border-gray-300 p-3\"\n >\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n @if (supportedLanguages$ | async; as languages) {\n @for (lang of languages; track lang) {\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n [attr.data-test-lang]=\"lang\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n @if (!editTranslations && isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n @for (\n recordLang of sortLanguages(recordLanguages);\n track recordLang;\n let i = $index\n ) {\n <gn-ui-button\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <ng-icon\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n }\n @if (recordLang !== formLanguage) {\n <ng-icon\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n }\n @if (recordLang.length === 2) {\n <span [class]=\"getIconClass(recordLang) + 'mt-1'\"></span>\n }\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <span class=\"text-xs text-base\" translate\n >editor.record.form.multilingual.default</span\n >\n }\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "isDuplicating", "canDelete", "page"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback", "switch"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
44031
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44032
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
43990
44033
|
}
|
|
43991
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
43992
|
-
type:
|
|
43993
|
-
args: [{
|
|
43994
|
-
|
|
43995
|
-
|
|
43996
|
-
|
|
43997
|
-
TranslatePipe,
|
|
43998
|
-
ButtonComponent,
|
|
43999
|
-
NgIconComponent,
|
|
44000
|
-
ActionMenuComponent,
|
|
44001
|
-
], providers: [
|
|
44002
|
-
provideIcons({
|
|
44003
|
-
iconoirSettings,
|
|
44004
|
-
matMoreHorizOutline,
|
|
44005
|
-
iconoirCheckCircle,
|
|
44006
|
-
iconoirCircle,
|
|
44007
|
-
}),
|
|
44008
|
-
provideNgIconsConfig({
|
|
44009
|
-
size: '1.25em',
|
|
44010
|
-
}),
|
|
44011
|
-
], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n @if (isMultilingual) {\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n }\n </div>\n @if (editTranslations || !isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n @if (isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"flex flex-row justify-between border-t border-gray-300 p-3\"\n >\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n @if (supportedLanguages$ | async; as languages) {\n @for (lang of languages; track lang) {\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n [attr.data-test-lang]=\"lang\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n @if (!editTranslations && isMultilingual) {\n <div class=\"flex flex-col gap-2\">\n @for (\n recordLang of sortLanguages(recordLanguages);\n track recordLang;\n let i = $index\n ) {\n <gn-ui-button\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <ng-icon\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n }\n @if (recordLang !== formLanguage) {\n <ng-icon\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n }\n @if (recordLang.length === 2) {\n <span [class]=\"getIconClass(recordLang) + 'mt-1'\"></span>\n }\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (recordLang === formLanguage) {\n <span class=\"text-xs text-base\" translate\n >editor.record.form.multilingual.default</span\n >\n }\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n }\n </div>\n }\n</div>\n" }]
|
|
44012
|
-
}], propDecorators: { record: [{
|
|
44013
|
-
type: Input
|
|
44014
|
-
}], actionMenuButtons: [{
|
|
44015
|
-
type: ViewChildren,
|
|
44016
|
-
args: ['actionMenuButton', { read: ElementRef }]
|
|
44017
|
-
}] } });
|
|
44034
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorService, decorators: [{
|
|
44035
|
+
type: Injectable,
|
|
44036
|
+
args: [{
|
|
44037
|
+
providedIn: 'root',
|
|
44038
|
+
}]
|
|
44039
|
+
}] });
|
|
44018
44040
|
|
|
44019
|
-
|
|
44020
|
-
marker('editor.record.form.field.keywords');
|
|
44021
|
-
marker('editor.record.form.field.topics');
|
|
44022
|
-
marker('editor.record.form.field.contacts');
|
|
44023
|
-
marker('editor.record.form.field.organisation');
|
|
44024
|
-
class MetadataQualityPanelComponent {
|
|
44041
|
+
class EditorEffects {
|
|
44025
44042
|
constructor() {
|
|
44026
|
-
this.
|
|
44027
|
-
this.
|
|
44028
|
-
|
|
44029
|
-
|
|
44030
|
-
|
|
44031
|
-
|
|
44032
|
-
|
|
44033
|
-
|
|
44034
|
-
|
|
44035
|
-
|
|
44036
|
-
|
|
44037
|
-
|
|
44038
|
-
fieldsByPage[2].includes('organisation') ||
|
|
44039
|
-
fieldsByPage[2].push('organisation');
|
|
44043
|
+
this.actions$ = inject(Actions);
|
|
44044
|
+
this.editorService = inject(EditorService);
|
|
44045
|
+
this.recordsRepository = inject(RecordsRepositoryInterface);
|
|
44046
|
+
this.plateformService = inject(PlatformServiceInterface);
|
|
44047
|
+
this.store = inject(Store);
|
|
44048
|
+
this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource), this.store.select(selectEditorConfig)), switchMap$1(([, record, recordSource, fieldsConfig]) => this.editorService.saveRecord(record, recordSource, fieldsConfig).pipe(switchMap$1(([savedRecord, savedRecordSource]) => {
|
|
44049
|
+
const actions = [saveRecordSuccess()];
|
|
44050
|
+
if (!record?.uniqueIdentifier) {
|
|
44051
|
+
actions.push(openRecord({
|
|
44052
|
+
record: savedRecord,
|
|
44053
|
+
recordSource: savedRecordSource,
|
|
44054
|
+
}));
|
|
44040
44055
|
}
|
|
44041
|
-
|
|
44042
|
-
|
|
44043
|
-
|
|
44044
|
-
|
|
44045
|
-
|
|
44046
|
-
|
|
44047
|
-
|
|
44048
|
-
|
|
44049
|
-
|
|
44050
|
-
|
|
44051
|
-
|
|
44052
|
-
|
|
44053
|
-
|
|
44056
|
+
return of(...actions);
|
|
44057
|
+
}), catchError((error) => of(saveRecordFailure({
|
|
44058
|
+
error,
|
|
44059
|
+
})))))));
|
|
44060
|
+
this.cleanRecordAttachments$ = createEffect(() => this.actions$.pipe(ofType(saveRecordSuccess), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([_, record]) => {
|
|
44061
|
+
if (record.uniqueIdentifier !== null) {
|
|
44062
|
+
this.plateformService.cleanRecordAttachments(record).subscribe({
|
|
44063
|
+
next: (_) => undefined,
|
|
44064
|
+
error: (err) => {
|
|
44065
|
+
console.error(err);
|
|
44066
|
+
},
|
|
44067
|
+
});
|
|
44068
|
+
}
|
|
44069
|
+
return EMPTY;
|
|
44070
|
+
}), catchError((error) => {
|
|
44071
|
+
console.error(error);
|
|
44072
|
+
return EMPTY;
|
|
44073
|
+
})), { dispatch: false });
|
|
44074
|
+
this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField, updateRecordLanguages), map$1(() => markRecordAsChanged())));
|
|
44075
|
+
this.saveRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField, updateRecordLanguages), debounceTime$1(1000), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordSource)), switchMap$1(([, record, recordSource]) => this.editorService.saveRecordAsDraft(record, recordSource)), map$1(() => draftSaveSuccess())));
|
|
44076
|
+
this.undoRecordDraft$ = createEffect(() => this.actions$.pipe(ofType(undoRecordDraft), withLatestFrom$1(this.store.select(selectRecord)), switchMap$1(([, record]) => this.editorService.undoRecordDraft(record)), map$1(([record, recordSource]) => openRecord({
|
|
44077
|
+
record,
|
|
44078
|
+
recordSource,
|
|
44079
|
+
}))));
|
|
44080
|
+
this.checkHasChangesOnOpen$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => this.recordsRepository.recordHasDraft(record.uniqueIdentifier)), filter((hasDraft) => hasDraft), map$1(() => markRecordAsChanged())));
|
|
44081
|
+
this.hasRecordChangedSinceDraft$ = createEffect(() => this.actions$.pipe(ofType(hasRecordChangedSinceDraft), switchMap$1(({ record }) => this.editorService
|
|
44082
|
+
.hasRecordChangedSinceDraft(record)
|
|
44083
|
+
.pipe(map$1((changes) => hasRecordChangedSinceDraftSuccess({ changes }))))));
|
|
44084
|
+
this.checkIsRecordPublished$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => record.uniqueIdentifier), switchMap$1((uniqueIdentifier) => this.recordsRepository.getRecordPublicationStatus(uniqueIdentifier)), map$1((isPublished$1) => isPublished({
|
|
44085
|
+
isPublished: isPublished$1,
|
|
44086
|
+
}))));
|
|
44087
|
+
this.checkCanEditRecord$ = createEffect(() => this.actions$.pipe(ofType(openRecord), map$1(({ record }) => record.uniqueIdentifier), switchMap$1((uniqueIdentifier) => this.recordsRepository.canEditRecord(uniqueIdentifier)), map$1((canEditRecord$1) => canEditRecord({
|
|
44088
|
+
canEditRecord: canEditRecord$1,
|
|
44089
|
+
}))));
|
|
44054
44090
|
}
|
|
44055
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
44056
|
-
static { this.ɵ
|
|
44057
|
-
provideIcons({
|
|
44058
|
-
iconoirSystemShut,
|
|
44059
|
-
iconoirBadgeCheck,
|
|
44060
|
-
}),
|
|
44061
|
-
provideNgIconsConfig({
|
|
44062
|
-
size: '1.25em',
|
|
44063
|
-
}),
|
|
44064
|
-
], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n @for (properties of propertiesByPage; track properties; let i = $index) {\n <div class=\"flex flex-col gap-2\">\n @for (property of properties; track property) {\n <gn-ui-button\n [extraClass]=\"getExtraClass(property.value)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n @if (property.value) {\n <ng-icon class=\"text-primary\" name=\"iconoirBadgeCheck\"></ng-icon>\n } @else {\n <ng-icon\n class=\"text-neutral-300\"\n name=\"iconoirSystemShut\"\n ></ng-icon>\n }\n </div>\n </gn-ui-button>\n }\n @if (i !== propertiesByPage.length - 1) {\n <hr class=\"border-gray-300 w-11/12 mx-auto\" />\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
|
|
44091
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44092
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects }); }
|
|
44065
44093
|
}
|
|
44066
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type:
|
|
44067
|
-
type:
|
|
44068
|
-
|
|
44069
|
-
|
|
44070
|
-
|
|
44071
|
-
|
|
44072
|
-
|
|
44073
|
-
|
|
44074
|
-
|
|
44075
|
-
|
|
44076
|
-
|
|
44077
|
-
|
|
44078
|
-
|
|
44079
|
-
|
|
44080
|
-
|
|
44081
|
-
|
|
44082
|
-
|
|
44083
|
-
|
|
44084
|
-
|
|
44085
|
-
|
|
44086
|
-
}] } });
|
|
44094
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EditorEffects, decorators: [{
|
|
44095
|
+
type: Injectable
|
|
44096
|
+
}] });
|
|
44097
|
+
|
|
44098
|
+
class FeatureEditorModule {
|
|
44099
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
44100
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, imports: [i1.StoreFeatureModule, i2$2.EffectsFeatureModule] }); }
|
|
44101
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, providers: [EditorFacade, provideHttpClient()], imports: [StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
44102
|
+
EffectsModule.forFeature([EditorEffects])] }); }
|
|
44103
|
+
}
|
|
44104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FeatureEditorModule, decorators: [{
|
|
44105
|
+
type: NgModule,
|
|
44106
|
+
args: [{
|
|
44107
|
+
imports: [
|
|
44108
|
+
StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
44109
|
+
EffectsModule.forFeature([EditorEffects]),
|
|
44110
|
+
],
|
|
44111
|
+
providers: [EditorFacade, provideHttpClient()],
|
|
44112
|
+
}]
|
|
44113
|
+
}] });
|
|
44087
44114
|
|
|
44088
44115
|
const ROUTER_STATE_KEY = 'router';
|
|
44089
44116
|
const ROUTER_ROUTE_SEARCH = 'search';
|
|
@@ -44526,5 +44553,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
44526
44553
|
* Generated bundle index. Do not edit.
|
|
44527
44554
|
*/
|
|
44528
44555
|
|
|
44529
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
44556
|
+
export { ABOUT_SECTION, ADD_RESULTS, ADD_SEARCH, ANNEXES_SECTION, ASSOCIATED_RESOURCES_SECTION, AVAILABLE_LICENSES, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLASSIFICATION_SECTION, CLEAR_ERROR, CLEAR_RESULTS, CONSTRAINTS_SHORTCUTS, CONTACTS, CONTACTS_FOR_RESOURCE_FIELD, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DATA_MANAGERS_SECTION, DEFAULT_CONFIGURATION, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEOGRAPHICAL_COVERAGE_SECTION, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, INSPIRE_TOPICS, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LEGAL_CONSTRAINTS_FIELD, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, MAX_UPLOAD_SIZE_MB, METADATA_LANGUAGE, METADATA_POINT_OF_CONTACT_SECTION, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, OPEN_DATA_LICENSE, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OTHER_CONSTRAINTS_FIELD, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_ABSTRACT_FIELD, RECORD_DATASET_URL_TOKEN, RECORD_GRAPHICAL_OVERVIEW_FIELD, RECORD_KEYWORDS_FIELD, RECORD_LICENSE_FIELD, RECORD_ONLINE_LINK_RESOURCES, RECORD_ONLINE_RESOURCES, RECORD_RESOURCE_CREATED_FIELD, RECORD_RESOURCE_UPDATED_FIELD, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, RECORD_SPATIAL_EXTENTS_FIELD, RECORD_SPATIAL_TOGGLE_FIELD, RECORD_TEMPORAL_EXTENTS_FIELD, RECORD_TITLE_FIELD, RECORD_TOPICS_FIELD, RECORD_UNIQUE_IDENTIFIER_FIELD, RECORD_UPDATED_FIELD, RECORD_UPDATE_FREQUENCY_FIELD, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESOURCE_IDENTIFIER_FIELD, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SECURITY_CONSTRAINTS_FIELD, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SPATIAL_SCOPES, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TITLE_SECTION, TOPICS_SECTION, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, USE_AND_ACCESS_CONDITIONS_SECTION, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setEditorConfiguration, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
|
|
44530
44557
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|