geonetwork-ui 2.4.1-dev.9ee0df3df → 2.4.1-dev.a1ec7cf5a

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 (111) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +4 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +5 -2
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +27 -16
  5. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  6. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +7 -1
  7. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +3 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +18 -14
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +15 -5
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +10 -4
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +6 -5
  12. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +36 -23
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +7 -12
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +7 -12
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +6 -12
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  17. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +9 -5
  18. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +3 -4
  19. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +3 -3
  20. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +4 -4
  21. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +9 -4
  22. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -10
  23. package/esm2022/translations/de.json +27 -6
  24. package/esm2022/translations/en.json +11 -9
  25. package/esm2022/translations/es.json +25 -4
  26. package/esm2022/translations/fr.json +11 -9
  27. package/esm2022/translations/it.json +241 -218
  28. package/esm2022/translations/nl.json +25 -4
  29. package/esm2022/translations/pt.json +25 -4
  30. package/fesm2022/geonetwork-ui.mjs +777 -609
  31. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  32. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -1
  33. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  34. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  35. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  36. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +4 -3
  37. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  38. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +4 -3
  39. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  40. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +3 -0
  41. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  42. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +10 -2
  43. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  44. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +6 -2
  45. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  46. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +5 -2
  47. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  48. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +2 -1
  49. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  50. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +2 -1
  51. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  52. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +4 -4
  53. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  54. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +1 -4
  55. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  56. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +1 -4
  57. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  58. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +1 -4
  59. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  60. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  61. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  62. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +0 -1
  63. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  64. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  65. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  66. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +2 -1
  67. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  68. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -3
  69. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +4 -3
  72. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +8 -1
  73. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  74. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +53 -27
  75. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +5 -4
  76. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.fixtures.ts +2 -2
  77. package/src/libs/common/fixtures/src/lib/elasticsearch/search-responses.fixtures.ts +16 -16
  78. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +163 -0
  79. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +24 -4
  80. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +10 -1
  81. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +57 -31
  82. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +15 -9
  83. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +18 -12
  84. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +13 -8
  85. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +1 -1
  86. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +31 -19
  87. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +1 -10
  88. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +1 -7
  89. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +0 -11
  90. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -8
  91. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +0 -9
  92. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +2 -8
  93. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +2 -2
  94. package/src/libs/feature/editor/src/lib/services/editor.service.ts +18 -16
  95. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +0 -1
  96. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +0 -3
  97. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +1 -0
  98. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +1 -1
  99. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +12 -1
  100. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +4 -6
  101. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +23 -6
  102. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -6
  103. package/tailwind.base.config.js +2 -0
  104. package/translations/de.json +27 -6
  105. package/translations/en.json +11 -9
  106. package/translations/es.json +25 -4
  107. package/translations/fr.json +11 -9
  108. package/translations/it.json +241 -218
  109. package/translations/nl.json +25 -4
  110. package/translations/pt.json +25 -4
  111. package/translations/sk.json +25 -4
@@ -1578,7 +1578,7 @@ export const elasticFullResponseFixture = () => ({
1578
1578
  'http://inspire.ec.europa.eu/metadatacodelist/LimitationsOnPublicAccess/noLimitations',
1579
1579
  ],
1580
1580
  },
1581
- edit: false,
1581
+ edit: true,
1582
1582
  owner: false,
1583
1583
  isPublishedToAll: true,
1584
1584
  view: true,
@@ -3249,7 +3249,7 @@ export const elasticFullResponseFixture = () => ({
3249
3249
  userSavedCount: '0',
3250
3250
  sourceCatalogue: '7ea582d4-9ddf-422e-b28f-29760a4c0147',
3251
3251
  },
3252
- edit: false,
3252
+ edit: true,
3253
3253
  canReview: false,
3254
3254
  owner: false,
3255
3255
  isPublishedToAll: true,
@@ -124,9 +124,9 @@ export const elasticHitsOnlyFixture = () => ({
124
124
  sourceCatalogue: '6731be1e-6533-44e0-9b8a-580b45e36e80',
125
125
  link: [],
126
126
  },
127
- edit: false,
127
+ edit: true,
128
128
  owner: false,
129
- isPublishedToAll: false,
129
+ isPublishedToAll: true,
130
130
  view: false,
131
131
  notify: false,
132
132
  download: false,
@@ -203,9 +203,9 @@ export const elasticHitsOnlyFixture = () => ({
203
203
  userSavedCount: '4',
204
204
  link: [],
205
205
  },
206
- edit: false,
206
+ edit: true,
207
207
  owner: false,
208
- isPublishedToAll: false,
208
+ isPublishedToAll: true,
209
209
  view: false,
210
210
  notify: false,
211
211
  download: false,
@@ -299,7 +299,7 @@ export const elasticSummaryHitsFixture = () => ({
299
299
  userSavedCount: '5',
300
300
  },
301
301
  sort: [1660176316000],
302
- edit: false,
302
+ edit: true,
303
303
  owner: false,
304
304
  isPublishedToAll: true,
305
305
  view: true,
@@ -370,7 +370,7 @@ export const elasticSummaryHitsFixture = () => ({
370
370
  userSavedCount: '0',
371
371
  },
372
372
  sort: [1660089739000],
373
- edit: false,
373
+ edit: true,
374
374
  owner: false,
375
375
  isPublishedToAll: true,
376
376
  view: true,
@@ -428,7 +428,7 @@ export const elasticSummaryHitsFixture = () => ({
428
428
  userSavedCount: '0',
429
429
  },
430
430
  sort: [1660089729000],
431
- edit: false,
431
+ edit: true,
432
432
  owner: false,
433
433
  isPublishedToAll: true,
434
434
  view: true,
@@ -1531,7 +1531,7 @@ export const elasticServiceMetadataHistsFixture = () => ({
1531
1531
  },
1532
1532
  ],
1533
1533
  },
1534
- edit: false,
1534
+ edit: true,
1535
1535
  canReview: false,
1536
1536
  owner: false,
1537
1537
  isPublishedToAll: true,
@@ -1715,7 +1715,7 @@ export const elasticServiceMetadataHistsFixture = () => ({
1715
1715
  op3: ['1', '25', '14688'],
1716
1716
  op6: ['1', '14688'],
1717
1717
  op5: ['1', '14688'],
1718
- edit: false,
1718
+ edit: true,
1719
1719
  canReview: false,
1720
1720
  owner: false,
1721
1721
  isPublishedToAll: true,
@@ -2369,7 +2369,7 @@ export const elasticServiceMetadataHistsFixture = () => ({
2369
2369
  inspireAnnexForFirstTheme: 'iii',
2370
2370
  userSavedCount: '0',
2371
2371
  },
2372
- edit: false,
2372
+ edit: true,
2373
2373
  canReview: false,
2374
2374
  owner: false,
2375
2375
  isPublishedToAll: true,
@@ -2796,7 +2796,7 @@ export const elasticServiceMetadataHistsFixture = () => ({
2796
2796
  uuid: 'ebef2115-bee5-40bb-b5cc-4593d82ba334',
2797
2797
  op0: '1',
2798
2798
  resourceType: ['dataset', 'map', 'map/static'],
2799
- edit: false,
2799
+ edit: true,
2800
2800
  canReview: false,
2801
2801
  owner: false,
2802
2802
  isPublishedToAll: true,
@@ -4920,7 +4920,7 @@ export const elasticReuseMetadataHitsFixture = () => ({
4920
4920
  },
4921
4921
  ],
4922
4922
  },
4923
- edit: false,
4923
+ edit: true,
4924
4924
  canReview: false,
4925
4925
  owner: false,
4926
4926
  isPublishedToAll: true,
@@ -5148,7 +5148,7 @@ export const elasticReuseMetadataHitsFixture = () => ({
5148
5148
  op3: '1',
5149
5149
  op6: '1',
5150
5150
  op5: '1',
5151
- edit: false,
5151
+ edit: true,
5152
5152
  canReview: false,
5153
5153
  owner: false,
5154
5154
  isPublishedToAll: true,
@@ -12690,7 +12690,7 @@ export const elasticReuseMetadataHitsFixture = () => ({
12690
12690
  inspireAnnexForFirstTheme: 'iii',
12691
12691
  userSavedCount: '0',
12692
12692
  },
12693
- edit: false,
12693
+ edit: true,
12694
12694
  canReview: false,
12695
12695
  owner: false,
12696
12696
  isPublishedToAll: true,
@@ -13022,7 +13022,7 @@ export const elasticReuseMetadataHitsFixture = () => ({
13022
13022
  userSavedCount: '0',
13023
13023
  sourceCatalogue: 'ce008f24-8e0d-45a8-97f8-9f10399f0190',
13024
13024
  },
13025
- edit: false,
13025
+ edit: true,
13026
13026
  canReview: false,
13027
13027
  owner: false,
13028
13028
  isPublishedToAll: true,
@@ -13349,7 +13349,7 @@ export const elasticReuseMetadataHitsFixture = () => ({
13349
13349
  userSavedCount: '0',
13350
13350
  sourceCatalogue: 'ce008f24-8e0d-45a8-97f8-9f10399f0190',
13351
13351
  },
13352
- edit: false,
13352
+ edit: true,
13353
13353
  canReview: false,
13354
13354
  owner: false,
13355
13355
  isPublishedToAll: true,
@@ -157,6 +157,10 @@ As such, **it is not very interesting at all.**`,
157
157
  },
158
158
  otherLanguages: ['de'],
159
159
  defaultLanguage: 'en',
160
+ extras: {
161
+ isPublishedToAll: true,
162
+ edit: true,
163
+ },
160
164
  },
161
165
  {
162
166
  uniqueIdentifier: '7d002c4c-92ef-4b9f-a568-d732f740b99e',
@@ -467,6 +471,165 @@ export const simpleDatasetRecordAsXmlFixture =
467
471
  </mdb:resourceLineage>
468
472
  </mdb:MD_Metadata>`
469
473
 
474
+ export const duplicateDatasetRecordAsXmlFixture =
475
+ (): string => `<?xml version="1.0" encoding="UTF-8"?>
476
+ <mdb:MD_Metadata xmlns:mdb="http://standards.iso.org/iso/19115/-3/mdb/2.0" xmlns:mcc="http://standards.iso.org/iso/19115/-3/mcc/1.0" xmlns:gco="http://standards.iso.org/iso/19115/-3/gco/1.0" xmlns:cit="http://standards.iso.org/iso/19115/-3/cit/2.0" xmlns:mri="http://standards.iso.org/iso/19115/-3/mri/1.0" xmlns:mco="http://standards.iso.org/iso/19115/-3/mco/1.0" xmlns:gcx="http://standards.iso.org/iso/19115/-3/gcx/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mmi="http://standards.iso.org/iso/19115/-3/mmi/1.0" xmlns:mrd="http://standards.iso.org/iso/19115/-3/mrd/1.0" xmlns:mrl="http://standards.iso.org/iso/19115/-3/mrl/2.0">
477
+ <mdb:metadataIdentifier>
478
+ <mcc:MD_Identifier>
479
+ <mcc:code>
480
+ <gco:CharacterString>my-dataset-001</gco:CharacterString>
481
+ </mcc:code>
482
+ </mcc:MD_Identifier>
483
+ </mdb:metadataIdentifier>
484
+ <mdb:metadataScope>
485
+ <mdb:MD_MetadataScope>
486
+ <mdb:resourceScope>
487
+ <mcc:MD_ScopeCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#MD_ScopeCode" codeListValue="dataset">dataset</mcc:MD_ScopeCode>
488
+ </mdb:resourceScope>
489
+ </mdb:MD_MetadataScope>
490
+ </mdb:metadataScope>
491
+ <mdb:contact>
492
+ <cit:CI_Responsibility>
493
+ <cit:role>
494
+ <cit:CI_RoleCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#CI_RoleCode" codeListValue="pointOfContact">pointOfContact</cit:CI_RoleCode>
495
+ </cit:role>
496
+ <cit:party>
497
+ <cit:CI_Organisation>
498
+ <cit:name>
499
+ <gco:CharacterString>MyOrganization</gco:CharacterString>
500
+ </cit:name>
501
+ <cit:contactInfo>
502
+ <cit:CI_Contact>
503
+ <cit:address>
504
+ <cit:CI_Address>
505
+ <cit:electronicMailAddress>
506
+ <gco:CharacterString>bob@org.net</gco:CharacterString>
507
+ </cit:electronicMailAddress>
508
+ </cit:CI_Address>
509
+ </cit:address>
510
+ </cit:CI_Contact>
511
+ </cit:contactInfo>
512
+ <cit:individual>
513
+ <cit:CI_Individual>
514
+ <cit:name>
515
+ <gco:CharacterString>Bob TheGreat</gco:CharacterString>
516
+ </cit:name>
517
+ <cit:positionName>
518
+ <gco:CharacterString>developer</gco:CharacterString>
519
+ </cit:positionName>
520
+ </cit:CI_Individual>
521
+ </cit:individual>
522
+ </cit:CI_Organisation>
523
+ </cit:party>
524
+ </cit:CI_Responsibility>
525
+ </mdb:contact>
526
+ <mdb:dateInfo>
527
+ <cit:CI_Date>
528
+ <cit:date>
529
+ <gco:DateTime>2022-02-01T15:12:00</gco:DateTime>
530
+ </cit:date>
531
+ <cit:dateType>
532
+ <cit:CI_DateTypeCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#CI_DateTypeCode" codeListValue="revision">revision</cit:CI_DateTypeCode>
533
+ </cit:dateType>
534
+ </cit:CI_Date>
535
+ </mdb:dateInfo>
536
+ <mdb:identificationInfo>
537
+ <mri:MD_DataIdentification>
538
+ <mri:citation>
539
+ <cit:CI_Citation>
540
+ <cit:title>
541
+ <gco:CharacterString>Copy of record A very interesting dataset (un jeu de données très intéressant)</gco:CharacterString>
542
+ </cit:title>
543
+ <cit:date>
544
+ <cit:CI_Date>
545
+ <cit:date>
546
+ <gco:DateTime>2022-09-01T14:18:19</gco:DateTime>
547
+ </cit:date>
548
+ <cit:dateType>
549
+ <cit:CI_DateTypeCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#CI_DateTypeCode" codeListValue="creation">creation</cit:CI_DateTypeCode>
550
+ </cit:dateType>
551
+ </cit:CI_Date>
552
+ </cit:date>
553
+ <cit:date>
554
+ <cit:CI_Date>
555
+ <cit:date>
556
+ <gco:DateTime>2022-12-04T15:12:00</gco:DateTime>
557
+ </cit:date>
558
+ <cit:dateType>
559
+ <cit:CI_DateTypeCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#CI_DateTypeCode" codeListValue="revision">revision</cit:CI_DateTypeCode>
560
+ </cit:dateType>
561
+ </cit:CI_Date>
562
+ </cit:date>
563
+ </cit:CI_Citation>
564
+ </mri:citation>
565
+ <mri:abstract>
566
+ <gco:CharacterString>This dataset has been established for testing purposes.</gco:CharacterString>
567
+ </mri:abstract>
568
+ <mri:topicCategory>
569
+ <mri:MD_TopicCategoryCode>testData</mri:MD_TopicCategoryCode>
570
+ </mri:topicCategory>
571
+ <mri:status>
572
+ <mcc:MD_ProgressCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#MD_ProgressCode" codeListValue="onGoing">onGoing</mcc:MD_ProgressCode>
573
+ </mri:status>
574
+ <mri:resourceMaintenance>
575
+ <mmi:MD_MaintenanceInformation>
576
+ <mmi:userDefinedMaintenanceFrequency>
577
+ <gco:TM_PeriodDuration>P0Y0M10D</gco:TM_PeriodDuration>
578
+ </mmi:userDefinedMaintenanceFrequency>
579
+ </mmi:MD_MaintenanceInformation>
580
+ </mri:resourceMaintenance>
581
+ <mri:spatialRepresentationType>
582
+ <mcc:MD_SpatialRepresentationTypeCode codeList="https://standards.iso.org/iso/19115/resources/Codelists/cat/codelists.xml#MD_SpatialRepresentationTypeCode" codeListValue="grid">grid</mcc:MD_SpatialRepresentationTypeCode>
583
+ </mri:spatialRepresentationType>
584
+ </mri:MD_DataIdentification>
585
+ </mdb:identificationInfo>
586
+ <mdb:distributionInfo>
587
+ <mrd:MD_Distribution>
588
+ <mrd:distributionFormat>
589
+ <mrd:MD_Format>
590
+ <mrd:formatSpecificationCitation>
591
+ <cit:CI_Citation>
592
+ <cit:title>
593
+ <gco:CharacterString>x-gis/x-shapefile</gco:CharacterString>
594
+ </cit:title>
595
+ </cit:CI_Citation>
596
+ </mrd:formatSpecificationCitation>
597
+ </mrd:MD_Format>
598
+ </mrd:distributionFormat>
599
+ <mrd:transferOptions>
600
+ <mrd:MD_DigitalTransferOptions>
601
+ <mrd:onLine>
602
+ <cit:CI_OnlineResource>
603
+ <cit:linkage>
604
+ <gco:CharacterString>http://my-org.net/download/1.zip</gco:CharacterString>
605
+ </cit:linkage>
606
+ <cit:description>
607
+ <gco:CharacterString>Dataset downloaded as a shapefile</gco:CharacterString>
608
+ </cit:description>
609
+ <cit:name>
610
+ <gco:CharacterString>Direct download</gco:CharacterString>
611
+ </cit:name>
612
+ <cit:protocol>
613
+ <gco:CharacterString>WWW:DOWNLOAD</gco:CharacterString>
614
+ </cit:protocol>
615
+ <cit:function>
616
+ <cit:CI_OnLineFunctionCode codeList="http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_OnLineFunctionCode" codeListValue="download"/>
617
+ </cit:function>
618
+ </cit:CI_OnlineResource>
619
+ </mrd:onLine>
620
+ </mrd:MD_DigitalTransferOptions>
621
+ </mrd:transferOptions>
622
+ </mrd:MD_Distribution>
623
+ </mdb:distributionInfo>
624
+ <mdb:resourceLineage>
625
+ <mrl:LI_Lineage>
626
+ <mrl:statement>
627
+ <gco:CharacterString>This record was edited manually to test the conversion processes</gco:CharacterString>
628
+ </mrl:statement>
629
+ </mrl:LI_Lineage>
630
+ </mdb:resourceLineage>
631
+ </mdb:MD_Metadata>`
632
+
470
633
  export const NATIONAL_KEYWORD = {
471
634
  key: 'http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/national',
472
635
  label: 'National',
@@ -1371,7 +1371,10 @@ export class RecordsApiService {
1371
1371
  hasAttachmentsOfSource?: boolean,
1372
1372
  observe?: 'body',
1373
1373
  reportProgress?: boolean,
1374
- options?: { httpHeaderAccept?: 'application/json' }
1374
+ options?: {
1375
+ httpHeaderAccept?: 'application/json'
1376
+ httpContentTypeSelected?: 'application/json;charset=UTF-8'
1377
+ }
1375
1378
  ): Observable<string>
1376
1379
  public create(
1377
1380
  sourceUuid: string,
@@ -1389,7 +1392,10 @@ export class RecordsApiService {
1389
1392
  hasAttachmentsOfSource?: boolean,
1390
1393
  observe?: 'response',
1391
1394
  reportProgress?: boolean,
1392
- options?: { httpHeaderAccept?: 'application/json' }
1395
+ options?: {
1396
+ httpHeaderAccept?: 'application/json'
1397
+ httpContentTypeSelected?: 'application/json;charset=UTF-8'
1398
+ }
1393
1399
  ): Observable<HttpResponse<string>>
1394
1400
  public create(
1395
1401
  sourceUuid: string,
@@ -1407,7 +1413,10 @@ export class RecordsApiService {
1407
1413
  hasAttachmentsOfSource?: boolean,
1408
1414
  observe?: 'events',
1409
1415
  reportProgress?: boolean,
1410
- options?: { httpHeaderAccept?: 'application/json' }
1416
+ options?: {
1417
+ httpHeaderAccept?: 'application/json'
1418
+ httpContentTypeSelected?: 'application/json;charset=UTF-8'
1419
+ }
1411
1420
  ): Observable<HttpEvent<string>>
1412
1421
  public create(
1413
1422
  sourceUuid: string,
@@ -1425,7 +1434,10 @@ export class RecordsApiService {
1425
1434
  hasAttachmentsOfSource?: boolean,
1426
1435
  observe: any = 'body',
1427
1436
  reportProgress: boolean = false,
1428
- options?: { httpHeaderAccept?: 'application/json' }
1437
+ options?: {
1438
+ httpHeaderAccept?: 'application/json'
1439
+ httpContentTypeSelected?: 'application/json;charset=UTF-8'
1440
+ }
1429
1441
  ): Observable<any> {
1430
1442
  if (sourceUuid === null || sourceUuid === undefined) {
1431
1443
  throw new Error(
@@ -1510,6 +1522,14 @@ export class RecordsApiService {
1510
1522
 
1511
1523
  let headers = this.defaultHeaders
1512
1524
 
1525
+ // to determine the Content-Type header
1526
+ const consumes: string[] = ['application/json;charset=UTF-8']
1527
+ const httpContentTypeSelected: string | undefined =
1528
+ this.configuration.selectHeaderContentType(consumes)
1529
+ if (httpContentTypeSelected !== undefined) {
1530
+ headers = headers.set('Content-Type', httpContentTypeSelected)
1531
+ }
1532
+
1513
1533
  let httpHeaderAcceptSelected: string | undefined =
1514
1534
  options && options.httpHeaderAccept
1515
1535
  if (httpHeaderAcceptSelected === undefined) {
@@ -7,7 +7,6 @@ export const openRecord = createAction(
7
7
  '[Editor] Open record',
8
8
  props<{
9
9
  record: CatalogRecord
10
- alreadySavedOnce: boolean
11
10
  recordSource?: string | null
12
11
  }>()
13
12
  )
@@ -51,3 +50,13 @@ export const hasRecordChangedSinceDraftSuccess = createAction(
51
50
  '[Editor] Has Record Changed Since Draft Success',
52
51
  props<{ changes: { user: string; date: Date } }>()
53
52
  )
53
+
54
+ export const isPublished = createAction(
55
+ '[Editor] Record Saved But Not Published',
56
+ props<{ isPublished: boolean }>()
57
+ )
58
+
59
+ export const canEditRecord = createAction(
60
+ '[Editor] User can edit record',
61
+ props<{ canEditRecord: boolean }>()
62
+ )
@@ -8,7 +8,6 @@ import { Store } from '@ngrx/store'
8
8
  import {
9
9
  selectEditorConfig,
10
10
  selectRecord,
11
- selectRecordAlreadySavedOnce,
12
11
  selectRecordSource,
13
12
  } from './editor.selectors'
14
13
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
@@ -28,31 +27,27 @@ export class EditorEffects {
28
27
  withLatestFrom(
29
28
  this.store.select(selectRecord),
30
29
  this.store.select(selectRecordSource),
31
- this.store.select(selectEditorConfig),
32
- this.store.select(selectRecordAlreadySavedOnce)
30
+ this.store.select(selectEditorConfig)
33
31
  ),
34
- switchMap(([, record, recordSource, fieldsConfig, alreadySavedOnce]) =>
35
- this.editorService
36
- .saveRecord(record, recordSource, fieldsConfig, !alreadySavedOnce)
37
- .pipe(
38
- switchMap(([record, recordSource]) =>
39
- of(
40
- EditorActions.saveRecordSuccess(),
41
- EditorActions.openRecord({
42
- record,
43
- alreadySavedOnce: true,
44
- recordSource,
45
- })
46
- )
47
- ),
48
- catchError((error) =>
49
- of(
50
- EditorActions.saveRecordFailure({
51
- error,
52
- })
53
- )
32
+ switchMap(([, record, recordSource, fieldsConfig]) =>
33
+ this.editorService.saveRecord(record, recordSource, fieldsConfig).pipe(
34
+ switchMap(([record, recordSource]) =>
35
+ of(
36
+ EditorActions.saveRecordSuccess(),
37
+ EditorActions.openRecord({
38
+ record,
39
+ recordSource,
40
+ })
41
+ )
42
+ ),
43
+ catchError((error) =>
44
+ of(
45
+ EditorActions.saveRecordFailure({
46
+ error,
47
+ })
54
48
  )
55
49
  )
50
+ )
56
51
  )
57
52
  )
58
53
  )
@@ -63,12 +58,14 @@ export class EditorEffects {
63
58
  ofType(EditorActions.saveRecordSuccess),
64
59
  withLatestFrom(this.store.select(selectRecord)),
65
60
  switchMap(([_, record]) => {
66
- this.gn4PlateformService.cleanRecordAttachments(record).subscribe({
67
- next: (_) => undefined,
68
- error: (err) => {
69
- console.error(err)
70
- },
71
- })
61
+ if (record.uniqueIdentifier !== null) {
62
+ this.gn4PlateformService.cleanRecordAttachments(record).subscribe({
63
+ next: (_) => undefined,
64
+ error: (err) => {
65
+ console.error(err)
66
+ },
67
+ })
68
+ }
72
69
  return EMPTY
73
70
  }),
74
71
  catchError((error) => {
@@ -106,10 +103,9 @@ export class EditorEffects {
106
103
  ofType(EditorActions.undoRecordDraft),
107
104
  withLatestFrom(this.store.select(selectRecord)),
108
105
  switchMap(([, record]) => this.editorService.undoRecordDraft(record)),
109
- map(([record, recordSource, alreadySavedOnce]) =>
106
+ map(([record, recordSource]) =>
110
107
  EditorActions.openRecord({
111
108
  record,
112
- alreadySavedOnce,
113
109
  recordSource,
114
110
  })
115
111
  )
@@ -141,4 +137,34 @@ export class EditorEffects {
141
137
  )
142
138
  )
143
139
  )
140
+
141
+ checkIsRecordPublished$ = createEffect(() =>
142
+ this.actions$.pipe(
143
+ ofType(EditorActions.openRecord),
144
+ map(({ record }) => record.uniqueIdentifier),
145
+ switchMap((uniqueIdentifier) =>
146
+ this.recordsRepository.getRecordPublicationStatus(uniqueIdentifier)
147
+ ),
148
+ map((isPublished) =>
149
+ EditorActions.isPublished({
150
+ isPublished: isPublished,
151
+ })
152
+ )
153
+ )
154
+ )
155
+
156
+ checkCanEditRecord$ = createEffect(() =>
157
+ this.actions$.pipe(
158
+ ofType(EditorActions.openRecord),
159
+ map(({ record }) => record.uniqueIdentifier),
160
+ switchMap((uniqueIdentifier) =>
161
+ this.recordsRepository.canEditRecord(uniqueIdentifier)
162
+ ),
163
+ map((canEditRecord) =>
164
+ EditorActions.canEditRecord({
165
+ canEditRecord: canEditRecord,
166
+ })
167
+ )
168
+ )
169
+ )
144
170
  }
@@ -14,9 +14,6 @@ export class EditorFacade {
14
14
 
15
15
  record$ = this.store.pipe(select(EditorSelectors.selectRecord))
16
16
  recordSource$ = this.store.pipe(select(EditorSelectors.selectRecordSource))
17
- alreadySavedOnce$ = this.store.pipe(
18
- select(EditorSelectors.selectRecordAlreadySavedOnce)
19
- )
20
17
  saving$ = this.store.pipe(select(EditorSelectors.selectRecordSaving))
21
18
  saveError$ = this.store.pipe(
22
19
  select(EditorSelectors.selectRecordSaveError),
@@ -35,14 +32,15 @@ export class EditorFacade {
35
32
  hasRecordChanged$ = this.store.pipe(
36
33
  select(EditorSelectors.selectHasRecordChanged)
37
34
  )
35
+ isPublished$ = this.store.pipe(select(EditorSelectors.selectIsPublished))
36
+ canEditRecord$ = this.store.pipe(select(EditorSelectors.selectCanEditRecord))
38
37
 
39
- openRecord(
40
- record: CatalogRecord,
41
- recordSource: string,
42
- alreadySavedOnce: boolean
43
- ) {
38
+ openRecord(record: CatalogRecord, recordSource: string) {
44
39
  this.store.dispatch(
45
- EditorActions.openRecord({ record, recordSource, alreadySavedOnce })
40
+ EditorActions.openRecord({
41
+ record,
42
+ recordSource,
43
+ })
46
44
  )
47
45
  this.setCurrentPage(0)
48
46
  }
@@ -70,4 +68,12 @@ export class EditorFacade {
70
68
  checkHasRecordChanged(record: CatalogRecord) {
71
69
  this.store.dispatch(EditorActions.hasRecordChangedSinceDraft({ record }))
72
70
  }
71
+
72
+ isPublished(isPublished: boolean) {
73
+ this.store.dispatch(EditorActions.isPublished({ isPublished }))
74
+ }
75
+
76
+ canEditRecord(canEditRecord: boolean) {
77
+ this.store.dispatch(EditorActions.canEditRecord({ canEditRecord }))
78
+ }
73
79
  }
@@ -18,13 +18,14 @@ export const EDITOR_FEATURE_KEY = 'editor'
18
18
  export interface EditorState {
19
19
  record: CatalogRecord | null
20
20
  recordSource: string | null
21
- alreadySavedOnce: boolean
22
21
  saving: boolean
23
22
  saveError: SaveRecordError | null
24
23
  changedSinceSave: boolean
25
24
  editorConfig: EditorConfig
26
25
  currentPage: number
27
26
  hasRecordChanged: { user: string; date: Date }
27
+ isPublished: boolean
28
+ canEditRecord: boolean
28
29
  }
29
30
 
30
31
  export interface EditorPartialState {
@@ -34,27 +35,24 @@ export interface EditorPartialState {
34
35
  export const initialEditorState: EditorState = {
35
36
  record: null,
36
37
  recordSource: null,
37
- alreadySavedOnce: false,
38
38
  saving: false,
39
39
  saveError: null,
40
40
  changedSinceSave: false,
41
41
  editorConfig: DEFAULT_CONFIGURATION,
42
42
  currentPage: 0,
43
43
  hasRecordChanged: null,
44
+ isPublished: true,
45
+ canEditRecord: true,
44
46
  }
45
47
 
46
48
  const reducer = createReducer(
47
49
  initialEditorState,
48
- on(
49
- EditorActions.openRecord,
50
- (state, { record, recordSource, alreadySavedOnce }) => ({
51
- ...state,
52
- changedSinceSave: false,
53
- recordSource: recordSource ?? null,
54
- alreadySavedOnce,
55
- record,
56
- })
57
- ),
50
+ on(EditorActions.openRecord, (state, { record, recordSource }) => ({
51
+ ...state,
52
+ changedSinceSave: false,
53
+ recordSource: recordSource ?? null,
54
+ record,
55
+ })),
58
56
  on(EditorActions.saveRecord, (state) => ({
59
57
  ...state,
60
58
  saving: true,
@@ -110,6 +108,14 @@ const reducer = createReducer(
110
108
  on(EditorActions.hasRecordChangedSinceDraftSuccess, (state, { changes }) => ({
111
109
  ...state,
112
110
  hasRecordChanged: changes,
111
+ })),
112
+ on(EditorActions.isPublished, (state, { isPublished }) => ({
113
+ ...state,
114
+ isPublished: isPublished,
115
+ })),
116
+ on(EditorActions.canEditRecord, (state, { canEditRecord }) => ({
117
+ ...state,
118
+ canEditRecord: canEditRecord,
113
119
  }))
114
120
  )
115
121