geonetwork-ui 2.6.0-dev.600519f47 → 2.6.0-dev.609dd7257

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.
Files changed (138) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +4 -1
  2. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -2
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +45 -15
  5. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  6. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  7. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  8. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  9. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +4 -3
  10. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  11. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +49 -23
  12. package/esm2022/libs/feature/search/src/lib/constants.mjs +3 -2
  13. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -3
  14. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  15. package/esm2022/libs/ui/elements/src/index.mjs +1 -2
  16. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -34
  17. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  18. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +35 -10
  19. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +5 -1
  20. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
  21. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -3
  22. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  23. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  24. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
  25. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
  26. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
  27. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +5 -3
  28. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +16 -8
  29. package/esm2022/translations/de.json +20 -6
  30. package/esm2022/translations/en.json +20 -6
  31. package/esm2022/translations/es.json +19 -5
  32. package/esm2022/translations/fr.json +20 -6
  33. package/esm2022/translations/it.json +22 -8
  34. package/esm2022/translations/nl.json +19 -5
  35. package/esm2022/translations/pt.json +19 -5
  36. package/fesm2022/geonetwork-ui.mjs +1003 -711
  37. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  38. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  39. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  40. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  41. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +8 -2
  42. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  43. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  44. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  45. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  46. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  47. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
  48. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  49. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -0
  50. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  51. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  52. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +13 -5
  53. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  54. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  55. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  56. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  57. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  58. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  59. package/libs/ui/elements/src/index.d.ts +0 -1
  60. package/libs/ui/elements/src/index.d.ts.map +1 -1
  61. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -6
  62. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  63. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  64. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  65. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  66. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  67. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  68. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  69. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  70. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  71. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  72. package/libs/ui/layout/src/index.d.ts +1 -0
  73. package/libs/ui/layout/src/index.d.ts.map +1 -1
  74. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  75. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  76. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  77. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  78. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
  79. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  80. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +2 -1
  81. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  82. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -3
  83. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +7 -0
  86. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -1
  87. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
  88. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +57 -14
  89. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  90. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  91. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
  92. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
  93. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +61 -0
  94. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +1 -1
  95. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +1 -0
  96. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +27 -9
  97. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +84 -27
  98. package/src/libs/feature/search/src/lib/constants.ts +2 -1
  99. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  100. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  101. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  102. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  103. package/src/libs/ui/elements/src/index.ts +0 -1
  104. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +8 -76
  105. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +20 -51
  106. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  107. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  108. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +48 -9
  109. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +4 -0
  110. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  111. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
  112. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -0
  113. package/src/libs/ui/layout/src/index.ts +1 -0
  114. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  115. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  116. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +2 -2
  117. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
  118. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  119. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
  120. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
  121. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +6 -4
  122. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +1 -0
  123. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +14 -20
  124. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +13 -5
  125. package/translations/de.json +20 -6
  126. package/translations/en.json +20 -6
  127. package/translations/es.json +19 -5
  128. package/translations/fr.json +20 -6
  129. package/translations/it.json +22 -8
  130. package/translations/nl.json +19 -5
  131. package/translations/pt.json +19 -5
  132. package/translations/sk.json +19 -5
  133. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +0 -56
  134. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +0 -19
  135. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +0 -1
  136. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.css +0 -0
  137. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +0 -9
  138. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +0 -61
@@ -0,0 +1,28 @@
1
+ import { AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef } from '@angular/core';
2
+ import { ConnectedPosition, ScrollDispatcher, CdkScrollable } from '@angular/cdk/overlay';
3
+ import * as i0 from "@angular/core";
4
+ export declare class CellPopinComponent implements AfterViewInit, OnDestroy {
5
+ private scrollDispatcher;
6
+ private cdr;
7
+ extraClass: string;
8
+ cdkScrollContainer: CdkScrollable;
9
+ scrollContainer: ElementRef;
10
+ anchorRef: ElementRef;
11
+ protected isOpen: boolean;
12
+ protected isVisible: boolean;
13
+ protected overlayPositions: ConnectedPosition[];
14
+ private firstCheck;
15
+ private intersectionObserver;
16
+ private _activePopin;
17
+ set activePopin(active: boolean | undefined);
18
+ get activePopin(): boolean;
19
+ constructor(scrollDispatcher: ScrollDispatcher, cdr: ChangeDetectorRef);
20
+ ngAfterViewInit(): void;
21
+ ngOnDestroy(): void;
22
+ updateIntersectionObserver(): void;
23
+ openOverlay(): void;
24
+ closeOverlay(): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<CellPopinComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<CellPopinComponent, "gn-ui-cell-popin", never, { "extraClass": { "alias": "extraClass"; "required": false; }; "cdkScrollContainer": { "alias": "cdkScrollContainer"; "required": false; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; }; "activePopin": { "alias": "activePopin"; "required": false; }; }, {}, never, ["[cellContent]", "[popinContent]"], true, never>;
27
+ }
28
+ //# sourceMappingURL=cell-popin.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-popin.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,SAAS,EACT,UAAU,EAIV,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAKtB,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EAGd,MAAM,sBAAsB,CAAA;;AAE7B,qBAca,kBAAmB,YAAW,aAAa,EAAE,SAAS;IAuC/D,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IAvCJ,UAAU,SAAK;IACf,kBAAkB,EAAG,aAAa,CAAA;IAClC,eAAe,EAAG,UAAU,CAAA;IAEb,SAAS,EAAG,UAAU,CAAA;IAE9C,SAAS,CAAC,MAAM,UAAQ;IACxB,SAAS,CAAC,SAAS,UAAO;IAC1B,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,CAa9C;IAED,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,oBAAoB,CAAsB;IAElD,OAAO,CAAC,YAAY,CAAO;IAE3B,IACI,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAG1C;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAGS,gBAAgB,EAAE,gBAAgB,EAClC,GAAG,EAAE,iBAAiB;IAGhC,eAAe;IAYf,WAAW;IAKX,0BAA0B;IAmC1B,WAAW;IAIX,YAAY;yCAnGD,kBAAkB;2CAAlB,kBAAkB;CAsG9B"}
@@ -1,18 +1,20 @@
1
1
  import { EventEmitter, QueryList } from '@angular/core';
2
2
  import { InteractiveTableColumnComponent } from './interactive-table-column/interactive-table-column.component';
3
3
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record';
4
+ import { Observable } from 'rxjs';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class InteractiveTableComponent {
6
7
  columns: QueryList<InteractiveTableColumnComponent>;
7
8
  items: unknown[];
9
+ canEditItem: (item: unknown) => Observable<boolean>;
8
10
  isDraftPage: boolean;
9
11
  itemClick: EventEmitter<unknown>;
10
12
  get gridStyle(): {
11
13
  'grid-template-columns': string;
12
14
  };
13
- getItemTitle(item: CatalogRecord): "" | "editor.record.lock.reason" | "editor.record.lock.format";
15
+ getItemTitle(item: CatalogRecord): "" | "editor.record.lock.resourceType" | "editor.record.lock.harvested" | "editor.record.lock.owner";
14
16
  handleRowClick(item: unknown): void;
15
17
  static ɵfac: i0.ɵɵFactoryDeclaration<InteractiveTableComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<InteractiveTableComponent, "gn-ui-interactive-table", never, { "items": { "alias": "items"; "required": false; }; "isDraftPage": { "alias": "isDraftPage"; "required": false; }; }, { "itemClick": "itemClick"; }, ["columns"], never, true, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<InteractiveTableComponent, "gn-ui-interactive-table", never, { "items": { "alias": "items"; "required": false; }; "canEditItem": { "alias": "canEditItem"; "required": false; }; "isDraftPage": { "alias": "isDraftPage"; "required": false; }; }, { "itemClick": "itemClick"; }, ["columns"], never, true, never>;
17
19
  }
18
20
  //# sourceMappingURL=interactive-table.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAGZ,SAAS,EACV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,+BAA+B,EAAE,MAAM,+DAA+D,CAAA;AAM/G,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;;AAIzF,qBASa,yBAAyB;IAEpC,OAAO,EAAE,SAAS,CAAC,+BAA+B,CAAC,CAAA;IAE1C,KAAK,EAAE,OAAO,EAAE,CAAK;IACrB,WAAW,UAAQ;IAClB,SAAS,wBAA8B;IAEjD,IAAI,SAAS;;MAYZ;IAED,YAAY,CAAC,IAAI,EAAE,aAAa;IAShC,cAAc,CAAC,IAAI,EAAE,OAAO;yCA/BjB,yBAAyB;2CAAzB,yBAAyB;CAkCrC"}
1
+ {"version":3,"file":"interactive-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EAGZ,SAAS,EACV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,+BAA+B,EAAE,MAAM,+DAA+D,CAAA;AAM/G,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAA;;AAKrC,qBASa,yBAAyB;IAEpC,OAAO,EAAE,SAAS,CAAC,+BAA+B,CAAC,CAAA;IAE1C,KAAK,EAAE,OAAO,EAAE,CAAK;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,CAAiB;IACpE,WAAW,UAAQ;IAClB,SAAS,wBAA8B;IAEjD,IAAI,SAAS;;MAYZ;IAED,YAAY,CAAC,IAAI,EAAE,aAAa;IAahC,cAAc,CAAC,IAAI,EAAE,OAAO;yCApCjB,yBAAyB;2CAAzB,yBAAyB;CAuCrC"}
@@ -1,27 +1,22 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, NgZone } from '@angular/core';
2
- import { ViewportRuler, ConnectedPosition } from '@angular/cdk/overlay';
2
+ import { CdkScrollable } from '@angular/cdk/overlay';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class TruncatedTextComponent implements AfterViewInit, OnDestroy {
5
5
  private readonly cd;
6
6
  private readonly ngZone;
7
- private readonly viewportRuler;
8
7
  text: string;
9
8
  extraClass: string;
9
+ scrollContainer: ElementRef;
10
+ cdkScrollContainer: CdkScrollable;
10
11
  textElement: ElementRef<HTMLElement>;
11
12
  isTextTruncated: boolean;
12
- isOpen: boolean;
13
- overlayPosition: ConnectedPosition;
14
13
  private readonly resizeObserver;
15
14
  private readonly mutationObserver;
16
- private readonly viewportSubscription;
17
- constructor(cd: ChangeDetectorRef, ngZone: NgZone, viewportRuler: ViewportRuler);
15
+ constructor(cd: ChangeDetectorRef, ngZone: NgZone);
18
16
  ngAfterViewInit(): void;
19
17
  ngOnDestroy(): void;
20
- toggleOverlay(): void;
21
- private updateOverlayPosition;
22
- close(): void;
23
18
  private checkTextTruncation;
24
19
  static ɵfac: i0.ɵɵFactoryDeclaration<TruncatedTextComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<TruncatedTextComponent, "gn-ui-truncated-text", never, { "text": { "alias": "text"; "required": false; }; "extraClass": { "alias": "extraClass"; "required": false; }; }, {}, never, never, true, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<TruncatedTextComponent, "gn-ui-truncated-text", never, { "text": { "alias": "text"; "required": false; }; "extraClass": { "alias": "extraClass"; "required": false; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; }; "cdkScrollContainer": { "alias": "cdkScrollContainer"; "required": false; }; }, {}, never, never, true, never>;
26
21
  }
27
22
  //# sourceMappingURL=truncated-text.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"truncated-text.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EAEjB,UAAU,EAEV,SAAS,EAET,MAAM,EACP,MAAM,eAAe,CAAA;AAMtB,OAAO,EAEL,aAAa,EACb,iBAAiB,EAClB,MAAM,sBAAsB,CAAA;;AAI7B,qBAea,sBAAuB,YAAW,aAAa,EAAE,SAAS;IAkBnE,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAnBvB,IAAI,SAAK;IACT,UAAU,SAAK;IAEE,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAC9D,eAAe,UAAQ;IACvB,MAAM,UAAQ;IACd,eAAe,EAAE,iBAAiB,CAKjC;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAc;gBAGhC,EAAE,EAAE,iBAAiB,EACrB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa;IAoB/C,eAAe;IAWf,WAAW;IAOX,aAAa;IAOb,OAAO,CAAC,qBAAqB;IAgB7B,KAAK;IAIL,OAAO,CAAC,mBAAmB;yCArFhB,sBAAsB;2CAAtB,sBAAsB;CA2FlC"}
1
+ {"version":3,"file":"truncated-text.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,iBAAiB,EAEjB,UAAU,EAEV,SAAS,EAET,MAAM,EACP,MAAM,eAAe,CAAA;AAMtB,OAAO,EACL,aAAa,EAId,MAAM,sBAAsB,CAAA;;AAI7B,qBAgBa,sBAAuB,YAAW,aAAa,EAAE,SAAS;IAcnE,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdhB,IAAI,SAAK;IACT,UAAU,SAAK;IACf,eAAe,EAAG,UAAU,CAAA;IAC5B,kBAAkB,EAAG,aAAa,CAAA;IAEjB,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IAE9D,eAAe,UAAQ;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAGhC,EAAE,EAAE,iBAAiB,EACrB,MAAM,EAAE,MAAM;IAajC,eAAe;IAWf,WAAW;IAKX,OAAO,CAAC,mBAAmB;yCA5ChB,sBAAsB;2CAAtB,sBAAsB;CAkDlC"}
@@ -7,6 +7,7 @@ export declare class ActionMenuComponent {
7
7
  dialog: MatDialog;
8
8
  private cdr;
9
9
  canDuplicate: boolean;
10
+ isDuplicating: boolean;
10
11
  canDelete: boolean;
11
12
  page: 'draft' | 'main' | 'record';
12
13
  duplicate: EventEmitter<void>;
@@ -20,7 +21,7 @@ export declare class ActionMenuComponent {
20
21
  displayMainMenu(): void;
21
22
  displayDeleteMenu(): void;
22
23
  static ɵfac: i0.ɵɵFactoryDeclaration<ActionMenuComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<ActionMenuComponent, "gn-ui-action-menu", never, { "canDuplicate": { "alias": "canDuplicate"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "page": { "alias": "page"; "required": false; }; }, { "duplicate": "duplicate"; "delete": "delete"; "closeActionMenu": "closeActionMenu"; "rollback": "rollback"; "switch": "switch"; }, never, never, true, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<ActionMenuComponent, "gn-ui-action-menu", never, { "canDuplicate": { "alias": "canDuplicate"; "required": false; }; "isDuplicating": { "alias": "isDuplicating"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "page": { "alias": "page"; "required": false; }; }, { "duplicate": "duplicate"; "delete": "delete"; "closeActionMenu": "closeActionMenu"; "rollback": "rollback"; "switch": "switch"; }, never, never, true, never>;
24
25
  }
25
26
  export {};
26
27
  //# sourceMappingURL=action-menu.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,YAAY,EAIb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAiB,cAAc,EAAE,MAAM,wBAAwB,CAAA;;AAKtE,KAAK,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,CAAA;AAEhE,qBAca,mBAAmB;IAerB,MAAM,EAAE,SAAS;IACxB,OAAO,CAAC,GAAG;IAfJ,YAAY,UAAO;IACnB,SAAS,UAAO;IAChB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IAChC,SAAS,qBAA2B;IACpC,MAAM,qBAA2B;IACjC,eAAe,qBAA2B;IAC1C,QAAQ,qBAA2B;IACnC,MAAM,qBAA2B;IAEhB,OAAO,EAAE,cAAc,CAAA;IAElD,gBAAgB,EAAE,cAAc,CAAa;gBAGpC,MAAM,EAAE,SAAS,EAChB,GAAG,EAAE,iBAAiB;IAGhC,eAAe;IAKf,iBAAiB;yCAxBN,mBAAmB;2CAAnB,mBAAmB;CAsC/B"}
1
+ {"version":3,"file":"action-menu.component.d.ts","sourceRoot":"","sources":["../../../../../../../src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,YAAY,EAIb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAiB,cAAc,EAAE,MAAM,wBAAwB,CAAA;;AAKtE,KAAK,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,CAAA;AAEhE,qBAca,mBAAmB;IAgBrB,MAAM,EAAE,SAAS;IACxB,OAAO,CAAC,GAAG;IAhBJ,YAAY,UAAO;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,UAAO;IAChB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IAChC,SAAS,qBAA2B;IACpC,MAAM,qBAA2B;IACjC,eAAe,qBAA2B;IAC1C,QAAQ,qBAA2B;IACnC,MAAM,qBAA2B;IAEhB,OAAO,EAAE,cAAc,CAAA;IAElD,gBAAgB,EAAE,cAAc,CAAa;gBAGpC,MAAM,EAAE,SAAS,EAChB,GAAG,EAAE,iBAAiB;IAGhC,eAAe;IAKf,iBAAiB;yCAzBN,mBAAmB;2CAAnB,mBAAmB;CAuC/B"}
@@ -4,6 +4,7 @@ import { SortByField } from '../../../../../../libs/common/domain/src/lib/model/
4
4
  import { DateService, FileFormat } from '../../../../../../libs/util/shared/src';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import { Overlay } from '@angular/cdk/overlay';
7
+ import { Observable } from 'rxjs';
7
8
  import * as i0 from "@angular/core";
8
9
  export declare class ResultsTableComponent {
9
10
  private overlay;
@@ -16,7 +17,8 @@ export declare class ResultsTableComponent {
16
17
  sortOrder: SortByField;
17
18
  hasDraft: (record: CatalogRecord) => boolean;
18
19
  canDuplicate: (record: CatalogRecord) => boolean;
19
- canDelete: (record: CatalogRecord) => boolean;
20
+ canDelete: (record: CatalogRecord) => Observable<boolean>;
21
+ canEdit: (record: CatalogRecord) => Observable<boolean>;
20
22
  isDraftPage: boolean;
21
23
  isDuplicating: boolean;
22
24
  sortByChange: EventEmitter<[string, "desc" | "asc"]>;
@@ -35,7 +37,7 @@ export declare class ResultsTableComponent {
35
37
  getRecordFormats(record: CatalogRecord): FileFormat[];
36
38
  formatUserInfo(userInfo: string | unknown): string;
37
39
  getBadgeColor(format: FileFormat): string;
38
- handleRecordClick(item: CatalogRecord): void;
40
+ handleRecordClick(item: unknown): void;
39
41
  handleDuplicate(item: unknown): void;
40
42
  handleDelete(item: unknown): void;
41
43
  handleRollback(item: unknown): void;
@@ -46,6 +48,6 @@ export declare class ResultsTableComponent {
46
48
  isMultilingual(record: CatalogRecord): boolean;
47
49
  getTxtHoverMultilingual(record: CatalogRecord): any;
48
50
  static ɵfac: i0.ɵɵFactoryDeclaration<ResultsTableComponent, never>;
49
- static ɵcmp: i0.ɵɵComponentDeclaration<ResultsTableComponent, "gn-ui-results-table", never, { "records": { "alias": "records"; "required": false; }; "selectedRecordsIdentifiers": { "alias": "selectedRecordsIdentifiers"; "required": false; }; "sortOrder": { "alias": "sortOrder"; "required": false; }; "hasDraft": { "alias": "hasDraft"; "required": false; }; "canDuplicate": { "alias": "canDuplicate"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "isDraftPage": { "alias": "isDraftPage"; "required": false; }; "isDuplicating": { "alias": "isDuplicating"; "required": false; }; }, { "sortByChange": "sortByChange"; "recordClick": "recordClick"; "duplicateRecord": "duplicateRecord"; "deleteRecord": "deleteRecord"; "rollbackDraft": "rollbackDraft"; "recordsSelectedChange": "recordsSelectedChange"; }, never, never, true, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResultsTableComponent, "gn-ui-results-table", never, { "records": { "alias": "records"; "required": false; }; "selectedRecordsIdentifiers": { "alias": "selectedRecordsIdentifiers"; "required": false; }; "sortOrder": { "alias": "sortOrder"; "required": false; }; "hasDraft": { "alias": "hasDraft"; "required": false; }; "canDuplicate": { "alias": "canDuplicate"; "required": false; }; "canDelete": { "alias": "canDelete"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; "isDraftPage": { "alias": "isDraftPage"; "required": false; }; "isDuplicating": { "alias": "isDuplicating"; "required": false; }; }, { "sortByChange": "sortByChange"; "recordClick": "recordClick"; "duplicateRecord": "duplicateRecord"; "deleteRecord": "deleteRecord"; "rollbackDraft": "rollbackDraft"; "recordsSelectedChange": "recordsSelectedChange"; }, never, never, true, never>;
50
52
  }
51
53
  //# sourceMappingURL=results-table.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"results-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/search/src/lib/results-table/results-table.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,UAAU,EACV,YAAY,EAGZ,SAAS,EAET,gBAAgB,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAEL,WAAW,EACZ,MAAM,2DAA2D,CAAA;AAMlE,OAAO,EACL,WAAW,EACX,UAAU,EAKX,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAIvE,OAAO,EAAoB,OAAO,EAAc,MAAM,sBAAsB,CAAA;;AAI5E,qBAoBa,qBAAqB;IA2B9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,gBAAgB;IA9BjB,OAAO,EAAE,aAAa,EAAE,CAAK;IAC7B,0BAA0B,EAAE,MAAM,EAAE,CAAK;IACzC,SAAS,EAAE,WAAW,CAAO;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAc;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAa;IAC7D,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAa;IAC1D,WAAW,UAAQ;IACnB,aAAa,UAAQ;IAGpB,YAAY,yCAA+C;IAC3D,WAAW,8BAAoC;IAC/C,eAAe,8BAAoC;IACnD,YAAY,8BAAoC;IAChD,aAAa,8BAAoC;IACjD,qBAAqB,2CAE5B;IAGH,iBAAiB,EAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,OAAO,CAAC,UAAU,CAAa;IAE/B,gBAAgB,UAAQ;gBAGd,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB;IAG5C,cAAc,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAyC7B,eAAe;IAQf,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAShC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IAerD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAIlD,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIzC,iBAAiB,CAAC,IAAI,EAAE,aAAa;IAMrC,eAAe,CAAC,IAAI,EAAE,OAAO;IAI7B,YAAY,CAAC,IAAI,EAAE,OAAO;IAK1B,cAAc,CAAC,IAAI,EAAE,OAAO;IAK5B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;IAI5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI;IAe9C,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAInE,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAI9C,uBAAuB,CAAC,MAAM,EAAE,aAAa;yCAtKlC,qBAAqB;2CAArB,qBAAqB;CA6KjC"}
1
+ {"version":3,"file":"results-table.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/search/src/lib/results-table/results-table.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,UAAU,EACV,YAAY,EAGZ,SAAS,EAET,gBAAgB,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAEL,WAAW,EACZ,MAAM,2DAA2D,CAAA;AAMlE,OAAO,EACL,WAAW,EACX,UAAU,EAKX,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAIvE,OAAO,EAAoB,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAG5E,OAAO,EAAE,UAAU,EAAY,MAAM,MAAM,CAAA;;AAE3C,qBAoBa,qBAAqB;IA8B9B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,gBAAgB;IAjCjB,OAAO,EAAE,aAAa,EAAE,CAAK;IAC7B,0BAA0B,EAAE,MAAM,EAAE,CAAK;IACzC,SAAS,EAAE,WAAW,CAAO;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAc;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAa;IAC7D,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,UAAU,CAAC,OAAO,CAAC,CACxD;IACD,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,UAAU,CAAC,OAAO,CAAC,CACtD;IACD,WAAW,UAAQ;IACnB,aAAa,UAAQ;IAGpB,YAAY,yCAA+C;IAC3D,WAAW,8BAAoC;IAC/C,eAAe,8BAAoC;IACnD,YAAY,8BAAoC;IAChD,aAAa,8BAAoC;IACjD,qBAAqB,2CAE5B;IAGH,iBAAiB,EAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,OAAO,CAAC,UAAU,CAAa;IAE/B,gBAAgB,UAAQ;gBAGd,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB;IAG5C,cAAc,CAAC,IAAI,KAAA,EAAE,QAAQ,KAAA;IAyC7B,eAAe;IAQf,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAShC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IAerD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAIlD,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAIzC,iBAAiB,CAAC,IAAI,EAAE,OAAO;IAU/B,eAAe,CAAC,IAAI,EAAE,OAAO;IAI7B,YAAY,CAAC,IAAI,EAAE,OAAO;IAK1B,cAAc,CAAC,IAAI,EAAE,OAAO;IAK5B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;IAI5C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI;IAe9C,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAInE,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAI9C,uBAAuB,CAAC,MAAM,EAAE,aAAa;yCA7KlC,qBAAqB;2CAArB,qBAAqB;CAoLjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geonetwork-ui",
3
- "version": "2.6.0-dev.600519f47",
3
+ "version": "2.6.0-dev.609dd7257",
4
4
  "engines": {
5
5
  "node": ">=20"
6
6
  },
@@ -359,6 +359,13 @@ export class Gn4FieldMapper {
359
359
  },
360
360
  output
361
361
  ),
362
+ isHarvested: (output, source) =>
363
+ this.addExtra(
364
+ {
365
+ isHarvested: selectField(source, 'isHarvested') !== 'false',
366
+ },
367
+ output
368
+ ),
362
369
  edit: (output, source) =>
363
370
  this.addExtra(
364
371
  {
@@ -18,8 +18,10 @@ export const ES_SOURCE_SUMMARY = [
18
18
  'cl_topic',
19
19
  'cl_maintenanceAndUpdateFrequency',
20
20
  'tag',
21
- 'MD_LegalConstraintsUseLimitationObject',
21
+ 'MD_LegalConstraints*Object',
22
22
  'qualityScore',
23
+ 'allKeywords',
24
+ 'recordLink',
23
25
  ]
24
26
 
25
27
  export type EsQueryFieldsPriorityType = Record<string, number>
@@ -137,7 +137,7 @@ export class ElasticsearchService {
137
137
  getRelatedRecordPayload(
138
138
  record: CatalogRecord,
139
139
  size = 6,
140
- _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']
140
+ _source = [...ES_SOURCE_SUMMARY, 'createDate']
141
141
  ): EsSearchParams {
142
142
  return {
143
143
  query: {
@@ -14,8 +14,8 @@ import {
14
14
  import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error'
15
15
  import {
16
16
  CatalogRecord,
17
- DatasetFeatureType,
18
17
  DatasetFeatureCatalog,
18
+ DatasetFeatureType,
19
19
  } from '../../../../../../libs/common/domain/src/lib/model/record'
20
20
  import {
21
21
  Aggregations,
@@ -29,10 +29,11 @@ import {
29
29
  import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface'
30
30
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
31
31
  import {
32
+ LanguagesApiService,
32
33
  RecordsApiService,
33
34
  SearchApiService,
34
- LanguagesApiService,
35
35
  } from '../../../../../../libs/data-access/gn4/src'
36
+ import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src'
36
37
  import {
37
38
  combineLatest,
38
39
  exhaustMap,
@@ -47,7 +48,7 @@ import {
47
48
  import { catchError, map, tap } from 'rxjs/operators'
48
49
  import { lt } from 'semver'
49
50
  import { ElasticsearchService } from './elasticsearch'
50
- import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src'
51
+ import { Gn4SettingsService } from './settings/gn4-settings.service'
51
52
 
52
53
  const minPublicationApiVersion = '4.2.5'
53
54
 
@@ -67,7 +68,8 @@ export class Gn4Repository implements RecordsRepositoryInterface {
67
68
  private gn4Mapper: Gn4Converter,
68
69
  private gn4RecordsApi: RecordsApiService,
69
70
  private platformService: PlatformServiceInterface,
70
- private gn4LanguagesApi: LanguagesApiService
71
+ private gn4LanguagesApi: LanguagesApiService,
72
+ private settingsService: Gn4SettingsService
71
73
  ) {}
72
74
 
73
75
  search({
@@ -173,12 +175,21 @@ export class Gn4Repository implements RecordsRepositoryInterface {
173
175
  name: featureType.typeName || '',
174
176
  definition: featureType.definition || '',
175
177
  attributes: Array.isArray(featureType.attributeTable)
176
- ? featureType.attributeTable.map((attr) => ({
177
- name: attr.name,
178
- code: attr.code,
179
- title: attr.definition,
180
- type: attr.type,
181
- }))
178
+ ? featureType.attributeTable.map((attr) => {
179
+ const values = attr.values
180
+ ?.filter((v) => v.code || v.label)
181
+ .map((v) => ({
182
+ code: v.code,
183
+ label: v.label,
184
+ }))
185
+ return {
186
+ name: attr.name,
187
+ code: attr.code,
188
+ definition: attr.definition,
189
+ type: attr.type,
190
+ ...(values?.length > 0 ? { values } : {}),
191
+ }
192
+ })
182
193
  : [],
183
194
  })),
184
195
  }
@@ -296,14 +307,46 @@ export class Gn4Repository implements RecordsRepositoryInterface {
296
307
  : of(true)
297
308
  }
298
309
 
299
- canEditRecord(uniqueIdentifier: string): Observable<boolean> {
300
- return this.getRecord(uniqueIdentifier).pipe(
301
- map((record) => {
302
- return record.extras['edit'] as boolean
310
+ canDuplicate(record: CatalogRecord): boolean {
311
+ return record.kind === 'dataset'
312
+ }
313
+
314
+ canDelete(record: CatalogRecord): Observable<boolean> {
315
+ return this.settingsService.allowEditHarvested$.pipe(
316
+ map((allowEditHarvested) => {
317
+ return (
318
+ record.extras['edit'] &&
319
+ (!record.extras['isHarvested'] || allowEditHarvested)
320
+ )
303
321
  })
304
322
  )
305
323
  }
306
324
 
325
+ private canEdit(record: CatalogRecord, allowEditHarvested: boolean): boolean {
326
+ return (
327
+ record.kind === 'dataset' &&
328
+ record.extras['edit'] &&
329
+ (!record.extras['isHarvested'] || allowEditHarvested)
330
+ )
331
+ }
332
+
333
+ canEditRecord(uniqueIdentifier: string): Observable<boolean> {
334
+ return combineLatest([
335
+ this.getRecord(uniqueIdentifier),
336
+ this.settingsService.allowEditHarvested$,
337
+ ]).pipe(
338
+ map(([record, allowEditHarvested]) =>
339
+ record ? this.canEdit(record, allowEditHarvested) : false
340
+ )
341
+ )
342
+ }
343
+
344
+ canEditIndexedRecord(record: CatalogRecord): Observable<boolean> {
345
+ return this.settingsService.allowEditHarvested$.pipe(
346
+ map((allowEditHarvested) => this.canEdit(record, allowEditHarvested))
347
+ )
348
+ }
349
+
307
350
  openRecordForEdition(
308
351
  uniqueIdentifier: string
309
352
  ): Observable<[CatalogRecord, string, boolean] | null> {
@@ -82,6 +82,13 @@ export class Gn4PlatformService implements PlatformServiceInterface {
82
82
  shareReplay(1)
83
83
  )
84
84
 
85
+ private readonly allowEditHarvestedMd$ = this.settings$.pipe(
86
+ map((info) => {
87
+ return info['system/harvester/enableEditing'] as boolean
88
+ }),
89
+ shareReplay(1)
90
+ )
91
+
85
92
  /**
86
93
  * A map of already loaded thesauri (groups of keywords); the key is a URI
87
94
  * @private
@@ -123,6 +130,10 @@ export class Gn4PlatformService implements PlatformServiceInterface {
123
130
  return this.apiVersion$
124
131
  }
125
132
 
133
+ getAllowEditHarvestedMd(): Observable<boolean> {
134
+ return this.allowEditHarvestedMd$
135
+ }
136
+
126
137
  getMe(): Observable<UserModel> {
127
138
  return this.me$
128
139
  }
@@ -11,6 +11,9 @@ export class Gn4SettingsService {
11
11
  'system/users/identicon'
12
12
  )
13
13
 
14
+ public allowEditHarvested$: Observable<boolean> =
15
+ this.getSettingsSetValueByKey('system/harvester/enableEditing')
16
+
14
17
  constructor(private siteApiService: SiteApiService) {}
15
18
 
16
19
  private getSettingsSetValueByKey(key: string) {
@@ -233,14 +233,6 @@ export interface DatasetRecord extends BaseRecord {
233
233
  spatialRepresentation?: SpatialRepresentationType
234
234
  }
235
235
 
236
- export type DatasetFeatureCatalog = {
237
- featureTypes: Array<{
238
- name: string
239
- definition: string
240
- attributes: Array<{ name: string; title: string; code: string }>
241
- }>
242
- }
243
-
244
236
  export interface ServiceEndpoint {
245
237
  url: URL
246
238
  accessServiceProtocol: ServiceProtocol
@@ -268,18 +260,32 @@ export interface ReuseRecord extends BaseRecord {
268
260
  temporalExtents: Array<DatasetTemporalExtent>
269
261
  }
270
262
 
263
+ export type DatasetFeatureCatalog = {
264
+ featureTypes: Array<{
265
+ name: string
266
+ definition: string
267
+ attributes: DatasetFeatureAttribute[]
268
+ }>
269
+ }
270
+ export interface DatasetFeatureAttributeValue {
271
+ code?: string
272
+ definition?: string
273
+ label?: string
274
+ }
275
+ export interface DatasetFeatureAttribute {
276
+ name: string
277
+ definition: string
278
+ type: string
279
+ code: string
280
+ values?: Array<DatasetFeatureAttributeValue>
281
+ }
271
282
  export interface DatasetFeatureType {
272
283
  aliases: string
273
284
  code: string
274
285
  isAbstract: string
275
286
  typeName: string
276
287
  definition: string
277
- attributeTable: Array<{
278
- name: string
279
- definition: string
280
- type: string
281
- code: string
282
- }>
288
+ attributeTable: Array<DatasetFeatureAttribute>
283
289
  }
284
290
 
285
291
  export type ReuseType = 'application' | 'map' | 'other'
@@ -22,7 +22,10 @@ export abstract class RecordsRepositoryInterface {
22
22
  abstract getSources(record: CatalogRecord): Observable<CatalogRecord[]>
23
23
  abstract getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]>
24
24
  abstract fuzzySearch(query: string): Observable<SearchResults>
25
+ abstract canDuplicate(record: CatalogRecord): boolean
26
+ abstract canDelete(record: CatalogRecord): Observable<boolean>
25
27
  abstract canEditRecord(uniqueIdentifier: string): Observable<boolean>
28
+ abstract canEditIndexedRecord(record: CatalogRecord): Observable<boolean>
26
29
  /**
27
30
  * This emits once:
28
31
  * - record object; if a draft exists, this will return it
@@ -3,6 +3,7 @@ import {
3
3
  DatasetRecord,
4
4
  DatasetSpatialExtent,
5
5
  Keyword,
6
+ ServiceRecord,
6
7
  } from '../../../../../libs/common/domain/src/lib/model/record'
7
8
 
8
9
  export const datasetRecordsFixture: () => CatalogRecord[] = () => [
@@ -176,6 +177,20 @@ As such, **it is not very interesting at all.**`,
176
177
  link: '',
177
178
  definition: 'Nom de la rue',
178
179
  type: 'String (48)',
180
+ values: [
181
+ {
182
+ code: 'Pomme',
183
+ label: 'Les Pommiers',
184
+ description: 'Sous les pommiers',
185
+ },
186
+ {
187
+ code: 'Cotton',
188
+ label: 'Rue Cotton',
189
+ description: 'Rue Cotton',
190
+ },
191
+ { code: "Passage de l'échiquier" },
192
+ { description: 'Rue du Charlieu' },
193
+ ],
179
194
  },
180
195
  {
181
196
  code: 'RUE',
@@ -811,6 +826,52 @@ export const importDatasetRecordAsXmlFixture = (): string => `
811
826
  </gmd:identificationInfo>
812
827
  </gmd:MD_Metadata>`
813
828
 
829
+ export const simpleServiceRecordFixture = (): ServiceRecord => ({
830
+ abstract: `Ce service de visualisation WMS permet de consulter la série de couches de données "Sites de gestion des déchets miniers - Série".`,
831
+ kind: 'service',
832
+ recordUpdated: new Date('2023-03-17T07:38:08.875Z'),
833
+ recordPublished: null,
834
+ ownerOrganization: null,
835
+ licenses: [],
836
+ legalConstraints: [],
837
+ securityConstraints: [],
838
+ otherConstraints: [],
839
+ contacts: [],
840
+ contactsForResource: [],
841
+ keywords: [],
842
+ topics: [],
843
+ spatialExtents: [],
844
+ overviews: [],
845
+ defaultLanguage: null,
846
+ otherLanguages: [],
847
+ title: 'Sites de gestion des déchets miniers - Service de visualisation WMS',
848
+ onlineResources: [
849
+ {
850
+ name: 'Rapport de disponibilité du service WMS',
851
+ description:
852
+ 'Ce service de visualisation WMS permet de consulter la série de couches de données "Sites de gestion des déchets miniers - Série".',
853
+ mimeType: 'text/html',
854
+ type: 'link',
855
+ url: new URL(
856
+ 'https://geoservices.wallonie.be/rapportDisponibilite/wms/sites_de_gestion_des_dechets_miniers_srie.html'
857
+ ),
858
+ accessRestricted: false,
859
+ },
860
+ ],
861
+ uniqueIdentifier: '00b22798-ec8e-4500-89e8-90eeeda45919',
862
+ landingPage: new URL(
863
+ 'http://localhost:4200/geonetwork/srv/fre/catalog.search#/metadata/00b22798-ec8e-4500-89e8-90eeeda45919'
864
+ ),
865
+ extras: {
866
+ isPublishedToAll: true,
867
+ id: '723',
868
+ isHarvested: true,
869
+ ownerInfo: 'admin|admin|admin|Administrator',
870
+ edit: true,
871
+ },
872
+ recordCreated: new Date('2023-03-17T07:38:08.875Z'),
873
+ })
874
+
814
875
  export const NATIONAL_KEYWORD = {
815
876
  key: 'http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/national',
816
877
  label: 'National',
@@ -110,7 +110,7 @@
110
110
  page="record"
111
111
  (delete)="confirmDeleteAction(recordLang)"
112
112
  (closeActionMenu)="closeActionMenu()"
113
- (switch)="switchDefaultLang(item)"
113
+ (switch)="switchDefaultLang(recordLang)"
114
114
  >
115
115
  </gn-ui-action-menu>
116
116
  </ng-template>
@@ -208,6 +208,7 @@ export class MultilingualPanelComponent implements OnDestroy {
208
208
  'otherLanguages',
209
209
  this.selectedLanguages.filter((lang) => lang !== this.formLanguage)
210
210
  )
211
+ this.closeActionMenu()
211
212
  }
212
213
 
213
214
  confirmDeleteAction(lang?: string[] | string) {
@@ -1,18 +1,36 @@
1
1
  <div class="w-full h-full flex flex-col gap-[13px]">
2
2
  <div
3
- class="flex py-4 px-5 bg-white border border-color-border rounded-lg mt-6"
3
+ class="flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6"
4
4
  >
5
- <div class="grow min-w-0">
5
+ <gn-ui-dropdown-selector
6
+ *ngIf="displaySource"
7
+ class="w-full md:flex-1 md:min-w-0"
8
+ extraBtnClass="font-sans font-bold"
9
+ [title]="'map.select.layer' | translate"
10
+ [choices]="dropdownChoices$ | async"
11
+ (selectValue)="selectLinkToDisplay($event)"
12
+ ></gn-ui-dropdown-selector>
13
+
14
+ <ng-container *ngIf="(styleLinks$ | async)?.length > 0; else styleDisabled">
6
15
  <gn-ui-dropdown-selector
7
- [ngClass]="{ hidden: !displaySource }"
8
- class="w-full"
16
+ class="w-full md:flex-1 md:min-w-0"
9
17
  extraBtnClass="font-sans font-bold"
10
- [title]="'map.select.layer' | translate"
11
- [choices]="dropdownChoices$ | async"
12
- (selectValue)="selectLinkToDisplay($event)"
18
+ [title]="'map.select.style' | translate"
19
+ [choices]="styleDropdownChoices$ | async"
20
+ (selectValue)="selectStyleToDisplay($event)"
13
21
  ></gn-ui-dropdown-selector>
14
- </div>
15
- <div class="self-end">
22
+ </ng-container>
23
+ <ng-template #styleDisabled>
24
+ <gn-ui-dropdown-selector
25
+ class="w-full md:flex-1 md:min-w-0 text-gray-400"
26
+ extraBtnClass="font-sans font-bold text-gray-400"
27
+ [title]="'map.select.style' | translate"
28
+ [choices]="styleDropdownChoices$ | async"
29
+ [disabled]="true"
30
+ ></gn-ui-dropdown-selector>
31
+ </ng-template>
32
+
33
+ <div class="self-end md:ml-2">
16
34
  <gn-ui-external-viewer-button
17
35
  extraClass="w-[44px] h-[44px]"
18
36
  [link]="selectedLink$ | async"