@smartsoft001-mobilems/objects-shell-angular 2.124.0 → 2.126.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.
@@ -1 +1 @@
1
- {"version":3,"file":"smartsoft001-mobilems-objects-shell-angular.mjs","sources":["../../../../../../packages/objects/shell/angular/src/lib/services/objects/objects.service.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.facade.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.reducer.ts","../../../../../../packages/objects/shell/angular/src/lib/components/list/list.component.ts","../../../../../../packages/objects/shell/angular/src/lib/components/list/list.component.html","../../../../../../packages/objects/shell/angular/src/lib/components/filters/filters.component.ts","../../../../../../packages/objects/shell/angular/src/lib/components/filters/filters.component.html","../../../../../../packages/objects/shell/angular/src/lib/components/components.module.ts","../../../../../../packages/objects/shell/angular/src/lib/services/index.ts","../../../../../../packages/objects/shell/angular/src/lib/objects.module.ts","../../../../../../packages/objects/shell/angular/src/lib/objects-shared.module.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.selectors.ts","../../../../../../packages/objects/shell/angular/src/lib/pages/list/list.component.ts","../../../../../../packages/objects/shell/angular/src/lib/pages/item/item.component.ts","../../../../../../packages/objects/shell/angular/src/lib/models/objects-filters.model.ts","../../../../../../packages/objects/shell/angular/src/lib/catalog/objects-catalog-base.component.ts","../../../../../../packages/objects/shell/angular/src/smartsoft001-mobilems-objects-shell-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { CrudBaseService } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n@Injectable()\nexport class ObjectsService extends CrudBaseService<MsObject> {\n getUrlNameForDetails(): string {\n return 'object';\n }\n\n getUrlNameForList(): string {\n return 'Object';\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CrudFacade } from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsService } from '../services/objects/objects.service';\n\n@Injectable()\nexport class ObjectsFacade extends CrudFacade<MsObject> {\n protected service = inject(ObjectsService);\n\n async downloadPdf(item: { title: string; id: string }): Promise<void> {\n await this.service.downloadPdf(item.title, item.id);\n }\n}\n","import { Action } from '@ngrx/store';\nimport {\n State as SmartState,\n initialState as smartInitialState,\n getReducer as smartGetReducer,\n} from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n// import {objectsFacade} from \"./objects.facade\";\n\nexport type State = SmartState<MsObject>;\n\nexport const initialState = {\n ...smartInitialState,\n};\n\nconst objectsReducer = (state = initialState, action: any) => {\n switch (action.type) {\n //case objectsFacade.name + ' test':\n // return {\n // ...state,\n // loaded: false,\n // }\n\n default:\n return smartGetReducer('objects')(state, action);\n }\n};\n\nexport function getReducer() {\n return (state: any, action: Action) => {\n return objectsReducer(state, action);\n };\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n TemplateRef,\n contentChild,\n inject,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { ObjectsFacade } from '../../+state/objects.facade';\n\n@Component({\n selector: 'smart-mobilems-objects-list',\n templateUrl: './list.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgTemplateOutlet],\n})\nexport class ListComponent {\n private facade = inject(ObjectsFacade);\n\n list = this.facade.list;\n loading = this.facade.loading;\n\n itemTpl = contentChild<TemplateRef<any>>('itemTpl');\n loadingTpl = contentChild<TemplateRef<any>>('loadingTpl');\n}\n","@if (list(); as listData) {\n @if (listData && itemTpl()) {\n @for (item of listData; track item) {\n <ng-container\n *ngTemplateOutlet=\"itemTpl(); context: { $implicit: item }\"\n ></ng-container>\n }\n }\n}\n\n@if (loading()) {\n @if (loadingTpl()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl()\"></ng-container>\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\n\nimport { FiltersBaseComponent } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n@Component({\n selector: 'smart-mobilems-objects-filters',\n templateUrl: './filters.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgTemplateOutlet],\n})\nexport class FiltersComponent extends FiltersBaseComponent<MsObject> {}\n","<ng-container\n *ngTemplateOutlet=\"contentTpl(); context: { $implicit: context }\"\n></ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FiltersComponent } from './filters/filters.component';\nimport { ListComponent } from './list/list.component';\n\nconst COMPONENTS = [FiltersComponent, ListComponent];\n\n@NgModule({\n imports: [CommonModule, COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class ComponentsModule {}\n","import { CrudService } from '@smartsoft001/crud-shell-angular';\n\nimport { ObjectsService } from './objects/objects.service';\n\nexport * from './objects/objects.service';\n\nexport const SERVICES = [\n ObjectsService,\n {\n provide: CrudService,\n useClass: ObjectsService,\n },\n];\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FILE_SERVICE_CONFIG, IFileServiceConfig } from '@smartsoft001/angular';\nimport {\n CrudConfig,\n CrudCoreModule,\n CrudFullConfig,\n ICrudModuleOptionsWithoutRoutng,\n} from '@smartsoft001/crud-shell-angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport {\n provideInheritedSharedConfig,\n SharedModule,\n} from '@smartsoft001-mobilems/angular';\n\nimport { ObjectsFacade } from './+state/objects.facade';\nimport { getReducer } from './+state/objects.reducer';\nimport { ComponentsModule } from './components';\nimport { SERVICES } from './services';\n\n@NgModule({\n declarations: [],\n providers: [...SERVICES, ObjectsFacade],\n imports: [SharedModule, ComponentsModule, CrudCoreModule],\n exports: [ComponentsModule],\n})\nexport class ObjectsModule {\n static forFeature<T extends IEntity<string>>(\n options: ICrudModuleOptionsWithoutRoutng<T>,\n ): ModuleWithProviders<ObjectsModule> {\n if (!options.config.reducerFactory)\n options.config.reducerFactory = getReducer;\n return {\n ngModule: ObjectsModule,\n providers: [\n provideInheritedSharedConfig(options.config.apiUrl),\n { provide: CrudConfig, useValue: options.config },\n { provide: CrudFullConfig, useValue: options.config },\n {\n provide: FILE_SERVICE_CONFIG,\n useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,\n },\n ],\n };\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FILE_SERVICE_CONFIG, IFileServiceConfig } from '@smartsoft001/angular';\nimport {\n CrudConfig,\n CrudFullConfig,\n CrudModule,\n ICrudModuleOptionsWithoutRoutng,\n} from '@smartsoft001/crud-shell-angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport {\n provideInheritedSharedConfig,\n SharedModule,\n} from '@smartsoft001-mobilems/angular';\n\nimport { ObjectsFacade } from './+state/objects.facade';\nimport { getReducer } from './+state/objects.reducer';\nimport { ComponentsModule } from './components';\nimport { SERVICES } from './services';\n\n@NgModule({\n declarations: [],\n providers: [...SERVICES, ObjectsFacade],\n imports: [SharedModule, ComponentsModule, CrudModule],\n exports: [ComponentsModule, CrudModule],\n})\nexport class ObjectsSharedModule {\n static forFeature<T extends IEntity<string>>(\n options: ICrudModuleOptionsWithoutRoutng<T>,\n ): ModuleWithProviders<ObjectsSharedModule> {\n if (!options.config.reducerFactory)\n options.config.reducerFactory = getReducer;\n return {\n ngModule: ObjectsSharedModule,\n providers: [\n provideInheritedSharedConfig(options.config.apiUrl),\n { provide: CrudConfig, useValue: options.config },\n { provide: CrudFullConfig, useValue: options.config },\n {\n provide: FILE_SERVICE_CONFIG,\n useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,\n },\n ],\n };\n }\n}\n","import {\n createFeatureSelector,\n //createSelector\n} from '@ngrx/store';\n\nimport { State } from './objects.reducer';\n\nexport const getObjectsState = createFeatureSelector<State>('objects');\n\n//export const getobjectsTest = createSelector(\n// getobjectsState,\n// (state) => state.test\n//);\n","import { Directive, inject, Signal } from '@angular/core';\nimport { CrudListPageBaseComponent } from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsFacade } from '../../+state';\n\n@Directive()\nexport abstract class ObjectsListComponent extends CrudListPageBaseComponent<MsObject> {\n protected readonly facade = inject(ObjectsFacade);\n\n list = this.facade.list as Signal<MsObject[]>;\n loading = this.facade.loading;\n filter = this.facade.filter;\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrudItemPageBaseComponent } from '@smartsoft001/crud-shell-angular';\n\nimport { SeoService, TranslationService } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsFacade } from '../../+state';\n\n@Directive()\nexport abstract class ObjectsItemComponent extends CrudItemPageBaseComponent<MsObject> {\n protected readonly route = inject(ActivatedRoute);\n protected readonly seoService = inject(SeoService);\n protected readonly translationService = inject(TranslationService);\n protected readonly params = toSignal(this.route.params);\n\n override facade = inject(ObjectsFacade);\n\n readonly loading = this.facade.loading;\n readonly item = this.facade.selected;\n readonly isPdfDownloading = signal(false);\n\n protected constructor() {\n super();\n\n effect(() => {\n const params = this.params();\n\n const id = params['id'];\n if (id) {\n this.facade.select(id);\n }\n });\n }\n\n async onDownload(): Promise<void> {\n this.isPdfDownloading.set(true);\n try {\n await this.facade.downloadPdf({\n id: this.item()?.id.toString() || '',\n title: this.item()?.title as string,\n });\n } catch (error) {\n console.error('PDF download failed:', error);\n } finally {\n this.isPdfDownloading.set(false);\n }\n }\n}\n","import { MsFile } from '@smartsoft001-mobilems/models';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nexport type SortType =\n 'random' | 'date-asc' | 'date-desc' | 'name-asc' | 'name-desc';\n\nexport type IKeyValue = {\n key: string;\n value?: string;\n};\n\nexport enum AdvancedFilterType {\n CREATORS = 'creators',\n AUTHORS = 'authors',\n MATERIALS = 'materials',\n TECHNIQUES = 'techniques',\n CREATE_PLACES = 'createPlaces',\n KEYWORDS = 'keywords',\n}\n\nexport enum FormFeatureType {\n MODEL_3D = 1,\n PHOTO_360 = 2,\n IMAGES = 3,\n AUDIO = 7,\n AUDIO_DESKRYPCJA = 8,\n VIDEO = 9,\n ORTHOGRAPHY = 11,\n OTHER = 13,\n IMAGES_HD = 14,\n VIRTUAL_WALK = 15,\n ANIMATION = 20,\n}\n\nexport interface IMultimediaDictionaryItem {\n id: FormFeatureType;\n translationKey: string;\n}\n\n/**\n * Dictionary of multimedia types with their translation keys.\n * Use with TranslateService to get localized names.\n */\nexport const MULTIMEDIA_DICTIONARY: IMultimediaDictionaryItem[] = [\n {\n id: FormFeatureType.IMAGES,\n translationKey: 'OBJECTS.filters.multimedia.images',\n },\n {\n id: FormFeatureType.IMAGES_HD,\n translationKey: 'OBJECTS.filters.multimedia.galleryHD',\n },\n {\n id: FormFeatureType.MODEL_3D,\n translationKey: 'OBJECTS.filters.multimedia.model3D',\n },\n {\n id: FormFeatureType.AUDIO,\n translationKey: 'OBJECTS.filters.multimedia.audio',\n },\n {\n id: FormFeatureType.AUDIO_DESKRYPCJA,\n translationKey: 'OBJECTS.filters.multimedia.audioDescription',\n },\n {\n id: FormFeatureType.VIDEO,\n translationKey: 'OBJECTS.filters.multimedia.video',\n },\n {\n id: FormFeatureType.ANIMATION,\n translationKey: 'OBJECTS.filters.multimedia.animation',\n },\n {\n id: FormFeatureType.VIRTUAL_WALK,\n translationKey: 'OBJECTS.filters.multimedia.virtualWalk',\n },\n {\n id: FormFeatureType.OTHER,\n translationKey: 'OBJECTS.filters.multimedia.other',\n },\n];\n\nexport type FileType = Omit<MsFile, 'formFeature'> & {\n formFeature: FormFeatureType;\n};\n\ninterface Model3DFile {\n id: number;\n filePath: string;\n extension: string;\n altText: string | null;\n fileName: string;\n}\n\nexport interface IModel3DObject {\n formFeature: FormFeatureType;\n files: Model3DFile[];\n description: string | null;\n iframeSource: string | null;\n iframeHtml: string | null;\n isRemote: boolean;\n originalDimensions: string | null;\n id: number;\n position: number;\n filePath: string;\n extension: string;\n altText: string | null;\n altTextEn: string | null;\n vimeoUrl: string | null;\n}\n\nexport interface IAnimationObject {\n formFeature: FormFeatureType;\n files: MsFile[];\n description: string | null;\n iframeSource: string | null;\n iframeHtml: string | null;\n isRemote: boolean;\n originalDimensions: string | null;\n id: number;\n position: number;\n filePath: string;\n extension: string;\n altText: string | null;\n altTextEn: string | null;\n vimeoUrl: string | null;\n}\n\n// Leci z API, nie jest udokumentowane\nexport interface ISpecificObject extends MsObject {\n dimensionTextWithDuration?: string;\n specificDimensionDescription?: string;\n publicationDate?: string;\n authors?: Array<{\n id: number;\n name: string;\n role?: string;\n additionalRoles?: string[];\n comment?: string;\n }>;\n createPlaces?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n materials?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n techniques?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n createdAt?: string | Date;\n createDates?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n visited?: number;\n objectCardDownloadCount?: number;\n shareMuseumObjectMultimediaEnabled?: boolean;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n PLATFORM_ID,\n Signal,\n signal,\n untracked,\n viewChild,\n WritableSignal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ListMode, PaginationMode } from '@smartsoft001/angular';\nimport { ICrudFilter } from '@smartsoft001/crud-shell-angular';\nimport { capitalize } from '@smartsoft001/utils';\n\nimport {\n createCatalog,\n createCatalogLoadMore,\n createSafeTimeouts,\n ICatalog,\n ICatalogLoadMore,\n ICatalogOptions,\n MasonryGridComponent,\n MuseumSeoService,\n WcagChangesService,\n} from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsListComponent } from '../pages/list/list.component';\n\n/**\n * Filter defaults of the objects list (Muzeum Podlasia): 20 objects per page,\n * newest first. **The key order is part of the contract** — the first read\n * spreads this object first, so it shapes the facade filter, the persisted\n * `MUSEUM_OBJECTS_FILTER` value and the `#base64` hash.\n */\nexport const OBJECTS_CATALOG_DEFAULTS: ICrudFilter = {\n paginationMode: PaginationMode.singlePage,\n sortBy: 'publication-date',\n sortDesc: true,\n offset: 0,\n limit: 20,\n};\n\n/** List SEO: `<title> - <site>`, a raw description and the canonical url. */\nexport interface IObjectsCatalogSeo {\n /** Translation key of the page title, e.g. `PAGE_TITLES.objects`. */\n titleKey: string;\n /** Translation key of the description — not capitalised. */\n descriptionKey: string;\n /** Translation key of the site name. Default `MODEL.mainTitle`. */\n siteNameKey?: string;\n /** Canonical url of the list, e.g. `/obiekty`. */\n url: string;\n}\n\nexport const OBJECTS_CATALOG_SEO: IObjectsCatalogSeo = {\n titleKey: 'PAGE_TITLES.objects',\n descriptionKey: 'HOME.collectionsDescription',\n siteNameKey: 'MODEL.mainTitle',\n url: '/obiekty',\n};\n\n/** Focus target and live-region message of „więcej ↓” (load more). */\nexport interface IObjectsCatalogLoadMore {\n /** Cards inside `#listContainer`; the first appended one gets the focus. */\n itemSelector?: string;\n /** Translation key announced after a page is appended (`{ count }`). */\n loadedMoreKey?: string;\n}\n\nconst OBJECTS_CATALOG_ITEM_SELECTOR =\n '[data-testid=\"objects-grid-item-link\"], [data-testid=\"objects-list-item\"]';\nconst OBJECTS_CATALOG_LOADED_MORE_KEY = 'OBJECTS.loadedMore';\n\nexport interface IObjectsCatalogOptions extends Partial<\n Omit<ICatalogOptions, 'facade'>\n> {\n /** Applied on creation, skipped in a search tab; `null` — no SEO. */\n seo?: IObjectsCatalogSeo | null;\n loadMore?: IObjectsCatalogLoadMore;\n}\n\n/**\n * Base of an objects list page on the shared catalog engine\n * (`createCatalog`): first read (also in SSR when the route carries the\n * filter), persistence, page, search, the read guard, the mobile list mode,\n * „więcej ↓”, the masonry lifecycle and the list SEO. The page keeps its\n * template.\n *\n * ```ts\n * export class ListComponent extends ObjectsCatalogBaseComponent {\n * constructor() {\n * super();\n * }\n * }\n * ```\n *\n * The template holds a `#listContainer` element (scrolled to after a page\n * change from the bottom pagination; it holds the cards focused by load\n * more) and a `smart-mobilems-masonry-grid` in the grid mode.\n */\n@Directive()\nexport abstract class ObjectsCatalogBaseComponent\n extends ObjectsListComponent\n implements AfterViewInit\n{\n readonly ListMode = ListMode;\n protected readonly catalog: ICatalog;\n\n readonly isBrowser: Signal<boolean>;\n /** The route set the filter, so the list is read and rendered in SSR too. */\n readonly routeList: Signal<boolean>;\n readonly listMode: Signal<ListMode>;\n readonly searchEnabled: Signal<boolean | undefined>;\n readonly barPhrase: Signal<string>;\n readonly isLoading: Signal<boolean>;\n readonly hasError: Signal<unknown>;\n readonly totalCount: Signal<number>;\n /** `publication-date-desc` style key for the toolbar. */\n readonly sortKey: Signal<string | undefined>;\n readonly selectedPage: Signal<number>;\n /** `?type=new` — the page offers the newest-first sort options. */\n readonly isNewType: Signal<boolean>;\n\n /** Cards on the list — with „więcej ↓” previous pages + the current one. */\n readonly items: Signal<MsObject[]>;\n /** There are results after the current page. */\n readonly hasMore: Signal<boolean>;\n /** The next page is loading — the list stays, only the button shows it. */\n readonly isAppending: Signal<boolean>;\n /** Screen reader message after cards were appended. */\n readonly loadMoreStatus: WritableSignal<string> = signal('');\n\n private readonly objectsCatalogTranslate = inject(TranslateService);\n private readonly objectsCatalogSeoService = inject(MuseumSeoService);\n private readonly objectsCatalogWcag = inject(WcagChangesService);\n private readonly objectsCatalogBrowser = isPlatformBrowser(\n inject(PLATFORM_ID),\n );\n private readonly objectsCatalogTimeouts = createSafeTimeouts();\n private readonly objectsCatalogMasonry = viewChild(MasonryGridComponent);\n private readonly objectsCatalogListContainer =\n viewChild<ElementRef<HTMLElement>>('listContainer');\n private readonly objectsCatalogLoadMore: ICatalogLoadMore<MsObject>;\n private objectsCatalogViewReady = false;\n private objectsCatalogScrollAfterLoad = false;\n private readonly objectsCatalogQueryParams = toSignal(\n inject(ActivatedRoute).queryParams,\n );\n\n protected constructor(options: IObjectsCatalogOptions = {}) {\n super();\n const {\n seo = OBJECTS_CATALOG_SEO,\n loadMore = {},\n ...catalogOptions\n } = options;\n const defaults = catalogOptions.defaults ?? OBJECTS_CATALOG_DEFAULTS;\n\n this.catalog = createCatalog({\n persistKey: 'MUSEUM_OBJECTS_FILTER',\n listPath: '/obiekty',\n searchTab: 'obiekty',\n listModeKey: 'MUSEUM_OBJECTS_LIST_MODE',\n ssrRead: 'route',\n // Mobile mockup (2300:51189) has the grid only — the view toggle is\n // hidden below md, so a stored list view does not apply there.\n mobileListModeBelow: 768,\n ...catalogOptions,\n defaults,\n facade: this.facade,\n });\n\n this.isBrowser = this.catalog.isBrowser;\n this.routeList = this.catalog.routeList;\n this.listMode = this.catalog.listMode;\n this.searchEnabled = this.catalog.searchEnabled;\n this.barPhrase = this.catalog.barPhrase;\n this.isLoading = this.catalog.isLoading;\n this.hasError = this.catalog.hasError;\n this.totalCount = this.catalog.totalCount;\n this.sortKey = this.catalog.sortKey;\n this.selectedPage = this.catalog.selectedPage;\n this.isNewType = computed(\n () => this.objectsCatalogQueryParams()?.['type'] === 'new',\n );\n\n // „więcej ↓” (mobile mockup 2300:51213); the focus moves to the first\n // appended card, without scrolling — the new cards sit right below.\n this.objectsCatalogLoadMore = createCatalogLoadMore<MsObject>({\n list: this.list,\n filter: this.facade.filter,\n totalCount: this.totalCount,\n loading: this.isLoading,\n read: (filter) => this.facade.read(filter),\n defaultLimit: defaults.limit || 20,\n onAppended: (added, firstIndex) => {\n this.loadMoreStatus.set(\n this.objectsCatalogTranslate.instant(\n loadMore.loadedMoreKey ?? OBJECTS_CATALOG_LOADED_MORE_KEY,\n { count: added },\n ),\n );\n if (!added || !this.objectsCatalogBrowser) return;\n this.objectsCatalogTimeouts.later(\n () =>\n this.listContainerElement\n ?.querySelectorAll<HTMLElement>(\n loadMore.itemSelector ?? OBJECTS_CATALOG_ITEM_SELECTOR,\n )\n [firstIndex]?.focus({ preventScroll: true }),\n 0,\n );\n },\n });\n this.items = this.objectsCatalogLoadMore.items;\n this.hasMore = this.objectsCatalogLoadMore.hasMore;\n this.isAppending = this.objectsCatalogLoadMore.isAppending;\n\n // Every loaded card (appended pages included) goes to the page, e.g. for\n // „select all” (MOB-1661). Untracked: the hook's own reads do not re-run it.\n effect(() => {\n const items = this.items();\n untracked(() => this.onCatalogItems(items));\n });\n\n // After a page change from the bottom pagination scroll to the list top\n // once the data has loaded.\n effect(() => {\n const loading = this.isLoading();\n if (\n !loading &&\n this.objectsCatalogScrollAfterLoad &&\n this.objectsCatalogBrowser\n ) {\n this.objectsCatalogScrollAfterLoad = false;\n this.objectsCatalogTimeouts.later(\n () =>\n this.listContainerElement?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n }),\n 0,\n );\n }\n });\n\n // Re-layout masonry on WCAG/contrast changes.\n effect(() => {\n this.objectsCatalogWcag.wcagSettingsChanged();\n\n if (!this.objectsCatalogViewReady) {\n return;\n }\n\n this.objectsCatalogDestroyMasonry();\n this.objectsCatalogInitMasonry();\n });\n\n // Re-layout masonry when the list changes.\n effect(() => {\n const items = this.items();\n const mode = this.listMode();\n\n if (items && mode === ListMode.masonryGrid) {\n this.objectsCatalogDestroyMasonry();\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 150,\n );\n }\n });\n\n // Initialise masonry once the grid component is present.\n effect(() => {\n const masonry = this.objectsCatalogMasonry();\n const mode = this.listMode();\n const items = this.items();\n\n if (masonry && mode === ListMode.masonryGrid && items?.length) {\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 250,\n );\n }\n });\n\n if (seo) this.applyListSeo(seo);\n }\n\n /** The list root element (`#listContainer`). */\n protected get listContainerElement(): HTMLElement | undefined {\n return this.objectsCatalogListContainer()?.nativeElement;\n }\n\n /**\n * „więcej ↓” — reads the next page and appends it under the current cards\n * (no scrolling, no loader in place of the list).\n */\n loadMore(): void {\n if (this.isLoading() || !this.hasMore()) {\n return;\n }\n // Cleared first, so the live region changes — and is announced — even\n // when the next page brings the same number of cards.\n this.loadMoreStatus.set('');\n this.objectsCatalogLoadMore.loadMore();\n }\n\n retryLoad(): void {\n this.catalog.retry();\n }\n\n pageChange(page: number): void {\n this.catalog.setPage(page);\n }\n\n /** Page change from the bottom pagination — scrolls to the list once loaded. */\n bottomPageChange(page: number): void {\n this.objectsCatalogScrollAfterLoad = true;\n this.pageChange(page);\n }\n\n /**\n * In the catalog it reads with the phrase from the first page. In a search\n * tab the address is the only source of the phrase (MOB-1818): a new one\n * opens `/wyszukaj/:text/obiekty`, a blank one `/obiekty` with the other\n * filters.\n */\n search(phrase: string): void {\n this.catalog.search(phrase);\n }\n\n /**\n * A filter change in a search tab (MOB-1818) opens `/obiekty` with the whole\n * filter, the phrase (`filter[phrase]`), the sort and the page size instead\n * of narrowing the results in place.\n */\n openInCatalog(filter: ICrudFilter): void {\n this.catalog.openInList(filter);\n }\n\n onListMode(value: ListMode): void {\n const newMode =\n value === ListMode.masonryGrid ? ListMode.masonryGrid : ListMode.desktop;\n\n this.catalog.setListMode(newMode);\n // Below the mobile breakpoint the mode is forced and the toggle ignored.\n if (this.listMode() !== newMode) return;\n\n if (newMode !== ListMode.masonryGrid) {\n this.objectsCatalogDestroyMasonry();\n } else {\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 100,\n );\n }\n }\n\n ngAfterViewInit(): void {\n this.objectsCatalogInitMasonry();\n this.objectsCatalogViewReady = true;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.objectsCatalogDestroyMasonry();\n }\n\n /**\n * Called with every loaded card (appended „więcej ↓” pages included) each\n * time they change, untracked. No-op; e.g. Podlasie feeds its\n * `SelectionStore` here.\n */\n protected onCatalogItems(items: MsObject[]): void {\n void items;\n }\n\n /**\n * Full list meta (title, description, canonical, og), not in a search tab —\n * there the search page sets them, and the canonical of the list must not\n * point at a phrase url (MOB-1064). The description goes out as translated.\n */\n protected applyListSeo(seo: IObjectsCatalogSeo): void {\n if (this.catalog.searchEnabled()) return;\n\n const t = (key: string): string =>\n this.objectsCatalogTranslate.instant(key);\n this.objectsCatalogSeoService.apply({\n title: `${capitalize(t(seo.titleKey))} - ${capitalize(t(seo.siteNameKey ?? 'MODEL.mainTitle'))}`,\n description: t(seo.descriptionKey),\n type: 'website',\n url: seo.url,\n });\n }\n\n private objectsCatalogInitMasonry(): void {\n if (\n this.listMode() !== ListMode.masonryGrid ||\n !this.objectsCatalogBrowser\n ) {\n return;\n }\n // The MasonryGridComponent owns the masonry library and the image-load\n // handling; it packs the projected `.masonry-item` cards.\n this.objectsCatalogMasonry()?.initMasonry();\n }\n\n private objectsCatalogDestroyMasonry(): void {\n this.objectsCatalogMasonry()?.destroyMasonry();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["smartInitialState","smartGetReducer"],"mappings":"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"}
1
+ {"version":3,"file":"smartsoft001-mobilems-objects-shell-angular.mjs","sources":["../../../../../../packages/objects/shell/angular/src/lib/services/objects/objects.service.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.facade.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.reducer.ts","../../../../../../packages/objects/shell/angular/src/lib/components/list/list.component.ts","../../../../../../packages/objects/shell/angular/src/lib/components/list/list.component.html","../../../../../../packages/objects/shell/angular/src/lib/components/filters/filters.component.ts","../../../../../../packages/objects/shell/angular/src/lib/components/filters/filters.component.html","../../../../../../packages/objects/shell/angular/src/lib/components/components.module.ts","../../../../../../packages/objects/shell/angular/src/lib/services/objects-data/objects-data.service.ts","../../../../../../packages/objects/shell/angular/src/lib/services/object-media/object-media.service.ts","../../../../../../packages/objects/shell/angular/src/lib/services/index.ts","../../../../../../packages/objects/shell/angular/src/lib/objects.module.ts","../../../../../../packages/objects/shell/angular/src/lib/objects-shared.module.ts","../../../../../../packages/objects/shell/angular/src/lib/+state/objects.selectors.ts","../../../../../../packages/objects/shell/angular/src/lib/pages/list/list.component.ts","../../../../../../packages/objects/shell/angular/src/lib/pages/item/item.component.ts","../../../../../../packages/objects/shell/angular/src/lib/models/objects-filters.model.ts","../../../../../../packages/objects/shell/angular/src/lib/catalog/objects-catalog-base.component.ts","../../../../../../packages/objects/shell/angular/src/lib/catalog/object-details-base.component.ts","../../../../../../packages/objects/shell/angular/src/lib/tools/object-detail.ts","../../../../../../packages/objects/shell/angular/src/lib/tools/ask-about-object.ts","../../../../../../packages/objects/shell/angular/src/smartsoft001-mobilems-objects-shell-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { CrudBaseService } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n@Injectable()\nexport class ObjectsService extends CrudBaseService<MsObject> {\n getUrlNameForDetails(): string {\n return 'object';\n }\n\n getUrlNameForList(): string {\n return 'Object';\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { CrudFacade } from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsService } from '../services/objects/objects.service';\n\n@Injectable()\nexport class ObjectsFacade extends CrudFacade<MsObject> {\n protected service = inject(ObjectsService);\n\n async downloadPdf(item: { title: string; id: string }): Promise<void> {\n await this.service.downloadPdf(item.title, item.id);\n }\n}\n","import { Action } from '@ngrx/store';\nimport {\n State as SmartState,\n initialState as smartInitialState,\n getReducer as smartGetReducer,\n} from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n// import {objectsFacade} from \"./objects.facade\";\n\nexport type State = SmartState<MsObject>;\n\nexport const initialState = {\n ...smartInitialState,\n};\n\nconst objectsReducer = (state = initialState, action: any) => {\n switch (action.type) {\n //case objectsFacade.name + ' test':\n // return {\n // ...state,\n // loaded: false,\n // }\n\n default:\n return smartGetReducer('objects')(state, action);\n }\n};\n\nexport function getReducer() {\n return (state: any, action: Action) => {\n return objectsReducer(state, action);\n };\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n TemplateRef,\n contentChild,\n inject,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport { ObjectsFacade } from '../../+state/objects.facade';\n\n@Component({\n selector: 'smart-mobilems-objects-list',\n templateUrl: './list.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgTemplateOutlet],\n})\nexport class ListComponent {\n private facade = inject(ObjectsFacade);\n\n list = this.facade.list;\n loading = this.facade.loading;\n\n itemTpl = contentChild<TemplateRef<any>>('itemTpl');\n loadingTpl = contentChild<TemplateRef<any>>('loadingTpl');\n}\n","@if (list(); as listData) {\n @if (listData && itemTpl()) {\n @for (item of listData; track item) {\n <ng-container\n *ngTemplateOutlet=\"itemTpl(); context: { $implicit: item }\"\n ></ng-container>\n }\n }\n}\n\n@if (loading()) {\n @if (loadingTpl()) {\n <ng-container *ngTemplateOutlet=\"loadingTpl()\"></ng-container>\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, ChangeDetectionStrategy } from '@angular/core';\n\nimport { FiltersBaseComponent } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\n@Component({\n selector: 'smart-mobilems-objects-filters',\n templateUrl: './filters.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgTemplateOutlet],\n})\nexport class FiltersComponent extends FiltersBaseComponent<MsObject> {}\n","<ng-container\n *ngTemplateOutlet=\"contentTpl(); context: { $implicit: context }\"\n></ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { FiltersComponent } from './filters/filters.component';\nimport { ListComponent } from './list/list.component';\n\nconst COMPONENTS = [FiltersComponent, ListComponent];\n\n@NgModule({\n imports: [CommonModule, COMPONENTS],\n exports: [...COMPONENTS],\n})\nexport class ComponentsModule {}\n","import { isPlatformServer } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable, isDevMode, PLATFORM_ID } from '@angular/core';\nimport {\n catchError,\n expand,\n firstValueFrom,\n from,\n map,\n mergeMap,\n Observable,\n of,\n reduce,\n retry,\n switchMap,\n tap,\n throwError,\n timer,\n toArray,\n} from 'rxjs';\n\nimport {\n DICTIONARY_PAGE_SIZE,\n type IDictionaryEntry,\n type IDictionaryPage,\n} from '@smartsoft001-mobilems/angular';\n\nimport { ObjectsService } from '../objects/objects.service';\n\n/** Pause before the only retry of `related` after a network error (ms). */\nconst RELATED_RETRY_DELAY = 500;\n\n/** Response of `GET object/:id/related`. */\nexport interface IObjectRelated {\n objects: Array<{ id: number | string }>;\n collections: Array<{ id: number | string }>;\n articles: Array<{ id: number | string }>;\n}\n\n/**\n * A public (thematic) collection from the `GET public-collections/page/{n}`\n * list — as much as the object card (\"Related collections\") and the filters\n * panel need.\n */\nexport interface IObjectCollectionSummary {\n id: number | string;\n title: string;\n publicationDate: string | null;\n /** Number of objects in the collection — the page size of the membership check. */\n itemCount: number | null;\n}\n\ninterface IPublicCollectionsPageResponse {\n data?: {\n items?: Array<{\n id: number | string;\n title?: string | null;\n publicationDate?: string | null;\n itemCount?: number | null;\n }> | null;\n paginatorDetails?: { totalPagesCount?: number | null } | null;\n } | null;\n}\n\ninterface IObjectIdsPageResponse {\n data?: {\n items?: Array<{ id: number | string }> | null;\n paginatorDetails?: { totalPagesCount?: number | null } | null;\n } | null;\n}\n\n/** Page size of the public collections list (the API accepts up to 500). */\nconst PUBLIC_COLLECTIONS_PAGE_SIZE = 100;\n\n/**\n * Segregations of the `ArchaeologicalData` dictionary — per the MobileMS task\n * (Kanbanize 50040, MOB-1844): site towns, periods (epochs) and cultures.\n */\nexport type ArchaeologicalSegregation =\n 'ArcheoTown' | 'ArcheoPeriod' | 'ArcheoCulture';\n\ninterface IDictionaryPageResponse {\n data?: {\n items?: IDictionaryEntry[];\n paginatorDetails?: { totalPagesCount?: number };\n } | null;\n}\n\n/** Page size of `search/Object` when checking an object's membership. */\nconst COLLECTION_OBJECTS_PAGE_SIZE = 500;\n/** How many collections are checked at once (API 429 limit). */\nconst COLLECTION_LOOKUP_CONCURRENCY = 4;\n\n/**\n * The API answers 404 `NO_RESULTS_FOR_GIVEN_QUERY` instead of an empty list —\n * only that 404 means \"no results\"; any other 404 (wrong address, proxy) is an error.\n */\nconst isNoResults = (error: HttpErrorResponse): boolean =>\n error?.status === 404 &&\n (error.error as { message?: string } | null)?.message ===\n 'NO_RESULTS_FOR_GIVEN_QUERY';\n\n/**\n * `ObjectsService` plus the reads of the object details page and the filter\n * dictionaries. A subclass, so `ObjectsService` (the `CrudService` of the\n * objects module) stays unchanged. Request URLs, parameter order included,\n * are transfer cache keys: keep them as they are.\n */\n@Injectable()\nexport class ObjectsDataService extends ObjectsService {\n private readonly objectsDataIsServer = isPlatformServer(inject(PLATFORM_ID));\n\n /**\n * Counts a visit of the object card: `POST api/object/:id/visit`. Browser\n * only — the caller runs it under `isPlatformBrowser` and catches its errors.\n */\n logVisit(id: number | string): Promise<void> {\n const cardUrl: string = this.config.apiUrl + 'api/object/' + id + '/visit';\n return firstValueFrom(this.http.post<void>(cardUrl, {}));\n }\n\n /**\n * \"You may also be interested in\" — `GET object/:id/related` (objects,\n * collections, articles). A network error (status 0) is retried once; any\n * other error, or a second failed request, goes on to the `rxResource`\n * (error state — the section stays hidden, `reload()` retries). In dev mode\n * the error is logged, except a 404 on the server: there `related` starts\n * next to the card (MOB-1850), so a missing object gives two 404s and the\n * card view shows the error. In the browser `related` follows the card — a\n * 404 is unexpected there and stays in the console.\n */\n getRelated(id: number | string): Observable<IObjectRelated> {\n return this.http\n .get<{\n data?: Partial<IObjectRelated> | null;\n }>(`${this.config.apiUrl}object/${id}/related`)\n .pipe(\n retry({\n count: 1,\n delay: (error: HttpErrorResponse) =>\n error?.status === 0\n ? timer(RELATED_RETRY_DELAY)\n : throwError(() => error),\n }),\n map((response) => ({\n objects: response?.data?.objects ?? [],\n collections: response?.data?.collections ?? [],\n articles: response?.data?.articles ?? [],\n })),\n tap({\n error: (error: HttpErrorResponse) => {\n if (\n isDevMode() &&\n !(this.objectsDataIsServer && error?.status === 404)\n ) {\n console.error(`object/${id}/related`, error);\n }\n },\n }),\n );\n }\n\n /**\n * One page of the public collections list, newest publication first\n * (`sort=publicationDate-desc`), with the phrase in `filter[phrase]` (the\n * \"Field description\" document: \"Search in collections: filter:phrase\").\n * 404 `NO_RESULTS_FOR_GIVEN_QUERY` is an empty page, any other error propagates.\n */\n loadPublicCollectionsPage(\n page = 1,\n query?: string,\n ): Observable<{\n items: IObjectCollectionSummary[];\n totalPagesCount: number;\n }> {\n const phrase = query?.trim();\n const url =\n `${this.config.apiUrl}public-collections/page/${page}` +\n `?maxPerPage=${PUBLIC_COLLECTIONS_PAGE_SIZE}&sort=publicationDate-desc` +\n (phrase ? `&filter[phrase]=${encodeURIComponent(phrase)}` : '');\n return this.http.get<IPublicCollectionsPageResponse>(url).pipe(\n map((response) => ({\n items: (response?.data?.items ?? [])\n .filter((item) => item && item.id !== null && item.id !== undefined)\n .map((item) => ({\n id: item.id,\n title: item.title?.trim() ?? '',\n publicationDate: item.publicationDate ?? null,\n itemCount:\n typeof item.itemCount === 'number' ? item.itemCount : null,\n })),\n totalPagesCount: Math.max(\n 1,\n response?.data?.paginatorDetails?.totalPagesCount ?? 1,\n ),\n })),\n catchError((error: HttpErrorResponse) =>\n isNoResults(error)\n ? of({ items: [] as IObjectCollectionSummary[], totalPagesCount: 1 })\n : throwError(() => error),\n ),\n );\n }\n\n /**\n * Public collections as the dictionary of the \"Thematic collection\" field in\n * the advanced filters (MOB-1844): `filter[entryCollections]` in\n * `search/Object` takes ids from `public-collections`, not from the\n * `ECollection` dictionary.\n */\n loadCollectionsDictionary(\n page = 1,\n query?: string,\n ): Observable<IDictionaryPage> {\n return this.loadPublicCollectionsPage(page, query).pipe(\n map((result) => ({\n items: result.items.map((item) => ({\n id: Number(item.id),\n name: item.title,\n })),\n totalPagesCount: result.totalPagesCount,\n })),\n );\n }\n\n /**\n * Dictionary of the \"Archaeological filters\" fields (MOB-1844). In Muza it is\n * `ArchaeologicalData` segregated into `ArcheoTown|ArcheoPeriod|ArcheoCulture`\n * (Kanbanize 50040), but MobileMS exposed each segregation as its own\n * dictionary type: `dictionary/ArcheoTown/search/page/{n}` (develop\n * 2026-10-21 — the type is recognised, `ArchaeologicalData` still 409). Same\n * path and shape as the framework's `DataService.loadFilterDictionary`. Until\n * production has these types the API answers 409 and the field shows a load error.\n */\n loadArchaeologicalDictionary(\n segregation: ArchaeologicalSegregation,\n page = 1,\n query?: string,\n ): Observable<IDictionaryPage> {\n const phrase = query?.trim();\n // No phrase, no `q` — the API treats an empty `q=` as a query with no results.\n const url =\n `${this.config.apiUrl}api/dictionary/${segregation}/search/page/${page}` +\n `?maxPerPage=${DICTIONARY_PAGE_SIZE}&_type=query` +\n (phrase ? `&q=${encodeURIComponent(phrase)}` : '');\n return this.http.get<IDictionaryPageResponse>(url).pipe(\n map((response) => ({\n items: response?.data?.items ?? [],\n totalPagesCount: response?.data?.paginatorDetails?.totalPagesCount ?? 1,\n })),\n );\n }\n\n /** All public collections (consecutive pages of the list). */\n loadAllPublicCollections(): Observable<IObjectCollectionSummary[]> {\n return this.loadPublicCollectionsPage(1).pipe(\n expand((result, index) =>\n index + 2 <= result.totalPagesCount\n ? this.loadPublicCollectionsPage(index + 2)\n : [],\n ),\n reduce(\n (all, result) => [...all, ...result.items],\n [] as IObjectCollectionSummary[],\n ),\n );\n }\n\n /**\n * \"Related collections\" of the object card per the \"Field description\"\n * document: `search/Object` with `filter[entryCollections]`, sorted by\n * publication date. The API gives no reverse direction (`portalCollections`\n * and `related.collections` are empty also for objects in a collection), so\n * for each public collection we check whether its objects contain this\n * object — a few collections at a time, in list order. A collection that\n * could not be checked is skipped; a failed list means no section (an empty\n * list), not a page error.\n */\n loadRelatedCollections(\n objectId: number | string,\n ): Observable<IObjectCollectionSummary[]> {\n return this.loadAllPublicCollections().pipe(\n switchMap((collections) =>\n from(collections).pipe(\n mergeMap(\n (collection) =>\n this.objectsDataCollectionContains(collection, objectId).pipe(\n map((contains) => (contains ? collection : null)),\n ),\n COLLECTION_LOOKUP_CONCURRENCY,\n ),\n toArray(),\n map((matches) =>\n collections.filter((collection) => matches.includes(collection)),\n ),\n ),\n ),\n catchError(() => of([] as IObjectCollectionSummary[])),\n );\n }\n\n /** Whether `search/Object` with the collection's `filter[entryCollections]` contains the object; an error → unknown → `false`. */\n private objectsDataCollectionContains(\n collection: IObjectCollectionSummary,\n objectId: number | string,\n ): Observable<boolean> {\n const wanted = String(objectId);\n const pageSize = Math.min(\n COLLECTION_OBJECTS_PAGE_SIZE,\n Math.max(1, collection.itemCount ?? COLLECTION_OBJECTS_PAGE_SIZE),\n );\n const load = (page: number) =>\n this.http\n .get<IObjectIdsPageResponse>(\n `${this.config.apiUrl}search/Object/page/${page}` +\n `?maxPerPage=${pageSize}` +\n `&filter[entryCollections][]=${encodeURIComponent(String(collection.id))}`,\n )\n .pipe(\n map((response) => ({\n found: (response?.data?.items ?? []).some(\n (item) => String(item?.id) === wanted,\n ),\n totalPagesCount: Math.max(\n 1,\n response?.data?.paginatorDetails?.totalPagesCount ?? 1,\n ),\n })),\n // A collection without objects → 404 `NO_RESULTS_FOR_GIVEN_QUERY`.\n catchError((error: HttpErrorResponse) =>\n isNoResults(error)\n ? of({ found: false, totalPagesCount: 1 })\n : throwError(() => error),\n ),\n );\n return load(1).pipe(\n expand((result, index) =>\n !result.found && index + 2 <= result.totalPagesCount\n ? load(index + 2)\n : [],\n ),\n reduce((found, result) => found || result.found, false),\n catchError(() => of(false)),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { FileUrlService } from '@smartsoft001-mobilems/angular';\nimport { MsFile } from '@smartsoft001-mobilems/models';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { FileType, FormFeatureType } from '../../models';\n\n/** A gallery item (full size, for fullscreen). */\nexport interface IObjectGalleryItem {\n title?: string;\n image?: MsFile;\n file?: MsFile;\n}\n\n/**\n * Shared listing of an object's media (the main image + `additionalImages`\n * filtered by `formFeature`) — used by the details page image viewer\n * (MOB-1801), the hero gallery, the thumbnails and the HD images section.\n */\n@Injectable({ providedIn: 'root' })\nexport class ObjectMediaService {\n private readonly objectMediaFileUrl = inject(FileUrlService);\n\n /** Gallery items (full size, for fullscreen). */\n galleryItems(\n obj: MsObject | undefined,\n types: FormFeatureType[],\n includeMainImage = true,\n ): IObjectGalleryItem[] {\n if (!obj) return [];\n\n const out: IObjectGalleryItem[] = [];\n\n if (obj.image && includeMainImage) {\n const url = this.objectMediaFileUrl.get(obj.image);\n if (!url?.includes('assets/no-image.svg')) {\n out.push({ title: obj.title, image: obj.image });\n }\n }\n\n for (const img of this.objectMediaAdditional(obj, types)) {\n const url = this.objectMediaFileUrl.get(img as unknown as MsFile);\n if (!url?.includes('assets/no-image.svg')) {\n out.push({ title: obj.title, image: img as unknown as MsFile });\n }\n }\n\n return out;\n }\n\n /** Thumbnail URLs (`cache` mode + a forced `.jpg` for the CDN). */\n thumbnailUrls(\n obj: MsObject | undefined,\n types: FormFeatureType[],\n includeMainImage = true,\n ): string[] {\n if (!obj) return [];\n\n const urls: string[] = [];\n\n if (obj.image && includeMainImage) {\n const url = this.objectMediaJpg(\n this.objectMediaFileUrl.get(obj.image, 'cache'),\n );\n if (url && !url.includes('assets/no-image.svg')) {\n urls.push(url);\n }\n }\n\n for (const img of this.objectMediaAdditional(obj, types)) {\n const url = this.objectMediaJpg(\n this.objectMediaFileUrl.get(img as unknown as MsFile, 'cache'),\n );\n if (url && !url.includes('assets/no-image.svg')) {\n urls.push(url);\n }\n }\n\n return urls;\n }\n\n /**\n * Whether the object has files of the types (video, 3D model) — by\n * `filePath`, because `FileUrlService` returns a placeholder for\n * non-image extensions.\n */\n hasFiles(obj: MsObject | undefined, types: FormFeatureType[]): boolean {\n if (!obj) return false;\n return this.objectMediaAdditional(obj, types).some(\n (file) => !!file?.filePath,\n );\n }\n\n private objectMediaAdditional(\n obj: MsObject,\n types: FormFeatureType[],\n ): FileType[] {\n const additional = (obj as MsObject & { additionalImages?: FileType[] })\n .additionalImages;\n if (!Array.isArray(additional)) return [];\n\n return (additional as unknown as FileType[])\n .filter((img) => types.includes(img?.formFeature))\n .sort((a, b) => (a?.position ?? 0) - (b?.position ?? 0));\n }\n\n /** Replaces the extension with `.jpg` — CDN cache compatibility. */\n private objectMediaJpg(path: string): string {\n const lastDotIndex = path.lastIndexOf('.');\n if (lastDotIndex > -1) {\n return path.substring(0, lastDotIndex) + '.jpg';\n }\n return path + '.jpg';\n }\n}\n","import { CrudService } from '@smartsoft001/crud-shell-angular';\n\nimport { ObjectsService } from './objects/objects.service';\nimport { ObjectsDataService } from './objects-data/objects-data.service';\n\nexport * from './objects/objects.service';\nexport * from './objects-data/objects-data.service';\nexport * from './object-media/object-media.service';\n\nexport const SERVICES = [\n ObjectsService,\n ObjectsDataService,\n {\n provide: CrudService,\n useClass: ObjectsService,\n },\n];\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FILE_SERVICE_CONFIG, IFileServiceConfig } from '@smartsoft001/angular';\nimport {\n CrudConfig,\n CrudCoreModule,\n CrudFullConfig,\n ICrudModuleOptionsWithoutRoutng,\n} from '@smartsoft001/crud-shell-angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport {\n provideInheritedSharedConfig,\n SharedModule,\n} from '@smartsoft001-mobilems/angular';\n\nimport { ObjectsFacade } from './+state/objects.facade';\nimport { getReducer } from './+state/objects.reducer';\nimport { ComponentsModule } from './components';\nimport { SERVICES } from './services';\n\n@NgModule({\n declarations: [],\n providers: [...SERVICES, ObjectsFacade],\n imports: [SharedModule, ComponentsModule, CrudCoreModule],\n exports: [ComponentsModule],\n})\nexport class ObjectsModule {\n static forFeature<T extends IEntity<string>>(\n options: ICrudModuleOptionsWithoutRoutng<T>,\n ): ModuleWithProviders<ObjectsModule> {\n if (!options.config.reducerFactory)\n options.config.reducerFactory = getReducer;\n return {\n ngModule: ObjectsModule,\n providers: [\n provideInheritedSharedConfig(options.config.apiUrl),\n { provide: CrudConfig, useValue: options.config },\n { provide: CrudFullConfig, useValue: options.config },\n {\n provide: FILE_SERVICE_CONFIG,\n useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,\n },\n ],\n };\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FILE_SERVICE_CONFIG, IFileServiceConfig } from '@smartsoft001/angular';\nimport {\n CrudConfig,\n CrudFullConfig,\n CrudModule,\n ICrudModuleOptionsWithoutRoutng,\n} from '@smartsoft001/crud-shell-angular';\nimport { IEntity } from '@smartsoft001/domain-core';\n\nimport {\n provideInheritedSharedConfig,\n SharedModule,\n} from '@smartsoft001-mobilems/angular';\n\nimport { ObjectsFacade } from './+state/objects.facade';\nimport { getReducer } from './+state/objects.reducer';\nimport { ComponentsModule } from './components';\nimport { SERVICES } from './services';\n\n@NgModule({\n declarations: [],\n providers: [...SERVICES, ObjectsFacade],\n imports: [SharedModule, ComponentsModule, CrudModule],\n exports: [ComponentsModule, CrudModule],\n})\nexport class ObjectsSharedModule {\n static forFeature<T extends IEntity<string>>(\n options: ICrudModuleOptionsWithoutRoutng<T>,\n ): ModuleWithProviders<ObjectsSharedModule> {\n if (!options.config.reducerFactory)\n options.config.reducerFactory = getReducer;\n return {\n ngModule: ObjectsSharedModule,\n providers: [\n provideInheritedSharedConfig(options.config.apiUrl),\n { provide: CrudConfig, useValue: options.config },\n { provide: CrudFullConfig, useValue: options.config },\n {\n provide: FILE_SERVICE_CONFIG,\n useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,\n },\n ],\n };\n }\n}\n","import {\n createFeatureSelector,\n //createSelector\n} from '@ngrx/store';\n\nimport { State } from './objects.reducer';\n\nexport const getObjectsState = createFeatureSelector<State>('objects');\n\n//export const getobjectsTest = createSelector(\n// getobjectsState,\n// (state) => state.test\n//);\n","import { Directive, inject, Signal } from '@angular/core';\nimport { CrudListPageBaseComponent } from '@smartsoft001/crud-shell-angular';\n\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsFacade } from '../../+state';\n\n@Directive()\nexport abstract class ObjectsListComponent extends CrudListPageBaseComponent<MsObject> {\n protected readonly facade = inject(ObjectsFacade);\n\n list = this.facade.list as Signal<MsObject[]>;\n loading = this.facade.loading;\n filter = this.facade.filter;\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrudItemPageBaseComponent } from '@smartsoft001/crud-shell-angular';\n\nimport { SeoService, TranslationService } from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsFacade } from '../../+state';\n\n@Directive()\nexport abstract class ObjectsItemComponent extends CrudItemPageBaseComponent<MsObject> {\n protected readonly route = inject(ActivatedRoute);\n protected readonly seoService = inject(SeoService);\n protected readonly translationService = inject(TranslationService);\n protected readonly params = toSignal(this.route.params);\n\n override facade = inject(ObjectsFacade);\n\n readonly loading = this.facade.loading;\n readonly item = this.facade.selected;\n /** @deprecated No museum uses it; download the card through the app's own download service. */\n readonly isPdfDownloading = signal(false);\n\n protected constructor() {\n super();\n\n effect(() => {\n const params = this.params();\n\n const id = params['id'];\n if (id) {\n this.facade.select(id);\n }\n });\n }\n\n /** @deprecated No museum uses it; download the card through the app's own download service. */\n async onDownload(): Promise<void> {\n this.isPdfDownloading.set(true);\n try {\n await this.facade.downloadPdf({\n id: this.item()?.id.toString() || '',\n title: this.item()?.title as string,\n });\n } catch (error) {\n console.error('PDF download failed:', error);\n } finally {\n this.isPdfDownloading.set(false);\n }\n }\n}\n","import { MsFile } from '@smartsoft001-mobilems/models';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nexport type SortType =\n 'random' | 'date-asc' | 'date-desc' | 'name-asc' | 'name-desc';\n\nexport type IKeyValue = {\n key: string;\n value?: string;\n};\n\nexport enum AdvancedFilterType {\n CREATORS = 'creators',\n AUTHORS = 'authors',\n MATERIALS = 'materials',\n TECHNIQUES = 'techniques',\n CREATE_PLACES = 'createPlaces',\n KEYWORDS = 'keywords',\n}\n\nexport enum FormFeatureType {\n MODEL_3D = 1,\n PHOTO_360 = 2,\n IMAGES = 3,\n AUDIO = 7,\n AUDIO_DESKRYPCJA = 8,\n VIDEO = 9,\n ORTHOGRAPHY = 11,\n OTHER = 13,\n IMAGES_HD = 14,\n VIRTUAL_WALK = 15,\n ANIMATION = 20,\n}\n\nexport interface IMultimediaDictionaryItem {\n id: FormFeatureType;\n translationKey: string;\n}\n\n/**\n * Dictionary of multimedia types with their translation keys.\n * Use with TranslateService to get localized names.\n */\nexport const MULTIMEDIA_DICTIONARY: IMultimediaDictionaryItem[] = [\n {\n id: FormFeatureType.IMAGES,\n translationKey: 'OBJECTS.filters.multimedia.images',\n },\n {\n id: FormFeatureType.IMAGES_HD,\n translationKey: 'OBJECTS.filters.multimedia.galleryHD',\n },\n {\n id: FormFeatureType.MODEL_3D,\n translationKey: 'OBJECTS.filters.multimedia.model3D',\n },\n {\n id: FormFeatureType.AUDIO,\n translationKey: 'OBJECTS.filters.multimedia.audio',\n },\n {\n id: FormFeatureType.AUDIO_DESKRYPCJA,\n translationKey: 'OBJECTS.filters.multimedia.audioDescription',\n },\n {\n id: FormFeatureType.VIDEO,\n translationKey: 'OBJECTS.filters.multimedia.video',\n },\n {\n id: FormFeatureType.ANIMATION,\n translationKey: 'OBJECTS.filters.multimedia.animation',\n },\n {\n id: FormFeatureType.VIRTUAL_WALK,\n translationKey: 'OBJECTS.filters.multimedia.virtualWalk',\n },\n {\n id: FormFeatureType.OTHER,\n translationKey: 'OBJECTS.filters.multimedia.other',\n },\n];\n\nexport type FileType = Omit<MsFile, 'formFeature'> & {\n formFeature: FormFeatureType;\n};\n\ninterface Model3DFile {\n id: number;\n filePath: string;\n extension: string;\n altText: string | null;\n fileName: string;\n}\n\nexport interface IModel3DObject {\n formFeature: FormFeatureType;\n files: Model3DFile[];\n description: string | null;\n iframeSource: string | null;\n iframeHtml: string | null;\n isRemote: boolean;\n originalDimensions: string | null;\n id: number;\n position: number;\n filePath: string;\n extension: string;\n altText: string | null;\n altTextEn: string | null;\n vimeoUrl: string | null;\n}\n\nexport interface IAnimationObject {\n formFeature: FormFeatureType;\n files: MsFile[];\n description: string | null;\n iframeSource: string | null;\n iframeHtml: string | null;\n isRemote: boolean;\n originalDimensions: string | null;\n id: number;\n position: number;\n filePath: string;\n extension: string;\n altText: string | null;\n altTextEn: string | null;\n vimeoUrl: string | null;\n}\n\n// Leci z API, nie jest udokumentowane\nexport interface ISpecificObject extends MsObject {\n dimensionTextWithDuration?: string;\n specificDimensionDescription?: string;\n publicationDate?: string;\n authors?: Array<{\n id: number;\n name: string;\n role?: string;\n additionalRoles?: string[];\n comment?: string;\n }>;\n createPlaces?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n materials?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n techniques?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n createdAt?: string | Date;\n createDates?: Array<{\n id: number;\n name: string;\n comment?: string;\n }>;\n visited?: number;\n objectCardDownloadCount?: number;\n shareMuseumObjectMultimediaEnabled?: boolean;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n AfterViewInit,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n PLATFORM_ID,\n Signal,\n signal,\n untracked,\n viewChild,\n WritableSignal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ListMode, PaginationMode } from '@smartsoft001/angular';\nimport { ICrudFilter } from '@smartsoft001/crud-shell-angular';\nimport { capitalize } from '@smartsoft001/utils';\n\nimport {\n createCatalog,\n createCatalogLoadMore,\n createSafeTimeouts,\n ICatalog,\n ICatalogLoadMore,\n ICatalogOptions,\n MasonryGridComponent,\n MuseumSeoService,\n WcagChangesService,\n} from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsListComponent } from '../pages/list/list.component';\n\n/**\n * Filter defaults of the objects list (Muzeum Podlasia): 20 objects per page,\n * newest first. **The key order is part of the contract** — the first read\n * spreads this object first, so it shapes the facade filter, the persisted\n * `MUSEUM_OBJECTS_FILTER` value and the `#base64` hash.\n */\nexport const OBJECTS_CATALOG_DEFAULTS: ICrudFilter = {\n paginationMode: PaginationMode.singlePage,\n sortBy: 'publication-date',\n sortDesc: true,\n offset: 0,\n limit: 20,\n};\n\n/** List SEO: `<title> - <site>`, a raw description and the canonical url. */\nexport interface IObjectsCatalogSeo {\n /** Translation key of the page title, e.g. `PAGE_TITLES.objects`. */\n titleKey: string;\n /** Translation key of the description — not capitalised. */\n descriptionKey: string;\n /** Translation key of the site name. Default `MODEL.mainTitle`. */\n siteNameKey?: string;\n /** Canonical url of the list, e.g. `/obiekty`. */\n url: string;\n}\n\nexport const OBJECTS_CATALOG_SEO: IObjectsCatalogSeo = {\n titleKey: 'PAGE_TITLES.objects',\n descriptionKey: 'HOME.collectionsDescription',\n siteNameKey: 'MODEL.mainTitle',\n url: '/obiekty',\n};\n\n/** Focus target and live-region message of „więcej ↓” (load more). */\nexport interface IObjectsCatalogLoadMore {\n /** Cards inside `#listContainer`; the first appended one gets the focus. */\n itemSelector?: string;\n /** Translation key announced after a page is appended (`{ count }`). */\n loadedMoreKey?: string;\n}\n\nconst OBJECTS_CATALOG_ITEM_SELECTOR =\n '[data-testid=\"objects-grid-item-link\"], [data-testid=\"objects-list-item\"]';\nconst OBJECTS_CATALOG_LOADED_MORE_KEY = 'OBJECTS.loadedMore';\n\nexport interface IObjectsCatalogOptions extends Partial<\n Omit<ICatalogOptions, 'facade'>\n> {\n /** Applied on creation, skipped in a search tab; `null` — no SEO. */\n seo?: IObjectsCatalogSeo | null;\n loadMore?: IObjectsCatalogLoadMore;\n}\n\n/**\n * Base of an objects list page on the shared catalog engine\n * (`createCatalog`): first read (also in SSR when the route carries the\n * filter), persistence, page, search, the read guard, the mobile list mode,\n * „więcej ↓”, the masonry lifecycle and the list SEO. The page keeps its\n * template.\n *\n * ```ts\n * export class ListComponent extends ObjectsCatalogBaseComponent {\n * constructor() {\n * super();\n * }\n * }\n * ```\n *\n * The template holds a `#listContainer` element (scrolled to after a page\n * change from the bottom pagination; it holds the cards focused by load\n * more) and a `smart-mobilems-masonry-grid` in the grid mode.\n */\n@Directive()\nexport abstract class ObjectsCatalogBaseComponent\n extends ObjectsListComponent\n implements AfterViewInit\n{\n readonly ListMode = ListMode;\n protected readonly catalog: ICatalog;\n\n readonly isBrowser: Signal<boolean>;\n /** The route set the filter, so the list is read and rendered in SSR too. */\n readonly routeList: Signal<boolean>;\n readonly listMode: Signal<ListMode>;\n readonly searchEnabled: Signal<boolean | undefined>;\n readonly barPhrase: Signal<string>;\n readonly isLoading: Signal<boolean>;\n readonly hasError: Signal<unknown>;\n readonly totalCount: Signal<number>;\n /** `publication-date-desc` style key for the toolbar. */\n readonly sortKey: Signal<string | undefined>;\n readonly selectedPage: Signal<number>;\n /** `?type=new` — the page offers the newest-first sort options. */\n readonly isNewType: Signal<boolean>;\n\n /** Cards on the list — with „więcej ↓” previous pages + the current one. */\n readonly items: Signal<MsObject[]>;\n /** There are results after the current page. */\n readonly hasMore: Signal<boolean>;\n /** The next page is loading — the list stays, only the button shows it. */\n readonly isAppending: Signal<boolean>;\n /** Screen reader message after cards were appended. */\n readonly loadMoreStatus: WritableSignal<string> = signal('');\n\n private readonly objectsCatalogTranslate = inject(TranslateService);\n private readonly objectsCatalogSeoService = inject(MuseumSeoService);\n private readonly objectsCatalogWcag = inject(WcagChangesService);\n private readonly objectsCatalogBrowser = isPlatformBrowser(\n inject(PLATFORM_ID),\n );\n private readonly objectsCatalogTimeouts = createSafeTimeouts();\n private readonly objectsCatalogMasonry = viewChild(MasonryGridComponent);\n private readonly objectsCatalogListContainer =\n viewChild<ElementRef<HTMLElement>>('listContainer');\n private readonly objectsCatalogLoadMore: ICatalogLoadMore<MsObject>;\n private objectsCatalogViewReady = false;\n private objectsCatalogScrollAfterLoad = false;\n private readonly objectsCatalogQueryParams = toSignal(\n inject(ActivatedRoute).queryParams,\n );\n\n protected constructor(options: IObjectsCatalogOptions = {}) {\n super();\n const {\n seo = OBJECTS_CATALOG_SEO,\n loadMore = {},\n ...catalogOptions\n } = options;\n const defaults = catalogOptions.defaults ?? OBJECTS_CATALOG_DEFAULTS;\n\n this.catalog = createCatalog({\n persistKey: 'MUSEUM_OBJECTS_FILTER',\n listPath: '/obiekty',\n searchTab: 'obiekty',\n listModeKey: 'MUSEUM_OBJECTS_LIST_MODE',\n ssrRead: 'route',\n // Mobile mockup (2300:51189) has the grid only — the view toggle is\n // hidden below md, so a stored list view does not apply there.\n mobileListModeBelow: 768,\n ...catalogOptions,\n defaults,\n facade: this.facade,\n });\n\n this.isBrowser = this.catalog.isBrowser;\n this.routeList = this.catalog.routeList;\n this.listMode = this.catalog.listMode;\n this.searchEnabled = this.catalog.searchEnabled;\n this.barPhrase = this.catalog.barPhrase;\n this.isLoading = this.catalog.isLoading;\n this.hasError = this.catalog.hasError;\n this.totalCount = this.catalog.totalCount;\n this.sortKey = this.catalog.sortKey;\n this.selectedPage = this.catalog.selectedPage;\n this.isNewType = computed(\n () => this.objectsCatalogQueryParams()?.['type'] === 'new',\n );\n\n // „więcej ↓” (mobile mockup 2300:51213); the focus moves to the first\n // appended card, without scrolling — the new cards sit right below.\n this.objectsCatalogLoadMore = createCatalogLoadMore<MsObject>({\n list: this.list,\n filter: this.facade.filter,\n totalCount: this.totalCount,\n loading: this.isLoading,\n read: (filter) => this.facade.read(filter),\n defaultLimit: defaults.limit || 20,\n onAppended: (added, firstIndex) => {\n this.loadMoreStatus.set(\n this.objectsCatalogTranslate.instant(\n loadMore.loadedMoreKey ?? OBJECTS_CATALOG_LOADED_MORE_KEY,\n { count: added },\n ),\n );\n if (!added || !this.objectsCatalogBrowser) return;\n this.objectsCatalogTimeouts.later(\n () =>\n this.listContainerElement\n ?.querySelectorAll<HTMLElement>(\n loadMore.itemSelector ?? OBJECTS_CATALOG_ITEM_SELECTOR,\n )\n [firstIndex]?.focus({ preventScroll: true }),\n 0,\n );\n },\n });\n this.items = this.objectsCatalogLoadMore.items;\n this.hasMore = this.objectsCatalogLoadMore.hasMore;\n this.isAppending = this.objectsCatalogLoadMore.isAppending;\n\n // Every loaded card (appended pages included) goes to the page, e.g. for\n // „select all” (MOB-1661). Untracked: the hook's own reads do not re-run it.\n effect(() => {\n const items = this.items();\n untracked(() => this.onCatalogItems(items));\n });\n\n // After a page change from the bottom pagination scroll to the list top\n // once the data has loaded.\n effect(() => {\n const loading = this.isLoading();\n if (\n !loading &&\n this.objectsCatalogScrollAfterLoad &&\n this.objectsCatalogBrowser\n ) {\n this.objectsCatalogScrollAfterLoad = false;\n this.objectsCatalogTimeouts.later(\n () =>\n this.listContainerElement?.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n }),\n 0,\n );\n }\n });\n\n // Re-layout masonry on WCAG/contrast changes.\n effect(() => {\n this.objectsCatalogWcag.wcagSettingsChanged();\n\n if (!this.objectsCatalogViewReady) {\n return;\n }\n\n this.objectsCatalogDestroyMasonry();\n this.objectsCatalogInitMasonry();\n });\n\n // Re-layout masonry when the list changes.\n effect(() => {\n const items = this.items();\n const mode = this.listMode();\n\n if (items && mode === ListMode.masonryGrid) {\n this.objectsCatalogDestroyMasonry();\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 150,\n );\n }\n });\n\n // Initialise masonry once the grid component is present.\n effect(() => {\n const masonry = this.objectsCatalogMasonry();\n const mode = this.listMode();\n const items = this.items();\n\n if (masonry && mode === ListMode.masonryGrid && items?.length) {\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 250,\n );\n }\n });\n\n if (seo) this.applyListSeo(seo);\n }\n\n /** The list root element (`#listContainer`). */\n protected get listContainerElement(): HTMLElement | undefined {\n return this.objectsCatalogListContainer()?.nativeElement;\n }\n\n /**\n * „więcej ↓” — reads the next page and appends it under the current cards\n * (no scrolling, no loader in place of the list).\n */\n loadMore(): void {\n if (this.isLoading() || !this.hasMore()) {\n return;\n }\n // Cleared first, so the live region changes — and is announced — even\n // when the next page brings the same number of cards.\n this.loadMoreStatus.set('');\n this.objectsCatalogLoadMore.loadMore();\n }\n\n retryLoad(): void {\n this.catalog.retry();\n }\n\n pageChange(page: number): void {\n this.catalog.setPage(page);\n }\n\n /** Page change from the bottom pagination — scrolls to the list once loaded. */\n bottomPageChange(page: number): void {\n this.objectsCatalogScrollAfterLoad = true;\n this.pageChange(page);\n }\n\n /**\n * In the catalog it reads with the phrase from the first page. In a search\n * tab the address is the only source of the phrase (MOB-1818): a new one\n * opens `/wyszukaj/:text/obiekty`, a blank one `/obiekty` with the other\n * filters.\n */\n search(phrase: string): void {\n this.catalog.search(phrase);\n }\n\n /**\n * A filter change in a search tab (MOB-1818) opens `/obiekty` with the whole\n * filter, the phrase (`filter[phrase]`), the sort and the page size instead\n * of narrowing the results in place.\n */\n openInCatalog(filter: ICrudFilter): void {\n this.catalog.openInList(filter);\n }\n\n onListMode(value: ListMode): void {\n const newMode =\n value === ListMode.masonryGrid ? ListMode.masonryGrid : ListMode.desktop;\n\n this.catalog.setListMode(newMode);\n // Below the mobile breakpoint the mode is forced and the toggle ignored.\n if (this.listMode() !== newMode) return;\n\n if (newMode !== ListMode.masonryGrid) {\n this.objectsCatalogDestroyMasonry();\n } else {\n this.objectsCatalogTimeouts.later(\n () => this.objectsCatalogInitMasonry(),\n 100,\n );\n }\n }\n\n ngAfterViewInit(): void {\n this.objectsCatalogInitMasonry();\n this.objectsCatalogViewReady = true;\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.objectsCatalogDestroyMasonry();\n }\n\n /**\n * Called with every loaded card (appended „więcej ↓” pages included) each\n * time they change, untracked. No-op; e.g. Podlasie feeds its\n * `SelectionStore` here.\n */\n protected onCatalogItems(items: MsObject[]): void {\n void items;\n }\n\n /**\n * Full list meta (title, description, canonical, og), not in a search tab —\n * there the search page sets them, and the canonical of the list must not\n * point at a phrase url (MOB-1064). The description goes out as translated.\n */\n protected applyListSeo(seo: IObjectsCatalogSeo): void {\n if (this.catalog.searchEnabled()) return;\n\n const t = (key: string): string =>\n this.objectsCatalogTranslate.instant(key);\n this.objectsCatalogSeoService.apply({\n title: `${capitalize(t(seo.titleKey))} - ${capitalize(t(seo.siteNameKey ?? 'MODEL.mainTitle'))}`,\n description: t(seo.descriptionKey),\n type: 'website',\n url: seo.url,\n });\n }\n\n private objectsCatalogInitMasonry(): void {\n if (\n this.listMode() !== ListMode.masonryGrid ||\n !this.objectsCatalogBrowser\n ) {\n return;\n }\n // The MasonryGridComponent owns the masonry library and the image-load\n // handling; it packs the projected `.masonry-item` cards.\n this.objectsCatalogMasonry()?.initMasonry();\n }\n\n private objectsCatalogDestroyMasonry(): void {\n this.objectsCatalogMasonry()?.destroyMasonry();\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n Directive,\n effect,\n inject,\n OnInit,\n PLATFORM_ID,\n ResourceRef,\n Signal,\n untracked,\n} from '@angular/core';\nimport { rxResource, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, takeUntil } from 'rxjs';\n\nimport {\n FileUrlService,\n ISeoMetadata,\n MuseumSeoService,\n} from '@smartsoft001-mobilems/angular';\nimport { MsObject } from '@smartsoft001-mobilems/objects-domain';\n\nimport { ObjectsItemComponent } from '../pages/item/item.component';\nimport {\n IObjectCollectionSummary,\n IObjectRelated,\n ObjectsDataService,\n} from '../services/objects-data/objects-data.service';\n\n/** Options of an object details page, passed to `super(options)`. */\nexport interface IObjectDetailsOptions {\n /** Translation key of the site name in the title. Default `MODEL.mainTitle`. */\n siteNameKey?: string;\n /** Opt-in „You may also be interested in” (`GET object/:id/related`). Default `false`. */\n related?: boolean;\n /** Opt-in „Related collections” (reverse `search/Object` lookup, browser only). Default `false`. */\n relatedCollections?: boolean;\n}\n\nconst OBJECT_DETAILS_SITE_NAME_KEY = 'MODEL.mainTitle';\n\n/** Muzeum Podlasia's tag strip — an unclosed trailing tag (`<br`) goes too. */\nfunction objectDetailsStripHtml(html: string | undefined): string {\n if (!html) return '';\n return html.replace(/<\\/?[^>]+(>|$)/g, '');\n}\n\n/**\n * Base of an object details page (`/obiekty/:id`, MOB-1801), from Muzeum\n * Podlasia's item page: the SEO (also in SSR), the item effect with the\n * `onObjectShown` hook (default: scroll to the top in the browser), the\n * browser-only visit counter, `hasError`, `retryLoad`, `altTitle` and two\n * opt-in resources — `related` and `relatedCollections`. The page keeps its\n * template.\n *\n * ```ts\n * // Muzeum Podlasia\n * export class ItemComponent extends ObjectDetailsBaseComponent {\n * constructor() {\n * super({ related: true, relatedCollections: true });\n * }\n * }\n * ```\n */\n@Directive()\nexport abstract class ObjectDetailsBaseComponent\n extends ObjectsItemComponent\n implements OnInit\n{\n protected readonly objectDetailsService = inject(ObjectsDataService);\n private readonly objectDetailsSeoService = inject(MuseumSeoService);\n private readonly objectDetailsFileUrl = inject(FileUrlService);\n private readonly objectDetailsDocument = inject(DOCUMENT);\n private readonly objectDetailsBrowser = isPlatformBrowser(\n inject(PLATFORM_ID),\n );\n private readonly objectDetailsServer = !this.objectDetailsBrowser;\n private readonly objectDetailsOptions: IObjectDetailsOptions;\n\n /** Object id from the route (`/obiekty/:id` and `/obiekty/:id/:slug`). */\n private readonly objectDetailsRouteId = computed(\n () => this.params()?.['id'] as string | undefined,\n );\n\n /**\n * Id for „related” (MOB-1850). On the server from the route:\n * `GET object/:id/related` starts together with `GET object/:id`, so SSR\n * waits for the longer of the two requests, not their sum (card 5233:\n * ~400 → ~290 ms locally). In the browser unchanged — after the card (no\n * extra 404 for a missing object, „Try again” works as before). A\n * non-numeric id waits for the card. `computed`, because `rxResource`\n * does not compare the `params` result — every change of a read signal\n * would repeat the request.\n */\n private readonly objectDetailsRelatedId = computed(() => {\n const id = this.objectDetailsRouteId();\n return this.objectDetailsServer && id && /^\\d+$/.test(id)\n ? id\n : this.item()?.id;\n });\n\n /** The card failed — „related” started on the server has nothing to wait for. */\n private readonly objectDetailsCardFailed$ = toObservable(\n this.facade.error,\n ).pipe(filter(Boolean));\n\n readonly hasError = this.facade.error;\n\n /** The object title without markup — image `alt`s. `''` without an object. */\n readonly altTitle: Signal<string> = computed(() =>\n objectDetailsStripHtml(this.item()?.title ?? ''),\n );\n\n /**\n * „You may also be interested in” — `GET object/:id/related`, only with\n * the `related` option. A card error stops the request (the error page\n * waits neither for „related” nor for its retry after a network error);\n * the resource then ends in an error state, the section is gone anyway.\n */\n readonly related: ResourceRef<IObjectRelated | undefined>;\n\n /**\n * „Related collections” per the „Field description” document: thematic\n * collections whose `search/Object` with `filter[entryCollections]`\n * contains the object (the service gives an empty list also after an\n * error — the section then disappears). Only with the\n * `relatedCollections` option and only in the browser: the reverse lookup\n * is one `search/Object` request per collection, and its responses (full\n * object cards) must not reach SSR nor the transfer cache HTML — the\n * server renders without this section, the client adds it after\n * hydration.\n */\n readonly relatedCollections: ResourceRef<IObjectCollectionSummary[]>;\n\n protected constructor(options: IObjectDetailsOptions = {}) {\n super();\n this.objectDetailsOptions = options;\n\n this.related = rxResource({\n params: () =>\n this.objectDetailsOptions.related\n ? this.objectDetailsRelatedId()\n : undefined,\n stream: ({ params }) =>\n this.objectDetailsService\n .getRelated(params)\n .pipe(takeUntil(this.objectDetailsCardFailed$)),\n });\n\n this.relatedCollections = rxResource({\n params: () =>\n this.objectDetailsOptions.relatedCollections &&\n this.objectDetailsBrowser\n ? this.item()?.id\n : undefined,\n stream: ({ params }) =>\n this.objectDetailsService.loadRelatedCollections(params),\n defaultValue: [],\n });\n\n this.objectDetailsSeoService.applyForSsr(() =>\n this.objectDetailsFetchSsrSeo(),\n );\n\n effect(() => {\n const item = this.item();\n if (item) {\n untracked(() => {\n this.objectDetailsSeoService.apply(this.objectDetailsSeo(item));\n this.onObjectShown(item);\n });\n }\n });\n }\n\n /**\n * Visit counter — browser only (SSR would count the visit a second time),\n * and its error (e.g. a 429 of the API limit) must neither reach the\n * console as an unhandled `HttpErrorResponse` nor break the view. Once per\n * page instance: in-page navigation to another object sends no new visit.\n */\n ngOnInit(): void {\n if (!this.objectDetailsBrowser) return;\n this.objectDetailsService\n .logVisit(Number(this.route.snapshot.paramMap.get('id')))\n .catch(() => undefined);\n }\n\n retryLoad(): void {\n const id = this.route.snapshot.paramMap.get('id');\n if (id) this.facade.select(id);\n }\n\n /** SEO of the object: `<title> - <site>`, description, image and its alt. */\n protected objectDetailsSeo(item: MsObject): ISeoMetadata {\n const strippedTitle = objectDetailsStripHtml(item.title);\n const siteName = this.translationService.get(\n this.objectDetailsOptions.siteNameKey ?? OBJECT_DETAILS_SITE_NAME_KEY,\n );\n return {\n title: `${strippedTitle} - ${siteName}`,\n description: item.description\n ? objectDetailsStripHtml(item.description)\n : undefined,\n image: item.image ? this.objectDetailsFileUrl.get(item.image) : undefined,\n imageAlt: strippedTitle,\n type: 'article',\n };\n }\n\n /**\n * Called (untracked) after the SEO for every object the facade selects.\n * Default: scroll to the top in the browser. Override to keep the scroll\n * on a re-read of the same card (MOB-1961) or to reset a gallery.\n */\n protected onObjectShown(item: MsObject): void {\n void item;\n if (this.objectDetailsBrowser) {\n this.objectDetailsDocument.defaultView?.scrollTo({\n top: 0,\n behavior: 'instant',\n });\n }\n }\n\n private async objectDetailsFetchSsrSeo(): Promise<ISeoMetadata | null> {\n const id = this.route.snapshot.paramMap.get('id');\n if (!id) return null;\n try {\n const item = await this.objectDetailsService.getById(id);\n return item ? this.objectDetailsSeo(item) : null;\n } catch {\n return null;\n }\n }\n}\n","import {\n INamedEntryParts,\n INamedEntrySource,\n namedEntryParts,\n toPlainText,\n} from '@smartsoft001-mobilems/angular';\n\n/**\n * Generic readers of an object card from `GET object/:id` for a details page\n * (MOB-1801), per the MobileMS „Opis pól” document (2026-10-05). A field\n * without data gives an empty list — the template then hides the whole row\n * with its label, nothing is made up. The layout groupings (header facts,\n * metrics columns, hero crops) stay in each museum.\n */\n\n/** A field value: `name [role] (comment)`; `nameKey` — a translation instead of the name. */\nexport type ObjectDetailValue = INamedEntryParts & { nameKey?: string };\n\n/** A related link (article, collection) of the details page. */\nexport interface IObjectDetailLink {\n id: number | string;\n title: string;\n route: string;\n}\n\n/** One bibliography item; `permalink` makes it a link. */\nexport interface IObjectBibliographyEntry {\n text: string;\n permalink: string | null;\n}\n\n/**\n * The card fields these tools read. Both `MsObject` and a museum's wider card\n * type (e.g. Podlasie's `ObjectCard`) are assignable to it.\n */\nexport interface IObjectDetailSource {\n title?: string | null;\n name?: string | null;\n noEvidence?: string | null;\n seriesTitles?: ReadonlyArray<INamedEntrySource | null | undefined> | null;\n bibliographyMNK?:\n | string\n | null\n | ReadonlyArray<\n string | { text?: string | null; permalink?: string | null }\n >;\n publicDescriptions?: ReadonlyArray<{ text?: string | null } | null> | null;\n description?: string | null;\n articles?: ReadonlyArray<{\n id: number | string;\n title?: string | null;\n }> | null;\n}\n\nconst objectDetailHasText = (\n value: string | null | undefined,\n): value is string => !!value?.trim();\n\nconst objectDetailBare = (entries: INamedEntryParts[]): INamedEntryParts[] =>\n entries.map((entry) => ({ ...entry, role: null, comment: null }));\n\nconst objectDetailTextValue = (\n value: string | null | undefined,\n): ObjectDetailValue[] =>\n objectDetailHasText(value)\n ? [{ name: value.trim(), role: null, comment: null }]\n : [];\n\n/**\n * A link title without HTML (the articles API sends `<p>…</p>` with entities,\n * MOB-1845) — the framework's `toPlainText` strips tags also after decoding\n * entities (`&lt;p&gt;`), like `PlainTextPipe` on the article cards.\n */\nconst objectDetailPlainTitle = (title: string | null | undefined): string =>\n toPlainText(title);\n\n/** The object title — the document says `name`, the details API returns `title`. */\nexport function objectTitle(obj: IObjectDetailSource): string {\n return (obj.title ?? obj.name ?? '').trim();\n}\n\n/** Header tags: `seriesTitles` (the `Cycle` dictionary) → a list with the `cycles` filter. */\nexport function tagValues(obj: IObjectDetailSource): ObjectDetailValue[] {\n return objectDetailBare(namedEntryParts(obj.seriesTitles));\n}\n\n/** Inventory number: `noEvidence`. */\nexport function inventoryValues(obj: IObjectDetailSource): ObjectDetailValue[] {\n return objectDetailTextValue(obj.noEvidence);\n}\n\n/**\n * Bibliography as in OSSO (`museum-objects` item/main-tab): every\n * `bibliographyMNK[]` entry is a separate item, and its `text` (HTML from the\n * API) goes whole — OSSO does not split the text on full stops. An entry\n * without text is dropped; `permalink` makes the item a link.\n */\nexport function bibliography(\n obj: IObjectDetailSource,\n): IObjectBibliographyEntry[] {\n const source = obj.bibliographyMNK;\n const entries = typeof source === 'string' ? [source] : (source ?? []);\n // A loop instead of `flatMap` — the library's TS `lib` predates ES2019.\n const out: IObjectBibliographyEntry[] = [];\n for (const entry of entries) {\n const text = typeof entry === 'string' ? entry : (entry?.text ?? '');\n if (!objectDetailHasText(text)) continue;\n const permalink =\n typeof entry === 'string' || !objectDetailHasText(entry?.permalink)\n ? null\n : entry.permalink.trim();\n out.push({ text: text.trim(), permalink });\n }\n return out;\n}\n\n/**\n * Description (HTML from the API): `publicDescriptions[].text` (the\n * popular-science description), and without it `description` (the physical\n * description) — the „Opis pól” rule of MOB-1563 („popular-science\n * description, and if there is none — the physical one”); object 5233 has\n * only `description` (MOB-1801). The description does not depend on media.\n */\nexport function descriptionHtml(obj: IObjectDetailSource): string[] {\n // An empty editor paragraph (`<p></p>`, `<p>&nbsp;</p>`) is not a description.\n const visible = (text: string) => toPlainText(text).length > 0;\n const popular = (obj.publicDescriptions ?? [])\n .map((entry) => entry?.text ?? '')\n .filter(visible);\n if (popular.length) return popular;\n const physical = obj.description ?? '';\n return visible(physical) ? [physical.trim()] : [];\n}\n\n/**\n * „Powiązane artykuły” — the card's `articles` field; the title without HTML\n * (MOB-1845). `routePrefix` is the articles list route of the museum.\n */\nexport function relatedArticles(\n obj: IObjectDetailSource,\n routePrefix = '/artykuly',\n): IObjectDetailLink[] {\n return (obj.articles ?? [])\n .map((article) => ({\n id: article.id,\n title: objectDetailPlainTitle(article?.title),\n route: `${routePrefix}/${article.id}`,\n }))\n .filter((article) => article.title.length > 0);\n}\n","/**\n * „Zapytaj o obiekt” keys (MOB-1869) — the mail address and text live in the\n * CMS translations, so a museum changes them without a deployment.\n */\nexport const ASK_ABOUT_OBJECT_KEYS = {\n email: 'DETAILS_PAGE.detail.askEmail',\n subject: 'DETAILS_PAGE.detail.askSubject',\n body: 'DETAILS_PAGE.detail.askBody',\n objectWithInventory: 'DETAILS_PAGE.detail.askObjectWithInventory',\n portal: 'MODEL.mainTitle',\n} as const;\n\n/** `TranslateService.instant` — a key without a translation comes back as itself. */\nexport type AskTranslate = (\n key: string,\n params?: Record<string, string>,\n) => string;\n\nexport interface IAskAboutObject {\n /** The title without HTML. */\n title: string;\n inventory?: string | null;\n /** The full address of the object card on the portal. */\n url?: string | null;\n}\n\nconst ASK_ABOUT_OBJECT_EMAIL = /^[^\\s@?&#]+@[^\\s@?&#]+\\.[^\\s@?&#]+$/;\n\nfunction askAboutObjectTranslated(\n translate: AskTranslate,\n key: string,\n params?: Record<string, string>,\n): string | null {\n const value = translate(key, params);\n return value && value !== key ? value : null;\n}\n\n/**\n * The `mailto:` of the „Zapytaj o obiekt” button: the address from\n * `askEmail`, the subject with the title (and the inventory number), the body\n * with a greeting, the object, a link and room for the question. Without a\n * valid address — `null` (no button); a missing subject or body is simply\n * skipped. Body lines break as CRLF, as RFC 6068 requires.\n */\nexport function askAboutObjectHref(\n translate: AskTranslate,\n object: IAskAboutObject,\n): string | null {\n const email = askAboutObjectTranslated(\n translate,\n ASK_ABOUT_OBJECT_KEYS.email,\n )?.trim();\n if (!email || !ASK_ABOUT_OBJECT_EMAIL.test(email)) return null;\n\n const title = object.title.trim();\n const inventory = object.inventory?.trim();\n const label =\n (inventory &&\n askAboutObjectTranslated(\n translate,\n ASK_ABOUT_OBJECT_KEYS.objectWithInventory,\n {\n title,\n inventory,\n },\n )) ||\n title;\n\n const subject = askAboutObjectTranslated(\n translate,\n ASK_ABOUT_OBJECT_KEYS.subject,\n {\n object: label,\n },\n );\n const body = askAboutObjectTranslated(translate, ASK_ABOUT_OBJECT_KEYS.body, {\n object: label,\n url: object.url ?? '',\n portal:\n askAboutObjectTranslated(translate, ASK_ABOUT_OBJECT_KEYS.portal) ?? '',\n });\n\n const query = [\n subject ? `subject=${encodeURIComponent(subject)}` : null,\n body ? `body=${encodeURIComponent(body.replace(/\\r?\\n/g, '\\r\\n'))}` : null,\n ].filter(Boolean);\n\n return `mailto:${email}${query.length ? `?${query.join('&')}` : ''}`;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["smartInitialState","smartGetReducer"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartsoft001-mobilems/objects-shell-angular",
3
- "version": "2.124.0",
3
+ "version": "2.126.0",
4
4
  "description": "This library was generated with [Nx](https://nx.dev).",
5
5
  "repository": {
6
6
  "type": "git",