geonetwork-ui 2.4.0-dev.8f04e899 → 2.4.0-dev.9c5250ea

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 (54) hide show
  1. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +10 -1
  2. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  3. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +4 -11
  4. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  5. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +49 -0
  6. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  7. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +120 -0
  8. package/esm2022/translations/de.json +8 -1
  9. package/esm2022/translations/en.json +8 -1
  10. package/esm2022/translations/es.json +8 -1
  11. package/esm2022/translations/fr.json +8 -1
  12. package/esm2022/translations/it.json +8 -1
  13. package/esm2022/translations/nl.json +8 -1
  14. package/esm2022/translations/pt.json +8 -1
  15. package/fesm2022/geonetwork-ui.mjs +185 -104
  16. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  17. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  18. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  19. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +2 -0
  20. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  21. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  22. package/libs/feature/search/src/index.d.ts +1 -1
  23. package/libs/feature/search/src/index.d.ts.map +1 -1
  24. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +25 -0
  25. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -0
  26. package/libs/ui/search/src/index.d.ts +1 -0
  27. package/libs/ui/search/src/index.d.ts.map +1 -1
  28. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +30 -0
  29. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  30. package/package.json +1 -1
  31. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +14 -0
  32. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
  33. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +8 -0
  34. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +38 -31
  35. package/src/libs/feature/search/src/index.ts +1 -1
  36. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +9 -0
  37. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +49 -0
  38. package/src/libs/ui/search/src/index.ts +1 -0
  39. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +0 -0
  40. package/src/libs/{feature → ui}/search/src/lib/results-table/results-table.component.html +8 -8
  41. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +138 -0
  42. package/translations/de.json +8 -1
  43. package/translations/en.json +8 -1
  44. package/translations/es.json +8 -1
  45. package/translations/fr.json +8 -1
  46. package/translations/it.json +8 -1
  47. package/translations/nl.json +8 -1
  48. package/translations/pt.json +8 -1
  49. package/translations/sk.json +8 -1
  50. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +0 -136
  51. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -36
  52. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +0 -1
  53. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -171
  54. /package/src/libs/feature/search/src/lib/results-table/{results-table.component.css → results-table-container.component.css} +0 -0
@@ -30,6 +30,7 @@ export declare class Gn4Repository implements RecordsRepositoryInterface {
30
30
  saveRecordAsDraft(record: CatalogRecord, referenceRecordSource?: string): Observable<string>;
31
31
  clearRecordDraft(uniqueIdentifier: string): void;
32
32
  recordHasDraft(uniqueIdentifier: string): boolean;
33
+ getAllDrafts(): Observable<CatalogRecord[]>;
33
34
  static ɵfac: i0.ɵɵFactoryDeclaration<Gn4Repository, never>;
34
35
  static ɵprov: i0.ɵɵInjectableDeclaration<Gn4Repository>;
35
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gn4-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/api/repository/src/lib/gn4/gn4-repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAGL,UAAU,EAIX,MAAM,MAAM,CAAA;AACb,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;AACjI,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,wEAAwE,CAAA;AAC/E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACb,MAAM,2DAA2D,CAAA;AAElE,OAAO,EAEL,YAAY,EAGb,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;;AAGzF,qBACa,aAAc,YAAW,0BAA0B;IAE5D,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;gBAHb,YAAY,EAAE,gBAAgB,EAC9B,eAAe,EAAE,oBAAoB,EACrC,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,iBAAiB;IAG1C,MAAM,CAAC,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,EACT,cAAc,GACf,EAAE,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC;IA6B3C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IAoB1D,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;IAiBrE,iBAAiB,CAAC,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAmBxE,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IA2B/D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;IAiBrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,2BAA2B;IAInC,oBAAoB,CAClB,gBAAgB,EAAE,MAAM,GACvB,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAqBtD,OAAO,CAAC,oBAAoB;IAW5B,UAAU,CACR,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IA+BrB,iBAAiB,CACf,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAWrB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAMhD,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;yCAtQtC,aAAa;6CAAb,aAAa;CA6QzB"}
1
+ {"version":3,"file":"gn4-repository.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/api/repository/src/lib/gn4/gn4-repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAGL,UAAU,EAIX,MAAM,MAAM,CAAA;AACb,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;AACjI,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,wEAAwE,CAAA;AAC/E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACb,MAAM,2DAA2D,CAAA;AAElE,OAAO,EAEL,YAAY,EAGb,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;;AAGzF,qBACa,aAAc,YAAW,0BAA0B;IAE5D,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;gBAHb,YAAY,EAAE,gBAAgB,EAC9B,eAAe,EAAE,oBAAoB,EACrC,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,iBAAiB;IAG1C,MAAM,CAAC,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,IAAI,EACJ,SAAS,EACT,cAAc,GACf,EAAE,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC;IA6B3C,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IAoB1D,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;IAiBrE,iBAAiB,CAAC,SAAS,EAAE,aAAa,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAmBxE,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IA2B/D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;IAiBrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,2BAA2B;IAInC,oBAAoB,CAClB,gBAAgB,EAAE,MAAM,GACvB,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAqBtD,OAAO,CAAC,oBAAoB;IAW5B,UAAU,CACR,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IA+BrB,iBAAiB,CACf,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAWrB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAMhD,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IASjD,YAAY,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;yCA/QhC,aAAa;6CAAb,aAAa;CA2RzB"}
@@ -31,5 +31,7 @@ export declare abstract class RecordsRepositoryInterface {
31
31
  abstract saveRecordAsDraft(record: CatalogRecord, referenceRecordSource?: string): Observable<string>;
32
32
  abstract clearRecordDraft(uniqueIdentifier: string): void;
33
33
  abstract recordHasDraft(uniqueIdentifier: string): boolean;
34
+ /** will return all pending drafts, both published and not published */
35
+ abstract getAllDrafts(): Observable<CatalogRecord[]>;
34
36
  }
35
37
  //# sourceMappingURL=records-repository.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"records-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/common/domain/src/lib/repository/records-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,8BAAsB,0BAA0B;IAC9C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;IAC9E,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CACxB,SAAS,EAAE,aAAa,GACvB,UAAU,CAAC,aAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;IAE9D;;;;;;;OAOG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,gBAAgB,EAAE,MAAM,GACvB,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CACjB,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CACxB,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAErB,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IACzD,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;CAC3D"}
1
+ {"version":3,"file":"records-repository.interface.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/common/domain/src/lib/repository/records-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,8BAAsB,0BAA0B;IAC9C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;IAC9E,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IACxE,QAAQ,CAAC,iBAAiB,CACxB,SAAS,EAAE,aAAa,GACvB,UAAU,CAAC,aAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC;IAE9D;;;;;;;OAOG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,gBAAgB,EAAE,MAAM,GACvB,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CACjB,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CACxB,MAAM,EAAE,aAAa,EACrB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,UAAU,CAAC,MAAM,CAAC;IAErB,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IACzD,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAE1D,uEAAuE;IACvE,QAAQ,CAAC,YAAY,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;CACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"mdview.facade.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/record/src/lib/state/mdview.facade.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAAE,MAAM,aAAa,CAAA;AAI3C,OAAO,EAAE,qBAAqB,EAAa,MAAM,wCAAwC,CAAA;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wFAAwF,CAAA;AAClI,OAAO,EACL,aAAa,EACb,YAAY,EACb,MAAM,2DAA2D,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;;AAExE,qBAOa,YAAY;IAErB,OAAO,CAAC,KAAK;IACN,cAAc,EAAE,qBAAqB;IAC5C,OAAO,CAAC,aAAa;IACd,WAAW,EAAE,WAAW;gBAHvB,KAAK,EAAE,KAAK,EACb,cAAc,EAAE,qBAAqB,EACpC,aAAa,EAAE,sBAAsB,EACtC,WAAW,EAAE,WAAW;IAGjC,UAAU,qCAGT;IAED,kBAAkB,qCAEjB;IAED,SAAS,oDAGR;IAED,aAAa,qCAGZ;IAED,MAAM;;;OAA4D;IAElE,QAAQ,6CAAsD;IAE9D,YAAY,uDAA0D;IAEtE,SAAS,8HAER;IAED,SAAS,8HAIR;IAED,YAAY,8HAMX;IAED,cAAc,8HAMb;IAED,UAAU,8HAIT;IAED,aAAa,8HAMZ;IAED,yBAAyB,mCA+BxB;IAED,iBAAiB,mCAEhB;IAED,WAAW,8HAMV;IAED,cAAc,4CAA4D;IAC1E,yBAAyB,qCAExB;IACD,yBAAyB,qCAExB;IAED;;;OAGG;IACH,qBAAqB,CAAC,UAAU,EAAE,aAAa;IAI/C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,aAAa;IAIb,cAAc,CAAC,WAAW,EAAE,yBAAyB;IAIrD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY;IAI1C,iBAAiB,CAAC,WAAW,EAAE,MAAM;yCA5J1B,YAAY;6CAAZ,YAAY;CA+JxB"}
1
+ {"version":3,"file":"mdview.facade.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/record/src/lib/state/mdview.facade.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAAE,MAAM,aAAa,CAAA;AAY3C,OAAO,EAAE,qBAAqB,EAAa,MAAM,wCAAwC,CAAA;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wFAAwF,CAAA;AAClI,OAAO,EACL,aAAa,EACb,YAAY,EACb,MAAM,2DAA2D,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAA;;AAExE,qBAOa,YAAY;IAErB,OAAO,CAAC,KAAK;IACN,cAAc,EAAE,qBAAqB;IAC5C,OAAO,CAAC,aAAa;IACd,WAAW,EAAE,WAAW;gBAHvB,KAAK,EAAE,KAAK,EACb,cAAc,EAAE,qBAAqB,EACpC,aAAa,EAAE,sBAAsB,EACtC,WAAW,EAAE,WAAW;IAGjC,UAAU,qCAGT;IAED,kBAAkB,qCAEjB;IAED,SAAS,oDAGR;IAED,aAAa,qCAGZ;IAED,MAAM;;;OAA4D;IAElE,QAAQ,6CAAsD;IAE9D,YAAY,uDAA0D;IAEtE,SAAS,8HAER;IAED,SAAS,8HAIR;IAED,YAAY,8HAMX;IAED,cAAc,8HAMb;IAED,UAAU,8HAIT;IAED,aAAa,8HAMZ;IAED,yBAAyB,mCA8BxB;IAED,iBAAiB,mCAEhB;IAED,WAAW,8HAMV;IAED,cAAc,4CAA4D;IAC1E,yBAAyB,qCAExB;IACD,yBAAyB,qCAExB;IAED;;;OAGG;IACH,qBAAqB,CAAC,UAAU,EAAE,aAAa;IAI/C;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,aAAa;IAIb,cAAc,CAAC,WAAW,EAAE,yBAAyB;IAIrD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY;IAI1C,iBAAiB,CAAC,WAAW,EAAE,MAAM;yCA3J1B,YAAY;6CAAZ,YAAY;CA8JxB"}
@@ -21,5 +21,5 @@ export * from './lib/results-hits-number/results-hits.container.component';
21
21
  export * from './lib/results-layout/results-layout.component';
22
22
  export * from './lib/sort-by/sort-by.component';
23
23
  export * from './lib/state/container/search-state.container.directive';
24
- export * from './lib/results-table/results-table.component';
24
+ export * from './lib/results-table/results-table-container.component';
25
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/feature/search/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oCAAoC,CAAA;AAClD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qDAAqD,CAAA;AACnE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2CAA2C,CAAA;AACzD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0DAA0D,CAAA;AACxE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,uDAAuD,CAAA;AACrE,cAAc,4DAA4D,CAAA;AAC1E,cAAc,+CAA+C,CAAA;AAC7D,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wDAAwD,CAAA;AACtE,cAAc,6CAA6C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/feature/search/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,oCAAoC,CAAA;AAClD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qDAAqD,CAAA;AACnE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2CAA2C,CAAA;AACzD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0DAA0D,CAAA;AACxE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,uDAAuD,CAAA;AACrE,cAAc,4DAA4D,CAAA;AAC1E,cAAc,+CAA+C,CAAA;AAC7D,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wDAAwD,CAAA;AACtE,cAAc,uDAAuD,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record';
3
+ import { SearchFacade } from '../state/search.facade';
4
+ import { SelectionService } from '../../../../../../libs/api/repository/src';
5
+ import { SearchService } from '../utils/service/search.service';
6
+ import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface';
7
+ import * as i0 from "@angular/core";
8
+ export declare class ResultsTableContainerComponent {
9
+ private searchFacade;
10
+ private searchService;
11
+ private selectionService;
12
+ private recordsRepository;
13
+ recordClick: EventEmitter<CatalogRecord>;
14
+ records$: import("rxjs").Observable<CatalogRecord[]>;
15
+ selectedRecords$: import("rxjs").BehaviorSubject<string[]>;
16
+ sortBy$: import("rxjs").Observable<import("../../../../../common/domain/src/lib/model/search").SortByField>;
17
+ hasDraft: (record: CatalogRecord) => boolean;
18
+ constructor(searchFacade: SearchFacade, searchService: SearchService, selectionService: SelectionService, recordsRepository: RecordsRepositoryInterface);
19
+ handleRecordClick(item: unknown): void;
20
+ handleSortByChange(col: string, order: 'asc' | 'desc'): void;
21
+ handleRecordsSelectedChange(records: CatalogRecord[], selected: boolean): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResultsTableContainerComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResultsTableContainerComponent, "gn-ui-results-table-container", never, {}, { "recordClick": "recordClick"; }, never, never, true, never>;
24
+ }
25
+ //# sourceMappingURL=results-table-container.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results-table-container.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/search/src/lib/results-table/results-table-container.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAU,MAAM,eAAe,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAA;;AAIjI,qBAOa,8BAA8B;IAWvC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IAbjB,WAAW,8BAAoC;IAEzD,QAAQ,6CAA6B;IACrC,gBAAgB,2CAAoD;IACpE,OAAO,qGAA4B;IAEnC,QAAQ,WAAY,aAAa,KAAG,OAAO,CACqB;gBAGtD,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,0BAA0B;IAGvD,iBAAiB,CAAC,IAAI,EAAE,OAAO;IAI/B,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM;IAIrD,2BAA2B,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO;yCAzB5D,8BAA8B;2CAA9B,8BAA8B;CAgC1C"}
@@ -17,4 +17,5 @@ export * from './lib/record-preview-title/record-preview-title.component';
17
17
  export * from './lib/record-metric/record-metric.component';
18
18
  export * from './lib/results-list-item/results-list-item.component';
19
19
  export * from './lib/results-hits-number/results-hits-number.component';
20
+ export * from './lib/results-table/results-table.component';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/ui/search/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3E,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gDAAgD,CAAA;AAC9D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,wBAAwB,CAAA;AACtC,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,yDAAyD,CAAA;AACvE,cAAc,uDAAuD,CAAA;AACrE,cAAc,yDAAyD,CAAA;AACvE,cAAc,yDAAyD,CAAA;AACvE,cAAc,yDAAyD,CAAA;AACvE,cAAc,2DAA2D,CAAA;AACzE,cAAc,6CAA6C,CAAA;AAC3D,cAAc,qDAAqD,CAAA;AACnE,cAAc,yDAAyD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/ui/search/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3E,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gDAAgD,CAAA;AAC9D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,8CAA8C,CAAA;AAC5D,cAAc,wBAAwB,CAAA;AACtC,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AACzD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,yDAAyD,CAAA;AACvE,cAAc,uDAAuD,CAAA;AACrE,cAAc,yDAAyD,CAAA;AACvE,cAAc,yDAAyD,CAAA;AACvE,cAAc,yDAAyD,CAAA;AACvE,cAAc,2DAA2D,CAAA;AACzE,cAAc,6CAA6C,CAAA;AAC3D,cAAc,qDAAqD,CAAA;AACnE,cAAc,yDAAyD,CAAA;AACvE,cAAc,6CAA6C,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record';
3
+ import { FileFormat } from '../../../../../../libs/util/shared/src';
4
+ import { SortByField } from '../../../../../../libs/common/domain/src/lib/model/search';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ResultsTableComponent {
7
+ records: CatalogRecord[];
8
+ selectedRecordsIdentifiers: string[];
9
+ sortOrder: SortByField;
10
+ recordHasDraft: (record: CatalogRecord) => boolean;
11
+ sortByChange: EventEmitter<[string, "asc" | "desc"]>;
12
+ recordClick: EventEmitter<CatalogRecord>;
13
+ recordsSelectedChange: EventEmitter<[CatalogRecord[], boolean]>;
14
+ dateToString(date: Date): string;
15
+ getStatus(isPublishedToAll: boolean | unknown): "published" | "not published";
16
+ getRecordFormats(record: CatalogRecord): FileFormat[];
17
+ formatUserInfo(userInfo: string | unknown): string;
18
+ getBadgeColor(format: FileFormat): string;
19
+ handleRecordClick(item: unknown): void;
20
+ setSortBy(col: string, order: 'asc' | 'desc'): void;
21
+ isSortedBy(col: string): 'desc' | 'asc' | null;
22
+ isChecked(record: CatalogRecord): boolean;
23
+ handleRecordSelectedChange(selected: boolean, record: CatalogRecord): void;
24
+ toggleSelectAll(): Promise<void>;
25
+ isAllSelected(): boolean;
26
+ isSomeSelected(): boolean;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResultsTableComponent, never>;
28
+ 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; }; "recordHasDraft": { "alias": "recordHasDraft"; "required": false; }; }, { "sortByChange": "sortByChange"; "recordClick": "recordClick"; "recordsSelectedChange": "recordsSelectedChange"; }, never, never, true, never>;
29
+ }
30
+ //# sourceMappingURL=results-table.component.d.ts.map
@@ -0,0 +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":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2DAA2D,CAAA;AACzF,OAAO,EACL,UAAU,EAIX,MAAM,wCAAwC,CAAA;AAS/C,OAAO,EAEL,WAAW,EACZ,MAAM,2DAA2D,CAAA;;AAElE,qBAea,qBAAqB;IACvB,OAAO,EAAE,aAAa,EAAE,CAAK;IAC7B,0BAA0B,EAAE,MAAM,EAAE,CAAK;IACzC,SAAS,EAAE,WAAW,CAAO;IAC7B,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAc;IAG/D,YAAY,yCAA+C;IAC3D,WAAW,8BAAoC;IAC/C,qBAAqB,2CAE5B;IAEH,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,MAAM,GAAG,KAAK,GAAG,IAAI;IAe9C,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIzC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAI7D,eAAe;IAIrB,aAAa,IAAI,OAAO;IAMxB,cAAc,IAAI,OAAO;yCA5Fd,qBAAqB;2CAArB,qBAAqB;CAqGjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geonetwork-ui",
3
- "version": "2.4.0-dev.8f04e899",
3
+ "version": "2.4.0-dev.9c5250ea",
4
4
  "engines": {
5
5
  "node": ">=14.17.0"
6
6
  },
@@ -302,4 +302,18 @@ export class Gn4Repository implements RecordsRepositoryInterface {
302
302
  ) !== null
303
303
  )
304
304
  }
305
+
306
+ // generated by copilot
307
+ getAllDrafts(): Observable<CatalogRecord[]> {
308
+ const items = { ...window.localStorage }
309
+ const drafts = Object.keys(items)
310
+ .filter((key) => key.startsWith('geonetwork-ui-draft-'))
311
+ .map((key) => window.localStorage.getItem(key))
312
+ .filter((draft) => draft !== null)
313
+ return from(
314
+ Promise.all(
315
+ drafts.map((draft) => findConverterForDocument(draft).readRecord(draft))
316
+ )
317
+ )
318
+ }
305
319
  }
@@ -52,4 +52,7 @@ export abstract class RecordsRepositoryInterface {
52
52
 
53
53
  abstract clearRecordDraft(uniqueIdentifier: string): void
54
54
  abstract recordHasDraft(uniqueIdentifier: string): boolean
55
+
56
+ /** will return all pending drafts, both published and not published */
57
+ abstract getAllDrafts(): Observable<CatalogRecord[]>
55
58
  }
@@ -233,6 +233,14 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
233
233
  description: 'Téléchargement du fichier',
234
234
  mimeType: 'x-gis/x-shapefile',
235
235
  },
236
+ {
237
+ type: 'service',
238
+ url: new URL('https://my-org.net/ogc'),
239
+ accessServiceProtocol: 'ogcFeatures',
240
+ name: 'ogcFeaturesSecondRecord',
241
+ description: 'This OGC service is the second part of the download',
242
+ identifierInService: 'my:featuretype',
243
+ },
236
244
  ],
237
245
  lineage: `Document d’urbanisme numérisé conformément aux prescriptions nationales du CNIG par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.
238
246
  Ce lot de données produit en 2019, a été numérisé à partir du PCI Vecteur de 2019 et contrôlé par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.`,
@@ -1,6 +1,14 @@
1
1
  import { Injectable } from '@angular/core'
2
2
  import { select, Store } from '@ngrx/store'
3
- import { defaultIfEmpty, filter, map, mergeMap, scan } from 'rxjs/operators'
3
+ import {
4
+ defaultIfEmpty,
5
+ filter,
6
+ map,
7
+ mergeMap,
8
+ scan,
9
+ switchMap,
10
+ toArray,
11
+ } from 'rxjs/operators'
4
12
  import * as MdViewActions from './mdview.actions'
5
13
  import * as MdViewSelectors from './mdview.selectors'
6
14
  import { LinkClassifierService, LinkUsage } from '../../../../../../libs/util/shared/src'
@@ -95,36 +103,35 @@ export class MdViewFacade {
95
103
  )
96
104
 
97
105
  geoDataLinksWithGeometry$ = this.allLinks$.pipe(
98
- mergeMap((links) => {
99
- return from(links)
100
- }),
101
- mergeMap((link) => {
102
- if (this.linkClassifier.hasUsage(link, LinkUsage.GEODATA)) {
103
- if (
104
- link.type === 'service' &&
105
- link.accessServiceProtocol === 'ogcFeatures'
106
- ) {
107
- return from(this.dataService.getItemsFromOgcApi(link.url.href)).pipe(
108
- map((collectionRecords: OgcApiRecord) => {
109
- return collectionRecords && collectionRecords.geometry
110
- ? link
111
- : null
112
- }),
113
- defaultIfEmpty(null)
114
- )
115
- } else {
116
- return of(link)
117
- }
118
- } else {
119
- return of(null)
120
- }
121
- }),
122
- scan((acc, val) => {
123
- if (val !== null && !acc.includes(val)) {
124
- acc.push(val)
125
- }
126
- return acc
127
- }, [])
106
+ switchMap((links) =>
107
+ from(links).pipe(
108
+ mergeMap((link) => {
109
+ if (this.linkClassifier.hasUsage(link, LinkUsage.GEODATA)) {
110
+ if (
111
+ link.type === 'service' &&
112
+ link.accessServiceProtocol === 'ogcFeatures'
113
+ ) {
114
+ return from(
115
+ this.dataService.getItemsFromOgcApi(link.url.href)
116
+ ).pipe(
117
+ map((collectionRecords: OgcApiRecord) => {
118
+ return collectionRecords && collectionRecords.geometry
119
+ ? link
120
+ : null
121
+ }),
122
+ defaultIfEmpty(null)
123
+ )
124
+ } else {
125
+ return of(link)
126
+ }
127
+ } else {
128
+ return of(null)
129
+ }
130
+ }),
131
+ toArray(),
132
+ map((links) => links.filter((link) => link !== null))
133
+ )
134
+ )
128
135
  )
129
136
 
130
137
  landingPageLinks$ = this.metadata$.pipe(
@@ -21,4 +21,4 @@ export * from './lib/results-hits-number/results-hits.container.component'
21
21
  export * from './lib/results-layout/results-layout.component'
22
22
  export * from './lib/sort-by/sort-by.component'
23
23
  export * from './lib/state/container/search-state.container.directive'
24
- export * from './lib/results-table/results-table.component'
24
+ export * from './lib/results-table/results-table-container.component'
@@ -0,0 +1,9 @@
1
+ <gn-ui-results-table
2
+ [records]="records$ | async"
3
+ [recordHasDraft]="hasDraft"
4
+ [selectedRecordsIdentifiers]="selectedRecords$ | async"
5
+ [sortOrder]="sortBy$ | async"
6
+ (recordClick)="handleRecordClick($event)"
7
+ (recordsSelectedChange)="handleRecordsSelectedChange($event[0], $event[1])"
8
+ (sortByChange)="handleSortByChange($event[0], $event[1])"
9
+ ></gn-ui-results-table>
@@ -0,0 +1,49 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core'
2
+ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
3
+ import { SearchFacade } from '../state/search.facade'
4
+ import { SelectionService } from '../../../../../../libs/api/repository/src'
5
+ import { SearchService } from '../utils/service/search.service'
6
+ import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
7
+ import { ResultsTableComponent } from '../../../../../../libs/ui/search/src'
8
+ import { CommonModule } from '@angular/common'
9
+
10
+ @Component({
11
+ selector: 'gn-ui-results-table-container',
12
+ templateUrl: './results-table-container.component.html',
13
+ styleUrls: ['./results-table-container.component.css'],
14
+ standalone: true,
15
+ imports: [CommonModule, ResultsTableComponent],
16
+ })
17
+ export class ResultsTableContainerComponent {
18
+ @Output() recordClick = new EventEmitter<CatalogRecord>()
19
+
20
+ records$ = this.searchFacade.results$
21
+ selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$
22
+ sortBy$ = this.searchFacade.sortBy$
23
+
24
+ hasDraft = (record: CatalogRecord): boolean =>
25
+ this.recordsRepository.recordHasDraft(record.uniqueIdentifier)
26
+
27
+ constructor(
28
+ private searchFacade: SearchFacade,
29
+ private searchService: SearchService,
30
+ private selectionService: SelectionService,
31
+ private recordsRepository: RecordsRepositoryInterface
32
+ ) {}
33
+
34
+ handleRecordClick(item: unknown) {
35
+ this.recordClick.emit(item as CatalogRecord)
36
+ }
37
+
38
+ handleSortByChange(col: string, order: 'asc' | 'desc') {
39
+ this.searchService.setSortBy([order, col])
40
+ }
41
+
42
+ handleRecordsSelectedChange(records: CatalogRecord[], selected: boolean) {
43
+ if (!selected) {
44
+ this.selectionService.deselectRecords(records)
45
+ } else {
46
+ this.selectionService.selectRecords(records)
47
+ }
48
+ }
49
+ }
@@ -17,3 +17,4 @@ export * from './lib/record-preview-title/record-preview-title.component'
17
17
  export * from './lib/record-metric/record-metric.component'
18
18
  export * from './lib/results-list-item/results-list-item.component'
19
19
  export * from './lib/results-hits-number/results-hits-number.component'
20
+ export * from './lib/results-table/results-table.component'
@@ -1,13 +1,13 @@
1
1
  <gn-ui-interactive-table
2
- [items]="records$ | async"
2
+ [items]="records"
3
3
  (itemClick)="handleRecordClick($event)"
4
4
  >
5
5
  <!-- SELECTED COLUMN -->
6
6
  <gn-ui-interactive-table-column>
7
7
  <ng-template #header>
8
8
  <gn-ui-checkbox
9
- [checked]="isAllSelected() | async"
10
- [indeterminate]="isSomeSelected() | async"
9
+ [checked]="isAllSelected()"
10
+ [indeterminate]="isSomeSelected()"
11
11
  (changed)="toggleSelectAll()"
12
12
  type="default"
13
13
  class="-m-2 mr-3"
@@ -16,7 +16,7 @@
16
16
  </ng-template>
17
17
  <ng-template #cell let-item>
18
18
  <gn-ui-checkbox
19
- [checked]="isChecked(item) | async"
19
+ [checked]="isChecked(item)"
20
20
  (changed)="handleRecordSelectedChange($event, item)"
21
21
  class="-m-2"
22
22
  type="default"
@@ -27,7 +27,7 @@
27
27
  <!-- TITLE COLUMN -->
28
28
  <gn-ui-interactive-table-column
29
29
  [sortable]="true"
30
- [activeSort]="isSortedBy('resourceTitleObject.default.keyword') | async"
30
+ [activeSort]="isSortedBy('resourceTitleObject.default.keyword')"
31
31
  (sortChange)="setSortBy('resourceTitleObject.default.keyword', $event)"
32
32
  >
33
33
  <ng-template #header>
@@ -37,7 +37,7 @@
37
37
  <div class="flex flex-row items-center gap-2 max-w-full">
38
38
  <span class="overflow-hidden text-ellipsis">{{ item.title }}</span>
39
39
  <gn-ui-badge
40
- *ngIf="hasDraft(item)"
40
+ *ngIf="recordHasDraft(item)"
41
41
  [style.--gn-ui-badge-padding]="'0.4em 0.6em'"
42
42
  [style.--gn-ui-badge-text-color]="'#3d2006'"
43
43
  [style.--gn-ui-badge-background-color]="'#ffbc7b'"
@@ -85,7 +85,7 @@
85
85
  <!-- OWNER COLUMN -->
86
86
  <gn-ui-interactive-table-column
87
87
  [sortable]="true"
88
- [activeSort]="isSortedBy('recordOwner') | async"
88
+ [activeSort]="isSortedBy('recordOwner')"
89
89
  (sortChange)="setSortBy('recordOwner', $event)"
90
90
  >
91
91
  <ng-template #header>
@@ -110,7 +110,7 @@
110
110
  <!-- UPDATE DATE COLUMN -->
111
111
  <gn-ui-interactive-table-column
112
112
  [sortable]="true"
113
- [activeSort]="isSortedBy('changeDate') | async"
113
+ [activeSort]="isSortedBy('changeDate')"
114
114
  (sortChange)="setSortBy('changeDate', $event)"
115
115
  >
116
116
  <ng-template #header>
@@ -0,0 +1,138 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core'
2
+ import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
3
+ import {
4
+ FileFormat,
5
+ getBadgeColor,
6
+ getFileFormat,
7
+ getFormatPriority,
8
+ } from '../../../../../../libs/util/shared/src'
9
+ import { BadgeComponent, UiInputsModule } from '../../../../../../libs/ui/inputs/src'
10
+ import {
11
+ InteractiveTableColumnComponent,
12
+ InteractiveTableComponent,
13
+ } from '../../../../../../libs/ui/layout/src'
14
+ import { MatIconModule } from '@angular/material/icon'
15
+ import { TranslateModule } from '@ngx-translate/core'
16
+ import { CommonModule } from '@angular/common'
17
+ import {
18
+ FieldSort,
19
+ SortByField,
20
+ } from '../../../../../../libs/common/domain/src/lib/model/search'
21
+
22
+ @Component({
23
+ selector: 'gn-ui-results-table',
24
+ templateUrl: './results-table.component.html',
25
+ styleUrls: ['./results-table.component.css'],
26
+ standalone: true,
27
+ imports: [
28
+ CommonModule,
29
+ UiInputsModule,
30
+ InteractiveTableComponent,
31
+ InteractiveTableColumnComponent,
32
+ MatIconModule,
33
+ TranslateModule,
34
+ BadgeComponent,
35
+ ],
36
+ })
37
+ export class ResultsTableComponent {
38
+ @Input() records: CatalogRecord[] = []
39
+ @Input() selectedRecordsIdentifiers: string[] = []
40
+ @Input() sortOrder: SortByField = null
41
+ @Input() recordHasDraft: (record: CatalogRecord) => boolean = () => false
42
+
43
+ // emits the column (field) as well as the order
44
+ @Output() sortByChange = new EventEmitter<[string, 'asc' | 'desc']>()
45
+ @Output() recordClick = new EventEmitter<CatalogRecord>()
46
+ @Output() recordsSelectedChange = new EventEmitter<
47
+ [CatalogRecord[], boolean]
48
+ >()
49
+
50
+ dateToString(date: Date): string {
51
+ return date?.toLocaleDateString(undefined, {
52
+ year: 'numeric',
53
+ month: 'long',
54
+ day: 'numeric',
55
+ timeZone: 'UTC',
56
+ })
57
+ }
58
+
59
+ getStatus(isPublishedToAll: boolean | unknown) {
60
+ return isPublishedToAll ? 'published' : 'not published'
61
+ }
62
+
63
+ getRecordFormats(record: CatalogRecord): FileFormat[] {
64
+ if (record.kind === 'service' || !('distributions' in record)) {
65
+ return []
66
+ }
67
+ const formats = Array.from(
68
+ new Set(
69
+ record.distributions.map((distribution) => getFileFormat(distribution))
70
+ )
71
+ ).filter((format) => !!format)
72
+ formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a))
73
+ return formats
74
+ }
75
+
76
+ formatUserInfo(userInfo: string | unknown): string {
77
+ const infos = (typeof userInfo === 'string' ? userInfo : '').split('|')
78
+ if (infos && infos.length === 4) {
79
+ return `${infos[2]} ${infos[1]}`
80
+ }
81
+ return undefined
82
+ }
83
+
84
+ getBadgeColor(format: FileFormat): string {
85
+ return getBadgeColor(format)
86
+ }
87
+
88
+ handleRecordClick(item: unknown) {
89
+ this.recordClick.emit(item as CatalogRecord)
90
+ }
91
+
92
+ setSortBy(col: string, order: 'asc' | 'desc') {
93
+ this.sortByChange.emit([col, order])
94
+ }
95
+
96
+ isSortedBy(col: string): 'desc' | 'asc' | null {
97
+ if (!this.sortOrder) {
98
+ return null
99
+ }
100
+ const sortArray = Array.isArray(this.sortOrder[0])
101
+ ? (this.sortOrder as FieldSort[])
102
+ : ([this.sortOrder] as FieldSort[])
103
+ for (const sort of sortArray) {
104
+ if (sort[1] === col) {
105
+ return sort[0]
106
+ }
107
+ }
108
+ return null
109
+ }
110
+
111
+ isChecked(record: CatalogRecord): boolean {
112
+ return this.selectedRecordsIdentifiers.includes(record.uniqueIdentifier)
113
+ }
114
+
115
+ handleRecordSelectedChange(selected: boolean, record: CatalogRecord) {
116
+ this.recordsSelectedChange.emit([[record], selected])
117
+ }
118
+
119
+ async toggleSelectAll() {
120
+ this.recordsSelectedChange.emit([this.records, !this.isAllSelected()])
121
+ }
122
+
123
+ isAllSelected(): boolean {
124
+ return this.records.every((record) =>
125
+ this.selectedRecordsIdentifiers.includes(record.uniqueIdentifier)
126
+ )
127
+ }
128
+
129
+ isSomeSelected(): boolean {
130
+ const allSelected = this.records.every((record) =>
131
+ this.selectedRecordsIdentifiers.includes(record.uniqueIdentifier)
132
+ )
133
+ const someSelected = this.records.some((record) =>
134
+ this.selectedRecordsIdentifiers.includes(record.uniqueIdentifier)
135
+ )
136
+ return !allSelected && someSelected
137
+ }
138
+ }
@@ -1,4 +1,5 @@
1
1
  {
2
+ "Add Layer As": "",
2
3
  "button.login": "",
3
4
  "catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
4
5
  "catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
@@ -17,16 +18,22 @@
17
18
  "chart.type.line": "Liniendiagramm",
18
19
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
19
20
  "chart.type.pie": "Kreisdiagramm",
21
+ "dashboard.catalog.allRecords": "Metadatenkatalog",
22
+ "dashboard.catalog.calendar": "Kalender",
23
+ "dashboard.catalog.contacts": "Kontakte",
24
+ "dashboard.catalog.discussion": "Diskussion",
25
+ "dashboard.catalog.thesaurus": "Thesaurus",
20
26
  "dashboard.createRecord": "Neuer Eintrag",
27
+ "dashboard.labels.catalog": "Katalog",
21
28
  "dashboard.labels.mySpace": "Mein Bereich",
22
29
  "dashboard.records.all": "Katalog",
23
30
  "dashboard.records.hasDraft": "",
24
31
  "dashboard.records.myDraft": "Meine Entwürfe",
25
32
  "dashboard.records.myLibrary": "Meine Bibliothek",
26
- "dashboard.records.myOrg": "Meine Organisation",
27
33
  "dashboard.records.myRecords": "Meine Datensätze",
28
34
  "dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
29
35
  "dashboard.records.search": "Suche nach \"{searchText}\"",
36
+ "dashboard.records.templates": "Vorlagen",
30
37
  "dashboard.records.userDetail": "Name",
31
38
  "dashboard.records.userEmail": "E-Mail",
32
39
  "dashboard.records.username": "Benutzername",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "Add Layer As": "",
2
3
  "button.login": "Log in",
3
4
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
4
5
  "catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
@@ -17,16 +18,22 @@
17
18
  "chart.type.line": "line chart",
18
19
  "chart.type.lineSmooth": "smooth line chart",
19
20
  "chart.type.pie": "pie chart",
21
+ "dashboard.catalog.allRecords": "Metadata records",
22
+ "dashboard.catalog.calendar": "Calendar",
23
+ "dashboard.catalog.contacts": "Contacts",
24
+ "dashboard.catalog.discussion": "Discussion",
25
+ "dashboard.catalog.thesaurus": "Thesaurus",
20
26
  "dashboard.createRecord": "New record",
27
+ "dashboard.labels.catalog": "Catalog",
21
28
  "dashboard.labels.mySpace": "My space",
22
29
  "dashboard.records.all": "Metadata records",
23
30
  "dashboard.records.hasDraft": "draft",
24
31
  "dashboard.records.myDraft": "My drafts",
25
32
  "dashboard.records.myLibrary": "My library",
26
- "dashboard.records.myOrg": "Organization",
27
33
  "dashboard.records.myRecords": "My Records",
28
34
  "dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
29
35
  "dashboard.records.search": "Search for \"{searchText}\"",
36
+ "dashboard.records.templates": "Templates",
30
37
  "dashboard.records.userDetail": "Name",
31
38
  "dashboard.records.userEmail": "Email",
32
39
  "dashboard.records.username": "Username",