@igo2/common 20.0.0 → 20.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/fesm2022/igo2-common-action.mjs +14 -14
  2. package/fesm2022/igo2-common-action.mjs.map +1 -1
  3. package/fesm2022/igo2-common-backdrop.mjs +7 -7
  4. package/fesm2022/igo2-common-backdrop.mjs.map +1 -1
  5. package/fesm2022/igo2-common-badge.mjs +7 -7
  6. package/fesm2022/igo2-common-badge.mjs.map +1 -1
  7. package/fesm2022/igo2-common-clickout.mjs +7 -7
  8. package/fesm2022/igo2-common-clickout.mjs.map +1 -1
  9. package/fesm2022/igo2-common-clone.mjs +7 -7
  10. package/fesm2022/igo2-common-clone.mjs.map +1 -1
  11. package/fesm2022/igo2-common-collapsible.mjs +10 -10
  12. package/fesm2022/igo2-common-collapsible.mjs.map +1 -1
  13. package/fesm2022/igo2-common-color.mjs +7 -7
  14. package/fesm2022/igo2-common-color.mjs.map +1 -1
  15. package/fesm2022/igo2-common-confirm-dialog.mjs +10 -10
  16. package/fesm2022/igo2-common-confirm-dialog.mjs.map +1 -1
  17. package/fesm2022/igo2-common-context-menu.mjs +10 -10
  18. package/fesm2022/igo2-common-context-menu.mjs.map +1 -1
  19. package/fesm2022/igo2-common-custom-html.mjs +10 -10
  20. package/fesm2022/igo2-common-custom-html.mjs.map +1 -1
  21. package/fesm2022/igo2-common-dom.mjs +7 -7
  22. package/fesm2022/igo2-common-dom.mjs.map +1 -1
  23. package/fesm2022/igo2-common-drag-drop.mjs +10 -10
  24. package/fesm2022/igo2-common-drag-drop.mjs.map +1 -1
  25. package/fesm2022/igo2-common-dynamic-component.mjs +14 -14
  26. package/fesm2022/igo2-common-dynamic-component.mjs.map +1 -1
  27. package/fesm2022/igo2-common-entity.mjs +28 -28
  28. package/fesm2022/igo2-common-entity.mjs.map +1 -1
  29. package/fesm2022/igo2-common-flexible.mjs +7 -7
  30. package/fesm2022/igo2-common-flexible.mjs.map +1 -1
  31. package/fesm2022/igo2-common-form.mjs +50 -50
  32. package/fesm2022/igo2-common-form.mjs.map +1 -1
  33. package/fesm2022/igo2-common-home-button.mjs +7 -7
  34. package/fesm2022/igo2-common-home-button.mjs.map +1 -1
  35. package/fesm2022/igo2-common-icon.mjs +6 -6
  36. package/fesm2022/igo2-common-icon.mjs.map +1 -1
  37. package/fesm2022/igo2-common-image.mjs +10 -10
  38. package/fesm2022/igo2-common-image.mjs.map +1 -1
  39. package/fesm2022/igo2-common-interactive-tour.mjs +13 -13
  40. package/fesm2022/igo2-common-interactive-tour.mjs.map +1 -1
  41. package/fesm2022/igo2-common-json-dialog.mjs +10 -10
  42. package/fesm2022/igo2-common-json-dialog.mjs.map +1 -1
  43. package/fesm2022/igo2-common-keyvalue.mjs +7 -7
  44. package/fesm2022/igo2-common-keyvalue.mjs.map +1 -1
  45. package/fesm2022/igo2-common-list.mjs +10 -10
  46. package/fesm2022/igo2-common-list.mjs.map +1 -1
  47. package/fesm2022/igo2-common-panel.mjs +7 -7
  48. package/fesm2022/igo2-common-panel.mjs.map +1 -1
  49. package/fesm2022/igo2-common-resizable-bar.mjs +6 -6
  50. package/fesm2022/igo2-common-resizable-bar.mjs.map +1 -1
  51. package/fesm2022/igo2-common-select-value-dialog.mjs +10 -10
  52. package/fesm2022/igo2-common-select-value-dialog.mjs.map +1 -1
  53. package/fesm2022/igo2-common-sidenav.mjs +7 -7
  54. package/fesm2022/igo2-common-sidenav.mjs.map +1 -1
  55. package/fesm2022/igo2-common-spinner.mjs +10 -10
  56. package/fesm2022/igo2-common-spinner.mjs.map +1 -1
  57. package/fesm2022/igo2-common-stop-propagation.mjs +10 -10
  58. package/fesm2022/igo2-common-stop-propagation.mjs.map +1 -1
  59. package/fesm2022/igo2-common-table.mjs +7 -7
  60. package/fesm2022/igo2-common-table.mjs.map +1 -1
  61. package/fesm2022/igo2-common-tool.mjs +14 -14
  62. package/fesm2022/igo2-common-tool.mjs.map +1 -1
  63. package/fesm2022/igo2-common-widget.mjs +14 -14
  64. package/fesm2022/igo2-common-widget.mjs.map +1 -1
  65. package/fesm2022/igo2-common-workspace.mjs +18 -18
  66. package/fesm2022/igo2-common-workspace.mjs.map +1 -1
  67. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-common-entity.mjs","sources":["../../../packages/common/entity/src/shared/entity.enums.ts","../../../packages/common/entity/src/shared/entity.utils.ts","../../../packages/common/entity/src/shared/state.ts","../../../packages/common/entity/src/shared/view.ts","../../../packages/common/entity/src/shared/store.ts","../../../packages/common/entity/src/shared/watcher.ts","../../../packages/common/entity/src/shared/transaction.ts","../../../packages/common/entity/src/shared/strategies/strategy.ts","../../../packages/common/entity/src/shared/strategies/filter-custom-function.ts","../../../packages/common/entity/src/shared/strategies/filter-selection.ts","../../../packages/common/entity/src/entity-selector/entity-selector.component.ts","../../../packages/common/entity/src/entity-selector/entity-selector.component.html","../../../packages/common/entity/src/entity-selector/entity-selector.module.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.component.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.component.html","../../../packages/common/entity/src/entity-table/entity-table-row.directive.ts","../../../packages/common/entity/src/entity-table/entity-table.component.ts","../../../packages/common/entity/src/entity-table/entity-table.component.html","../../../packages/common/entity/src/entity-table/entity-table.module.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.module.ts","../../../packages/common/entity/src/entity.module.ts","../../../packages/common/entity/src/igo2-common-entity.ts"],"sourcesContent":["export enum EntityOperationType {\n Insert = 'Insert',\n Update = 'Update',\n Delete = 'Delete'\n}\n\nexport enum EntityTableColumnRenderer {\n Default = 'Default',\n HTML = 'HTML',\n UnsanitizedHTML = 'UnsanitizedHTML',\n Editable = 'Editable',\n Icon = 'Icon',\n ButtonGroup = 'ButtonGroup'\n}\n\nexport enum EntityTableScrollBehavior {\n Auto = 'auto',\n Instant = 'instant',\n Smooth = 'smooth'\n}\n\nexport enum EntityTableSelectionState {\n None = 'None',\n All = 'All',\n Some = 'Some'\n}\n","import { t } from 'typy';\n\nimport { EntityKey } from './entity.interfaces';\n\n/**\n * Get an entity's named property. Nested properties are supported\n * with the dotted notation. (i.e 'author.name')\n *\n * Note: this method is a 'best attempt' at getting an entity's property.\n * It fits the most common cases but you might need to explicitely define\n * a property getter when using an EntityStore, for example.\n * @param entity Entity\n * @param property Property name\n * @returns Property value\n */\nexport function getEntityProperty(entity: object, property: string): any {\n return t(entity, property).safeObject;\n}\n\n/**\n * Get an entity's id. An entity's id can be one of:\n * 'entity.meta.id', 'entity.meta.idProperty' or 'entity.id'.\n *\n * Note: See the note in the 'getEntityProperty' documentation.\n * @param entity Entity\n * @returns Entity id\n */\nexport function getEntityId(entity: object): EntityKey {\n const meta = (entity as any).meta || {};\n return meta.id ? meta.id : getEntityProperty(entity, meta.idProperty || 'id');\n}\n\n/**\n * Get an entity's title. An entity's title can be one of:\n * 'entity.meta.title', 'entity.meta.titleProperty' or 'entity.title'.\n * @param entity Entity\n * @returns Entity title\n */\nexport function getEntityTitle(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.title\n ? meta.title\n : getEntityProperty(entity, meta.titleProperty || 'title');\n}\n\n/**\n * Get an entity's HTML title. An entity's HTML title can be one of:\n * 'entity.meta.titleHtml', 'entity.meta.titleHtmlProperty' or 'entity.titleHtml'.\n * @param entity Entity\n * @returns Entity HTML title\n */\nexport function getEntityTitleHtml(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.titleHtml\n ? meta.titleHtml\n : getEntityProperty(entity, meta.titleHtmlProperty || 'titleHtml');\n}\n\n/**\n * Get an entity's icon. An entity's icon can be one of:\n * 'entity.meta.icon', 'entity.meta.iconProperty' or 'entity.icon'.\n * @param entity Entity\n * @returns Entity icon\n */\nexport function getEntityIcon(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.icon\n ? meta.icon\n : getEntityProperty(entity, meta.iconProperty || 'icon');\n}\n\n/**\n * Get an entity's revision.\n * @param entity Entity\n * @returns Entity revision\n */\nexport function getEntityRevision(entity: object): number {\n const meta = (entity as any).meta || {};\n return meta.revision || 0;\n}\n","import { ReplaySubject } from 'rxjs';\n\nimport { EntityKey, EntityState } from './entity.interfaces';\nimport { getEntityId } from './entity.utils';\n\ninterface EntityStateManagerOptions<E extends object> {\n getKey?: (entity: object) => EntityKey;\n index?: Map<EntityKey, E>;\n}\n\n/**\n * This class is used to track a store's entities state\n */\nexport class EntityStateManager<\n E extends object,\n S extends EntityState = EntityState\n> {\n /**\n * State index\n */\n readonly index = new Map<EntityKey, S>();\n\n /**\n * Change emitter\n */\n readonly change$ = new ReplaySubject<void>(1);\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n constructor(private options: EntityStateManagerOptions<E> = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n\n this.next();\n }\n\n /**\n * Clear state\n */\n clear() {\n if (this.index.size > 0) {\n this.index.clear();\n this.next();\n }\n }\n\n /**\n * Get an entity's state\n * @param entity Entity\n * @returns State\n */\n get(entity: E): S {\n return (this.index.get(this.getKey(entity)) || {}) as S;\n }\n\n /**\n * Set an entity's state\n * @param entity Entity\n * @param state State\n */\n set(entity: E, state: S) {\n this.setMany([entity], state);\n }\n\n /**\n * Set many entitie's state\n * @param entitie Entities\n * @param state State\n */\n setMany(entities: E[], state: S) {\n entities.forEach((entity: E) => {\n this.index.set(this.getKey(entity), Object.assign({}, state));\n });\n this.next();\n }\n\n /**\n * Set state of all entities that already have a state. This is not\n * the same as setting the state of all the store's entities.\n * @param state State\n */\n setAll(state: S) {\n Array.from(this.index.keys()).forEach((key: EntityKey) => {\n this.index.set(key, Object.assign({}, state));\n });\n this.next();\n }\n\n /**\n * Update an entity's state\n * @param entity Entity\n * @param changes State changes\n */\n update(entity: E, changes: Partial<S>, exclusive = false) {\n this.updateMany([entity], changes, exclusive);\n }\n\n /**\n * Update many entitie's state\n * @param entitie Entities\n * @param changes State changes\n */\n updateMany(entities: E[], changes: Partial<S>, exclusive = false) {\n if (exclusive === true) {\n return this.updateManyExclusive(entities, changes);\n }\n\n entities.forEach((entity: E) => {\n const state = Object.assign({}, this.get(entity), changes);\n this.index.set(this.getKey(entity), state);\n });\n this.next();\n }\n\n /**\n * Reversee an entity's state\n * @param entity Entity\n * @param keys State keys to reverse\n */\n reverse(entity: E, keys: string[]) {\n this.reverseMany([entity], keys);\n }\n\n /**\n * Reverse many entitie's state\n * @param entitie Entities\n * @param keys State keys to reverse\n */\n reverseMany(entities: E[], keys: string[]) {\n entities.forEach((entity: E) => {\n const currentState = this.get(entity);\n const changes = keys.reduce(\n (acc: Record<string, boolean>, key: string) => {\n acc[key] = currentState[key] || false;\n return acc;\n },\n {}\n ) as Partial<S>;\n const reversedChanges = this.reverseChanges(changes);\n const state = Object.assign({}, currentState, reversedChanges);\n this.index.set(this.getKey(entity), state);\n });\n this.next();\n }\n\n /**\n * Update state of all entities that already have a state. This is not\n * the same as updating the state of all the store's entities.\n * @param changes State\n */\n updateAll(changes: Partial<S>) {\n const allKeys = this.getAllKeys();\n Array.from(allKeys).forEach((key: EntityKey) => {\n const state = Object.assign({}, this.index.get(key), changes);\n this.index.set(key, state);\n });\n this.next();\n }\n\n /**\n * When some state changes are flagged as 'exclusive', reverse\n * the state of all other entities. Changes are reversable when\n * they are boolean.\n * @param entitie Entities\n * @param changes State changes\n */\n private updateManyExclusive(entities: E[], changes: Partial<S>) {\n const reverseChanges = this.reverseChanges(changes);\n\n const keys = entities.map((entity: E) => this.getKey(entity));\n const allKeys = new Set(keys.concat(Array.from(this.getAllKeys())));\n allKeys.forEach((key: EntityKey) => {\n const state = this.index.get(key) || ({} as S);\n\n if (keys.indexOf(key) >= 0) {\n this.index.set(key, Object.assign({}, state, changes));\n } else {\n // Update only if the reverse changes would modify\n // a key already present in the current state\n const shouldUpdate = Object.keys(reverseChanges).some(\n (changeKey: string) => {\n return (\n state[changeKey] !== undefined &&\n state[changeKey] !== reverseChanges[changeKey]\n );\n }\n );\n if (shouldUpdate === true) {\n this.index.set(key, Object.assign({}, state, reverseChanges));\n }\n }\n });\n\n this.next();\n }\n\n /**\n * Compute a 'reversed' version of some state changes.\n * Changes are reversable when they are boolean.\n * @param changes State changes\n * @returns Reversed state changes\n */\n private reverseChanges(changes: Partial<S>): Partial<S> {\n return Object.entries(changes).reduce(\n (reverseChanges: Partial<S>, bunch: [string, any]) => {\n const [changeKey, value] = bunch;\n if (typeof value === typeof true) {\n (reverseChanges as object)[changeKey] = !value;\n }\n return reverseChanges;\n },\n {}\n );\n }\n\n /**\n * Return all the keys in that state and in the store it's bound to, if any.\n * @returns Set of keys\n */\n private getAllKeys(): Set<EntityKey> {\n const storeKeys = Array.from(this.options?.index?.keys() ?? []);\n return new Set(Array.from(this.index.keys()).concat(storeKeys));\n }\n\n /**\n * Emit 'change' event\n */\n private next() {\n this.change$.next();\n }\n}\n","import { ObjectUtils, uuid } from '@igo2/utils';\n\nimport { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs';\nimport { debounceTime, map, skip } from 'rxjs/operators';\n\nimport {\n EntityFilterClause,\n EntityJoinClause,\n EntityKey,\n EntitySortClause\n} from './entity.interfaces';\n\n/**\n * An entity view streams entities from an observable source. These entities\n * can be filtered or sorted without affecting the source. A view can also\n * combine data from multiple sources, joined together.\n */\nexport class EntityView<E extends object, V extends object = E> {\n /**\n * Observable stream of values\n */\n readonly values$ = new BehaviorSubject<V[]>([]);\n\n /**\n * Subscription to the source (and joined sources) values\n */\n private values$$: Subscription;\n\n /**\n * Whether this view has been lifted\n */\n private lifted = false;\n\n /**\n * Join clauses\n */\n private joins: EntityJoinClause[] = [];\n\n /**\n * Observable of a filter clause\n */\n private filter$ = new BehaviorSubject(undefined);\n\n /**\n * Observable of filter clauses\n */\n private filters$ = new BehaviorSubject<EntityFilterClause[]>([]);\n\n /**\n * Filters index\n */\n private filterIndex = new Map<string, EntityFilterClause>();\n\n /**\n * Observable of a sort clause\n */\n private sort$ = new BehaviorSubject(undefined);\n\n /**\n * Method for indexing\n */\n get getKey(): (V) => EntityKey {\n return this.getKey$.value;\n }\n private getKey$ = new BehaviorSubject<(V) => EntityKey>(undefined);\n\n /**\n * Number of entities\n */\n readonly count$ = new BehaviorSubject<number>(0);\n get count(): number {\n return this.count$.value;\n }\n\n /**\n * Whether the store is empty\n */\n readonly empty$ = new BehaviorSubject<boolean>(true);\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Store index\n */\n get index(): Map<EntityKey, V> {\n return this._index;\n }\n private _index: Map<EntityKey, V>;\n\n constructor(private source$: BehaviorSubject<E[]>) {}\n\n /**\n * Get a value from the view by key\n * @param key Key\n * @returns Value\n */\n get(key: EntityKey): V {\n if (this._index === undefined) {\n throw new Error(\n 'This view has no index, therefore, this method is unavailable.'\n );\n }\n return this.index.get(key);\n }\n\n /**\n * Get all the values\n * @returns Array of values\n */\n all(): V[] {\n return this.values$.value;\n }\n\n /**\n * Observe all the values\n * @returns Observable of values\n */\n all$(): BehaviorSubject<V[]> {\n return this.values$;\n }\n\n /**\n * Get the first value that respects a criteria\n * @returns A value\n */\n firstBy(clause: EntityFilterClause<V>): V {\n return this.values$.value.find(clause);\n }\n\n /**\n * Observe the first value that respects a criteria\n * @returns Observable of a value\n */\n firstBy$(clause: EntityFilterClause<V>): Observable<V> {\n return this.values$.pipe(map((values: V[]) => values.find(clause)));\n }\n\n /**\n * Get all the values that respect a criteria\n * @returns Array of values\n */\n manyBy(clause: EntityFilterClause<V>): V[] {\n return this.values$.value.filter(clause);\n }\n\n /**\n * Observe all the values that respect a criteria\n * @returns Observable of values\n */\n manyBy$(clause: EntityFilterClause<V>): Observable<V[]> {\n return this.values$.pipe(map((values: V[]) => values.filter(clause)));\n }\n\n /**\n * Clear the filter and sort and unsubscribe from the source\n */\n clear() {\n this.filter(undefined);\n this.sort(undefined);\n }\n\n destroy() {\n if (this.values$$ !== undefined) {\n this.values$$.unsubscribe();\n }\n this.clear();\n }\n\n /**\n * Create an index\n * @param getKey Method to get a value's id\n * @returns The view\n */\n createIndex(getKey: (E) => EntityKey): EntityView<E, V> {\n this._index = new Map();\n this.getKey$.next(getKey);\n return this;\n }\n\n /**\n * Join another source to the stream (chainable)\n * @param clause Join clause\n * @returns The view\n */\n join(clause: EntityJoinClause): EntityView<E, V> {\n if (this.lifted === true) {\n throw new Error(\n 'This view has already been lifted, therefore, no join is allowed.'\n );\n }\n this.joins.push(clause);\n return this;\n }\n\n /**\n * Filter values (chainable)\n * @param clause Filter clause\n * @returns The view\n */\n filter(clause: EntityFilterClause<V>): EntityView<E, V> {\n this.filter$.next(clause);\n return this;\n }\n\n /**\n * @param clause Filter clause\n * @returns The filter id\n */\n addFilter(clause: EntityFilterClause<V>): string {\n const id = uuid();\n this.filterIndex.set(id, clause);\n this.filters$.next(Array.from(this.filterIndex.values()));\n return id;\n }\n\n /**\n * Remove a filter by id\n * @param clause Filter clause\n */\n removeFilter(id: string) {\n this.filterIndex.delete(id);\n this.filters$.next(Array.from(this.filterIndex.values()));\n }\n\n /**\n * Sort values (chainable)\n * @param clauseSort clause\n * @returns The view\n */\n sort(clause: EntitySortClause<V>): EntityView<E, V> {\n this.sort$.next(clause);\n return this;\n }\n\n /**\n * Create the final observable\n * @returns Observable\n */\n lift() {\n this.lifted = true;\n const source$ =\n this.joins.length > 0 ? this.liftJoinedSource() : this.liftSource();\n const observables$ = [\n source$,\n this.filters$,\n this.filter$,\n this.sort$,\n this.getKey$\n ];\n\n this.values$$ = combineLatest(observables$)\n .pipe(skip(1), debounceTime(5))\n .subscribe((bunch: any[]) => {\n const [_values, filters, filter, sort, getKey] = bunch;\n const values = this.processValues(_values, filters, filter, sort);\n const generateIndex = getKey !== undefined;\n this.setValues(values, generateIndex);\n });\n }\n\n /**\n * Create the source observable when no joins are defined\n * @returns Observable\n */\n private liftSource(): Observable<V[]> {\n return this.source$ as any as Observable<V[]>;\n }\n\n /**\n * Create the source observable when joins are defined\n * @returns Observable\n */\n private liftJoinedSource(): Observable<V[]> {\n const sources$ = [\n this.source$,\n combineLatest(this.joins.map((join: EntityJoinClause) => join.source))\n ];\n\n return combineLatest(sources$).pipe(\n map((bunch: [E[], any[]]) => {\n const [entities, joinData] = bunch;\n return entities.reduce((values: V[], entity: E) => {\n const value = this.computeJoinedValue(entity, joinData);\n if (value !== undefined) {\n values.push(value);\n }\n return values;\n }, []);\n })\n );\n }\n\n /**\n * Apply joins to a source's entity and return the final value\n * @returns Final value\n */\n private computeJoinedValue(entity: E, joinData: any[]): V | undefined {\n let value = entity as Partial<V>;\n let joinIndex = 0;\n while (value !== undefined && joinIndex < this.joins.length) {\n value = this.joins[joinIndex].reduce(value, joinData[joinIndex]);\n joinIndex += 1;\n }\n return value as V;\n }\n\n /**\n * Filter and sort values before streaming them\n * @param values Values\n * @param filters Filter clauses\n * @param filter Filter clause\n * @param sort Sort clause\n * @returns Filtered and sorted values\n */\n private processValues(\n values: V[],\n filters: EntityFilterClause[],\n filter: EntityFilterClause,\n sort: EntitySortClause\n ): V[] {\n values = values.slice(0);\n values = this.filterValues(values, filters.concat([filter]));\n values = this.sortValues(values, sort);\n return values;\n }\n\n /**\n * Filter values\n * @param values Values\n * @param filters Filter clauses\n * @returns Filtered values\n */\n private filterValues(values: V[], clauses: EntityFilterClause[]): V[] {\n if (clauses.length === 0) {\n return values;\n }\n\n return values.filter((value: V) => {\n return clauses\n .filter((clause: EntityFilterClause) => clause !== undefined)\n .every((clause: EntityFilterClause) => clause(value));\n });\n }\n\n /**\n * Sort values\n * @param values Values\n * @param sort Sort clause\n * @returns Sorted values\n */\n private sortValues(values: V[], clause: EntitySortClause): V[] {\n if (clause === undefined) {\n return values;\n }\n return values.sort((v1: V, v2: V) => {\n return ObjectUtils.naturalCompare(\n clause.valueAccessor(v1),\n clause.valueAccessor(v2),\n clause.direction,\n clause.nullsFirst\n );\n });\n }\n\n /**\n * Set value and optionally generate an index\n * @param values Values\n * @param generateIndex boolean\n */\n private setValues(values: V[], generateIndex: boolean) {\n if (generateIndex === true) {\n this._index = this.generateIndex(values);\n }\n\n this.values$.next(values);\n\n const count = values.length;\n const empty = count === 0;\n this.count$.next(count);\n this.empty$.next(empty);\n }\n\n /**\n * Generate a complete index of all the values\n * @param entities Entities\n * @returns Index\n */\n private generateIndex(values: V[]): Map<EntityKey, V> {\n const entries = values.map((value: V) => [this.getKey(value), value]);\n return new Map(entries as [EntityKey, V][]);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\n\nimport { EntityKey, EntityRecord, EntityState } from './entity.interfaces';\nimport { getEntityId, getEntityProperty } from './entity.utils';\nimport { EntityStateManager } from './state';\nimport type { EntityStoreStrategy } from './strategies/strategy';\nimport { EntityView } from './view';\n\nexport interface EntityStoreOptions {\n getKey?: (entity: object) => EntityKey;\n getProperty?: (entity: object, property: string) => any;\n}\n\n/**\n * An entity store class holds any number of entities\n * as well as their state. It can be observed, filtered and sorted and\n * provides methods to insert, update or delete entities.\n */\nexport class EntityStore<\n E extends object = object,\n S extends EntityState = EntityState\n> {\n /**\n * Observable of the raw entities\n */\n readonly entities$ = new BehaviorSubject<E[]>([]);\n\n /**\n * Number of entities\n */\n readonly count$ = new BehaviorSubject<number>(0);\n get count(): number {\n return this.count$.value;\n }\n\n /**\n * Whether the store is empty\n */\n readonly empty$ = new BehaviorSubject<boolean>(true);\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Entity store state\n */\n readonly state: EntityStateManager<E, S>;\n\n /**\n * View of all the entities\n */\n readonly view: EntityView<E>;\n\n /**\n * View of all the entities and their state\n */\n readonly stateView: EntityView<E, EntityRecord<E, S>>;\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n /**\n * Method to get an entity's named property\n */\n readonly getProperty: (E, prop: string) => any;\n\n /**\n * Store index\n */\n get index(): Map<EntityKey, E> {\n return this._index;\n }\n private _index: Map<EntityKey, E>;\n\n /**\n * Store index\n */\n get pristine(): boolean {\n return this._pristine;\n }\n private _pristine = true;\n\n /**\n * Strategies\n */\n private strategies: EntityStoreStrategy[] = [];\n\n constructor(entities: E[], options: EntityStoreOptions = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n this.getProperty = options.getProperty\n ? options.getProperty\n : getEntityProperty;\n\n this.state = this.createStateManager();\n this.view = this.createDataView();\n this.stateView = this.createStateView();\n\n this.view.lift();\n this.stateView.lift();\n\n if (entities.length > 0) {\n this.load(entities);\n } else {\n this._index = this.generateIndex(entities);\n }\n }\n\n /**\n * Get an entity from the store by key\n * @param key Key\n * @returns Entity\n */\n get(key: EntityKey): E {\n return this.index.get(key);\n }\n\n /**\n * Get all entities in the store\n * @returns Array of entities\n */\n all(): E[] {\n return this.entities$.value;\n }\n\n /**\n * Set this store's entities\n * @param entities Entities\n */\n load(entities: E[], pristine = true) {\n this._index = this.generateIndex(entities);\n this._pristine = pristine;\n this.next();\n }\n\n /**\n * Clear the store's entities but keep the state and views intact.\n * Views won't return any data but future data will be subject to the\n * current views filter and sort\n */\n softClear() {\n if (this.index && this.index.size > 0) {\n this.index.clear();\n this._pristine = true;\n this.next();\n } else if (this.index) {\n this.updateCount();\n }\n }\n\n /**\n * Clear the store's entities, state and views\n */\n clear() {\n this.stateView.clear();\n this.view.clear();\n this.state.clear();\n this.softClear();\n }\n\n destroy() {\n this.stateView.destroy();\n this.view.destroy();\n this.clear();\n }\n\n /**\n * Insert an entity into the store\n * @param entity Entity\n */\n insert(entity: E) {\n this.insertMany([entity]);\n }\n\n /**\n * Insert many entities into the store\n * @param entities Entities\n */\n insertMany(entities: E[]) {\n entities.forEach((entity: E) =>\n this.index.set(this.getKey(entity), entity)\n );\n this._pristine = false;\n this.next();\n }\n\n /**\n * Update or insert an entity into the store\n * @param entity Entity\n */\n update(entity: E) {\n this.updateMany([entity]);\n }\n\n /**\n * Update or insert many entities into the store\n * @param entities Entities\n */\n updateMany(entities: E[]) {\n entities.forEach((entity: E) =>\n this.index.set(this.getKey(entity), entity)\n );\n this._pristine = false;\n this.next();\n }\n\n /**\n * Add a strategy to this store\n * @param strategy Entity store strategy\n * @returns Entity store\n */\n addStrategy(strategy: EntityStoreStrategy, activate = false): EntityStore {\n const existingStrategy = this.strategies.find(\n (_strategy: EntityStoreStrategy) => {\n return strategy.constructor === _strategy.constructor;\n }\n );\n if (existingStrategy !== undefined) {\n throw new Error(\n 'A strategy of this type already exists on that EntityStore.'\n );\n }\n\n this.strategies.push(strategy);\n strategy.bindStore(this);\n\n if (activate === true) {\n strategy.activate();\n }\n\n return this;\n }\n\n /**\n * Remove a strategy from this store\n * @param strategy Entity store strategy\n * @returns Entity store\n */\n removeStrategy(strategy: EntityStoreStrategy): EntityStore {\n const index = this.strategies.indexOf(strategy);\n if (index >= 0) {\n this.strategies.splice(index, 1);\n strategy.unbindStore(this);\n }\n return this;\n }\n\n /**\n * Return strategies of a given type\n * @param type Entity store strategy class\n * @returns Strategies\n */\n getStrategyOfType(type: typeof EntityStoreStrategy): EntityStoreStrategy {\n return this.strategies.find((strategy: EntityStoreStrategy) => {\n return strategy instanceof type;\n });\n }\n\n /**\n * Activate strategies of a given type\n * @param type Entity store strategy class\n */\n activateStrategyOfType(type: typeof EntityStoreStrategy) {\n const strategy = this.getStrategyOfType(type);\n if (strategy !== undefined) {\n strategy.activate();\n }\n }\n\n /**\n * Deactivate strategies of a given type\n * @param type Entity store strategy class\n */\n deactivateStrategyOfType(type: typeof EntityStoreStrategy) {\n const strategy = this.getStrategyOfType(type);\n if (strategy !== undefined) {\n strategy.deactivate();\n }\n }\n\n /**\n * Delete an entity from the store\n * @param entity Entity\n */\n delete(entity: E) {\n this.deleteMany([entity]);\n }\n\n /**\n * Delete many entities from the store\n * @param entities Entities\n */\n deleteMany(entities: E[]) {\n entities.forEach((entity: E) => this.index.delete(this.getKey(entity)));\n this._pristine = false;\n this.next();\n }\n\n /**\n * Generate a complete index of all the entities\n * @param entities Entities\n * @returns Index\n */\n private generateIndex(entities: E[]): Map<EntityKey, E> {\n const entries = entities.map((entity: E) => [this.getKey(entity), entity]);\n return new Map(entries as [EntityKey, E][]);\n }\n\n /**\n * Push the index's entities into the entities$ observable\n */\n private next() {\n this.entities$.next(Array.from(this.index.values()));\n this.updateCount();\n }\n\n /**\n * Update the store's count and empty\n */\n private updateCount() {\n const count = this.index.size;\n const empty = count === 0;\n this.count$.next(count);\n this.empty$.next(empty);\n }\n\n /**\n * Create the entity state manager\n * @returns EntityStateManager\n */\n private createStateManager() {\n return new EntityStateManager<E, S>({\n getKey: this.getKey,\n index: this.index\n });\n }\n\n /**\n * Create the data view\n * @returns EntityView<E>\n */\n private createDataView() {\n return new EntityView<E>(this.entities$);\n }\n\n /**\n * Create the state view\n * @returns EntityView<EntityRecord<E>>\n */\n private createStateView() {\n return new EntityView<E, EntityRecord<E, S>>(this.view.all$())\n .join({\n source: this.state.change$,\n reduce: (entity: E): EntityRecord<E, S> => {\n const key = this.getKey(entity);\n const state = this.state.get(entity);\n const currentRecord = this.stateView.get(key);\n\n if (\n currentRecord !== undefined &&\n currentRecord.entity === entity &&\n this.statesAreTheSame(currentRecord.state, state)\n ) {\n return currentRecord;\n }\n\n const revision = currentRecord ? currentRecord.revision + 1 : 1;\n const ref = `${key}-${revision}`;\n return { entity, state, revision, ref };\n }\n })\n .createIndex((record: EntityRecord<E, S>) => this.getKey(record.entity));\n }\n\n private statesAreTheSame(currentState: S, newState: S): boolean {\n if (currentState === newState) {\n return true;\n }\n\n const currentStateIsEmpty = Object.keys(currentState).length === 0;\n const newStateIsEmpty = Object.keys(newState).length === 0;\n return currentStateIsEmpty && newStateIsEmpty;\n }\n}\n","import { ChangeDetectorRef } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { EntityKey } from './entity.interfaces';\nimport { EntityStore } from './store';\n\n/**\n * This class is used to synchronize a component's changes\n * detection with an EntityStore changes. For example, it is frequent\n * to have a component subscribe to a store's selected entity and, at the same time,\n * this component provides a way to select an entity with, let's say, a click.\n *\n * This class automatically handles those case and triggers the compoent's\n * change detection when needed.\n *\n * Note: If the component observes the store's stateView, a workspace is\n * probably not required because the stateView catches any changes to the\n * entities and their state.\n */\nexport class EntityStoreWatcher<E extends object> {\n /**\n * Component change detector\n */\n private cdRef: ChangeDetectorRef;\n\n /**\n * Entity store\n */\n private store: EntityStore<E>;\n\n /**\n * Component inner state\n */\n private innerStateIndex = new Map<EntityKey, Record<string, any>>();\n\n /**\n * Subscription to the store's entities\n */\n private entities$$: Subscription;\n\n /**\n * Subscription to the store's state\n */\n private state$$: Subscription;\n\n constructor(store?: EntityStore<E>, cdRef?: ChangeDetectorRef) {\n this.setChangeDetector(cdRef);\n this.setStore(store);\n }\n\n destroy() {\n this.setChangeDetector(undefined);\n this.setStore(undefined);\n }\n\n /**\n * Bind this workspace to a store and start watching for changes\n * @param store Entity store\n */\n setStore(store?: EntityStore<E>) {\n if (store === undefined) {\n this.teardownObservers();\n this.innerStateIndex.clear();\n this.store = undefined;\n return;\n }\n\n this.setStore(undefined);\n this.store = store;\n this.setupObservers();\n this.detectChanges();\n }\n\n /**\n * Bind this workspace to a component's change detector\n * @param cdRef Change detector\n */\n setChangeDetector(cdRef?: ChangeDetectorRef) {\n this.cdRef = cdRef;\n }\n\n /**\n * Set up observers on a store's entities and their state\n * @param store Entity store\n */\n private setupObservers() {\n this.teardownObservers();\n\n this.entities$$ = this.store.entities$.subscribe(() =>\n this.onEntitiesChange()\n );\n\n this.state$$ = this.store.state.change$\n .pipe(skip(1))\n .subscribe(() => this.onStateChange());\n }\n\n /**\n * Teardown store observers\n */\n private teardownObservers() {\n if (this.entities$$ !== undefined) {\n this.entities$$.unsubscribe();\n }\n if (this.state$$ !== undefined) {\n this.state$$.unsubscribe();\n }\n this.entities$$ = undefined;\n this.state$$ = undefined;\n }\n\n /**\n * When the entities change, always trigger the changes detection\n */\n private onEntitiesChange() {\n this.detectChanges();\n }\n\n /**\n * When the entities state change, trigger the change detection\n * only if the component has not handled these changes yet. For example,\n * the component might have initiated thoses changes itself.\n */\n private onStateChange() {\n let changesDetected = false;\n const storeIndex = this.store.state.index;\n const innerIndex = this.innerStateIndex;\n\n if (storeIndex.size !== innerIndex.size) {\n changesDetected = this.detectChanges();\n }\n\n const storeKeys = Array.from(storeIndex.keys());\n for (const key of storeKeys) {\n const storeValue = storeIndex.get(key);\n const innerValue = innerIndex.get(key);\n if (changesDetected === false) {\n if (innerValue === undefined) {\n changesDetected = this.detectChanges();\n } else if (!ObjectUtils.objectsAreEquivalent(storeValue, innerValue)) {\n changesDetected = this.detectChanges();\n }\n }\n\n this.innerStateIndex.set(key, Object.assign({}, storeValue));\n }\n }\n\n /**\n * Trigger the change detection of the workspace is bound to a change detector\n */\n private detectChanges() {\n if (this.cdRef !== undefined) {\n this.cdRef.detectChanges();\n }\n return true;\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\n\nimport { EntityOperationType } from './entity.enums';\nimport {\n EntityKey,\n EntityOperationState,\n EntityTransactionOptions\n} from './entity.interfaces';\nimport { getEntityId } from './entity.utils';\nimport { EntityStore } from './store';\n\nexport interface EntityOperation<E extends object = object> {\n key: EntityKey;\n type: EntityOperationType;\n previous: E | undefined;\n current: E | undefined;\n store?: EntityStore<E>;\n meta?: Record<string, any>;\n}\n\nexport type EntityTransactionCommitHandler = (\n transaction: EntityTransaction,\n operations: EntityOperation[]\n) => Observable<any>;\n\n/**\n * This class holds a reference to the insert, update and delete\n * operations performed on a store. This is useful to commit\n * these operations in a single pass or to cancel them.\n */\nexport class EntityTransaction {\n /**\n * Store holding the operations on another store\n */\n readonly operations: EntityStore<EntityOperation, EntityOperationState>;\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n /**\n * Whether there are pending operations\n */\n get empty$(): BehaviorSubject<boolean> {\n return this.operations.empty$;\n }\n\n /**\n * Whether there are pending operations\n */\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Whether thise store is in commit phase\n */\n get inCommitPhase(): boolean {\n return this.inCommitPhase$.value;\n }\n readonly inCommitPhase$ = new BehaviorSubject<boolean>(false);\n\n constructor(options: EntityTransactionOptions = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n this.operations = new EntityStore<EntityOperation, EntityOperationState>(\n [],\n {\n getKey: (operation: EntityOperation) => operation.key\n }\n );\n }\n\n destroy() {\n this.operations.destroy();\n }\n\n /**\n * Insert an entity into a store. If no store is specified, an insert\n * operation is still created but the transaction won't add the new\n * entity to the store.\n * @param current The entity to insert\n * @param store Optional: The store to insert the entity into\n * @param meta Optional: Any metadata on the operation\n */\n insert(\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(current);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n }\n\n this.doInsert(current, store, meta);\n }\n\n /**\n * Update an entity in a store. If no store is specified, an update\n * operation is still created but the transaction won't update the\n * entity into the store.\n * @param previous The entity before update\n * @param current The entity after update\n * @param store Optional: The store to update the entity into\n * @param meta Optional: Any metadata on the operation\n */\n update(\n previous: object,\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(current);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n if (existingOperation.type === EntityOperationType.Insert) {\n this.doInsert(current, store, meta);\n return;\n } else if (existingOperation.type === EntityOperationType.Update) {\n previous = existingOperation.previous;\n }\n }\n\n this.doUpdate(previous, current, store, meta);\n }\n\n /**\n * Delete an entity from a store. If no store is specified, a delete\n * operation is still created but the transaction won't remove the\n * entity from the store.\n * @param previous The entity before delete\n * @param store Optional: The store to delete the entity from\n * @param meta Optional: Any metadata on the operation\n */\n delete(\n previous: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(previous);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n if (existingOperation.type === EntityOperationType.Insert) {\n if (store !== undefined) {\n store.delete(previous);\n }\n return;\n }\n }\n\n this.doDelete(previous, store, meta);\n }\n\n /**\n * Commit operations the transaction. This method doesn't do much\n * in itself. The handler it receives does the hard work and it's\n * implementation is left to the caller. This method simply wraps\n * the handler into an error catching mechanism to update\n * the transaction afterward. The caller needs to subscribe to this\n * method's output (observable) for the commit to be performed.\n * @param operations Operations to commit\n * @param handler Function that handles the commit operation\n * @returns The handler output (observable)\n */\n commit(\n operations: EntityOperation[],\n handler: EntityTransactionCommitHandler\n ): Observable<any> {\n this.inCommitPhase$.next(true);\n\n return handler(this, operations).pipe(\n catchError(() => of(new Error())),\n tap((result: any) => {\n if (result instanceof Error) {\n this.onCommitError();\n } else {\n this.onCommitSuccess(operations);\n }\n })\n );\n }\n\n /**\n * Commit all the operations of the transaction.\n * @param handler Function that handles the commit operation\n * @returns The handler output (observable)\n */\n commitAll(handler: EntityTransactionCommitHandler): Observable<any> {\n const operations = this.getOperationsInCommit();\n return this.commit(operations, handler);\n }\n\n /**\n * Rollback this transaction\n */\n rollback() {\n this.rollbackOperations(this.operations.all());\n }\n\n /**\n * Rollback specific operations\n */\n rollbackOperations(operations: EntityOperation[]) {\n this.checkInCommitPhase();\n\n const operationsFactory = () =>\n new Map([\n [EntityOperationType.Delete, []],\n [EntityOperationType.Update, []],\n [EntityOperationType.Insert, []]\n ]);\n const storesOperations = new Map();\n\n // Group operations by store and by operation type.\n // Grouping operations allows us to revert them in bacth, thus, triggering\n // observables only one per operation type.\n for (const operation of operations) {\n const store = operation.store;\n if (operation.store === undefined) {\n continue;\n }\n\n let storeOperations = storesOperations.get(store);\n if (storeOperations === undefined) {\n storeOperations = operationsFactory();\n storesOperations.set(store, storeOperations);\n }\n storeOperations.get(operation.type).push(operation);\n }\n\n Array.from(storesOperations.keys()).forEach(\n (store: EntityStore<object>) => {\n const storeOperations = storesOperations.get(store);\n\n const deletes = storeOperations.get(EntityOperationType.Delete);\n store.insertMany(\n deletes.map((_delete: EntityOperation) => _delete.previous)\n );\n\n const updates = storeOperations.get(EntityOperationType.Update);\n store.updateMany(\n updates.map((_update: EntityOperation) => _update.previous)\n );\n\n const inserts = storeOperations.get(EntityOperationType.Insert);\n store.deleteMany(\n inserts.map((_insert: EntityOperation) => _insert.current)\n );\n }\n );\n\n this.operations.deleteMany(operations);\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Clear this transaction\n * @todo Raise event and synchronize stores?\n */\n clear() {\n this.operations.clear();\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Get any existing operation on an entity\n * @param entity Entity\n * @returns Either an insert, update or delete operation\n */\n getOperationByEntity(entity: object): EntityOperation {\n return this.operations.get(this.getKey(entity));\n }\n\n /**\n * Merge another transaction in this one\n * @param transaction Another transaction\n */\n mergeTransaction(transaction: EntityTransaction) {\n this.checkInCommitPhase();\n\n const operations = transaction.operations.all();\n operations.forEach((operation: EntityOperation) => {\n this.addOperation(operation);\n });\n }\n\n /**\n * Create an insert operation and add an entity to the store\n * @param current The entity to insert\n * @param store Optional: The store to insert the entity into\n * @param meta Optional: Any metadata on the operation\n */\n private doInsert(\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(current),\n type: EntityOperationType.Insert,\n previous: undefined,\n current,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.insert(current);\n }\n }\n\n /**\n * Create an update operation and update an entity into the store\n * @param previous The entity before update\n * @param current The entity after update\n * @param store Optional: The store to update the entity into\n * @param meta Optional: Any metadata on the operation\n */\n private doUpdate(\n previous: object,\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(current),\n type: EntityOperationType.Update,\n previous,\n current,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.update(current);\n }\n }\n\n /**\n * Create a delete operation and delete an entity from the store\n * @param previous The entity before delete\n * @param store Optional: The store to delete the entity from\n * @param meta Optional: Any metadata on the operation\n */\n private doDelete(\n previous: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(previous),\n type: EntityOperationType.Delete,\n previous,\n current: undefined,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.delete(previous);\n }\n }\n\n /**\n * Remove committed operations from store\n * @param operations Commited operations\n * @todo Raise event and synchronize stores?\n */\n private resolveOperations(operations: EntityOperation[]) {\n this.operations.deleteMany(operations);\n }\n\n /**\n * On commit success, resolve commited operations and exit commit phase\n * @param operations Commited operations\n */\n private onCommitSuccess(operations: EntityOperation[]) {\n this.resolveOperations(operations);\n this.inCommitPhase$.next(false);\n }\n\n /**\n * On commit error, abort transaction\n * @param operations Commited operations\n */\n private onCommitError() {\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Add an operation to the operations store\n * @param operation Operation to add\n */\n private addOperation(operation: EntityOperation) {\n this.checkInCommitPhase();\n\n this.operations.insert(operation);\n this.operations.state.update(operation, { added: true });\n }\n\n /**\n * Remove an operation from the operations store\n * @param operation Operation to remove\n */\n private removeOperation(operation: EntityOperation) {\n this.checkInCommitPhase();\n\n this.operations.delete(operation);\n this.operations.state.update(operation, { added: false });\n }\n\n /**\n * Get all the operations to commit\n * @returns Operations to commit\n */\n private getOperationsInCommit(): EntityOperation[] {\n return this.operations.stateView\n .manyBy(\n (value: { entity: EntityOperation; state: EntityOperationState }) => {\n return value.state.added === true;\n }\n )\n .map(\n (value: { entity: EntityOperation; state: EntityOperationState }) =>\n value.entity\n );\n }\n\n /**\n * Check if the transaction is in the commit phase and throw an error if it is\n */\n private checkInCommitPhase() {\n if (this.inCommitPhase === true) {\n throw new Error(\n 'This transaction is in the commit phase. Cannot complete this operation.'\n );\n }\n }\n}\n","import { BehaviorSubject } from 'rxjs';\n\nimport { EntityStoreStrategyOptions } from '../entity.interfaces';\nimport type { EntityStore } from '../store';\n\n/**\n * Entity store strategies. They can do pretty much anything during a store's\n * lifetime. For example, they may act as triggers when something happens.\n * Sharing a strategy is a good idea when multiple strategies would have\n * on cancelling effect on each other.\n *\n * At creation, strategy is inactive and needs to be manually activated.\n */\nexport class EntityStoreStrategy {\n /**\n * Feature store\n * @internal\n */\n protected stores: EntityStore[] = [];\n\n /**\n * Whether this strategy is active\n * @internal\n */\n get active(): boolean {\n return this.active$.value;\n }\n readonly active$ = new BehaviorSubject<boolean>(false);\n\n constructor(protected options: EntityStoreStrategyOptions = {}) {\n this.options = options;\n }\n\n /**\n * Activate the strategy. If it's already active, it'll be deactivated\n * and activated again.\n */\n activate() {\n if (this.active === true) {\n this.doDeactivate();\n }\n this.active$.next(true);\n this.doActivate();\n }\n\n /**\n * Activate the strategy. If it's already active, it'll be deactivated\n * and activated again.\n */\n deactivate() {\n this.active$.next(false);\n this.doDeactivate();\n }\n\n /**\n * Bind this strategy to a store\n * @param store Feature store\n */\n bindStore(store: EntityStore) {\n if (this.stores.indexOf(store) < 0) {\n this.stores.push(store);\n }\n }\n\n /**\n * Unbind this strategy from store\n * @param store Feature store\n */\n unbindStore(store: EntityStore) {\n const index = this.stores.indexOf(store);\n if (index >= 0) {\n this.stores.splice(index, 1);\n }\n }\n\n /**\n * Do the stataegy activation\n * @internal\n */\n protected doActivate() {\n // empty\n }\n\n /**\n * Do the strategy deactivation\n * @internal\n */\n protected doDeactivate() {\n // empty\n }\n}\n","import { EntityStoreStrategyFuncOptions } from '../entity.interfaces';\nimport { EntityStore } from '../store';\nimport { EntityStoreStrategy } from './strategy';\n\n/**\n * When active, this strategy filters a store's stateView to return\n * selected entities only.\n */\nexport class EntityStoreFilterCustomFuncStrategy extends EntityStoreStrategy {\n constructor(protected options: EntityStoreStrategyFuncOptions) {\n super(options);\n }\n\n /**\n * Store / filter ids map\n */\n private filters = new Map<EntityStore, string>();\n\n /**\n * Bind this strategy to a store and start filtering it\n * @param store Entity store\n */\n bindStore(store: EntityStore) {\n super.bindStore(store);\n if (this.active === true) {\n this.filterStore(store);\n }\n }\n\n /**\n * Unbind this strategy from a store and stop filtering it\n * @param store Entity store\n */\n unbindStore(store: EntityStore) {\n super.unbindStore(store);\n if (this.active === true) {\n this.unfilterStore(store);\n }\n }\n\n /**\n * Start filtering all stores\n * @internal\n */\n protected doActivate() {\n this.filterAll();\n }\n\n /**\n * Stop filtering all stores\n * @internal\n */\n protected doDeactivate() {\n this.unfilterAll();\n }\n\n /**\n * Filter all stores\n */\n private filterAll() {\n this.stores.forEach((store: EntityStore) => this.filterStore(store));\n }\n\n /**\n * Unfilter all stores\n */\n private unfilterAll() {\n this.stores.forEach((store: EntityStore) => this.unfilterStore(store));\n }\n\n /**\n * Filter a store and add it to the filters map\n */\n private filterStore(store: EntityStore) {\n this.filters.set(\n store,\n store.stateView.addFilter(this.options.filterClauseFunc)\n );\n }\n\n /**\n * Unfilter a store and delete it from the filters map\n */\n private unfilterStore(store: EntityStore) {\n const filterId = this.filters.get(store);\n if (filterId === undefined) {\n return;\n }\n\n store.stateView.removeFilter(filterId);\n this.filters.delete(store);\n }\n}\n","import { EntityRecord } from '../entity.interfaces';\nimport { EntityStore } from '../store';\nimport { EntityStoreStrategy } from './strategy';\n\n/**\n * When active, this strategy filters a store's stateView to return\n * selected entities only.\n */\nexport class EntityStoreFilterSelectionStrategy extends EntityStoreStrategy {\n /**\n * Store / filter ids map\n */\n private filters = new Map<EntityStore, string>();\n\n /**\n * Bind this strategy to a store and start filtering it\n * @param store Entity store\n */\n bindStore(store: EntityStore) {\n super.bindStore(store);\n if (this.active === true) {\n this.filterStore(store);\n }\n }\n\n /**\n * Unbind this strategy from a store and stop filtering it\n * @param store Entity store\n */\n unbindStore(store: EntityStore) {\n super.unbindStore(store);\n if (this.active === true) {\n this.unfilterStore(store);\n }\n }\n\n /**\n * Start filtering all stores\n * @internal\n */\n protected doActivate() {\n this.filterAll();\n }\n\n /**\n * Stop filtering all stores\n * @internal\n */\n protected doDeactivate() {\n this.unfilterAll();\n }\n\n /**\n * Filter all stores\n */\n private filterAll() {\n this.stores.forEach((store: EntityStore) => this.filterStore(store));\n }\n\n /**\n * Unfilter all stores\n */\n private unfilterAll() {\n this.stores.forEach((store: EntityStore) => this.unfilterStore(store));\n }\n\n /**\n * Filter a store and add it to the filters map\n */\n private filterStore(store: EntityStore) {\n if (this.filters.has(store)) {\n return;\n }\n\n const filter = (record: EntityRecord<object>) => {\n return record.state.selected === true;\n };\n this.filters.set(store, store.stateView.addFilter(filter));\n }\n\n /**\n * Unfilter a store and delete it from the filters map\n */\n private unfilterStore(store: EntityStore) {\n const filterId = this.filters.get(store);\n if (filterId === undefined) {\n return;\n }\n\n store.stateView.removeFilter(filterId);\n this.filters.delete(store);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n inject\n} from '@angular/core';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { EntityRecord } from '../shared/entity.interfaces';\nimport { getEntityTitle } from '../shared/entity.utils';\nimport { EntityStore } from '../shared/store';\nimport { EntityStoreWatcher } from '../shared/watcher';\n\nexport interface EntitySelectorChange<T = any> {\n selected: boolean;\n value: T;\n}\n@Component({\n selector: 'igo-entity-selector',\n templateUrl: './entity-selector.component.html',\n styleUrls: ['./entity-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatFormFieldModule, MatSelectModule, MatOptionModule, AsyncPipe]\n})\nexport class EntitySelectorComponent implements OnInit, OnDestroy {\n private cdRef = inject(ChangeDetectorRef);\n\n /**\n * The selected entity\n * @internal\n */\n readonly selected$ = new BehaviorSubject<object>(undefined);\n\n /**\n * The current multi select option text\n * @internal\n */\n readonly multiText$ = new BehaviorSubject<string>(undefined);\n\n readonly multiSelectValue = { id: 'IGO_MULTI_SELECT' };\n\n readonly emptyValue = { id: 'IGO_EMPTY_SELECT' };\n\n /**\n * Subscription to the selected entity\n */\n private selected$$: Subscription;\n\n /**\n * Store watcher\n */\n private watcher: EntityStoreWatcher<object>;\n\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Title accessor\n */\n @Input() titleAccessor: (object) => string = getEntityTitle;\n\n /**\n * Text to display when nothing is selected\n */\n @Input() emptyText: string = undefined;\n\n /**\n * Wheter selecting many entities is allowed\n */\n @Input() multi = false;\n\n /**\n * Text to display for the select all option\n */\n @Input() multiAllText = 'All';\n\n /**\n * Text to display for the select none option\n */\n @Input() multiNoneText = 'None';\n\n /**\n * Field placeholder\n */\n @Input() placeholder: string;\n\n /**\n * Wheter the selector is disabled or not\n */\n @Input() disabled = false;\n\n /**\n * Event emitted when the selection changes\n */\n @Output() selectedChange = new EventEmitter<EntitySelectorChange>();\n\n /**\n * Create a store watcher and subscribe to the selected entity\n * @internal\n */\n ngOnInit() {\n this.watcher = new EntityStoreWatcher(this.store, this.cdRef);\n\n this.selected$$ = this.store.stateView\n .manyBy$((record: EntityRecord<object>) => record.state.selected === true)\n .subscribe((records: EntityRecord<object>[]) => {\n const entities = records.map(\n (record: EntityRecord<object>) => record.entity\n );\n this.onSelectFromStore(entities);\n });\n }\n\n /**\n * Unsubscribe to the selected entity and destroy the store watcher\n * @internal\n */\n ngOnDestroy() {\n this.watcher.destroy();\n this.selected$$.unsubscribe();\n }\n\n /**\n * On selection change, update the store's state and emit an event\n * @internal\n */\n onSelectionChange(event: { value: object | undefined }) {\n const values = event.value instanceof Array ? event.value : [event.value];\n\n const multiSelect = values.find(\n (_value: object) => _value === this.multiSelectValue\n );\n let entities = values.filter(\n (_value: object) => _value !== this.multiSelectValue\n );\n if (multiSelect !== undefined) {\n if (entities.length === this.store.count) {\n entities = [];\n } else if (entities.length < this.store.count) {\n entities = this.store.all();\n }\n }\n\n entities = entities.filter((entity: object) => entity !== this.emptyValue);\n if (entities.length === 0) {\n this.store.state.updateAll({ selected: false });\n } else {\n this.store.state.updateMany(entities, { selected: true }, true);\n }\n\n const value = this.multi ? entities : event.value;\n this.selectedChange.emit({ selected: true, value });\n }\n\n private onSelectFromStore(entities: object[]) {\n if (this.multi === true) {\n this.selected$.next(entities);\n } else {\n const entity = entities.length > 0 ? entities[0] : undefined;\n this.selected$.next(entity);\n }\n\n this.updateMultiToggleWithEntities(entities);\n }\n\n private updateMultiToggleWithEntities(entities: object[]) {\n if (\n entities.length === this.store.count &&\n this.multiText$.value !== this.multiNoneText\n ) {\n this.multiText$.next(this.multiNoneText);\n } else if (\n entities.length < this.store.count &&\n this.multiText$.value !== this.multiAllText\n ) {\n this.multiText$.next(this.multiAllText);\n }\n }\n}\n","<mat-form-field class=\"igo-entity-selector\" subscriptSizing=\"dynamic\">\n <mat-select\n [disabled]=\"disabled\"\n [value]=\"selected$ | async\"\n [multiple]=\"multi\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @if (emptyText !== undefined && multi === false) {\n <mat-option [value]=\"emptyValue\">{{ emptyText }}</mat-option>\n }\n @if (multi === true) {\n <mat-option [value]=\"multiSelectValue\">{{\n multiText$ | async\n }}</mat-option>\n }\n @for (record of store.stateView.all$() | async; track record) {\n <mat-option [value]=\"record.entity\">\n {{ titleAccessor(record.entity) }}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { NgModule } from '@angular/core';\n\nimport { EntitySelectorComponent } from './entity-selector.component';\n\n/**\n * @deprecated import the EntitySelectorComponent directly\n */\n@NgModule({\n imports: [EntitySelectorComponent],\n exports: [EntitySelectorComponent]\n})\nexport class IgoEntitySelectorModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n inject\n} from '@angular/core';\nimport {\n MatPaginator,\n MatPaginatorModule,\n PageEvent\n} from '@angular/material/paginator';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { MediaService } from '@igo2/core/media';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { EntityStore } from '../shared';\nimport { EntityTablePaginatorOptions } from './entity-table-paginator.interface';\n\n@Component({\n selector: 'igo-entity-table-paginator',\n templateUrl: './entity-table-paginator.component.html',\n styleUrls: ['./entity-table-paginator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatPaginatorModule]\n})\nexport class EntityTablePaginatorComponent implements OnChanges, OnDestroy {\n private languageService = inject(LanguageService);\n private mediaService = inject(MediaService);\n\n public disabled = false;\n public hidePageSize = false;\n public pageIndex = 0;\n public pageSize = 50;\n public pageSizeOptions: number[] = [5, 10, 20, 50, 100, 200];\n public showFirstLastButtons = true;\n private count$$: Subscription;\n private entitySortChange$$: Subscription;\n private paginationLabelTranslation$$: Subscription[] = [];\n\n @Input() entitySortChange$ = new BehaviorSubject<boolean>(false);\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Paginator options\n */\n @Input()\n paginatorOptions: EntityTablePaginatorOptions;\n\n /**\n * Event emitted when the paginator changes the page size or page index.\n */\n @Output() page: EventEmitter<PageEvent>;\n\n public length = 0;\n\n /**\n * Paginator emitted.\n */\n @Output() paginatorChange: EventEmitter<MatPaginator> =\n new EventEmitter<MatPaginator>();\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n\n ngOnChanges() {\n this.unsubscribeAll();\n this.count$$ = this.store.stateView.count$.subscribe((count) => {\n this.length = count;\n this.emitPaginator();\n });\n this.entitySortChange$$ = this.entitySortChange$.subscribe(() => {\n if (this.paginator) {\n this.paginator.firstPage();\n }\n });\n this.initPaginatorOptions();\n this.translateLabels();\n }\n\n initPaginatorOptions() {\n this.disabled = this.paginatorOptions?.disabled || this.disabled;\n this.pageIndex = this.paginatorOptions?.pageIndex || this.pageIndex;\n this.pageSize = this.paginatorOptions?.pageSize || this.pageSize;\n this.pageSizeOptions =\n this.paginatorOptions?.pageSizeOptions || this.pageSizeOptions;\n if (this.mediaService.isMobile()) {\n this.showFirstLastButtons = false;\n this.hidePageSize = true;\n } else {\n this.showFirstLastButtons =\n this.paginatorOptions?.showFirstLastButtons ||\n this.showFirstLastButtons;\n this.hidePageSize =\n this.paginatorOptions?.hidePageSize || this.hidePageSize;\n }\n }\n\n translateLabels() {\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.firstPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.firstPageLabel = label;\n })\n );\n\n this.paginator._intl.getRangeLabel = this.rangeLabel;\n\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.itemsPerPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.itemsPerPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.lastPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.lastPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.nextPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.nextPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.previousPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.previousPageLabel = label;\n })\n );\n }\n\n rangeLabel = (page: number, pageSize: number, length: number) => {\n const of = new BehaviorSubject<string>('');\n\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.of')\n .subscribe((label: string) => {\n of.next(label);\n })\n );\n if (length === 0 || pageSize === 0) {\n return `0 ${of.value} ${length}`;\n }\n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n const endIndex =\n startIndex < length\n ? Math.min(startIndex + pageSize, length)\n : startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${of.value} ${length}`;\n };\n\n private unsubscribeAll() {\n this.paginationLabelTranslation$$.map((sub) => sub.unsubscribe());\n if (this.count$$) {\n this.count$$.unsubscribe();\n }\n if (this.entitySortChange$$) {\n this.entitySortChange$$.unsubscribe();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribeAll();\n }\n\n emitPaginator() {\n this.paginatorChange.emit(this.paginator);\n }\n}\n","<mat-paginator\n [disabled]=\"disabled\"\n [hidePageSize]=\"hidePageSize\"\n [length]=\"length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n (page)=\"emitPaginator()\"\n>\n</mat-paginator>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n Renderer2,\n inject\n} from '@angular/core';\n\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nimport { EntityTableScrollBehavior } from '../shared/entity.enums';\n\n/**\n * Directive that handles an entity table row click and selection.\n */\n@Directive({\n selector: '[igoEntityTableRow]',\n standalone: true\n})\nexport class EntityTableRowDirective {\n private renderer = inject(Renderer2);\n private el = inject(ElementRef);\n\n /**\n * Class added to a selected row\n */\n static selectedCls = 'igo-entity-table-row-selected';\n\n /**\n * Class added to a highlighted row\n */\n static highlightedCls = 'igo-entity-table-row-highlighted';\n\n /**\n * Whether a row supports selection\n */\n @Input() selection = false;\n\n /**\n * Whether clicking a row should select it (if selection is true)\n */\n @Input() selectOnClick = true;\n\n /**\n * Whether the selected row should be highlighted\n */\n @Input() highlightSelection = true;\n\n /**\n * Whether a row is selected\n */\n @Input()\n set selected(value: boolean) {\n if (this.selection === false) {\n return;\n }\n if (value === this._selected) {\n return;\n }\n\n this.toggleSelected(value);\n this.scroll();\n }\n get selected(): boolean {\n return this._selected;\n }\n private _selected = false;\n\n /**\n * Scroll behavior on selection\n */\n @Input()\n scrollBehavior: EntityTableScrollBehavior = EntityTableScrollBehavior.Auto;\n\n /**\n * Event emitted when a row is selected\n */\n @Output() select = new EventEmitter<EntityTableRowDirective>();\n\n /**\n * When a row is clicked, select it if it's supported\n * @ignore\n */\n @HostListener('click')\n onClick() {\n if (this.selection === false || this.selectOnClick === false) {\n return;\n }\n\n this.toggleSelected(true);\n this.select.emit(this);\n }\n\n /**\n * Select a row and add or remove the selected class from it\n * @param selected Whether the row should be selected\n */\n private toggleSelected(selected: boolean) {\n this._selected = selected;\n if (selected === true) {\n this.addCls(EntityTableRowDirective.selectedCls);\n if (this.highlightSelection === true) {\n this.addCls(EntityTableRowDirective.highlightedCls);\n }\n } else {\n this.removeCls(EntityTableRowDirective.selectedCls);\n this.removeCls(EntityTableRowDirective.highlightedCls);\n }\n }\n\n /**\n * Scroll to the selected row\n */\n private scroll() {\n if (this._selected === true) {\n scrollIntoView(this.el.nativeElement, {\n scrollMode: 'if-needed',\n behavior: 'smooth',\n block: 'end',\n inline: 'nearest'\n });\n }\n }\n\n /**\n * Add the selected CSS class\n */\n private addCls(cls: string) {\n this.renderer.addClass(this.el.nativeElement, cls);\n }\n\n /**\n * Remove the selected CSS class\n */\n private removeCls(cls: string) {\n this.renderer.removeClass(this.el.nativeElement, cls);\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TrackByFunction,\n inject\n} from '@angular/core';\nimport {\n FormControlName,\n FormsModule,\n NgControl,\n NgForm,\n ReactiveFormsModule,\n UntypedFormBuilder,\n UntypedFormGroup\n} from '@angular/forms';\nimport { provideMomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport {\n DateAdapter,\n ErrorStateMatcher,\n MatNativeDateModule,\n MatOptionModule\n} from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport {\n MatFormFieldControl,\n MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SanitizeHtmlPipe } from '@igo2/common/custom-html';\nimport { ImageErrorDirective, SecureImagePipe } from '@igo2/common/image';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StringUtils } from '@igo2/utils';\n\nimport { default as moment } from 'moment';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\n\nimport { EntityTablePaginatorComponent } from '../entity-table-paginator/entity-table-paginator.component';\nimport { EntityTablePaginatorOptions } from '../entity-table-paginator/entity-table-paginator.interface';\nimport {\n EntityKey,\n EntityRecord,\n EntityState,\n EntityStore,\n EntityTableColumn,\n EntityTableColumnRenderer,\n EntityTableScrollBehavior,\n EntityTableSelectionState,\n EntityTableTemplate\n} from '../shared';\nimport { EntityTableRowDirective } from './entity-table-row.directive';\n\ntype CellData = Record<\n string,\n {\n value: any;\n class: Record<string, boolean>;\n isUrl: boolean;\n isImg: boolean;\n }\n>;\n\ninterface RowData {\n record: EntityRecord<object, EntityState>;\n cellData: CellData;\n}\n\n@Component({\n selector: 'igo-entity-table',\n templateUrl: './entity-table.component.html',\n styleUrls: ['./entity-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: MatFormFieldControl, useExisting: EntityTableComponent },\n provideMomentDateAdapter()\n ],\n imports: [\n AsyncPipe,\n EntityTablePaginatorComponent,\n EntityTableRowDirective,\n FormsModule,\n ImageErrorDirective,\n MatAutocompleteModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatNativeDateModule, // For the DateAdapter provider\n MatOptionModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatTooltipModule,\n NgClass,\n NgStyle,\n ReactiveFormsModule,\n SanitizeHtmlPipe,\n SecureImagePipe,\n StopPropagationDirective,\n IgoLanguageModule\n ]\n})\nexport class EntityTableComponent implements OnInit, OnChanges, OnDestroy {\n private cdRef = inject(ChangeDetectorRef);\n private formBuilder = inject(UntypedFormBuilder);\n protected _focusMonitor = inject(FocusMonitor);\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n ngControl = inject(NgControl, { optional: true, self: true });\n protected _parentForm = inject(NgForm, { optional: true });\n protected _controlName = inject(FormControlName, { optional: true });\n protected _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private dateAdapter = inject<DateAdapter<Date>>(DateAdapter);\n\n entitySortChange$ = new BehaviorSubject<boolean>(false);\n\n public formGroup: UntypedFormGroup = new UntypedFormGroup({});\n\n public filteredOptions = {};\n\n /**\n * Reference to the column renderer types\n * @internal\n */\n entityTableColumnRenderer = EntityTableColumnRenderer;\n\n /**\n * Reference to the selection's state\n * @internal\n */\n entityTableSelectionState = EntityTableSelectionState;\n\n /**\n * Observable of the selection,s state\n * @internal\n */\n readonly selectionState$ = new BehaviorSubject<EntityTableSelectionState>(\n undefined\n );\n\n /**\n * Subscription to the store's selection\n */\n private selection$$: Subscription;\n\n /**\n * Subscription to the dataSource\n */\n private dataSource$$: Subscription;\n\n /**\n * The last record checked. Useful for selecting\n * multiple records by holding the shift key and checking\n * checkboxes.\n */\n private lastRecordCheckedKey: EntityKey;\n\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Table paginator\n */\n @Input() set paginator(value: MatPaginator) {\n this._paginator = value;\n this.dataSource.paginator = value;\n }\n\n get paginator(): MatPaginator {\n return this._paginator;\n }\n private _paginator: MatPaginator;\n\n /**\n * Table template\n */\n @Input() template: EntityTableTemplate;\n\n /**\n * Scroll behavior on selection\n */\n @Input()\n scrollBehavior: EntityTableScrollBehavior = EntityTableScrollBehavior.Auto;\n\n /**\n * Whether nulls should be first when sorting\n */\n @Input()\n sortNullsFirst = false;\n\n /**\n * Show the table paginator or not. False by default.\n */\n @Input()\n withPaginator = false;\n\n /**\n * Paginator options\n */\n @Input()\n paginatorOptions: EntityTablePaginatorOptions;\n\n /**\n * Event emitted when an entity (row) is clicked\n */\n @Output() entityClick = new EventEmitter<object>();\n\n /**\n * Event emitted when an entity (row) is selected\n */\n @Output() entitySelectChange = new EventEmitter<{\n added: object[];\n }>();\n\n /**\n * Event emitted when the table sort is changed.\n */\n @Output() entitySortChange = new EventEmitter<{\n column: EntityTableColumn;\n direction: string;\n }>(undefined);\n\n /**\n * Table headers\n * @internal\n */\n get headers(): string[] {\n let columns = this.template.columns\n .filter((column: EntityTableColumn) => column.visible !== false)\n .map((column: EntityTableColumn) => column.name);\n\n if (this.selectionCheckbox === true) {\n columns = ['selectionCheckbox'].concat(columns);\n }\n\n return columns;\n }\n\n /**\n * Data source consumable by the underlying material table\n * @internal\n */\n dataSource = new MatTableDataSource<RowData>();\n\n /**\n * Whether selection is supported\n * @internal\n */\n get selection(): boolean {\n return this.template.selection || false;\n }\n\n /**\n * Whether a selection checkbox should be displayed\n * @internal\n */\n get selectionCheckbox(): boolean {\n return this.template.selectionCheckbox || false;\n }\n\n /**\n * Whether selection many entities should eb supported\n * @internal\n */\n get selectMany(): boolean {\n return this.template.selectMany || false;\n }\n\n /**\n * Whether selection many entities should eb supported\n * @internal\n */\n get fixedHeader(): boolean {\n return this.template.fixedHeader === undefined\n ? true\n : this.template.fixedHeader;\n }\n\n get tableHeight(): string {\n return this.template.tableHeight ? this.template.tableHeight : 'auto';\n }\n\n constructor() {\n this.dateAdapter.setLocale('fr-CA');\n }\n\n /**\n * Track the selection state to properly display the selection checkboxes\n * @internal\n */\n ngOnInit() {\n this.handleDatasource();\n this.dataSource.paginator = this.paginator;\n this.store.state.change$.pipe(debounceTime(100)).subscribe(() => {\n this.handleDatasource();\n this.refresh();\n });\n }\n\n /**\n * @internal\n */\n ngOnChanges(changes: SimpleChanges) {\n const store = changes.store;\n if (store && store.currentValue !== store.previousValue) {\n this.handleDatasource();\n }\n }\n\n /**\n * Process text or number value change (edition)\n */\n onValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.target.value;\n }\n\n /**\n * Process boolean value change (edition)\n */\n onBooleanValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.checked;\n }\n\n /**\n * Process select value change (edition)\n */\n onSelectValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.value;\n }\n\n /**\n * Process autocomplete value change (edition)\n */\n onAutocompleteValueChange(\n column: EntityTableColumn,\n record: EntityRecord<any>,\n event\n ) {\n this.formGroup.controls[column.name].setValue(event.option.viewValue);\n const key = this.getColumnKeyWithoutPropertiesTag(column.name);\n record.entity.properties[key] = event.option.value;\n }\n\n /**\n * Process date value change (edition)\n */\n onDateChange(column: string, record: EntityRecord<any>, event) {\n const format = 'YYYY-MM-DD';\n const value = moment(event.value).format(format);\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = value;\n }\n\n /**\n * Enable edition mode for one row\n * More than one row can be edited at the same time\n */\n private enableEdit(record: EntityRecord<any>) {\n const item = record.entity.properties || record.entity;\n this.template.columns.forEach((column) => {\n column.title =\n column.validation?.mandatory && !column.title.includes('*')\n ? column.title + ' *'\n : column.title;\n\n const key = this.getColumnKeyWithoutPropertiesTag(column.name);\n if (column.type === 'boolean') {\n if (!item[key] || item[key] === null) {\n item[key] = false;\n } else if (typeof item[key] === 'string') {\n item[key] = JSON.parse(item[key].toLowerCase());\n }\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n } else if (column.type === 'list') {\n if (column.multiple) {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control([item[key]])\n );\n } else {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n\n typeof item[key] === 'string'\n ? this.formGroup.controls[column.name].setValue(parseInt(item[key]))\n : this.formGroup.controls[column.name].setValue(item[key]);\n }\n } else if (column.type === 'autocomplete') {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n\n this.filteredOptions[column.name] = new Observable<any[]>();\n this.filteredOptions[column.name] = this.formGroup.controls[\n column.name\n ].valueChanges.pipe(\n map((value) => {\n if (value?.length) {\n return column.domainValues?.filter((option) => {\n const filterNormalized = value\n ? value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n : '';\n const featureNameNormalized = option.value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n return featureNameNormalized.includes(filterNormalized);\n });\n }\n })\n );\n\n let formControlValue = item[key];\n column.domainValues.forEach((option) => {\n if (\n typeof formControlValue === 'string' &&\n StringUtils.isValidNumber(formControlValue) &&\n !StringUtils.isOctalNumber(formControlValue)\n ) {\n formControlValue = parseInt(formControlValue);\n }\n if (\n option.value === formControlValue ||\n option.id === formControlValue\n ) {\n formControlValue = option.value;\n }\n });\n\n this.formGroup.controls[column.name].setValue(formControlValue);\n if (this.isEdition(record) && column.linkColumnForce) {\n const entity = record.entity as any;\n this.formGroup.controls[column.name].setValue(\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ]\n );\n }\n } else if (column.type === 'date') {\n if (column.visible !== false) {\n if (item[key]) {\n const date = moment(item[key]);\n item[key] = date.utc().format('YYYY-MM-DD');\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n } else {\n const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);\n record.entity.properties[newKey] = null;\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(null)\n );\n }\n }\n } else {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n }\n\n if (\n this.formGroup.controls[column.name] &&\n this.getValidationAttributeValue(column, 'readonly')\n ) {\n this.formGroup.controls[column.name].disable();\n }\n });\n }\n\n private handleDatasource() {\n this.unsubscribeStore();\n this.selection$$ = this.store.stateView\n .manyBy$((record: EntityRecord<object>) => record.state.selected === true)\n .subscribe((records: EntityRecord<object>[]) => {\n const firstSelected = records[0];\n const firstSelectedStateviewPosition = this.store.stateView\n .all()\n .indexOf(firstSelected);\n const pageMax = this.paginator\n ? this.paginator.pageSize * (this.paginator.pageIndex + 1)\n : 0;\n const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;\n\n if (\n this.paginator &&\n (firstSelectedStateviewPosition < pageMin ||\n firstSelectedStateviewPosition >= pageMax)\n ) {\n const pageToReach = Math.floor(\n firstSelectedStateviewPosition / this.paginator.pageSize\n );\n this.dataSource.paginator.pageIndex = pageToReach;\n }\n this.selectionState$.next(this.computeSelectionState(records));\n });\n this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {\n if (all[0]) {\n this.enableEdit(all[0]);\n }\n this.dataSource.data = all.map((record) => {\n return {\n record,\n cellData: this.template.columns.reduce(\n (cellData: CellData, column) => {\n const value = this.getValue(record, column);\n cellData[column.name] = {\n class: this.getCellClass(record, column),\n value,\n isUrl: this.isUrl(value),\n isImg: this.isImg(value)\n };\n return cellData;\n },\n {}\n )\n };\n });\n });\n }\n\n /**\n * Unbind the store watcher\n * @internal\n */\n ngOnDestroy() {\n this.unsubscribeStore();\n }\n\n private unsubscribeStore() {\n if (this.selection$$) {\n this.selection$$.unsubscribe();\n }\n if (this.dataSource$$) {\n this.dataSource$$.unsubscribe();\n }\n }\n\n /**\n * Trackby function\n * @param record Record\n * @param index Record index\n * @internal\n */\n getTrackByFunction(): TrackByFunction<RowData> {\n return (_index, row) => row.record.ref;\n }\n /**\n * Trigger a refresh of the table. This can be useful when\n * the data source doesn't emit a new value but for some reason\n * the records need an update.\n * @internal\n */\n refresh() {\n this.cdRef.detectChanges();\n }\n\n paginatorChange(event: MatPaginator) {\n this.paginator = event;\n }\n\n /**\n * On sort, sort the store\n * @param event Sort event\n * @internal\n */\n onSort(event: { active: string; direction: string }) {\n const direction = event.direction;\n const column = this.template.columns.find(\n (c: EntityTableColumn) => c.name === event.active\n );\n\n if (direction === 'asc' || direction === 'desc') {\n this.store.stateView.sort({\n valueAccessor: (record: EntityRecord<object>) =>\n this.getValue(record, column),\n direction,\n nullsFirst: this.sortNullsFirst\n });\n this.entitySortChange.emit({ column, direction });\n this.entitySortChange$.next(true);\n } else {\n this.store.stateView.sort(undefined);\n }\n }\n\n /**\n * When an entity is clicked, emit an event\n * @param record Record\n * @internal\n */\n onRowClick(record: EntityRecord<object>) {\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n this.entityClick.emit(record.entity);\n }\n\n /**\n * When an entity is selected, select it in the store and emit an event. Even if\n * \"many\" is set to true, this method always select a single, exclusive row. Selecting\n * multiple rows should be achieved by using the checkboxes.\n * @param record Record\n * @internal\n */\n onRowSelect(record: EntityRecord<object>) {\n if (this.selection === false) {\n return;\n }\n\n const entity = record.entity;\n this.store.state.update(entity, { selected: true }, true);\n this.entitySelectChange.emit({ added: [entity] });\n }\n\n /**\n * Select or unselect all rows at once. On select, emit an event.\n * @param toggle Select or unselect\n * @internal\n */\n onToggleRows(toggle: boolean) {\n if (this.selection === false) {\n return;\n }\n\n const entities = this.store.view.all();\n this.entitySelectChange.emit({ added: [entities] });\n this.store.state.updateMany(entities, { selected: toggle });\n }\n\n /**\n * When an entity is toggled, select or unselect it in the store. On select,\n * emit an event.\n * @param toggle Select or unselect\n * @param record Record\n * @internal\n */\n onToggleRow(toggle: boolean, record: EntityRecord<object>) {\n if (this.selection === false) {\n return;\n }\n\n const entity = record.entity;\n const exclusive = toggle === true && !this.selectMany;\n this.store.state.update(entity, { selected: toggle }, exclusive);\n if (toggle === true) {\n this.entitySelectChange.emit({ added: [entity] });\n }\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n }\n\n /**\n * When an entity is toggled, select or unselect it in the store. On select,\n * emit an event.\n * @param toggle Select or unselect\n * @param record Record\n * @internal\n */\n onShiftToggleRow(\n toggle: boolean,\n record: EntityRecord<object>,\n event: MouseEvent\n ) {\n if (this.selection === false) {\n return;\n }\n\n if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {\n this.onToggleRow(toggle, record);\n return;\n }\n\n // This is a workaround mat checkbox wrong behavior\n // when the shift key is held.\n // See https://github.com/angular/components/issues/6232\n const range = window.document.createRange();\n range.selectNode(event.target as HTMLElement);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n event.stopImmediatePropagation();\n\n const records = this.store.stateView.all();\n const recordIndex = records.indexOf(record);\n const lastRecordChecked = this.store.stateView.get(\n this.lastRecordCheckedKey\n );\n const lastRecordIndex = records.indexOf(lastRecordChecked);\n const indexes = [recordIndex, lastRecordIndex];\n const selectRecords = records.slice(\n Math.min(...indexes),\n Math.max(...indexes) + 1\n );\n\n const entities = selectRecords.map(\n (_record: EntityRecord<object>) => _record.entity\n );\n this.store.state.updateMany(entities, { selected: toggle });\n if (toggle === true) {\n this.entitySelectChange.emit({ added: entities });\n }\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n }\n\n /**\n * Compute the selection state\n * @returns Whether all, some or no rows are selected\n * @internal\n */\n private computeSelectionState(\n selectedRecords: EntityRecord<object>[]\n ): EntityTableSelectionState {\n const states = EntityTableSelectionState;\n const selectionCount = selectedRecords.length;\n return selectionCount === 0\n ? states.None\n : selectionCount === this.store.stateView.count\n ? states.All\n : states.Some;\n }\n\n /**\n * Whether a column is sortable\n * @param column Column\n * @returns True if a column is sortable\n * @internal\n */\n columnIsSortable(column: EntityTableColumn): boolean {\n let sortable = column.sort;\n if (sortable === undefined) {\n sortable = this.template.sort === undefined ? false : this.template.sort;\n }\n return sortable;\n }\n\n /**\n * Whether a row is should be selected based on the underlying entity state\n * @param record Record\n * @returns True if a row should be selected\n * @internal\n */\n rowIsSelected(record: EntityRecord<object>): boolean {\n const state = record.state;\n return state.selected ? state.selected : false;\n }\n\n isImg(value) {\n if (this.isUrl(value)) {\n return (\n ['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !==\n -1\n );\n } else {\n return false;\n }\n }\n\n isUrl(value) {\n if (typeof value === 'string') {\n return (\n value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://'\n );\n } else {\n return false;\n }\n }\n\n /**\n * Method to access an entity's values\n * @param record Record\n * @param column Column\n * @returns Any value\n * @internal\n */\n getValue(record: EntityRecord<object>, column: EntityTableColumn): any {\n const entity = record.entity;\n let value;\n if (column.valueAccessor !== undefined) {\n return column.valueAccessor(entity, record);\n }\n if (this.template.valueAccessor !== undefined) {\n return this.template.valueAccessor(entity, column.name, record);\n }\n value = this.store.getProperty(entity, column.name);\n\n if (column.type === 'boolean') {\n if (value === undefined || value === null || value === '') {\n value = false;\n } else if (typeof value !== 'boolean' && value !== undefined) {\n if (typeof value === 'number') {\n value = Boolean(value);\n } else {\n value = JSON.parse(value.toLowerCase());\n }\n }\n if (!this.isEdition(record)) {\n value = value ? '&#10003;' : ''; // check mark\n }\n } else if (column.type === 'list' && value && column.domainValues) {\n const entity = record.entity as any;\n if (column.multiple) {\n let list_id;\n typeof value === 'string'\n ? (list_id = value.match(/[\\w.-]+/g).map(Number))\n : (list_id = value);\n const list_option = [];\n\n column.domainValues.forEach((option) => {\n if (list_id.includes(option.id)) {\n if (record.edition) {\n list_option.push(option.id);\n } else {\n list_option.push(option.value);\n }\n }\n });\n\n this.isEdition(record) ? (value = list_id) : (value = list_option);\n } else {\n if (!this.isEdition(record) && column.linkColumnForce) {\n value =\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ];\n } else {\n column.domainValues.forEach((option) => {\n if (\n typeof value === 'string' &&\n StringUtils.isValidNumber(value) &&\n !StringUtils.isOctalNumber(value)\n ) {\n value = parseInt(value);\n }\n if (option.value === value || option.id === value) {\n this.isEdition(record)\n ? (value = option.id)\n : (value = option.value);\n }\n });\n }\n }\n } else if (column.type === 'autocomplete' && value && column.domainValues) {\n const entity = record.entity as any;\n if (!this.isEdition(record) && column.linkColumnForce) {\n value =\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ];\n } else {\n column.domainValues.forEach((option) => {\n if (\n typeof value === 'string' &&\n StringUtils.isValidNumber(value) &&\n !StringUtils.isOctalNumber(value)\n ) {\n value = parseInt(value);\n }\n if (option.value === value || option.id === value) {\n value = option.value;\n }\n });\n }\n } else if (column.type === 'date') {\n if (this.isEdition(record)) {\n if (value) {\n const date = moment(value);\n value = date.format();\n this.formGroup.controls[column.name].setValue(value);\n }\n } else if (!this.isEdition(record) && value === null) {\n value = '';\n }\n }\n\n if (value === undefined) {\n value = '';\n }\n\n return value;\n }\n\n /**\n * Method to access an entity's validation values\n * @param column Column\n * @param validationType string\n * @returns Any value (false if no validation or not the one concerned)\n * @internal\n */\n getValidationAttributeValue(\n column: EntityTableColumn,\n validationType: string\n ): any {\n if (\n column.validation !== undefined &&\n column.validation[validationType] !== undefined\n ) {\n return column.validation[validationType];\n } else {\n return false;\n }\n }\n\n public isEdition(record) {\n return record.entity.edition ? true : false;\n }\n\n /**\n * Return the type of renderer of a column\n * @param column Column\n * @returns Renderer type\n * @internal\n */\n getColumnRenderer(column: EntityTableColumn): EntityTableColumnRenderer {\n if (column.renderer !== undefined) {\n return column.renderer;\n }\n return EntityTableColumnRenderer.Default;\n }\n\n /**\n * Return the table ngClass\n * @returns ngClass\n * @internal\n */\n getTableClass(): Record<string, boolean> {\n return {\n 'igo-entity-table-with-selection': this.selection\n };\n }\n\n /**\n * Return a header ngClass\n * @returns ngClass\n * @internal\n */\n getHeaderClass(): Record<string, boolean> {\n const func = this.template.headerClassFunc;\n if (func instanceof Function) {\n return func();\n }\n return {};\n }\n\n /**\n * Return a row ngClass\n * @param record Record\n * @returns ngClass\n * @internal\n */\n getRowClass(record: EntityRecord<object>): Record<string, boolean> {\n const entity = record.entity;\n const func = this.template.rowClassFunc;\n if (func instanceof Function) {\n return func(entity, record);\n }\n return {};\n }\n\n /**\n * Return a row ngClass\n * @param record Record\n * @param column Column\n * @returns ngClass\n * @internal\n */\n getCellClass(\n record: EntityRecord<object>,\n column: EntityTableColumn\n ): Record<string, boolean> {\n const entity = record.entity;\n const cls = {};\n\n const tableFunc = this.template.cellClassFunc;\n if (tableFunc instanceof Function) {\n Object.assign(cls, tableFunc(entity, column, record));\n }\n\n const columnFunc = column.cellClassFunc;\n if (columnFunc instanceof Function) {\n Object.assign(cls, columnFunc(entity, record));\n }\n\n return cls;\n }\n\n /**\n * When a button is clicked\n * @param func Function\n * @param record Record\n * @internal\n */\n onButtonClick(\n clickFunc: (entity: object, record?: EntityRecord<object>) => void,\n record: EntityRecord<object>\n ) {\n this.enableEdit(record);\n if (typeof clickFunc === 'function') {\n clickFunc(record.entity, record);\n }\n }\n\n /**\n * Retrieve column name without his \"properties\" tag (useful for edition workspace properties)\n */\n public getColumnKeyWithoutPropertiesTag(column: string) {\n if (column.includes('properties.')) {\n return column.split('.')[1];\n }\n return column;\n }\n}\n","<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\n <table\n id=\"currentWorkspaceTable\"\n mat-table\n matSort\n [ngClass]=\"getTableClass()\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"getTrackByFunction()\"\n (matSortChange)=\"onSort($event)\"\n >\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\n <th mat-header-cell *matHeaderCellDef>\n @if (selectMany) {\n @let selectionState = selectionState$ | async;\n @if (selectionState) {\n <mat-checkbox\n (change)=\"onToggleRows($event.checked)\"\n [checked]=\"selectionState === entityTableSelectionState.All\"\n [indeterminate]=\"\n selectionState === entityTableSelectionState.Some\n \"\n >\n </mat-checkbox>\n }\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\n (click)=\"\n $event.shiftKey\n ? onShiftToggleRow(!rowIsSelected(row.record), row.record, $event)\n : $event.stopPropagation()\n \"\n (change)=\"onToggleRow($event.checked, row.record)\"\n [checked]=\"rowIsSelected(row.record)\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n @for (column of template.columns; track column) {\n <ng-container [matColumnDef]=\"column.name\">\n @if (columnIsSortable(column)) {\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n >\n {{ column.title }}\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n >\n {{ column.title }}\n </th>\n }\n\n @let columnRenderer = getColumnRenderer(column);\n @if (columnRenderer) {\n @switch (columnRenderer) {\n @case (entityTableColumnRenderer.HTML) {\n <ng-container *matCellDef=\"let row\">\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n [innerHTML]=\"row.cellData[column.name].value\"\n ></td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n <span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span>\n }\n >\n </a>\n </td>\n }\n </ng-container>\n }\n @case (entityTableColumnRenderer.UnsanitizedHTML) {\n <ng-container *matCellDef=\"let row\">\n @if (isEdition(row.record)) {\n <td\n mat-cell\n class=\"mat-cell-text edition\"\n [formGroup]=\"formGroup\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @switch (column.type) {\n @case ('date') {\n <div class=\"date-picker\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n ></mat-datepicker-toggle>\n <input\n matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"column.name\"\n value=\"{{ row.cellData[column.name].value }}\"\n (dateChange)=\"\n onDateChange(column.name, row.record, $event)\n \"\n />\n <mat-datepicker #picker></mat-datepicker>\n </div>\n }\n @case ('time') {\n <input\n matInput\n type=\"time\"\n [formControlName]=\"column.name\"\n step=\"900\"\n (focus)=\"column.onFocus($event)\"\n (keypress)=\"column.onChange($event)\"\n (blur)=\"column.onBlur($event)\"\n />\n }\n @case ('number') {\n <input\n matInput\n type=\"number\"\n class=\"class_number_edition\"\n [formControlName]=\"column.name\"\n step=\"{{ column.step }}\"\n value=\"{{ row.cellData[column.name].value }}\"\n (input)=\"\n onValueChange(column.name, row.record, $event)\n \"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n min=\"{{\n getValidationAttributeValue(column, 'minValue')\n }}\"\n max=\"{{\n getValidationAttributeValue(column, 'maxValue')\n }}\"\n />\n }\n @case ('boolean') {\n <mat-checkbox\n [formControlName]=\"column.name\"\n [checked]=\"row.cellData[column.name].value\"\n (change)=\"\n onBooleanValueChange(\n column.name,\n row.record,\n $event\n )\n \"\n ></mat-checkbox>\n }\n @case ('list') {\n <mat-select\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n [formControlName]=\"column.name\"\n [multiple]=\"column.multiple\"\n (selectionChange)=\"\n onSelectValueChange(column.name, row.record, $event)\n \"\n [value]=\"row.cellData[column.name].value\"\n >\n <mat-option\n *ngFor=\"let option of column.domainValues\"\n [value]=\"option.id\"\n [disabled]=\"option.disabled\"\n >\n {{ option.value }}\n </mat-option>\n </mat-select>\n }\n @case ('autocomplete') {\n <input\n matInput\n type=\"text\"\n [formControlName]=\"column.name\"\n [matAutocomplete]=\"auto\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n value=\"{{ row.cellData[column.name].value }}\"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"\n onAutocompleteValueChange(\n column,\n row.record,\n $event\n )\n \"\n panelWidth=\"430px\"\n >\n <mat-option\n *ngFor=\"\n let option of filteredOptions[column.name] | async\n \"\n [value]=\"option.id\"\n >\n {{ option.value }}\n </mat-option>\n </mat-autocomplete>\n }\n @default {\n <input\n matInput\n type=\"text\"\n [formControlName]=\"column.name\"\n value=\"{{ row.cellData[column.name].value }}\"\n (input)=\"\n onValueChange(column.name, row.record, $event)\n \"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n />\n }\n }\n </td>\n } @else {\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n [innerHTML]=\"\n row.cellData[column.name].value | sanitizeHtml\n \"\n ></td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n ><span\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\n </span>\n }\n >\n </a>\n </td>\n }\n }\n </ng-container>\n }\n @case (entityTableColumnRenderer.Icon) {\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @if (column.onClick) {\n <mat-icon (click)=\"column.onClick($event)\">{{\n row.cellData[column.name].value || column.icon\n }}</mat-icon>\n } @else {\n <mat-icon>{{\n row.cellData[column.name].value || column.icon\n }}</mat-icon>\n }\n </td>\n }\n @case (entityTableColumnRenderer.ButtonGroup) {\n <ng-container *matCellDef=\"let row\">\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @for (\n button of row.cellData[column.name].value;\n track button\n ) {\n @if (\n isEdition(row.record) === button.editMode ||\n button.editMode === undefined\n ) {\n <span>\n @if (button.style === 'mat-icon-button') {\n <button\n igoStopPropagation\n mat-icon-button\n [color]=\"button.color\"\n (mousedown)=\"\n onButtonClick(button.click, row.record)\n \"\n [disabled]=\"button.disabled\"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n } @else {\n <button\n igoStopPropagation\n mat-mini-fab\n [color]=\"button.color\"\n (mousedown)=\"\n onButtonClick(button.click, row.record)\n \"\n [disabled]=\"button.disabled\"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n }\n </span>\n }\n }\n </td>\n </ng-container>\n }\n @default {\n <ng-container *matCellDef=\"let row\">\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n {{ row.cellData[column.name].value }}\n </td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n <span>{{\n 'igo.common.entity-table.targetHtmlUrl' | translate\n }}</span>\n }\n >\n </a>\n </td>\n }\n </ng-container>\n }\n }\n }\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\n [ngClass]=\"getHeaderClass()\"\n ></tr>\n <tr\n mat-row\n igoEntityTableRow\n *matRowDef=\"let row; columns: headers\"\n [scrollBehavior]=\"scrollBehavior\"\n [ngClass]=\"getRowClass(row.record)\"\n [selection]=\"selection\"\n [selected]=\"rowIsSelected(row.record)\"\n (select)=\"onRowSelect(row.record)\"\n (click)=\"onRowClick(row.record)\"\n ></tr>\n </table>\n @if (withPaginator) {\n <igo-entity-table-paginator\n [store]=\"store\"\n [paginatorOptions]=\"paginatorOptions\"\n [entitySortChange$]=\"entitySortChange$\"\n (paginatorChange)=\"paginatorChange($event)\"\n >\n </igo-entity-table-paginator>\n }\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { EntityTableComponent } from './entity-table.component';\n\n/**\n * @deprecated import the EntityTableComponent directly\n */\n@NgModule({\n imports: [EntityTableComponent],\n exports: [EntityTableComponent]\n})\nexport class IgoEntityTableModule {}\n","import { NgModule } from '@angular/core';\n\nimport { EntityTablePaginatorComponent } from './entity-table-paginator.component';\n\n/**\n * @deprecated import the EntityTablePaginatorComponent directly\n */\n@NgModule({\n imports: [EntityTablePaginatorComponent],\n exports: [EntityTablePaginatorComponent]\n})\nexport class IgoEntityTablePaginatorModule {}\n","import { NgModule } from '@angular/core';\n\nimport { EntitySelectorComponent } from './entity-selector';\nimport { EntityTableComponent } from './entity-table';\nimport { EntityTablePaginatorComponent } from './entity-table-paginator';\n\nexport const ENTITY_DIRECTIVES = [\n EntitySelectorComponent,\n EntityTableComponent,\n EntityTablePaginatorComponent\n] as const;\n\n/**\n * @deprecated import the components directly or ENTITY_DIRECTIVES for every components/directives\n */\n@NgModule({\n imports: [...ENTITY_DIRECTIVES],\n exports: [...ENTITY_DIRECTIVES]\n})\nexport class IgoEntityModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i7"],"mappings":"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"}
1
+ {"version":3,"file":"igo2-common-entity.mjs","sources":["../../../packages/common/entity/src/shared/entity.enums.ts","../../../packages/common/entity/src/shared/entity.utils.ts","../../../packages/common/entity/src/shared/state.ts","../../../packages/common/entity/src/shared/view.ts","../../../packages/common/entity/src/shared/store.ts","../../../packages/common/entity/src/shared/watcher.ts","../../../packages/common/entity/src/shared/transaction.ts","../../../packages/common/entity/src/shared/strategies/strategy.ts","../../../packages/common/entity/src/shared/strategies/filter-custom-function.ts","../../../packages/common/entity/src/shared/strategies/filter-selection.ts","../../../packages/common/entity/src/entity-selector/entity-selector.component.ts","../../../packages/common/entity/src/entity-selector/entity-selector.component.html","../../../packages/common/entity/src/entity-selector/entity-selector.module.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.component.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.component.html","../../../packages/common/entity/src/entity-table/entity-table-row.directive.ts","../../../packages/common/entity/src/entity-table/entity-table.component.ts","../../../packages/common/entity/src/entity-table/entity-table.component.html","../../../packages/common/entity/src/entity-table/entity-table.module.ts","../../../packages/common/entity/src/entity-table-paginator/entity-table-paginator.module.ts","../../../packages/common/entity/src/entity.module.ts","../../../packages/common/entity/src/igo2-common-entity.ts"],"sourcesContent":["export enum EntityOperationType {\n Insert = 'Insert',\n Update = 'Update',\n Delete = 'Delete'\n}\n\nexport enum EntityTableColumnRenderer {\n Default = 'Default',\n HTML = 'HTML',\n UnsanitizedHTML = 'UnsanitizedHTML',\n Editable = 'Editable',\n Icon = 'Icon',\n ButtonGroup = 'ButtonGroup'\n}\n\nexport enum EntityTableScrollBehavior {\n Auto = 'auto',\n Instant = 'instant',\n Smooth = 'smooth'\n}\n\nexport enum EntityTableSelectionState {\n None = 'None',\n All = 'All',\n Some = 'Some'\n}\n","import { t } from 'typy';\n\nimport { EntityKey } from './entity.interfaces';\n\n/**\n * Get an entity's named property. Nested properties are supported\n * with the dotted notation. (i.e 'author.name')\n *\n * Note: this method is a 'best attempt' at getting an entity's property.\n * It fits the most common cases but you might need to explicitely define\n * a property getter when using an EntityStore, for example.\n * @param entity Entity\n * @param property Property name\n * @returns Property value\n */\nexport function getEntityProperty(entity: object, property: string): any {\n return t(entity, property).safeObject;\n}\n\n/**\n * Get an entity's id. An entity's id can be one of:\n * 'entity.meta.id', 'entity.meta.idProperty' or 'entity.id'.\n *\n * Note: See the note in the 'getEntityProperty' documentation.\n * @param entity Entity\n * @returns Entity id\n */\nexport function getEntityId(entity: object): EntityKey {\n const meta = (entity as any).meta || {};\n return meta.id ? meta.id : getEntityProperty(entity, meta.idProperty || 'id');\n}\n\n/**\n * Get an entity's title. An entity's title can be one of:\n * 'entity.meta.title', 'entity.meta.titleProperty' or 'entity.title'.\n * @param entity Entity\n * @returns Entity title\n */\nexport function getEntityTitle(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.title\n ? meta.title\n : getEntityProperty(entity, meta.titleProperty || 'title');\n}\n\n/**\n * Get an entity's HTML title. An entity's HTML title can be one of:\n * 'entity.meta.titleHtml', 'entity.meta.titleHtmlProperty' or 'entity.titleHtml'.\n * @param entity Entity\n * @returns Entity HTML title\n */\nexport function getEntityTitleHtml(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.titleHtml\n ? meta.titleHtml\n : getEntityProperty(entity, meta.titleHtmlProperty || 'titleHtml');\n}\n\n/**\n * Get an entity's icon. An entity's icon can be one of:\n * 'entity.meta.icon', 'entity.meta.iconProperty' or 'entity.icon'.\n * @param entity Entity\n * @returns Entity icon\n */\nexport function getEntityIcon(entity: object): string {\n const meta = (entity as any).meta || {};\n return meta.icon\n ? meta.icon\n : getEntityProperty(entity, meta.iconProperty || 'icon');\n}\n\n/**\n * Get an entity's revision.\n * @param entity Entity\n * @returns Entity revision\n */\nexport function getEntityRevision(entity: object): number {\n const meta = (entity as any).meta || {};\n return meta.revision || 0;\n}\n","import { ReplaySubject } from 'rxjs';\n\nimport { EntityKey, EntityState } from './entity.interfaces';\nimport { getEntityId } from './entity.utils';\n\ninterface EntityStateManagerOptions<E extends object> {\n getKey?: (entity: object) => EntityKey;\n index?: Map<EntityKey, E>;\n}\n\n/**\n * This class is used to track a store's entities state\n */\nexport class EntityStateManager<\n E extends object,\n S extends EntityState = EntityState\n> {\n /**\n * State index\n */\n readonly index = new Map<EntityKey, S>();\n\n /**\n * Change emitter\n */\n readonly change$ = new ReplaySubject<void>(1);\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n constructor(private options: EntityStateManagerOptions<E> = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n\n this.next();\n }\n\n /**\n * Clear state\n */\n clear() {\n if (this.index.size > 0) {\n this.index.clear();\n this.next();\n }\n }\n\n /**\n * Get an entity's state\n * @param entity Entity\n * @returns State\n */\n get(entity: E): S {\n return (this.index.get(this.getKey(entity)) || {}) as S;\n }\n\n /**\n * Set an entity's state\n * @param entity Entity\n * @param state State\n */\n set(entity: E, state: S) {\n this.setMany([entity], state);\n }\n\n /**\n * Set many entitie's state\n * @param entitie Entities\n * @param state State\n */\n setMany(entities: E[], state: S) {\n entities.forEach((entity: E) => {\n this.index.set(this.getKey(entity), Object.assign({}, state));\n });\n this.next();\n }\n\n /**\n * Set state of all entities that already have a state. This is not\n * the same as setting the state of all the store's entities.\n * @param state State\n */\n setAll(state: S) {\n Array.from(this.index.keys()).forEach((key: EntityKey) => {\n this.index.set(key, Object.assign({}, state));\n });\n this.next();\n }\n\n /**\n * Update an entity's state\n * @param entity Entity\n * @param changes State changes\n */\n update(entity: E, changes: Partial<S>, exclusive = false) {\n this.updateMany([entity], changes, exclusive);\n }\n\n /**\n * Update many entitie's state\n * @param entitie Entities\n * @param changes State changes\n */\n updateMany(entities: E[], changes: Partial<S>, exclusive = false) {\n if (exclusive === true) {\n return this.updateManyExclusive(entities, changes);\n }\n\n entities.forEach((entity: E) => {\n const state = Object.assign({}, this.get(entity), changes);\n this.index.set(this.getKey(entity), state);\n });\n this.next();\n }\n\n /**\n * Reversee an entity's state\n * @param entity Entity\n * @param keys State keys to reverse\n */\n reverse(entity: E, keys: string[]) {\n this.reverseMany([entity], keys);\n }\n\n /**\n * Reverse many entitie's state\n * @param entitie Entities\n * @param keys State keys to reverse\n */\n reverseMany(entities: E[], keys: string[]) {\n entities.forEach((entity: E) => {\n const currentState = this.get(entity);\n const changes = keys.reduce(\n (acc: Record<string, boolean>, key: string) => {\n acc[key] = currentState[key] || false;\n return acc;\n },\n {}\n ) as Partial<S>;\n const reversedChanges = this.reverseChanges(changes);\n const state = Object.assign({}, currentState, reversedChanges);\n this.index.set(this.getKey(entity), state);\n });\n this.next();\n }\n\n /**\n * Update state of all entities that already have a state. This is not\n * the same as updating the state of all the store's entities.\n * @param changes State\n */\n updateAll(changes: Partial<S>) {\n const allKeys = this.getAllKeys();\n Array.from(allKeys).forEach((key: EntityKey) => {\n const state = Object.assign({}, this.index.get(key), changes);\n this.index.set(key, state);\n });\n this.next();\n }\n\n /**\n * When some state changes are flagged as 'exclusive', reverse\n * the state of all other entities. Changes are reversable when\n * they are boolean.\n * @param entitie Entities\n * @param changes State changes\n */\n private updateManyExclusive(entities: E[], changes: Partial<S>) {\n const reverseChanges = this.reverseChanges(changes);\n\n const keys = entities.map((entity: E) => this.getKey(entity));\n const allKeys = new Set(keys.concat(Array.from(this.getAllKeys())));\n allKeys.forEach((key: EntityKey) => {\n const state = this.index.get(key) || ({} as S);\n\n if (keys.indexOf(key) >= 0) {\n this.index.set(key, Object.assign({}, state, changes));\n } else {\n // Update only if the reverse changes would modify\n // a key already present in the current state\n const shouldUpdate = Object.keys(reverseChanges).some(\n (changeKey: string) => {\n return (\n state[changeKey] !== undefined &&\n state[changeKey] !== reverseChanges[changeKey]\n );\n }\n );\n if (shouldUpdate === true) {\n this.index.set(key, Object.assign({}, state, reverseChanges));\n }\n }\n });\n\n this.next();\n }\n\n /**\n * Compute a 'reversed' version of some state changes.\n * Changes are reversable when they are boolean.\n * @param changes State changes\n * @returns Reversed state changes\n */\n private reverseChanges(changes: Partial<S>): Partial<S> {\n return Object.entries(changes).reduce(\n (reverseChanges: Partial<S>, bunch: [string, any]) => {\n const [changeKey, value] = bunch;\n if (typeof value === typeof true) {\n (reverseChanges as object)[changeKey] = !value;\n }\n return reverseChanges;\n },\n {}\n );\n }\n\n /**\n * Return all the keys in that state and in the store it's bound to, if any.\n * @returns Set of keys\n */\n private getAllKeys(): Set<EntityKey> {\n const storeKeys = Array.from(this.options?.index?.keys() ?? []);\n return new Set(Array.from(this.index.keys()).concat(storeKeys));\n }\n\n /**\n * Emit 'change' event\n */\n private next() {\n this.change$.next();\n }\n}\n","import { ObjectUtils, uuid } from '@igo2/utils';\n\nimport { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs';\nimport { debounceTime, map, skip } from 'rxjs/operators';\n\nimport {\n EntityFilterClause,\n EntityJoinClause,\n EntityKey,\n EntitySortClause\n} from './entity.interfaces';\n\n/**\n * An entity view streams entities from an observable source. These entities\n * can be filtered or sorted without affecting the source. A view can also\n * combine data from multiple sources, joined together.\n */\nexport class EntityView<E extends object, V extends object = E> {\n /**\n * Observable stream of values\n */\n readonly values$ = new BehaviorSubject<V[]>([]);\n\n /**\n * Subscription to the source (and joined sources) values\n */\n private values$$: Subscription;\n\n /**\n * Whether this view has been lifted\n */\n private lifted = false;\n\n /**\n * Join clauses\n */\n private joins: EntityJoinClause[] = [];\n\n /**\n * Observable of a filter clause\n */\n private filter$ = new BehaviorSubject(undefined);\n\n /**\n * Observable of filter clauses\n */\n private filters$ = new BehaviorSubject<EntityFilterClause[]>([]);\n\n /**\n * Filters index\n */\n private filterIndex = new Map<string, EntityFilterClause>();\n\n /**\n * Observable of a sort clause\n */\n private sort$ = new BehaviorSubject(undefined);\n\n /**\n * Method for indexing\n */\n get getKey(): (V) => EntityKey {\n return this.getKey$.value;\n }\n private getKey$ = new BehaviorSubject<(V) => EntityKey>(undefined);\n\n /**\n * Number of entities\n */\n readonly count$ = new BehaviorSubject<number>(0);\n get count(): number {\n return this.count$.value;\n }\n\n /**\n * Whether the store is empty\n */\n readonly empty$ = new BehaviorSubject<boolean>(true);\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Store index\n */\n get index(): Map<EntityKey, V> {\n return this._index;\n }\n private _index: Map<EntityKey, V>;\n\n constructor(private source$: BehaviorSubject<E[]>) {}\n\n /**\n * Get a value from the view by key\n * @param key Key\n * @returns Value\n */\n get(key: EntityKey): V {\n if (this._index === undefined) {\n throw new Error(\n 'This view has no index, therefore, this method is unavailable.'\n );\n }\n return this.index.get(key);\n }\n\n /**\n * Get all the values\n * @returns Array of values\n */\n all(): V[] {\n return this.values$.value;\n }\n\n /**\n * Observe all the values\n * @returns Observable of values\n */\n all$(): BehaviorSubject<V[]> {\n return this.values$;\n }\n\n /**\n * Get the first value that respects a criteria\n * @returns A value\n */\n firstBy(clause: EntityFilterClause<V>): V {\n return this.values$.value.find(clause);\n }\n\n /**\n * Observe the first value that respects a criteria\n * @returns Observable of a value\n */\n firstBy$(clause: EntityFilterClause<V>): Observable<V> {\n return this.values$.pipe(map((values: V[]) => values.find(clause)));\n }\n\n /**\n * Get all the values that respect a criteria\n * @returns Array of values\n */\n manyBy(clause: EntityFilterClause<V>): V[] {\n return this.values$.value.filter(clause);\n }\n\n /**\n * Observe all the values that respect a criteria\n * @returns Observable of values\n */\n manyBy$(clause: EntityFilterClause<V>): Observable<V[]> {\n return this.values$.pipe(map((values: V[]) => values.filter(clause)));\n }\n\n /**\n * Clear the filter and sort and unsubscribe from the source\n */\n clear() {\n this.filter(undefined);\n this.sort(undefined);\n }\n\n destroy() {\n if (this.values$$ !== undefined) {\n this.values$$.unsubscribe();\n }\n this.clear();\n }\n\n /**\n * Create an index\n * @param getKey Method to get a value's id\n * @returns The view\n */\n createIndex(getKey: (E) => EntityKey): EntityView<E, V> {\n this._index = new Map();\n this.getKey$.next(getKey);\n return this;\n }\n\n /**\n * Join another source to the stream (chainable)\n * @param clause Join clause\n * @returns The view\n */\n join(clause: EntityJoinClause): EntityView<E, V> {\n if (this.lifted === true) {\n throw new Error(\n 'This view has already been lifted, therefore, no join is allowed.'\n );\n }\n this.joins.push(clause);\n return this;\n }\n\n /**\n * Filter values (chainable)\n * @param clause Filter clause\n * @returns The view\n */\n filter(clause: EntityFilterClause<V>): EntityView<E, V> {\n this.filter$.next(clause);\n return this;\n }\n\n /**\n * @param clause Filter clause\n * @returns The filter id\n */\n addFilter(clause: EntityFilterClause<V>): string {\n const id = uuid();\n this.filterIndex.set(id, clause);\n this.filters$.next(Array.from(this.filterIndex.values()));\n return id;\n }\n\n /**\n * Remove a filter by id\n * @param clause Filter clause\n */\n removeFilter(id: string) {\n this.filterIndex.delete(id);\n this.filters$.next(Array.from(this.filterIndex.values()));\n }\n\n /**\n * Sort values (chainable)\n * @param clauseSort clause\n * @returns The view\n */\n sort(clause: EntitySortClause<V>): EntityView<E, V> {\n this.sort$.next(clause);\n return this;\n }\n\n /**\n * Create the final observable\n * @returns Observable\n */\n lift() {\n this.lifted = true;\n const source$ =\n this.joins.length > 0 ? this.liftJoinedSource() : this.liftSource();\n const observables$ = [\n source$,\n this.filters$,\n this.filter$,\n this.sort$,\n this.getKey$\n ];\n\n this.values$$ = combineLatest(observables$)\n .pipe(skip(1), debounceTime(5))\n .subscribe((bunch: any[]) => {\n const [_values, filters, filter, sort, getKey] = bunch;\n const values = this.processValues(_values, filters, filter, sort);\n const generateIndex = getKey !== undefined;\n this.setValues(values, generateIndex);\n });\n }\n\n /**\n * Create the source observable when no joins are defined\n * @returns Observable\n */\n private liftSource(): Observable<V[]> {\n return this.source$ as any as Observable<V[]>;\n }\n\n /**\n * Create the source observable when joins are defined\n * @returns Observable\n */\n private liftJoinedSource(): Observable<V[]> {\n const sources$ = [\n this.source$,\n combineLatest(this.joins.map((join: EntityJoinClause) => join.source))\n ];\n\n return combineLatest(sources$).pipe(\n map((bunch: [E[], any[]]) => {\n const [entities, joinData] = bunch;\n return entities.reduce((values: V[], entity: E) => {\n const value = this.computeJoinedValue(entity, joinData);\n if (value !== undefined) {\n values.push(value);\n }\n return values;\n }, []);\n })\n );\n }\n\n /**\n * Apply joins to a source's entity and return the final value\n * @returns Final value\n */\n private computeJoinedValue(entity: E, joinData: any[]): V | undefined {\n let value = entity as Partial<V>;\n let joinIndex = 0;\n while (value !== undefined && joinIndex < this.joins.length) {\n value = this.joins[joinIndex].reduce(value, joinData[joinIndex]);\n joinIndex += 1;\n }\n return value as V;\n }\n\n /**\n * Filter and sort values before streaming them\n * @param values Values\n * @param filters Filter clauses\n * @param filter Filter clause\n * @param sort Sort clause\n * @returns Filtered and sorted values\n */\n private processValues(\n values: V[],\n filters: EntityFilterClause[],\n filter: EntityFilterClause,\n sort: EntitySortClause\n ): V[] {\n values = values.slice(0);\n values = this.filterValues(values, filters.concat([filter]));\n values = this.sortValues(values, sort);\n return values;\n }\n\n /**\n * Filter values\n * @param values Values\n * @param filters Filter clauses\n * @returns Filtered values\n */\n private filterValues(values: V[], clauses: EntityFilterClause[]): V[] {\n if (clauses.length === 0) {\n return values;\n }\n\n return values.filter((value: V) => {\n return clauses\n .filter((clause: EntityFilterClause) => clause !== undefined)\n .every((clause: EntityFilterClause) => clause(value));\n });\n }\n\n /**\n * Sort values\n * @param values Values\n * @param sort Sort clause\n * @returns Sorted values\n */\n private sortValues(values: V[], clause: EntitySortClause): V[] {\n if (clause === undefined) {\n return values;\n }\n return values.sort((v1: V, v2: V) => {\n return ObjectUtils.naturalCompare(\n clause.valueAccessor(v1),\n clause.valueAccessor(v2),\n clause.direction,\n clause.nullsFirst\n );\n });\n }\n\n /**\n * Set value and optionally generate an index\n * @param values Values\n * @param generateIndex boolean\n */\n private setValues(values: V[], generateIndex: boolean) {\n if (generateIndex === true) {\n this._index = this.generateIndex(values);\n }\n\n this.values$.next(values);\n\n const count = values.length;\n const empty = count === 0;\n this.count$.next(count);\n this.empty$.next(empty);\n }\n\n /**\n * Generate a complete index of all the values\n * @param entities Entities\n * @returns Index\n */\n private generateIndex(values: V[]): Map<EntityKey, V> {\n const entries = values.map((value: V) => [this.getKey(value), value]);\n return new Map(entries as [EntityKey, V][]);\n }\n}\n","import { BehaviorSubject } from 'rxjs';\n\nimport { EntityKey, EntityRecord, EntityState } from './entity.interfaces';\nimport { getEntityId, getEntityProperty } from './entity.utils';\nimport { EntityStateManager } from './state';\nimport type { EntityStoreStrategy } from './strategies/strategy';\nimport { EntityView } from './view';\n\nexport interface EntityStoreOptions {\n getKey?: (entity: object) => EntityKey;\n getProperty?: (entity: object, property: string) => any;\n}\n\n/**\n * An entity store class holds any number of entities\n * as well as their state. It can be observed, filtered and sorted and\n * provides methods to insert, update or delete entities.\n */\nexport class EntityStore<\n E extends object = object,\n S extends EntityState = EntityState\n> {\n /**\n * Observable of the raw entities\n */\n readonly entities$ = new BehaviorSubject<E[]>([]);\n\n /**\n * Number of entities\n */\n readonly count$ = new BehaviorSubject<number>(0);\n get count(): number {\n return this.count$.value;\n }\n\n /**\n * Whether the store is empty\n */\n readonly empty$ = new BehaviorSubject<boolean>(true);\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Entity store state\n */\n readonly state: EntityStateManager<E, S>;\n\n /**\n * View of all the entities\n */\n readonly view: EntityView<E>;\n\n /**\n * View of all the entities and their state\n */\n readonly stateView: EntityView<E, EntityRecord<E, S>>;\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n /**\n * Method to get an entity's named property\n */\n readonly getProperty: (E, prop: string) => any;\n\n /**\n * Store index\n */\n get index(): Map<EntityKey, E> {\n return this._index;\n }\n private _index: Map<EntityKey, E>;\n\n /**\n * Store index\n */\n get pristine(): boolean {\n return this._pristine;\n }\n private _pristine = true;\n\n /**\n * Strategies\n */\n private strategies: EntityStoreStrategy[] = [];\n\n constructor(entities: E[], options: EntityStoreOptions = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n this.getProperty = options.getProperty\n ? options.getProperty\n : getEntityProperty;\n\n this.state = this.createStateManager();\n this.view = this.createDataView();\n this.stateView = this.createStateView();\n\n this.view.lift();\n this.stateView.lift();\n\n if (entities.length > 0) {\n this.load(entities);\n } else {\n this._index = this.generateIndex(entities);\n }\n }\n\n /**\n * Get an entity from the store by key\n * @param key Key\n * @returns Entity\n */\n get(key: EntityKey): E {\n return this.index.get(key);\n }\n\n /**\n * Get all entities in the store\n * @returns Array of entities\n */\n all(): E[] {\n return this.entities$.value;\n }\n\n /**\n * Set this store's entities\n * @param entities Entities\n */\n load(entities: E[], pristine = true) {\n this._index = this.generateIndex(entities);\n this._pristine = pristine;\n this.next();\n }\n\n /**\n * Clear the store's entities but keep the state and views intact.\n * Views won't return any data but future data will be subject to the\n * current views filter and sort\n */\n softClear() {\n if (this.index && this.index.size > 0) {\n this.index.clear();\n this._pristine = true;\n this.next();\n } else if (this.index) {\n this.updateCount();\n }\n }\n\n /**\n * Clear the store's entities, state and views\n */\n clear() {\n this.stateView.clear();\n this.view.clear();\n this.state.clear();\n this.softClear();\n }\n\n destroy() {\n this.stateView.destroy();\n this.view.destroy();\n this.clear();\n }\n\n /**\n * Insert an entity into the store\n * @param entity Entity\n */\n insert(entity: E) {\n this.insertMany([entity]);\n }\n\n /**\n * Insert many entities into the store\n * @param entities Entities\n */\n insertMany(entities: E[]) {\n entities.forEach((entity: E) =>\n this.index.set(this.getKey(entity), entity)\n );\n this._pristine = false;\n this.next();\n }\n\n /**\n * Update or insert an entity into the store\n * @param entity Entity\n */\n update(entity: E) {\n this.updateMany([entity]);\n }\n\n /**\n * Update or insert many entities into the store\n * @param entities Entities\n */\n updateMany(entities: E[]) {\n entities.forEach((entity: E) =>\n this.index.set(this.getKey(entity), entity)\n );\n this._pristine = false;\n this.next();\n }\n\n /**\n * Add a strategy to this store\n * @param strategy Entity store strategy\n * @returns Entity store\n */\n addStrategy(strategy: EntityStoreStrategy, activate = false): EntityStore {\n const existingStrategy = this.strategies.find(\n (_strategy: EntityStoreStrategy) => {\n return strategy.constructor === _strategy.constructor;\n }\n );\n if (existingStrategy !== undefined) {\n throw new Error(\n 'A strategy of this type already exists on that EntityStore.'\n );\n }\n\n this.strategies.push(strategy);\n strategy.bindStore(this);\n\n if (activate === true) {\n strategy.activate();\n }\n\n return this;\n }\n\n /**\n * Remove a strategy from this store\n * @param strategy Entity store strategy\n * @returns Entity store\n */\n removeStrategy(strategy: EntityStoreStrategy): EntityStore {\n const index = this.strategies.indexOf(strategy);\n if (index >= 0) {\n this.strategies.splice(index, 1);\n strategy.unbindStore(this);\n }\n return this;\n }\n\n /**\n * Return strategies of a given type\n * @param type Entity store strategy class\n * @returns Strategies\n */\n getStrategyOfType(type: typeof EntityStoreStrategy): EntityStoreStrategy {\n return this.strategies.find((strategy: EntityStoreStrategy) => {\n return strategy instanceof type;\n });\n }\n\n /**\n * Activate strategies of a given type\n * @param type Entity store strategy class\n */\n activateStrategyOfType(type: typeof EntityStoreStrategy) {\n const strategy = this.getStrategyOfType(type);\n if (strategy !== undefined) {\n strategy.activate();\n }\n }\n\n /**\n * Deactivate strategies of a given type\n * @param type Entity store strategy class\n */\n deactivateStrategyOfType(type: typeof EntityStoreStrategy) {\n const strategy = this.getStrategyOfType(type);\n if (strategy !== undefined) {\n strategy.deactivate();\n }\n }\n\n /**\n * Delete an entity from the store\n * @param entity Entity\n */\n delete(entity: E) {\n this.deleteMany([entity]);\n }\n\n /**\n * Delete many entities from the store\n * @param entities Entities\n */\n deleteMany(entities: E[]) {\n entities.forEach((entity: E) => this.index.delete(this.getKey(entity)));\n this._pristine = false;\n this.next();\n }\n\n /**\n * Generate a complete index of all the entities\n * @param entities Entities\n * @returns Index\n */\n private generateIndex(entities: E[]): Map<EntityKey, E> {\n const entries = entities.map((entity: E) => [this.getKey(entity), entity]);\n return new Map(entries as [EntityKey, E][]);\n }\n\n /**\n * Push the index's entities into the entities$ observable\n */\n private next() {\n this.entities$.next(Array.from(this.index.values()));\n this.updateCount();\n }\n\n /**\n * Update the store's count and empty\n */\n private updateCount() {\n const count = this.index.size;\n const empty = count === 0;\n this.count$.next(count);\n this.empty$.next(empty);\n }\n\n /**\n * Create the entity state manager\n * @returns EntityStateManager\n */\n private createStateManager() {\n return new EntityStateManager<E, S>({\n getKey: this.getKey,\n index: this.index\n });\n }\n\n /**\n * Create the data view\n * @returns EntityView<E>\n */\n private createDataView() {\n return new EntityView<E>(this.entities$);\n }\n\n /**\n * Create the state view\n * @returns EntityView<EntityRecord<E>>\n */\n private createStateView() {\n return new EntityView<E, EntityRecord<E, S>>(this.view.all$())\n .join({\n source: this.state.change$,\n reduce: (entity: E): EntityRecord<E, S> => {\n const key = this.getKey(entity);\n const state = this.state.get(entity);\n const currentRecord = this.stateView.get(key);\n\n if (\n currentRecord !== undefined &&\n currentRecord.entity === entity &&\n this.statesAreTheSame(currentRecord.state, state)\n ) {\n return currentRecord;\n }\n\n const revision = currentRecord ? currentRecord.revision + 1 : 1;\n const ref = `${key}-${revision}`;\n return { entity, state, revision, ref };\n }\n })\n .createIndex((record: EntityRecord<E, S>) => this.getKey(record.entity));\n }\n\n private statesAreTheSame(currentState: S, newState: S): boolean {\n if (currentState === newState) {\n return true;\n }\n\n const currentStateIsEmpty = Object.keys(currentState).length === 0;\n const newStateIsEmpty = Object.keys(newState).length === 0;\n return currentStateIsEmpty && newStateIsEmpty;\n }\n}\n","import { ChangeDetectorRef } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\n\nimport { EntityKey } from './entity.interfaces';\nimport { EntityStore } from './store';\n\n/**\n * This class is used to synchronize a component's changes\n * detection with an EntityStore changes. For example, it is frequent\n * to have a component subscribe to a store's selected entity and, at the same time,\n * this component provides a way to select an entity with, let's say, a click.\n *\n * This class automatically handles those case and triggers the compoent's\n * change detection when needed.\n *\n * Note: If the component observes the store's stateView, a workspace is\n * probably not required because the stateView catches any changes to the\n * entities and their state.\n */\nexport class EntityStoreWatcher<E extends object> {\n /**\n * Component change detector\n */\n private cdRef: ChangeDetectorRef;\n\n /**\n * Entity store\n */\n private store: EntityStore<E>;\n\n /**\n * Component inner state\n */\n private innerStateIndex = new Map<EntityKey, Record<string, any>>();\n\n /**\n * Subscription to the store's entities\n */\n private entities$$: Subscription;\n\n /**\n * Subscription to the store's state\n */\n private state$$: Subscription;\n\n constructor(store?: EntityStore<E>, cdRef?: ChangeDetectorRef) {\n this.setChangeDetector(cdRef);\n this.setStore(store);\n }\n\n destroy() {\n this.setChangeDetector(undefined);\n this.setStore(undefined);\n }\n\n /**\n * Bind this workspace to a store and start watching for changes\n * @param store Entity store\n */\n setStore(store?: EntityStore<E>) {\n if (store === undefined) {\n this.teardownObservers();\n this.innerStateIndex.clear();\n this.store = undefined;\n return;\n }\n\n this.setStore(undefined);\n this.store = store;\n this.setupObservers();\n this.detectChanges();\n }\n\n /**\n * Bind this workspace to a component's change detector\n * @param cdRef Change detector\n */\n setChangeDetector(cdRef?: ChangeDetectorRef) {\n this.cdRef = cdRef;\n }\n\n /**\n * Set up observers on a store's entities and their state\n * @param store Entity store\n */\n private setupObservers() {\n this.teardownObservers();\n\n this.entities$$ = this.store.entities$.subscribe(() =>\n this.onEntitiesChange()\n );\n\n this.state$$ = this.store.state.change$\n .pipe(skip(1))\n .subscribe(() => this.onStateChange());\n }\n\n /**\n * Teardown store observers\n */\n private teardownObservers() {\n if (this.entities$$ !== undefined) {\n this.entities$$.unsubscribe();\n }\n if (this.state$$ !== undefined) {\n this.state$$.unsubscribe();\n }\n this.entities$$ = undefined;\n this.state$$ = undefined;\n }\n\n /**\n * When the entities change, always trigger the changes detection\n */\n private onEntitiesChange() {\n this.detectChanges();\n }\n\n /**\n * When the entities state change, trigger the change detection\n * only if the component has not handled these changes yet. For example,\n * the component might have initiated thoses changes itself.\n */\n private onStateChange() {\n let changesDetected = false;\n const storeIndex = this.store.state.index;\n const innerIndex = this.innerStateIndex;\n\n if (storeIndex.size !== innerIndex.size) {\n changesDetected = this.detectChanges();\n }\n\n const storeKeys = Array.from(storeIndex.keys());\n for (const key of storeKeys) {\n const storeValue = storeIndex.get(key);\n const innerValue = innerIndex.get(key);\n if (changesDetected === false) {\n if (innerValue === undefined) {\n changesDetected = this.detectChanges();\n } else if (!ObjectUtils.objectsAreEquivalent(storeValue, innerValue)) {\n changesDetected = this.detectChanges();\n }\n }\n\n this.innerStateIndex.set(key, Object.assign({}, storeValue));\n }\n }\n\n /**\n * Trigger the change detection of the workspace is bound to a change detector\n */\n private detectChanges() {\n if (this.cdRef !== undefined) {\n this.cdRef.detectChanges();\n }\n return true;\n }\n}\n","import { Observable, of } from 'rxjs';\nimport { BehaviorSubject } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\n\nimport { EntityOperationType } from './entity.enums';\nimport {\n EntityKey,\n EntityOperationState,\n EntityTransactionOptions\n} from './entity.interfaces';\nimport { getEntityId } from './entity.utils';\nimport { EntityStore } from './store';\n\nexport interface EntityOperation<E extends object = object> {\n key: EntityKey;\n type: EntityOperationType;\n previous: E | undefined;\n current: E | undefined;\n store?: EntityStore<E>;\n meta?: Record<string, any>;\n}\n\nexport type EntityTransactionCommitHandler = (\n transaction: EntityTransaction,\n operations: EntityOperation[]\n) => Observable<any>;\n\n/**\n * This class holds a reference to the insert, update and delete\n * operations performed on a store. This is useful to commit\n * these operations in a single pass or to cancel them.\n */\nexport class EntityTransaction {\n /**\n * Store holding the operations on another store\n */\n readonly operations: EntityStore<EntityOperation, EntityOperationState>;\n\n /**\n * Method to get an entity's id\n */\n readonly getKey: (E) => EntityKey;\n\n /**\n * Whether there are pending operations\n */\n get empty$(): BehaviorSubject<boolean> {\n return this.operations.empty$;\n }\n\n /**\n * Whether there are pending operations\n */\n get empty(): boolean {\n return this.empty$.value;\n }\n\n /**\n * Whether thise store is in commit phase\n */\n get inCommitPhase(): boolean {\n return this.inCommitPhase$.value;\n }\n readonly inCommitPhase$ = new BehaviorSubject<boolean>(false);\n\n constructor(options: EntityTransactionOptions = {}) {\n this.getKey = options.getKey ? options.getKey : getEntityId;\n this.operations = new EntityStore<EntityOperation, EntityOperationState>(\n [],\n {\n getKey: (operation: EntityOperation) => operation.key\n }\n );\n }\n\n destroy() {\n this.operations.destroy();\n }\n\n /**\n * Insert an entity into a store. If no store is specified, an insert\n * operation is still created but the transaction won't add the new\n * entity to the store.\n * @param current The entity to insert\n * @param store Optional: The store to insert the entity into\n * @param meta Optional: Any metadata on the operation\n */\n insert(\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(current);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n }\n\n this.doInsert(current, store, meta);\n }\n\n /**\n * Update an entity in a store. If no store is specified, an update\n * operation is still created but the transaction won't update the\n * entity into the store.\n * @param previous The entity before update\n * @param current The entity after update\n * @param store Optional: The store to update the entity into\n * @param meta Optional: Any metadata on the operation\n */\n update(\n previous: object,\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(current);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n if (existingOperation.type === EntityOperationType.Insert) {\n this.doInsert(current, store, meta);\n return;\n } else if (existingOperation.type === EntityOperationType.Update) {\n previous = existingOperation.previous;\n }\n }\n\n this.doUpdate(previous, current, store, meta);\n }\n\n /**\n * Delete an entity from a store. If no store is specified, a delete\n * operation is still created but the transaction won't remove the\n * entity from the store.\n * @param previous The entity before delete\n * @param store Optional: The store to delete the entity from\n * @param meta Optional: Any metadata on the operation\n */\n delete(\n previous: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n const existingOperation = this.getOperationByEntity(previous);\n if (existingOperation !== undefined) {\n this.removeOperation(existingOperation);\n if (existingOperation.type === EntityOperationType.Insert) {\n if (store !== undefined) {\n store.delete(previous);\n }\n return;\n }\n }\n\n this.doDelete(previous, store, meta);\n }\n\n /**\n * Commit operations the transaction. This method doesn't do much\n * in itself. The handler it receives does the hard work and it's\n * implementation is left to the caller. This method simply wraps\n * the handler into an error catching mechanism to update\n * the transaction afterward. The caller needs to subscribe to this\n * method's output (observable) for the commit to be performed.\n * @param operations Operations to commit\n * @param handler Function that handles the commit operation\n * @returns The handler output (observable)\n */\n commit(\n operations: EntityOperation[],\n handler: EntityTransactionCommitHandler\n ): Observable<any> {\n this.inCommitPhase$.next(true);\n\n return handler(this, operations).pipe(\n catchError(() => of(new Error())),\n tap((result: any) => {\n if (result instanceof Error) {\n this.onCommitError();\n } else {\n this.onCommitSuccess(operations);\n }\n })\n );\n }\n\n /**\n * Commit all the operations of the transaction.\n * @param handler Function that handles the commit operation\n * @returns The handler output (observable)\n */\n commitAll(handler: EntityTransactionCommitHandler): Observable<any> {\n const operations = this.getOperationsInCommit();\n return this.commit(operations, handler);\n }\n\n /**\n * Rollback this transaction\n */\n rollback() {\n this.rollbackOperations(this.operations.all());\n }\n\n /**\n * Rollback specific operations\n */\n rollbackOperations(operations: EntityOperation[]) {\n this.checkInCommitPhase();\n\n const operationsFactory = () =>\n new Map([\n [EntityOperationType.Delete, []],\n [EntityOperationType.Update, []],\n [EntityOperationType.Insert, []]\n ]);\n const storesOperations = new Map();\n\n // Group operations by store and by operation type.\n // Grouping operations allows us to revert them in bacth, thus, triggering\n // observables only one per operation type.\n for (const operation of operations) {\n const store = operation.store;\n if (operation.store === undefined) {\n continue;\n }\n\n let storeOperations = storesOperations.get(store);\n if (storeOperations === undefined) {\n storeOperations = operationsFactory();\n storesOperations.set(store, storeOperations);\n }\n storeOperations.get(operation.type).push(operation);\n }\n\n Array.from(storesOperations.keys()).forEach(\n (store: EntityStore<object>) => {\n const storeOperations = storesOperations.get(store);\n\n const deletes = storeOperations.get(EntityOperationType.Delete);\n store.insertMany(\n deletes.map((_delete: EntityOperation) => _delete.previous)\n );\n\n const updates = storeOperations.get(EntityOperationType.Update);\n store.updateMany(\n updates.map((_update: EntityOperation) => _update.previous)\n );\n\n const inserts = storeOperations.get(EntityOperationType.Insert);\n store.deleteMany(\n inserts.map((_insert: EntityOperation) => _insert.current)\n );\n }\n );\n\n this.operations.deleteMany(operations);\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Clear this transaction\n * @todo Raise event and synchronize stores?\n */\n clear() {\n this.operations.clear();\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Get any existing operation on an entity\n * @param entity Entity\n * @returns Either an insert, update or delete operation\n */\n getOperationByEntity(entity: object): EntityOperation {\n return this.operations.get(this.getKey(entity));\n }\n\n /**\n * Merge another transaction in this one\n * @param transaction Another transaction\n */\n mergeTransaction(transaction: EntityTransaction) {\n this.checkInCommitPhase();\n\n const operations = transaction.operations.all();\n operations.forEach((operation: EntityOperation) => {\n this.addOperation(operation);\n });\n }\n\n /**\n * Create an insert operation and add an entity to the store\n * @param current The entity to insert\n * @param store Optional: The store to insert the entity into\n * @param meta Optional: Any metadata on the operation\n */\n private doInsert(\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(current),\n type: EntityOperationType.Insert,\n previous: undefined,\n current,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.insert(current);\n }\n }\n\n /**\n * Create an update operation and update an entity into the store\n * @param previous The entity before update\n * @param current The entity after update\n * @param store Optional: The store to update the entity into\n * @param meta Optional: Any metadata on the operation\n */\n private doUpdate(\n previous: object,\n current: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(current),\n type: EntityOperationType.Update,\n previous,\n current,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.update(current);\n }\n }\n\n /**\n * Create a delete operation and delete an entity from the store\n * @param previous The entity before delete\n * @param store Optional: The store to delete the entity from\n * @param meta Optional: Any metadata on the operation\n */\n private doDelete(\n previous: object,\n store?: EntityStore<object>,\n meta?: Record<string, any>\n ) {\n this.addOperation({\n key: this.getKey(previous),\n type: EntityOperationType.Delete,\n previous,\n current: undefined,\n store,\n meta\n });\n\n if (store !== undefined) {\n store.delete(previous);\n }\n }\n\n /**\n * Remove committed operations from store\n * @param operations Commited operations\n * @todo Raise event and synchronize stores?\n */\n private resolveOperations(operations: EntityOperation[]) {\n this.operations.deleteMany(operations);\n }\n\n /**\n * On commit success, resolve commited operations and exit commit phase\n * @param operations Commited operations\n */\n private onCommitSuccess(operations: EntityOperation[]) {\n this.resolveOperations(operations);\n this.inCommitPhase$.next(false);\n }\n\n /**\n * On commit error, abort transaction\n * @param operations Commited operations\n */\n private onCommitError() {\n this.inCommitPhase$.next(false);\n }\n\n /**\n * Add an operation to the operations store\n * @param operation Operation to add\n */\n private addOperation(operation: EntityOperation) {\n this.checkInCommitPhase();\n\n this.operations.insert(operation);\n this.operations.state.update(operation, { added: true });\n }\n\n /**\n * Remove an operation from the operations store\n * @param operation Operation to remove\n */\n private removeOperation(operation: EntityOperation) {\n this.checkInCommitPhase();\n\n this.operations.delete(operation);\n this.operations.state.update(operation, { added: false });\n }\n\n /**\n * Get all the operations to commit\n * @returns Operations to commit\n */\n private getOperationsInCommit(): EntityOperation[] {\n return this.operations.stateView\n .manyBy(\n (value: { entity: EntityOperation; state: EntityOperationState }) => {\n return value.state.added === true;\n }\n )\n .map(\n (value: { entity: EntityOperation; state: EntityOperationState }) =>\n value.entity\n );\n }\n\n /**\n * Check if the transaction is in the commit phase and throw an error if it is\n */\n private checkInCommitPhase() {\n if (this.inCommitPhase === true) {\n throw new Error(\n 'This transaction is in the commit phase. Cannot complete this operation.'\n );\n }\n }\n}\n","import { BehaviorSubject } from 'rxjs';\n\nimport { EntityStoreStrategyOptions } from '../entity.interfaces';\nimport type { EntityStore } from '../store';\n\n/**\n * Entity store strategies. They can do pretty much anything during a store's\n * lifetime. For example, they may act as triggers when something happens.\n * Sharing a strategy is a good idea when multiple strategies would have\n * on cancelling effect on each other.\n *\n * At creation, strategy is inactive and needs to be manually activated.\n */\nexport class EntityStoreStrategy {\n /**\n * Feature store\n * @internal\n */\n protected stores: EntityStore[] = [];\n\n /**\n * Whether this strategy is active\n * @internal\n */\n get active(): boolean {\n return this.active$.value;\n }\n readonly active$ = new BehaviorSubject<boolean>(false);\n\n constructor(protected options: EntityStoreStrategyOptions = {}) {\n this.options = options;\n }\n\n /**\n * Activate the strategy. If it's already active, it'll be deactivated\n * and activated again.\n */\n activate() {\n if (this.active === true) {\n this.doDeactivate();\n }\n this.active$.next(true);\n this.doActivate();\n }\n\n /**\n * Activate the strategy. If it's already active, it'll be deactivated\n * and activated again.\n */\n deactivate() {\n this.active$.next(false);\n this.doDeactivate();\n }\n\n /**\n * Bind this strategy to a store\n * @param store Feature store\n */\n bindStore(store: EntityStore) {\n if (this.stores.indexOf(store) < 0) {\n this.stores.push(store);\n }\n }\n\n /**\n * Unbind this strategy from store\n * @param store Feature store\n */\n unbindStore(store: EntityStore) {\n const index = this.stores.indexOf(store);\n if (index >= 0) {\n this.stores.splice(index, 1);\n }\n }\n\n /**\n * Do the stataegy activation\n * @internal\n */\n protected doActivate() {\n // empty\n }\n\n /**\n * Do the strategy deactivation\n * @internal\n */\n protected doDeactivate() {\n // empty\n }\n}\n","import { EntityStoreStrategyFuncOptions } from '../entity.interfaces';\nimport { EntityStore } from '../store';\nimport { EntityStoreStrategy } from './strategy';\n\n/**\n * When active, this strategy filters a store's stateView to return\n * selected entities only.\n */\nexport class EntityStoreFilterCustomFuncStrategy extends EntityStoreStrategy {\n constructor(protected options: EntityStoreStrategyFuncOptions) {\n super(options);\n }\n\n /**\n * Store / filter ids map\n */\n private filters = new Map<EntityStore, string>();\n\n /**\n * Bind this strategy to a store and start filtering it\n * @param store Entity store\n */\n bindStore(store: EntityStore) {\n super.bindStore(store);\n if (this.active === true) {\n this.filterStore(store);\n }\n }\n\n /**\n * Unbind this strategy from a store and stop filtering it\n * @param store Entity store\n */\n unbindStore(store: EntityStore) {\n super.unbindStore(store);\n if (this.active === true) {\n this.unfilterStore(store);\n }\n }\n\n /**\n * Start filtering all stores\n * @internal\n */\n protected doActivate() {\n this.filterAll();\n }\n\n /**\n * Stop filtering all stores\n * @internal\n */\n protected doDeactivate() {\n this.unfilterAll();\n }\n\n /**\n * Filter all stores\n */\n private filterAll() {\n this.stores.forEach((store: EntityStore) => this.filterStore(store));\n }\n\n /**\n * Unfilter all stores\n */\n private unfilterAll() {\n this.stores.forEach((store: EntityStore) => this.unfilterStore(store));\n }\n\n /**\n * Filter a store and add it to the filters map\n */\n private filterStore(store: EntityStore) {\n this.filters.set(\n store,\n store.stateView.addFilter(this.options.filterClauseFunc)\n );\n }\n\n /**\n * Unfilter a store and delete it from the filters map\n */\n private unfilterStore(store: EntityStore) {\n const filterId = this.filters.get(store);\n if (filterId === undefined) {\n return;\n }\n\n store.stateView.removeFilter(filterId);\n this.filters.delete(store);\n }\n}\n","import { EntityRecord } from '../entity.interfaces';\nimport { EntityStore } from '../store';\nimport { EntityStoreStrategy } from './strategy';\n\n/**\n * When active, this strategy filters a store's stateView to return\n * selected entities only.\n */\nexport class EntityStoreFilterSelectionStrategy extends EntityStoreStrategy {\n /**\n * Store / filter ids map\n */\n private filters = new Map<EntityStore, string>();\n\n /**\n * Bind this strategy to a store and start filtering it\n * @param store Entity store\n */\n bindStore(store: EntityStore) {\n super.bindStore(store);\n if (this.active === true) {\n this.filterStore(store);\n }\n }\n\n /**\n * Unbind this strategy from a store and stop filtering it\n * @param store Entity store\n */\n unbindStore(store: EntityStore) {\n super.unbindStore(store);\n if (this.active === true) {\n this.unfilterStore(store);\n }\n }\n\n /**\n * Start filtering all stores\n * @internal\n */\n protected doActivate() {\n this.filterAll();\n }\n\n /**\n * Stop filtering all stores\n * @internal\n */\n protected doDeactivate() {\n this.unfilterAll();\n }\n\n /**\n * Filter all stores\n */\n private filterAll() {\n this.stores.forEach((store: EntityStore) => this.filterStore(store));\n }\n\n /**\n * Unfilter all stores\n */\n private unfilterAll() {\n this.stores.forEach((store: EntityStore) => this.unfilterStore(store));\n }\n\n /**\n * Filter a store and add it to the filters map\n */\n private filterStore(store: EntityStore) {\n if (this.filters.has(store)) {\n return;\n }\n\n const filter = (record: EntityRecord<object>) => {\n return record.state.selected === true;\n };\n this.filters.set(store, store.stateView.addFilter(filter));\n }\n\n /**\n * Unfilter a store and delete it from the filters map\n */\n private unfilterStore(store: EntityStore) {\n const filterId = this.filters.get(store);\n if (filterId === undefined) {\n return;\n }\n\n store.stateView.removeFilter(filterId);\n this.filters.delete(store);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n inject\n} from '@angular/core';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { EntityRecord } from '../shared/entity.interfaces';\nimport { getEntityTitle } from '../shared/entity.utils';\nimport { EntityStore } from '../shared/store';\nimport { EntityStoreWatcher } from '../shared/watcher';\n\nexport interface EntitySelectorChange<T = any> {\n selected: boolean;\n value: T;\n}\n@Component({\n selector: 'igo-entity-selector',\n templateUrl: './entity-selector.component.html',\n styleUrls: ['./entity-selector.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatFormFieldModule, MatSelectModule, MatOptionModule, AsyncPipe]\n})\nexport class EntitySelectorComponent implements OnInit, OnDestroy {\n private cdRef = inject(ChangeDetectorRef);\n\n /**\n * The selected entity\n * @internal\n */\n readonly selected$ = new BehaviorSubject<object>(undefined);\n\n /**\n * The current multi select option text\n * @internal\n */\n readonly multiText$ = new BehaviorSubject<string>(undefined);\n\n readonly multiSelectValue = { id: 'IGO_MULTI_SELECT' };\n\n readonly emptyValue = { id: 'IGO_EMPTY_SELECT' };\n\n /**\n * Subscription to the selected entity\n */\n private selected$$: Subscription;\n\n /**\n * Store watcher\n */\n private watcher: EntityStoreWatcher<object>;\n\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Title accessor\n */\n @Input() titleAccessor: (object) => string = getEntityTitle;\n\n /**\n * Text to display when nothing is selected\n */\n @Input() emptyText: string = undefined;\n\n /**\n * Wheter selecting many entities is allowed\n */\n @Input() multi = false;\n\n /**\n * Text to display for the select all option\n */\n @Input() multiAllText = 'All';\n\n /**\n * Text to display for the select none option\n */\n @Input() multiNoneText = 'None';\n\n /**\n * Field placeholder\n */\n @Input() placeholder: string;\n\n /**\n * Wheter the selector is disabled or not\n */\n @Input() disabled = false;\n\n /**\n * Event emitted when the selection changes\n */\n @Output() selectedChange = new EventEmitter<EntitySelectorChange>();\n\n /**\n * Create a store watcher and subscribe to the selected entity\n * @internal\n */\n ngOnInit() {\n this.watcher = new EntityStoreWatcher(this.store, this.cdRef);\n\n this.selected$$ = this.store.stateView\n .manyBy$((record: EntityRecord<object>) => record.state.selected === true)\n .subscribe((records: EntityRecord<object>[]) => {\n const entities = records.map(\n (record: EntityRecord<object>) => record.entity\n );\n this.onSelectFromStore(entities);\n });\n }\n\n /**\n * Unsubscribe to the selected entity and destroy the store watcher\n * @internal\n */\n ngOnDestroy() {\n this.watcher.destroy();\n this.selected$$.unsubscribe();\n }\n\n /**\n * On selection change, update the store's state and emit an event\n * @internal\n */\n onSelectionChange(event: { value: object | undefined }) {\n const values = event.value instanceof Array ? event.value : [event.value];\n\n const multiSelect = values.find(\n (_value: object) => _value === this.multiSelectValue\n );\n let entities = values.filter(\n (_value: object) => _value !== this.multiSelectValue\n );\n if (multiSelect !== undefined) {\n if (entities.length === this.store.count) {\n entities = [];\n } else if (entities.length < this.store.count) {\n entities = this.store.all();\n }\n }\n\n entities = entities.filter((entity: object) => entity !== this.emptyValue);\n if (entities.length === 0) {\n this.store.state.updateAll({ selected: false });\n } else {\n this.store.state.updateMany(entities, { selected: true }, true);\n }\n\n const value = this.multi ? entities : event.value;\n this.selectedChange.emit({ selected: true, value });\n }\n\n private onSelectFromStore(entities: object[]) {\n if (this.multi === true) {\n this.selected$.next(entities);\n } else {\n const entity = entities.length > 0 ? entities[0] : undefined;\n this.selected$.next(entity);\n }\n\n this.updateMultiToggleWithEntities(entities);\n }\n\n private updateMultiToggleWithEntities(entities: object[]) {\n if (\n entities.length === this.store.count &&\n this.multiText$.value !== this.multiNoneText\n ) {\n this.multiText$.next(this.multiNoneText);\n } else if (\n entities.length < this.store.count &&\n this.multiText$.value !== this.multiAllText\n ) {\n this.multiText$.next(this.multiAllText);\n }\n }\n}\n","<mat-form-field class=\"igo-entity-selector\" subscriptSizing=\"dynamic\">\n <mat-select\n [disabled]=\"disabled\"\n [value]=\"selected$ | async\"\n [multiple]=\"multi\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n @if (emptyText !== undefined && multi === false) {\n <mat-option [value]=\"emptyValue\">{{ emptyText }}</mat-option>\n }\n @if (multi === true) {\n <mat-option [value]=\"multiSelectValue\">{{\n multiText$ | async\n }}</mat-option>\n }\n @for (record of store.stateView.all$() | async; track record) {\n <mat-option [value]=\"record.entity\">\n {{ titleAccessor(record.entity) }}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { NgModule } from '@angular/core';\n\nimport { EntitySelectorComponent } from './entity-selector.component';\n\n/**\n * @deprecated import the EntitySelectorComponent directly\n */\n@NgModule({\n imports: [EntitySelectorComponent],\n exports: [EntitySelectorComponent]\n})\nexport class IgoEntitySelectorModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n inject\n} from '@angular/core';\nimport {\n MatPaginator,\n MatPaginatorModule,\n PageEvent\n} from '@angular/material/paginator';\n\nimport { LanguageService } from '@igo2/core/language';\nimport { MediaService } from '@igo2/core/media';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { EntityStore } from '../shared';\nimport { EntityTablePaginatorOptions } from './entity-table-paginator.interface';\n\n@Component({\n selector: 'igo-entity-table-paginator',\n templateUrl: './entity-table-paginator.component.html',\n styleUrls: ['./entity-table-paginator.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatPaginatorModule]\n})\nexport class EntityTablePaginatorComponent implements OnChanges, OnDestroy {\n private languageService = inject(LanguageService);\n private mediaService = inject(MediaService);\n\n public disabled = false;\n public hidePageSize = false;\n public pageIndex = 0;\n public pageSize = 50;\n public pageSizeOptions: number[] = [5, 10, 20, 50, 100, 200];\n public showFirstLastButtons = true;\n private count$$: Subscription;\n private entitySortChange$$: Subscription;\n private paginationLabelTranslation$$: Subscription[] = [];\n\n @Input() entitySortChange$ = new BehaviorSubject<boolean>(false);\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Paginator options\n */\n @Input()\n paginatorOptions: EntityTablePaginatorOptions;\n\n /**\n * Event emitted when the paginator changes the page size or page index.\n */\n @Output() page: EventEmitter<PageEvent>;\n\n public length = 0;\n\n /**\n * Paginator emitted.\n */\n @Output() paginatorChange: EventEmitter<MatPaginator> =\n new EventEmitter<MatPaginator>();\n\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\n\n ngOnChanges() {\n this.unsubscribeAll();\n this.count$$ = this.store.stateView.count$.subscribe((count) => {\n this.length = count;\n this.emitPaginator();\n });\n this.entitySortChange$$ = this.entitySortChange$.subscribe(() => {\n if (this.paginator) {\n this.paginator.firstPage();\n }\n });\n this.initPaginatorOptions();\n this.translateLabels();\n }\n\n initPaginatorOptions() {\n this.disabled = this.paginatorOptions?.disabled || this.disabled;\n this.pageIndex = this.paginatorOptions?.pageIndex || this.pageIndex;\n this.pageSize = this.paginatorOptions?.pageSize || this.pageSize;\n this.pageSizeOptions =\n this.paginatorOptions?.pageSizeOptions || this.pageSizeOptions;\n if (this.mediaService.isMobile()) {\n this.showFirstLastButtons = false;\n this.hidePageSize = true;\n } else {\n this.showFirstLastButtons =\n this.paginatorOptions?.showFirstLastButtons ||\n this.showFirstLastButtons;\n this.hidePageSize =\n this.paginatorOptions?.hidePageSize || this.hidePageSize;\n }\n }\n\n translateLabels() {\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.firstPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.firstPageLabel = label;\n })\n );\n\n this.paginator._intl.getRangeLabel = this.rangeLabel;\n\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.itemsPerPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.itemsPerPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.lastPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.lastPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.nextPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.nextPageLabel = label;\n })\n );\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.previousPageLabel')\n .subscribe((label: string) => {\n this.paginator._intl.previousPageLabel = label;\n })\n );\n }\n\n rangeLabel = (page: number, pageSize: number, length: number) => {\n const of = new BehaviorSubject<string>('');\n\n this.paginationLabelTranslation$$.push(\n this.languageService.translate\n .get('igo.common.paginator.of')\n .subscribe((label: string) => {\n of.next(label);\n })\n );\n if (length === 0 || pageSize === 0) {\n return `0 ${of.value} ${length}`;\n }\n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n const endIndex =\n startIndex < length\n ? Math.min(startIndex + pageSize, length)\n : startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${of.value} ${length}`;\n };\n\n private unsubscribeAll() {\n this.paginationLabelTranslation$$.map((sub) => sub.unsubscribe());\n if (this.count$$) {\n this.count$$.unsubscribe();\n }\n if (this.entitySortChange$$) {\n this.entitySortChange$$.unsubscribe();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribeAll();\n }\n\n emitPaginator() {\n this.paginatorChange.emit(this.paginator);\n }\n}\n","<mat-paginator\n [disabled]=\"disabled\"\n [hidePageSize]=\"hidePageSize\"\n [length]=\"length\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showFirstLastButtons]=\"showFirstLastButtons\"\n (page)=\"emitPaginator()\"\n>\n</mat-paginator>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n Renderer2,\n inject\n} from '@angular/core';\n\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nimport { EntityTableScrollBehavior } from '../shared/entity.enums';\n\n/**\n * Directive that handles an entity table row click and selection.\n */\n@Directive({\n selector: '[igoEntityTableRow]',\n standalone: true\n})\nexport class EntityTableRowDirective {\n private renderer = inject(Renderer2);\n private el = inject(ElementRef);\n\n /**\n * Class added to a selected row\n */\n static selectedCls = 'igo-entity-table-row-selected';\n\n /**\n * Class added to a highlighted row\n */\n static highlightedCls = 'igo-entity-table-row-highlighted';\n\n /**\n * Whether a row supports selection\n */\n @Input() selection = false;\n\n /**\n * Whether clicking a row should select it (if selection is true)\n */\n @Input() selectOnClick = true;\n\n /**\n * Whether the selected row should be highlighted\n */\n @Input() highlightSelection = true;\n\n /**\n * Whether a row is selected\n */\n @Input()\n set selected(value: boolean) {\n if (this.selection === false) {\n return;\n }\n if (value === this._selected) {\n return;\n }\n\n this.toggleSelected(value);\n this.scroll();\n }\n get selected(): boolean {\n return this._selected;\n }\n private _selected = false;\n\n /**\n * Scroll behavior on selection\n */\n @Input()\n scrollBehavior: EntityTableScrollBehavior = EntityTableScrollBehavior.Auto;\n\n /**\n * Event emitted when a row is selected\n */\n @Output() select = new EventEmitter<EntityTableRowDirective>();\n\n /**\n * When a row is clicked, select it if it's supported\n * @ignore\n */\n @HostListener('click')\n onClick() {\n if (this.selection === false || this.selectOnClick === false) {\n return;\n }\n\n this.toggleSelected(true);\n this.select.emit(this);\n }\n\n /**\n * Select a row and add or remove the selected class from it\n * @param selected Whether the row should be selected\n */\n private toggleSelected(selected: boolean) {\n this._selected = selected;\n if (selected === true) {\n this.addCls(EntityTableRowDirective.selectedCls);\n if (this.highlightSelection === true) {\n this.addCls(EntityTableRowDirective.highlightedCls);\n }\n } else {\n this.removeCls(EntityTableRowDirective.selectedCls);\n this.removeCls(EntityTableRowDirective.highlightedCls);\n }\n }\n\n /**\n * Scroll to the selected row\n */\n private scroll() {\n if (this._selected === true) {\n scrollIntoView(this.el.nativeElement, {\n scrollMode: 'if-needed',\n behavior: 'smooth',\n block: 'end',\n inline: 'nearest'\n });\n }\n }\n\n /**\n * Add the selected CSS class\n */\n private addCls(cls: string) {\n this.renderer.addClass(this.el.nativeElement, cls);\n }\n\n /**\n * Remove the selected CSS class\n */\n private removeCls(cls: string) {\n this.renderer.removeClass(this.el.nativeElement, cls);\n }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { AsyncPipe, NgClass, NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TrackByFunction,\n inject\n} from '@angular/core';\nimport {\n FormControlName,\n FormsModule,\n NgControl,\n NgForm,\n ReactiveFormsModule,\n UntypedFormBuilder,\n UntypedFormGroup\n} from '@angular/forms';\nimport { provideMomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport {\n DateAdapter,\n ErrorStateMatcher,\n MatNativeDateModule,\n MatOptionModule\n} from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport {\n MatFormFieldControl,\n MatFormFieldModule\n} from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { SanitizeHtmlPipe } from '@igo2/common/custom-html';\nimport { ImageErrorDirective, SecureImagePipe } from '@igo2/common/image';\nimport { StopPropagationDirective } from '@igo2/common/stop-propagation';\nimport { IgoLanguageModule } from '@igo2/core/language';\nimport { StringUtils } from '@igo2/utils';\n\nimport { default as moment } from 'moment';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\n\nimport { EntityTablePaginatorComponent } from '../entity-table-paginator/entity-table-paginator.component';\nimport { EntityTablePaginatorOptions } from '../entity-table-paginator/entity-table-paginator.interface';\nimport {\n EntityKey,\n EntityRecord,\n EntityState,\n EntityStore,\n EntityTableColumn,\n EntityTableColumnRenderer,\n EntityTableScrollBehavior,\n EntityTableSelectionState,\n EntityTableTemplate\n} from '../shared';\nimport { EntityTableRowDirective } from './entity-table-row.directive';\n\ntype CellData = Record<\n string,\n {\n value: any;\n class: Record<string, boolean>;\n isUrl: boolean;\n isImg: boolean;\n }\n>;\n\ninterface RowData {\n record: EntityRecord<object, EntityState>;\n cellData: CellData;\n}\n\n@Component({\n selector: 'igo-entity-table',\n templateUrl: './entity-table.component.html',\n styleUrls: ['./entity-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: MatFormFieldControl, useExisting: EntityTableComponent },\n provideMomentDateAdapter()\n ],\n imports: [\n AsyncPipe,\n EntityTablePaginatorComponent,\n EntityTableRowDirective,\n FormsModule,\n ImageErrorDirective,\n MatAutocompleteModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatNativeDateModule, // For the DateAdapter provider\n MatOptionModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatTooltipModule,\n NgClass,\n NgStyle,\n ReactiveFormsModule,\n SanitizeHtmlPipe,\n SecureImagePipe,\n StopPropagationDirective,\n IgoLanguageModule\n ]\n})\nexport class EntityTableComponent implements OnInit, OnChanges, OnDestroy {\n private cdRef = inject(ChangeDetectorRef);\n private formBuilder = inject(UntypedFormBuilder);\n protected _focusMonitor = inject(FocusMonitor);\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n ngControl = inject(NgControl, { optional: true, self: true });\n protected _parentForm = inject(NgForm, { optional: true });\n protected _controlName = inject(FormControlName, { optional: true });\n protected _defaultErrorStateMatcher = inject(ErrorStateMatcher);\n private dateAdapter = inject<DateAdapter<Date>>(DateAdapter);\n\n entitySortChange$ = new BehaviorSubject<boolean>(false);\n\n public formGroup: UntypedFormGroup = new UntypedFormGroup({});\n\n public filteredOptions = {};\n\n /**\n * Reference to the column renderer types\n * @internal\n */\n entityTableColumnRenderer = EntityTableColumnRenderer;\n\n /**\n * Reference to the selection's state\n * @internal\n */\n entityTableSelectionState = EntityTableSelectionState;\n\n /**\n * Observable of the selection,s state\n * @internal\n */\n readonly selectionState$ = new BehaviorSubject<EntityTableSelectionState>(\n undefined\n );\n\n /**\n * Subscription to the store's selection\n */\n private selection$$: Subscription;\n\n /**\n * Subscription to the dataSource\n */\n private dataSource$$: Subscription;\n\n /**\n * The last record checked. Useful for selecting\n * multiple records by holding the shift key and checking\n * checkboxes.\n */\n private lastRecordCheckedKey: EntityKey;\n\n /**\n * Entity store\n */\n @Input() store: EntityStore<object>;\n\n /**\n * Table paginator\n */\n @Input() set paginator(value: MatPaginator) {\n this._paginator = value;\n this.dataSource.paginator = value;\n }\n\n get paginator(): MatPaginator {\n return this._paginator;\n }\n private _paginator: MatPaginator;\n\n /**\n * Table template\n */\n @Input() template: EntityTableTemplate;\n\n /**\n * Scroll behavior on selection\n */\n @Input()\n scrollBehavior: EntityTableScrollBehavior = EntityTableScrollBehavior.Auto;\n\n /**\n * Whether nulls should be first when sorting\n */\n @Input()\n sortNullsFirst = false;\n\n /**\n * Show the table paginator or not. False by default.\n */\n @Input()\n withPaginator = false;\n\n /**\n * Paginator options\n */\n @Input()\n paginatorOptions: EntityTablePaginatorOptions;\n\n /**\n * Event emitted when an entity (row) is clicked\n */\n @Output() entityClick = new EventEmitter<object>();\n\n /**\n * Event emitted when an entity (row) is selected\n */\n @Output() entitySelectChange = new EventEmitter<{\n added: object[];\n }>();\n\n /**\n * Event emitted when the table sort is changed.\n */\n @Output() entitySortChange = new EventEmitter<{\n column: EntityTableColumn;\n direction: string;\n }>(undefined);\n\n /**\n * Table headers\n * @internal\n */\n get headers(): string[] {\n let columns = this.template.columns\n .filter((column: EntityTableColumn) => column.visible !== false)\n .map((column: EntityTableColumn) => column.name);\n\n if (this.selectionCheckbox === true) {\n columns = ['selectionCheckbox'].concat(columns);\n }\n\n return columns;\n }\n\n /**\n * Data source consumable by the underlying material table\n * @internal\n */\n dataSource = new MatTableDataSource<RowData>();\n\n /**\n * Whether selection is supported\n * @internal\n */\n get selection(): boolean {\n return this.template.selection || false;\n }\n\n /**\n * Whether a selection checkbox should be displayed\n * @internal\n */\n get selectionCheckbox(): boolean {\n return this.template.selectionCheckbox || false;\n }\n\n /**\n * Whether selection many entities should eb supported\n * @internal\n */\n get selectMany(): boolean {\n return this.template.selectMany || false;\n }\n\n /**\n * Whether selection many entities should eb supported\n * @internal\n */\n get fixedHeader(): boolean {\n return this.template.fixedHeader === undefined\n ? true\n : this.template.fixedHeader;\n }\n\n get tableHeight(): string {\n return this.template.tableHeight ? this.template.tableHeight : 'auto';\n }\n\n constructor() {\n this.dateAdapter.setLocale('fr-CA');\n }\n\n /**\n * Track the selection state to properly display the selection checkboxes\n * @internal\n */\n ngOnInit() {\n this.handleDatasource();\n this.dataSource.paginator = this.paginator;\n this.store.state.change$.pipe(debounceTime(100)).subscribe(() => {\n this.handleDatasource();\n this.refresh();\n });\n }\n\n /**\n * @internal\n */\n ngOnChanges(changes: SimpleChanges) {\n const store = changes.store;\n if (store && store.currentValue !== store.previousValue) {\n this.handleDatasource();\n }\n }\n\n /**\n * Process text or number value change (edition)\n */\n onValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.target.value;\n }\n\n /**\n * Process boolean value change (edition)\n */\n onBooleanValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.checked;\n }\n\n /**\n * Process select value change (edition)\n */\n onSelectValueChange(column: string, record: EntityRecord<any>, event) {\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = event.value;\n }\n\n /**\n * Process autocomplete value change (edition)\n */\n onAutocompleteValueChange(\n column: EntityTableColumn,\n record: EntityRecord<any>,\n event\n ) {\n this.formGroup.controls[column.name].setValue(event.option.viewValue);\n const key = this.getColumnKeyWithoutPropertiesTag(column.name);\n record.entity.properties[key] = event.option.value;\n }\n\n /**\n * Process date value change (edition)\n */\n onDateChange(column: string, record: EntityRecord<any>, event) {\n const format = 'YYYY-MM-DD';\n const value = moment(event.value).format(format);\n const key = this.getColumnKeyWithoutPropertiesTag(column);\n record.entity.properties[key] = value;\n }\n\n /**\n * Enable edition mode for one row\n * More than one row can be edited at the same time\n */\n private enableEdit(record: EntityRecord<any>) {\n const item = record.entity.properties || record.entity;\n this.template.columns.forEach((column) => {\n column.title =\n column.validation?.mandatory && !column.title.includes('*')\n ? column.title + ' *'\n : column.title;\n\n const key = this.getColumnKeyWithoutPropertiesTag(column.name);\n if (column.type === 'boolean') {\n if (!item[key] || item[key] === null) {\n item[key] = false;\n } else if (typeof item[key] === 'string') {\n item[key] = JSON.parse(item[key].toLowerCase());\n }\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n } else if (column.type === 'list') {\n if (column.multiple) {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control([item[key]])\n );\n } else {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n\n typeof item[key] === 'string'\n ? this.formGroup.controls[column.name].setValue(parseInt(item[key]))\n : this.formGroup.controls[column.name].setValue(item[key]);\n }\n } else if (column.type === 'autocomplete') {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n\n this.filteredOptions[column.name] = new Observable<any[]>();\n this.filteredOptions[column.name] = this.formGroup.controls[\n column.name\n ].valueChanges.pipe(\n map((value) => {\n if (value?.length) {\n return column.domainValues?.filter((option) => {\n const filterNormalized = value\n ? value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n : '';\n const featureNameNormalized = option.value\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n return featureNameNormalized.includes(filterNormalized);\n });\n }\n })\n );\n\n let formControlValue = item[key];\n column.domainValues.forEach((option) => {\n if (\n typeof formControlValue === 'string' &&\n StringUtils.isValidNumber(formControlValue) &&\n !StringUtils.isOctalNumber(formControlValue)\n ) {\n formControlValue = parseInt(formControlValue);\n }\n if (\n option.value === formControlValue ||\n option.id === formControlValue\n ) {\n formControlValue = option.value;\n }\n });\n\n this.formGroup.controls[column.name].setValue(formControlValue);\n if (this.isEdition(record) && column.linkColumnForce) {\n const entity = record.entity as any;\n this.formGroup.controls[column.name].setValue(\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ]\n );\n }\n } else if (column.type === 'date') {\n if (column.visible !== false) {\n if (item[key]) {\n const date = moment(item[key]);\n item[key] = date.utc().format('YYYY-MM-DD');\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n } else {\n const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);\n record.entity.properties[newKey] = null;\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(null)\n );\n }\n }\n } else {\n this.formGroup.setControl(\n column.name,\n this.formBuilder.control(item[key])\n );\n }\n\n if (\n this.formGroup.controls[column.name] &&\n this.getValidationAttributeValue(column, 'readonly')\n ) {\n this.formGroup.controls[column.name].disable();\n }\n });\n }\n\n private handleDatasource() {\n this.unsubscribeStore();\n this.selection$$ = this.store.stateView\n .manyBy$((record: EntityRecord<object>) => record.state.selected === true)\n .subscribe((records: EntityRecord<object>[]) => {\n const firstSelected = records[0];\n const firstSelectedStateviewPosition = this.store.stateView\n .all()\n .indexOf(firstSelected);\n const pageMax = this.paginator\n ? this.paginator.pageSize * (this.paginator.pageIndex + 1)\n : 0;\n const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;\n\n if (\n this.paginator &&\n (firstSelectedStateviewPosition < pageMin ||\n firstSelectedStateviewPosition >= pageMax)\n ) {\n const pageToReach = Math.floor(\n firstSelectedStateviewPosition / this.paginator.pageSize\n );\n this.dataSource.paginator.pageIndex = pageToReach;\n }\n this.selectionState$.next(this.computeSelectionState(records));\n });\n this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {\n if (all[0]) {\n this.enableEdit(all[0]);\n }\n this.dataSource.data = all.map((record) => {\n return {\n record,\n cellData: this.template.columns.reduce(\n (cellData: CellData, column) => {\n const value = this.getValue(record, column);\n cellData[column.name] = {\n class: this.getCellClass(record, column),\n value,\n isUrl: this.isUrl(value),\n isImg: this.isImg(value)\n };\n return cellData;\n },\n {}\n )\n };\n });\n });\n }\n\n /**\n * Unbind the store watcher\n * @internal\n */\n ngOnDestroy() {\n this.unsubscribeStore();\n }\n\n private unsubscribeStore() {\n if (this.selection$$) {\n this.selection$$.unsubscribe();\n }\n if (this.dataSource$$) {\n this.dataSource$$.unsubscribe();\n }\n }\n\n /**\n * Trackby function\n * @param record Record\n * @param index Record index\n * @internal\n */\n getTrackByFunction(): TrackByFunction<RowData> {\n return (_index, row) => row.record.ref;\n }\n /**\n * Trigger a refresh of the table. This can be useful when\n * the data source doesn't emit a new value but for some reason\n * the records need an update.\n * @internal\n */\n refresh() {\n this.cdRef.detectChanges();\n }\n\n paginatorChange(event: MatPaginator) {\n this.paginator = event;\n }\n\n /**\n * On sort, sort the store\n * @param event Sort event\n * @internal\n */\n onSort(event: { active: string; direction: string }) {\n const direction = event.direction;\n const column = this.template.columns.find(\n (c: EntityTableColumn) => c.name === event.active\n );\n\n if (direction === 'asc' || direction === 'desc') {\n this.store.stateView.sort({\n valueAccessor: (record: EntityRecord<object>) =>\n this.getValue(record, column),\n direction,\n nullsFirst: this.sortNullsFirst\n });\n this.entitySortChange.emit({ column, direction });\n this.entitySortChange$.next(true);\n } else {\n this.store.stateView.sort(undefined);\n }\n }\n\n /**\n * When an entity is clicked, emit an event\n * @param record Record\n * @internal\n */\n onRowClick(record: EntityRecord<object>) {\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n this.entityClick.emit(record.entity);\n }\n\n /**\n * When an entity is selected, select it in the store and emit an event. Even if\n * \"many\" is set to true, this method always select a single, exclusive row. Selecting\n * multiple rows should be achieved by using the checkboxes.\n * @param record Record\n * @internal\n */\n onRowSelect(record: EntityRecord<object>) {\n if (this.selection === false) {\n return;\n }\n\n const entity = record.entity;\n this.store.state.update(entity, { selected: true }, true);\n this.entitySelectChange.emit({ added: [entity] });\n }\n\n /**\n * Select or unselect all rows at once. On select, emit an event.\n * @param toggle Select or unselect\n * @internal\n */\n onToggleRows(toggle: boolean) {\n if (this.selection === false) {\n return;\n }\n\n const entities = this.store.view.all();\n this.entitySelectChange.emit({ added: [entities] });\n this.store.state.updateMany(entities, { selected: toggle });\n }\n\n /**\n * When an entity is toggled, select or unselect it in the store. On select,\n * emit an event.\n * @param toggle Select or unselect\n * @param record Record\n * @internal\n */\n onToggleRow(toggle: boolean, record: EntityRecord<object>) {\n if (this.selection === false) {\n return;\n }\n\n const entity = record.entity;\n const exclusive = toggle === true && !this.selectMany;\n this.store.state.update(entity, { selected: toggle }, exclusive);\n if (toggle === true) {\n this.entitySelectChange.emit({ added: [entity] });\n }\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n }\n\n /**\n * When an entity is toggled, select or unselect it in the store. On select,\n * emit an event.\n * @param toggle Select or unselect\n * @param record Record\n * @internal\n */\n onShiftToggleRow(\n toggle: boolean,\n record: EntityRecord<object>,\n event: MouseEvent\n ) {\n if (this.selection === false) {\n return;\n }\n\n if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {\n this.onToggleRow(toggle, record);\n return;\n }\n\n // This is a workaround mat checkbox wrong behavior\n // when the shift key is held.\n // See https://github.com/angular/components/issues/6232\n const range = window.document.createRange();\n range.selectNode(event.target as HTMLElement);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n event.stopImmediatePropagation();\n\n const records = this.store.stateView.all();\n const recordIndex = records.indexOf(record);\n const lastRecordChecked = this.store.stateView.get(\n this.lastRecordCheckedKey\n );\n const lastRecordIndex = records.indexOf(lastRecordChecked);\n const indexes = [recordIndex, lastRecordIndex];\n const selectRecords = records.slice(\n Math.min(...indexes),\n Math.max(...indexes) + 1\n );\n\n const entities = selectRecords.map(\n (_record: EntityRecord<object>) => _record.entity\n );\n this.store.state.updateMany(entities, { selected: toggle });\n if (toggle === true) {\n this.entitySelectChange.emit({ added: entities });\n }\n this.lastRecordCheckedKey = this.store.stateView.getKey(record);\n }\n\n /**\n * Compute the selection state\n * @returns Whether all, some or no rows are selected\n * @internal\n */\n private computeSelectionState(\n selectedRecords: EntityRecord<object>[]\n ): EntityTableSelectionState {\n const states = EntityTableSelectionState;\n const selectionCount = selectedRecords.length;\n return selectionCount === 0\n ? states.None\n : selectionCount === this.store.stateView.count\n ? states.All\n : states.Some;\n }\n\n /**\n * Whether a column is sortable\n * @param column Column\n * @returns True if a column is sortable\n * @internal\n */\n columnIsSortable(column: EntityTableColumn): boolean {\n let sortable = column.sort;\n if (sortable === undefined) {\n sortable = this.template.sort === undefined ? false : this.template.sort;\n }\n return sortable;\n }\n\n /**\n * Whether a row is should be selected based on the underlying entity state\n * @param record Record\n * @returns True if a row should be selected\n * @internal\n */\n rowIsSelected(record: EntityRecord<object>): boolean {\n const state = record.state;\n return state.selected ? state.selected : false;\n }\n\n isImg(value) {\n if (this.isUrl(value)) {\n return (\n ['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !==\n -1\n );\n } else {\n return false;\n }\n }\n\n isUrl(value) {\n if (typeof value === 'string') {\n return (\n value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://'\n );\n } else {\n return false;\n }\n }\n\n /**\n * Method to access an entity's values\n * @param record Record\n * @param column Column\n * @returns Any value\n * @internal\n */\n getValue(record: EntityRecord<object>, column: EntityTableColumn): any {\n const entity = record.entity;\n let value;\n if (column.valueAccessor !== undefined) {\n return column.valueAccessor(entity, record);\n }\n if (this.template.valueAccessor !== undefined) {\n return this.template.valueAccessor(entity, column.name, record);\n }\n value = this.store.getProperty(entity, column.name);\n\n if (column.type === 'boolean') {\n if (value === undefined || value === null || value === '') {\n value = false;\n } else if (typeof value !== 'boolean' && value !== undefined) {\n if (typeof value === 'number') {\n value = Boolean(value);\n } else {\n value = JSON.parse(value.toLowerCase());\n }\n }\n if (!this.isEdition(record)) {\n value = value ? '&#10003;' : ''; // check mark\n }\n } else if (column.type === 'list' && value && column.domainValues) {\n const entity = record.entity as any;\n if (column.multiple) {\n let list_id;\n typeof value === 'string'\n ? (list_id = value.match(/[\\w.-]+/g).map(Number))\n : (list_id = value);\n const list_option = [];\n\n column.domainValues.forEach((option) => {\n if (list_id.includes(option.id)) {\n if (record.edition) {\n list_option.push(option.id);\n } else {\n list_option.push(option.value);\n }\n }\n });\n\n this.isEdition(record) ? (value = list_id) : (value = list_option);\n } else {\n if (!this.isEdition(record) && column.linkColumnForce) {\n value =\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ];\n } else {\n column.domainValues.forEach((option) => {\n if (\n typeof value === 'string' &&\n StringUtils.isValidNumber(value) &&\n !StringUtils.isOctalNumber(value)\n ) {\n value = parseInt(value);\n }\n if (option.value === value || option.id === value) {\n this.isEdition(record)\n ? (value = option.id)\n : (value = option.value);\n }\n });\n }\n }\n } else if (column.type === 'autocomplete' && value && column.domainValues) {\n const entity = record.entity as any;\n if (!this.isEdition(record) && column.linkColumnForce) {\n value =\n entity?.properties[\n this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)\n ];\n } else {\n column.domainValues.forEach((option) => {\n if (\n typeof value === 'string' &&\n StringUtils.isValidNumber(value) &&\n !StringUtils.isOctalNumber(value)\n ) {\n value = parseInt(value);\n }\n if (option.value === value || option.id === value) {\n value = option.value;\n }\n });\n }\n } else if (column.type === 'date') {\n if (this.isEdition(record)) {\n if (value) {\n const date = moment(value);\n value = date.format();\n this.formGroup.controls[column.name].setValue(value);\n }\n } else if (!this.isEdition(record) && value === null) {\n value = '';\n }\n }\n\n if (value === undefined) {\n value = '';\n }\n\n return value;\n }\n\n /**\n * Method to access an entity's validation values\n * @param column Column\n * @param validationType string\n * @returns Any value (false if no validation or not the one concerned)\n * @internal\n */\n getValidationAttributeValue(\n column: EntityTableColumn,\n validationType: string\n ): any {\n if (\n column.validation !== undefined &&\n column.validation[validationType] !== undefined\n ) {\n return column.validation[validationType];\n } else {\n return false;\n }\n }\n\n public isEdition(record) {\n return record.entity.edition ? true : false;\n }\n\n /**\n * Return the type of renderer of a column\n * @param column Column\n * @returns Renderer type\n * @internal\n */\n getColumnRenderer(column: EntityTableColumn): EntityTableColumnRenderer {\n if (column.renderer !== undefined) {\n return column.renderer;\n }\n return EntityTableColumnRenderer.Default;\n }\n\n /**\n * Return the table ngClass\n * @returns ngClass\n * @internal\n */\n getTableClass(): Record<string, boolean> {\n return {\n 'igo-entity-table-with-selection': this.selection\n };\n }\n\n /**\n * Return a header ngClass\n * @returns ngClass\n * @internal\n */\n getHeaderClass(): Record<string, boolean> {\n const func = this.template.headerClassFunc;\n if (func instanceof Function) {\n return func();\n }\n return {};\n }\n\n /**\n * Return a row ngClass\n * @param record Record\n * @returns ngClass\n * @internal\n */\n getRowClass(record: EntityRecord<object>): Record<string, boolean> {\n const entity = record.entity;\n const func = this.template.rowClassFunc;\n if (func instanceof Function) {\n return func(entity, record);\n }\n return {};\n }\n\n /**\n * Return a row ngClass\n * @param record Record\n * @param column Column\n * @returns ngClass\n * @internal\n */\n getCellClass(\n record: EntityRecord<object>,\n column: EntityTableColumn\n ): Record<string, boolean> {\n const entity = record.entity;\n const cls = {};\n\n const tableFunc = this.template.cellClassFunc;\n if (tableFunc instanceof Function) {\n Object.assign(cls, tableFunc(entity, column, record));\n }\n\n const columnFunc = column.cellClassFunc;\n if (columnFunc instanceof Function) {\n Object.assign(cls, columnFunc(entity, record));\n }\n\n return cls;\n }\n\n /**\n * When a button is clicked\n * @param func Function\n * @param record Record\n * @internal\n */\n onButtonClick(\n clickFunc: (entity: object, record?: EntityRecord<object>) => void,\n record: EntityRecord<object>\n ) {\n this.enableEdit(record);\n if (typeof clickFunc === 'function') {\n clickFunc(record.entity, record);\n }\n }\n\n /**\n * Retrieve column name without his \"properties\" tag (useful for edition workspace properties)\n */\n public getColumnKeyWithoutPropertiesTag(column: string) {\n if (column.includes('properties.')) {\n return column.split('.')[1];\n }\n return column;\n }\n}\n","<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\n <table\n id=\"currentWorkspaceTable\"\n mat-table\n matSort\n [ngClass]=\"getTableClass()\"\n [dataSource]=\"dataSource\"\n [trackBy]=\"getTrackByFunction()\"\n (matSortChange)=\"onSort($event)\"\n >\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\n <th mat-header-cell *matHeaderCellDef>\n @if (selectMany) {\n @let selectionState = selectionState$ | async;\n @if (selectionState) {\n <mat-checkbox\n (change)=\"onToggleRows($event.checked)\"\n [checked]=\"selectionState === entityTableSelectionState.All\"\n [indeterminate]=\"\n selectionState === entityTableSelectionState.Some\n \"\n >\n </mat-checkbox>\n }\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\n (click)=\"\n $event.shiftKey\n ? onShiftToggleRow(!rowIsSelected(row.record), row.record, $event)\n : $event.stopPropagation()\n \"\n (change)=\"onToggleRow($event.checked, row.record)\"\n [checked]=\"rowIsSelected(row.record)\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n @for (column of template.columns; track column) {\n <ng-container [matColumnDef]=\"column.name\">\n @if (columnIsSortable(column)) {\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n >\n {{ column.title }}\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\n >\n {{ column.title }}\n </th>\n }\n\n @let columnRenderer = getColumnRenderer(column);\n @if (columnRenderer) {\n @switch (columnRenderer) {\n @case (entityTableColumnRenderer.HTML) {\n <ng-container *matCellDef=\"let row\">\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n [innerHTML]=\"row.cellData[column.name].value\"\n ></td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n <span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span>\n }\n >\n </a>\n </td>\n }\n </ng-container>\n }\n @case (entityTableColumnRenderer.UnsanitizedHTML) {\n <ng-container *matCellDef=\"let row\">\n @if (isEdition(row.record)) {\n <td\n mat-cell\n class=\"mat-cell-text edition\"\n [formGroup]=\"formGroup\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @switch (column.type) {\n @case ('date') {\n <div class=\"date-picker\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"picker\"\n ></mat-datepicker-toggle>\n <input\n matInput\n [matDatepicker]=\"picker\"\n [formControlName]=\"column.name\"\n value=\"{{ row.cellData[column.name].value }}\"\n (dateChange)=\"\n onDateChange(column.name, row.record, $event)\n \"\n />\n <mat-datepicker #picker></mat-datepicker>\n </div>\n }\n @case ('time') {\n <input\n matInput\n type=\"time\"\n [formControlName]=\"column.name\"\n step=\"900\"\n (focus)=\"column.onFocus($event)\"\n (keypress)=\"column.onChange($event)\"\n (blur)=\"column.onBlur($event)\"\n />\n }\n @case ('number') {\n <input\n matInput\n type=\"number\"\n class=\"class_number_edition\"\n [formControlName]=\"column.name\"\n step=\"{{ column.step }}\"\n value=\"{{ row.cellData[column.name].value }}\"\n (input)=\"\n onValueChange(column.name, row.record, $event)\n \"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n min=\"{{\n getValidationAttributeValue(column, 'minValue')\n }}\"\n max=\"{{\n getValidationAttributeValue(column, 'maxValue')\n }}\"\n />\n }\n @case ('boolean') {\n <mat-checkbox\n [formControlName]=\"column.name\"\n [checked]=\"row.cellData[column.name].value\"\n (change)=\"\n onBooleanValueChange(\n column.name,\n row.record,\n $event\n )\n \"\n ></mat-checkbox>\n }\n @case ('list') {\n <mat-select\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n [formControlName]=\"column.name\"\n [multiple]=\"column.multiple\"\n (selectionChange)=\"\n onSelectValueChange(column.name, row.record, $event)\n \"\n [value]=\"row.cellData[column.name].value\"\n >\n <mat-option\n *ngFor=\"let option of column.domainValues\"\n [value]=\"option.id\"\n [disabled]=\"option.disabled\"\n >\n {{ option.value }}\n </mat-option>\n </mat-select>\n }\n @case ('autocomplete') {\n <input\n matInput\n type=\"text\"\n [formControlName]=\"column.name\"\n [matAutocomplete]=\"auto\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n value=\"{{ row.cellData[column.name].value }}\"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"\n onAutocompleteValueChange(\n column,\n row.record,\n $event\n )\n \"\n panelWidth=\"430px\"\n >\n <mat-option\n *ngFor=\"\n let option of filteredOptions[column.name] | async\n \"\n [value]=\"option.id\"\n >\n {{ option.value }}\n </mat-option>\n </mat-autocomplete>\n }\n @default {\n <input\n matInput\n type=\"text\"\n [formControlName]=\"column.name\"\n value=\"{{ row.cellData[column.name].value }}\"\n (input)=\"\n onValueChange(column.name, row.record, $event)\n \"\n readonly=\"{{\n getValidationAttributeValue(column, 'readonly')\n }}\"\n required=\"{{\n getValidationAttributeValue(column, 'mandatory')\n }}\"\n />\n }\n }\n </td>\n } @else {\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n [innerHTML]=\"\n row.cellData[column.name].value | sanitizeHtml\n \"\n ></td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n ><span\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\n </span>\n }\n >\n </a>\n </td>\n }\n }\n </ng-container>\n }\n @case (entityTableColumnRenderer.Icon) {\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @if (column.onClick) {\n <mat-icon (click)=\"column.onClick($event)\">{{\n row.cellData[column.name].value || column.icon\n }}</mat-icon>\n } @else {\n <mat-icon>{{\n row.cellData[column.name].value || column.icon\n }}</mat-icon>\n }\n </td>\n }\n @case (entityTableColumnRenderer.ButtonGroup) {\n <ng-container *matCellDef=\"let row\">\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n @for (\n button of row.cellData[column.name].value;\n track button\n ) {\n @if (\n isEdition(row.record) === button.editMode ||\n button.editMode === undefined\n ) {\n <span>\n @if (button.style === 'mat-icon-button') {\n <button\n igoStopPropagation\n mat-icon-button\n [color]=\"button.color\"\n (mousedown)=\"\n onButtonClick(button.click, row.record)\n \"\n [disabled]=\"button.disabled\"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n } @else {\n <button\n igoStopPropagation\n mat-mini-fab\n [color]=\"button.color\"\n (mousedown)=\"\n onButtonClick(button.click, row.record)\n \"\n [disabled]=\"button.disabled\"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n }\n </span>\n }\n }\n </td>\n </ng-container>\n }\n @default {\n <ng-container *matCellDef=\"let row\">\n @if (!row.cellData[column.name].isUrl) {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n {{ row.cellData[column.name].value }}\n </td>\n } @else {\n <td\n mat-cell\n class=\"mat-cell-text\"\n [ngClass]=\"row.cellData[column.name].class\"\n >\n <a\n href=\"{{ row.cellData[column.name].value }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (row.cellData[column.name].isImg) {\n <img\n igoImageError\n src=\"{{\n row.cellData[column.name].value\n | secureImage\n | async\n }}\"\n width=\"50\"\n heigth=\"auto\"\n />\n } @else {\n <span>{{\n 'igo.common.entity-table.targetHtmlUrl' | translate\n }}</span>\n }\n >\n </a>\n </td>\n }\n </ng-container>\n }\n }\n }\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\n [ngClass]=\"getHeaderClass()\"\n ></tr>\n <tr\n mat-row\n igoEntityTableRow\n *matRowDef=\"let row; columns: headers\"\n [scrollBehavior]=\"scrollBehavior\"\n [ngClass]=\"getRowClass(row.record)\"\n [selection]=\"selection\"\n [selected]=\"rowIsSelected(row.record)\"\n (select)=\"onRowSelect(row.record)\"\n (click)=\"onRowClick(row.record)\"\n ></tr>\n </table>\n @if (withPaginator) {\n <igo-entity-table-paginator\n [store]=\"store\"\n [paginatorOptions]=\"paginatorOptions\"\n [entitySortChange$]=\"entitySortChange$\"\n (paginatorChange)=\"paginatorChange($event)\"\n >\n </igo-entity-table-paginator>\n }\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { EntityTableComponent } from './entity-table.component';\n\n/**\n * @deprecated import the EntityTableComponent directly\n */\n@NgModule({\n imports: [EntityTableComponent],\n exports: [EntityTableComponent]\n})\nexport class IgoEntityTableModule {}\n","import { NgModule } from '@angular/core';\n\nimport { EntityTablePaginatorComponent } from './entity-table-paginator.component';\n\n/**\n * @deprecated import the EntityTablePaginatorComponent directly\n */\n@NgModule({\n imports: [EntityTablePaginatorComponent],\n exports: [EntityTablePaginatorComponent]\n})\nexport class IgoEntityTablePaginatorModule {}\n","import { NgModule } from '@angular/core';\n\nimport { EntitySelectorComponent } from './entity-selector';\nimport { EntityTableComponent } from './entity-table';\nimport { EntityTablePaginatorComponent } from './entity-table-paginator';\n\nexport const ENTITY_DIRECTIVES = [\n EntitySelectorComponent,\n EntityTableComponent,\n EntityTablePaginatorComponent\n] as const;\n\n/**\n * @deprecated import the components directly or ENTITY_DIRECTIVES for every components/directives\n */\n@NgModule({\n imports: [...ENTITY_DIRECTIVES],\n exports: [...ENTITY_DIRECTIVES]\n})\nexport class IgoEntityModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i7"],"mappings":"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"}