@smartsoft001-mobilems/objects-shell-angular 2.127.0 → 2.129.0
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/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { TemplateRef, ModuleWithProviders, Signal, AfterViewInit, WritableSignal, OnInit, ResourceRef } from '@angular/core';
|
|
3
3
|
import * as _smartsoft001_crud_shell_angular from '@smartsoft001/crud-shell-angular';
|
|
4
|
-
import { ICrudModuleOptionsWithoutRoutng, CrudFacade, State as State$1, CrudListPageBaseComponent, CrudItemPageBaseComponent, CrudService, ICrudFilter } from '@smartsoft001/crud-shell-angular';
|
|
4
|
+
import { ICrudModuleOptionsWithoutRoutng, CrudFacade, State as State$1, CrudListPageBaseComponent, CrudItemPageBaseComponent, CrudService, ICrudFilter, ICrudFilterQueryItem } from '@smartsoft001/crud-shell-angular';
|
|
5
5
|
import { IEntity } from '@smartsoft001/domain-core';
|
|
6
|
-
import * as
|
|
7
|
-
import { FiltersBaseComponent, CrudBaseService, SeoService, TranslationService, IDictionaryPage, ICatalogOptions, ICatalog, ISeoMetadata, INamedEntrySource, INamedEntryParts } from '@smartsoft001-mobilems/angular';
|
|
6
|
+
import * as _smartsoft001_mobilems_angular from '@smartsoft001-mobilems/angular';
|
|
7
|
+
import { FiltersBaseComponent, CrudBaseService, SeoService, TranslationService, IDictionaryPage, ICatalogOptions, ICatalog, ISeoMetadata, INamedEntrySource, INamedEntryParts, FilterType, IDictionaryEntry, FiltersContext, ThemeTag, ShareLinkBaseComponent } from '@smartsoft001-mobilems/angular';
|
|
8
8
|
import * as i1 from '@angular/common';
|
|
9
9
|
import { MsObject } from '@smartsoft001-mobilems/objects-domain';
|
|
10
10
|
import * as dist_packages_objects_domain_src from 'dist/packages/objects/domain/src';
|
|
@@ -14,48 +14,49 @@ import * as _ngrx_store from '@ngrx/store';
|
|
|
14
14
|
import { Action } from '@ngrx/store';
|
|
15
15
|
import { MsFile } from '@smartsoft001-mobilems/models';
|
|
16
16
|
import { ListMode } from '@smartsoft001/angular';
|
|
17
|
+
import * as rxjs from 'rxjs';
|
|
17
18
|
import { Observable } from 'rxjs';
|
|
18
19
|
|
|
19
20
|
declare class FiltersComponent extends FiltersBaseComponent<MsObject> {
|
|
20
|
-
static ɵfac:
|
|
21
|
-
static ɵcmp:
|
|
21
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FiltersComponent, never>;
|
|
22
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FiltersComponent, "smart-mobilems-objects-filters", never, {}, {}, never, never, true, never>;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
declare class ListComponent {
|
|
25
26
|
private facade;
|
|
26
|
-
list:
|
|
27
|
-
loading:
|
|
28
|
-
itemTpl:
|
|
29
|
-
loadingTpl:
|
|
30
|
-
static ɵfac:
|
|
31
|
-
static ɵcmp:
|
|
27
|
+
list: _angular_core.Signal<dist_packages_objects_domain_src.MsObject[]>;
|
|
28
|
+
loading: _angular_core.Signal<boolean>;
|
|
29
|
+
itemTpl: _angular_core.Signal<TemplateRef<any>>;
|
|
30
|
+
loadingTpl: _angular_core.Signal<TemplateRef<any>>;
|
|
31
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListComponent, never>;
|
|
32
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListComponent, "smart-mobilems-objects-list", never, {}, {}, ["itemTpl", "loadingTpl"], never, true, never>;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
declare class ComponentsModule {
|
|
35
|
-
static ɵfac:
|
|
36
|
-
static ɵmod:
|
|
37
|
-
static ɵinj:
|
|
36
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComponentsModule, never>;
|
|
37
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<ComponentsModule, never, [typeof i1.CommonModule, typeof FiltersComponent, typeof ListComponent], [typeof FiltersComponent, typeof ListComponent]>;
|
|
38
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<ComponentsModule>;
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
declare class ObjectsModule {
|
|
41
42
|
static forFeature<T extends IEntity<string>>(options: ICrudModuleOptionsWithoutRoutng<T>): ModuleWithProviders<ObjectsModule>;
|
|
42
|
-
static ɵfac:
|
|
43
|
-
static ɵmod:
|
|
44
|
-
static ɵinj:
|
|
43
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsModule, never>;
|
|
44
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<ObjectsModule, never, [typeof _smartsoft001_mobilems_angular.SharedModule, typeof ComponentsModule, typeof _smartsoft001_crud_shell_angular.CrudCoreModule], [typeof ComponentsModule]>;
|
|
45
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<ObjectsModule>;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
declare class ObjectsSharedModule {
|
|
48
49
|
static forFeature<T extends IEntity<string>>(options: ICrudModuleOptionsWithoutRoutng<T>): ModuleWithProviders<ObjectsSharedModule>;
|
|
49
|
-
static ɵfac:
|
|
50
|
-
static ɵmod:
|
|
51
|
-
static ɵinj:
|
|
50
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsSharedModule, never>;
|
|
51
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<ObjectsSharedModule, never, [typeof _smartsoft001_mobilems_angular.SharedModule, typeof ComponentsModule, typeof _smartsoft001_crud_shell_angular.CrudModule], [typeof ComponentsModule, typeof _smartsoft001_crud_shell_angular.CrudModule]>;
|
|
52
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<ObjectsSharedModule>;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
declare class ObjectsService extends CrudBaseService<MsObject> {
|
|
55
56
|
getUrlNameForDetails(): string;
|
|
56
57
|
getUrlNameForList(): string;
|
|
57
|
-
static ɵfac:
|
|
58
|
-
static ɵprov:
|
|
58
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsService, never>;
|
|
59
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ObjectsService>;
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
declare class ObjectsFacade extends CrudFacade<MsObject> {
|
|
@@ -64,8 +65,8 @@ declare class ObjectsFacade extends CrudFacade<MsObject> {
|
|
|
64
65
|
title: string;
|
|
65
66
|
id: string;
|
|
66
67
|
}): Promise<void>;
|
|
67
|
-
static ɵfac:
|
|
68
|
-
static ɵprov:
|
|
68
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsFacade, never>;
|
|
69
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ObjectsFacade>;
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
type State = State$1<MsObject>;
|
|
@@ -115,25 +116,25 @@ declare abstract class ObjectsListComponent extends CrudListPageBaseComponent<Ms
|
|
|
115
116
|
list: Signal<MsObject[]>;
|
|
116
117
|
loading: Signal<boolean>;
|
|
117
118
|
filter: Signal<_smartsoft001_crud_shell_angular.ICrudFilter>;
|
|
118
|
-
static ɵfac:
|
|
119
|
-
static ɵdir:
|
|
119
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsListComponent, never>;
|
|
120
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsListComponent, never, never, {}, {}, never, never, true, never>;
|
|
120
121
|
}
|
|
121
122
|
|
|
122
123
|
declare abstract class ObjectsItemComponent extends CrudItemPageBaseComponent<MsObject> {
|
|
123
124
|
protected readonly route: ActivatedRoute;
|
|
124
125
|
protected readonly seoService: SeoService;
|
|
125
126
|
protected readonly translationService: TranslationService;
|
|
126
|
-
protected readonly params:
|
|
127
|
+
protected readonly params: _angular_core.Signal<_angular_router.Params>;
|
|
127
128
|
facade: ObjectsFacade;
|
|
128
|
-
readonly loading:
|
|
129
|
-
readonly item:
|
|
129
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
130
|
+
readonly item: _angular_core.Signal<MsObject>;
|
|
130
131
|
/** @deprecated No museum uses it; download the card through the app's own download service. */
|
|
131
|
-
readonly isPdfDownloading:
|
|
132
|
+
readonly isPdfDownloading: _angular_core.WritableSignal<boolean>;
|
|
132
133
|
protected constructor();
|
|
133
134
|
/** @deprecated No museum uses it; download the card through the app's own download service. */
|
|
134
135
|
onDownload(): Promise<void>;
|
|
135
|
-
static ɵfac:
|
|
136
|
-
static ɵdir:
|
|
136
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsItemComponent, never>;
|
|
137
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsItemComponent, never, never, {}, {}, never, never, true, never>;
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
/** Response of `GET object/:id/related`. */
|
|
@@ -231,8 +232,8 @@ declare class ObjectsDataService extends ObjectsService {
|
|
|
231
232
|
loadRelatedCollections(objectId: number | string): Observable<IObjectCollectionSummary[]>;
|
|
232
233
|
/** Whether `search/Object` with the collection's `filter[entryCollections]` contains the object; an error → unknown → `false`. */
|
|
233
234
|
private objectsDataCollectionContains;
|
|
234
|
-
static ɵfac:
|
|
235
|
-
static ɵprov:
|
|
235
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsDataService, never>;
|
|
236
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ObjectsDataService>;
|
|
236
237
|
}
|
|
237
238
|
|
|
238
239
|
type SortType = 'random' | 'date-asc' | 'date-desc' | 'name-asc' | 'name-desc';
|
|
@@ -375,8 +376,8 @@ declare class ObjectMediaService {
|
|
|
375
376
|
private objectMediaAdditional;
|
|
376
377
|
/** Replaces the extension with `.jpg` — CDN cache compatibility. */
|
|
377
378
|
private objectMediaJpg;
|
|
378
|
-
static ɵfac:
|
|
379
|
-
static ɵprov:
|
|
379
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectMediaService, never>;
|
|
380
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ObjectMediaService>;
|
|
380
381
|
}
|
|
381
382
|
|
|
382
383
|
declare const SERVICES: (typeof ObjectsService | {
|
|
@@ -512,8 +513,8 @@ declare abstract class ObjectsCatalogBaseComponent extends ObjectsListComponent
|
|
|
512
513
|
protected applyListSeo(seo: IObjectsCatalogSeo): void;
|
|
513
514
|
private objectsCatalogInitMasonry;
|
|
514
515
|
private objectsCatalogDestroyMasonry;
|
|
515
|
-
static ɵfac:
|
|
516
|
-
static ɵdir:
|
|
516
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsCatalogBaseComponent, never>;
|
|
517
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsCatalogBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
517
518
|
}
|
|
518
519
|
|
|
519
520
|
/** Options of an object details page, passed to `super(options)`. */
|
|
@@ -605,8 +606,8 @@ declare abstract class ObjectDetailsBaseComponent extends ObjectsItemComponent i
|
|
|
605
606
|
*/
|
|
606
607
|
protected onObjectShown(item: MsObject): void;
|
|
607
608
|
private objectDetailsFetchSsrSeo;
|
|
608
|
-
static ɵfac:
|
|
609
|
-
static ɵdir:
|
|
609
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectDetailsBaseComponent, never>;
|
|
610
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectDetailsBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
610
611
|
}
|
|
611
612
|
|
|
612
613
|
/**
|
|
@@ -709,5 +710,375 @@ interface IAskAboutObject {
|
|
|
709
710
|
*/
|
|
710
711
|
declare function askAboutObjectHref(translate: AskTranslate, object: IAskAboutObject): string | null;
|
|
711
712
|
|
|
712
|
-
|
|
713
|
-
|
|
713
|
+
/** How a field of the advanced filters panel is rendered. */
|
|
714
|
+
type ObjectsAdvancedFilterMode = 'dictionary' | 'tree' | 'text' | 'boolean';
|
|
715
|
+
/** The yes/no checkboxes of the panel ("Na ekspozycji", "Pokaż tylko"). */
|
|
716
|
+
type ObjectsAdvancedFilterBoolean = 'onExhibition' | 'hasImage' | 'hasVideo';
|
|
717
|
+
/**
|
|
718
|
+
* One field of the advanced filters panel. `dictionaryKey` is the API
|
|
719
|
+
* dictionary name (`DataService.loadFilterDictionary`); `key` is the query
|
|
720
|
+
* filter key written through `FiltersContext.filters`. Picking a value in a
|
|
721
|
+
* field with `dependsOn` checks the referenced boolean field (MOB-1802: the
|
|
722
|
+
* field stays enabled); unchecking that boolean clears the field.
|
|
723
|
+
*/
|
|
724
|
+
interface IObjectsAdvancedFilterField {
|
|
725
|
+
key: string;
|
|
726
|
+
labelKey: string;
|
|
727
|
+
mode: ObjectsAdvancedFilterMode;
|
|
728
|
+
dictionaryKey?: string;
|
|
729
|
+
/**
|
|
730
|
+
* The field's own source (`FilterDictionarySource`) instead of the default
|
|
731
|
+
* `DataService.loadFilterDictionary`:
|
|
732
|
+
* - `publicCollections` — `GET public-collections/page/{n}` through
|
|
733
|
+
* `ObjectsDataService.loadCollectionsDictionary`;
|
|
734
|
+
* - `archaeologicalData` — `GET dictionary/{segregation}/search/page/{n}`
|
|
735
|
+
* (one type per segregation) through `ObjectsDataService.loadArchaeologicalDictionary`.
|
|
736
|
+
*/
|
|
737
|
+
source?: 'publicCollections' | 'archaeologicalData';
|
|
738
|
+
/** Segregation of the `ArchaeologicalData` dictionary (only with `source: 'archaeologicalData'`). */
|
|
739
|
+
segregation?: ArchaeologicalSegregation;
|
|
740
|
+
dependsOn?: string;
|
|
741
|
+
}
|
|
742
|
+
/** One write of the panel's batch — handed to `FiltersContext.filters` by the bar. */
|
|
743
|
+
interface IObjectsAdvancedFilterWrite {
|
|
744
|
+
key: string;
|
|
745
|
+
type: '=';
|
|
746
|
+
val: FilterType;
|
|
747
|
+
}
|
|
748
|
+
/** Options of {@link ObjectsAdvancedFiltersBaseComponent}, passed to `super(…)`. */
|
|
749
|
+
interface IObjectsAdvancedFiltersOptions {
|
|
750
|
+
/** The panel's fields — the app's config (Podlasie: `OBJECTS_ADVANCED_FILTER_FIELDS`). */
|
|
751
|
+
fields: readonly IObjectsAdvancedFilterField[];
|
|
752
|
+
/** Query keys the panel writes in its single batch, in this order. */
|
|
753
|
+
managedKeys: readonly string[];
|
|
754
|
+
/**
|
|
755
|
+
* Keys the panel no longer has (MOB-1844). `FiltersContext.filters` changes
|
|
756
|
+
* only the keys it is given, so an old deep link or saved filter would stay
|
|
757
|
+
* active with no field to remove it — "Zastosuj" and "Resetuj" always send
|
|
758
|
+
* them with `val: undefined`. Default `[]`.
|
|
759
|
+
*/
|
|
760
|
+
retiredKeys?: readonly string[];
|
|
761
|
+
/** `locationType` value of "Na ekspozycji: Tak". Default `'Ekspozycja'`. */
|
|
762
|
+
onExhibitionValue?: string;
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Logic of the "Filtry zaawansowane" panel (Muzeum Podlasia's
|
|
766
|
+
* `objects-advanced-filters`, MOB-1596, layout per the MOB-1802 mockup).
|
|
767
|
+
* Presentational: reads `filter()`, keeps every edit in a local draft and only
|
|
768
|
+
* writes through `apply` — the parent (the filters bar) performs the single
|
|
769
|
+
* `context.filters` assignment. The template and the field config stay in the app.
|
|
770
|
+
*/
|
|
771
|
+
declare abstract class ObjectsAdvancedFiltersBaseComponent {
|
|
772
|
+
private readonly objectsAdvancedFiltersTranslate;
|
|
773
|
+
private readonly objectsAdvancedFiltersService;
|
|
774
|
+
private readonly objectsAdvancedFiltersOptions;
|
|
775
|
+
/**
|
|
776
|
+
* "Kolekcja tematyczna" (MOB-1844): pages of the `public-collections` list
|
|
777
|
+
* (with the phrase in `filter[phrase]`) instead of a `dictionary/*` dictionary.
|
|
778
|
+
*/
|
|
779
|
+
protected readonly collectionsSource: (page: number, query?: string) => rxjs.Observable<_smartsoft001_mobilems_angular.IDictionaryPage>;
|
|
780
|
+
/**
|
|
781
|
+
* "Filtry archeologiczne" (MOB-1844): the `ArchaeologicalData` dictionary
|
|
782
|
+
* with a segregation — names planned by MobileMS (Kanbanize 50040).
|
|
783
|
+
*/
|
|
784
|
+
protected readonly archeoTownsSource: (page: number, query?: string) => rxjs.Observable<_smartsoft001_mobilems_angular.IDictionaryPage>;
|
|
785
|
+
protected readonly archeoPeriodsSource: (page: number, query?: string) => rxjs.Observable<_smartsoft001_mobilems_angular.IDictionaryPage>;
|
|
786
|
+
protected readonly archeoCulturesSource: (page: number, query?: string) => rxjs.Observable<_smartsoft001_mobilems_angular.IDictionaryPage>;
|
|
787
|
+
readonly filter: _angular_core.InputSignal<ICrudFilter>;
|
|
788
|
+
/** Toggled by the parent — reopening re-derives the draft, discarding it. */
|
|
789
|
+
readonly isOpen: _angular_core.InputSignal<boolean>;
|
|
790
|
+
/** The `/obiekty` list — a full-width band with the content in the page container. */
|
|
791
|
+
readonly fullBleed: _angular_core.InputSignal<boolean>;
|
|
792
|
+
readonly apply: _angular_core.OutputEmitterRef<IObjectsAdvancedFilterWrite[]>;
|
|
793
|
+
protected readonly fields: readonly IObjectsAdvancedFilterField[];
|
|
794
|
+
/** Mobile: the "Filtry archeologiczne" section collapses with a chevron (2276:7709). */
|
|
795
|
+
protected readonly archaeologicalOpen: _angular_core.WritableSignal<boolean>;
|
|
796
|
+
protected readonly draftQuery: _angular_core.WritableSignal<ICrudFilterQueryItem[]>;
|
|
797
|
+
/** Synthetic filter fed to the reused `app-filter-*` inputs so they read the draft. */
|
|
798
|
+
protected readonly draftFilter: _angular_core.Signal<ICrudFilter>;
|
|
799
|
+
protected constructor(options: IObjectsAdvancedFiltersOptions);
|
|
800
|
+
readDictionaryValue(key: string): IDictionaryEntry[];
|
|
801
|
+
onDictionaryToggle(key: string, item: IDictionaryEntry): void;
|
|
802
|
+
onDictionaryClearAll(key: string): void;
|
|
803
|
+
toggleArchaeological(): void;
|
|
804
|
+
onInventoryNumberChange(value: string): void;
|
|
805
|
+
onBooleanToggle(key: ObjectsAdvancedFilterBoolean, checked: boolean): void;
|
|
806
|
+
isBooleanChecked(key: ObjectsAdvancedFilterBoolean): boolean;
|
|
807
|
+
applyDraft(): void;
|
|
808
|
+
reset(): void;
|
|
809
|
+
private objectsAdvancedFiltersToggleFormFeature;
|
|
810
|
+
private objectsAdvancedFiltersWriteDictionary;
|
|
811
|
+
private objectsAdvancedFiltersSetDraftEntry;
|
|
812
|
+
private objectsAdvancedFiltersBuildPayload;
|
|
813
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsAdvancedFiltersBaseComponent, never>;
|
|
814
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsAdvancedFiltersBaseComponent, never, never, { "filter": { "alias": "filter"; "required": true; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "fullBleed": { "alias": "fullBleed"; "required": false; "isSignal": true; }; }, { "apply": "apply"; }, never, never, true, never>;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/** Sort options of the objects list (the default order). */
|
|
818
|
+
declare const OBJECTS_SORT_OPTIONS: IKeyValue[];
|
|
819
|
+
/** Sort order shown for `?type=new` — newest first. */
|
|
820
|
+
declare const OBJECTS_NEW_TYPE_SORT_OPTIONS: IKeyValue[];
|
|
821
|
+
/** Page sizes of the objects list. */
|
|
822
|
+
declare const OBJECTS_LIMIT_OPTIONS: IKeyValue[];
|
|
823
|
+
/** API query key of the theme tags (cycles) filter. */
|
|
824
|
+
declare const OBJECTS_THEME_TAGS_FILTER_KEY = "cycles";
|
|
825
|
+
/** Chip labels of the yes/no filters from the advanced filters panel. */
|
|
826
|
+
declare const OBJECTS_FILTER_SINGLE_VALUE_LABELS: Readonly<Record<string, string>>;
|
|
827
|
+
/** A filter write in the shape `FiltersContext.filters` accepts. */
|
|
828
|
+
interface IObjectsFilterWrite {
|
|
829
|
+
key: string;
|
|
830
|
+
type: string;
|
|
831
|
+
val: FilterType;
|
|
832
|
+
}
|
|
833
|
+
/** A date range of the date filters (`null` — an open end). */
|
|
834
|
+
interface IObjectsDateRange {
|
|
835
|
+
from: string | null;
|
|
836
|
+
to: string | null;
|
|
837
|
+
}
|
|
838
|
+
/** The sort dropdown key (e.g. `publication-date-desc`) of a sort; no `by` → `random`. */
|
|
839
|
+
declare function objectsSortKey(sort?: {
|
|
840
|
+
by?: string;
|
|
841
|
+
desc?: boolean;
|
|
842
|
+
}): string;
|
|
843
|
+
/** The sort of a sort dropdown key; `random` → an empty `by`. */
|
|
844
|
+
declare function objectsSortFromKey(key: string): {
|
|
845
|
+
by: string;
|
|
846
|
+
desc: boolean;
|
|
847
|
+
};
|
|
848
|
+
/** The list URL (`/obiekty` by default) restoring the current filter (phrase + query items). */
|
|
849
|
+
declare function buildObjectsResultsUrl(origin: string, filter: ICrudFilter | null | undefined, listPath?: string): string;
|
|
850
|
+
|
|
851
|
+
/** Options of {@link ObjectsFiltersBarBaseComponent}, passed to `super(…)`. */
|
|
852
|
+
interface IObjectsFiltersBarOptions {
|
|
853
|
+
/**
|
|
854
|
+
* Load the `Cycle` dictionary for the theme tags (`themeTags`, `tagsQuery`).
|
|
855
|
+
* Default `false`: no `dictionary/Cycle` request; `themeTags` holds only the
|
|
856
|
+
* cycles selected in the filter.
|
|
857
|
+
*/
|
|
858
|
+
cycleTags?: boolean;
|
|
859
|
+
/**
|
|
860
|
+
* Chip labels (translation keys) of the yes/no filters, by query key.
|
|
861
|
+
* Default `OBJECTS_FILTER_SINGLE_VALUE_LABELS`.
|
|
862
|
+
*/
|
|
863
|
+
singleValueLabels?: Readonly<Record<string, string>>;
|
|
864
|
+
/**
|
|
865
|
+
* Single-value filters — their chip clears the whole query item.
|
|
866
|
+
* Default `['categories', 'inventoryNumber', 'locationType']`.
|
|
867
|
+
*/
|
|
868
|
+
singleValueKeys?: readonly string[];
|
|
869
|
+
}
|
|
870
|
+
/**
|
|
871
|
+
* Logic of the objects list top filter bar (Muzeum Podlasia's `filters-top`):
|
|
872
|
+
* theme tags, applied-filter chips, sort/limit dropdowns, pagination and the
|
|
873
|
+
* grid/list view toggle. The template stays in the app.
|
|
874
|
+
*
|
|
875
|
+
* Every mutation goes through the framework `FiltersContext` provided by
|
|
876
|
+
* `<smart-mobilems-objects-filters>` (passed to each method by the template),
|
|
877
|
+
* which dispatches to the objects facade. With `redirectChanges` on (the search
|
|
878
|
+
* results tab, MOB-1818) filter, sort and page size changes are emitted as one
|
|
879
|
+
* complete filter through `filterRedirect` instead.
|
|
880
|
+
*/
|
|
881
|
+
declare abstract class ObjectsFiltersBarBaseComponent {
|
|
882
|
+
private readonly objectsFiltersBarTranslate;
|
|
883
|
+
private readonly objectsFiltersBarSingleValueLabels;
|
|
884
|
+
private readonly objectsFiltersBarSingleValueKeys;
|
|
885
|
+
private readonly objectsFiltersBarCycleTags;
|
|
886
|
+
/** Query key of the panel's theme tags — `filter[cycles][]`. */
|
|
887
|
+
protected readonly themeTagsFilterKey = "cycles";
|
|
888
|
+
/**
|
|
889
|
+
* The page's current filter, bound straight through to the filter fields.
|
|
890
|
+
* Reads come from here; writes go through the FiltersContext — both sides are
|
|
891
|
+
* the same facade state.
|
|
892
|
+
*/
|
|
893
|
+
readonly filter: _angular_core.InputSignal<ICrudFilter>;
|
|
894
|
+
readonly listMode: _angular_core.InputSignal<ListMode>;
|
|
895
|
+
/**
|
|
896
|
+
* The result count from the list page — only for the response to the
|
|
897
|
+
* current filter (the shared slice guard). Without it the count comes from
|
|
898
|
+
* the framework context.
|
|
899
|
+
*/
|
|
900
|
+
readonly totalCount: _angular_core.InputSignal<number>;
|
|
901
|
+
readonly sortOptions: _angular_core.InputSignal<IKeyValue[]>;
|
|
902
|
+
/**
|
|
903
|
+
* The search results tab (MOB-1818): filter, sort and page size changes do
|
|
904
|
+
* not narrow the list in place, they go to `filterRedirect` with the
|
|
905
|
+
* complete filter. Paging stays in the tab.
|
|
906
|
+
*/
|
|
907
|
+
readonly redirectChanges: _angular_core.InputSignal<boolean>;
|
|
908
|
+
/** The complete filter after a change in the results tab — the list moves to `/obiekty` with it. */
|
|
909
|
+
readonly filterRedirect: _angular_core.OutputEmitterRef<ICrudFilter>;
|
|
910
|
+
readonly listModeChange: _angular_core.OutputEmitterRef<ListMode>;
|
|
911
|
+
/** Free-text search — the list page owns the read so it can persist it. */
|
|
912
|
+
readonly searchEvent: _angular_core.OutputEmitterRef<string>;
|
|
913
|
+
readonly isAdvancedFiltersOn: WritableSignal<boolean>;
|
|
914
|
+
limitOptions: IKeyValue[];
|
|
915
|
+
/** The "Wyszukaj więcej tagów" phrase — empty = the panel's default tags. */
|
|
916
|
+
readonly tagsQuery: WritableSignal<string>;
|
|
917
|
+
/**
|
|
918
|
+
* Panel chips: the selected cycles (from the filter) first, then the
|
|
919
|
+
* dictionary or the phrase result — a selected cycle missing from the `q`
|
|
920
|
+
* result stays and can be unselected (MOB-1826 review). Without the
|
|
921
|
+
* `cycleTags` option only the selected cycles.
|
|
922
|
+
*/
|
|
923
|
+
readonly themeTags: Signal<IDictionaryEntry[]>;
|
|
924
|
+
protected constructor(options?: IObjectsFiltersBarOptions);
|
|
925
|
+
toggleAdvancedFilters(force?: boolean): void;
|
|
926
|
+
onListMode(value: ListMode): void;
|
|
927
|
+
/** Map a sort dropdown key (e.g. `publication-date-desc`) to the matching option. */
|
|
928
|
+
selectedSort(sort?: {
|
|
929
|
+
by?: string;
|
|
930
|
+
desc?: boolean;
|
|
931
|
+
}): IKeyValue;
|
|
932
|
+
selectedLimit(limit?: number): IKeyValue;
|
|
933
|
+
sortChange(context: FiltersContext<MsObject>, value: string): void;
|
|
934
|
+
limitChange(context: FiltersContext<MsObject>, value: string): void;
|
|
935
|
+
pageChange(context: FiltersContext<MsObject>, value: number): void;
|
|
936
|
+
/** Toggle a single dictionary entry on/off for `key`. */
|
|
937
|
+
advancedFilterChange(context: FiltersContext<MsObject>, entry: IDictionaryEntry, key: string): void;
|
|
938
|
+
/** The year field already debounces typing (500 ms, MOB-1866). */
|
|
939
|
+
onCreateDatesFilterChange(context: FiltersContext<MsObject>, range: IObjectsDateRange): void;
|
|
940
|
+
/**
|
|
941
|
+
* Batched write from the "Filtry zaawansowane" panel (MOB-1596) — the panel
|
|
942
|
+
* keeps its own draft and hands over the full snapshot on Zastosuj/Resetuj,
|
|
943
|
+
* so this is the single `context.filters` assignment for that whole edit.
|
|
944
|
+
*/
|
|
945
|
+
onAdvancedFiltersApply(context: FiltersContext<MsObject>, payload: IObjectsFilterWrite[]): void;
|
|
946
|
+
/** A yes/no filter — unchecking sends `undefined`, which removes the query item. */
|
|
947
|
+
onBooleanFilterChange(context: FiltersContext<MsObject>, event: {
|
|
948
|
+
key: string;
|
|
949
|
+
checked: boolean;
|
|
950
|
+
}): void;
|
|
951
|
+
clearFilter(context: FiltersContext<MsObject>, item: ICrudFilterQueryItem, value?: IDictionaryEntry): void;
|
|
952
|
+
isListValue(value: unknown): boolean;
|
|
953
|
+
/** List entries for the chips — no `null` and no entries without an id (MOB-1826 review). */
|
|
954
|
+
listEntries(value: unknown): Array<IDictionaryEntry & {
|
|
955
|
+
text?: string;
|
|
956
|
+
}>;
|
|
957
|
+
/** Chip label of a filter without a list of values — a yes/no one has no value after the colon. */
|
|
958
|
+
singleValueLabel(item: ICrudFilterQueryItem): string;
|
|
959
|
+
$context(context: unknown): FiltersContext<MsObject>;
|
|
960
|
+
/**
|
|
961
|
+
* Write a dictionary filter through the generic `filters` setter. An empty
|
|
962
|
+
* selection must be sent as `undefined` — that is what removes the query item.
|
|
963
|
+
*/
|
|
964
|
+
protected objectsFiltersBarSetDictionary(context: FiltersContext<MsObject>, key: string, value: IDictionaryEntry[]): void;
|
|
965
|
+
/**
|
|
966
|
+
* Where a filter write goes: the framework context (read through the facade)
|
|
967
|
+
* or — in the results tab — the redirect context to `/obiekty` (MOB-1818).
|
|
968
|
+
*/
|
|
969
|
+
private objectsFiltersBarWriteTarget;
|
|
970
|
+
private objectsFiltersBarDictionaryValue;
|
|
971
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsFiltersBarBaseComponent, never>;
|
|
972
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsFiltersBarBaseComponent, never, never, { "filter": { "alias": "filter"; "required": true; "isSignal": true; }; "listMode": { "alias": "listMode"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "sortOptions": { "alias": "sortOptions"; "required": false; "isSignal": true; }; "redirectChanges": { "alias": "redirectChanges"; "required": false; "isSignal": true; }; }, { "filterRedirect": "filterRedirect"; "listModeChange": "listModeChange"; "searchEvent": "searchEvent"; }, never, never, true, never>;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
/**
|
|
976
|
+
* Logic of the grey objects search panel (Muzeum Podlasia's
|
|
977
|
+
* `objects-search-panel`, mockup "search tagi filtry" 458:7898, desktop
|
|
978
|
+
* "Frame 502" 2300:51176, mobile "Panel wyszukiwarki" 2300:51195): phrase →
|
|
979
|
+
* theme tags + "Wyszukaj więcej tagów" → date range, "Pokaż" and "Szukaj" →
|
|
980
|
+
* advanced filters. On mobile a "Filtry ↓" button under the phrase field
|
|
981
|
+
* expands the rest of the panel.
|
|
982
|
+
*
|
|
983
|
+
* Presentational — it reads its state from `filter()` and emits events; the
|
|
984
|
+
* parent (the filters bar) writes to `FiltersContext`. No template: each
|
|
985
|
+
* museum extends it and keeps its own HTML, with the phrase input marked
|
|
986
|
+
* `#phraseField`.
|
|
987
|
+
*/
|
|
988
|
+
declare abstract class ObjectsSearchPanelBaseComponent {
|
|
989
|
+
readonly phrase: _angular_core.InputSignal<string>;
|
|
990
|
+
readonly filter: _angular_core.InputSignal<ICrudFilter>;
|
|
991
|
+
/**
|
|
992
|
+
* Theme tags — the whole `Cycle` dictionary or the "Wyszukaj więcej tagów"
|
|
993
|
+
* result; the template decides how many show at once (MOB-1826).
|
|
994
|
+
*/
|
|
995
|
+
readonly tags: _angular_core.InputSignal<ThemeTag[]>;
|
|
996
|
+
/** The parent controls the advanced filters panel state. */
|
|
997
|
+
readonly isAdvancedFiltersOn: _angular_core.InputSignal<boolean>;
|
|
998
|
+
/**
|
|
999
|
+
* The `/obiekty` list also searches by filters alone — "Szukaj" with an
|
|
1000
|
+
* empty phrase is allowed there. In the search results the phrase is part
|
|
1001
|
+
* of the address, so an empty phrase has nowhere to go.
|
|
1002
|
+
*/
|
|
1003
|
+
readonly allowEmptyPhrase: _angular_core.InputSignal<boolean>;
|
|
1004
|
+
/** A full-bleed band (the `/obiekty` list) instead of a grey box (search results). */
|
|
1005
|
+
readonly fullBleed: _angular_core.InputSignal<boolean>;
|
|
1006
|
+
/**
|
|
1007
|
+
* Selected filter chips (state "Selected" 2193:3301 / mobile 2276:7726) —
|
|
1008
|
+
* rendered by the parent and inserted once by the panel; only CSS places
|
|
1009
|
+
* them, so the DOM is the same after SSR and in the browser.
|
|
1010
|
+
*/
|
|
1011
|
+
readonly selectedFiltersTpl: _angular_core.InputSignal<TemplateRef<unknown>>;
|
|
1012
|
+
readonly searchPhrase: _angular_core.OutputEmitterRef<string>;
|
|
1013
|
+
readonly tagToggle: _angular_core.OutputEmitterRef<ThemeTag>;
|
|
1014
|
+
/**
|
|
1015
|
+
* Passed through unchanged — the date field debounces the year typing
|
|
1016
|
+
* (MOB-1866), the panel delays nothing here.
|
|
1017
|
+
*/
|
|
1018
|
+
readonly dateRangeChange: _angular_core.OutputEmitterRef<IObjectsDateRange>;
|
|
1019
|
+
readonly booleanFilterChange: _angular_core.OutputEmitterRef<{
|
|
1020
|
+
key: string;
|
|
1021
|
+
checked: boolean;
|
|
1022
|
+
}>;
|
|
1023
|
+
/** "Wyszukaj więcej tagów" — an empty phrase goes back to the default tags. */
|
|
1024
|
+
readonly tagsSearch: _angular_core.OutputEmitterRef<string>;
|
|
1025
|
+
readonly advancedFiltersToggle: _angular_core.OutputEmitterRef<void>;
|
|
1026
|
+
/** One batched payload from the "Filtry zaawansowane" panel's Zastosuj/Resetuj. */
|
|
1027
|
+
readonly advancedFiltersApply: _angular_core.OutputEmitterRef<IObjectsFilterWrite[]>;
|
|
1028
|
+
/** The selected theme tags read from the current filter. */
|
|
1029
|
+
protected readonly selectedTagIds: _angular_core.Signal<number[]>;
|
|
1030
|
+
/** The field text — starts from `phrase()` and follows a change from the URL. */
|
|
1031
|
+
protected readonly searchText: _angular_core.WritableSignal<string>;
|
|
1032
|
+
/** The "Wyszukaj więcej tagów" phrase and the last query sent. */
|
|
1033
|
+
protected readonly tagQuery: _angular_core.WritableSignal<string>;
|
|
1034
|
+
protected readonly submittedTagQuery: _angular_core.WritableSignal<string>;
|
|
1035
|
+
/** "Pokaż wszystkie tagi (N)" expanded — a new search collapses it. */
|
|
1036
|
+
protected readonly tagsExpanded: _angular_core.WritableSignal<boolean>;
|
|
1037
|
+
/** Mobile: "Filtry ↓" expands the tags, dates and buttons (always visible from lg). */
|
|
1038
|
+
protected readonly filtersOpen: _angular_core.WritableSignal<boolean>;
|
|
1039
|
+
/** Mobile: "Więcej tagów" reveals the tag search field (2276:7913). */
|
|
1040
|
+
protected readonly moreTagsOpen: _angular_core.WritableSignal<boolean>;
|
|
1041
|
+
private readonly objectsSearchPanelPhraseField;
|
|
1042
|
+
/** The "Pokaż" boxes' state read from the filter — e.g. after a link with filters. */
|
|
1043
|
+
protected isBooleanFilterOn(key: string): boolean;
|
|
1044
|
+
protected toggleMoreTags(): void;
|
|
1045
|
+
protected toggleFilters(): void;
|
|
1046
|
+
/**
|
|
1047
|
+
* "×" in the phrase field. On the list it also clears the search; in the
|
|
1048
|
+
* search results it only empties the field (a new phrase is a new address).
|
|
1049
|
+
*/
|
|
1050
|
+
protected clearPhrase(): void;
|
|
1051
|
+
protected searchTags(): void;
|
|
1052
|
+
protected onBooleanFilterChange(key: string, checked: boolean): void;
|
|
1053
|
+
/**
|
|
1054
|
+
* Only an explicit action (button / Enter) searches — the panel has no
|
|
1055
|
+
* live search, so there is no debounce here either.
|
|
1056
|
+
*/
|
|
1057
|
+
protected search(): void;
|
|
1058
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsSearchPanelBaseComponent, never>;
|
|
1059
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsSearchPanelBaseComponent, never, never, { "phrase": { "alias": "phrase"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": true; "isSignal": true; }; "tags": { "alias": "tags"; "required": false; "isSignal": true; }; "isAdvancedFiltersOn": { "alias": "isAdvancedFiltersOn"; "required": false; "isSignal": true; }; "allowEmptyPhrase": { "alias": "allowEmptyPhrase"; "required": false; "isSignal": true; }; "fullBleed": { "alias": "fullBleed"; "required": false; "isSignal": true; }; "selectedFiltersTpl": { "alias": "selectedFiltersTpl"; "required": false; "isSignal": true; }; }, { "searchPhrase": "searchPhrase"; "tagToggle": "tagToggle"; "dateRangeChange": "dateRangeChange"; "booleanFilterChange": "booleanFilterChange"; "tagsSearch": "tagsSearch"; "advancedFiltersToggle": "advancedFiltersToggle"; "advancedFiltersApply": "advancedFiltersApply"; }, never, never, true, never>;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
/** How long (ms) the "link copied" message stays after a click. */
|
|
1063
|
+
declare const OBJECTS_SHARE_COPIED_TIMEOUT = 3000;
|
|
1064
|
+
/**
|
|
1065
|
+
* Logic of "Share search results" (mock-up "Action panel" 2300:51184): a link
|
|
1066
|
+
* to the objects list with the current filters, shared through
|
|
1067
|
+
* `ShareLinkBaseComponent` — the native share sheet, or a clipboard copy with a
|
|
1068
|
+
* "link copied" flag when the browser has no share sheet. The template stays in
|
|
1069
|
+
* the app.
|
|
1070
|
+
*/
|
|
1071
|
+
declare abstract class ObjectsShareResultsBaseComponent extends ShareLinkBaseComponent {
|
|
1072
|
+
readonly filter: _angular_core.InputSignal<ICrudFilter>;
|
|
1073
|
+
/** The list path the link opens; overridable, read inside `share`. */
|
|
1074
|
+
protected readonly objectsShareResultsListPath: string;
|
|
1075
|
+
/** How long (ms) "copied" stays on; overridable, read inside `share`. */
|
|
1076
|
+
protected readonly objectsShareResultsCopiedTimeout: number;
|
|
1077
|
+
protected get shareLinkCopiedTimeout(): number;
|
|
1078
|
+
protected shareLinkUrl(): string;
|
|
1079
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectsShareResultsBaseComponent, never>;
|
|
1080
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsShareResultsBaseComponent, never, never, { "filter": { "alias": "filter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
export { ASK_ABOUT_OBJECT_KEYS, AdvancedFilterType, ComponentsModule, FiltersComponent, FormFeatureType, ListComponent, MULTIMEDIA_DICTIONARY, OBJECTS_CATALOG_DEFAULTS, OBJECTS_CATALOG_SEO, OBJECTS_FILTER_SINGLE_VALUE_LABELS, OBJECTS_LIMIT_OPTIONS, OBJECTS_NEW_TYPE_SORT_OPTIONS, OBJECTS_SHARE_COPIED_TIMEOUT, OBJECTS_SORT_OPTIONS, OBJECTS_THEME_TAGS_FILTER_KEY, ObjectDetailsBaseComponent, ObjectMediaService, ObjectsAdvancedFiltersBaseComponent, ObjectsCatalogBaseComponent, ObjectsDataService, ObjectsFacade, ObjectsFiltersBarBaseComponent, ObjectsItemComponent, ObjectsListComponent, ObjectsModule, ObjectsSearchPanelBaseComponent, ObjectsService, ObjectsShareResultsBaseComponent, ObjectsSharedModule, SERVICES, askAboutObjectHref, bibliography, buildObjectsResultsUrl, descriptionHtml, getObjectsState, getReducer, initialState, inventoryValues, objectTitle, objectsSortFromKey, objectsSortKey, relatedArticles, tagValues };
|
|
1084
|
+
export type { ArchaeologicalSegregation, AskTranslate, FileType, IAnimationObject, IAskAboutObject, IKeyValue, IModel3DObject, IMultimediaDictionaryItem, IObjectBibliographyEntry, IObjectCollectionSummary, IObjectDetailLink, IObjectDetailSource, IObjectDetailsOptions, IObjectGalleryItem, IObjectRelated, IObjectsAdvancedFilterField, IObjectsAdvancedFilterWrite, IObjectsAdvancedFiltersOptions, IObjectsCatalogLoadMore, IObjectsCatalogOptions, IObjectsCatalogSeo, IObjectsDateRange, IObjectsFilterWrite, IObjectsFiltersBarOptions, ISpecificObject, ObjectDetailValue, ObjectsAdvancedFilterBoolean, ObjectsAdvancedFilterMode, SortType, State };
|