geonetwork-ui 2.4.0-dev.a2f3bb9f → 2.4.0-dev.cd525aa1
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/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +57 -9
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -2
- package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +11 -3
- package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +5 -3
- package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +6 -2
- package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +3 -1
- package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +20 -40
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +2 -2
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +18 -10
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +7 -7
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -4
- package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +4 -3
- package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +1 -6
- package/esm2022/translations/de.json +5 -1
- package/esm2022/translations/en.json +5 -1
- package/esm2022/translations/es.json +5 -1
- package/esm2022/translations/fr.json +5 -1
- package/esm2022/translations/it.json +5 -1
- package/esm2022/translations/nl.json +5 -1
- package/esm2022/translations/pt.json +5 -1
- package/fesm2022/geonetwork-ui.mjs +156 -77
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +15 -3
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +24 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +6 -6
- package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +4 -0
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +5 -0
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +9 -8
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +10 -0
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +2 -0
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/services/editor.service.d.ts +6 -9
- package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +4 -1
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/widgets/src/lib/badge/badge.component.d.ts +2 -2
- package/libs/ui/widgets/src/lib/badge/badge.component.d.ts.map +1 -1
- package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +10 -11
- package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +145 -7
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +36 -3
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +203 -0
- package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +9 -9
- package/src/libs/data-access/gn4/src/spec.yaml +4 -5
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -1
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +31 -3
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -3
- package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +22 -5
- package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +10 -0
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +17 -52
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +1 -3
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +12 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +9 -1
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -1
- package/src/libs/ui/widgets/src/lib/badge/badge.component.html +1 -1
- package/src/libs/ui/widgets/src/lib/badge/badge.component.ts +4 -1
- package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -3
- package/tailwind.base.css +21 -1
- package/translations/de.json +5 -1
- package/translations/en.json +5 -1
- package/translations/es.json +5 -1
- package/translations/fr.json +5 -1
- package/translations/it.json +5 -1
- package/translations/nl.json +5 -1
- package/translations/pt.json +5 -1
- package/translations/sk.json +5 -1
|
@@ -3,8 +3,18 @@ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/mode
|
|
|
3
3
|
import { SaveRecordError } from './editor.models';
|
|
4
4
|
import { EditorFieldsConfig } from '../models/fields.model';
|
|
5
5
|
export declare const EDITOR_FEATURE_KEY = "editor";
|
|
6
|
+
/**
|
|
7
|
+
* @property record The record being edited
|
|
8
|
+
* @property recordSource Original representation of the record as text, used as a reference; null means the record hasn't be serialized yet
|
|
9
|
+
* @property saving
|
|
10
|
+
* @property saveError
|
|
11
|
+
* @property changedSinceSave
|
|
12
|
+
* @property fieldsConfig Configuration for the fields in the editor
|
|
13
|
+
*/
|
|
6
14
|
export interface EditorState {
|
|
7
15
|
record: CatalogRecord | null;
|
|
16
|
+
recordSource: string | null;
|
|
17
|
+
alreadySavedOnce: boolean;
|
|
8
18
|
saving: boolean;
|
|
9
19
|
saveError: SaveRecordError | null;
|
|
10
20
|
changedSinceSave: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.reducer.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/+state/editor.reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG3D,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;IACjC,gBAAgB,EAAE,OAAO,CAAA;IACzB,YAAY,EAAE,kBAAkB,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAA;CAC3C;AAED,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"editor.reducer.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/+state/editor.reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG3D,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;IACjC,gBAAgB,EAAE,OAAO,CAAA;IACzB,YAAY,EAAE,kBAAkB,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAA;CAC3C;AAED,eAAO,MAAM,kBAAkB,EAAE,WAQhC,CAAA;AA2CD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,eAE3E"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { EditorState } from './editor.reducer';
|
|
2
2
|
export declare const selectEditorState: import("@ngrx/store").MemoizedSelector<object, EditorState, import("@ngrx/store").DefaultProjectorFn<EditorState>>;
|
|
3
3
|
export declare const selectRecord: import("@ngrx/store").MemoizedSelector<object, import("../../../../../common/domain/src/lib/model/record").CatalogRecord, (s1: EditorState) => import("../../../../../common/domain/src/lib/model/record").CatalogRecord>;
|
|
4
|
+
export declare const selectRecordSource: import("@ngrx/store").MemoizedSelector<object, string, (s1: EditorState) => string>;
|
|
4
5
|
export declare const selectRecordSaving: import("@ngrx/store").MemoizedSelector<object, boolean, (s1: EditorState) => boolean>;
|
|
5
6
|
export declare const selectRecordSaveError: import("@ngrx/store").MemoizedSelector<object, string, (s1: EditorState) => string>;
|
|
6
7
|
export declare const selectRecordChangedSinceSave: import("@ngrx/store").MemoizedSelector<object, boolean, (s1: EditorState) => boolean>;
|
|
8
|
+
export declare const selectRecordAlreadySavedOnce: import("@ngrx/store").MemoizedSelector<object, boolean, (s1: EditorState) => boolean>;
|
|
7
9
|
export declare const selectRecordFieldsConfig: import("@ngrx/store").MemoizedSelector<object, import("../models/fields.model").EditorFieldsConfig, (s1: EditorState) => import("../models/fields.model").EditorFieldsConfig>;
|
|
8
10
|
export declare const selectRecordFields: import("@ngrx/store").MemoizedSelector<object, {
|
|
9
11
|
config: import("../models/fields.model").EditorFieldConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.selectors.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/+state/editor.selectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAElE,eAAO,MAAM,iBAAiB,oHAC0B,CAAA;AAExD,eAAO,MAAM,YAAY,2NAGxB,CAAA;AAED,eAAO,MAAM,kBAAkB,uFAG9B,CAAA;AAED,eAAO,MAAM,qBAAqB,qFAGjC,CAAA;AAED,eAAO,MAAM,4BAA4B,uFAGxC,CAAA;AAED,eAAO,MAAM,wBAAwB,+KAGpC,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;IAO9B,CAAA"}
|
|
1
|
+
{"version":3,"file":"editor.selectors.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/+state/editor.selectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAElE,eAAO,MAAM,iBAAiB,oHAC0B,CAAA;AAExD,eAAO,MAAM,YAAY,2NAGxB,CAAA;AAED,eAAO,MAAM,kBAAkB,qFAG9B,CAAA;AAED,eAAO,MAAM,kBAAkB,uFAG9B,CAAA;AAED,eAAO,MAAM,qBAAqB,qFAGjC,CAAA;AAED,eAAO,MAAM,4BAA4B,uFAGxC,CAAA;AAED,eAAO,MAAM,4BAA4B,uFAGxC,CAAA;AAED,eAAO,MAAM,wBAAwB,+KAGpC,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;IAO9B,CAAA"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { Configuration } from '../../../../../../libs/data-access/gn4/src';
|
|
2
1
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { HttpClient } from '@angular/common/http';
|
|
4
2
|
import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record';
|
|
5
3
|
import { EditorFieldsConfig } from '../models/fields.model';
|
|
4
|
+
import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
export declare class EditorService {
|
|
8
|
-
private
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
saveRecord(record: CatalogRecord, fieldsConfig: EditorFieldsConfig): Observable<CatalogRecord>;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<EditorService, [null, { optional: true; }]>;
|
|
7
|
+
private recordsRepository;
|
|
8
|
+
constructor(recordsRepository: RecordsRepositoryInterface);
|
|
9
|
+
saveRecord(record: CatalogRecord, fieldsConfig: EditorFieldsConfig): Observable<[CatalogRecord, string]>;
|
|
10
|
+
saveRecordAsDraft(record: CatalogRecord): Observable<void>;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EditorService, never>;
|
|
15
12
|
static ɵprov: i0.ɵɵInjectableDeclaration<EditorService>;
|
|
16
13
|
}
|
|
17
14
|
//# sourceMappingURL=editor.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.service.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/services/editor.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editor.service.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/editor/src/lib/services/editor.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;;AAEjI,qBAGa,aAAa;IACZ,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,0BAA0B;IAGjE,UAAU,CACR,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,kBAAkB,GAC/B,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAoBtC,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC;yCA3B/C,aAAa;6CAAb,aAAa;CAgCzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdview.effects.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/record/src/lib/state/mdview.effects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAwB,MAAM,eAAe,CAAA;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;AACjI,OAAO,EAAE,wBAAwB,EAAE,MAAM,yEAAyE,CAAA;;AAElH,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,wBAAwB;gBAFxB,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,0BAA0B,EAC7C,wBAAwB,EAAE,wBAAwB;IAM5D,iBAAiB;;;;;
|
|
1
|
+
{"version":3,"file":"mdview.effects.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/record/src/lib/state/mdview.effects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAwB,MAAM,eAAe,CAAA;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;AACjI,OAAO,EAAE,wBAAwB,EAAE,MAAM,yEAAyE,CAAA;;AAElH,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,wBAAwB;gBAFxB,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,0BAA0B,EAC7C,wBAAwB,EAAE,wBAAwB;IAM5D,iBAAiB;;;;;oJAchB;IAKD,mBAAmB;;4IASlB;IAKD,kBAAkB;;;;;oJAkBjB;IAED,oBAAoB;;;;;oJAkBnB;IAED,gBAAgB;;;;;kJAsBf;yCAzGU,aAAa;6CAAb,aAAa;CA0GzB"}
|
|
@@ -5,15 +5,17 @@ import { SearchFacade } from '../state/search.facade';
|
|
|
5
5
|
import { SelectionService } from '../../../../../../libs/api/repository/src';
|
|
6
6
|
import { Observable } from 'rxjs';
|
|
7
7
|
import { SearchService } from '../utils/service/search.service';
|
|
8
|
+
import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
export declare class ResultsTableComponent {
|
|
10
11
|
private searchFacade;
|
|
11
12
|
private searchService;
|
|
12
13
|
private selectionService;
|
|
14
|
+
private recordsRepository;
|
|
13
15
|
recordClick: EventEmitter<CatalogRecord>;
|
|
14
16
|
records$: Observable<CatalogRecord[]>;
|
|
15
17
|
selectedRecords$: import("rxjs").BehaviorSubject<string[]>;
|
|
16
|
-
constructor(searchFacade: SearchFacade, searchService: SearchService, selectionService: SelectionService);
|
|
18
|
+
constructor(searchFacade: SearchFacade, searchService: SearchService, selectionService: SelectionService, recordsRepository: RecordsRepositoryInterface);
|
|
17
19
|
dateToString(date: Date): string;
|
|
18
20
|
getStatus(isPublishedToAll: boolean | unknown): "published" | "not published";
|
|
19
21
|
getRecordFormats(record: CatalogRecord): FileFormat[];
|
|
@@ -27,6 +29,7 @@ export declare class ResultsTableComponent {
|
|
|
27
29
|
toggleSelectAll(): Promise<void>;
|
|
28
30
|
isAllSelected(): Observable<boolean>;
|
|
29
31
|
isSomeSelected(): Observable<boolean>;
|
|
32
|
+
hasDraft(record: CatalogRecord): boolean;
|
|
30
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResultsTableComponent, never>;
|
|
31
34
|
static ɵcmp: i0.ɵɵComponentDeclaration<ResultsTableComponent, "gn-ui-results-table", never, {}, { "recordClick": "recordClick"; }, never, never, true, never>;
|
|
32
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"results-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/search/src/lib/results-table/results-table.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAU,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EACL,UAAU,EAIX,MAAM,wCAAwC,CAAA;AAQ/C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAiC,UAAU,EAAE,MAAM,MAAM,CAAA;AAIhE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA
|
|
1
|
+
{"version":3,"file":"results-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/search/src/lib/results-table/results-table.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAU,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EACL,UAAU,EAIX,MAAM,wCAAwC,CAAA;AAQ/C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAiC,UAAU,EAAE,MAAM,MAAM,CAAA;AAIhE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;;AAEjI,qBAea,qBAAqB;IAO9B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IATjB,WAAW,8BAAoC;IAEzD,QAAQ,8BAA6B;IACrC,gBAAgB,2CAAoD;gBAG1D,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,0BAA0B;IAGvD,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAShC,SAAS,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO;IAI7C,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IAarD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAQlD,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIzC,iBAAiB,CAAC,IAAI,EAAE,OAAO;IAI/B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;IAI5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAiB1D,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;IASrD,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAQ7D,eAAe;IASrB,aAAa,IAAI,UAAU,CAAC,OAAO,CAAC;IAWpC,cAAc,IAAI,UAAU,CAAC,OAAO,CAAC;IAerC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;yCAhI7B,qBAAqB;2CAArB,qBAAqB;CAmIjC"}
|
|
@@ -32,9 +32,10 @@ import * as i30 from "@angular/forms";
|
|
|
32
32
|
import * as i31 from "./markdown-parser/markdown-parser.component";
|
|
33
33
|
import * as i32 from "./thumbnail/thumbnail.component";
|
|
34
34
|
import * as i33 from "./user-feedback-item/time-since.pipe";
|
|
35
|
+
import * as i34 from "../../../widgets/src/lib/badge/badge.component";
|
|
35
36
|
export declare class UiElementsModule {
|
|
36
37
|
static ɵfac: i0.ɵɵFactoryDeclaration<UiElementsModule, never>;
|
|
37
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<UiElementsModule, [typeof i1.MetadataInfoComponent, typeof i2.ContentGhostComponent, typeof i3.DownloadItemComponent, typeof i4.DownloadsListComponent, typeof i5.ApiCardComponent, typeof i6.RelatedRecordCardComponent, typeof i7.MetadataContactComponent, typeof i8.MetadataCatalogComponent, typeof i9.MetadataQualityComponent, typeof i10.MetadataQualityItemComponent, typeof i11.ErrorComponent, typeof i12.PaginationComponent, typeof i13.AvatarComponent, typeof i14.UserPreviewComponent, typeof i15.GnUiLinkifyDirective, typeof i16.PaginationButtonsComponent, typeof i17.MaxLinesComponent, typeof i18.RecordApiFormComponent, typeof i19.UserFeedbackItemComponent, typeof i20.ImageOverlayPreviewComponent], [typeof i21.CommonModule, typeof i22.MatIconModule, typeof i23.MatTooltipModule, typeof i24.UiWidgetsModule, typeof i25.UiLayoutModule, typeof i26.TranslateModule, typeof i27.UtilSharedModule, typeof i28.RouterModule, typeof i29.UiInputsModule, typeof i30.FormsModule, typeof i21.NgOptimizedImage, typeof i31.MarkdownParserComponent, typeof i32.ThumbnailComponent, typeof i33.TimeSincePipe], [typeof i1.MetadataInfoComponent, typeof i2.ContentGhostComponent, typeof i3.DownloadItemComponent, typeof i4.DownloadsListComponent, typeof i5.ApiCardComponent, typeof i6.RelatedRecordCardComponent, typeof i7.MetadataContactComponent, typeof i8.MetadataCatalogComponent, typeof i9.MetadataQualityComponent, typeof i10.MetadataQualityItemComponent, typeof i11.ErrorComponent, typeof i12.PaginationComponent, typeof i32.ThumbnailComponent, typeof i13.AvatarComponent, typeof i14.UserPreviewComponent, typeof i16.PaginationButtonsComponent, typeof i17.MaxLinesComponent, typeof i18.RecordApiFormComponent, typeof i31.MarkdownParserComponent, typeof i19.UserFeedbackItemComponent, typeof i20.ImageOverlayPreviewComponent]>;
|
|
38
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UiElementsModule, [typeof i1.MetadataInfoComponent, typeof i2.ContentGhostComponent, typeof i3.DownloadItemComponent, typeof i4.DownloadsListComponent, typeof i5.ApiCardComponent, typeof i6.RelatedRecordCardComponent, typeof i7.MetadataContactComponent, typeof i8.MetadataCatalogComponent, typeof i9.MetadataQualityComponent, typeof i10.MetadataQualityItemComponent, typeof i11.ErrorComponent, typeof i12.PaginationComponent, typeof i13.AvatarComponent, typeof i14.UserPreviewComponent, typeof i15.GnUiLinkifyDirective, typeof i16.PaginationButtonsComponent, typeof i17.MaxLinesComponent, typeof i18.RecordApiFormComponent, typeof i19.UserFeedbackItemComponent, typeof i20.ImageOverlayPreviewComponent], [typeof i21.CommonModule, typeof i22.MatIconModule, typeof i23.MatTooltipModule, typeof i24.UiWidgetsModule, typeof i25.UiLayoutModule, typeof i26.TranslateModule, typeof i27.UtilSharedModule, typeof i28.RouterModule, typeof i29.UiInputsModule, typeof i30.FormsModule, typeof i21.NgOptimizedImage, typeof i31.MarkdownParserComponent, typeof i32.ThumbnailComponent, typeof i33.TimeSincePipe, typeof i34.BadgeComponent], [typeof i1.MetadataInfoComponent, typeof i2.ContentGhostComponent, typeof i3.DownloadItemComponent, typeof i4.DownloadsListComponent, typeof i5.ApiCardComponent, typeof i6.RelatedRecordCardComponent, typeof i7.MetadataContactComponent, typeof i8.MetadataCatalogComponent, typeof i9.MetadataQualityComponent, typeof i10.MetadataQualityItemComponent, typeof i11.ErrorComponent, typeof i12.PaginationComponent, typeof i32.ThumbnailComponent, typeof i13.AvatarComponent, typeof i14.UserPreviewComponent, typeof i16.PaginationButtonsComponent, typeof i17.MaxLinesComponent, typeof i18.RecordApiFormComponent, typeof i31.MarkdownParserComponent, typeof i19.UserFeedbackItemComponent, typeof i20.ImageOverlayPreviewComponent]>;
|
|
38
39
|
static ɵinj: i0.ɵɵInjectorDeclaration<UiElementsModule>;
|
|
39
40
|
}
|
|
40
41
|
//# sourceMappingURL=ui-elements.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-elements.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/ui/elements/src/lib/ui-elements.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui-elements.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/ui/elements/src/lib/ui-elements.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,qBAgEa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export declare class BadgeComponent {
|
|
3
|
-
clickable
|
|
3
|
+
clickable: boolean;
|
|
4
4
|
static ɵfac: i0.ɵɵFactoryDeclaration<BadgeComponent, never>;
|
|
5
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "gn-ui-badge", never, { "clickable": { "alias": "clickable"; "required": false; }; }, {}, never, ["*"],
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BadgeComponent, "gn-ui-badge", never, { "clickable": { "alias": "clickable"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=badge.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/widgets/src/lib/badge/badge.component.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"badge.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/widgets/src/lib/badge/badge.component.ts"],"names":[],"mappings":";AAGA,qBAQa,cAAc;IAChB,SAAS,UAAQ;yCADf,cAAc;2CAAd,cAAc;CAE1B"}
|
|
@@ -4,19 +4,18 @@ import * as i2 from "./progress-bar/progress-bar.component";
|
|
|
4
4
|
import * as i3 from "./step-bar/step-bar.component";
|
|
5
5
|
import * as i4 from "./loading-mask/loading-mask.component";
|
|
6
6
|
import * as i5 from "./popup-alert/popup-alert.component";
|
|
7
|
-
import * as i6 from "./
|
|
8
|
-
import * as i7 from "
|
|
9
|
-
import * as i8 from "@
|
|
10
|
-
import * as i9 from "
|
|
11
|
-
import * as i10 from "
|
|
12
|
-
import * as i11 from "
|
|
13
|
-
import * as i12 from "
|
|
14
|
-
import * as i13 from "
|
|
15
|
-
import * as i14 from "@angular/material/
|
|
16
|
-
import * as i15 from "@angular/material/icon";
|
|
7
|
+
import * as i6 from "./spinning-loader/spinning-loader.component";
|
|
8
|
+
import * as i7 from "@angular/common";
|
|
9
|
+
import * as i8 from "@ngx-translate/core";
|
|
10
|
+
import * as i9 from "ngx-dropzone";
|
|
11
|
+
import * as i10 from "@angular/forms";
|
|
12
|
+
import * as i11 from "ngx-chips";
|
|
13
|
+
import * as i12 from "../../../../util/shared/src/lib/util-shared.module";
|
|
14
|
+
import * as i13 from "@angular/material/progress-spinner";
|
|
15
|
+
import * as i14 from "@angular/material/icon";
|
|
17
16
|
export declare class UiWidgetsModule {
|
|
18
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<UiWidgetsModule, never>;
|
|
19
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<UiWidgetsModule, [typeof i1.ColorScaleComponent, typeof i2.ProgressBarComponent, typeof i3.StepBarComponent, typeof i4.LoadingMaskComponent, typeof i5.PopupAlertComponent, typeof i6.
|
|
18
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UiWidgetsModule, [typeof i1.ColorScaleComponent, typeof i2.ProgressBarComponent, typeof i3.StepBarComponent, typeof i4.LoadingMaskComponent, typeof i5.PopupAlertComponent, typeof i6.SpinningLoaderComponent], [typeof i7.CommonModule, typeof i8.TranslateModule, typeof i9.NgxDropzoneModule, typeof i10.FormsModule, typeof i10.ReactiveFormsModule, typeof i11.TagInputModule, typeof i12.UtilSharedModule, typeof i13.MatProgressSpinnerModule, typeof i14.MatIconModule], [typeof i2.ProgressBarComponent, typeof i3.StepBarComponent, typeof i4.LoadingMaskComponent, typeof i5.PopupAlertComponent, typeof i6.SpinningLoaderComponent]>;
|
|
20
19
|
static ɵinj: i0.ɵɵInjectorDeclaration<UiWidgetsModule>;
|
|
21
20
|
}
|
|
22
21
|
//# sourceMappingURL=ui-widgets.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-widgets.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/ui/widgets/src/lib/ui-widgets.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ui-widgets.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/ui/widgets/src/lib/ui-widgets.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgBA,qBA4Ba,eAAe;yCAAf,eAAe;0CAAf,eAAe;0CAAf,eAAe;CAAG"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
RecordsApiService,
|
|
4
|
+
SearchApiService,
|
|
5
|
+
} from '../../../../../../libs/data-access/gn4/src'
|
|
3
6
|
import { ElasticsearchService } from './elasticsearch'
|
|
4
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
combineLatest,
|
|
9
|
+
from,
|
|
10
|
+
Observable,
|
|
11
|
+
of,
|
|
12
|
+
switchMap,
|
|
13
|
+
throwError,
|
|
14
|
+
} from 'rxjs'
|
|
5
15
|
import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
|
|
6
16
|
import {
|
|
7
17
|
SearchParams,
|
|
@@ -12,19 +22,23 @@ import {
|
|
|
12
22
|
AggregationsParams,
|
|
13
23
|
FieldFilters,
|
|
14
24
|
} from '../../../../../../libs/common/domain/src/lib/model/search'
|
|
15
|
-
import { map } from 'rxjs/operators'
|
|
25
|
+
import { catchError, map, tap } from 'rxjs/operators'
|
|
16
26
|
import {
|
|
27
|
+
findConverterForDocument,
|
|
17
28
|
Gn4Converter,
|
|
18
29
|
Gn4SearchResults,
|
|
30
|
+
Iso19139Converter,
|
|
19
31
|
} from '../../../../../../libs/api/metadata-converter/src'
|
|
20
32
|
import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
33
|
+
import { HttpErrorResponse } from '@angular/common/http'
|
|
21
34
|
|
|
22
35
|
@Injectable()
|
|
23
36
|
export class Gn4Repository implements RecordsRepositoryInterface {
|
|
24
37
|
constructor(
|
|
25
38
|
private gn4SearchApi: SearchApiService,
|
|
26
39
|
private gn4SearchHelper: ElasticsearchService,
|
|
27
|
-
private gn4Mapper: Gn4Converter
|
|
40
|
+
private gn4Mapper: Gn4Converter,
|
|
41
|
+
private gn4RecordsApi: RecordsApiService
|
|
28
42
|
) {}
|
|
29
43
|
|
|
30
44
|
search({
|
|
@@ -84,9 +98,7 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
84
98
|
.pipe(map((results: Gn4SearchResults) => results.hits.total?.value || 0))
|
|
85
99
|
}
|
|
86
100
|
|
|
87
|
-
|
|
88
|
-
uniqueIdentifier: string
|
|
89
|
-
): Observable<CatalogRecord | null> {
|
|
101
|
+
getRecord(uniqueIdentifier: string): Observable<CatalogRecord | null> {
|
|
90
102
|
return this.gn4SearchApi
|
|
91
103
|
.search(
|
|
92
104
|
'bucket',
|
|
@@ -165,4 +177,130 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
165
177
|
)
|
|
166
178
|
)
|
|
167
179
|
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Returns null if the record is not found
|
|
183
|
+
*/
|
|
184
|
+
private loadRecordAsXml(uniqueIdentifier: string): Observable<string | null> {
|
|
185
|
+
return this.gn4RecordsApi
|
|
186
|
+
.getRecordAs(
|
|
187
|
+
uniqueIdentifier,
|
|
188
|
+
undefined,
|
|
189
|
+
false,
|
|
190
|
+
undefined,
|
|
191
|
+
undefined,
|
|
192
|
+
undefined,
|
|
193
|
+
'application/xml',
|
|
194
|
+
'response',
|
|
195
|
+
undefined,
|
|
196
|
+
{ httpHeaderAccept: 'text/xml,application/xml' as 'application/xml' } // this is to make sure that the response is parsed as text
|
|
197
|
+
)
|
|
198
|
+
.pipe(
|
|
199
|
+
map((response) => response.body),
|
|
200
|
+
catchError((error: HttpErrorResponse) =>
|
|
201
|
+
error.status === 404 ? of(null) : throwError(() => error)
|
|
202
|
+
)
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private getLocalStorageKeyForRecord(uniqueIdentifier: string) {
|
|
207
|
+
return `geonetwork-ui-draft-${uniqueIdentifier}`
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
openRecordForEdition(
|
|
211
|
+
uniqueIdentifier: string
|
|
212
|
+
): Observable<[CatalogRecord, string, boolean] | null> {
|
|
213
|
+
const draft$ = of(
|
|
214
|
+
window.localStorage.getItem(
|
|
215
|
+
this.getLocalStorageKeyForRecord(uniqueIdentifier)
|
|
216
|
+
)
|
|
217
|
+
)
|
|
218
|
+
const recordAsXml$ = this.loadRecordAsXml(uniqueIdentifier)
|
|
219
|
+
return combineLatest([draft$, recordAsXml$]).pipe(
|
|
220
|
+
switchMap(([draft, recordAsXml]) => {
|
|
221
|
+
const xml = draft ?? recordAsXml
|
|
222
|
+
const isSavedAlready = recordAsXml !== null
|
|
223
|
+
return findConverterForDocument(xml)
|
|
224
|
+
.readRecord(xml)
|
|
225
|
+
.then(
|
|
226
|
+
(record) =>
|
|
227
|
+
[record, xml, isSavedAlready] as [CatalogRecord, string, boolean]
|
|
228
|
+
)
|
|
229
|
+
})
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private serializeRecordToXml(
|
|
234
|
+
record: CatalogRecord,
|
|
235
|
+
referenceRecordSource?: string
|
|
236
|
+
): Observable<string> {
|
|
237
|
+
// if there's a reference record, use that standard; otherwise, use iso19139
|
|
238
|
+
const converter = referenceRecordSource
|
|
239
|
+
? findConverterForDocument(referenceRecordSource)
|
|
240
|
+
: new Iso19139Converter()
|
|
241
|
+
return from(converter.writeRecord(record, referenceRecordSource))
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
saveRecord(
|
|
245
|
+
record: CatalogRecord,
|
|
246
|
+
referenceRecordSource?: string
|
|
247
|
+
): Observable<string> {
|
|
248
|
+
return this.serializeRecordToXml(record, referenceRecordSource).pipe(
|
|
249
|
+
switchMap((recordXml) =>
|
|
250
|
+
this.gn4RecordsApi
|
|
251
|
+
.insert(
|
|
252
|
+
'METADATA',
|
|
253
|
+
undefined,
|
|
254
|
+
undefined,
|
|
255
|
+
undefined,
|
|
256
|
+
true,
|
|
257
|
+
undefined,
|
|
258
|
+
'OVERWRITE',
|
|
259
|
+
undefined,
|
|
260
|
+
undefined,
|
|
261
|
+
undefined,
|
|
262
|
+
'_none_',
|
|
263
|
+
undefined,
|
|
264
|
+
undefined,
|
|
265
|
+
undefined,
|
|
266
|
+
recordXml
|
|
267
|
+
)
|
|
268
|
+
.pipe(map(() => recordXml))
|
|
269
|
+
),
|
|
270
|
+
tap(() => {
|
|
271
|
+
// if saving was successful, the associated draft can be discarded
|
|
272
|
+
window.localStorage.removeItem(
|
|
273
|
+
this.getLocalStorageKeyForRecord(record.uniqueIdentifier)
|
|
274
|
+
)
|
|
275
|
+
})
|
|
276
|
+
)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
saveRecordAsDraft(
|
|
280
|
+
record: CatalogRecord,
|
|
281
|
+
referenceRecordSource?: string
|
|
282
|
+
): Observable<string> {
|
|
283
|
+
return this.serializeRecordToXml(record, referenceRecordSource).pipe(
|
|
284
|
+
tap((recordXml) =>
|
|
285
|
+
window.localStorage.setItem(
|
|
286
|
+
this.getLocalStorageKeyForRecord(record.uniqueIdentifier),
|
|
287
|
+
recordXml
|
|
288
|
+
)
|
|
289
|
+
)
|
|
290
|
+
)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
clearRecordDraft(uniqueIdentifier: string): void {
|
|
294
|
+
window.localStorage.removeItem(
|
|
295
|
+
this.getLocalStorageKeyForRecord(uniqueIdentifier)
|
|
296
|
+
)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
recordHasDraft(uniqueIdentifier: string): boolean {
|
|
300
|
+
return (
|
|
301
|
+
window.localStorage.getItem(
|
|
302
|
+
this.getLocalStorageKeyForRecord(uniqueIdentifier)
|
|
303
|
+
) !== null
|
|
304
|
+
)
|
|
305
|
+
}
|
|
168
306
|
}
|
|
@@ -11,12 +11,45 @@ import { CatalogRecord } from '../model/record'
|
|
|
11
11
|
export abstract class RecordsRepositoryInterface {
|
|
12
12
|
abstract search(params: SearchParams): Observable<SearchResults>
|
|
13
13
|
abstract getMatchesCount(filters: FieldFilters): Observable<number>
|
|
14
|
-
abstract
|
|
15
|
-
uniqueIdentifier: string
|
|
16
|
-
): Observable<CatalogRecord | null>
|
|
14
|
+
abstract getRecord(uniqueIdentifier: string): Observable<CatalogRecord | null>
|
|
17
15
|
abstract aggregate(params: AggregationsParams): Observable<Aggregations>
|
|
18
16
|
abstract getSimilarRecords(
|
|
19
17
|
similarTo: CatalogRecord
|
|
20
18
|
): Observable<CatalogRecord[]>
|
|
21
19
|
abstract fuzzySearch(query: string): Observable<SearchResults>
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* This emits once:
|
|
23
|
+
* - record object; if a draft exists, this will return it
|
|
24
|
+
* - serialized representation of the record as text
|
|
25
|
+
* - boolean indicating if the record has been saved at least once in a final version (i.e. not only as draft)
|
|
26
|
+
* @param uniqueIdentifier
|
|
27
|
+
* @returns Observable<[CatalogRecord, string, boolean] | null>
|
|
28
|
+
*/
|
|
29
|
+
abstract openRecordForEdition(
|
|
30
|
+
uniqueIdentifier: string
|
|
31
|
+
): Observable<[CatalogRecord, string, boolean] | null>
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param record
|
|
35
|
+
* @param referenceRecordSource
|
|
36
|
+
* @returns Observable<string> Returns the source of the record as it was serialized when saved
|
|
37
|
+
*/
|
|
38
|
+
abstract saveRecord(
|
|
39
|
+
record: CatalogRecord,
|
|
40
|
+
referenceRecordSource?: string
|
|
41
|
+
): Observable<string>
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @param record
|
|
45
|
+
* @param referenceRecordSource
|
|
46
|
+
* @returns Observable<string> Returns the source of the record as it was serialized when saved
|
|
47
|
+
*/
|
|
48
|
+
abstract saveRecordAsDraft(
|
|
49
|
+
record: CatalogRecord,
|
|
50
|
+
referenceRecordSource?: string
|
|
51
|
+
): Observable<string>
|
|
52
|
+
|
|
53
|
+
abstract clearRecordDraft(uniqueIdentifier: string): void
|
|
54
|
+
abstract recordHasDraft(uniqueIdentifier: string): boolean
|
|
22
55
|
}
|