geonetwork-ui 2.3.0-dev.f54cc11e → 2.3.0-dev.ff2a9db7
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/lib/iso19139/read-parts.mjs +2 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -7
- package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +1 -1
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +35 -2
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +104 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +8 -3
- package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +8 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +73 -20
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +29 -8
- package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +1 -1
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +4 -3
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +1 -1
- package/esm2022/libs/feature/search/src/index.mjs +2 -1
- package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +1 -1
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +1 -1
- package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -2
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +16 -3
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +99 -36
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +1 -6
- package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +3 -5
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +4 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +5 -3
- package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +29 -0
- package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +5 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -5
- package/esm2022/libs/ui/layout/src/index.mjs +2 -1
- package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +76 -0
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +42 -18
- package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +3 -8
- package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +2 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +22 -1
- package/esm2022/translations/de.json +11 -14
- package/esm2022/translations/en.json +11 -14
- package/esm2022/translations/es.json +11 -14
- package/esm2022/translations/fr.json +11 -14
- package/esm2022/translations/it.json +11 -14
- package/esm2022/translations/nl.json +11 -14
- package/esm2022/translations/pt.json +11 -14
- package/fesm2022/geonetwork-ui.mjs +642 -239
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +3 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +21 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -0
- 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/fields.config.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +10 -5
- package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.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/index.d.ts +1 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts +3 -3
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +24 -4
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +29 -30
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts +1 -2
- package/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts +2 -1
- package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +12 -0
- package/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts +2 -1
- package/libs/ui/inputs/src/lib/text-input/text-input.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -27
- package/libs/ui/layout/src/index.d.ts +1 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +25 -0
- package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts +13 -6
- package/libs/ui/layout/src/lib/carousel/carousel.component.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/ui-layout.module.d.ts +4 -5
- package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +18 -0
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +1 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +16 -10
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +8 -0
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +51 -1
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.css +0 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +14 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +143 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
- package/src/libs/feature/editor/src/lib/fields.config.ts +7 -0
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.css +7 -0
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +32 -18
- package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +72 -17
- package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +1 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +26 -8
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +0 -1
- package/src/libs/feature/search/src/index.ts +1 -0
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -2
- package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +2 -1
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +1 -1
- package/src/libs/ui/elements/src/lib/link-card/link-card.component.html +38 -20
- package/src/libs/ui/elements/src/lib/link-card/link-card.component.ts +12 -0
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +26 -10
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +126 -30
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -2
- package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
- package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +0 -1
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.ts +3 -0
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +1 -0
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.css +6 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.html +26 -0
- package/src/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.ts +32 -0
- package/src/libs/ui/inputs/src/lib/text-input/text-input.component.html +1 -0
- package/src/libs/ui/inputs/src/lib/text-input/text-input.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +1 -1
- package/src/libs/ui/layout/src/index.ts +1 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +23 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +20 -0
- package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +84 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +8 -4
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +4 -4
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.ts +45 -15
- package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -2
- package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +1 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +21 -0
- package/translations/de.json +11 -14
- package/translations/en.json +11 -14
- package/translations/es.json +11 -14
- package/translations/fr.json +11 -14
- package/translations/it.json +11 -14
- package/translations/nl.json +11 -14
- package/translations/pt.json +11 -14
- package/translations/sk.json +11 -14
|
@@ -21,7 +21,6 @@ import { UserModel } from '../../../../../../libs/common/domain/src/lib/model/us
|
|
|
21
21
|
export class UserFeedbackItemComponent implements OnInit {
|
|
22
22
|
@Input() userFeedbackParent: UserFeedbackViewModel
|
|
23
23
|
@Input() userFeedBacksAnswers: UserFeedbackViewModel[]
|
|
24
|
-
@Input() isActiveUserEditor: boolean
|
|
25
24
|
@Input() activeUser: UserModel
|
|
26
25
|
@Input() isLastComment: boolean
|
|
27
26
|
@Input() isAddUserFeedbackLoading: boolean
|
|
@@ -19,3 +19,4 @@ export * from './lib/text-area/text-area.component'
|
|
|
19
19
|
export * from './lib/text-input/text-input.component'
|
|
20
20
|
export * from './lib/ui-inputs.module'
|
|
21
21
|
export * from './lib/viewport-intersector/viewport-intersector.component'
|
|
22
|
+
export * from './lib/previous-next-buttons/previous-next-buttons.component'
|
|
@@ -5,12 +5,15 @@ import {
|
|
|
5
5
|
Input,
|
|
6
6
|
Output,
|
|
7
7
|
} from '@angular/core'
|
|
8
|
+
import { FormsModule } from '@angular/forms'
|
|
8
9
|
|
|
9
10
|
@Component({
|
|
10
11
|
selector: 'gn-ui-check-toggle',
|
|
11
12
|
templateUrl: './check-toggle.component.html',
|
|
12
13
|
styleUrls: ['./check-toggle.component.css'],
|
|
13
14
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [FormsModule],
|
|
14
17
|
})
|
|
15
18
|
export class CheckToggleComponent {
|
|
16
19
|
@Input() title: string
|
|
@@ -48,6 +48,7 @@ export class DropdownSelectorComponent implements OnInit {
|
|
|
48
48
|
@Input() maxRows: number
|
|
49
49
|
@Input() extraBtnClass = ''
|
|
50
50
|
@Input() minWidth = ''
|
|
51
|
+
@Input() disabled: boolean
|
|
51
52
|
@Output() selectValue = new EventEmitter<DropdownChoice['value']>()
|
|
52
53
|
@ViewChild('overlayOrigin') overlayOrigin: CdkOverlayOrigin
|
|
53
54
|
@ViewChild(CdkConnectedOverlay) overlay: CdkConnectedOverlay
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<div class="flex flex-row gap-x-4 items-center">
|
|
2
|
+
<gn-ui-button
|
|
3
|
+
data-test="previousButton"
|
|
4
|
+
[type]="isFirst ? 'default' : 'outline'"
|
|
5
|
+
[disabled]="isFirst"
|
|
6
|
+
(buttonClick)="previousButtonClicked()"
|
|
7
|
+
>
|
|
8
|
+
<mat-icon
|
|
9
|
+
class="material-symbols-outlined text-[14px] text-center pt-[5px]"
|
|
10
|
+
>
|
|
11
|
+
arrow_back
|
|
12
|
+
</mat-icon>
|
|
13
|
+
</gn-ui-button>
|
|
14
|
+
<gn-ui-button
|
|
15
|
+
data-test="nextButton"
|
|
16
|
+
[type]="isLast ? 'default' : 'outline'"
|
|
17
|
+
[disabled]="isLast"
|
|
18
|
+
(buttonClick)="nextButtonClicked()"
|
|
19
|
+
>
|
|
20
|
+
<mat-icon
|
|
21
|
+
class="material-symbols-outlined text-[14px] text-center pt-[5px]"
|
|
22
|
+
>
|
|
23
|
+
arrow_forward
|
|
24
|
+
</mat-icon>
|
|
25
|
+
</gn-ui-button>
|
|
26
|
+
</div>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChangeDetectionStrategy,
|
|
3
|
+
Component,
|
|
4
|
+
EventEmitter,
|
|
5
|
+
Input,
|
|
6
|
+
Output,
|
|
7
|
+
} from '@angular/core'
|
|
8
|
+
import { ButtonComponent } from '../button/button.component'
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon'
|
|
10
|
+
|
|
11
|
+
@Component({
|
|
12
|
+
selector: 'gn-ui-previous-next-buttons',
|
|
13
|
+
templateUrl: './previous-next-buttons.component.html',
|
|
14
|
+
styleUrls: ['./previous-next-buttons.component.css'],
|
|
15
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
+
standalone: true,
|
|
17
|
+
imports: [ButtonComponent, MatIconModule],
|
|
18
|
+
})
|
|
19
|
+
export class PreviousNextButtonsComponent {
|
|
20
|
+
@Input() isFirst: boolean
|
|
21
|
+
@Input() isLast: boolean
|
|
22
|
+
|
|
23
|
+
@Output() directionButtonClicked: EventEmitter<string> = new EventEmitter()
|
|
24
|
+
|
|
25
|
+
previousButtonClicked() {
|
|
26
|
+
this.directionButtonClicked.next('previous')
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
nextButtonClicked() {
|
|
30
|
+
this.directionButtonClicked.next('next')
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -29,6 +29,7 @@ export class TextInputComponent implements AfterViewInit {
|
|
|
29
29
|
@Input() extraClass = ''
|
|
30
30
|
@Input() hint: string
|
|
31
31
|
@Input() required = false
|
|
32
|
+
@Input() disabled: boolean
|
|
32
33
|
rawChange = new Subject<string>()
|
|
33
34
|
@Output() valueChange = this.rawChange.pipe(distinctUntilChanged())
|
|
34
35
|
@ViewChild('input') input
|
|
@@ -44,7 +44,6 @@ import { ImageInputComponent } from './image-input/image-input.component'
|
|
|
44
44
|
StarToggleComponent,
|
|
45
45
|
DropdownMultiselectComponent,
|
|
46
46
|
ViewportIntersectorComponent,
|
|
47
|
-
CheckToggleComponent,
|
|
48
47
|
CopyTextButtonComponent,
|
|
49
48
|
CheckboxComponent,
|
|
50
49
|
SearchInputComponent,
|
|
@@ -73,6 +72,7 @@ import { ImageInputComponent } from './image-input/image-input.component'
|
|
|
73
72
|
ImageInputComponent,
|
|
74
73
|
DropdownSelectorComponent,
|
|
75
74
|
DateRangePickerComponent,
|
|
75
|
+
CheckToggleComponent,
|
|
76
76
|
],
|
|
77
77
|
exports: [
|
|
78
78
|
DropdownSelectorComponent,
|
|
@@ -6,4 +6,5 @@ export * from './lib/form-field-wrapper/form-field-wrapper.component'
|
|
|
6
6
|
export * from './lib/interactive-table/interactive-table-column/interactive-table-column.component'
|
|
7
7
|
export * from './lib/interactive-table/interactive-table.component'
|
|
8
8
|
export * from './lib/sticky-header/sticky-header.component'
|
|
9
|
+
export * from './lib/block-list/block-list.component'
|
|
9
10
|
export * from './lib/ui-layout.module'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
:host .block-list-container ::ng-deep > * {
|
|
2
|
+
flex-shrink: 0;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
:host {
|
|
6
|
+
position: relative;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.list-page-dot {
|
|
10
|
+
width: 6px;
|
|
11
|
+
height: 6px;
|
|
12
|
+
border-radius: 6px;
|
|
13
|
+
position: relative;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.list-page-dot:after {
|
|
17
|
+
content: '';
|
|
18
|
+
position: absolute;
|
|
19
|
+
left: -7px;
|
|
20
|
+
top: -7px;
|
|
21
|
+
width: 20px;
|
|
22
|
+
height: 20px;
|
|
23
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div
|
|
2
|
+
class="block-list-container flex flex-col"
|
|
3
|
+
#blockContainer
|
|
4
|
+
[ngClass]="containerClass"
|
|
5
|
+
[ngStyle]="{ minHeight: minHeight + 'px' }"
|
|
6
|
+
>
|
|
7
|
+
<ng-content></ng-content>
|
|
8
|
+
</div>
|
|
9
|
+
<div
|
|
10
|
+
*ngIf="pagesCount > 1"
|
|
11
|
+
class="absolute flex flex-row justify-center gap-[14px] p-1"
|
|
12
|
+
[ngClass]="paginationContainerClass"
|
|
13
|
+
>
|
|
14
|
+
<button
|
|
15
|
+
*ngFor="let page of pages"
|
|
16
|
+
class="list-page-dot"
|
|
17
|
+
(click)="goToPage(page)"
|
|
18
|
+
[ngClass]="currentPage === page ? 'bg-primary' : 'bg-gray-400'"
|
|
19
|
+
></button>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AfterViewInit,
|
|
3
|
+
ChangeDetectionStrategy,
|
|
4
|
+
ChangeDetectorRef,
|
|
5
|
+
Component,
|
|
6
|
+
ContentChildren,
|
|
7
|
+
ElementRef,
|
|
8
|
+
Input,
|
|
9
|
+
QueryList,
|
|
10
|
+
ViewChild,
|
|
11
|
+
} from '@angular/core'
|
|
12
|
+
import { CommonModule } from '@angular/common'
|
|
13
|
+
|
|
14
|
+
@Component({
|
|
15
|
+
selector: 'gn-ui-block-list',
|
|
16
|
+
templateUrl: './block-list.component.html',
|
|
17
|
+
styleUrls: ['./block-list.component.css'],
|
|
18
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule],
|
|
21
|
+
})
|
|
22
|
+
export class BlockListComponent implements AfterViewInit {
|
|
23
|
+
@Input() pageSize = 5
|
|
24
|
+
@Input() containerClass = ''
|
|
25
|
+
@Input() paginationContainerClass = 'w-full bottom-0 top-auto'
|
|
26
|
+
@ContentChildren('block', { read: ElementRef }) blocks: QueryList<
|
|
27
|
+
ElementRef<HTMLElement>
|
|
28
|
+
>
|
|
29
|
+
@ViewChild('blockContainer') blockContainer: ElementRef<HTMLElement>
|
|
30
|
+
|
|
31
|
+
protected minHeight = 0
|
|
32
|
+
|
|
33
|
+
protected currentPage = 0
|
|
34
|
+
protected get pages() {
|
|
35
|
+
return new Array(this.pagesCount).fill(0).map((_, i) => i)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get isFirstPage() {
|
|
39
|
+
return this.currentPage === 0
|
|
40
|
+
}
|
|
41
|
+
get isLastPage() {
|
|
42
|
+
return this.currentPage === this.pagesCount - 1
|
|
43
|
+
}
|
|
44
|
+
get pagesCount() {
|
|
45
|
+
return this.blocks ? Math.ceil(this.blocks.length / this.pageSize) : 1
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
constructor(private changeDetector: ChangeDetectorRef) {}
|
|
49
|
+
|
|
50
|
+
ngAfterViewInit() {
|
|
51
|
+
this.blocks.changes.subscribe(this.refreshBlocksVisibility)
|
|
52
|
+
this.refreshBlocksVisibility()
|
|
53
|
+
|
|
54
|
+
// we store the first height as the min-height of the list container
|
|
55
|
+
this.minHeight = this.blockContainer.nativeElement.clientHeight
|
|
56
|
+
this.changeDetector.detectChanges()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected refreshBlocksVisibility = () => {
|
|
60
|
+
this.blocks.forEach((block, index) => {
|
|
61
|
+
block.nativeElement.style.display =
|
|
62
|
+
index >= this.currentPage * this.pageSize &&
|
|
63
|
+
index < (this.currentPage + 1) * this.pageSize
|
|
64
|
+
? null
|
|
65
|
+
: 'none'
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public goToPage(index: number) {
|
|
70
|
+
this.currentPage = Math.max(Math.min(index, this.pagesCount - 1), 0)
|
|
71
|
+
this.changeDetector.detectChanges()
|
|
72
|
+
this.refreshBlocksVisibility()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public previousPage() {
|
|
76
|
+
if (this.isFirstPage) return
|
|
77
|
+
this.goToPage(this.currentPage - 1)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public nextPage() {
|
|
81
|
+
if (this.isLastPage) return
|
|
82
|
+
this.goToPage(this.currentPage + 1)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
:host .carousel-container ::ng-deep > * {
|
|
2
2
|
flex-shrink: 0;
|
|
3
3
|
}
|
|
4
|
+
|
|
4
5
|
:host {
|
|
5
6
|
position: relative;
|
|
7
|
+
display: block;
|
|
6
8
|
}
|
|
9
|
+
|
|
7
10
|
.carousel-step-dot {
|
|
8
11
|
width: 6px;
|
|
9
12
|
height: 6px;
|
|
10
13
|
border-radius: 6px;
|
|
11
14
|
position: relative;
|
|
12
15
|
}
|
|
16
|
+
|
|
13
17
|
.carousel-step-dot:after {
|
|
14
18
|
content: '';
|
|
15
19
|
position: absolute;
|
|
16
|
-
left: -
|
|
17
|
-
top: -
|
|
18
|
-
width:
|
|
19
|
-
height:
|
|
20
|
+
left: -7px;
|
|
21
|
+
top: -7px;
|
|
22
|
+
width: 20px;
|
|
23
|
+
height: 20px;
|
|
20
24
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
<div #carouselOverflowContainer class="
|
|
2
|
-
<div class="carousel-container flex
|
|
1
|
+
<div #carouselOverflowContainer class="w-full">
|
|
2
|
+
<div class="carousel-container flex" [ngClass]="containerClass">
|
|
3
3
|
<ng-content></ng-content>
|
|
4
4
|
</div>
|
|
5
5
|
</div>
|
|
6
6
|
<div
|
|
7
7
|
*ngIf="steps.length > 1"
|
|
8
|
-
class="absolute
|
|
8
|
+
class="absolute flex flex-row justify-center gap-[14px] p-1"
|
|
9
9
|
[ngClass]="stepsContainerClass"
|
|
10
10
|
>
|
|
11
11
|
<button
|
|
12
12
|
*ngFor="let step of steps; let i = index"
|
|
13
13
|
class="carousel-step-dot"
|
|
14
14
|
(click)="scrollToStep(i)"
|
|
15
|
-
[ngClass]="
|
|
15
|
+
[ngClass]="currentStep === i ? 'bg-primary' : 'bg-gray-400'"
|
|
16
16
|
></button>
|
|
17
17
|
</div>
|
|
@@ -4,25 +4,49 @@ import {
|
|
|
4
4
|
ChangeDetectorRef,
|
|
5
5
|
Component,
|
|
6
6
|
ElementRef,
|
|
7
|
+
EventEmitter,
|
|
7
8
|
Input,
|
|
9
|
+
Output,
|
|
8
10
|
ViewChild,
|
|
9
11
|
} from '@angular/core'
|
|
10
12
|
import EmblaCarousel, { EmblaCarouselType } from 'embla-carousel'
|
|
13
|
+
import { CommonModule } from '@angular/common'
|
|
11
14
|
|
|
12
15
|
@Component({
|
|
13
16
|
selector: 'gn-ui-carousel',
|
|
14
17
|
templateUrl: './carousel.component.html',
|
|
15
18
|
styleUrls: ['./carousel.component.css'],
|
|
16
19
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [CommonModule],
|
|
17
22
|
})
|
|
18
23
|
export class CarouselComponent implements AfterViewInit {
|
|
24
|
+
@ViewChild('carouselOverflowContainer') carouselOverflowContainer: ElementRef
|
|
25
|
+
|
|
19
26
|
@Input() containerClass = ''
|
|
20
|
-
@Input() stepsContainerClass = ''
|
|
21
|
-
@
|
|
22
|
-
|
|
23
|
-
steps: number[] = []
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
@Input() stepsContainerClass = 'w-full bottom-0 top-auto'
|
|
28
|
+
@Output() currentStepChange = new EventEmitter<number>()
|
|
29
|
+
|
|
30
|
+
protected steps: number[] = []
|
|
31
|
+
protected emblaApi: EmblaCarouselType
|
|
32
|
+
protected currentStep = 0
|
|
33
|
+
|
|
34
|
+
protected refreshSteps = () => {
|
|
35
|
+
this.steps = this.emblaApi.scrollSnapList()
|
|
36
|
+
this.currentStep = this.emblaApi.selectedScrollSnap()
|
|
37
|
+
this.currentStepChange.emit(this.currentStep)
|
|
38
|
+
this.changeDetector.detectChanges()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
get isFirstStep() {
|
|
42
|
+
return this.currentStep === 0
|
|
43
|
+
}
|
|
44
|
+
get isLastStep() {
|
|
45
|
+
return this.currentStep === this.steps.length - 1
|
|
46
|
+
}
|
|
47
|
+
get stepsCount() {
|
|
48
|
+
return this.steps.length
|
|
49
|
+
}
|
|
26
50
|
|
|
27
51
|
constructor(private changeDetector: ChangeDetectorRef) {}
|
|
28
52
|
|
|
@@ -33,18 +57,24 @@ export class CarouselComponent implements AfterViewInit {
|
|
|
33
57
|
duration: 15,
|
|
34
58
|
}
|
|
35
59
|
)
|
|
36
|
-
|
|
37
|
-
this.steps = this.emblaApi.scrollSnapList()
|
|
38
|
-
this.selectedStep = this.emblaApi.selectedScrollSnap()
|
|
39
|
-
this.changeDetector.detectChanges()
|
|
40
|
-
}
|
|
60
|
+
|
|
41
61
|
this.emblaApi
|
|
42
|
-
.on('init', refreshSteps)
|
|
43
|
-
.on('reInit', refreshSteps)
|
|
44
|
-
.on('select', refreshSteps)
|
|
62
|
+
.on('init', this.refreshSteps)
|
|
63
|
+
.on('reInit', this.refreshSteps)
|
|
64
|
+
.on('select', this.refreshSteps)
|
|
45
65
|
}
|
|
46
66
|
|
|
47
|
-
scrollToStep(stepIndex: number) {
|
|
67
|
+
public scrollToStep(stepIndex: number) {
|
|
48
68
|
this.emblaApi.scrollTo(stepIndex)
|
|
49
69
|
}
|
|
70
|
+
|
|
71
|
+
public slideToPrevious() {
|
|
72
|
+
if (this.isFirstStep) return
|
|
73
|
+
this.emblaApi.scrollPrev()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public slideToNext() {
|
|
77
|
+
if (this.isLastStep) return
|
|
78
|
+
this.emblaApi.scrollNext()
|
|
79
|
+
}
|
|
50
80
|
}
|
|
@@ -15,14 +15,12 @@ import { CarouselComponent } from './carousel/carousel.component'
|
|
|
15
15
|
StickyHeaderComponent,
|
|
16
16
|
AnchorLinkDirective,
|
|
17
17
|
ExpandablePanelButtonComponent,
|
|
18
|
-
CarouselComponent,
|
|
19
18
|
],
|
|
20
19
|
exports: [
|
|
21
20
|
ExpandablePanelComponent,
|
|
22
21
|
StickyHeaderComponent,
|
|
23
22
|
AnchorLinkDirective,
|
|
24
23
|
ExpandablePanelButtonComponent,
|
|
25
|
-
CarouselComponent,
|
|
26
24
|
],
|
|
27
25
|
})
|
|
28
26
|
export class UiLayoutModule {}
|
|
@@ -94,6 +94,27 @@ export const FORMATS = {
|
|
|
94
94
|
color: '#de630b',
|
|
95
95
|
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
96
96
|
},
|
|
97
|
+
html: {
|
|
98
|
+
extensions: ['html', 'htm'],
|
|
99
|
+
priority: 12,
|
|
100
|
+
color: '#f2bb3a',
|
|
101
|
+
mimeTypes: ['text/html'],
|
|
102
|
+
},
|
|
103
|
+
fgb: {
|
|
104
|
+
extensions: ['fgb', 'flatgeobuf'],
|
|
105
|
+
priority: 13,
|
|
106
|
+
color: '#f2bb3a',
|
|
107
|
+
mimeTypes: ['application/flatgeobuf'],
|
|
108
|
+
},
|
|
109
|
+
jsonfg: {
|
|
110
|
+
extensions: ['jsonfg', 'jsonfgc'],
|
|
111
|
+
priority: 14,
|
|
112
|
+
color: '#f2bb3a',
|
|
113
|
+
mimeTypes: [
|
|
114
|
+
'application/vnd.ogc.fg+json',
|
|
115
|
+
'application/vnd.ogc.fg+json;compatibility=geojson',
|
|
116
|
+
],
|
|
117
|
+
},
|
|
97
118
|
} as const
|
|
98
119
|
|
|
99
120
|
export type FileFormat = keyof typeof FORMATS
|
package/translations/de.json
CHANGED
|
@@ -156,6 +156,8 @@
|
|
|
156
156
|
"editor.record.form.license.pddl": "",
|
|
157
157
|
"editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
158
158
|
"editor.record.form.resourceUpdated": "",
|
|
159
|
+
"editor.record.form.updateFrequency": "",
|
|
160
|
+
"editor.record.form.updateFrequency.planned": "",
|
|
159
161
|
"editor.record.loadError.body": "",
|
|
160
162
|
"editor.record.loadError.closeMessage": "",
|
|
161
163
|
"editor.record.loadError.title": "",
|
|
@@ -226,6 +228,7 @@
|
|
|
226
228
|
"multiselect.filter.placeholder": "Suche",
|
|
227
229
|
"nav.back": "Zurück",
|
|
228
230
|
"next": "weiter",
|
|
231
|
+
"ogc.unreachable.unknown": "Der Dienst konnte nicht erreicht werden",
|
|
229
232
|
"organisation.filter.placeholder": "Ergebnisse filtern",
|
|
230
233
|
"organisation.sort.sortBy": "Sortieren nach:",
|
|
231
234
|
"organisations.hits.found": "{hits, plural, =0{Keine Organisation gefunden} other{{hits} von {total} Organisationen angezeigt}}",
|
|
@@ -290,14 +293,6 @@
|
|
|
290
293
|
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
291
294
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
292
295
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
293
|
-
"record.metadata.userFeedbacks": "",
|
|
294
|
-
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
295
|
-
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
296
|
-
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
297
|
-
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
298
|
-
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
299
|
-
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
300
|
-
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
301
296
|
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
302
297
|
"record.metadata.status": "Status",
|
|
303
298
|
"record.metadata.technical": "Technische Informationen",
|
|
@@ -312,6 +307,14 @@
|
|
|
312
307
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
313
308
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
314
309
|
"record.metadata.usage": "Nutzung und Einschränkungen",
|
|
310
|
+
"record.metadata.userFeedbacks": "",
|
|
311
|
+
"record.metadata.userFeedbacks.anonymousUser": "",
|
|
312
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "",
|
|
313
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "",
|
|
314
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "",
|
|
315
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "",
|
|
316
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "",
|
|
317
|
+
"record.metadata.userFeedbacks.sortSelector.label": "",
|
|
315
318
|
"record.more.details": "Weitere Details",
|
|
316
319
|
"record.tab.chart": "Diagramm",
|
|
317
320
|
"record.tab.data": "Tabelle",
|
|
@@ -371,12 +374,6 @@
|
|
|
371
374
|
"table.loading.data": "Daten werden geladen...",
|
|
372
375
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
373
376
|
"table.select.data": "Datenquelle",
|
|
374
|
-
"timeSincePipe.lessThanAMinute": "",
|
|
375
|
-
"timeSincePipe.minutesAgo": "",
|
|
376
|
-
"timeSincePipe.hoursAgo": "",
|
|
377
|
-
"timeSincePipe.daysAgo": "",
|
|
378
|
-
"timeSincePipe.monthsAgo": "",
|
|
379
|
-
"timeSincePipe.yearsAgo": "",
|
|
380
377
|
"tooltip.html.copy": "HTML kopieren",
|
|
381
378
|
"tooltip.id.copy": "Eindeutige Kennung kopieren",
|
|
382
379
|
"tooltip.url.copy": "URL kopieren",
|
package/translations/en.json
CHANGED
|
@@ -156,6 +156,8 @@
|
|
|
156
156
|
"editor.record.form.license.pddl": "Open Data Commons PDDL",
|
|
157
157
|
"editor.record.form.license.unknown": "Unknown or absent",
|
|
158
158
|
"editor.record.form.resourceUpdated": "Last update date",
|
|
159
|
+
"editor.record.form.updateFrequency": "Update frequency",
|
|
160
|
+
"editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
|
|
159
161
|
"editor.record.loadError.body": "The record could not be loaded:",
|
|
160
162
|
"editor.record.loadError.closeMessage": "Understood",
|
|
161
163
|
"editor.record.loadError.title": "Error loading record",
|
|
@@ -226,6 +228,7 @@
|
|
|
226
228
|
"multiselect.filter.placeholder": "Search",
|
|
227
229
|
"nav.back": "Back",
|
|
228
230
|
"next": "next",
|
|
231
|
+
"ogc.unreachable.unknown": "The service could not be reached",
|
|
229
232
|
"organisation.filter.placeholder": "Filter results",
|
|
230
233
|
"organisation.sort.sortBy": "Sort by:",
|
|
231
234
|
"organisations.hits.found": "{hits, plural, =0{No organizations found} other{{hits} out of {total} organizations shown}}",
|
|
@@ -290,14 +293,6 @@
|
|
|
290
293
|
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
291
294
|
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
292
295
|
"record.metadata.related": "Related records",
|
|
293
|
-
"record.metadata.userFeedbacks": "Questions / Answers",
|
|
294
|
-
"record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
|
|
295
|
-
"record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
|
|
296
|
-
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
|
|
297
|
-
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
|
|
298
|
-
"record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
|
|
299
|
-
"record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
|
|
300
|
-
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
|
|
301
296
|
"record.metadata.sheet": "Original metadata",
|
|
302
297
|
"record.metadata.status": "Status",
|
|
303
298
|
"record.metadata.technical": "Technical information",
|
|
@@ -312,6 +307,14 @@
|
|
|
312
307
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
313
308
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
314
309
|
"record.metadata.usage": "License and Conditions",
|
|
310
|
+
"record.metadata.userFeedbacks": "Questions / Answers",
|
|
311
|
+
"record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
|
|
312
|
+
"record.metadata.userFeedbacks.newAnswer.buttonTitle": "Publish",
|
|
313
|
+
"record.metadata.userFeedbacks.newAnswer.placeholder": "Answer...",
|
|
314
|
+
"record.metadata.userFeedbacks.newComment.placeholder": "Write your comment here...",
|
|
315
|
+
"record.metadata.userFeedbacks.sortSelector.choices.newestFirst": "Newest comments first",
|
|
316
|
+
"record.metadata.userFeedbacks.sortSelector.choices.oldestFirst": "Oldest comments first",
|
|
317
|
+
"record.metadata.userFeedbacks.sortSelector.label": "Sort by ...",
|
|
315
318
|
"record.more.details": "Read more",
|
|
316
319
|
"record.tab.chart": "Chart",
|
|
317
320
|
"record.tab.data": "Table",
|
|
@@ -371,12 +374,6 @@
|
|
|
371
374
|
"table.loading.data": "Loading data...",
|
|
372
375
|
"table.object.count": "objects in this dataset",
|
|
373
376
|
"table.select.data": "Data source",
|
|
374
|
-
"timeSincePipe.lessThanAMinute": "Less than a minute ago",
|
|
375
|
-
"timeSincePipe.minutesAgo": "{value} minute{s} ago",
|
|
376
|
-
"timeSincePipe.hoursAgo": "{value} hour{s} ago",
|
|
377
|
-
"timeSincePipe.daysAgo": "{value} day{s} ago",
|
|
378
|
-
"timeSincePipe.monthsAgo": "{value} month{s} ago",
|
|
379
|
-
"timeSincePipe.yearsAgo": "{value} year{s} ago",
|
|
380
377
|
"tooltip.html.copy": "Copy HTML",
|
|
381
378
|
"tooltip.id.copy": "Copy unique identifier",
|
|
382
379
|
"tooltip.url.copy": "Copy URL",
|