geonetwork-ui 2.4.0-dev.27089d81 → 2.4.0-dev.4e4ab1af
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/index.mjs +2 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +12 -1
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -5
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
- package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -6
- package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
- package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
- package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +7 -2
- package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
- package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -2
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +1 -2
- package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +11 -7
- package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +143 -60
- package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
- package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +4 -3
- package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
- package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
- package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +6 -3
- package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +9 -3
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
- package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -4
- package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
- package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
- package/esm2022/translations/de.json +85 -38
- package/esm2022/translations/en.json +57 -10
- package/esm2022/translations/es.json +56 -9
- package/esm2022/translations/fr.json +57 -10
- package/esm2022/translations/it.json +56 -9
- package/esm2022/translations/nl.json +56 -9
- package/esm2022/translations/pt.json +56 -9
- package/fesm2022/geonetwork-ui.mjs +856 -303
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/index.d.ts +1 -0
- package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +2 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
- package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
- package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
- package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
- package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
- package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
- package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
- package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
- package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
- package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
- package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/index.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +26 -15
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +5 -1
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
- package/src/libs/common/fixtures/src/index.ts +2 -0
- package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
- package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
- package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
- package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
- package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
- package/src/libs/data-access/gn4/src/spec.yaml +0 -8
- package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
- package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
- package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
- package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +8 -6
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
- package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
- package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
- package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
- package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
- package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
- package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
- package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
- package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
- package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +6 -2
- package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
- package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
- package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -1
- package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
- package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
- package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
- package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
- package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
- package/tailwind.base.css +2 -1
- package/translations/de.json +85 -38
- package/translations/en.json +57 -10
- package/translations/es.json +56 -9
- package/translations/fr.json +57 -10
- package/translations/it.json +56 -9
- package/translations/nl.json +56 -9
- package/translations/pt.json +56 -9
- package/translations/sk.json +56 -9
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
- package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
- package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
- package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
- package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ChangeDetectionStrategy,
|
|
3
|
+
Component,
|
|
4
|
+
Inject,
|
|
5
|
+
Input,
|
|
6
|
+
} from '@angular/core'
|
|
2
7
|
import { Configuration } from '../../../../../../libs/data-access/gn4/src'
|
|
3
8
|
import { MdViewFacade } from '../state'
|
|
4
|
-
import { combineLatest, map } from 'rxjs'
|
|
9
|
+
import { BehaviorSubject, combineLatest, map } from 'rxjs'
|
|
5
10
|
import { GN_UI_VERSION } from '../gn-ui-version.token'
|
|
6
11
|
|
|
7
12
|
@Component({
|
|
@@ -11,35 +16,77 @@ import { GN_UI_VERSION } from '../gn-ui-version.token'
|
|
|
11
16
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
12
17
|
})
|
|
13
18
|
export class DataViewWebComponentComponent {
|
|
19
|
+
viewType$ = new BehaviorSubject<string>('map')
|
|
20
|
+
@Input()
|
|
21
|
+
set viewType(value: string) {
|
|
22
|
+
this.viewType$.next(value)
|
|
23
|
+
}
|
|
14
24
|
webComponentHtml$ = combineLatest(
|
|
25
|
+
this.viewType$,
|
|
15
26
|
this.facade.chartConfig$,
|
|
16
27
|
this.facade.metadata$
|
|
17
28
|
).pipe(
|
|
18
|
-
map(([config, metadata]) => {
|
|
19
|
-
if (
|
|
20
|
-
|
|
29
|
+
map(([viewType, config, metadata]) => {
|
|
30
|
+
if (viewType === 'chart') {
|
|
31
|
+
if (config) {
|
|
32
|
+
const { aggregation, xProperty, yProperty, chartType } = config
|
|
33
|
+
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
34
|
+
this.version
|
|
35
|
+
}/gn-wc.js"></script>
|
|
36
|
+
<gn-dataset-view-chart
|
|
37
|
+
api-url="${new URL(
|
|
38
|
+
this.config.basePath,
|
|
39
|
+
window.location.origin
|
|
40
|
+
).toString()}"
|
|
41
|
+
dataset-id="${metadata.uniqueIdentifier}"
|
|
42
|
+
aggregation="${aggregation}"
|
|
43
|
+
x-property="${xProperty}"
|
|
44
|
+
y-property="${yProperty}"
|
|
45
|
+
chart-type="${chartType}"
|
|
46
|
+
primary-color="#0f4395"
|
|
47
|
+
secondary-color="#8bc832"
|
|
48
|
+
main-color="#555"
|
|
49
|
+
background-color="#fdfbff"
|
|
50
|
+
main-font="'Inter', sans-serif"
|
|
51
|
+
title-font="'DM Serif Display', serif"
|
|
52
|
+
></gn-dataset-view-chart>`
|
|
53
|
+
}
|
|
54
|
+
return ''
|
|
55
|
+
} else if (viewType === 'table') {
|
|
21
56
|
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
22
57
|
this.version
|
|
23
58
|
}/gn-wc.js"></script>
|
|
24
|
-
<gn-dataset-view-
|
|
59
|
+
<gn-dataset-view-table
|
|
60
|
+
api-url="${new URL(
|
|
61
|
+
this.config.basePath,
|
|
62
|
+
window.location.origin
|
|
63
|
+
).toString()}"
|
|
64
|
+
dataset-id="${metadata.uniqueIdentifier}"
|
|
65
|
+
primary-color="#0f4395"
|
|
66
|
+
secondary-color="#8bc832"
|
|
67
|
+
main-color="#555"
|
|
68
|
+
background-color="#fdfbff"
|
|
69
|
+
main-font="'Inter', sans-serif"
|
|
70
|
+
title-font="'DM Serif Display', serif"
|
|
71
|
+
></gn-dataset-view-table>`
|
|
72
|
+
} else {
|
|
73
|
+
return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${
|
|
74
|
+
this.version
|
|
75
|
+
}/gn-wc.js"></script>
|
|
76
|
+
<gn-dataset-view-map
|
|
25
77
|
api-url="${new URL(
|
|
26
78
|
this.config.basePath,
|
|
27
79
|
window.location.origin
|
|
28
80
|
).toString()}"
|
|
29
81
|
dataset-id="${metadata.uniqueIdentifier}"
|
|
30
|
-
aggregation="${aggregation}"
|
|
31
|
-
x-property="${xProperty}"
|
|
32
|
-
y-property="${yProperty}"
|
|
33
|
-
chart-type="${chartType}"
|
|
34
82
|
primary-color="#0f4395"
|
|
35
83
|
secondary-color="#8bc832"
|
|
36
84
|
main-color="#555"
|
|
37
85
|
background-color="#fdfbff"
|
|
38
86
|
main-font="'Inter', sans-serif"
|
|
39
87
|
title-font="'DM Serif Display', serif"
|
|
40
|
-
></gn-dataset-view-
|
|
88
|
+
></gn-dataset-view-map>`
|
|
41
89
|
}
|
|
42
|
-
return ''
|
|
43
90
|
})
|
|
44
91
|
)
|
|
45
92
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core'
|
|
2
2
|
import { select, Store } from '@ngrx/store'
|
|
3
3
|
import {
|
|
4
|
+
catchError,
|
|
4
5
|
defaultIfEmpty,
|
|
5
6
|
filter,
|
|
6
7
|
map,
|
|
7
8
|
mergeMap,
|
|
8
|
-
scan,
|
|
9
9
|
switchMap,
|
|
10
10
|
toArray,
|
|
11
11
|
} from 'rxjs/operators'
|
|
@@ -119,7 +119,11 @@ export class MdViewFacade {
|
|
|
119
119
|
? link
|
|
120
120
|
: null
|
|
121
121
|
}),
|
|
122
|
-
defaultIfEmpty(null)
|
|
122
|
+
defaultIfEmpty(null),
|
|
123
|
+
catchError((e) => {
|
|
124
|
+
console.error(e)
|
|
125
|
+
return of(null)
|
|
126
|
+
})
|
|
123
127
|
)
|
|
124
128
|
} else {
|
|
125
129
|
return of(link)
|
package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
[selectedRecordsIdentifiers]="selectedRecords$ | async"
|
|
5
5
|
[sortOrder]="sortBy$ | async"
|
|
6
6
|
(recordClick)="handleRecordClick($event)"
|
|
7
|
+
(duplicateRecord)="handleDuplicateRecord($event)"
|
|
7
8
|
(recordsSelectedChange)="handleRecordsSelectedChange($event[0], $event[1])"
|
|
8
9
|
(sortByChange)="handleSortByChange($event[0], $event[1])"
|
|
9
10
|
></gn-ui-results-table>
|
|
@@ -16,6 +16,7 @@ import { CommonModule } from '@angular/common'
|
|
|
16
16
|
})
|
|
17
17
|
export class ResultsTableContainerComponent {
|
|
18
18
|
@Output() recordClick = new EventEmitter<CatalogRecord>()
|
|
19
|
+
@Output() duplicateRecord = new EventEmitter<CatalogRecord>()
|
|
19
20
|
|
|
20
21
|
records$ = this.searchFacade.results$
|
|
21
22
|
selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$
|
|
@@ -35,6 +36,10 @@ export class ResultsTableContainerComponent {
|
|
|
35
36
|
this.recordClick.emit(item as CatalogRecord)
|
|
36
37
|
}
|
|
37
38
|
|
|
39
|
+
handleDuplicateRecord(item: unknown) {
|
|
40
|
+
this.duplicateRecord.emit(item as CatalogRecord)
|
|
41
|
+
}
|
|
42
|
+
|
|
38
43
|
handleSortByChange(col: string, order: 'asc' | 'desc') {
|
|
39
44
|
this.searchService.setSortBy([order, col])
|
|
40
45
|
}
|
|
@@ -25,19 +25,21 @@ marker('search.filters.keyword')
|
|
|
25
25
|
marker('search.filters.isSpatial')
|
|
26
26
|
marker('search.filters.license')
|
|
27
27
|
marker('search.filters.publicationYear')
|
|
28
|
-
marker('search.filters.
|
|
28
|
+
marker('search.filters.organization')
|
|
29
29
|
marker('search.filters.representationType')
|
|
30
30
|
marker('search.filters.resourceType')
|
|
31
31
|
marker('search.filters.standard')
|
|
32
32
|
marker('search.filters.topic')
|
|
33
33
|
marker('search.filters.contact')
|
|
34
|
+
marker('search.filters.producerOrg')
|
|
35
|
+
marker('search.filters.publisherOrg')
|
|
34
36
|
|
|
35
37
|
@Injectable({
|
|
36
38
|
providedIn: 'root',
|
|
37
39
|
})
|
|
38
40
|
export class FieldsService {
|
|
39
41
|
protected fields = {
|
|
40
|
-
|
|
42
|
+
organization: new OrganizationSearchField(this.injector),
|
|
41
43
|
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
42
44
|
resourceType: new TranslatedSearchField(
|
|
43
45
|
'resourceType',
|
|
@@ -70,6 +72,18 @@ export class FieldsService {
|
|
|
70
72
|
q: new FullTextSearchField(),
|
|
71
73
|
license: new LicenseSearchField(this.injector),
|
|
72
74
|
owner: new OwnerSearchField(this.injector),
|
|
75
|
+
producerOrg: new MultilingualSearchField(
|
|
76
|
+
'originatorOrgForResourceObject',
|
|
77
|
+
this.injector,
|
|
78
|
+
'asc',
|
|
79
|
+
'key'
|
|
80
|
+
),
|
|
81
|
+
publisherOrg: new MultilingualSearchField(
|
|
82
|
+
'distributorOrgForResourceObject',
|
|
83
|
+
this.injector,
|
|
84
|
+
'asc',
|
|
85
|
+
'key'
|
|
86
|
+
),
|
|
73
87
|
} as Record<string, AbstractSearchField>
|
|
74
88
|
|
|
75
89
|
get supportedFields() {
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
<div
|
|
2
|
-
class="group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden"
|
|
3
|
-
[ngClass]="{ 'cursor-pointer': displayApiFormButton }"
|
|
4
|
-
(click)="openRecordApiFormPanel()"
|
|
2
|
+
class="group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default"
|
|
5
3
|
>
|
|
6
4
|
<div
|
|
7
5
|
class="font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]"
|
|
@@ -17,35 +15,37 @@
|
|
|
17
15
|
}"
|
|
18
16
|
>{{ link.accessServiceProtocol }}</span
|
|
19
17
|
>
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
[ngClass]="{
|
|
30
|
-
'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':
|
|
31
|
-
displayText
|
|
32
|
-
}"
|
|
33
|
-
mat-raised-button
|
|
34
|
-
[matTooltip]="
|
|
35
|
-
!currentlyActive
|
|
36
|
-
? ('record.metadata.api.form.openForm' | translate)
|
|
37
|
-
: ('record.metadata.api.form.closeForm' | translate)
|
|
38
|
-
"
|
|
39
|
-
matTooltipPosition="above"
|
|
40
|
-
>
|
|
41
|
-
<mat-icon
|
|
42
|
-
class="material-symbols-outlined pointer-events-none align-middle card-icon"
|
|
18
|
+
<div class="flex flex-row gap-2 items-center">
|
|
19
|
+
<gn-ui-copy-text-button
|
|
20
|
+
[text]="link.url"
|
|
21
|
+
[tooltipText]="'tooltip.url.copy' | translate"
|
|
22
|
+
[displayText]="false"
|
|
23
|
+
></gn-ui-copy-text-button>
|
|
24
|
+
<button
|
|
25
|
+
*ngIf="displayApiFormButton"
|
|
26
|
+
type="button"
|
|
43
27
|
[ngClass]="{
|
|
44
|
-
'
|
|
28
|
+
'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':
|
|
29
|
+
displayText
|
|
45
30
|
}"
|
|
46
|
-
|
|
31
|
+
mat-raised-button
|
|
32
|
+
[matTooltip]="
|
|
33
|
+
!currentlyActive
|
|
34
|
+
? ('record.metadata.api.form.openForm' | translate)
|
|
35
|
+
: ('record.metadata.api.form.closeForm' | translate)
|
|
36
|
+
"
|
|
37
|
+
matTooltipPosition="above"
|
|
38
|
+
(click)="openRecordApiFormPanel()"
|
|
47
39
|
>
|
|
48
|
-
|
|
40
|
+
<mat-icon
|
|
41
|
+
class="material-symbols-outlined pointer-events-none align-middle card-icon"
|
|
42
|
+
[ngClass]="{
|
|
43
|
+
'text-secondary opacity-100': currentlyActive
|
|
44
|
+
}"
|
|
45
|
+
>more_horiz</mat-icon
|
|
46
|
+
>
|
|
47
|
+
</button>
|
|
48
|
+
</div>
|
|
49
49
|
</div>
|
|
50
50
|
</div>
|
|
51
51
|
</div>
|
|
@@ -10,7 +10,7 @@ import { DownloadItemComponent } from './download-item/download-item.component'
|
|
|
10
10
|
import { DownloadsListComponent } from './downloads-list/downloads-list.component'
|
|
11
11
|
import { ApiCardComponent } from './api-card/api-card.component'
|
|
12
12
|
import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
|
|
13
|
-
import { UiLayoutModule } from '../../../../../libs/ui/layout/src'
|
|
13
|
+
import { MaxLinesComponent, UiLayoutModule } from '../../../../../libs/ui/layout/src'
|
|
14
14
|
import { TranslateModule } from '@ngx-translate/core'
|
|
15
15
|
import { RelatedRecordCardComponent } from './related-record-card/related-record-card.component'
|
|
16
16
|
import { MetadataContactComponent } from './metadata-contact/metadata-contact.component'
|
|
@@ -49,6 +49,7 @@ import { TimeSincePipe } from './user-feedback-item/time-since.pipe'
|
|
|
49
49
|
ThumbnailComponent,
|
|
50
50
|
TimeSincePipe,
|
|
51
51
|
BadgeComponent,
|
|
52
|
+
MaxLinesComponent,
|
|
52
53
|
],
|
|
53
54
|
declarations: [
|
|
54
55
|
MetadataInfoComponent,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
--mat-standard-button-toggle-height: 32px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.mat-button-toggle-group-appearance-standard {
|
|
6
|
+
background-color: var(--color-gray-200);
|
|
7
|
+
padding: 4px;
|
|
8
|
+
display: flex;
|
|
9
|
+
gap: 4px;
|
|
10
|
+
border-radius: 8px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.mat-button-toggle-appearance-standard {
|
|
14
|
+
color: var(--color-main);
|
|
15
|
+
background-color: var(--color-gray-200);
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
border-left: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.mat-button-toggle-appearance-standard.mat-button-toggle-checked {
|
|
21
|
+
background-color: var(--color-main);
|
|
22
|
+
color: var(--color-primary-white);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
button.mat-button-toggle-button.mat-focus-indicator.mat-button-toggle-label-content {
|
|
26
|
+
line-height: 32px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.mat-button-toggle-label-content {
|
|
30
|
+
line-height: 32px;
|
|
31
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<mat-button-toggle-group
|
|
2
|
+
#group="matButtonToggleGroup"
|
|
3
|
+
multiple="false"
|
|
4
|
+
class="flex w-full"
|
|
5
|
+
>
|
|
6
|
+
<mat-button-toggle
|
|
7
|
+
*ngFor="let option of options"
|
|
8
|
+
[aria-label]="option.label"
|
|
9
|
+
[value]="option.value"
|
|
10
|
+
[checked]="option.checked"
|
|
11
|
+
(change)="onChange(option)"
|
|
12
|
+
[class]="extraClasses"
|
|
13
|
+
>{{ option.label }}</mat-button-toggle
|
|
14
|
+
>
|
|
15
|
+
</mat-button-toggle-group>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common'
|
|
2
|
+
import {
|
|
3
|
+
ChangeDetectionStrategy,
|
|
4
|
+
Component,
|
|
5
|
+
EventEmitter,
|
|
6
|
+
Input,
|
|
7
|
+
Output,
|
|
8
|
+
} from '@angular/core'
|
|
9
|
+
import { MatButtonToggleModule } from '@angular/material/button-toggle'
|
|
10
|
+
|
|
11
|
+
export type SwitchToggleOption = {
|
|
12
|
+
label: string
|
|
13
|
+
value: string
|
|
14
|
+
checked: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'gn-ui-switch-toggle',
|
|
19
|
+
templateUrl: './switch-toggle.component.html',
|
|
20
|
+
styleUrls: ['./switch-toggle.component.css'],
|
|
21
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
22
|
+
standalone: true,
|
|
23
|
+
imports: [MatButtonToggleModule, CommonModule],
|
|
24
|
+
})
|
|
25
|
+
export class SwitchToggleComponent {
|
|
26
|
+
@Input() options: SwitchToggleOption[]
|
|
27
|
+
@Input() ariaLabel? = ''
|
|
28
|
+
@Input() extraClasses? = ''
|
|
29
|
+
@Output() selectedValue = new EventEmitter<SwitchToggleOption>()
|
|
30
|
+
|
|
31
|
+
onChange(selectedOption: SwitchToggleOption) {
|
|
32
|
+
this.options.find(
|
|
33
|
+
(option) => option.value === selectedOption.value
|
|
34
|
+
).checked = true
|
|
35
|
+
|
|
36
|
+
this.selectedValue.emit(selectedOption)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<gn-ui-button
|
|
2
|
+
type="outline"
|
|
3
|
+
[matMenuTriggerFor]="menu"
|
|
4
|
+
(buttonClick)="openMenu()"
|
|
5
|
+
data-test="record-menu-button"
|
|
6
|
+
>
|
|
7
|
+
<mat-icon class="material-symbols-outlined">more_vert</mat-icon>
|
|
8
|
+
</gn-ui-button>
|
|
9
|
+
<mat-menu #menu="matMenu">
|
|
10
|
+
<button
|
|
11
|
+
mat-menu-item
|
|
12
|
+
(click)="duplicate.emit()"
|
|
13
|
+
data-test="record-menu-duplicate-button"
|
|
14
|
+
>
|
|
15
|
+
<span translate>record.action.duplicate</span>
|
|
16
|
+
</button>
|
|
17
|
+
</mat-menu>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, EventEmitter, Output, ViewChild } from '@angular/core'
|
|
2
|
+
import { MatIconModule } from '@angular/material/icon'
|
|
3
|
+
import { MatMenuModule, MatMenuTrigger } from '@angular/material/menu'
|
|
4
|
+
import { ButtonComponent } from '../../../../../../../libs/ui/inputs/src'
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core'
|
|
6
|
+
|
|
7
|
+
@Component({
|
|
8
|
+
selector: 'gn-ui-action-menu',
|
|
9
|
+
templateUrl: './action-menu.component.html',
|
|
10
|
+
styleUrls: ['./action-menu.component.css'],
|
|
11
|
+
standalone: true,
|
|
12
|
+
imports: [MatIconModule, ButtonComponent, MatMenuModule, TranslateModule],
|
|
13
|
+
})
|
|
14
|
+
export class ActionMenuComponent {
|
|
15
|
+
@Output() duplicate = new EventEmitter<void>()
|
|
16
|
+
|
|
17
|
+
@ViewChild(MatMenuTrigger) trigger: MatMenuTrigger
|
|
18
|
+
|
|
19
|
+
openMenu() {
|
|
20
|
+
this.trigger.openMenu()
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -120,4 +120,13 @@
|
|
|
120
120
|
{{ dateToString(item.recordUpdated) }}
|
|
121
121
|
</ng-template>
|
|
122
122
|
</gn-ui-interactive-table-column>
|
|
123
|
+
|
|
124
|
+
<!-- ACTION MENU COLUMN -->
|
|
125
|
+
<gn-ui-interactive-table-column>
|
|
126
|
+
<ng-template #header> </ng-template>
|
|
127
|
+
<ng-template #cell let-item>
|
|
128
|
+
<gn-ui-action-menu (duplicate)="handleDuplicate(item)">
|
|
129
|
+
</gn-ui-action-menu>
|
|
130
|
+
</ng-template>
|
|
131
|
+
</gn-ui-interactive-table-column>
|
|
123
132
|
</gn-ui-interactive-table>
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommonModule } from '@angular/common'
|
|
2
|
+
import {
|
|
3
|
+
Component,
|
|
4
|
+
EventEmitter,
|
|
5
|
+
Input,
|
|
6
|
+
Output,
|
|
7
|
+
ViewChild,
|
|
8
|
+
} from '@angular/core'
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon'
|
|
10
|
+
import { MatMenuModule, MatMenuTrigger } from '@angular/material/menu'
|
|
2
11
|
import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
3
12
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
getFormatPriority,
|
|
8
|
-
} from '../../../../../../libs/util/shared/src'
|
|
13
|
+
FieldSort,
|
|
14
|
+
SortByField,
|
|
15
|
+
} from '../../../../../../libs/common/domain/src/lib/model/search'
|
|
9
16
|
import { BadgeComponent, UiInputsModule } from '../../../../../../libs/ui/inputs/src'
|
|
10
17
|
import {
|
|
11
18
|
InteractiveTableColumnComponent,
|
|
12
19
|
InteractiveTableComponent,
|
|
13
20
|
} 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
21
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
FileFormat,
|
|
23
|
+
getBadgeColor,
|
|
24
|
+
getFileFormat,
|
|
25
|
+
getFormatPriority,
|
|
26
|
+
} from '../../../../../../libs/util/shared/src'
|
|
27
|
+
import { TranslateModule } from '@ngx-translate/core'
|
|
28
|
+
import { ActionMenuComponent } from './action-menu/action-menu.component'
|
|
21
29
|
|
|
22
30
|
@Component({
|
|
23
31
|
selector: 'gn-ui-results-table',
|
|
@@ -32,6 +40,7 @@ import {
|
|
|
32
40
|
MatIconModule,
|
|
33
41
|
TranslateModule,
|
|
34
42
|
BadgeComponent,
|
|
43
|
+
ActionMenuComponent,
|
|
35
44
|
],
|
|
36
45
|
})
|
|
37
46
|
export class ResultsTableComponent {
|
|
@@ -43,6 +52,7 @@ export class ResultsTableComponent {
|
|
|
43
52
|
// emits the column (field) as well as the order
|
|
44
53
|
@Output() sortByChange = new EventEmitter<[string, 'asc' | 'desc']>()
|
|
45
54
|
@Output() recordClick = new EventEmitter<CatalogRecord>()
|
|
55
|
+
@Output() duplicateRecord = new EventEmitter<CatalogRecord>()
|
|
46
56
|
@Output() recordsSelectedChange = new EventEmitter<
|
|
47
57
|
[CatalogRecord[], boolean]
|
|
48
58
|
>()
|
|
@@ -89,6 +99,10 @@ export class ResultsTableComponent {
|
|
|
89
99
|
this.recordClick.emit(item as CatalogRecord)
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
handleDuplicate(item: unknown) {
|
|
103
|
+
this.duplicateRecord.emit(item as CatalogRecord)
|
|
104
|
+
}
|
|
105
|
+
|
|
92
106
|
setSortBy(col: string, order: 'asc' | 'desc') {
|
|
93
107
|
this.sortByChange.emit([col, order])
|
|
94
108
|
}
|
package/tailwind.base.css
CHANGED
|
@@ -115,7 +115,8 @@
|
|
|
115
115
|
--padding: var(--gn-ui-badge-padding, 0.375em 0.75em);
|
|
116
116
|
--text-color: var(--gn-ui-badge-text-color, var(--color-gray-50));
|
|
117
117
|
--background-color: var(--gn-ui-badge-background-color, black);
|
|
118
|
-
|
|
118
|
+
--opacity: var(--gn-ui-badge-opacity, 0.7);
|
|
119
|
+
@apply inline-block opacity-[--opacity] p-[--padding] rounded-[--rounded]
|
|
119
120
|
font-medium text-[length:0.875em] leading-none text-[color:--text-color] bg-[color:--background-color];
|
|
120
121
|
}
|
|
121
122
|
/* makes sure icons will not make the badges grow vertically; also make size proportional */
|