@solidev/data 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/fesm2022/solidev-data.mjs +153 -154
  2. package/fesm2022/solidev-data.mjs.map +1 -1
  3. package/index.d.ts +2147 -3
  4. package/package.json +5 -5
  5. package/lib/auth/auth-interceptor.service.d.ts +0 -31
  6. package/lib/auth/auth.service.d.ts +0 -64
  7. package/lib/auth/jwt.d.ts +0 -22
  8. package/lib/data/data-backend.d.ts +0 -72
  9. package/lib/data/data-collection.d.ts +0 -110
  10. package/lib/data/data-collection.mock.d.ts +0 -19
  11. package/lib/data/data-model.d.ts +0 -94
  12. package/lib/data/data-parameters.d.ts +0 -26
  13. package/lib/data/data-query.d.ts +0 -104
  14. package/lib/data/data-query.mock.d.ts +0 -25
  15. package/lib/data/fields/base.d.ts +0 -120
  16. package/lib/data/fields/boolean.d.ts +0 -9
  17. package/lib/data/fields/computed.d.ts +0 -14
  18. package/lib/data/fields/datetime.d.ts +0 -46
  19. package/lib/data/fields/index.d.ts +0 -7
  20. package/lib/data/fields/numbers.d.ts +0 -35
  21. package/lib/data/fields/primaryfield.d.ts +0 -8
  22. package/lib/data/fields/relations.d.ts +0 -45
  23. package/lib/data/fields/stringfields.d.ts +0 -50
  24. package/lib/dispedit/choice.pipe.d.ts +0 -13
  25. package/lib/dispedit/dispedit/dispedit.component.d.ts +0 -182
  26. package/lib/dispedit/dispedit/dispedit.constants.d.ts +0 -6
  27. package/lib/dispedit/factor.pipe.d.ts +0 -19
  28. package/lib/dispedit/factorc.pipe.d.ts +0 -19
  29. package/lib/dispedit/fkselect/fkselect.component.d.ts +0 -42
  30. package/lib/dispedit/flags/flags.component.d.ts +0 -39
  31. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +0 -116
  32. package/lib/dispedit/richedit/richedit.component.d.ts +0 -38
  33. package/lib/dispedit/sdelete/sdelete.component.d.ts +0 -49
  34. package/lib/messages/message-zone/message-zone.component.d.ts +0 -13
  35. package/lib/messages/message.service.d.ts +0 -59
  36. package/lib/modellist/model-list-fields/model-list-field-header/messages.d.ts +0 -6
  37. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +0 -25
  38. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +0 -20
  39. package/lib/modellist/model-list-fields/model-list-fields.d.ts +0 -68
  40. package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +0 -1
  41. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +0 -30
  42. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +0 -22
  43. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +0 -11
  44. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +0 -8
  45. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +0 -15
  46. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +0 -4
  47. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +0 -15
  48. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +0 -4
  49. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +0 -17
  50. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +0 -4
  51. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +0 -20
  52. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +0 -17
  53. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +0 -35
  54. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +0 -25
  55. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +0 -18
  56. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +0 -17
  57. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +0 -19
  58. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +0 -17
  59. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +0 -17
  60. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +0 -18
  61. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +0 -11
  62. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +0 -16
  63. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +0 -4
  64. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +0 -55
  65. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +0 -9
  66. package/lib/modellist/model-list-filters/model-list-filter-group.d.ts +0 -11
  67. package/lib/modellist/model-list-filters/model-list-filter.d.ts +0 -59
  68. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +0 -9
  69. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +0 -19
  70. package/lib/modellist/model-list-filters/model-list-filters.d.ts +0 -21
  71. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +0 -21
  72. package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +0 -16
  73. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +0 -22
  74. package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +0 -61
  75. package/lib/modellist/model-list.service.d.ts +0 -98
  76. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +0 -41
  77. package/lib/routing/routing.d.ts +0 -64
  78. package/lib/updates/update/update.component.d.ts +0 -8
  79. package/lib/updates/update.service.d.ts +0 -16
  80. package/lib/uploader/index.d.ts +0 -5
  81. package/lib/uploader/interfaces.d.ts +0 -67
  82. package/lib/uploader/ng-file-drop.directive.d.ts +0 -22
  83. package/lib/uploader/ng-file-select.directive.d.ts +0 -19
  84. package/lib/uploader/ngx-uploader.class.d.ts +0 -35
  85. package/lib/uploader/ngx-uploader.module.d.ts +0 -8
  86. package/lib/utils/slugify.d.ts +0 -1
  87. package/lib/utils/tab-memory.service.d.ts +0 -30
  88. package/lib/utils/template.d.ts +0 -1
  89. package/public-api.d.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"solidev-data.mjs","sources":["../../../projects/data/src/lib/data/data-parameters.ts","../../../projects/data/src/lib/data/fields/base.ts","../../../projects/data/src/lib/data/data-model.ts","../../../projects/data/src/lib/data/data-query.ts","../../../projects/data/src/lib/data/data-collection.ts","../../../projects/data/src/lib/data/data-backend.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters.ts","../../../projects/data/src/lib/auth/jwt.ts","../../../projects/data/src/lib/auth/auth.service.ts","../../../projects/data/src/lib/auth/auth-interceptor.service.ts","../../../projects/data/src/lib/modellist/model-list.service.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.html","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.html","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter-group.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.html","../../../projects/data/src/lib/dispedit/choice.pipe.ts","../../../projects/data/src/lib/dispedit/factor.pipe.ts","../../../projects/data/src/lib/dispedit/factorc.pipe.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.html","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.ts","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.html","../../../projects/data/src/lib/messages/message.service.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.html","../../../projects/data/src/lib/dispedit/flags/flags.component.ts","../../../projects/data/src/lib/dispedit/flags/flags.component.html","../../../projects/data/src/lib/dispedit/richedit/richedit.component.ts","../../../projects/data/src/lib/dispedit/richedit/richedit.component.html","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.ts","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.html","../../../projects/data/src/lib/data/fields/stringfields.ts","../../../projects/data/src/lib/data/fields/primaryfield.ts","../../../projects/data/src/lib/data/fields/datetime.ts","../../../projects/data/src/lib/data/fields/relations.ts","../../../projects/data/src/lib/data/fields/boolean.ts","../../../projects/data/src/lib/data/fields/numbers.ts","../../../projects/data/src/lib/data/fields/computed.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.html","../../../projects/data/src/lib/data/data-query.mock.ts","../../../projects/data/src/lib/data/data-collection.mock.ts","../../../projects/data/src/lib/uploader/interfaces.ts","../../../projects/data/src/lib/uploader/ngx-uploader.class.ts","../../../projects/data/src/lib/uploader/ng-file-drop.directive.ts","../../../projects/data/src/lib/uploader/ng-file-select.directive.ts","../../../projects/data/src/lib/uploader/ngx-uploader.module.ts","../../../projects/data/src/lib/routing/routing.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.html","../../../projects/data/src/lib/utils/tab-memory.service.ts","../../../projects/data/src/lib/utils/slugify.ts","../../../projects/data/src/lib/utils/template.ts","../../../projects/data/src/lib/updates/update.service.ts","../../../projects/data/src/lib/updates/update/update.component.ts","../../../projects/data/src/lib/updates/update/update.component.html","../../../projects/data/src/public-api.ts","../../../projects/data/src/solidev-data.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_API_URL = new InjectionToken<string>(\"data.api.url\");\n/**\n * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time\n * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used\n */\nexport const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken<number>(\"data.max.transfer.state\");\n\n/**\n * DataDisplayConfig interface provides default values for display classes\n */\nexport interface DataDisplayConfig {\n dispEdit: {\n defaultMode: \"inline\" | \"dd\";\n inputClasses: {[index: string]: string};\n };\n}\n\nexport const BootstrapDataDisplayConfig: DataDisplayConfig = {\n dispEdit: {\n defaultMode: \"dd\",\n inputClasses: {\n \"input.text\": \"form-control\",\n \"input.email\": \"form-control\",\n \"input.datetime\": \"form-control\",\n \"input.date\": \"form-control\",\n \"input.number\": \"form-control\",\n \"input.decimal\": \"form-control\",\n \"input.checkbox\": \"form-control\",\n \"input.password\":\"form-control\",\n \"textarea\": \"form-control\",\n \"quill\": \"\",\n \"fkselect\": \"form-control\",\n \"select\": \"form-select\"\n },\n }\n};\n\n\n/**\n * DATA_DISPLAY_CONFIG: display config & default classes injection token\n */\nexport const DATA_DISPLAY_CONFIG = new InjectionToken<DataDisplayConfig>(\"data.display.config\");\n","import 'reflect-metadata';\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { DataModel } from '../data-model';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport const PROPERTY_METADATA_KEY = Symbol('ngxDataMetadata');\n\n/**\n * Descriptive info for all fields.\n * All are optional.\n */\nexport interface IFieldMetadata<FT> {\n /** Field name (for display, column title, etc..) */\n name?: string;\n /** Field help text (for input) */\n help?: string;\n /** Field description (for details on hover etc..) */\n description?: string;\n /** Field required : no undefined allowed on save ? */\n required?: boolean;\n /** Field cannot be updated */\n readonly?: boolean;\n /** Default value */\n defaultValue?: FT | ((args: any) => FT) | null;\n /** Priority : first fields = higher priority */\n priority?: number;\n}\n\n/**\n * Base field manager, stores metadata and provides common field utilities\n *\n * - name : field name, should be the same in data structure and model\n * - help : field help text, blank by default\n * - description : field name for humans\n * - readonly : field is readonly (cannot be changed / pushed to api)\n * - default : default value for field\n *\n * - editor_type : editor type\n * - display_type : display type\n *\n * - fromJson(data) : deserializer\n * - toJson(data) : serialiser\n * - toString(data,format) : to string, for display\n *\n * - formControl : returns field form control\n * - validators : returns field validator\n */\nexport class BaseFieldManager<FT> implements IFieldMetadata<FT> {\n /** Name is mandatory in a field manager. It is given by\n * field decorator if not directly given in field manager. */\n public name!: string;\n public description!: string;\n public help!: string;\n public required = false;\n public readonly = false;\n public computed = false;\n public priority = 0;\n public defaultValue?: FT | ((args: any) => FT);\n\n public editorType: DISPEDIT_EDITOR_TYPES = 'input.text';\n public displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n\n constructor(params: IFieldMetadata<FT>) {\n Object.assign(this, params);\n if (!this.name) {\n this.name = 'noname';\n }\n if (!this.description) {\n this.description = this.name;\n }\n if (!this.help) {\n this.help = '';\n }\n this.getDefaultValue();\n }\n\n /** Return field validators */\n public get validators(): ValidatorFn[] {\n return this.getValidators();\n }\n\n /** Returns current field name */\n public get fname(): string {\n return this.name.split('__')[1] || this.name;\n }\n\n /** Create a new typed formControl for this field. */\n public formControl(instance: DataModel): FormControl<FT | null> {\n return new FormControl<FT>(\n ((instance as any)[this.fname] as FT) || (this.getDefaultValue() as FT),\n this.validators\n );\n }\n\n /** JSON deserializer base method. */\n public fromJson(data: any): FT {\n return data as FT;\n }\n\n /** JSON serializer base method. */\n public toJson(data: FT): any {\n return data as any;\n }\n\n /**\n * Display value (as string)\n * @param data\n * @param format (not used)\n */\n public toString(data: FT, format: string = 'default'): string {\n return `${data}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n */\n public default(args: any = {}): FT | undefined {\n return this.getDefaultValue(args);\n }\n\n /** Return validators\n *\n * @protected\n */\n protected getValidators(): ValidatorFn[] {\n const v: ValidatorFn[] = [];\n if (this.required) {\n v.push(Validators.required);\n }\n return v;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected getDefaultValue(args: any = {}): FT | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Field data stored on reflected metadata.\n */\nexport interface IFieldStoredMetadata<FT> extends IFieldMetadata<FT> {\n self: string;\n name: string;\n type: string;\n manager: BaseFieldManager<FT>;\n}\n\n/** Util to get own object keys */\nconst ownKeys = (target: any): any =>\n Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target) as any\n );\n\n/** Manager constructor\n * FT is js field type;\n * T is manager type\n * */\ntype BaseFieldManagerConstructor<FT, T extends BaseFieldManager<FT>> = new (\n params: any\n) => T;\n\n/**\n * Field decorator function\n */\nexport type FieldDecoratorFn = (\n target: any,\n propertyKey: string | symbol\n) => void;\n\n/**\n * Creates a field decorator that can only be applied within\n * an object containing a static __name property.\n *\n *\n * @param meta field metadata\n * @param type field type code\n * @param manager field manager\n */\nexport function genericDataField<\n FT,\n MD extends IFieldMetadata<FT>,\n MG extends BaseFieldManager<FT>\n>(\n meta: MD,\n type: string,\n manager: BaseFieldManagerConstructor<FT, MG>\n): FieldDecoratorFn {\n return (target: DataModel, propertyKey: string | symbol) => {\n const allMetadata: Map<\n string,\n IFieldStoredMetadata<any>\n > = Reflect.getMetadata(PROPERTY_METADATA_KEY, target) ||\n new Map<string, IFieldStoredMetadata<any>>();\n let cname: string = `${(target.constructor as any).__name}`;\n if ((cname === `undefined` || cname === '') && type !== 'primaryField') {\n throw Error(\n `Decorator ${type} allowed only on classes with static __name field : \"${cname}\" found for - ${target}`\n );\n }\n const pk = `${cname}__${String(propertyKey)}`;\n let cm = allMetadata.get(pk);\n /* istanbul ignore if */\n if (cm) {\n // This should never occur as metadata is object bound and property names must be unique\n throw Error(`Field ${pk} already defined = ${cm}`);\n }\n cm = {} as IFieldStoredMetadata<any>;\n for (const key of ownKeys(meta as any)) {\n (cm as any)[key] = (meta as any)[key];\n }\n if (meta.name === undefined) {\n cm.name = `${String(propertyKey)}`;\n }\n cm.type = type;\n cm.self = pk;\n cm.manager = new manager(cm);\n allMetadata.set(pk, cm);\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, allMetadata, target);\n };\n}\n","import {\n BaseFieldManager,\n IFieldStoredMetadata,\n PROPERTY_METADATA_KEY,\n} from './fields/base';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport { Collection } from './data-collection';\nimport { Observable, throwError } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nexport type DataModelFields = Readonly<Map<string, IFieldStoredMetadata<any>>>;\n\n/**\n * Base class for data model.\n *\n * Each class must have a static __name\n * primary field is given with id field.\n *\n * Some methods are provided to be used with a collection, mostly for CRUD operations.\n *\n */\nexport class DataModel {\n /**\n * data model name\n * this need to be given because class name is not fully available because of minification.\n */\n protected static readonly __name: string = '';\n\n /**\n * Primary field; readonly; must be created and auto incremented on db side.\n */\n // @primaryField({\n // description: 'ID',\n // help: 'Identifiant primaire',\n // })\n public id!: number;\n private readonly _F: DataModelFields;\n\n /**\n * Constructor for data model instance.\n * A matching collection can be provided.\n * ___fields readonly property is also populated from Reflected metadata\n *\n * @param _coll collection used for CRUD, etc..\n */\n constructor(protected _coll?: Collection<any>) {\n const md: Map<string, IFieldStoredMetadata<any>> | undefined =\n Reflect.getMetadata(PROPERTY_METADATA_KEY, this);\n // istanbul ignore if\n if (!md) {\n // This should never occur as all datamodel have at least id field\n throw new Error(\n 'No property metadata found for this object; is there a property in current collection ?'\n );\n }\n // Get all fields from current class and its parents\n const fields = new Map<string, IFieldStoredMetadata<any>>();\n let parent = Object.getPrototypeOf(this);\n while (parent.constructor.name !== 'Object') {\n for (const f of md.keys()) {\n const fieldName = f.split('__')[1];\n if (fields.has(fieldName)) {\n continue;\n }\n if (f.indexOf(parent.constructor.__name + '__') === 0) {\n fields.set(fieldName, md.get(f)!);\n }\n }\n parent = Object.getPrototypeOf(parent);\n }\n this._F = Object.freeze(fields);\n }\n\n public get _collection(): Collection<any> {\n return this._coll as Collection<any>;\n }\n\n public set _collection(coll: Collection<any>) {\n this._coll = coll;\n }\n\n /**\n * HashMap of fields metadata (type, name, manager, etc...)\n */\n public get F(): DataModelFields {\n // istanbul ignore if\n if (!this._F) {\n throw new Error('Invalid data model, fields metadata is missing');\n }\n return this._F;\n }\n\n // Return field names iterator\n public get FN(): IterableIterator<string> {\n return this.F.keys();\n }\n\n /**\n * Loads model data from json.\n * If partial is true, only fields with matching data keys will be loaded\n * @param data\n * @param options\n */\n public fromJson(\n data: { [index: string]: any },\n { partial, check }: { partial?: boolean; check?: boolean } = {\n partial: false,\n check: false,\n }\n ): null | ValidationErrors {\n const errors: { [index: string]: null | ValidationErrors } = {};\n let haveError = false;\n for (const f of this.FN) {\n if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {\n const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);\n if (ferr !== null) {\n errors[f] = ferr;\n haveError = true;\n }\n }\n }\n return haveError ? errors : null;\n }\n\n public toJson(fields?: string | string[]): any {\n if (fields && !Array.isArray(fields)) {\n fields = [fields];\n }\n const out: { [index: string]: any } = {};\n const fl = this.F;\n for (const f of this.FN) {\n const mgr = this.FM(f);\n if (!fields || fields.length === 0) {\n if (mgr.readonly) {\n continue;\n }\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n } else {\n if (fields.indexOf(f) !== -1) {\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n }\n }\n }\n return out;\n }\n\n public action<T, RT extends { [index: string]: any }>(\n method: 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT',\n name: string,\n {\n body = undefined,\n update = false,\n updatePartial = true,\n updateCheck = false,\n // updateRaise = false,\n params = {},\n headers = {},\n }: {\n body?: { [_index: string]: any };\n update?: boolean;\n updatePartial?: boolean;\n updateCheck?: boolean;\n // updateRaise?: boolean;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<RT> {\n if (this._coll === undefined) {\n return throwError(() => new Error('Missing collection'));\n }\n return this._coll\n .action<RT>(this, method, name, {\n body,\n params,\n headers,\n })\n .pipe(\n tap((result) => {\n if (update) {\n this.fromJson(result, {\n partial: updatePartial,\n check: updateCheck,\n });\n return this;\n }\n return result;\n })\n );\n }\n\n // Called on model, returns the manager for a field.\n public FM<FT>(field: string): BaseFieldManager<FT> {\n if (this.F.has(field)) {\n return this.F.get(field)!.manager;\n }\n throw new Error(\n `${field} not found in ${Object.keys(this.F).join(',')} model ${this}`\n );\n }\n\n // Return field value, without typing\n public FV<FT>(field: string): FT {\n return (this as any)[field] as FT;\n }\n\n /**\n * Set field value. If check is true, only set value if all validators pass.\n * Skip setting field value if manager computed flag is true.\n *\n * The validation result is returned.\n *\n * @param field field name\n * @param value field valued\n * @param check default false\n * @return null or ValidationError\n */\n public setFV<FT>(\n field: string,\n value: FT,\n check: boolean = false\n ): null | ValidationErrors {\n if (this.FM(field).computed) {\n return null;\n }\n if (check) {\n const fc = new FormControl(value);\n\n for (const v of this.FM(field).validators) {\n const val = v(fc);\n if (val !== null) {\n console.error(val);\n return val;\n }\n }\n }\n (this as any)[field] = value;\n return null;\n }\n\n // Called on model with a list of fields, returns a FormGroup with\n // these fields, or only the form control for one field.\n public FC(): FormGroup;\n public FC(field: string): FormControl;\n public FC(field: string[]): FormGroup;\n public FC(field?: string | string[]): FormControl | FormGroup {\n if (field === undefined) {\n field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);\n }\n if (Array.isArray(field)) {\n const fg: { [index: string]: FormControl } = {};\n for (const f of field) {\n fg[f] = this.FC(f) as FormControl;\n }\n return new FormGroup(fg);\n }\n return this.FM(field).formControl(this);\n }\n\n public save(\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.save(this, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n\n public update(\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.update(this, fields, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n}\n\n//\n// export class TreeDataModel extends DataModel {\n// static override __name = 'TreeDataModel';\n// @detailsField({\n// model: this,\n// many: true,\n// description: 'Parents',\n// })\n// public parents_details?: this[];\n//\n// @foreignKeyField({\n// required: false,\n// description: 'Structure parente',\n// related: 'Structure',\n// })\n// public parent?: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'ID Tree',\n// })\n// public tree_id!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT left',\n// })\n// public lft!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT right',\n// })\n// public rght!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'Niveau hiérarchique',\n// })\n// public level!: number;\n//\n// public get parent_details(): this | null {\n// if (this.parents_details) {\n// const out = this.parents_details[this.parents_details.length - 1];\n// out.parents_details = this.parents_details.slice(\n// 0,\n// this.parents_details.length - 1\n// );\n// return out;\n// }\n// return null;\n// }\n//\n// public set parent_details(d: this | null) {\n// console.log(d);\n// this.parents_details = d?.parents_details;\n// }\n//\n// public _display(): string {\n// const out: string[] = [];\n// if (this.parents_details) {\n// for (const p of this.parents_details) {\n// if ((p as any).code) {\n// out.push(`[${(p as any).code}] ${(p as any).name}`);\n// } else {\n// out.push((p as any).name);\n// }\n// }\n// }\n// if ((this as any).code) {\n// out.push(`[${(this as any).code}] ${(this as any).name}`);\n// } else {\n// out.push((this as any).name);\n// }\n//\n// return out.join(' : ');\n// }\n// }\n","import { Collection } from './data-collection';\nimport { DataModel } from './data-model';\nimport { combineLatest, Observable, ReplaySubject, share } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport interface FilterData {\n [index: string]: string | number | boolean | undefined | null;\n}\n\nexport interface OutFilterData {\n [index: string]: string;\n}\n\nexport type SortData = string;\n\n/**\n * Queryset parameters\n */\nexport interface IQuerysetOptions {\n /** Emit fields list */\n emitFields?: boolean;\n /** Queryset name */\n name?: string;\n /** TODO: see usage */\n route?: ActivatedRoute;\n /** TODO: see usage */\n router?: Router;\n /** TODO: see usage */\n hash?: string;\n}\n\nexport interface IQueryNav {\n page: number;\n page_size: number;\n}\n\nexport interface IQueryMetaNav {\n count: number;\n next: number | null;\n page: number;\n pages: number;\n prev: number | null;\n size: number;\n}\n\nexport interface IQueryMetaNavParams {\n page: string;\n page_size: string;\n}\n\nexport interface IQueryMeta {\n nav: IQueryMetaNav;\n parameters: IQueryMetaNavParams;\n}\n\nexport interface IQueryFullResponse<T> extends IQueryMeta {\n results: T[];\n}\n\nexport class Queryset<T extends DataModel> {\n /** Current filter data */\n public filterData: FilterData = {};\n /** Current sorter data */\n public sortData: SortData[] = [];\n /** Current fields */\n public fields: string[] = [];\n /** Current page size */\n public pageSize = 500;\n /** Current page number */\n public page = 1;\n\n public options: IQuerysetOptions;\n private _loading = new ReplaySubject<boolean>(1);\n /** Loading status (true if currently fetching data) */\n public loading = this._loading.asObservable().pipe(share());\n private _meta = new ReplaySubject<IQueryMeta>(1);\n /** Results meta part observable */\n public meta = this._meta.asObservable().pipe(share());\n private _results = new ReplaySubject<T[]>(1);\n /** Results data part observable */\n public results = this._results.asObservable().pipe(share());\n private _full: Observable<[T[], boolean, IQueryMeta]> = combineLatest([\n this.results,\n this.loading,\n this.meta,\n ]);\n /** Full results observable (results, loading, meta) */\n public full = this._full.pipe(share());\n\n constructor(protected _coll: Collection<T>, options: IQuerysetOptions = {}) {\n /** Default options */\n // console.log('@solidev/data: Creating collection', _coll);\n this.options = { emitFields: true };\n Object.assign(this.options, options);\n }\n\n private _pristine = true;\n\n /** Pristine status (true if it has not collected results yet) */\n public get pristine(): boolean {\n return this._pristine;\n }\n\n /**\n * Update current filter data. Null or undefined values are removed from filter data.\n * @param params filter data\n * @param update boolean to update filter data instead of recreating it from scratch\n */\n public filter(params: FilterData = {}, update: boolean = false): Queryset<T> {\n if (!update) {\n this.filterData = {};\n }\n for (const k of Object.keys(params)) {\n if (params[k] === undefined || params[k] === null) {\n delete this.filterData[k];\n } else {\n this.filterData[k] = params[k];\n }\n }\n return this;\n }\n\n /**\n * Update sorting parameters, list of strings giving sort parameters e.g. sort(\"+name\", \"-id\").\n * @param sorting strings of sort parameters\n */\n public sort(...sorting: string[]): Queryset<T> {\n this.sortData = sorting;\n return this;\n }\n\n /**\n * Update page size.\n * @param pageSize required page size\n */\n public paginateBy(pageSize: number = 20): Queryset<T> {\n this.pageSize = pageSize;\n return this;\n }\n\n /**\n * Update current page number.\n * @param page required pqge\n * @param fragment TODO: fragment usage for router usage\n */\n public setPage(page: number = 1, fragment?: string): Queryset<T> {\n if (page !== this.page) {\n this.page = page;\n // if (this.options.router) {\n // // TODO: check and fix usage of fragment/query params\n // const frag = fragment\n // ? fragment\n // : this.options.hash || this.options.name;\n // const _ = this.options.router.navigate([], {\n // queryParams: { page: page.toString() },\n // fragment: frag,\n // queryParamsHandling: 'merge',\n // });\n // }\n }\n return this;\n }\n\n public setFields(fields: string[]): Queryset<T> {\n this.fields = fields;\n return this;\n }\n\n public getQueryParams(): OutFilterData {\n const f: FilterData = {};\n Object.assign(f, this.filterData);\n if (this.sortData.length) {\n f['ordering'] = this.sortData.join(',');\n }\n f['page_size'] = this.pageSize;\n f['page'] = this.page;\n if (this.options.emitFields && this.fields.length) {\n f['fields'] = this.fields.join(',');\n }\n return f as OutFilterData;\n }\n\n public get(refresh: boolean = true, sync: boolean = false): Observable<T[]> {\n if (!refresh && !this._pristine) {\n // console.log('@solidev/data: Get not refreshing, return current result observable');\n return this.results;\n }\n // console.log('@solidev/data: start get (query)');\n this._loading.next(true);\n const syncQp: { [index: string]: string } = {};\n if (sync) {\n syncQp['db'] = 'sync';\n }\n return this._coll\n .raw<IQueryFullResponse<T>>({\n method: 'GET',\n params: {\n ...this.getQueryParams(),\n ...syncQp,\n },\n })\n .pipe(\n switchMap((result) => {\n // Process results\n // console.log('@solidev/data: have meta');\n this._meta.next({ nav: result.nav, parameters: result.parameters });\n const out: T[] = [];\n for (const r of result.results) {\n const m = this._coll.fromJson(r);\n out.push(m);\n }\n this._pristine = false;\n // console.log('@solidev/data: have loading');\n this._loading.next(false);\n // console.log('@solidev/data: have result');\n this._results.next(out);\n // console.log('@solidev/data: done get');\n return this.results;\n })\n );\n }\n}\n","import { DataModel } from './data-model';\nimport { DataBackend } from './data-backend';\nimport { Observable } from 'rxjs';\nimport { FilterData, IQuerysetOptions, Queryset } from './data-query';\nimport { map, tap } from 'rxjs/operators';\n\nexport type IHttpMethod = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH';\n\nexport interface IActionParams {\n body?: any;\n headers?: { [index: string]: string };\n params?: { [index: string]: string };\n responseType?: 'json' | 'blob';\n}\n\nexport interface ICollectionCacheParams {\n transferState?: {\n enabled: boolean;\n maxTime: number;\n maxCount: number;\n };\n}\n\nexport type DataModelType<T extends DataModel> = new (\n _coll?: Collection<T>\n) => T;\n\nexport class Collection<T extends DataModel> {\n public useTransferState = true;\n\n constructor(\n protected backend: DataBackend,\n protected path: string,\n public model: DataModelType<T>\n ) {}\n\n public create(data?: Partial<T>): T {\n if (!data) {\n data = {};\n }\n return this.fromJson(data);\n }\n\n fromJson(data: Partial<T>): T;\n fromJson(data: Partial<T>[]): T[];\n fromJson(data: Partial<T> | Partial<T>[]): T | T[] {\n if (data instanceof Array) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n const m = new this.model(this);\n m.fromJson(data);\n return m;\n }\n\n public queryset(options: IQuerysetOptions = {}): Queryset<T> {\n return new Queryset<T>(this, options);\n }\n\n public fetch(\n id: number,\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T> {\n return this.backend\n .get(this, this.getUrl(id, { prefix, suffix }), { headers, params })\n .pipe(map((result) => this.fromJson(result)));\n }\n\n public action<RT>(\n model: T | null,\n method: IHttpMethod,\n action: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n return this.backend.action<T, RT>(\n this,\n method,\n this.getUrl(model ? model.id : null, {\n suffix: model ? '/' + action : action,\n }),\n { body, params, headers }\n );\n }\n\n public save(\n model: T,\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson() }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public update(\n model: T,\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson(fields) }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public delete(\n model: T,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this.backend.delete(this, this.getUrl(model.id), {\n params,\n headers,\n });\n }\n\n public list(\n query: FilterData = {},\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T[]> {\n const qry = Object.assign({}, query, params);\n return this.backend\n .list(\n this,\n this.getUrl(null, { suffix, prefix }),\n // SEE: forced typecast maybe bad\n { params: qry, headers }\n )\n .pipe(\n // FIXME: parametrize paginated results access\n map((result: { results: Partial<T>[] }) =>\n this.fromJson(result.results)\n )\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public raw<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<RT> {\n return this.backend.action(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public blob<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<Blob> {\n return this.backend.blob(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n public getUrl(\n id?: number | null,\n { prefix = '', suffix = '' }: { prefix?: string; suffix?: string } = {}\n ): string {\n if (id === undefined || id === null) {\n if (prefix || suffix) {\n return `${this.backend.apiUrl}${this.path}/${prefix}${suffix}`;\n } else {\n return `${this.backend.apiUrl}${this.path}`;\n }\n }\n return `${this.backend.apiUrl}${this.path}/${prefix}${id}${suffix}`;\n }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport {Observable, of} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState,} from '@angular/core';\nimport {isPlatformServer} from '@angular/common';\nimport {Collection, IActionParams} from './data-collection';\nimport {DataModel} from './data-model';\nimport {DATA_API_URL, DATA_MAX_TRANSFERSTATE_TIME} from './data-parameters';\n\n/**\n * DataBackend provides CRUD operations to a REST api.\n * TransferState can be used if DATA_MAX_TRANSFERSTATE_TIME is set and > 0\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataBackend {\n private _created = new Date();\n\n constructor(\n private _http: HttpClient,\n private _transferState: TransferState,\n @Inject(PLATFORM_ID) private _platform: any,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional()\n @Inject(DATA_MAX_TRANSFERSTATE_TIME)\n private _maxTransferstateTime: number = 0,\n ) {}\n\n /**\n * Return api url for this backend.\n */\n public get apiUrl(): string {\n return this._apiUrl;\n }\n\n /**\n * Launch an action on collection.\n * If method is GET and collection.useTranserState & transferState are enabled,\n * result is stored / retrieved from transferState.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n * @param responseType response type\n *\n * @return an observable of response body\n */\n public action<T extends DataModel, RT>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<RT> {\n if (method === 'GET') {\n return this._cachedGet(collection, url, {\n headers: this.headers(headers),\n params,\n });\n } else {\n // @ts-ignore\n return this._http.request<RT>(method, url, {\n body,\n params,\n headers: this.headers(headers),\n });\n }\n }\n\n /**\n * Launch an action on collection, receiving a blob.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n * @param responseType response type\n *\n * @return an observable of response body\n */\n public blob<T extends DataModel>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Blob> {\n // @ts-ignore\n return this._http.request(method, url, {\n body,\n params,\n headers: this.headers(headers),\n responseType: 'blob',\n });\n }\n\n public put<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<T> {\n return this._http.put<T>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public post<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._http.post<Partial<T>>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public patch<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._http.patch<Partial<T>>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public delete<T extends DataModel, R>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<R> {\n return this._http.delete<R>(url, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public _cachedGet<T extends DataModel, RT>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<RT> {\n const cur_headers = this.headers(headers);\n\n const key = makeStateKey<RT>(\n url + '|' + JSON.stringify(params) + '|' + JSON.stringify(cur_headers),\n );\n if (\n collection.useTransferState &&\n this._maxTransferstateTime > 0 &&\n this._transferState.hasKey(key) &&\n new Date().getTime() - this._created.getTime() <\n this._maxTransferstateTime\n ) {\n return of(this._transferState.get<RT | null>(key, null) as RT);\n }\n return this._http.get<RT>(url, { headers: cur_headers, params }).pipe(\n tap((result) => {\n if (\n collection.useTransferState &&\n isPlatformServer(this._platform) &&\n this._maxTransferstateTime > 0\n ) {\n this._transferState.set<RT>(key, result);\n }\n }),\n );\n }\n\n public get<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._cachedGet<T, Partial<T>>(collection, url, {\n headers: this.headers(headers),\n params,\n });\n }\n\n public list<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<any> {\n return this._cachedGet<T, Partial<T>>(collection, url, {\n headers: this.headers(headers),\n params,\n });\n }\n\n /**\n * Return headers for this backend.\n * Provided headers are copied and returned.\n * Can be overriden by subclasses for specific headers (e.g. auth token).\n */\n protected headers(headers: { [key: string]: string }): {\n [key: string]: string;\n } {\n return Object.assign({}, headers);\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { FieldsParams } from '../model-list.service';\n\nexport interface ModelListField {\n name: string;\n label: string;\n enabled: boolean;\n allowed: boolean;\n field: any;\n position: number;\n priority: number;\n}\n\nexport class ModelListFields<T extends DataModel> {\n private readonly __fields!: ModelListField[];\n\n constructor(collection: Collection<T>, params?: FieldsParams) {\n // Get fields from model\n const m = collection.create();\n const tmp = [];\n for (const fn of m.FN) {\n tmp.push({\n name: fn,\n label: m.FM(fn).description || fn,\n allowed: false,\n enabled: false,\n field: m.FV(fn),\n position: tmp.length * 10,\n priority: m.FM(fn).priority || 0,\n });\n }\n // Add custom fields if provided\n const custom = params?.custom || [];\n for (const c of custom) {\n tmp.push({\n name: c.name,\n label: c.label,\n allowed: false,\n enabled: false,\n field: null,\n position: tmp.length * 10,\n priority: c.priority || 0,\n });\n }\n\n tmp.sort((b, a) =>\n a.priority === b.priority\n ? b.position - a.position\n : a.priority - b.priority\n );\n let pos = 0;\n for (const i of tmp) {\n i.position = pos;\n pos += 10;\n }\n\n // Prepare allowed fields (all fields if not set or empty)\n let allowed: string[];\n let ddefaults: string[];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n allowed = tmp.map((f) => f.name);\n ddefaults = tmp.filter((f) => f.priority >= 0).map((f) => f.name);\n } else {\n allowed = params.allowed;\n ddefaults = params.allowed;\n }\n\n // Prepare excluded fields\n const excluded: string[] = params?.excluded || [];\n\n // Process default fields\n // Use all allowed fields if empty of not set\n const defaults: string[] = params?.defaults || ddefaults;\n\n // Prepare fields status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n let out = [];\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n const filtered = [];\n for (const f of tmp) {\n if (!(!f.enabled && !f.allowed)) {\n filtered.push(f);\n }\n }\n\n const ordered = [];\n const enabled = filtered.filter((f) => f.enabled);\n pos = 0;\n for (const fe of defaults) {\n for (const f of enabled) {\n if (f.name === fe) {\n f.position = pos;\n pos += 10;\n }\n }\n }\n enabled.sort((a, b) => a.position - b.position);\n const disabled = filtered.filter((f) => !f.enabled);\n let ei = 0;\n let di = 0;\n for (let i = 0; i < filtered.length; i++) {\n if (enabled[ei] && disabled[di]) {\n if (enabled[ei].priority > disabled[di].priority) {\n ordered.push(enabled[ei]);\n ei += 1;\n } else {\n ordered.push(disabled[di]);\n di += 1;\n }\n } else if (enabled[ei]) {\n ordered.push(enabled[ei]);\n ei += 1;\n } else {\n ordered.push(disabled[di]);\n di += 1;\n }\n }\n pos = 0;\n for (const f of ordered) {\n f.position = pos;\n pos += 10;\n }\n\n this.__fields = ordered;\n this._update();\n }\n\n private _fields = new ReplaySubject<ModelListField[]>(1);\n\n public get fields(): Observable<ModelListField[]> {\n return this._fields.asObservable();\n }\n\n private _enabled: string[] = [];\n\n public get enabled(): string[] {\n return this._enabled;\n }\n\n private _output = new ReplaySubject<string[]>(1);\n\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Enable a field by name. Position is optional.\n *\n * @param fname : name of field to be enabled\n * @param position : position (optional)\n * @returns current enabled fields\n */\n public enable(fname: string, position?: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = true;\n if (position !== undefined) {\n f.position = position;\n }\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Disable a field by name.\n *\n * @param fname : name of field to be disabled\n * @returns current enabled fields\n */\n public disable(fname: string): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = false;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Move field `fname` before or after (depending on `position`) field `dest`.\n *\n * @param fname field to move\n * @param position (\"before\" or \"after\")\n * @param dest reference field\n * @returns current enabled fields\n */\n public move(\n fname: string,\n position: 'before' | 'after',\n dest: string = ''\n ): string[] {\n const ftarget = this.get(fname);\n if (dest == '') {\n const pos = this._enabled.indexOf(fname);\n dest = this._enabled[pos + (position === 'before' ? -1 : +1)];\n if (dest === undefined) {\n return this._enabled;\n }\n }\n const fdest = this.get(dest);\n // istanbul ignore if\n if (!ftarget || !fdest) {\n console.error('Target / dest not found', fname, dest);\n return this._enabled;\n }\n if (fname == dest) {\n ftarget.position = fdest.position + (position === 'before' ? -15 : +15);\n } else {\n ftarget.position = fdest.position + (position === 'before' ? -5 : +5);\n }\n\n this._update();\n return this._enabled;\n }\n\n /**\n * Check if field with name `fname` is enabled.\n *\n * @param fname : name of field\n * @returns enabled (true) or disabled (false)\n */\n public isEnabled(fname: string): boolean {\n return this._enabled.indexOf(fname) !== -1;\n }\n\n /**\n * Get field by name\n * @param fname : name of field\n * @returns Model list field or null if not found\n */\n public get(fname: string): ModelListField | null {\n for (const f of this.__fields) {\n if (f.name === fname) {\n return f;\n }\n }\n return null;\n }\n\n /**\n * Get field by position\n * @param pos : position of field\n * @returns Model list field or null if not found\n */\n public getAtPos(pos: number): ModelListField | null {\n return this.__fields[pos] || null;\n }\n\n setPosition(fname: any, position: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.position = position;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n private _update() {\n this.__fields.sort((a, b) => a.position - b.position);\n let i = 0;\n for (const f of this.__fields) {\n f.position = i * 10;\n i += 1;\n }\n const out: string[] = [];\n for (const f of this.__fields) {\n if (f.enabled) {\n out.push(f.name);\n }\n }\n this._enabled = out;\n this._output.next(this._enabled);\n this._fields.next(this.__fields);\n }\n}\n","import { IQueryNav } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nexport class ModelListPaginator {\n private _page_size!: number;\n private _page!: number;\n\n constructor(defaults?: IQueryNav) {\n if (!defaults) {\n defaults = { page_size: 20, page: 1 };\n }\n this._page_size = defaults.page_size || 20;\n this._page = defaults.page || 1;\n this._updateOutput('constructor');\n }\n\n private _output = new ReplaySubject<IQueryNav>(1);\n\n public get output(): Observable<IQueryNav> {\n return this._output.asObservable();\n }\n\n public setPage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n this._updateOutput('setPage');\n }\n }\n\n public updatePage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n }\n }\n\n public setPageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n this._updateOutput('setPageSize');\n }\n }\n\n public updatePageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n }\n }\n\n public getPageSize(): number {\n return this._page_size;\n }\n\n public getPage(): number {\n return this._page;\n }\n\n private _updateOutput(from: string = ''): void {\n this._output.next({ page: this._page, page_size: this._page_size });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { SorterDefaults } from '../model-list.service';\n\n// TODO: add an option to limit the number of ordering fields (eg. for tree queries)\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface FieldSortData {\n field: string;\n direction: SortDirection;\n}\n\nexport type SorterData = FieldSortData[];\n\nexport class ModelListSorter {\n private readonly _values: SorterData = [];\n\n /**\n * Create ModelListSorter instance, using defaults.\n * @param defaults defaults sort values, as a list of strings (+field, -field, field)\n */\n constructor(defaults: SorterDefaults = []) {\n this._output = new ReplaySubject(1);\n this._values = [];\n for (const d of defaults) {\n if (d.length < 1) {\n continue;\n }\n if (d[0] == '+') {\n this._values.push({ field: d.substring(1), direction: 'asc' });\n } else if (d[0] == '-') {\n this._values.push({ field: d.substring(1), direction: 'desc' });\n } else {\n this._values.push({ field: d, direction: 'asc' });\n }\n }\n this._updateOutput('constructor');\n }\n\n private _output: ReplaySubject<string[]>;\n\n /**\n * Returns a list of \"+/-field\" sort strings observable.\n * @returns sort strings observable\n */\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Set sorting for `name` key, in direction `direction`.\n * If sorting is already set for `name` key, updates direction without changing order.\n * If sorting isn't set for `name` key, adds it at the end of sorting directions.\n *\n * @param name field name\n * @param direction sort direction\n * @returns model list sorter\n */\n public set(name: string, direction: SortDirection): ModelListSorter {\n for (const v of this._values) {\n if (v.field === name) {\n v.direction = direction;\n this._updateOutput();\n return this;\n }\n }\n this._values.push({ field: name, direction });\n this._updateOutput('set');\n return this;\n }\n\n /**\n * Removes `name` sorting key from current keys.\n *\n * @param name sort key to be removed\n * @returns model list sorter\n */\n public unset(name: string): ModelListSorter {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === name) {\n this._values.splice(i, 1);\n break;\n }\n }\n this._updateOutput('unset');\n return this;\n }\n\n /**\n * Get sorting status for `field` argument.\n * If `field` is not found, returns null.\n *\n * @param field field name\n * @returns ordering direction / null\n */\n public get(field: string): FieldSortData | null {\n for (const v of this._values) {\n if (v.field === field) {\n return v;\n }\n }\n return null;\n }\n\n /**\n * Return all sorter data values.\n *\n * @returns all sorter data values.\n */\n public getAll(): SorterData {\n return this._values;\n }\n\n /**\n * Get the ordering position for `field` argument. If not found, returns -1.\n *\n * @param field field name\n * @returns ordering position for field\n */\n public getOrder(field: string): number {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === field) {\n return i + 1;\n }\n }\n return -1;\n }\n\n private _updateOutput(_from: string = ''): void {\n let out: string[] = [];\n for (const v of this._values) {\n out.push(`${v.direction === 'asc' ? '' : '-'}${v.field}`);\n }\n this._output.next(out);\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FILTER_TYPE } from './filters/filtertypes';\nimport { IDispEditChoice } from '../../dispedit/dispedit/dispedit.constants';\nimport { ModelListFilterGroup } from './model-list-filter-group';\n\nexport interface ModelListFilterParams {\n name: string;\n field: string;\n label?: string;\n help?: string;\n value?: any;\n desc?: any;\n default?: any;\n displayClasses?: string[] | string;\n group?: ModelListFilterGroup;\n}\n\nexport class ModelListFilter implements ModelListFilterParams {\n public name: string;\n public field: string;\n public label: string;\n public help: string;\n public desc?: any;\n public default?: any;\n public type: FILTER_TYPE;\n public allowed: boolean;\n public enabled: boolean;\n public displayClasses?: string[] | string;\n public pristine = true;\n public multi = false;\n public group?: ModelListFilterGroup;\n\n /** Single current value */\n protected _value: IDispEditChoice | null = null;\n /** Multiple current value */\n protected _mvalue = new Map<string, string>();\n /** Single current value observable */\n protected _current = new ReplaySubject<IDispEditChoice | null>(1);\n /** Multiple current value observable */\n protected _mcurrent = new ReplaySubject<IDispEditChoice[]>(1);\n\n constructor(params: ModelListFilterParams) {\n this.name = params.name;\n this.field = params.field;\n this.label = params.label || '';\n this.help = params.help || '';\n this.desc = params.desc;\n this.displayClasses = params.displayClasses;\n this.allowed = false;\n this.enabled = false;\n this.type = 'text';\n this.default = params.default;\n // FIXME: add value init\n }\n\n public get mcurrent$(): Observable<IDispEditChoice[]> {\n return this._mcurrent.asObservable();\n }\n\n public get current$(): Observable<IDispEditChoice | null> {\n return this._current.asObservable();\n }\n\n public get valueChanges(): Observable<\n IDispEditChoice | IDispEditChoice[] | null\n > {\n if (this.multi) {\n return this._mcurrent.asObservable();\n }\n return this._current.asObservable();\n }\n\n public get summary(): string {\n if (this.multi) {\n return Array.from(this._mvalue.values()).join(', ');\n } else {\n return this._value?.desc || '';\n }\n }\n\n public updateFilter(filter: FilterData) {\n if (this.multi && this._mvalue.size > 0) {\n filter[this.field] = this.getMultiValue();\n } else if (\n !this.multi &&\n this._value !== undefined &&\n this._value !== null\n ) {\n filter[this.field] = this.getValue();\n }\n }\n\n public clear(notify: boolean = true) {\n if (this.multi) {\n this._mvalue = new Map<string, string>();\n } else {\n this._value = null;\n }\n this.notify(notify);\n }\n\n public set(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mset(value, desc, notify);\n }\n return this.sset(value, desc, notify);\n }\n\n public unset(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.munset(value, desc, notify);\n }\n return this.sunset(value, desc, notify);\n }\n\n public toggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mtoggle(value, desc, notify);\n }\n return this.stoggle(value, desc, notify);\n }\n\n public getValue(): string | number {\n return `${this._value?.value}`;\n }\n\n public get(): IDispEditChoice | null {\n return this._value;\n }\n\n private mtoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n } else {\n this._mvalue.set(`${value}`, desc);\n }\n this.notify(notify);\n return true;\n }\n\n private mset(value: any, desc: string, notify: boolean = true): boolean {\n if (!this._mvalue.has(`${value}`)) {\n this._mvalue.set(`${value}`, desc);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private munset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private stoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null && this._value.value === value) {\n this._value = null;\n } else {\n this._value = { value, desc };\n }\n this.notify(notify);\n return true;\n }\n\n private sset(value: any, desc: string, notify: boolean = true): boolean {\n if (!(this._value !== null && this._value.value === value)) {\n this._value = { value, desc };\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private sunset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null) {\n this._value = null;\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private getMultiValue(): string | number {\n return Array.from(this._mvalue.keys()).join(',');\n }\n\n private notify(notify: boolean = true) {\n if (notify) {\n if (this.multi) {\n this._mcurrent.next(\n Array.from(this._mvalue.entries()).map(([k, v]) => {\n return { desc: v, value: k };\n }),\n );\n } else {\n this._current.next(this._value);\n }\n }\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FiltersParams } from '../model-list.service';\nimport { ModelListFilter } from './model-list-filter';\nimport { ModelListFilterGroup } from './model-list-filter-group';\n\nexport class ModelListFilters {\n private _enabled$ = new ReplaySubject<ModelListFilter[]>(1);\n private _filters: ModelListFilter[] = [];\n private _output$ = new ReplaySubject<FilterData>(1);\n private _available$ = new ReplaySubject<ModelListFilter[]>(1);\n private _groups$ = new ReplaySubject<ModelListFilterGroup[]>(1);\n\n constructor(params?: FiltersParams) {\n const fwgroups = Array.from(params?.filters || []);\n // Ungroup filters, keeping groups\n const tmp: ModelListFilter[] = [];\n const groups: ModelListFilterGroup[] = [];\n for (const f of fwgroups) {\n if (f instanceof ModelListFilter) {\n tmp.push(f);\n } else {\n groups.push(f);\n for (const ff of f.filters) {\n tmp.push(ff);\n ff.group = f;\n }\n }\n }\n\n // Prepare allowed filters (all filters if not set or empty)\n let allowed: string[] = [];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n for (const f of tmp) {\n allowed.push(f.name);\n }\n } else {\n allowed = params.allowed;\n }\n // Prepare excluded filters\n const excluded: string[] = params?.excluded || [];\n\n // Process default filters\n // Use all allowed filters if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare filters status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n this._filters = tmp;\n this._groups = groups;\n this.update();\n }\n\n private _groups: ModelListFilterGroup[] = [];\n\n public get groups(): Observable<ModelListFilterGroup[]> {\n return this._groups$.asObservable();\n }\n\n private _enabled: ModelListFilter[] = [];\n\n public get enabled(): Observable<ModelListFilter[]> {\n return this._enabled$.asObservable();\n }\n\n private _available: ModelListFilter[] = [];\n\n public get available(): Observable<ModelListFilter[]> {\n return this._available$.asObservable();\n }\n\n public get output(): Observable<FilterData> {\n return this._output$.asObservable();\n }\n\n public update() {\n const filter: FilterData = {};\n for (const f of this._filters) {\n if (f.enabled) {\n f.updateFilter(filter);\n if (this._enabled.indexOf(f) === -1) {\n this._enabled.push(f);\n }\n } else {\n const i = this._enabled.indexOf(f);\n if (i !== -1) {\n this._enabled.splice(i, 1);\n }\n }\n if (f.allowed) {\n if (this._available.indexOf(f) === -1) {\n this._available.push(f);\n }\n } else {\n const i = this._available.indexOf(f);\n if (i !== -1) {\n this._available.splice(i, 1);\n }\n }\n }\n\n for (const g of this._groups) {\n g.enabled = false;\n g.allowed = false;\n for (const f of g.filters) {\n if (!f.enabled && f.allowed) {\n g.enabled = true;\n }\n if (f.allowed) {\n g.allowed = true;\n }\n }\n }\n\n this._output$.next(filter);\n this._enabled$.next(this._enabled);\n this._available$.next(this._available);\n this._groups$.next(\n this._groups\n .filter((g) => g.allowed && g.enabled)\n .sort((a, b) => a.position - b.position),\n );\n }\n}\n","import { jwtDecode } from 'jwt-decode';\n\nexport interface IJwtResponseJson {\n access: string;\n refresh: string;\n}\n\nexport interface IJwtRefreshResponseJson {\n access: string;\n}\n\nexport interface IJwtBaseData {\n // FIXME: check minimal jwt data\n token_type: 'access' | 'refresh';\n user_id: number;\n // exp: number;\n // jti: string;\n}\n\nexport class Jwt<UserJwtData extends IJwtBaseData> {\n public readonly access?: string;\n public readonly refresh?: string;\n private readonly _data: UserJwtData | null = null;\n\n constructor(response?: IJwtResponseJson) {\n if (response) {\n this.access = response.access;\n this._data = Object.freeze(jwtDecode<UserJwtData>(response.access));\n this.refresh = response.refresh;\n } else {\n this._data = null;\n }\n }\n\n public get data(): UserJwtData | null {\n return this._data;\n }\n\n public toJson() {\n return { access: this.access, refresh: this.refresh };\n }\n}\n","import { Inject, InjectionToken } from '@angular/core';\nimport {\n IJwtBaseData,\n IJwtRefreshResponseJson,\n IJwtResponseJson,\n Jwt,\n} from './jwt';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { Observable, of, ReplaySubject, Subject, throwError } from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport { Collection } from '../data/data-collection';\nimport { Router } from '@angular/router';\nimport { DataMessageService } from '../messages/message.service';\n\nexport interface AuthParams {\n tokenUrl: string;\n tokenRefreshUrl: string;\n requestReactivateUrl?: string;\n processReactivateUrl?: string;\n requestPwResetUrl?: string;\n processPwResetUrl?: string;\n loginField: string;\n passwordField: string;\n tokenField: string;\n loginRoute: string[];\n logoutRoute: string[];\n pwresetRoute?: string[];\n reactivateRoute?: string[];\n userFetchFields?: string[];\n userFetchValiditySeconds?: number;\n}\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_AUTH_PARAMS = new InjectionToken<AuthParams>(\n 'data.auth.params'\n);\nexport const DATA_AUTH_USER_SERVICE = new InjectionToken<Collection<any>>(\n 'data.auth.user.service'\n);\n\nexport class AuthServiceBase<\n User extends DataModel,\n UserService extends Collection<User>,\n UserData extends IJwtBaseData\n> {\n public logout$: Subject<void> = new Subject<void>();\n private _user!: User;\n private _user$ = new ReplaySubject<User | null>(1);\n private _token!: Jwt<UserData>;\n private _fetched?: number;\n\n constructor(\n @Inject(DATA_AUTH_USER_SERVICE) public userService: UserService,\n @Inject(DATA_AUTH_PARAMS) private _params: AuthParams,\n private _router: Router,\n private _http: HttpClient,\n private _msgs: DataMessageService\n ) {\n this.autoLogin();\n }\n\n public get isAnonymous(): boolean {\n return !this._token.access;\n }\n\n public get accessToken(): string | null {\n return this._token.access ? this._token.access : null;\n }\n\n public get refreshToken(): string | null {\n return this._token.refresh ? this._token.refresh : null;\n }\n\n public get currentUser(): User | null {\n return this._user && this._user.id ? this._user : null;\n }\n\n public get currentUser$(): Observable<User | null> {\n // Needs refresh ?\n if (this.isAnonymous) {\n return of(null);\n }\n if (\n !this._fetched ||\n Date.now() - this._fetched >\n (this._params.userFetchValiditySeconds || 3600) * 1000\n ) {\n this._fetched = Date.now();\n return this._fetchUser().pipe(\n switchMap(() => {\n return this._user$.asObservable();\n })\n );\n }\n return this._user$.asObservable();\n }\n\n public get refreshUrl(): string {\n return `${this._params.tokenRefreshUrl}`;\n }\n\n public get loginUrl(): string {\n return `${this._params.tokenUrl}`;\n }\n\n public get loginRoute(): string[] {\n return this._params.loginRoute;\n }\n\n public get logoutRoute(): string[] {\n return this._params.logoutRoute;\n }\n\n public get pwresetRoute(): string[] | undefined {\n return this._params.pwresetRoute;\n }\n\n public get reactivateRoute(): string[] | undefined {\n return this._params.reactivateRoute;\n }\n\n public logout(): void {\n localStorage.removeItem('auth');\n\n this._token = new Jwt();\n this._user = this.userService.create();\n this._user$.next(null);\n this.logout$.next();\n }\n\n public autoLogin(): void {\n const localAuth = localStorage.getItem('auth');\n if (!localAuth) {\n return this.logout();\n }\n const {user, fetched, token} = JSON.parse(localAuth);\n this._token = new Jwt(token);\n this._user = this.userService.create(user);\n this._fetched = fetched;\n this._user$.next(this._user);\n }\n\n public login(\n username: string,\n password: string\n ): Observable<'success' | 'error' | 'invalid_token' | string> {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n return this._http.post<IJwtResponseJson>(this.loginUrl, payload).pipe(\n tap((tok) => {\n this._token = new Jwt(tok);\n this.saveAuth();\n }),\n switchMap(() => {\n return this._fetchUser();\n }),\n map(() => 'success'),\n catchError((error: any) => {\n this.logout();\n const code = error.error?.code || error?.code || 'error';\n console.error(code, error);\n return of(code);\n })\n );\n }\n\n public requestReactivate(username: string): Observable<boolean> {\n if (this._params.requestReactivateUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n return this._http\n .post<any>(this._params.requestReactivateUrl, payload)\n .pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public requestPwReset(username: string): Observable<boolean> {\n if (this._params.requestPwResetUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n return this._http.post<any>(this._params.requestPwResetUrl, payload).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public processReactivate(\n username: string,\n token: string\n ): Observable<boolean> {\n if (this._params.processReactivateUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.tokenField] = token;\n return this._http\n .post<any>(this._params.processReactivateUrl, payload)\n .pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public processPwReset(\n username: string,\n password: string,\n token: string\n ): Observable<boolean> {\n if (this._params.processPwResetUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n payload[this._params.tokenField] = token;\n return this._http.post<any>(this._params.processPwResetUrl, payload).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public saveAuth() {\n if (this.isAnonymous) {\n localStorage.removeItem('auth');\n this._user$.next(null);\n } else {\n localStorage.setItem(\n 'auth',\n JSON.stringify({\n user: this._user.toJson(),\n fetched: Date.now(),\n token: this._token.toJson(),\n })\n );\n this._user$.next(this._user);\n }\n }\n\n public refresh(): Observable<IJwtRefreshResponseJson | null> {\n if (!this._token.refresh) {\n this.logout();\n return of(null);\n }\n return this._http\n .post<IJwtRefreshResponseJson>(this.refreshUrl, {\n refresh: this._token.refresh as string,\n })\n .pipe(\n catchError((err, caught) => {\n console.error('Token refresh error', err, caught);\n this.logout();\n this._msgs.warning('Vous devez vous reconnecter');\n this._router.navigate(this._params.loginRoute);\n return of(null);\n }),\n tap((tok) => {\n if (tok) {\n this._token = new Jwt({\n access: tok.access,\n refresh: this._token.refresh!,\n });\n this.saveAuth();\n }\n })\n );\n }\n\n private _fetchUser(): Observable<User> {\n if (this._token.data && this._token.data.user_id) {\n // Fetch user data using token\n return this.userService\n .fetch(this._token.data!.user_id, {\n params: {\n fields: (\n this._params.userFetchFields || [\n 'id',\n 'username',\n 'email',\n 'last_name',\n 'first_name',\n 'is_superuser',\n 'is_active',\n 'is_staff',\n 'last_login',\n 'current_groups_slugs',\n ]\n ).join(','),\n },\n })\n .pipe(\n tap((u) => {\n this._user = u;\n this.saveAuth();\n })\n );\n } else {\n return throwError(() => {\n return {code: 'invalid_token'};\n });\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { AuthServiceBase } from './auth.service';\nimport { catchError, filter, switchMap, take, tap } from 'rxjs/operators';\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { IJwtRefreshResponseJson } from './jwt';\nimport { DATA_API_URL } from '../data/data-parameters';\n\nexport const DATA_AUTH_SERVICE = new InjectionToken<\n AuthServiceBase<any, any, any>\n>('data.auth.service');\n\n/**\n * List of urls that should be intercepted by the auth interceptor, thus receiving the auth token\n * Default : empty list\n */\nexport const DATA_AUTH_URLS = new InjectionToken<string[]>('data.auth.urls');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthInterceptor implements HttpInterceptor {\n private _isRefreshing = false;\n private _refreshTokenSubject =\n new BehaviorSubject<IJwtRefreshResponseJson | null>(null);\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional() @Inject(DATA_AUTH_URLS) private _urls: string[] | null,\n ) {}\n\n /**\n * The auth token in added to the request if :\n * - the request is not anonymous\n * - the request is for the api url, but not for the refresh or login urls\n * - the request is for one of the urls specified in the DATA_AUTH_URLS injection token\n * @param req\n * @param next\n */\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n // If the user is anonymous, we don't add the token\n if (this._auth.isAnonymous) {\n return next.handle(req);\n }\n // If the request is refresh or login url, skip auth\n if (\n req.url.startsWith(this._auth.refreshUrl) ||\n req.url.startsWith(this._auth.loginUrl)\n ) {\n return next.handle(req);\n }\n // If the request is not for the api, and not for one of the urls specified in the\n // DATA_AUTH_URLS injection token, skip auth\n if (\n !req.url.startsWith(this._apiUrl) &&\n !(\n this._urls &&\n this._urls.length > 0 &&\n this._urls.some((url) => req.url.startsWith(url))\n )\n ) {\n return next.handle(req);\n }\n if (!this._auth.isAnonymous) {\n req = this._addToken(req, this._auth.accessToken as string);\n }\n return next.handle(req).pipe(\n catchError((error) => {\n console.log('Catched http error', error);\n if (error instanceof HttpErrorResponse && error.status === 401) {\n console.log('Passing to handle 401');\n return this._handle401Error(req, next);\n } else {\n console.log('throwing error');\n return throwError(error);\n }\n }),\n );\n }\n\n private _handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this._isRefreshing) {\n this._isRefreshing = true;\n this._refreshTokenSubject.next(null);\n console.log('refreshing token');\n return this._auth.refresh().pipe(\n tap((token) => console.log('Refreshed token result', token)),\n switchMap((token) => {\n if (token === null) {\n this._isRefreshing = false;\n return throwError(\n () =>\n new HttpErrorResponse({\n error: 'Forbidden, please log in',\n status: 403,\n statusText: 'Warning',\n url: request.url,\n }),\n );\n } else {\n this._isRefreshing = false;\n this._refreshTokenSubject.next(token);\n return next.handle(this._addToken(request, token.access));\n }\n }),\n );\n } else {\n return this._refreshTokenSubject.pipe(\n filter((token) => token != null),\n take(1),\n switchMap((token) =>\n next.handle(\n this._addToken(request, (token as IJwtRefreshResponseJson).access),\n ),\n ),\n );\n }\n }\n\n private _addToken(request: HttpRequest<any>, token: string) {\n const headers = request.headers.append('Authorization', `Bearer ${token}`);\n return request.clone({ headers });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n combineLatest,\n NEVER,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport {\n IQueryMeta,\n IQueryMetaNavParams,\n IQueryNav,\n Queryset,\n} from '../data/data-query';\nimport { switchMap, tap, throttleTime } from 'rxjs/operators';\nimport { ModelListFields } from './model-list-fields/model-list-fields';\nimport { ModelListPaginator } from './model-list-paginator/model-list-paginator';\nimport { ModelListSorter } from './model-list-sorter/model-list-sorter';\nimport { ModelListFilters } from './model-list-filters/model-list-filters';\nimport { Collection } from '../data/data-collection';\nimport { ModelListFilter } from './model-list-filters/model-list-filter';\nimport { IFieldHeaderMessage } from './model-list-fields/model-list-field-header/messages';\nimport { AuthServiceBase } from '../auth/auth.service';\nimport { DATA_AUTH_SERVICE } from '../auth/auth-interceptor.service';\nimport { ModelListFilterGroup } from './model-list-filters/model-list-filter-group';\n\nexport interface CustomField {\n name: string;\n label: string;\n priority?: number;\n}\n\nexport interface FilterDefaults {\n [index: string]: string | number | undefined;\n}\n\nexport type SorterDefaults = string[];\n\n/**\n * Fields parameters.\n */\nexport interface FieldsParams {\n /** Allowed fields, all model fields are allowed if empty */\n allowed?: string[];\n /** Default enabled fields */\n defaults?: string[];\n /** Excluded fields */\n excluded?: string[];\n /** Custom fields */\n custom?: CustomField[];\n}\n\n/**\n * Filters parameters.\n */\nexport interface FiltersParams {\n /** Allowed filter names */\n allowed?: string[];\n /** Default active filter names */\n defaults?: string[];\n /** Excluded filter names */\n excluded?: string[];\n /** Filters definitions */\n filters?: (ModelListFilter | ModelListFilterGroup)[];\n}\n\nexport type PaginationParams = IQueryMetaNavParams;\n\nexport type IModelListMessage = IFieldHeaderMessage;\n\nexport interface ModelListParams {\n fields?: FieldsParams;\n filters?: FiltersParams;\n filter?: FilterDefaults | Observable<FilterDefaults>;\n sorter?: SorterDefaults;\n paginator?: IQueryNav;\n keep?: boolean;\n reload?: Subject<void | boolean>;\n unsubscribe?: Subject<void>;\n}\n\nexport class ModelList<T extends DataModel> {\n public name!: string;\n public filters!: ModelListFilters;\n public sorter!: ModelListSorter;\n public paginator!: ModelListPaginator;\n public queryset!: Queryset<T>;\n public fields!: ModelListFields<T>;\n public reload!: Subject<void | boolean>;\n public unsubscribe!: Subject<void>;\n public messages$ = new ReplaySubject<IModelListMessage>(1);\n public started = false;\n\n constructor(name: string, collection: Collection<T>) {\n this.name = name;\n this._collection = collection;\n }\n\n private _collection!: Collection<T>;\n\n public get collection(): Collection<T> {\n return this._collection;\n }\n\n private _count: number | null = null;\n\n /**\n * Get current results count (from last meta received).\n */\n public get count(): number | null {\n return this._count;\n }\n\n private _results?: Observable<T[]>;\n\n public get results(): Observable<T[]> {\n if (!this._results) {\n this._results = this.queryset.results.pipe(\n // tap(() => console.log('@solidev/data: modellist result')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._results;\n }\n\n private _meta?: Observable<IQueryMeta>;\n\n public get meta(): Observable<IQueryMeta> {\n if (!this._meta) {\n this._meta = this.queryset.meta.pipe(\n // tap(() => console.log('@solidev/data: modellist meta')),\n tap((m) => (this._count = m.nav.count)),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._meta;\n }\n\n private _loading?: Observable<boolean>;\n\n public get loading(): Observable<boolean> {\n if (!this._loading) {\n this._loading = this.queryset.loading.pipe(\n // tap(() => console.log('@solidev/data: modellist loading')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._loading;\n }\n\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = this.queryset.full.pipe(\n // tap(() => console.log('@solidev/data: modellist full')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._full;\n }\n\n public start(params: ModelListParams) {\n let filter$: Observable<FilterDefaults>;\n let reloadFired = false;\n if (params.filter && !params.filter.subscribe) {\n filter$ = of(params.filter as FilterDefaults);\n } else if (params.filter && params.filter.subscribe) {\n filter$ = params.filter as Observable<FilterDefaults>;\n } else {\n filter$ = of({});\n }\n combineLatest([\n this.reload.pipe(tap((v) => (reloadFired = !!v))),\n this.filters.output,\n filter$,\n this.paginator.output,\n this.sorter.output,\n this.fields.output,\n ])\n .pipe(\n throttleTime(200),\n switchMap(([, filter, manualFilter, paginator, sorter, fields]) => {\n this.queryset\n .filter(filter)\n .filter(manualFilter || {}, true)\n .paginateBy(paginator.page_size)\n .setPage(paginator.page)\n .sort(...sorter)\n .setFields(fields);\n const dbSync = reloadFired;\n reloadFired = false;\n return this.queryset.get(true, dbSync);\n }),\n takeUntil(this.unsubscribe || NEVER),\n )\n .subscribe({\n next: (): void => {\n // console.log('@solidev/data: modellist:get results', this.name);\n },\n error: (error) => {\n console.error(\n '@solidev/data: error while getting model list results : ',\n error,\n );\n },\n complete: () => {\n // console.log('@solidev/data: modellist:completed', this.name);\n this.started = false;\n },\n });\n this.reload.next();\n this.started = true;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelListService {\n private _instances: Map<string, ModelList<any>> = new Map();\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>,\n ) {\n this._auth.logout$.subscribe(() => this.reset());\n }\n\n public reset() {\n for (const i of this._instances.values()) {\n if (i.unsubscribe) {\n console.log('Clearing ', i);\n i.unsubscribe.next();\n }\n }\n this._instances.clear();\n }\n\n public get<T extends DataModel>(\n name: string,\n collection: Collection<T>,\n defaults: ModelListParams,\n ) {\n let ml: ModelList<T>;\n\n if (!name || !this._instances.has(name) || !defaults.keep) {\n ml = new ModelList<T>(name, collection);\n ml.queryset = collection.queryset();\n ml.fields = new ModelListFields(collection, defaults.fields);\n ml.sorter = new ModelListSorter(defaults.sorter || []);\n ml.paginator = new ModelListPaginator(defaults.paginator);\n ml.filters = new ModelListFilters(defaults.filters);\n if (defaults.keep) {\n this._instances.set(name, ml);\n }\n } else {\n ml = this._instances.get(name)!;\n }\n if (!ml.started) {\n if (defaults.reload) {\n ml.reload = defaults.reload;\n } else {\n ml.reload = new Subject<void | boolean>();\n }\n if (defaults.unsubscribe) {\n ml.unsubscribe = defaults.unsubscribe;\n } else {\n ml.unsubscribe = new Subject<void>();\n }\n ml.start(defaults);\n }\n return ml;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelList } from '../../model-list.service';\nimport {\n CDK_DRAG_CONFIG,\n CdkDragDrop,\n DragDropModule,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgbOffcanvas, NgbOffcanvasModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListField } from '../model-list-fields';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\nconst DragConfig = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 10,\n zIndex: 10000,\n};\n\n@Component({\n selector: 'data-model-list-fields-selector',\n templateUrl: './model-list-fields-selector.component.html',\n styleUrls: ['./model-list-fields-selector.component.sass'],\n imports: [\n CommonModule,\n DragDropModule,\n CdkScrollableModule,\n NgbOffcanvasModule,\n ],\n providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }]\n})\nexport class ModelListFieldsSelectorComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @ViewChild('selector', { static: true })\n public ofctpl!: ElementRef<HTMLDivElement>;\n public seeMore: boolean = false;\n\n constructor(private _ofc: NgbOffcanvas) {}\n\n public ngOnInit() {\n if (!this.list || !this.list.fields) {\n throw new Error('Missing list / fields');\n }\n }\n\n public open() {\n this._ofc.open(this.ofctpl);\n }\n\n drop($event: CdkDragDrop<T, any>) {\n let pos = $event.currentIndex * 10;\n if ($event.currentIndex > $event.previousIndex) {\n pos += 1;\n } else {\n pos -= 1;\n }\n this.list.fields.setPosition($event.item.data, pos);\n }\n\n public toggle(f: ModelListField) {\n if (f.enabled) {\n this.list.fields.disable(f.name);\n } else {\n this.list.fields.enable(f.name);\n }\n }\n}\n","<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\" aria-label=\"Choix des champs\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <ng-container *ngIf=\"seeMore || f.priority &gt;= 0\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\" [attr.arial-label]=\"f.label\" role=\"button\">{{f.label}}<span class=\"badge bg-info\"> {{f.priority}}</span></div>\n </ng-container>\n </ng-container>\n </div>\n <button class=\"btn btn-sm btn-link\" (click)=\"seeMore=!seeMore\">plus de champs</button>\n </div>\n</ng-template>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-model-list-sorter',\n templateUrl: './model-list-sorter.component.html',\n styleUrls: ['./model-list-sorter.component.sass'],\n imports: [CommonModule]\n})\nexport class ModelListSorterComponent {\n /**\n * ModelList reference.\n */\n @Input() public list!: ModelList<any>;\n /**\n * Sort field name.\n */\n @Input() public field!: string;\n\n constructor() {}\n\n public isUp(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'asc';\n }\n return false;\n }\n\n public isDown(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'desc';\n }\n return false;\n }\n\n public setUp(): void {\n this.list.sorter.set(this.field, 'asc');\n }\n\n public setDown(): void {\n this.list.sorter.set(this.field, 'desc');\n }\n\n public getCount(): number {\n return this.list.sorter.get(this.field)\n ? this.list.sorter.getAll().length\n : 0;\n }\n\n public getOrder(): number {\n return this.list.sorter.getOrder(this.field);\n }\n\n public cancel(): void {\n this.list.sorter.unset(this.field);\n }\n}\n","<span class=\"dirs\"><span *ngIf=\"getOrder()&gt;=0 || getCount()&gt;1\" (click)=\"cancel()\" role=\"button\"><span class=\"count\" *ngIf=\"getCount()&gt;1\"> {{getOrder()}}</span><span class=\"bi bi-x\"></span></span><span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n<ng-content></ng-content>","import {\n Component,\n DestroyRef,\n inject,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelListField } from '../model-list-fields';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListSorterComponent } from '../../model-list-sorter/model-list-sorter/model-list-sorter.component';\nimport { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-field-header',\n templateUrl: './model-list-field-header.component.html',\n styleUrls: ['./model-list-field-header.component.sass'],\n imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent]\n})\nexport class ModelListFieldHeaderComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public field!: string;\n @Input() public sort?: boolean = false;\n @Input() public sortField?: string;\n @Input() public menuMode: 'hide' | 'side' | 'click' = 'side';\n @Input() public sortMode: 'hide' | 'side' | 'click' = 'side';\n @Input() public display?: boolean;\n\n @ViewChild('mnu', { static: false }) public mnu?: NgbDropdown;\n public dispMenuMode = this.menuMode;\n public dispSortMode = this.sortMode;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit() {\n this.list.messages$\n .pipe(\n takeUntilDestroyed(this.destroy$),\n filter((m) => m.dest === 'header'),\n )\n .subscribe((m) => {\n this.dispMenuMode =\n m.menu && m.menu !== 'default' ? m.menu : this.menuMode;\n this.dispSortMode =\n m.sort && m.sort !== 'default' ? m.sort : this.sortMode;\n this.display = m.show !== undefined ? m.show : this.display;\n });\n }\n\n public disable() {\n this.list.fields.disable(this.field);\n }\n\n public enable(f: ModelListField) {\n this.list.fields.move(f.name, 'after', this.field);\n this.list.fields.enable(f.name);\n }\n}\n","\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between align-items-end slabel\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort &amp;&amp; dispSortMode==='side'\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort || dispSortMode==='hide'\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\" [attr.aria-label]=\"'Gestion champs'\" *ngIf=\"dispMenuMode==='side'\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\" aria-label=\"Déplacer vers la gauche\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\" [container]=\"'body'\"><i class=\"bi bi-record\" ngbDropdownToggle aria-label=\"Ouvrir la boite de dialogue des champs\" role=\"button\"></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne après</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed &amp;&amp; !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\" [attr.aria-label]=\"f.label||f.name\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\" aria-label=\"Déplacer vers la droite\"></i>\n </div>\n</div>","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { ModelListFilter } from '../model-list-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-filters-select',\n templateUrl: './model-list-filters-select.component.html',\n styleUrls: ['./model-list-filters-select.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListFiltersSelectComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemActiveClasses: string[] | string =\n 'badge bg-success mx-1';\n @Input() public itemInactiveClasses: string[] | string =\n 'badge bg-secondary mx-1';\n @Input() public mode: 'select' | 'badge' | 'badge_summary' = 'badge';\n\n public selectForm = new FormControl<ModelListFilter | null>(null);\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public toggle(f: ModelListFilter) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n }\n\n public ngOnInit() {\n if (this.mode === 'select') {\n this.selectForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((f) => {\n if (f) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n this.selectForm.setValue(null, { emitEvent: false });\n }\n });\n }\n }\n}\n","\n<ng-container *ngIf=\"mode==='badge'\"><span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span><span *ngIf=\"!f.enabled\" role=\"button\" [ngClass]=\"itemInactiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span></span></ng-container>\n<ng-container *ngIf=\"mode==='badge_summary'\"><span *ngFor=\"let f of list.filters.available|async\" (click)=\"toggle(f)\" [ngClass]=\"containerClasses\"><span *ngIf=\"f.enabled\" role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}} : {{f.summary||'...'}}</span></span></span></ng-container>\n<ng-container *ngIf=\"mode==='select'\">\n <select class=\"form-select\" [formControl]=\"selectForm\">\n <option [ngValue]=\"null\">-- Ajouter un filtre --</option>\n <ng-container *ngFor=\"let f of list.filters.available|async\">\n <ng-container *ngIf=\"!f.enabled &amp;&amp; !f.group\">\n <option [ngValue]=\"f\">{{f.label}}</option>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let g of list.filters.groups|async\">\n <optgroup [label]=\"g.label\">\n <ng-container *ngFor=\"let f of g.filters\">\n <ng-container *ngIf=\"!f.enabled &amp;&amp; f.allowed\">\n <option [ngValue]=\"f\">{{f.label}}</option>\n </ng-container>\n </ng-container>\n </optgroup>\n </ng-container>\n </select>\n</ng-container>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListTextFilter } from './model-list-text-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-text-filter',\n templateUrl: './model-list-text-filter.component.html',\n styleUrls: ['./model-list-text-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListTextFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTextFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | null>(null);\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val || '')) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListAutocompleteFilter } from './model-list-autocomplete-filter';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\nimport { DataModel } from '../../../../data/data-model';\nimport { debounceTime, distinctUntilChanged, Observable } from 'rxjs';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-autocomplete-filter',\n templateUrl: './model-list-autocomplete-filter.component.html',\n styleUrls: ['./model-list-autocomplete-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListAutocompleteFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListAutocompleteFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n protected _resetAfterSet = false;\n private _tpl!: TplFun<T>;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit(): void {\n this._setDisplay();\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (val) {\n console.log('value changed', val, this._display(val));\n if (this.filter.set(val.id, this._display(val))) {\n this.list.filters.update();\n if (this._resetAfterSet) {\n this.fc.setValue(null);\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active',\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private _setDisplay() {\n if (this.filter.display) {\n if (this.filter.display && typeof this.filter.display === 'string') {\n this._tpl = (model: T) =>\n `${(model as any)[this.filter.display as string]}`;\n } else if (\n this.filter.display &&\n typeof this.filter.display === 'function'\n ) {\n this._tpl = this.filter.display.bind(this);\n }\n } else {\n this._tpl = (model: T) => {\n if ((model as any)._display) {\n return (model as any)._display;\n } else {\n return `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n };\n }\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n return this._tpl(x);\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<T[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n // Generate filter\n for (const k of Object.keys(this.filter.filter)) {\n if (\n this.filter.filter[k] !== null ||\n this.filter.filter[k] !== undefined\n ) {\n f[k] = this.filter.filter[k];\n }\n }\n // Add search param\n f[this.filter.searchparam] = term;\n // Update queryset filter\n this.filter.queryset?.filter(f);\n // Launch queryset\n return this.filter.queryset.get();\n }),\n takeUntilDestroyed(this.destroy$),\n );\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelListAutocompleteMultiFilter } from './model-list-autocomplete-multi-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { ModelListAutocompleteFilterComponent } from '../model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-autocomplete-multi-filter',\n templateUrl: './model-list-autocomplete-multi-filter.component.html',\n styleUrls: ['./model-list-autocomplete-multi-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListAutocompleteMultiFilterComponent<\n T extends DataModel\n> extends ModelListAutocompleteFilterComponent<T> {\n @Input() public override filter!: ModelListAutocompleteMultiFilter<T>;\n protected override _resetAfterSet = true;\n\n public unset(value: any, desc: string) {\n this.filter.unset(value, desc);\n this.list.filters.update();\n this.fc.setValue(null);\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimeFilter } from './model-list-datetime-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-datetime-filter',\n templateUrl: './model-list-datetime-filter.component.html',\n styleUrls: ['./model-list-datetime-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListDatetimeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimeFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"datetime-local\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimerangeFilter } from './model-list-datetimerange-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { combineLatest } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-datetime-range-filter',\n templateUrl: './model-list-datetime-range-filter.component.html',\n styleUrls: ['./model-list-datetime-range-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListDatetimeRangeFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimerangeFilter;\n @Input() public classes: string[] | string = '';\n public fc1 = new FormControl();\n public fc2 = new FormControl();\n\n constructor() {}\n\n ngOnInit(): void {\n this.filter.valueChanges.subscribe((val) => {\n // If value is not an array, return\n if (val && !Array.isArray(val)) {\n const [v1, v2] = val.value.split('--');\n this.fc1.setValue(v1, { emitEvent: false });\n this.fc2.setValue(v2, { emitEvent: false });\n }\n });\n\n combineLatest([this.fc1.valueChanges, this.fc2.valueChanges]).subscribe(\n ([val1, val2]) => {\n if (val1 && val2) {\n if (this.filter.set(`${val1}--${val2}`, `${val1}--${val2}`)) {\n this.list.filters.update();\n }\n }\n },\n );\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control form-control-sm mb-1\" type=\"datetime-local\" [formControl]=\"fc1\" [placeholder]=\"filter.help\">\n <input class=\"form-control form-control-sm\" type=\"datetime-local\" [formControl]=\"fc2\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport {\n GetFlagsResult,\n ModelListFlagsFilter,\n} from './model-list-flags-filter';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../../../data/data-model';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime, Observable } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-flags-filter',\n templateUrl: './model-list-flags-filter.component.html',\n styleUrls: ['./model-list-flags-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListFlagsFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListFlagsFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | null>(null);\n public flags$!: Observable<GetFlagsResult>;\n\n constructor() {}\n\n public ngOnInit() {\n console.log(this.filter);\n if (this.filter.collection && this.filter.action) {\n this.flags$ = this.filter.collection.action<GetFlagsResult>(\n null,\n 'GET',\n this.filter.action\n );\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (val !== null) {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n this.fc.setValue(null, { emitEvent: false });\n }\n }\n });\n }\n }\n\n public unset(value: any, desc: string) {\n this.fc.setValue(null);\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of flags$|async\" [ngValue]=\"c.flag\">{{c.flag}} ({{c.count}})</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport {\n GeoSearchResult,\n ModelListGeodistanceFilter,\n} from './model-list-geodistance-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n} from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-geodistance-filter',\n templateUrl: './model-list-geodistance-filter.component.html',\n styleUrls: ['./model-list-geodistance-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListGeodistanceFilterComponent implements OnInit, OnDestroy {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListGeodistanceFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n public fd = new FormControl('');\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n private _subscription = new Subject<void>();\n\n constructor() {}\n\n public ngOnInit(): void {\n const address = this.fc.valueChanges.pipe(\n debounceTime(250),\n filter((val) => !!val)\n );\n const distance = this.fd.valueChanges.pipe(filter((d) => !!d));\n combineLatest([address, distance]).subscribe(([val, dist]) => {\n if (this.filter.set(`${dist},${val.lng},${val.lat}`, val.label)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n private _display(x: GeoSearchResult): any {\n return `${x.label}`;\n }\n\n private _search(text$: Observable<string>): Observable<GeoSearchResult[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => this.filter.geolocator(term))\n );\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active'\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"row g-1\">\n <div class=\"col-4\">\n <select class=\"form-select\" [formControl]=\"fd\">\n <option value=\"\">Distance</option>\n <option value=\"lte,10\">< 10 km</option>\n <option value=\"lte,20\">< 20 km</option>\n <option value=\"lte,30\">< 30 km</option>\n <option value=\"lte,50\">< 50 km</option>\n <option value=\"lte,80\">< 80 km</option>\n <option value=\"lte,100\">< 100 km</option>\n <option value=\"lte,150\">< 150 km</option>\n <option value=\"lte,200\">< 200 km</option>\n <option value=\"lte,250\">< 250 km</option>\n <option value=\"lte,300\">< 300 km</option>\n <option value=\"lte,500\">< 500 km</option>\n <option value=\"lte,1000\">< 1000 km</option>\n </select>\n </div>\n <div class=\"col-8\">\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n </div>\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectFilter } from './model-list-select-filter';\nimport { combineLatest, debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-select-filter',\n templateUrl: './model-list-select-filter.component.html',\n styleUrls: ['./model-list-select-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListSelectFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | number | null>(null);\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val ? (val as IDispEditChoice).value : null, {\n emitEvent: false,\n });\n });\n\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n if (val === null) {\n this.filter.clear();\n this.list.filters.update();\n } else {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectMultiFilter } from './model-list-select-multi-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { combineLatest, debounceTime } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-select-multi-filter',\n templateUrl: './model-list-select-multi-filter.component.html',\n styleUrls: ['./model-list-select-multi-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListSelectMultiFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectMultiFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl(null);\n\n constructor() {}\n\n public ngOnInit() {\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n this.fc.setValue(null, { emitEvent: false });\n });\n }\n\n public unset(value: any, desc: string) {\n this.fc.setValue(null);\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n <option *ngFor=\"let c of filter.choices|async\" [ngValue]=\"c.value\">{{c.desc}}</option>\n </select>\n <div class=\"enabled mt-1\">\n <div *ngFor=\"let e of filter.mcurrent$|async\"><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListTreeFilter } from './model-list-tree-filter';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../../../data/data-model';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime, firstValueFrom, Subject, Subscription } from 'rxjs';\nimport { FilterData, Queryset } from '../../../../data/data-query';\n\nclass Level<T extends DataModel> {\n public level: number;\n public tree: Tree<T>;\n public choices: { value: number; desc: string }[];\n public fc: FormControl;\n public selected!: number;\n public subs: Subscription;\n\n constructor(\n tree: Tree<T>,\n level: number,\n choices: { value: number; desc: string }[]\n ) {\n this.tree = tree;\n this.level = level;\n this.fc = new FormControl('');\n this.choices = choices;\n this.subs = this.fc.valueChanges.subscribe((val) => {\n if (this.selected !== val) {\n this.selected = val;\n this.tree.updated(this);\n }\n });\n }\n\n public close() {\n this.subs.unsubscribe();\n }\n}\n\nclass Tree<T extends DataModel> {\n levels: Level<T>[] = [];\n changed: Subject<number | null> = new Subject<number | null>();\n\n constructor(\n private qs: Queryset<T>,\n private maxLevel: number,\n private display: any,\n private filter: FilterData\n ) {}\n\n /**\n * Conditionnaly add level to current tree.\n *\n * - if previous level have non-empty selected value\n * - if current level choices are non empty\n */\n public async addLevel(fparent?: number): Promise<Level<T> | null> {\n let values: T[] = [];\n if (this.levels.length === 0) {\n values = await firstValueFrom(\n this.qs\n .filter({ level: this.levels.length, parent: 'null', ...this.filter })\n .get()\n );\n } else {\n const parent = fparent\n ? fparent\n : this.levels[this.levels.length - 1].selected;\n if (parent) {\n values = await firstValueFrom(\n this.qs\n .filter({\n level: this.levels.length,\n parent: this.levels[this.levels.length - 1].selected || 'null',\n ...this.filter,\n })\n .get()\n );\n }\n }\n if (values.length > 0) {\n const level = new Level(this, this.levels.length, []);\n for (const v of values) {\n level.choices.push({ value: v.id as number, desc: this.display(v) });\n }\n this.levels.push(level);\n return level;\n }\n return null;\n }\n\n public updated(level: Level<T>) {\n const newLevels: Level<T>[] = [];\n for (const l of this.levels) {\n if (l.level <= level.level) {\n newLevels.push(l);\n } else if (l.level > level.level) {\n l.close();\n }\n }\n this.levels = newLevels;\n this.addLevel();\n if (level.selected) {\n this.changed.next(level.selected);\n } else {\n this.changed.next(this.levels[level.level - 1]?.selected || null);\n }\n }\n\n public async prepare(value: number) {\n // console.log('prepare', value);\n const levels: T[] = [];\n let cur = (\n await firstValueFrom(this.qs.filter({ id: value, ...this.filter }).get())\n )[0];\n levels.push(cur);\n let nlev = 0;\n while ((cur as any).parent !== null) {\n cur = (\n await firstValueFrom(\n this.qs\n .filter({\n id: (cur as any).parent,\n ...this.filter,\n })\n .get()\n )\n )[0];\n levels.push(cur);\n nlev++;\n if (nlev > this.maxLevel) {\n throw Error('Max level error, could not find root');\n }\n }\n for (let i = levels.length - 1; i >= 0; i--) {\n const lv = await this.addLevel();\n if (lv !== null) {\n lv.selected = levels[i].id as number;\n lv.fc.setValue(levels[i].id as number, { emitEvent: false });\n }\n }\n if (this.levels.length <= this.maxLevel) {\n await this.addLevel();\n }\n }\n\n public reset() {}\n}\n\n@Component({\n selector: 'data-model-list-tree-filter',\n templateUrl: './model-list-tree-filter.component.html',\n styleUrls: ['./model-list-tree-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListTreeFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTreeFilter<T>;\n @Input() public classes: string[] | string = '';\n public tree!: Tree<T>;\n\n constructor() {}\n\n public async ngOnInit() {\n this.tree = new Tree(\n this.filter.queryset,\n this.filter.maxLevel,\n this.filter.display,\n this.filter.filter\n );\n if (this.filter.get()) {\n await this.tree.prepare(this.filter.get()?.value as number);\n } else {\n await this.tree.addLevel();\n }\n\n this.tree.changed.pipe(debounceTime(250)).subscribe((val) => {\n // console.log('changed', val);\n if (val === null) {\n this.filter.clear();\n this.list.filters.update();\n } else {\n if (this.filter.set(val, '')) {\n this.list.filters.update();\n }\n }\n });\n\n // this.tree.changed.subscribe((selected) => {\n // console.log('tree changed', selected);\n // this.filter.set(selected, '');\n // });\n // if (this.filter.getValue()) {\n // console.log('filter value', this.filter.getValue());\n // await this.tree.prepare(this.filter.getValue() as number);\n // } else {\n // await this.tree.addLevel();\n // }\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"levelselect\" *ngFor=\"let l of tree.levels\">\n <select class=\"form-select form-select-sm\" [formControl]=\"l.fc\">\n <option value=\"\">{{filter.help}}</option>\n <option *ngFor=\"let ch of l.choices\" [value]=\"ch.value\">{{ch.desc}}</option>\n </select>\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListNumberFilter } from './model-list-number-filter';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-number-filter',\n templateUrl: './model-list-number-filter.component.html',\n styleUrls: ['./model-list-number-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule, NgbDropdownModule]\n})\nexport class ModelListNumberFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListNumberFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as any).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n selectOp(eq: string) {\n this.filter.setOperator(eq);\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n <button ngbDropdownItem *ngFor=\"let op of filter.operations\" (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDateFilter } from './model-list-date-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-date-filter',\n templateUrl: './model-list-date-filter.component.html',\n styleUrls: ['./model-list-date-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListDateFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDateFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"date\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\nimport { ModelListTextFilterComponent } from '../filters/model-list-text-filter/model-list-text-filter.component';\nimport { ModelListAutocompleteFilterComponent } from '../filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { ModelListAutocompleteMultiFilterComponent } from '../filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component';\nimport { ModelListDatetimeFilterComponent } from '../filters/model-list-datetime-filter/model-list-datetime-filter.component';\nimport { ModelListDatetimeRangeFilterComponent } from '../filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component';\nimport { ModelListFlagsFilterComponent } from '../filters/model-list-flags-filter/model-list-flags-filter.component';\nimport { ModelListGeodistanceFilterComponent } from '../filters/model-list-geodistance-filter/model-list-geodistance-filter.component';\nimport { ModelListSelectFilterComponent } from '../filters/model-list-select-filter/model-list-select-filter.component';\nimport { ModelListSelectMultiFilterComponent } from '../filters/model-list-select-multi-filter/model-list-select-multi-filter.component';\nimport { ModelListTreeFilterComponent } from '../filters/model-list-tree-filter/model-list-tree-filter.component';\nimport { ModelListNumberFilterComponent } from '../filters/model-list-number-filter/model-list-number-filter.component';\nimport { ModelListDateFilterComponent } from '../filters/model-list-date-filter/model-list-date-filter.component';\n\n// SEE: register filter components and load them dynamically to allow user defined filters\n\n@Component({\n selector: 'data-model-list-filters',\n templateUrl: './model-list-filters.component.html',\n styleUrls: ['./model-list-filters.component.sass'],\n imports: [\n CommonModule,\n ModelListTextFilterComponent,\n ModelListNumberFilterComponent,\n ModelListAutocompleteFilterComponent,\n ModelListAutocompleteMultiFilterComponent,\n ModelListDatetimeFilterComponent,\n ModelListDateFilterComponent,\n ModelListDatetimeRangeFilterComponent,\n ModelListFlagsFilterComponent,\n ModelListGeodistanceFilterComponent,\n ModelListSelectFilterComponent,\n ModelListSelectMultiFilterComponent,\n ModelListTreeFilterComponent,\n ]\n})\nexport class ModelListFiltersComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemClasses: string[] | string = '';\n}\n","\n<div [ngClass]=\"containerClasses\">\n <ng-container *ngFor=\"let f of list.filters.enabled|async\">\n <ng-container [ngSwitch]=\"f.type\">\n <data-model-list-autocomplete-filter *ngSwitchCase=\"'autocomplete'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-filter>\n <data-model-list-autocomplete-multi-filter *ngSwitchCase=\"'autocompletemulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-multi-filter>\n <data-model-list-datetime-filter *ngSwitchCase=\"'datetime'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-filter>\n <data-model-list-date-filter *ngSwitchCase=\"'date'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-date-filter>\n <data-model-list-datetime-range-filter *ngSwitchCase=\"'datetimerange'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-range-filter>\n <data-model-list-flags-filter *ngSwitchCase=\"'flags'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-flags-filter>\n <data-model-list-geodistance-filter *ngSwitchCase=\"'geodistance'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-geodistance-filter>\n <data-model-list-number-filter *ngSwitchCase=\"'number'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-number-filter>\n <data-model-list-select-filter *ngSwitchCase=\"'select'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-filter>\n <data-model-list-select-multi-filter *ngSwitchCase=\"'selectmulti'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-multi-filter>\n <data-model-list-text-filter *ngSwitchCase=\"'text'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-text-filter>\n <data-model-list-tree-filter *ngSwitchCase=\"'tree'\" [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-tree-filter>\n </ng-container>\n </ng-container>\n</div>","import { ModelListFilter } from './model-list-filter';\n\nexport class ModelListFilterGroup {\n public name: string = '';\n public label: string = '';\n public desc: string = '';\n public position: number = 0;\n public allowed: boolean = true;\n public enabled: boolean = true;\n public filters: ModelListFilter[] = [];\n\n constructor(params: Partial<ModelListFilterGroup>) {\n this.name = params.name || '';\n this.label = params.label || '';\n this.desc = params.desc || '';\n this.position = params.position || 0;\n this.allowed = params.allowed || true;\n this.enabled = params.enabled || true;\n this.filters = params.filters || [];\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { Collection } from '../../../../data/data-collection';\nimport { FilterData, Queryset } from '../../../../data/data-query';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\n\nexport interface ModelListAutocompleteParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n queryset?: Queryset<T>;\n searchparam?: string;\n display?: string | TplFun<T>;\n filter?: FilterData;\n scroll?: boolean;\n}\n\nexport class ModelListAutocompleteFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListAutocompleteParams<T>\n{\n public display?: string | TplFun<T>;\n public searchparam!: string;\n public queryset!: Queryset<T>;\n public collection?: Collection<T>;\n public filter!: FilterData;\n public scroll!: boolean;\n\n constructor(params: ModelListAutocompleteParams<T>) {\n super(params);\n this.type = 'autocomplete';\n this.display = params.display;\n this.searchparam = params.searchparam ? params.searchparam : 'search';\n if (!params.collection && !params.queryset) {\n throw 'Missing related data (collection or queryset)';\n }\n this.collection = params.collection;\n if (params.collection && !params.queryset) {\n this.queryset = params.collection.queryset();\n } else {\n this.queryset = params.queryset as Queryset<T>;\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n this.filter = params.filter || {};\n\n if (this.label == '') {\n this.label = 'Sélectionnez par texte';\n }\n if (this.help == '') {\n this.help = 'Recherche par texte';\n }\n }\n}\n","import {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListAutocompleteMultiParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {}\n\nexport class ModelListAutocompleteMultiFilter<\n T extends DataModel\n> extends ModelListAutocompleteFilter<T> {\n public override multi = true;\n\n constructor(params: ModelListAutocompleteMultiParams<T>) {\n super(params as ModelListAutocompleteParams<T>);\n this.type = 'autocompletemulti';\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetime\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure cible\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\n\nexport class ModelListDateFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = 'date';\n if (this.label == '') {\n this.label = 'Sélectionnez par date';\n }\n if (this.help == '') {\n this.help = 'Date cible';\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimerangeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetimerange\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par intervalle de date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { Collection } from '../../../../data/data-collection';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListFlagsFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n action?: string;\n}\n\nexport type GetFlagsResult = { flag: string; count: number }[];\n\nexport class ModelListFlagsFilter<T extends DataModel> extends ModelListFilter {\n public collection!: Collection<T>;\n public action: string = 'get_flags';\n public override multi = true;\n\n constructor(params: ModelListFlagsFilterParams<T>) {\n super(params);\n this.type = 'flags';\n if (this.label == '') {\n this.label = 'Sélectionnez par étiquette';\n }\n if (this.help == '') {\n this.help = \"Nom de l'étiquette\";\n }\n if (!params.collection) {\n throw 'Missing collection for flags filter';\n }\n this.collection = params.collection;\n if (params.action) {\n this.action = params.action;\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { Observable } from 'rxjs';\n\nexport interface GeoSearchResult {\n score: number;\n label: string;\n lat: number;\n lng: number;\n}\n\nexport interface ModelListGeodistanceFilterParams\n extends ModelListFilterParams {\n geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n geomap?: (pos: [number, number], dist: number) => string;\n scroll?: boolean;\n}\n\nexport class ModelListGeodistanceFilter\n extends ModelListFilter\n implements ModelListGeodistanceFilterParams\n{\n public geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n public scroll!: boolean;\n\n constructor(params: ModelListGeodistanceFilterParams) {\n super(params);\n\n this.type = 'geodistance';\n this.geolocator = params.geolocator;\n if (this.label == '') {\n this.label = \"Par distance autour d'un point\";\n }\n if (this.help == '') {\n this.help = 'Ville & distance';\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { FilterData } from '../../../../data/data-query';\n\ninterface OperationDescriptor {\n name: string;\n label: string;\n operator: string;\n}\n\nexport const ModelListNumberOperations: OperationDescriptor[] = [\n { name: 'eq', label: '= (égal)', operator: '' },\n { name: 'lt', label: '< (inférieur)', operator: '_lt' },\n { name: 'gt', label: '> (supérieur)', operator: '_gt' },\n { name: 'lte', label: '<= (inférieur ou égal)', operator: '_lte' },\n { name: 'gte', label: '>= (supérieur ou égal)', operator: '_gte' },\n];\n\nexport interface ModelListNumberFilterParams extends ModelListFilterParams {\n operations?: string[];\n}\n\nexport class ModelListNumberFilter extends ModelListFilter {\n public operator = ModelListNumberOperations[0];\n public operations = ModelListNumberOperations;\n\n constructor(params: ModelListNumberFilterParams) {\n super(params as ModelListFilterParams);\n this.type = 'number';\n if (this.label == '') {\n this.label = 'Recherche par valeur';\n }\n if (this.help == '') {\n this.help = 'Valeur à rechercher';\n }\n const ops: OperationDescriptor[] = [];\n if (params.operations && params.operations.length > 0) {\n for (const op of params.operations) {\n for (const dop of this.operations) {\n if (op === dop.name) {\n ops.push(dop);\n }\n }\n }\n if (ops.length > 0) {\n this.operations = ops;\n this.operator = ops[0];\n }\n }\n }\n\n public setOperator(op: string) {\n for (let o of this.operations) {\n if (op === o.operator) {\n this.operator = o;\n }\n }\n }\n\n public override updateFilter(filter: FilterData): void {\n if (this._value !== undefined && this._value !== null) {\n filter[`${this.field}${this.operator.operator}`] = this.getValue();\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { DataModel } from '../../../../data/data-model';\nimport { DataModelType } from '../../../../data/data-collection';\nimport { isObservable, Observable, of } from 'rxjs';\n\nexport interface ModelListSelectFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n choices?: IDispEditChoice[] | Observable<IDispEditChoice[]>;\n model?: DataModelType<T>;\n mfield?: string;\n}\n\nexport class ModelListSelectFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListSelectFilterParams<T>\n{\n public choices!: Observable<IDispEditChoice[]>;\n public model?: DataModelType<T>;\n public mfield?: string;\n\n constructor(params: ModelListSelectFilterParams<T>) {\n super(params);\n this.type = 'select';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante';\n }\n if (!params.choices && !params.model) {\n throw 'Missing choices for select filter';\n }\n if (!params.choices && params.model) {\n const m = new params.model();\n const f = m.FM(params.mfield || params.field);\n const ch = (f as any).choices;\n if (!ch) {\n throw 'No choices found for model/field';\n }\n this.choices = of(ch);\n } else {\n if (!isObservable(params.choices)) {\n this.choices = of(params.choices as IDispEditChoice[]);\n } else {\n this.choices = params.choices;\n }\n }\n // Set default only for cur type\n if (this.default && this.type == 'select') {\n this.set(this.default, '', true);\n }\n }\n\n public setDefault() {}\n}\n","import {\n ModelListSelectFilter,\n ModelListSelectFilterParams,\n} from '../model-list-select-filter/model-list-select-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\nexport interface ModelListMultiSelectFilterParams<T extends DataModel>\n extends ModelListSelectFilterParams<T> {\n default?: IDispEditChoice[];\n}\n\nexport class ModelListSelectMultiFilter<\n T extends DataModel\n> extends ModelListSelectFilter<T> {\n public override multi = true;\n public override default?: IDispEditChoice[];\n\n constructor(params: ModelListMultiSelectFilterParams<T>) {\n super(params);\n\n this.type = 'selectmulti';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante (multiple)';\n }\n // Set default only for cur type\n if (this.default && this.type == 'selectmulti') {\n for (const f of this.default) {\n this.set(f.value, f.desc, true);\n }\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\n\nexport class ModelListTextFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = 'text';\n if (this.label == '') {\n this.label = 'Recherche par texte';\n }\n if (this.help == '') {\n this.help = 'Texte à rechercher';\n }\n if (this.default) {\n this.set(this.default, '', true);\n }\n }\n}\n","import { DataModel } from '../../../../data/data-model';\nimport {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\n\nexport interface ModelListTreeParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {\n maxLevel?: number;\n}\n\nexport class ModelListTreeFilter<T extends DataModel>\n extends ModelListAutocompleteFilter<T>\n implements ModelListTreeParams<T>\n{\n public maxLevel: number = 5;\n\n constructor(params: ModelListTreeParams<T>) {\n super(params);\n this.type = 'tree';\n if (this.label == '') {\n this.label = 'Sélectionnez dans la hiérarchie';\n }\n if (this.help == '') {\n this.help = 'Texte à rechercher';\n }\n if (params.maxLevel) {\n this.maxLevel = params.maxLevel;\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { GeoSearchResult } from '../model-list-geodistance-filter';\n\nexport interface BanResults {\n type: 'FeatureCollection';\n version: string;\n features: {\n type: 'Feature';\n geometry: {\n type: 'Point';\n coordinates: [number, number];\n };\n properties: {\n label: string;\n score: number;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n x: number;\n y: number;\n population: number;\n city: string;\n context: string;\n importance: number;\n };\n }[];\n}\n\nexport class BanAdapter {\n constructor(private _http: HttpClient, private _baseUrl: string) {}\n\n public search(text: string): Observable<GeoSearchResult[]> {\n return this._http\n .get<BanResults>(`${this._baseUrl}`, { params: { q: text } })\n .pipe(\n map((r) => {\n const out: GeoSearchResult[] = [];\n for (const f of r.features) {\n out.push({\n score: f.properties.score,\n label: `${f.properties.label} (${f.properties.context})`,\n lat: f.geometry.coordinates[1],\n lng: f.geometry.coordinates[0],\n });\n }\n return out;\n })\n );\n }\n}\n","import { Component, DestroyRef, inject, Input, OnChanges } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../../data/data-model';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-paginator',\n templateUrl: './model-list-paginator.component.html',\n styleUrls: ['./model-list-paginator.component.sass'],\n imports: [CommonModule, ReactiveFormsModule, NgbPaginationModule]\n})\nexport class ModelListPaginatorComponent<T extends DataModel>\n implements OnChanges\n{\n @Input() public list!: ModelList<T>;\n @Input() public maxPages = 200;\n @Input() public hide = false;\n\n public perPageControl: FormControl = new FormControl<number>(10);\n public showDirectAccess = false;\n public directAccess: FormControl = new FormControl<number>(0);\n public curPage = 1;\n public curCount!: number;\n public pageSize!: number;\n private destroy$ = inject(DestroyRef);\n\n public onPageChange(page: number): void {\n if (!page) {\n return;\n }\n this.list.paginator.setPage(page);\n }\n\n public ngOnChanges(): void {\n if (this.list) {\n this.perPageControl.setValue(this.list.paginator.getPageSize(), {\n emitEvent: false,\n });\n this.list.meta\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((meta) => {\n if (meta.nav) {\n this.list.paginator.updatePage(meta.nav.page || 1);\n this.curPage = meta.nav.page || 1;\n this.curCount = meta.nav.count;\n this.list.paginator.updatePageSize(meta.nav.size);\n this.pageSize = this.list.paginator.getPageSize();\n this.perPageControl.setValue(this.pageSize, { emitEvent: false });\n }\n });\n\n this.perPageControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((count) => {\n this.list.paginator.setPageSize(count);\n });\n\n this.directAccess.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), debounceTime(400))\n .subscribe((count) => {\n this.list.paginator.setPage(+count);\n });\n }\n }\n}\n","\n<div class=\"row\" *ngIf=\"!hide\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n <option value=\"10\" *ngIf=\"maxPages&gt;=10\">10 / page</option>\n <option value=\"20\" *ngIf=\"maxPages&gt;=20\">20 / page</option>\n <option value=\"50\" *ngIf=\"maxPages&gt;=50\">50 / page</option>\n <option value=\"100\" *ngIf=\"maxPages&gt;=100\">100 / page</option>\n <option value=\"200\" *ngIf=\"maxPages&gt;=200\">200 / page</option>\n <option value=\"500\" *ngIf=\"maxPages&gt;=500\">500 / page</option>\n <option value=\"1000\" *ngIf=\"maxPages&gt;=1000\">1000 / page</option>\n <option value=\"2000\" *ngIf=\"maxPages&gt;=2000\">2000 / page</option>\n <option value=\"5000\" *ngIf=\"maxPages&gt;=5000\">5000 / page</option>\n <option value=\"10000\" *ngIf=\"maxPages&gt;=10000\">10000 / page</option>\n </select>\n </div>\n <div class=\"col-sm-5 pagination\" *ngIf=\"list\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} résultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n <div *ngIf=\"showDirectAccess\">\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller à la page\">\n </div>\n </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\n\n@Pipe({\n name: 'choice',\n standalone: true,\n})\nexport class ChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!value) {\n return '-';\n }\n const fvalue = (value as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = value.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n\n@Pipe({\n name: 'pchoice',\n standalone: true,\n})\nexport class PChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: any,\n model: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!model) {\n return '-';\n }\n if (!value) {\n return '-';\n }\n // Use value from input, not from field\n const fvalue = value; //- (model as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = model.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { formatNumber } from '@angular/common';\n\nexport function isValue(\n value: number | string | null | undefined\n): value is number | string {\n return !(value == null || value === '' || value !== value);\n}\n\nexport function strToNumber(value: number | string): number {\n // Convert strings to numbers\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new Error(`${value} is not a number`);\n }\n return value;\n}\n\n@Pipe({\n name: 'factor',\n standalone: true,\n})\nexport class FactorPipe<T extends DataModel> implements PipeTransform {\n constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n transform(\n value: T | null,\n field: string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) {\n return null;\n }\n locale = locale || this._locale;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n const manager = value.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatNumber(num / factor, locale, digitsInfo);\n }\n}\n\n@Pipe({\n name: 'pfactor',\n standalone: true,\n})\nexport class PFactorPipe<T extends DataModel> implements PipeTransform {\n constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n transform(\n value: number | string | null | undefined,\n model: T | null,\n field: string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!model) return null;\n if (!value) return null;\n\n locale = locale || this._locale;\n // Use value from input, not from model\n const fvalue = value; // (model as any)[field];\n if (!isValue(fvalue)) return null;\n const manager = model.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatNumber(num / factor, locale, digitsInfo);\n }\n}\n","import {\n DEFAULT_CURRENCY_CODE,\n Inject,\n LOCALE_ID,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { isValue, strToNumber } from './factor.pipe';\nimport { formatCurrency, getCurrencySymbol } from '@angular/common';\n\n@Pipe({\n name: 'factorc',\n standalone: true,\n})\nexport class FactorcPipe<T extends DataModel> implements PipeTransform {\n constructor(\n @Inject(LOCALE_ID) private _locale: string,\n @Inject(DEFAULT_CURRENCY_CODE) private _defaultCurrencyCode: string = 'EUR'\n ) {}\n\n transform(\n value: T | null,\n field: string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) return null;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n locale = locale || this._locale;\n let currency: string = currencyCode || this._defaultCurrencyCode;\n if (!display) {\n display = 'symbol';\n }\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(\n currency,\n display === 'symbol' ? 'wide' : 'narrow',\n locale\n );\n } else {\n currency = display!;\n }\n }\n\n const manager = value.FM(field);\n const factor = (manager as any).factor || 1;\n const num = strToNumber(fvalue);\n return formatCurrency(\n num / factor,\n locale,\n currency,\n currencyCode,\n digitsInfo\n );\n }\n}\n\n@Pipe({\n name: 'pfactorc',\n standalone: true,\n})\nexport class PFactorcPipe<T extends DataModel> implements PipeTransform {\n constructor(\n @Inject(LOCALE_ID) private _locale: string,\n @Inject(DEFAULT_CURRENCY_CODE) private _defaultCurrencyCode: string = 'EUR'\n ) {}\n\n transform(\n value: number | string | undefined | null,\n model: T | null,\n field: string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!model) return null;\n if (!value) return null;\n // Use value from input, not from model\n const fvalue = value; // (model as any)[field];\n if (!isValue(fvalue)) {\n return null;\n }\n locale = locale || this._locale;\n let currency: string = currencyCode || this._defaultCurrencyCode;\n if (!display) {\n display = 'symbol';\n }\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(\n currency,\n display === 'symbol' ? 'wide' : 'narrow',\n locale\n );\n } else {\n currency = display!;\n }\n }\n\n const manager = model.FM(field);\n const factor = (manager as any).factor || 1;\n const num = strToNumber(fvalue);\n return formatCurrency(\n num / factor,\n locale,\n currency,\n currencyCode,\n digitsInfo\n );\n }\n}\n","import {\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { debounceTime, distinctUntilChanged, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type TplFun<T extends DataModel> = (data: T) => string;\n\n@Component({\n selector: 'data-fkselect',\n templateUrl: './fkselect.component.html',\n styleUrls: ['./fkselect.component.sass'],\n imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule]\n})\nexport class FkselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public value?: R;\n\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public update: boolean = false;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public inputClasses: string[] | string = [];\n\n @Output() public selected = new EventEmitter<T>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private _tpl!: TplFun<R>;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.selected.emit(value);\n }\n });\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n public clearAction(): void {\n this.cleared.emit();\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntilDestroyed(this.destroy$),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n }),\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>","import {\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport {\n debounceTime,\n distinctUntilChanged,\n firstValueFrom,\n Observable,\n} from 'rxjs';\nimport { TplFun } from '../fkselect/fkselect.component';\nimport { DataModel } from '../../data/data-model';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-m2mselect',\n templateUrl: './m2mselect.component.html',\n styleUrls: ['./m2mselect.component.sass'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: M2mselectComponent,\n },\n ],\n imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule]\n})\nexport class M2mselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit, ControlValueAccessor\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public values!: R[];\n public pks: number[] = [];\n public disabled = false;\n // Fk fields, either model / queryset / collection must be given\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public emptyLabel = '';\n @Input() public inputClasses: string[] | string = [];\n // Outputs\n @Output() public added = new EventEmitter<R>();\n @Output() public removed = new EventEmitter<R>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n @Output() public detailsChanged = new EventEmitter<R[]>();\n @Output() public changed = new EventEmitter<number[]>();\n\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private touched = false;\n private _tpl!: TplFun<R>;\n private destroy$ = inject(DestroyRef);\n /**\n * Control value accessor onChange dummy callback;\n * @param fks\n */\n public onChange = (fks: number[]) => {};\n\n /**\n * Control value accessor onTouched dummy callback;\n */\n public onTouched = () => {};\n\n /**\n * OnChange register from controlValueAccessor\n * @param onChange callback\n */\n registerOnChange(onChange: any) {\n this.onChange = onChange;\n }\n\n /**\n * OnTouched register from controlValueAccessor\n * @param onTouched callback\n */\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n /**\n * OnInit :\n * - ensures queryset is available\n * - creates form control for input\n * - creates display function\n * - ensure values are set from any source\n */\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n if (!this.queryset) {\n throw Error('queryset is mandatory for m2m select');\n }\n // Create form control for typeahead and subscribe for changes\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.onAdd(value);\n }\n });\n // Set display function\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n // Get values from model if not already given\n // TODO: check if this is necessary\n if (!this.values && this.model && this.field) {\n this.values = (this.model as any)[this.field + '_details'];\n }\n if (this.values === undefined) {\n console.error('no values available for ', this.model, this.field);\n throw Error('no values available');\n }\n }\n\n /**\n * Remove a value.\n * Emits detailsChanged, changed and removed signals.\n * @param i instance to be removed\n */\n public onRemove(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n const ps = this.pks.indexOf(i.id);\n this.pks.splice(ps, 1);\n this.values.splice(ps, 1);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.removed.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Add a value.\n * Emits detailsChanged, changed and added signals.\n * @param i instance to be added.\n */\n public onAdd(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks.push(i.id);\n this.values.push(i);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.added.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Clear all values.\n * Emits detailsChanged, changed and cleared signals.\n */\n public onClear() {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks = [];\n this.values = [];\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.cleared.emit();\n this.onChange(this.pks);\n }\n }\n\n /**\n * Write value from controlValueAccessor.\n * @param pks\n */\n async writeValue(pks: number[]) {\n this.pks = pks;\n await this._getDisplayValues(pks);\n }\n\n /**\n * Mark as touched.\n */\n public markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n /**\n * Mark as disabled.\n * @param disabled\n */\n setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Retrieve display values for current set of pks.\n * Eventually fetches items from collection.\n * Emits detailsChanged signal.\n * @param pks list of current pks.\n * @private\n */\n private async _getDisplayValues(pks: number[] = []) {\n const values: R[] = [];\n for (const k of pks) {\n let found = false;\n for (let v of this.values) {\n if (v.id == k) {\n values.push(v);\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.collection) {\n values.push(await firstValueFrom(this.collection.fetch(k)));\n } else {\n values.push({ id: k, _display: 'Unknown' } as any);\n }\n }\n }\n this.values = values;\n this.detailsChanged.next(this.values);\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Search function.\n * @param text$\n * @private\n */\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntilDestroyed(this.destroy$),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n }),\n );\n }\n}\n","\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n <div *ngFor=\"let i of values\"><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n</div>","import {Inject, Injectable, InjectionToken, NgZone, Optional} from \"@angular/core\";\nimport {Observable, ReplaySubject, Subscription, timer} from \"rxjs\";\n\nexport const enum TYPE {\n SUCCESS, INFO, WARNING, DANGER\n}\n\nexport enum DEFAULT_TIMEOUTS {\n SUCCESS = 3000,\n INFO = 4000,\n WARNING = 10000,\n DANGER = 30000\n}\n\nexport enum STATUS {\n UNDISP, DISP, ACK\n}\n\nconst DEFAULT_MESSAGE_TIMEOUT = 5000;\n\nexport interface ISoundTypes {\n [index: string]: string\n}\n\nexport const DATA_MESSAGE_SOUNDS = new InjectionToken<ISoundTypes>(\"data.message.sounds\");\n\n\nexport class Message {\n public status: string = STATUS[STATUS.UNDISP];\n public showTrace = false;\n\n constructor(public title: string,\n public type: TYPE = TYPE.INFO,\n public message: string = \"\",\n public trace: any = null,\n public ttl: number = DEFAULT_MESSAGE_TIMEOUT) {\n }\n\n public get style(): string {\n if (this.type === TYPE.DANGER) {\n return \"alert alert-dismissible alert-danger\";\n }\n if (this.type === TYPE.INFO) {\n return \"alert alert-dismissible alert-info\";\n }\n if (this.type === TYPE.WARNING) {\n return \"alert alert-dismissible alert-warning\";\n }\n if (this.type === TYPE.SUCCESS) {\n return \"alert alert-dismissible alert-success\";\n }\n return \"alert alert-dismissible alert-success\";\n }\n\n public ack(): void {\n this.status = STATUS[STATUS.ACK];\n }\n}\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DataMessageService {\n public _messages$: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n private _messages: Message[] = [];\n private _timer!: Observable<any>;\n private _subscription!: Subscription;\n\n constructor(public ngZone: NgZone,\n @Optional() @Inject(DATA_MESSAGE_SOUNDS) public sounds: ISoundTypes) {\n this.init();\n }\n\n public get current(): Observable<Message[]> {\n return this._messages$.asObservable();\n }\n\n public init(): void {\n let changed = false;\n if (!this._timer) {\n this.ngZone.runOutsideAngular(() => {\n this._timer = timer(500, 500);\n this._subscription = this._timer.subscribe(() => {\n for (const m of this._messages) {\n m.ttl -= 500;\n if (m.ttl <= 0) {\n changed = true;\n }\n }\n if (changed) {\n this.ngZone.run(() => {\n const out: Message[] = [];\n for (const m of this._messages) {\n if (m.ttl >= 0) {\n out.push(m);\n }\n }\n this._messages = out;\n this._notify();\n });\n }\n });\n });\n }\n }\n\n public close(): void {\n this._subscription.unsubscribe();\n }\n\n public success(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.SUCCESS): void {\n this._messages.push(new Message(title, TYPE.SUCCESS, message, trace, timeout));\n this.play(\"success\");\n this._notify();\n }\n\n public info(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.INFO): void {\n this._messages.push(new Message(title, TYPE.INFO, message, trace, timeout));\n this.play(\"info\");\n this._notify();\n }\n\n public warning(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.WARNING): void {\n this._messages.push(new Message(title, TYPE.WARNING, message, trace, timeout));\n this.play(\"warning\")\n this._notify();\n }\n\n public danger(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.DANGER): void {\n this._messages.push(new Message(title, TYPE.DANGER, message, trace, DEFAULT_TIMEOUTS.DANGER));\n this.play(\"error\")\n this._notify();\n }\n\n public error(title: string, message: string = \"\", trace: any = null): void {\n this.danger(title, message, trace);\n }\n\n public debug(title: string, message: string = \"\", trace: any = null): void {\n console.log(title, message, trace);\n }\n\n public ack(message: Message): void {\n message.ack();\n this._notify();\n }\n\n public play(type: string = \"notify\") {\n if (this.sounds && this.sounds[type]) {\n const audio = new Audio(this.sounds[type]);\n audio.play();\n }\n }\n\n private _notify(): void {\n const out: Message[] = [];\n for (const message of this._messages) {\n if ((message.status === STATUS[STATUS.UNDISP]) ||\n (message.status === STATUS[STATUS.DISP])) {\n message.status = STATUS[STATUS.DISP];\n out.push(message);\n }\n }\n this._messages$.next(out);\n }\n\n}\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport {\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup,\n} from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n IDispEditChoice,\n} from './dispedit.constants';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { FkselectComponent, TplFun } from '../fkselect/fkselect.component';\nimport { DecimalFieldManager } from '../../data/fields/numbers';\nimport {\n BootstrapDataDisplayConfig,\n DATA_DISPLAY_CONFIG,\n DataDisplayConfig,\n} from '../../data/data-parameters';\nimport { DataMessageService } from '../../messages/message.service';\nimport { CommonModule } from '@angular/common';\nimport { M2mselectComponent } from '../m2mselect/m2mselect.component';\n\n@Component({\n selector: 'data-dispedit',\n templateUrl: './dispedit.component.html',\n styleUrls: ['./dispedit.component.sass'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FkselectComponent,\n M2mselectComponent,\n ],\n})\nexport class DispeditComponent<FT, T extends DataModel, R extends DataModel>\n implements OnInit, OnChanges\n{\n /** Model (mandatory) */\n @Input() public model!: T;\n /** Field (mandatory) */\n @Input() public field!: string;\n /** External form */\n @Input() public form?: UntypedFormGroup;\n /**\n * Starting edit mode\n * If mode is inline, edit is always true.\n */\n @Input() public edit = false;\n /**\n * Can be switched to edit mode?\n * default : true\n */\n @Input() public editable = true;\n /**\n * Save updated values ?\n * If not given, default value depends on mode :\n * - save if mode is dd\n * - don't save if mode is inline\n */\n public save?: boolean;\n /**\n * Display mode\n * - dd provides display / edit within a dt/dd block\n * - inline (to be renamed to form) provides a (label? and) form control\n * */\n @Input() public mode: 'dd' | 'inline' | 'form' = 'inline';\n /**\n * Custom choices\n * If provided, a select form control will be used instead of base editor\n */\n @Input() public choices: IDispEditChoice[] = [];\n /** Custom input classes */\n @Input() public inputClasses!: string[] | string;\n /** Override editor, if provided */\n @Input() public editor?: DISPEDIT_EDITOR_TYPES;\n /** Override viewer, if provided */\n @Input() public viewer?: DISPEDIT_DISPLAY_TYPES;\n /** Override default value */\n @Input() public default?: any;\n /**\n * Override placeholder, if provided.\n * By default, manager.description is used\n */\n @Input() public placeholder: string = '';\n /**\n * Override help, if provided.\n * By default, manager.help is used.\n */\n @Input() public help: string = '';\n /**\n * Hide label (for inline forms)\n */\n @Input() public hideLabel: boolean = false;\n\n // FK fields\n // TODO: rename as fk_ or related_\n /** Fk queryset */\n @Input() public queryset?: Queryset<R>;\n /** Fk collection */\n @Input() public collection?: Collection<R>;\n /** Fk display */\n @Input() public display?: string | TplFun<R>;\n /** Fk filter */\n @Input() public filter: FilterData = {};\n\n /** Output emitter, output model on every change */\n @Output() public changed = new EventEmitter<T>();\n\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n\n /** Text value used for display */\n public txtValue?: string;\n /** Text values used for many displays */\n public txtValues?: string[];\n\n /** Computed editor type */\n public realEditor: DISPEDIT_EDITOR_TYPES = 'input.text';\n /** Computed display type */\n public realDisplay: DISPEDIT_DISPLAY_TYPES = 'text';\n /** Current disp raw value */\n public dispValue?: any;\n /** Computed chocies type */\n public realChoices?: IDispEditChoice[] = [];\n /** Computed help */\n public realHelp!: string;\n /** Computed placeholder */\n public realPlaceholder!: string;\n /** Computed required */\n public required!: boolean;\n /** Computed default value */\n public realDefault!: any;\n\n public m2mValues?: any[];\n\n // Local form group\n public fg?: UntypedFormGroup;\n\n // Display template function\n private _tpl!: TplFun<R>;\n\n /**\n * Constructor, can be given DATA_DISPLAY_CONFIG injection token to override display classes.\n * By default, bs5 config is used\n * @param dconf DataDisplayConfig item\n * @param _msgs messages service\n */\n constructor(\n @Optional() @Inject(DATA_DISPLAY_CONFIG) public dconf: DataDisplayConfig,\n private _msgs: DataMessageService,\n ) {\n if (this.dconf === null) {\n this.dconf = BootstrapDataDisplayConfig;\n }\n }\n\n /**\n * Init sequence.\n * - Sets mode\n * - Sets display function\n * - Loads manager\n * - Run misc checks on special values\n * - Get help, placeholder strings\n */\n public ngOnInit() {\n this._setMode();\n }\n\n /**\n * Upgrade all values on any change.\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this._setDisplayFn();\n this.manager = this.model?.FM(this.field);\n this.required = this.manager?.required || false;\n this._checks();\n this.realHelp = this.help || this.manager?.help || '';\n this.realPlaceholder = this.placeholder || this.manager?.description || '';\n this.realDefault = this.default;\n this.save = this.save === undefined ? this.mode === 'dd' : this.save;\n if (\n (!this.edit && this.mode === 'dd') ||\n (!this.editable && this.mode === 'inline')\n ) {\n this.enableDisplayMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Set up display mode.\n * - get choices if available\n * - get display type\n * - process current value for display\n * - set display classes\n */\n public enableDisplayMode() {\n this._getChoices();\n this._getRealDisplay();\n this._getDisplayValue();\n this._setDisplayClasses();\n this.edit = false;\n }\n\n /**\n * Set up edit mode :\n * - get choices if available\n * - get editor type\n * - prepare form controle\n * - set form control value\n * - update form control classes\n */\n public enableEditMode() {\n if (!this.editable) {\n return;\n }\n this._getChoices();\n this._getRealEditor();\n this._setFormControl();\n this._setFormControlValue();\n this._setEditorClasses();\n this.edit = true;\n }\n\n /**\n * Update model field from form control value (if value is valid).\n * If save boolean is true, save values to API.\n */\n public async update(): Promise<void> {\n if (this.fg && this.model && this.fg.valid) {\n switch (this.realEditor) {\n case 'input.decimal':\n (this.model as any)[this.field] = Math.round(\n this.fg.value[this.field] * (this.manager as any).factor,\n );\n break;\n default:\n (this.model as any)[this.field] = this.fg.value[this.field];\n }\n if (this.save === true) {\n return this._save();\n }\n }\n }\n\n unsetEdit() {\n if (this.mode == 'dd' && this.edit) {\n this.edit = false;\n delete this.fg;\n }\n }\n\n toggleEdit() {\n if (!this.edit) {\n this.enableEditMode();\n } else {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n }\n\n /**\n * Reset field to default value\n * TODO: check if edit mode needs to be changed / saved\n */\n public async setDefault(): Promise<void> {\n if (this.model) {\n (this.model as any)[this.field] = this.realDefault;\n this.fg!.controls[this.field].setValue(this.realDefault, {\n emitEvent: false,\n });\n }\n await this.update();\n }\n\n public async selectedRefItem($event: T | null) {\n if (this.model) {\n if ($event !== null) {\n (this.model as any)[this.field] = $event.id;\n (this.model as any)[`${this.field}_details`] = $event;\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = $event.id;\n this.form.patchValue(fv, { emitEvent: true });\n this.form.markAsTouched();\n this.form.markAsDirty();\n }\n } else {\n (this.model as any)[this.field] = null;\n delete (this.model as any)[`${this.field}_details`];\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = null;\n this.form.patchValue(fv, { emitEvent: true });\n this.form.markAsTouched();\n this.form.markAsDirty();\n }\n }\n return this._save();\n }\n }\n\n public onM2MValuesChanges(v: any[]) {\n this.m2mValues = v;\n }\n\n private _checks() {\n if (this.editor === 'quill' && !this.viewer) {\n this.viewer = 'quill';\n }\n }\n\n /**\n * Save value to database, only if model have an id.\n * If mode is dd, toggle edit / display mode.\n * @private\n */\n private async _save(): Promise<void> {\n if (this.model) {\n if (this.model.id) {\n try {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true }),\n );\n } catch (e) {\n console.error(e);\n let msg: string = '';\n if (e && (e as any).error && (e as any).error[this.field]) {\n msg = `${(e as any).error[this.field]}`;\n }\n this._msgs.error(\n \"Erreur lors de l'enregistrement\",\n msg,\n JSON.stringify(e),\n );\n return;\n }\n }\n if (this.mode === 'dd') {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n this.changed.next(this.model);\n }\n }\n\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Set display mode based on current display config\n * @private\n */\n private _setMode() {\n if (!this.mode) {\n this.mode = this.dconf.dispEdit.defaultMode;\n }\n }\n\n private _setDisplayFn() {\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n private _getChoices() {\n // Set display choices\n let choices: IDispEditChoice[] | undefined;\n if (this.choices && this.choices.length) {\n choices = this.choices;\n } else if ((this.manager as any)?.choices) {\n choices = (this.manager as any)?.choices;\n }\n // Set display value\n if (choices && choices.length > 0) {\n this.realChoices = choices;\n } else {\n delete this.realChoices;\n }\n }\n\n private _getRealDisplay() {\n this.realDisplay = this.viewer\n ? this.viewer\n : this.manager?.displayType\n ? this.manager.displayType\n : 'text';\n if (this.realChoices && this.realChoices.length) {\n this.realDisplay = 'choice';\n }\n }\n\n private _getRealEditor() {\n this.realEditor = this.editor\n ? this.editor\n : this.manager?.editorType || 'input.text';\n if (this.realChoices && this.realChoices.length) {\n this.realEditor = 'select';\n }\n }\n\n private _setFormControl() {\n if (!this.form) {\n const fgc: { [index: string]: UntypedFormControl } = {};\n fgc[this.field] = this.model.FC(this.field);\n this.fg = new UntypedFormGroup(fgc);\n } else {\n this.fg = this.form;\n this.fg.setControl(this.field, this.model.FC(this.field), {\n emitEvent: false,\n });\n }\n if (this.mode === 'inline') {\n this.fg.valueChanges.subscribe(() => {\n this.update();\n });\n }\n }\n\n private _setFormControlValue() {\n switch (this.realEditor) {\n case 'input.datetime':\n const value = (this.model as any)[this.field];\n const now = new Date();\n const localnow = new Date(\n now.getTime() - now.getTimezoneOffset() * 60000,\n );\n if (value === null) {\n this.fg!.controls[this.field].setValue(null, { emitEvent: true });\n } else {\n const time = value ? new Date(value) : new Date();\n const offset = time.getTimezoneOffset();\n const localtime = new Date(time.getTime() - offset * 60000);\n this.fg!.controls[this.field].setValue(\n localtime.toISOString().substring(0, 16),\n { emitEvent: true },\n );\n }\n this.realDefault =\n this.default || this.manager?.required\n ? localnow.toISOString().substring(0, 16)\n : null;\n break;\n case 'input.date':\n const dt = this.model.toJson([this.field])[this.field];\n this.fg!.controls[this.field].setValue(dt);\n break;\n case 'input.decimal':\n this.fg!.controls[this.field].setValue(\n (this.model as any)[this.field] /\n ((this.manager as unknown as DecimalFieldManager).factor || 1),\n );\n }\n }\n\n private _setEditorClasses() {\n // FIXME: use realEditorClasses\n if (!this.inputClasses) {\n this.inputClasses =\n this.dconf.dispEdit.inputClasses[this.realEditor] || '';\n }\n }\n\n private _getDisplayValue() {\n const value = (this.model as any)[this.field];\n this.dispValue = value;\n if (this.realChoices) {\n for (const c of this.realChoices) {\n if (c === value) {\n this.txtValue = c as any;\n return;\n } else if (c.value !== undefined && c.value === value) {\n this.txtValue = c.desc;\n return;\n }\n }\n }\n // Set display text depending on value and realDisplay value\n if (value === true) {\n this.txtValue = 'OUI';\n } else if (value === false) {\n this.txtValue = 'NON';\n } else if (value === undefined || value === null) {\n this.txtValue = 'non défini';\n } else {\n switch (this.realDisplay) {\n case 'fkdetails':\n const details = (this.model as any)[`${this.field}_details`] as any;\n this.txtValue = this._display(details);\n break;\n case 'm2mdetails':\n const m2mDetails =\n this.m2mValues ||\n ((this.model as any)[`${this.field}_details`] as any[]);\n this.txtValues = [];\n for (const v of m2mDetails || []) {\n this.txtValues.push(this._display(v));\n }\n break;\n case 'decimal':\n this.txtValue = `${\n value /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n }`;\n break;\n default:\n this.txtValue = `${value}`;\n }\n }\n }\n\n private _setDisplayClasses() {}\n}\n","\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n <ng-container [ngSwitch]=\"realDisplay\"><span class=\"editable disp-text\" *ngSwitchCase=\"'text'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-choice\" *ngSwitchCase=\"'choice'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-decimal\" *ngSwitchCase=\"'decimal'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-boolean\" *ngSwitchCase=\"'boolean'\" (click)=\"enableEditMode()\">{{txtValue}}</span><span class=\"editable disp-fkdetails\" *ngSwitchCase=\"'fkdetails'\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span><span class=\"editable disp-m2mdetails\" *ngSwitchCase=\"'m2mdetails'\" (click)=\"enableEditMode()\">\n <div class=\"m2mitem\" *ngFor=\"let v of txtValues\">{{v}}</div></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'datetime'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'short'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span><span class=\"editable disp-datetime\" *ngSwitchCase=\"'date'\" (click)=\"enableEditMode()\">\n <ng-container *ngIf=\"dispValue\">{{txtValue|date:'shortDate'}}</ng-container>\n <ng-container *ngIf=\"!dispValue\">{{txtValue}}</ng-container></span></ng-container>\n</ng-template>\n<ng-template #editTpl let-form=\"form\">\n <ng-container [ngSwitch]=\"realEditor\">\n <ng-container *ngSwitchCase=\"'input.text'\">\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.email'\">\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.password'\">\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.datetime'\">\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.date'\">\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.number'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.decimal'\">\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'input.checkbox'\">\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'textarea'\">\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\" *ngIf=\"mode==='dd'\"><i class=\"bi bi-save\"></i></button>\n <div class=\"form-text\" *ngIf=\"realHelp\">{{realHelp}}<span class=\"ms-1\" *ngIf=\"required\">(requis)</span></div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fkselect'\">\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" [display]=\"display\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'m2mselect'\">\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n </ng-container>\n <ng-container *ngSwitchCase=\"'select'\">\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n <option *ngFor=\"let c of realChoices\" [ngValue]=\"c.value!==undefined ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Disp/edit toggler-->\n<ng-template #dispeditTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"fg\">\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- DispEdit noform-->\n<ng-template #dispeditFormTpl>\n <ng-container *ngIf=\"!edit\">\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"edit\">\n <ng-container *ngIf=\"form\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\"><span class=\"pointer float-end\" (click)=\"setDefault()\" *ngIf=\"realDefault!== undefined &amp;&amp; edit\"><i class=\"bi bi-trash ms-2\"></i></span>\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n</ng-container>","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../data/data-model';\nimport { debounceTime, firstValueFrom, Observable } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataMessageService } from '../../messages/message.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IFlagItem {\n flag: string;\n count: number;\n}\n\n@Component({\n selector: 'data-flags',\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './flags.component.html',\n styleUrls: ['./flags.component.sass']\n})\nexport class FlagsComponent<T extends DataModel> implements OnInit {\n @Input() public model!: T;\n @Input() public field = 'flags';\n // FIXME: make all flags endpoint as optional parameters\n @Input() public get_flags_endpoint = 'get_flags';\n @Input() public edit: boolean = false;\n @Input() public editable: boolean = true;\n @Input() public flags!: Observable<IFlagItem[]>;\n @Input() public free = false;\n @Input() public create = true;\n @Input() public action = false; // if set to true, use add_flag and remove_flag model actions\n public ft!: FormControl;\n public fs!: FormControl;\n public curflags: string[] = [];\n public txtflag = '';\n public selflag = '';\n public flaglist: IFlagItem[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(private _msg: DataMessageService) {}\n\n public async ngOnInit(): Promise<any> {\n if (!this.flags && this.model._collection) {\n this.flags = this.model._collection.action(\n null,\n 'GET',\n this.get_flags_endpoint,\n );\n }\n if (this.model && this.field && (this.model as any)[this.field]) {\n this.curflags = (this.model as any)[this.field];\n } else {\n console.warn('Model or field problem in flagsfield component');\n this.curflags = [];\n }\n this.ft = new FormControl('');\n this.fs = new FormControl('');\n this.fs.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), debounceTime(250))\n .subscribe((value: string) => {\n if (value) {\n this.addFlag(value);\n }\n });\n }\n\n public async addFreeFlag(): Promise<any> {\n await this.addFlag(this.ft.value);\n }\n\n public async addFlag(flag: string): Promise<any> {\n if (!this.flagPresent(flag)) {\n this.curflags.push(flag);\n if (this.action) {\n try {\n await firstValueFrom(\n this.model.action('POST', 'add_flag', { body: { flag } }),\n );\n this._msg.success('Flag enregistré avec succès');\n } catch (e) {\n this._msg.error('Erreur lors de la sauvegarde', e as any);\n }\n } else {\n await this.update();\n }\n }\n }\n\n public async update(): Promise<any> {\n (this.model as any)[this.field] = this.curflags;\n try {\n await firstValueFrom(this.model.update([this.field]));\n this.fs.setValue('', { emitEvent: false });\n this.ft.setValue('', { emitEvent: false });\n this._msg.success('Flag enregistré avec succès');\n } catch (error) {\n this._msg.error(\n 'Erreur lors de la sauvegarde',\n `API Return : ${error}`,\n (error as any)._body,\n );\n }\n }\n\n public flagPresent(flag: string): boolean {\n return this.curflags.findIndex((f) => flag === f) !== -1;\n }\n\n public async removeFlag(flag: string): Promise<any> {\n this.curflags.splice(\n this.curflags.findIndex((f) => flag === f),\n 1,\n );\n if (this.action) {\n try {\n await firstValueFrom(\n this.model.action('POST', 'remove_flag', { body: { flag } }),\n );\n this._msg.success('Removed');\n } catch (e) {\n this._msg.error('Removing flag failed', e as any);\n }\n } else {\n await this.update();\n }\n }\n\n public async toggleEdit() {\n if (this.editable) {\n if (!this.edit) {\n this.flaglist = await firstValueFrom(this.flags);\n this.edit = true;\n } else {\n this.edit = false;\n }\n } else {\n this.edit = false;\n }\n }\n}\n","\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n<dd *ngIf=\"!edit\" (click)=\"toggleEdit()\" role=\"button\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\">{{flag}}</span></dd>\n<dd *ngIf=\"edit\">\n <div class=\"row\">\n <ng-container *ngIf=\"!free\">\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n <option *ngFor=\"let flag of flaglist\" [value]=\"flag.flag\">{{flag.flag}}<span class=\"ms-1\" *ngIf=\"flag.count\">({{flag.count}})</span></option>\n </select>\n </div>\n <div class=\"col\" *ngIf=\"create\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"free\">\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span><i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n</dd>","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Editor, NgxEditorModule, Toolbar } from 'ngx-editor';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport { firstValueFrom } from 'rxjs';\n\nexport const RichEditToolbars: { [index: string]: Toolbar } = {\n default: [\n ['bold', 'italic'],\n ['underline', 'strike'],\n ['code', 'blockquote'],\n ['ordered_list', 'bullet_list'],\n [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n ['link'],\n ['text_color', 'background_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ],\n light: [\n ['bold', 'italic', 'underline'],\n ['ordered_list', 'bullet_list'],\n ['text_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ],\n none: [],\n};\n\n@Component({\n selector: 'data-richedit',\n imports: [CommonModule, NgxEditorModule, ReactiveFormsModule],\n templateUrl: './richedit.component.html',\n styleUrls: ['./richedit.component.sass']\n})\nexport class RicheditComponent<FT, T extends DataModel>\n implements OnInit, OnDestroy\n{\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public editable: boolean = true;\n @Input() public edit: boolean = true;\n @Input() public mode: 'dd' | 'inline' | 'form' = 'dd';\n /** Hide label (for inline forms) */\n @Input() public hideLabel: boolean = false;\n /** Hide button (for changed usage) */\n @Input() public hideButton: boolean = false;\n /** Form control, from outside or created */\n @Input() public fc!: FormControl<string | null>;\n /** Toolbar mode */\n @Input() public toolbar: 'none' | 'default' | 'light' | Toolbar = 'default';\n @Output() public changed = new EventEmitter<string | null>();\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n /** Computed required */\n public required!: boolean;\n public editor!: Editor;\n public html = '';\n public realToolbar!: Toolbar;\n\n ngOnInit(): void {\n this.editor = new Editor();\n if (this.toolbar === 'light' || this.toolbar === 'default') {\n this.realToolbar = RichEditToolbars[this.toolbar];\n } else if (this.toolbar === 'none') {\n } else {\n this.realToolbar = this.toolbar as Toolbar;\n }\n if (!this.fc) {\n this.fc = new FormControl<string>('');\n if (this.model && this.field) {\n this.manager = this.model.FM(this.field);\n this.required = this.manager?.required || false;\n this.fc.setValue((this.model as any)[this.field] || '', {\n emitEvent: false,\n });\n }\n if (this.edit) {\n this.fc.enable();\n } else {\n this.fc.disable();\n }\n this.fc.valueChanges.subscribe((v) => this.changed.emit(v));\n }\n }\n\n // make sure to destory the editor\n ngOnDestroy(): void {\n this.editor.destroy();\n }\n\n toggleEdit() {\n if (this.editable) {\n if (this.edit) {\n this.fc.disable();\n this.edit = false;\n } else {\n this.fc.enable();\n this.edit = true;\n }\n } else {\n this.fc.disable();\n this.edit = false;\n }\n }\n\n public async save() {\n if (this.model && this.field) {\n this.model.setFV(this.field, this.fc.value);\n if (this.mode === 'dd') {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true })\n );\n }\n }\n }\n}\n","\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\" *ngIf=\"edit &amp;&amp; toolbar!=='none'\"></ngx-editor-menu>\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" *ngIf=\"edit &amp;&amp; !hideButton\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n<ng-container *ngIf=\"mode==='dd'\">\n <dt [class.required]=\"required\" *ngIf=\"!hideLabel\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n</ng-container>\n<!-- Inline display-->\n<ng-container *ngIf=\"mode==='inline'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>\n<!-- Form display-->\n<ng-container *ngIf=\"mode==='form'\">\n <ng-container *ngIf=\"!hideLabel\">\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n</ng-container>","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { firstValueFrom } from 'rxjs';\nimport {\n NgbOffcanvas,\n NgbOffcanvasModule,\n NgbOffcanvasRef,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\nimport { DataMessageService } from '../../messages/message.service';\n\nexport interface FakeDeleteResult {\n count: number;\n details: [string, number][];\n}\n\n@Component({\n selector: 'data-safe-delete',\n templateUrl: './sdelete.component.html',\n styleUrls: ['./sdelete.component.sass'],\n imports: [CommonModule, NgbOffcanvasModule]\n})\nexport class SafeDeleteComponent<T extends DataModel> {\n /** Model instance to be deleted */\n @Input() public model!: T;\n /** Service to be used for deletion, taken from model if not provided */\n @Input() public service?: Collection<T>;\n /** Function to be called for deletion, overrides service deletion */\n @Input() public actionFn?: (model: T) => Promise<{ success: boolean }>;\n /** Translations of database objects names to human names */\n @Input() public checks: { [index: string]: string } = {};\n /** Messages to be displayed on success or error, default messages are used if not provided */\n @Input() public messages: { success?: string; error?: string } = {};\n /** Event emitted on successful deletion */\n @Output() public deleted = new EventEmitter<FakeDeleteResult>();\n /** Display mode, default is button.\n *\n * - `fbutton`: floating button (small)\n * - `button`: button (small), with text taken from ng-content (no space around icon to allow empty buttons)\n * - `icon`: icon\n * - `custom`: custom : ng-content is surrounded by a clickable div\n * */\n @Input() public display: 'fbutton' | 'button' | 'icon' | 'custom' = 'button';\n\n public result?: FakeDeleteResult;\n @ViewChild('dialog', { static: true })\n private _dialogRef?: ElementRef<HTMLDivElement>;\n private ofc?: NgbOffcanvasRef;\n\n constructor(\n private _ofc: NgbOffcanvas,\n private _msgs: DataMessageService,\n ) {}\n\n public async checkDelete(model: DataModel) {\n const service = this.service || this.model._collection;\n if (service) {\n try {\n this.result = await firstValueFrom(\n service.delete(this.model, { params: { doit: 'no' } }),\n );\n\n this.ofc = this._ofc.open(this._dialogRef, {\n position: 'end',\n });\n } catch (e) {\n console.error(e);\n if (this.messages.error) {\n this._msgs.error(\n this.messages.error,\n (e as any).error?.message || (e as any).message || '',\n );\n }\n }\n }\n }\n\n public async reallyDelete() {\n if (this.actionFn) {\n const res = await this.actionFn(this.model);\n if (res.success && this.messages.success) {\n this._msgs.success(this.messages.success);\n } else if (!res.success && this.messages.error) {\n this._msgs.error(this.messages.error);\n }\n this.ofc?.close();\n if (res.success) {\n this.deleted.emit(this.result);\n }\n } else {\n const service = this.service || this.model._collection;\n if (service) {\n try {\n this.result = await firstValueFrom(\n service.delete(this.model, { params: { doit: 'really' } }),\n );\n if (this.messages.success) {\n this._msgs.success(this.messages.success);\n }\n this.ofc?.close();\n this.deleted.emit(this.result);\n } catch (e) {\n console.error(e);\n if (this.messages.error) {\n this._msgs.error(\n this.messages.error,\n (e as any).error?.message || (e as any).message || '',\n );\n }\n }\n }\n }\n }\n}\n","\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer réellement ??</h2>\n </div>\n <div class=\"offcanvas-body text-danger\" *ngIf=\"result\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet élément supprimera {{result.count}} éléments dans la base de données..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'élément</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let rl of result.details\">\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce à la suppression</button>\n </div>\n</ng-template>\n<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n<button class=\"btn btn-sm btn-danger\" (click)=\"checkDelete(model)\" *ngIf=\"display==='button'\"><i class=\"bi bi-trash\"></i>\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</button>\n<button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\" *ngIf=\"display==='fbutton'\"><i class=\"bi bi-trash mx-2\"></i></button><i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" *ngIf=\"display==='icon'\" role=\"button\"></i>\n<div (click)=\"checkDelete(model)\" *ngIf=\"display==='custom'\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</div>","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface ICharFieldDescChoice {\n value: string;\n desc: string;\n}\n\nexport type ICharFieldChoice = ICharFieldDescChoice | string;\n\nexport interface ICharFieldMetadata extends IFieldMetadata<string> {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp | string;\n choices?: ICharFieldChoice[];\n}\n\nexport interface IEmailFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface IPasswordFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface ITextFieldMetadata extends ICharFieldMetadata {\n syntax?: string;\n}\n\nexport class CharFieldManager extends BaseFieldManager<string> {\n public minLength?: number;\n public maxLength?: number;\n public choices?: ICharFieldChoice[];\n public pattern?: RegExp | string;\n\n constructor(params: any) {\n super(params);\n if (this.choices) {\n this.editorType = 'select';\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.minLength) {\n v.push(Validators.minLength(this.minLength));\n }\n if (this.maxLength) {\n v.push(Validators.maxLength(this.maxLength));\n }\n if (this.pattern) {\n v.push(Validators.pattern(this.pattern));\n }\n // TODO: add choices validator ??\n return v;\n }\n\n public override fromJson(data: any): string {\n if (data === undefined) {\n return this.getDefaultValue()!;\n }\n if (data === null) {\n return this.getDefaultValue()!;\n }\n if (typeof data === 'string') {\n return data;\n }\n return `${data}`;\n }\n}\n\nexport class EmailFieldManager\n extends CharFieldManager\n implements ICharFieldMetadata\n{\n public validate = true;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.email';\n\n constructor(params: any) {\n super(params);\n if (this.validate === undefined) {\n this.validate = true;\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.validate) {\n v.push(Validators.email);\n }\n return v;\n }\n}\n\nexport class TextFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'textarea';\n}\n\nexport class PasswordFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.password';\n}\n\n/* eslint-disable max-len */\n\nexport const charField = (updates: ICharFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'charField', CharFieldManager);\n\nexport const emailField = (\n updates: IEmailFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'emailField', EmailFieldManager);\n\nexport const textField = (updates: ITextFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'textField', TextFieldManager);\n\nexport const passwordField = (\n updates: IPasswordFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'passwordField', PasswordFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\n\nexport interface IPrimaryFieldMetadata extends IFieldMetadata<number> {\n step?: number;\n}\n\nexport class PrimaryFieldManager\n extends BaseFieldManager<number>\n implements IPrimaryFieldMetadata\n{\n public step = 1;\n}\n\nexport const primaryField = (\n updates: IPrimaryFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'primaryField', PrimaryFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport interface IDateFieldMetadata extends IFieldMetadata<Date | null> {\n autoNow?: boolean;\n autoNowAdd?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport const dateMinimum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n\n const controlDate = new Date(control.value);\n\n const validationDate = date;\n\n return controlDate > validationDate\n ? null\n : {\n minDate: {\n 'date-minimum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport const dateMaximum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n const controlDate = new Date(control.value);\n const validationDate = date;\n\n return controlDate < validationDate\n ? null\n : {\n maxDate: {\n 'date-maximum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport interface IDatetimeFieldMetadata extends IDateFieldMetadata {\n timezone?: string | null;\n}\n\nexport class DateFieldManager\n extends BaseFieldManager<Date | null>\n implements IDateFieldMetadata\n{\n public autoNow = false;\n public autoNowAdd = false;\n public min?: Date;\n public max?: Date;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.date';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'date';\n\n constructor(params: IDateFieldMetadata) {\n super(params as IFieldMetadata<Date | null>);\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.validators;\n if (this.min) {\n v.push(dateMinimum(this.min));\n }\n if (this.max) {\n v.push(dateMaximum(this.max));\n }\n return v;\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n const date = new Date(data);\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n\n public override toJson(data: Date | string | null): null | string {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n return `${data.getUTCFullYear()}-${\n data.getUTCMonth() + 1\n }-${data.getUTCDate()}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected override getDefaultValue(args: any = {}): Date | null | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`,\n );\n }\n if (this.defaultValue === undefined) {\n return this.autoNow || this.autoNowAdd ? new Date() : null;\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Datetime field manager.\n *\n */\nexport class DatetimeFieldManager\n extends DateFieldManager\n implements IDatetimeFieldMetadata\n{\n public timezone?: string | null;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.datetime';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'datetime';\n\n constructor(params: IDatetimeFieldMetadata) {\n super(params as IFieldMetadata<Date | null>);\n }\n\n public override toJson(data: Date | string): string | null {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n try {\n if (this.timezone === null || this.timezone === undefined) {\n const offset = data.getTimezoneOffset();\n const localDate = new Date(data.getTime() - offset * 60000);\n return localDate.toISOString().replace('Z', '');\n } else if (this.timezone === 'UTC') {\n return data.toISOString();\n } else {\n return data.toISOString().replace('Z', '') + this.timezone;\n }\n } catch (e) {\n console.error(e, data);\n return null;\n }\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n let date: Date;\n if (typeof data === 'string') {\n // If we don't have timezone info, we parse all dates as local\n if (this.timezone === null || this.timezone === undefined) {\n if (data.endsWith('Z')) {\n date = new Date(data.replace('Z', ''));\n } else if (data.match(/[-+]\\d{4}$/)) {\n date = new Date(data.replace(/[-+]\\d{4}$/, ''));\n } else {\n date = new Date(data);\n }\n } else {\n date = new Date(data);\n }\n } else {\n date = new Date(data);\n }\n\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n}\n\nexport const dateField = (updates: IDateFieldMetadata = {}) =>\n genericDataField(updates, 'dateField', DateFieldManager);\n\nexport const datetimeField = (updates: IDatetimeFieldMetadata = {}) =>\n genericDataField(updates, 'datetimeField', DatetimeFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface IForeignKeyFieldMetadata extends IFieldMetadata<number> {\n related?: string;\n}\n\nexport interface IReverseForeignKeyFieldMetadata\n extends IFieldMetadata<number> {\n related: string;\n}\n\nexport interface IDetailsFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n many?: boolean;\n model?: T;\n deserialize?: (data: any) => T;\n}\n\nexport interface IManyToManyFieldMetadata extends IFieldMetadata<number[]> {\n related: string;\n}\n\nexport class ForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'fkselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'fkdetails';\n}\n\nexport class ReverseForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n}\n\nexport class DetailsFieldManager<T>\n extends BaseFieldManager<T>\n implements IDetailsFieldMetadata<T>\n{\n public field?: string;\n public many?: boolean;\n public model: any;\n public deserialize?: (data: any) => any;\n\n public override fromJson(data: any, coll?: Collection<any>): any {\n if (data === null) {\n return data;\n }\n if (data === undefined) {\n return undefined;\n }\n if (this.deserialize) {\n return this.deserialize(data);\n }\n if (this.model) {\n if (!this.many) {\n const d = new this.model(coll);\n d.fromJson(data);\n return d;\n } else {\n const out: any[] = [];\n for (const dt of data) {\n const d = new this.model(coll);\n d.fromJson(dt);\n out.push(d);\n }\n return out;\n }\n }\n return data;\n }\n}\n\nexport interface IManyToManyKeyFieldMetadata extends IFieldMetadata<number[]> {\n related?: string;\n}\n\nexport class ManyToManyFieldManager\n extends BaseFieldManager<number[]>\n implements IManyToManyKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'm2mselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'm2mdetails';\n}\n\n/* eslint-disable max-len */\nexport const foreignKeyField = (\n updates: IForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(updates, 'foreignKeyField', ForeignKeyFieldManager);\n\nexport const reverseForeignKeyField = (\n updates: IReverseForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(\n updates,\n 'reverseForeignKeyField',\n ReverseForeignKeyFieldManager\n );\n\nexport const detailsField = (\n meta: IDetailsFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'detailsField', DetailsFieldManager);\n\nexport const manyToManyField = (\n meta: IManyToManyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(meta, 'manyToManyField', ManyToManyFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport type IBooleanFieldMetadata = IFieldMetadata<boolean | null>;\n\nexport class BooleanFieldManager\n extends BaseFieldManager<boolean | null>\n implements IBooleanFieldMetadata\n{\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.checkbox';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'boolean';\n\n public override fromJson(data: any): boolean | null {\n if (data === undefined) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (data === null) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (typeof data === 'boolean') {\n return data as boolean;\n }\n if (typeof data === 'string') {\n if (['true', '1', 'ok', 'yes'].indexOf(data) !== -1) {\n return true;\n }\n return ['false', '0', 'nok', 'no'].indexOf(data) === -1;\n }\n return !!data;\n }\n}\n\nexport const booleanField = (updates: IBooleanFieldMetadata = {}) =>\n genericDataField<boolean | null, IBooleanFieldMetadata, BooleanFieldManager>(\n updates,\n 'booleanField',\n BooleanFieldManager\n );\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { ValidatorFn, Validators } from '@angular/forms';\n\nexport interface IIntegerFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IFloatFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IDecimalFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n factor?: number;\n}\n\nexport class IntegerFieldManager\n extends BaseFieldManager<number>\n implements IIntegerFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n\n public min?: number;\n public max?: number;\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.min !== undefined) {\n v.push(Validators.min(this.min));\n }\n if (this.max !== undefined) {\n v.push(Validators.max(this.max));\n }\n return v;\n }\n}\n\nexport class FloatFieldManager\n extends IntegerFieldManager\n implements IFloatFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n}\n\nexport class DecimalFieldManager\n extends IntegerFieldManager\n implements IDecimalFieldMetadata\n{\n public factor?: number;\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'decimal';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.decimal';\n}\n\n/* eslint-disable max-len */\nexport const integerField = (\n updates: IIntegerFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'integerField', IntegerFieldManager);\n\nexport const floatField = (\n updates: IFloatFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'floatField', FloatFieldManager);\n\nexport const decimalField = (\n updates: IDecimalFieldMetadata = { factor: 100 }\n): FieldDecoratorFn =>\n genericDataField(updates, 'decimalField', DecimalFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport { ICharFieldChoice } from './stringfields';\n\nexport interface IComputedFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n factor?: number;\n choices?: ICharFieldChoice[];\n}\n\nexport class ComputedFieldManager<T>\n extends BaseFieldManager<T>\n implements IComputedFieldMetadata<T>\n{\n public field?: string;\n public override computed = true;\n\n public override fromJson(data: any, coll?: Collection<any>): any {}\n}\n\nexport const computedField = (\n meta: IComputedFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'computedField', ComputedFieldManager);\n","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DataMessageService, Message } from '../message.service';\nimport { CommonModule } from '@angular/common';\nimport { provideAnimations } from '@angular/platform-browser/animations';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-message-zone',\n templateUrl: './message-zone.component.html',\n styleUrls: ['./message-zone.component.sass'],\n imports: [CommonModule],\n providers: [provideAnimations()],\n animations: [\n trigger('dispStatus', [\n transition('void => *', [\n style({ opacity: 0 }),\n animate(550, style({ opacity: 1 })),\n ]),\n transition('* => void', [\n style({ opacity: '*' }),\n animate(550, style({ opacity: 0 })),\n ]),\n ]),\n ]\n})\nexport class MessageZoneComponent implements OnInit {\n @Input() public filter?: string;\n public current: Message[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(public messages: DataMessageService) {}\n\n public ngOnInit(): void {\n this.messages.current\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((messages) => {\n this.current = messages;\n });\n }\n}\n","\n<div class=\"messagezone\">\n <div class=\"alert\" *ngFor=\"let message of current\" [@dispStatus]=\"message.status\" [class]=\"message.style\" (click)=\"message.showTrace=!message.showTrace\">\n <button class=\"btn-close\" type=\"button\" (click)=\"messages.ack(message)\" aria-label=\"Close\"></button><strong>{{message.title}}</strong>&nbsp; {{message.message}}\n <div class=\"pretrace\" *ngIf=\"message.showTrace\">{{message.trace}}</div>\n </div>\n</div>","import {DataModel} from \"./data-model\";\nimport {CollectionMock} from \"./data-collection.mock\";\nimport {FilterData, IQueryMeta, IQuerysetOptions, SortData} from \"./data-query\";\nimport {combineLatest, Observable, of} from \"rxjs\";\n\nexport class QuerysetMock<T extends DataModel> {\n public mockData: T[] = [];\n\n public filterData: FilterData = {};\n public sortData: SortData[] = [];\n public pageSize = 100;\n public page = 1;\n\n public pristine = true;\n public loading = of(false);\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\n constructor(protected _coll: CollectionMock<T>, public options: IQuerysetOptions = {}) {\n\n }\n\n public get results(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n\n public get meta(): Observable<IQueryMeta> {\n return of({\n nav: {count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10},\n parameters: {page: \"page\", page_size: \"page_size\"}\n });\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n return combineLatest([this.results, this.loading, this.meta]);\n }\n\n public filter(params: FilterData = {}): QuerysetMock<T> {\n return this;\n }\n\n public sort(...sorting: string[]): QuerysetMock<T> {\n return this;\n }\n\n public paginateBy(pageSize: number = 20): QuerysetMock<T> {\n return this;\n }\n\n public setPage(page: number): QuerysetMock<T> {\n return this;\n }\n\n public getQueryParams(): FilterData {\n return {};\n }\n\n public get(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n}\n","import {DataModel} from \"./data-model\";\nimport {Observable, of} from \"rxjs\";\nimport {IQuerysetOptions} from \"./data-query\";\nimport {QuerysetMock} from \"./data-query.mock\";\nimport {Collection, IActionParams, IHttpMethod} from \"./data-collection\";\n\nexport class CollectionMock<T extends DataModel> {\n public mockValue?: T;\n public mockValues?: T[];\n public actionValue: any;\n\n constructor(protected model: new(coll: Collection<T>) => T) {\n }\n\n public fetch(id: number, suffix: string = \"\"): Observable<T> {\n return of(this.mockValue as T);\n }\n\n public action(model: T | null, method: IHttpMethod, action: string, params: IActionParams): Observable<any> {\n return of(this.actionValue);\n }\n\n public queryset(options: IQuerysetOptions = {}): QuerysetMock<T> {\n return new QuerysetMock<T>(this, options);\n }\n\n public list(query: { [index: string]: string } = {}, suffix: string = \"\"): Observable<any> {\n return of({results: this.mockValues});\n }\n\n fromJson(data: any, many: boolean = false): T | any {\n if (data && data.id !== undefined) {\n const m = new this.model(this as any);\n m.fromJson(data);\n return m;\n } else {\n if (many && data && data.length) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this as any);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n return data;\n }\n }\n}\n","import {Subscription} from \"rxjs\";\n\nexport interface UploaderOptions {\n concurrency: number;\n allowedContentTypes?: string[];\n maxUploads?: number;\n maxFileSize?: number;\n}\n\nexport interface BlobFile extends Blob {\n name: string;\n}\n\nexport enum UploadStatus {\n Queue,\n Uploading,\n Done,\n Cancelled\n}\n\nexport interface UploadProgress {\n status: UploadStatus;\n data?: {\n percentage: number;\n speed: number;\n speedHuman: string;\n startTime: number | null;\n endTime: number | null;\n eta: number | null;\n etaHuman: string | null;\n };\n}\n\nexport interface UploadFile {\n id: string;\n fileIndex: number;\n lastModifiedDate: Date;\n name: string;\n size: number;\n type: string;\n form: FormData;\n progress: UploadProgress;\n response?: any;\n responseStatus?: number;\n sub?: Subscription | any;\n nativeFile?: File;\n responseHeaders?: { [key: string]: string };\n}\n\nexport interface UploadOutput {\n type: \"addedToQueue\" | \"allAddedToQueue\" | \"uploading\" | \"done\" | \"start\" | \"cancelled\" | \"dragOver\"\n | \"dragOut\" | \"drop\" | \"removed\" | \"removedAll\" | \"rejected\";\n file?: UploadFile;\n nativeFile?: File;\n}\n\nexport interface UploadInput {\n type: \"uploadAll\" | \"uploadFile\" | \"cancel\" | \"cancelAll\" | \"remove\" | \"removeAll\";\n url?: string;\n method?: string;\n id?: string;\n fieldName?: string;\n fileIndex?: number;\n file?: UploadFile;\n data?: { [key: string]: string | Blob };\n headers?: { [key: string]: string };\n includeWebKitFormBoundary?: boolean; // If false, only the file is send trough xhr.send (WebKitFormBoundary is omit)\n withCredentials?: boolean;\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { finalize, mergeMap } from 'rxjs/operators';\nimport {\n BlobFile,\n UploadFile,\n UploadInput,\n UploadOutput,\n UploadStatus,\n} from './interfaces';\n\nexport function humanizeBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 Byte';\n }\n\n const k = 1024;\n const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport class DataUploaderService {\n queue: UploadFile[];\n serviceEvents: EventEmitter<UploadOutput>;\n uploadScheduler: Subject<{ file: UploadFile; event: UploadInput }>;\n subs: { id: string; sub: Subscription }[];\n contentTypes: string[];\n maxUploads: number;\n maxFileSize: number;\n\n constructor(\n concurrency: number = Number.POSITIVE_INFINITY,\n contentTypes: string[] = ['*'],\n maxUploads: number = Number.POSITIVE_INFINITY,\n maxFileSize: number = Number.POSITIVE_INFINITY\n ) {\n this.queue = [];\n this.serviceEvents = new EventEmitter<UploadOutput>();\n this.uploadScheduler = new Subject();\n this.subs = [];\n this.contentTypes = contentTypes;\n this.maxUploads = maxUploads;\n this.maxFileSize = maxFileSize;\n\n this.uploadScheduler\n .pipe(mergeMap((upload) => this.startUpload(upload), concurrency))\n .subscribe((uploadOutput) => this.serviceEvents.emit(uploadOutput));\n }\n\n handleFiles(incomingFiles: FileList): void {\n let acc: File[] = [];\n\n for (let i = 0; i < incomingFiles.length; i++) {\n const futureQueueLength = acc.length + this.queue.length + 1;\n const checkFile = incomingFiles[i];\n if (\n this.isContentTypeAllowed(checkFile.type) &&\n futureQueueLength <= this.maxUploads &&\n this.isFileSizeAllowed(checkFile.size)\n ) {\n acc = acc.concat(checkFile);\n } else {\n const rejectedFile: UploadFile = this.makeUploadFile(checkFile, i);\n this.serviceEvents.emit({ type: 'rejected', file: rejectedFile });\n }\n }\n for (let i = 0; i < acc.length; i++) {\n const file = acc[i];\n const uploadFile: UploadFile = this.makeUploadFile(file, i);\n this.serviceEvents.emit({ type: 'addedToQueue', file: uploadFile });\n this.queue.push(uploadFile);\n }\n this.serviceEvents.emit({ type: 'allAddedToQueue' });\n }\n\n initInputEvents(input: EventEmitter<UploadInput>): Subscription {\n return input.subscribe((event: UploadInput) => {\n switch (event.type) {\n case 'uploadFile':\n const uploadFileIndex = this.queue.findIndex(\n (file) => file === event.file\n );\n if (uploadFileIndex !== -1 && event.file) {\n this.uploadScheduler.next({\n file: this.queue[uploadFileIndex],\n event: event,\n });\n }\n break;\n case 'uploadAll':\n const files = this.queue.filter(\n (file) => file.progress.status === UploadStatus.Queue\n );\n files.forEach((file) =>\n this.uploadScheduler.next({ file: file, event: event })\n );\n break;\n case 'cancel':\n const id = event.id || null;\n if (!id) {\n return;\n }\n const subs = this.subs.filter((sub) => sub.id === id);\n subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n const fileIndex = this.queue.findIndex((file) => file.id === id);\n if (fileIndex !== -1) {\n this.queue[fileIndex].progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({\n type: 'cancelled',\n file: this.queue[fileIndex],\n });\n }\n }\n });\n break;\n case 'cancelAll':\n this.subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n }\n\n const file = this.queue.find(\n (uploadFile) => uploadFile.id === sub.id\n );\n if (file) {\n file.progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({ type: 'cancelled', file: file });\n }\n });\n break;\n case 'remove':\n if (!event.id) {\n return;\n }\n\n const i = this.queue.findIndex((file) => file.id === event.id);\n if (i !== -1) {\n const file = this.queue[i];\n this.queue.splice(i, 1);\n this.serviceEvents.emit({ type: 'removed', file: file });\n }\n break;\n case 'removeAll':\n if (this.queue.length) {\n this.queue = [];\n this.serviceEvents.emit({ type: 'removedAll' });\n }\n break;\n }\n });\n }\n\n startUpload(upload: {\n file: UploadFile;\n event: UploadInput;\n }): Observable<UploadOutput> {\n return new Observable((observer) => {\n const sub = this.uploadFile(upload.file, upload.event)\n .pipe(\n finalize(() => {\n if (!observer.closed) {\n observer.complete();\n }\n })\n )\n .subscribe({\n next: (output) => {\n observer.next(output);\n },\n error: (err) => {\n observer.error(err);\n observer.complete();\n },\n complete: () => {\n observer.complete();\n },\n });\n\n this.subs.push({ id: upload.file.id, sub: sub });\n });\n }\n\n uploadFile(file: UploadFile, event: UploadInput): Observable<UploadOutput> {\n return new Observable((observer) => {\n const url = event.url || '';\n const method = event.method || 'POST';\n const data = event.data || {};\n const headers = event.headers || {};\n\n const xhr = new XMLHttpRequest();\n const time: number = new Date().getTime();\n let progressStartTime: number =\n (file.progress.data && file.progress.data.startTime) || time;\n let speed = 0;\n let eta: number | null = null;\n\n xhr.upload.addEventListener(\n 'progress',\n (e: ProgressEvent) => {\n if (e.lengthComputable) {\n const percentage = Math.round((e.loaded * 100) / e.total);\n const diff = new Date().getTime() - time;\n speed = Math.round((e.loaded / diff) * 1000);\n progressStartTime =\n (file.progress.data && file.progress.data.startTime) ||\n new Date().getTime();\n eta = Math.ceil((e.total - e.loaded) / speed);\n\n file.progress = {\n status: UploadStatus.Uploading,\n data: {\n percentage: percentage,\n speed: speed,\n speedHuman: `${humanizeBytes(speed)}/s`,\n startTime: progressStartTime,\n endTime: null,\n eta: eta,\n etaHuman: this.secondsToHuman(eta),\n },\n };\n\n observer.next({ type: 'uploading', file: file });\n }\n },\n false\n );\n\n xhr.upload.addEventListener('error', (e: Event) => {\n observer.error(e);\n observer.complete();\n });\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedAverage = Math.round(\n (file.size / (new Date().getTime() - progressStartTime)) * 1000\n );\n file.progress = {\n status: UploadStatus.Done,\n data: {\n percentage: 100,\n speed: speedAverage,\n speedHuman: `${humanizeBytes(speedAverage)}/s`,\n startTime: progressStartTime,\n endTime: new Date().getTime(),\n eta: eta,\n etaHuman: this.secondsToHuman(eta || 0),\n },\n };\n\n file.responseStatus = xhr.status;\n try {\n file.response = JSON.parse(xhr.response);\n } catch (e) {\n file.response = xhr.response;\n }\n\n file.responseHeaders = this.parseResponseHeaders(\n xhr.getAllResponseHeaders()\n );\n\n observer.next({ type: 'done', file: file });\n\n observer.complete();\n }\n };\n\n xhr.open(method, url, true);\n xhr.withCredentials = !!event.withCredentials;\n\n try {\n const uploadFile = <BlobFile>file.nativeFile;\n const uploadIndex = this.queue.findIndex(\n (outFile) => outFile.nativeFile === uploadFile\n );\n\n if (\n this.queue[uploadIndex].progress.status === UploadStatus.Cancelled\n ) {\n observer.complete();\n }\n\n Object.keys(headers).forEach((key) =>\n xhr.setRequestHeader(key, headers[key])\n );\n\n let bodyToSend: FormData | BlobFile;\n\n if (event.includeWebKitFormBoundary !== false) {\n Object.keys(data).forEach((key) => file.form.append(key, data[key]));\n file.form.append(\n event.fieldName || 'file',\n uploadFile,\n uploadFile.name\n );\n bodyToSend = file.form;\n } else {\n bodyToSend = uploadFile;\n }\n\n this.serviceEvents.emit({ type: 'start', file: file });\n xhr.send(bodyToSend);\n } catch (e) {\n observer.complete();\n }\n\n return () => {\n xhr.abort();\n };\n });\n }\n\n secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().substring(11, 11 + 8);\n }\n\n generateId(): string {\n return Math.random().toString(36).substring(7);\n }\n\n setContentTypes(contentTypes: string[]): void {\n if (typeof contentTypes !== 'undefined' && contentTypes instanceof Array) {\n if (contentTypes.find((type: string) => type === '*') !== undefined) {\n this.contentTypes = ['*'];\n } else {\n this.contentTypes = contentTypes;\n }\n return;\n }\n this.contentTypes = ['*'];\n }\n\n allContentTypesAllowed(): boolean {\n return this.contentTypes.find((type: string) => type === '*') !== undefined;\n }\n\n isContentTypeAllowed(mimetype: string): boolean {\n if (this.allContentTypesAllowed()) {\n return true;\n }\n return (\n this.contentTypes.find((type: string) => type === mimetype) !== undefined\n );\n }\n\n isFileSizeAllowed(fileSize: number): boolean {\n if (!this.maxFileSize) {\n return true;\n }\n return fileSize <= this.maxFileSize;\n }\n\n makeUploadFile(file: File, index: number): UploadFile {\n return {\n fileIndex: index,\n id: this.generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n form: new FormData(),\n progress: {\n status: UploadStatus.Queue,\n data: {\n percentage: 0,\n speed: 0,\n speedHuman: `${humanizeBytes(0)}/s`,\n startTime: null,\n endTime: null,\n eta: null,\n etaHuman: null,\n },\n },\n lastModifiedDate: new Date(file.lastModified),\n sub: undefined,\n nativeFile: file,\n };\n }\n\n private parseResponseHeaders(httpHeaders: string): { [key: string]: string } {\n if (!httpHeaders) {\n return {};\n }\n\n return httpHeaders\n .split('\\n')\n .map((x: string) => x.split(/: */, 2))\n .filter((x: string[]) => x[0])\n .reduce((acc: { [key: string]: string }, x: string[]) => {\n acc[x[0]] = x[1];\n return acc;\n }, {});\n }\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadInput, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileDrop]\",\n standalone: false\n})\nexport class NgFileDropDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<UploadInput>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n\n this.el.addEventListener(\"drop\", this.stopEvent, false);\n this.el.addEventListener(\"dragenter\", this.stopEvent, false);\n this.el.addEventListener(\"dragover\", this.stopEvent, false);\n }\n\n ngOnDestroy() {\n if (this._sub) {\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n stopEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n @HostListener(\"drop\", [\"$event\"])\n public onDrop(e: any) {\n e.stopPropagation();\n e.preventDefault();\n\n const event: UploadOutput = {type: \"drop\"};\n this.uploadOutput.emit(event);\n this.upload.handleFiles(e.dataTransfer.files);\n }\n\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOver\"};\n this.uploadOutput.emit(event);\n }\n\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOut\"};\n this.uploadOutput.emit(event);\n }\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileSelect]\",\n standalone: false\n})\nexport class NgFileSelectDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<any>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n this.el.addEventListener(\"change\", this.fileListener, false);\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n }\n\n ngOnDestroy() {\n if (this.el) {\n this.el.removeEventListener(\"change\", this.fileListener, false);\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n fileListener = () => {\n if (this.el.files) {\n this.upload.handleFiles(this.el.files);\n }\n };\n}\n","import {NgModule} from \"@angular/core\";\nimport {NgFileDropDirective} from \"./ng-file-drop.directive\";\nimport {NgFileSelectDirective} from \"./ng-file-select.directive\";\n\n@NgModule({\n declarations: [NgFileDropDirective, NgFileSelectDirective],\n exports: [NgFileDropDirective, NgFileSelectDirective]\n})\nexport class NgxUploaderModule {\n}\n","import { Route, Router } from '@angular/router';\n\n/**\n * Template function type.\n * Used for page title or other data to string operations.\n *\n * @param data: object\n * @param path: optional path (see: usage)\n */\nexport type TplFn<T> = (data: T, path?: string) => string;\n\n/**\n * Base route parameters interface.\n */\nexport interface BaseRouteParams {\n /** Skip route in breadcrumbs */\n skip?: boolean;\n /** Route title or title template */\n title?: string | TplFn<any>;\n /** Route icon string */\n icon?: string;\n /** Route config item */\n route: RouteConfigItem;\n /** This route is a tree route */\n tree?: boolean;\n}\n\n/**\n * Route function type.\n * Takes parameters, return a route.\n */\nexport type RouteFn = (...args: any[]) => (string | number)[];\n\n/**\n * Route config item.\n * Stores route named parameters, route function and route name.\n */\nexport interface RouteConfigItem {\n params: string[];\n route: RouteFn;\n name: string;\n}\n\nexport function RData<T extends BaseRouteParams>(value: T) {\n return value;\n}\n\nexport type RoutesConfig<T extends string> = {\n readonly [Property in T]: RouteConfigItem;\n};\n\nexport interface StrictRoutes extends Route {\n data: BaseRouteParams;\n}\n\nexport type RoutesDefinition = StrictRoutes[];\n\ninterface RouteArg<T> {\n [index: string]: T;\n}\n\nexport class Link<T> {\n private _cargs: { [index: string]: any } = {};\n private _params: string[] = [];\n private _route: RouteFn;\n private _router?: Router;\n\n constructor(config: RouteConfigItem, context: any, router?: Router) {\n this._params = config.params || [];\n this._route = config.route;\n this._router = router;\n this._name = config.name;\n if (context) {\n this.context(context);\n }\n }\n\n private _name!: string;\n\n public get name(): string {\n return this._name;\n }\n\n public context(ctx: any): void {\n for (const n of this._params) {\n if (ctx && ctx[n]) {\n this._cargs[n] = ctx[n];\n } else {\n this._cargs[n] = null;\n }\n }\n }\n\n public route(params?: Required<RouteArg<T>>): (string | number)[] {\n const rargs: any[] = [];\n for (const n of this._params) {\n if (params && params[n] !== undefined && params[n] !== null) {\n rargs.push(params[n]);\n } else if (this._cargs[n] !== undefined && this._cargs[n] !== null) {\n rargs.push(this._cargs[n]);\n } else {\n console.error('Missing route parameter', n);\n return [];\n }\n }\n // SEE: Check for undefined in rargs\n return this._route(...rargs);\n }\n\n public async navigate(\n params?: { [index: string]: T },\n router?: Router\n ): Promise<boolean> {\n if (router) {\n return router.navigate(this.route(params));\n }\n if (this._router) {\n return this._router.navigate(this.route(params));\n }\n console.error('Router not provided, no navigation');\n return false;\n }\n}\n","import {\n Component,\n DestroyRef,\n inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterModule,\n RouterState,\n UrlSegment,\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { BaseRouteParams, TplFn } from '../routing';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IPathTreeItem {\n path: string;\n title: string;\n icon: string;\n current: boolean;\n}\n\n/**\n * Use data from route config to create a breadcrumb for current route.\n *\n * Route config data is :\n * - title : route fragment title or lodash template to build title\n * (provided arguments for template processing : route (current segment route snapshot)\n * and data (input argument)\n * - icon: icon classes. Example fa fa-home for home & font awesome\n */\n@Component({\n selector: 'data-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.css'],\n imports: [CommonModule, RouterModule]\n})\nexport class BreadcrumbComponent implements OnChanges, OnInit {\n /**\n * Additional data to be used in titleTemplate\n */\n @Input() public data: any;\n /**\n * Do we display icons ?\n */\n @Input() public icons = true;\n public tree: IPathTreeItem[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(\n public router: Router,\n public route: ActivatedRoute,\n ) {}\n\n ngOnInit(): void {\n this.getRouteTree(this.router.routerState);\n this.router.events\n .pipe(\n takeUntilDestroyed(this.destroy$),\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.getRouteTree(this.router.routerState);\n });\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.getRouteTree(this.router.routerState);\n }\n\n public getRouteTree(current: RouterState): void {\n const tree: IPathTreeItem[] = [];\n const url: string[] = [];\n let p: ActivatedRouteSnapshot | null = current.root.snapshot;\n\n while (p != null) {\n let rdata: Partial<BaseRouteParams> = {\n tree: false,\n title: () => 'xxxx',\n icon: '',\n skip: true,\n };\n const data = p.data as BaseRouteParams;\n\n // Get route data\n if (p.routeConfig && p.routeConfig.data) {\n rdata = p.routeConfig.data as BaseRouteParams;\n }\n\n if (rdata.tree) {\n // Get icon\n for (const u of p.url) {\n url.push(u.path);\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data, u),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n } else {\n url.push(p.url.join('/'));\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n\n p = p.firstChild;\n }\n if (tree.length > 0) {\n tree[tree.length - 1].current = true;\n }\n this.tree = tree;\n }\n\n public getTitle(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n u?: UrlSegment,\n ): string {\n if (rdata['title']) {\n if (typeof rdata['title'] === 'function') {\n const tpl: TplFn<any> = rdata['title'];\n try {\n if (u) {\n return tpl(data, u.path);\n } else {\n return tpl(data);\n }\n } catch (e) {\n console.warn('Unable to process breadcrumb function', e);\n if (data.title != null) {\n return 'xx';\n }\n }\n } else {\n return rdata['title'];\n }\n }\n return 'xxx';\n }\n\n public getIcon(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n ): string {\n if (data.icon) {\n return data.icon;\n }\n return '';\n }\n}\n","\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n <ng-container *ngFor=\"let p of tree\">\n <li class=\"breadcrumb-item\" *ngIf=\"!p.current\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container></a></li>\n <li class=\"breadcrumb-item active\" aria-current=\"page\" *ngIf=\"p.current\">\n <ng-container *ngIf=\"icons &amp;&amp; p.icon\"><i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}</ng-container>\n <ng-container *ngIf=\"!(icons &amp;&amp; p.icon)\">{{p.title}}</ng-container>\n </li>\n </ng-container>\n </ol>\n</nav>","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, UrlSegment } from '@angular/router';\n\ninterface ITabStoredMem {\n name: string;\n value: string;\n}\n\nexport class NavDriver {\n private lastActive!: Date;\n\n constructor(\n private _parent: TabMemoryService,\n public name: string,\n public defaults: string,\n private save: boolean\n ) {\n this._current = this.defaults;\n if (this.save) {\n const value = this._parent.load(this.name);\n if (value !== null) {\n this._current = value;\n }\n }\n }\n\n private _current: string;\n\n public get current(): string {\n return this._current;\n }\n\n public set current(value: string) {\n this._current = value;\n this.lastActive = new Date();\n if (this.save) {\n this._parent.save();\n }\n }\n\n public get value(): ITabStoredMem {\n return { name: this.name, value: this._current };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabMemoryService {\n private tabMem: { [index: string]: NavDriver } = {};\n\n constructor(private _route: ActivatedRoute) {}\n\n private static targetToString(\n target: (string | number | UrlSegment)[]\n ): string {\n let out = '';\n for (const t of target) {\n out += `/${t}`;\n }\n return out;\n }\n\n public memFor(\n target: (string | number | UrlSegment)[],\n defaults: string,\n save: boolean = true,\n fragment?: string | null\n ): NavDriver {\n const tname = TabMemoryService.targetToString(target);\n if (this.tabMem[tname] === undefined) {\n this.tabMem[tname] = new NavDriver(this, tname, defaults, save);\n }\n if (fragment) {\n this.tabMem[tname].current = fragment;\n }\n return this.tabMem[tname];\n }\n\n public save() {\n const tosave: { [index: string]: ITabStoredMem } = {};\n for (const tn of Object.keys(this.tabMem)) {\n tosave[tn] = this.tabMem[tn].value;\n }\n localStorage.setItem('tabmem', JSON.stringify(tosave));\n }\n\n public load(name: string): string | null {\n const tm = localStorage.getItem('tabmem');\n if (tm) {\n const tmd = JSON.parse(tm);\n if (tmd && tmd[name] && tmd[name].value) {\n return tmd[name].value;\n }\n }\n return null;\n }\n}\n","export const slugify = (str: string): string => {\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\n str = str.toLowerCase();\n\n // remove accents, swap ñ for n, etc\n const from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;';\n const to = 'aaaaeeeeiiiioooouuuunc------';\n for (let i = 0, l = from.length; i < l; i++) {\n str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n }\n\n str = str\n .replace(/[^a-z0-9 -]/g, '') // remove invalid chars\n .replace(/\\s+/g, '-') // collapse whitespace and replace by -\n .replace(/-+/g, '-'); // collapse dashes\n\n return str;\n};\n","// By default, Underscore uses ERB-style template delimiters, change the\n// following template settings to use alternative delimiters.\nconst settings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g,\n variable: 'obj',\n};\n\n// When customizing `templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nconst noMatch = /.^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nlet escapes: { [index: string]: string } = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n r: '\\r',\n n: '\\n',\n t: '\\t',\n u2028: '\\u2028',\n u2029: '\\u2029',\n};\n\nfor (let p in escapes) {\n escapes[escapes[p]] = p;\n}\n\nconst escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\nconst unescaper = /\\\\(\\\\|'|r|n|t|u2028|u2029)/g;\n\nexport const tmpl = (text: string, data?: any, objectName?: string) => {\n if (objectName) {\n settings.variable = objectName;\n }\n\n // Compile the template source, taking care to escape characters that\n // cannot be included in a string literal and then unescape them in code\n // blocks.\n let source =\n \"__p+='\" +\n text\n .replace(escaper, function (match) {\n return '\\\\' + escapes[match];\n })\n .replace(settings.escape || noMatch, function (match, code) {\n return \"'+\\n_.escape(\" + unescape(code) + \")+\\n'\";\n })\n .replace(settings.interpolate || noMatch, function (match, code) {\n return \"'+\\n(\" + unescape(code) + \")+\\n'\";\n })\n .replace(settings.evaluate || noMatch, function (match, code) {\n return \"';\\n\" + unescape(code) + \"\\n;__p+='\";\n }) +\n \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) {\n source = 'with(obj||{}){\\n' + source + '}\\n';\n }\n\n source =\n \"var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\\n\" +\n source +\n 'return __p;\\n';\n\n var render = new Function(settings.variable || 'obj', source);\n\n if (data) {\n return render(data);\n }\n\n const template = (data: any) => {\n return render.call(this, data);\n };\n\n // Provide the compiled function source as a convenience for build time\n // precompilation.\n template.source =\n 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\n return template;\n};\n","import { ApplicationRef, Injectable } from '@angular/core';\nimport { SwUpdate, VersionReadyEvent } from '@angular/service-worker';\nimport { filter, first, map, tap } from 'rxjs/operators';\nimport { merge, Observable, ReplaySubject, timer } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UpdateService {\n private stable = false;\n\n constructor(private appRef: ApplicationRef, private swUpdate: SwUpdate) {\n this._available$ = new ReplaySubject<boolean>(1);\n this._available$.next(false);\n const appIsStable$ = this.appRef.isStable\n .pipe(first((isStable) => isStable))\n .pipe(tap(() => console.log('App is stable')));\n const checkInterval$ = timer(10 * 1000, 5 * 60 * 1000);\n const checkWhenStable$ = merge(appIsStable$, checkInterval$);\n const updatesAvailable = swUpdate.versionUpdates.pipe(\n tap((evt) => console.log('Version updates event', evt)),\n filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),\n map((evt) => ({\n type: 'UPDATE_AVAILABLE',\n current: evt.currentVersion,\n available: evt.latestVersion,\n }))\n );\n updatesAvailable.subscribe(async (evt) => {\n this._available$.next(true);\n });\n checkWhenStable$.subscribe(async () => {\n this.stable = true;\n try {\n console.log('Checking for update');\n const res = await swUpdate.checkForUpdate();\n console.log('Check for update result', res);\n } catch (e) {\n console.warn('No service worker');\n }\n });\n }\n\n private _available$: ReplaySubject<boolean>;\n\n public get available$(): Observable<boolean> {\n return this._available$.asObservable();\n }\n\n public activate(): void {\n this._available$.next(false);\n console.log('RELOADING FULL PAGE');\n document.location.reload();\n }\n\n public dismiss(): void {\n this._available$.next(false);\n }\n}\n","import { Component } from '@angular/core';\nimport { UpdateService } from '../update.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-update',\n templateUrl: './update.component.html',\n styleUrls: ['./update.component.sass'],\n imports: [CommonModule]\n})\nexport class UpdateComponent {\n constructor(public update: UpdateService) {}\n}\n","\n<div class=\"snack\" *ngIf=\"update.available$|async\">\n <p>Une nouvelle version de l'application est disponible.</p>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <button class=\"btn btn-primary btn-block w-100\" (click)=\"update.activate()\">L'ACTIVER MAINTENANT</button>\n </div>\n <div class=\"col-sm-6\">\n <button class=\"btn btn-warning btn-block w-100\" (click)=\"update.dismiss()\">Plus tard</button>\n </div>\n </div>\n</div>","/*\n * Public API Surface of data\n */\n\nexport * from './lib/data/data-parameters';\nexport * from './lib/data/data-model';\nexport * from './lib/data/data-collection';\nexport * from './lib/data/data-backend';\nexport * from './lib/data/data-query';\n\nexport * from './lib/modellist/model-list.service';\nexport * from './lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component';\nexport * from './lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component';\nexport * from './lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters/model-list-filters.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters';\nexport * from './lib/modellist/model-list-filters/model-list-filter';\nexport * from './lib/modellist/model-list-filters/model-list-filter-group';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban';\n\nexport * from './lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component';\n\nexport * from './lib/dispedit/choice.pipe';\nexport * from './lib/dispedit/factor.pipe';\nexport * from './lib/dispedit/factorc.pipe';\nexport * from './lib/dispedit/dispedit/dispedit.component';\nexport * from './lib/dispedit/fkselect/fkselect.component';\nexport * from './lib/dispedit/m2mselect/m2mselect.component';\nexport * from './lib/dispedit/flags/flags.component';\nexport * from './lib/dispedit/richedit/richedit.component';\n\nexport * from './lib/dispedit/sdelete/sdelete.component';\nexport * from './lib/data/fields/index';\n\nexport * from './lib/messages/message.service';\nexport * from './lib/messages/message-zone/message-zone.component';\n\nexport * from './lib/data/data-collection.mock';\nexport * from './lib/uploader/index';\n\nexport * from './lib/auth/auth.service';\nexport * from './lib/auth/auth-interceptor.service';\nexport * from './lib/auth/jwt';\n\nexport * from './lib/routing/routing';\nexport * from './lib/routing/breadcrumb/breadcrumb.component';\n\nexport * from './lib/utils/tab-memory.service';\nexport * from './lib/utils/slugify';\nexport * from './lib/utils/template';\n\nexport * from './lib/updates/update.service';\nexport * from './lib/updates/update/update.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.DataMessageService","i2.DataMessageService","this","i1.UpdateService"],"mappings":"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"}
1
+ {"version":3,"file":"solidev-data.mjs","sources":["../../../projects/data/src/lib/data/data-parameters.ts","../../../projects/data/src/lib/data/fields/base.ts","../../../projects/data/src/lib/data/data-model.ts","../../../projects/data/src/lib/data/data-query.ts","../../../projects/data/src/lib/data/data-collection.ts","../../../projects/data/src/lib/data/data-backend.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters.ts","../../../projects/data/src/lib/auth/jwt.ts","../../../projects/data/src/lib/auth/auth.service.ts","../../../projects/data/src/lib/auth/auth-interceptor.service.ts","../../../projects/data/src/lib/modellist/model-list.service.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.html","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.ts","../../../projects/data/src/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.html","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.ts","../../../projects/data/src/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.ts","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.html","../../../projects/data/src/lib/modellist/model-list-filters/model-list-filter-group.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.ts","../../../projects/data/src/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.ts","../../../projects/data/src/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.html","../../../projects/data/src/lib/dispedit/choice.pipe.ts","../../../projects/data/src/lib/dispedit/factor.pipe.ts","../../../projects/data/src/lib/dispedit/factorc.pipe.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.ts","../../../projects/data/src/lib/dispedit/fkselect/fkselect.component.html","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.ts","../../../projects/data/src/lib/dispedit/m2mselect/m2mselect.component.html","../../../projects/data/src/lib/messages/message.service.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.ts","../../../projects/data/src/lib/dispedit/dispedit/dispedit.component.html","../../../projects/data/src/lib/dispedit/flags/flags.component.ts","../../../projects/data/src/lib/dispedit/flags/flags.component.html","../../../projects/data/src/lib/dispedit/richedit/richedit.component.ts","../../../projects/data/src/lib/dispedit/richedit/richedit.component.html","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.ts","../../../projects/data/src/lib/dispedit/sdelete/sdelete.component.html","../../../projects/data/src/lib/data/fields/stringfields.ts","../../../projects/data/src/lib/data/fields/primaryfield.ts","../../../projects/data/src/lib/data/fields/datetime.ts","../../../projects/data/src/lib/data/fields/relations.ts","../../../projects/data/src/lib/data/fields/boolean.ts","../../../projects/data/src/lib/data/fields/numbers.ts","../../../projects/data/src/lib/data/fields/computed.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.ts","../../../projects/data/src/lib/messages/message-zone/message-zone.component.html","../../../projects/data/src/lib/data/data-query.mock.ts","../../../projects/data/src/lib/data/data-collection.mock.ts","../../../projects/data/src/lib/uploader/interfaces.ts","../../../projects/data/src/lib/uploader/ngx-uploader.class.ts","../../../projects/data/src/lib/uploader/ng-file-drop.directive.ts","../../../projects/data/src/lib/uploader/ng-file-select.directive.ts","../../../projects/data/src/lib/uploader/ngx-uploader.module.ts","../../../projects/data/src/lib/routing/routing.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.ts","../../../projects/data/src/lib/routing/breadcrumb/breadcrumb.component.html","../../../projects/data/src/lib/utils/tab-memory.service.ts","../../../projects/data/src/lib/utils/slugify.ts","../../../projects/data/src/lib/utils/template.ts","../../../projects/data/src/lib/updates/update.service.ts","../../../projects/data/src/lib/updates/update/update.component.ts","../../../projects/data/src/lib/updates/update/update.component.html","../../../projects/data/src/public-api.ts","../../../projects/data/src/solidev-data.ts"],"sourcesContent":["import {InjectionToken} from \"@angular/core\";\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_API_URL = new InjectionToken<string>(\"data.api.url\");\n/**\n * DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time\n * If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used\n */\nexport const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken<number>(\"data.max.transfer.state\");\n\n/**\n * DataDisplayConfig interface provides default values for display classes\n */\nexport interface DataDisplayConfig {\n dispEdit: {\n defaultMode: \"inline\" | \"dd\";\n inputClasses: {[index: string]: string};\n };\n}\n\nexport const BootstrapDataDisplayConfig: DataDisplayConfig = {\n dispEdit: {\n defaultMode: \"dd\",\n inputClasses: {\n \"input.text\": \"form-control\",\n \"input.email\": \"form-control\",\n \"input.datetime\": \"form-control\",\n \"input.date\": \"form-control\",\n \"input.number\": \"form-control\",\n \"input.decimal\": \"form-control\",\n \"input.checkbox\": \"form-control\",\n \"input.password\":\"form-control\",\n \"textarea\": \"form-control\",\n \"quill\": \"\",\n \"fkselect\": \"form-control\",\n \"select\": \"form-select\"\n },\n }\n};\n\n\n/**\n * DATA_DISPLAY_CONFIG: display config & default classes injection token\n */\nexport const DATA_DISPLAY_CONFIG = new InjectionToken<DataDisplayConfig>(\"data.display.config\");\n","import 'reflect-metadata';\nimport { FormControl, ValidatorFn, Validators } from '@angular/forms';\nimport { DataModel } from '../data-model';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport const PROPERTY_METADATA_KEY = Symbol('ngxDataMetadata');\n\n/**\n * Descriptive info for all fields.\n * All are optional.\n */\nexport interface IFieldMetadata<FT> {\n /** Field name (for display, column title, etc..) */\n name?: string;\n /** Field help text (for input) */\n help?: string;\n /** Field description (for details on hover etc..) */\n description?: string;\n /** Field required : no undefined allowed on save ? */\n required?: boolean;\n /** Field cannot be updated */\n readonly?: boolean;\n /** Default value */\n defaultValue?: FT | ((args: any) => FT) | null;\n /** Priority : first fields = higher priority */\n priority?: number;\n}\n\n/**\n * Base field manager, stores metadata and provides common field utilities\n *\n * - name : field name, should be the same in data structure and model\n * - help : field help text, blank by default\n * - description : field name for humans\n * - readonly : field is readonly (cannot be changed / pushed to api)\n * - default : default value for field\n *\n * - editor_type : editor type\n * - display_type : display type\n *\n * - fromJson(data) : deserializer\n * - toJson(data) : serialiser\n * - toString(data,format) : to string, for display\n *\n * - formControl : returns field form control\n * - validators : returns field validator\n */\nexport class BaseFieldManager<FT> implements IFieldMetadata<FT> {\n /** Name is mandatory in a field manager. It is given by\n * field decorator if not directly given in field manager. */\n public name!: string;\n public description!: string;\n public help!: string;\n public required = false;\n public readonly = false;\n public computed = false;\n public priority = 0;\n public defaultValue?: FT | ((args: any) => FT);\n\n public editorType: DISPEDIT_EDITOR_TYPES = 'input.text';\n public displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n\n constructor(params: IFieldMetadata<FT>) {\n Object.assign(this, params);\n if (!this.name) {\n this.name = 'noname';\n }\n if (!this.description) {\n this.description = this.name;\n }\n if (!this.help) {\n this.help = '';\n }\n this.getDefaultValue();\n }\n\n /** Return field validators */\n public get validators(): ValidatorFn[] {\n return this.getValidators();\n }\n\n /** Returns current field name */\n public get fname(): string {\n return this.name.split('__')[1] || this.name;\n }\n\n /** Create a new typed formControl for this field. */\n public formControl(instance: DataModel): FormControl<FT | null> {\n return new FormControl<FT>(\n ((instance as any)[this.fname] as FT) || (this.getDefaultValue() as FT),\n this.validators\n );\n }\n\n /** JSON deserializer base method. */\n public fromJson(data: any): FT {\n return data as FT;\n }\n\n /** JSON serializer base method. */\n public toJson(data: FT): any {\n return data as any;\n }\n\n /**\n * Display value (as string)\n * @param data\n * @param format (not used)\n */\n public toString(data: FT, format: string = 'default'): string {\n return `${data}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n */\n public default(args: any = {}): FT | undefined {\n return this.getDefaultValue(args);\n }\n\n /** Return validators\n *\n * @protected\n */\n protected getValidators(): ValidatorFn[] {\n const v: ValidatorFn[] = [];\n if (this.required) {\n v.push(Validators.required);\n }\n return v;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected getDefaultValue(args: any = {}): FT | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`\n );\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Field data stored on reflected metadata.\n */\nexport interface IFieldStoredMetadata<FT> extends IFieldMetadata<FT> {\n self: string;\n name: string;\n type: string;\n manager: BaseFieldManager<FT>;\n}\n\n/** Util to get own object keys */\nconst ownKeys = (target: any): any =>\n Object.getOwnPropertyNames(target).concat(\n Object.getOwnPropertySymbols(target) as any\n );\n\n/** Manager constructor\n * FT is js field type;\n * T is manager type\n * */\ntype BaseFieldManagerConstructor<FT, T extends BaseFieldManager<FT>> = new (\n params: any\n) => T;\n\n/**\n * Field decorator function\n */\nexport type FieldDecoratorFn = (\n target: any,\n propertyKey: string | symbol\n) => void;\n\n/**\n * Creates a field decorator that can only be applied within\n * an object containing a static __name property.\n *\n *\n * @param meta field metadata\n * @param type field type code\n * @param manager field manager\n */\nexport function genericDataField<\n FT,\n MD extends IFieldMetadata<FT>,\n MG extends BaseFieldManager<FT>\n>(\n meta: MD,\n type: string,\n manager: BaseFieldManagerConstructor<FT, MG>\n): FieldDecoratorFn {\n return (target: DataModel, propertyKey: string | symbol) => {\n const allMetadata: Map<\n string,\n IFieldStoredMetadata<any>\n > = Reflect.getMetadata(PROPERTY_METADATA_KEY, target) ||\n new Map<string, IFieldStoredMetadata<any>>();\n let cname: string = `${(target.constructor as any).__name}`;\n if ((cname === `undefined` || cname === '') && type !== 'primaryField') {\n throw Error(\n `Decorator ${type} allowed only on classes with static __name field : \"${cname}\" found for - ${target}`\n );\n }\n const pk = `${cname}__${String(propertyKey)}`;\n let cm = allMetadata.get(pk);\n /* istanbul ignore if */\n if (cm) {\n // This should never occur as metadata is object bound and property names must be unique\n throw Error(`Field ${pk} already defined = ${cm}`);\n }\n cm = {} as IFieldStoredMetadata<any>;\n for (const key of ownKeys(meta as any)) {\n (cm as any)[key] = (meta as any)[key];\n }\n if (meta.name === undefined) {\n cm.name = `${String(propertyKey)}`;\n }\n cm.type = type;\n cm.self = pk;\n cm.manager = new manager(cm);\n allMetadata.set(pk, cm);\n Reflect.defineMetadata(PROPERTY_METADATA_KEY, allMetadata, target);\n };\n}\n","import {\n BaseFieldManager,\n IFieldStoredMetadata,\n PROPERTY_METADATA_KEY,\n} from './fields/base';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport { Collection } from './data-collection';\nimport { Observable, throwError } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nexport type DataModelFields = Readonly<Map<string, IFieldStoredMetadata<any>>>;\n\n/**\n * Base class for data model.\n *\n * Each class must have a static __name\n * primary field is given with id field.\n *\n * Some methods are provided to be used with a collection, mostly for CRUD operations.\n *\n */\nexport class DataModel {\n /**\n * data model name\n * this need to be given because class name is not fully available because of minification.\n */\n protected static readonly __name: string = '';\n\n /**\n * Primary field; readonly; must be created and auto incremented on db side.\n */\n // @primaryField({\n // description: 'ID',\n // help: 'Identifiant primaire',\n // })\n public id!: number;\n private readonly _F: DataModelFields;\n\n /**\n * Constructor for data model instance.\n * A matching collection can be provided.\n * ___fields readonly property is also populated from Reflected metadata\n *\n * @param _coll collection used for CRUD, etc..\n */\n constructor(protected _coll?: Collection<any>) {\n const md: Map<string, IFieldStoredMetadata<any>> | undefined =\n Reflect.getMetadata(PROPERTY_METADATA_KEY, this);\n // istanbul ignore if\n if (!md) {\n // This should never occur as all datamodel have at least id field\n throw new Error(\n 'No property metadata found for this object; is there a property in current collection ?'\n );\n }\n // Get all fields from current class and its parents\n const fields = new Map<string, IFieldStoredMetadata<any>>();\n let parent = Object.getPrototypeOf(this);\n while (parent.constructor.name !== 'Object') {\n for (const f of md.keys()) {\n const fieldName = f.split('__')[1];\n if (fields.has(fieldName)) {\n continue;\n }\n if (f.indexOf(parent.constructor.__name + '__') === 0) {\n fields.set(fieldName, md.get(f)!);\n }\n }\n parent = Object.getPrototypeOf(parent);\n }\n this._F = Object.freeze(fields);\n }\n\n public get _collection(): Collection<any> {\n return this._coll as Collection<any>;\n }\n\n public set _collection(coll: Collection<any>) {\n this._coll = coll;\n }\n\n /**\n * HashMap of fields metadata (type, name, manager, etc...)\n */\n public get F(): DataModelFields {\n // istanbul ignore if\n if (!this._F) {\n throw new Error('Invalid data model, fields metadata is missing');\n }\n return this._F;\n }\n\n // Return field names iterator\n public get FN(): IterableIterator<string> {\n return this.F.keys();\n }\n\n /**\n * Loads model data from json.\n * If partial is true, only fields with matching data keys will be loaded\n * @param data\n * @param options\n */\n public fromJson(\n data: { [index: string]: any },\n { partial, check }: { partial?: boolean; check?: boolean } = {\n partial: false,\n check: false,\n }\n ): null | ValidationErrors {\n const errors: { [index: string]: null | ValidationErrors } = {};\n let haveError = false;\n for (const f of this.FN) {\n if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {\n const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);\n if (ferr !== null) {\n errors[f] = ferr;\n haveError = true;\n }\n }\n }\n return haveError ? errors : null;\n }\n\n public toJson(fields?: string | string[]): any {\n if (fields && !Array.isArray(fields)) {\n fields = [fields];\n }\n const out: { [index: string]: any } = {};\n const fl = this.F;\n for (const f of this.FN) {\n const mgr = this.FM(f);\n if (!fields || fields.length === 0) {\n if (mgr.readonly) {\n continue;\n }\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n } else {\n if (fields.indexOf(f) !== -1) {\n out[f] = fl.get(f)!.manager.toJson(this.FV(f));\n }\n }\n }\n return out;\n }\n\n public action<T, RT extends { [index: string]: any }>(\n method: 'POST' | 'PATCH' | 'GET' | 'DELETE' | 'PUT',\n name: string,\n {\n body = undefined,\n update = false,\n updatePartial = true,\n updateCheck = false,\n // updateRaise = false,\n params = {},\n headers = {},\n }: {\n body?: { [_index: string]: any };\n update?: boolean;\n updatePartial?: boolean;\n updateCheck?: boolean;\n // updateRaise?: boolean;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<RT> {\n if (this._coll === undefined) {\n return throwError(() => new Error('Missing collection'));\n }\n return this._coll\n .action<RT>(this, method, name, {\n body,\n params,\n headers,\n })\n .pipe(\n tap((result) => {\n if (update) {\n this.fromJson(result, {\n partial: updatePartial,\n check: updateCheck,\n });\n return this;\n }\n return result;\n })\n );\n }\n\n // Called on model, returns the manager for a field.\n public FM<FT>(field: string): BaseFieldManager<FT> {\n if (this.F.has(field)) {\n return this.F.get(field)!.manager;\n }\n throw new Error(\n `${field} not found in ${Object.keys(this.F).join(',')} model ${this}`\n );\n }\n\n // Return field value, without typing\n public FV<FT>(field: string): FT {\n return (this as any)[field] as FT;\n }\n\n /**\n * Set field value. If check is true, only set value if all validators pass.\n * Skip setting field value if manager computed flag is true.\n *\n * The validation result is returned.\n *\n * @param field field name\n * @param value field valued\n * @param check default false\n * @return null or ValidationError\n */\n public setFV<FT>(\n field: string,\n value: FT,\n check: boolean = false\n ): null | ValidationErrors {\n if (this.FM(field).computed) {\n return null;\n }\n if (check) {\n const fc = new FormControl(value);\n\n for (const v of this.FM(field).validators) {\n const val = v(fc);\n if (val !== null) {\n console.error(val);\n return val;\n }\n }\n }\n (this as any)[field] = value;\n return null;\n }\n\n // Called on model with a list of fields, returns a FormGroup with\n // these fields, or only the form control for one field.\n public FC(): FormGroup;\n public FC(field: string): FormControl;\n public FC(field: string[]): FormGroup;\n public FC(field?: string | string[]): FormControl | FormGroup {\n if (field === undefined) {\n field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);\n }\n if (Array.isArray(field)) {\n const fg: { [index: string]: FormControl } = {};\n for (const f of field) {\n fg[f] = this.FC(f) as FormControl;\n }\n return new FormGroup(fg);\n }\n return this.FM(field).formControl(this);\n }\n\n public save(\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.save(this, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n\n public update(\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {\n updateModel: true,\n }\n ): Observable<this> {\n if (this._coll) {\n return this._coll.update(this, fields, { updateModel });\n }\n return throwError(() => new Error('Missing collection'));\n }\n}\n\n//\n// export class TreeDataModel extends DataModel {\n// static override __name = 'TreeDataModel';\n// @detailsField({\n// model: this,\n// many: true,\n// description: 'Parents',\n// })\n// public parents_details?: this[];\n//\n// @foreignKeyField({\n// required: false,\n// description: 'Structure parente',\n// related: 'Structure',\n// })\n// public parent?: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'ID Tree',\n// })\n// public tree_id!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT left',\n// })\n// public lft!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'MPTT right',\n// })\n// public rght!: number;\n//\n// @integerField({\n// required: false,\n// readonly: true,\n// description: 'Niveau hiérarchique',\n// })\n// public level!: number;\n//\n// public get parent_details(): this | null {\n// if (this.parents_details) {\n// const out = this.parents_details[this.parents_details.length - 1];\n// out.parents_details = this.parents_details.slice(\n// 0,\n// this.parents_details.length - 1\n// );\n// return out;\n// }\n// return null;\n// }\n//\n// public set parent_details(d: this | null) {\n// console.log(d);\n// this.parents_details = d?.parents_details;\n// }\n//\n// public _display(): string {\n// const out: string[] = [];\n// if (this.parents_details) {\n// for (const p of this.parents_details) {\n// if ((p as any).code) {\n// out.push(`[${(p as any).code}] ${(p as any).name}`);\n// } else {\n// out.push((p as any).name);\n// }\n// }\n// }\n// if ((this as any).code) {\n// out.push(`[${(this as any).code}] ${(this as any).name}`);\n// } else {\n// out.push((this as any).name);\n// }\n//\n// return out.join(' : ');\n// }\n// }\n","import { Collection } from './data-collection';\nimport { DataModel } from './data-model';\nimport { combineLatest, Observable, ReplaySubject, share } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport interface FilterData {\n [index: string]: string | number | boolean | undefined | null;\n}\n\nexport interface OutFilterData {\n [index: string]: string;\n}\n\nexport type SortData = string;\n\n/**\n * Queryset parameters\n */\nexport interface IQuerysetOptions {\n /** Emit fields list */\n emitFields?: boolean;\n /** Queryset name */\n name?: string;\n /** TODO: see usage */\n route?: ActivatedRoute;\n /** TODO: see usage */\n router?: Router;\n /** TODO: see usage */\n hash?: string;\n}\n\nexport interface IQueryNav {\n page: number;\n page_size: number;\n}\n\nexport interface IQueryMetaNav {\n count: number;\n next: number | null;\n page: number;\n pages: number;\n prev: number | null;\n size: number;\n}\n\nexport interface IQueryMetaNavParams {\n page: string;\n page_size: string;\n}\n\nexport interface IQueryMeta {\n nav: IQueryMetaNav;\n parameters: IQueryMetaNavParams;\n}\n\nexport interface IQueryFullResponse<T> extends IQueryMeta {\n results: T[];\n}\n\nexport class Queryset<T extends DataModel> {\n /** Current filter data */\n public filterData: FilterData = {};\n /** Current sorter data */\n public sortData: SortData[] = [];\n /** Current fields */\n public fields: string[] = [];\n /** Current page size */\n public pageSize = 500;\n /** Current page number */\n public page = 1;\n\n public options: IQuerysetOptions;\n private _loading = new ReplaySubject<boolean>(1);\n /** Loading status (true if currently fetching data) */\n public loading = this._loading.asObservable().pipe(share());\n private _meta = new ReplaySubject<IQueryMeta>(1);\n /** Results meta part observable */\n public meta = this._meta.asObservable().pipe(share());\n private _results = new ReplaySubject<T[]>(1);\n /** Results data part observable */\n public results = this._results.asObservable().pipe(share());\n private _full: Observable<[T[], boolean, IQueryMeta]> = combineLatest([\n this.results,\n this.loading,\n this.meta,\n ]);\n /** Full results observable (results, loading, meta) */\n public full = this._full.pipe(share());\n\n constructor(protected _coll: Collection<T>, options: IQuerysetOptions = {}) {\n /** Default options */\n // console.log('@solidev/data: Creating collection', _coll);\n this.options = { emitFields: true };\n Object.assign(this.options, options);\n }\n\n private _pristine = true;\n\n /** Pristine status (true if it has not collected results yet) */\n public get pristine(): boolean {\n return this._pristine;\n }\n\n /**\n * Update current filter data. Null or undefined values are removed from filter data.\n * @param params filter data\n * @param update boolean to update filter data instead of recreating it from scratch\n */\n public filter(params: FilterData = {}, update: boolean = false): Queryset<T> {\n if (!update) {\n this.filterData = {};\n }\n for (const k of Object.keys(params)) {\n if (params[k] === undefined || params[k] === null) {\n delete this.filterData[k];\n } else {\n this.filterData[k] = params[k];\n }\n }\n return this;\n }\n\n /**\n * Update sorting parameters, list of strings giving sort parameters e.g. sort(\"+name\", \"-id\").\n * @param sorting strings of sort parameters\n */\n public sort(...sorting: string[]): Queryset<T> {\n this.sortData = sorting;\n return this;\n }\n\n /**\n * Update page size.\n * @param pageSize required page size\n */\n public paginateBy(pageSize: number = 20): Queryset<T> {\n this.pageSize = pageSize;\n return this;\n }\n\n /**\n * Update current page number.\n * @param page required pqge\n * @param fragment TODO: fragment usage for router usage\n */\n public setPage(page: number = 1, fragment?: string): Queryset<T> {\n if (page !== this.page) {\n this.page = page;\n // if (this.options.router) {\n // // TODO: check and fix usage of fragment/query params\n // const frag = fragment\n // ? fragment\n // : this.options.hash || this.options.name;\n // const _ = this.options.router.navigate([], {\n // queryParams: { page: page.toString() },\n // fragment: frag,\n // queryParamsHandling: 'merge',\n // });\n // }\n }\n return this;\n }\n\n public setFields(fields: string[]): Queryset<T> {\n this.fields = fields;\n return this;\n }\n\n public getQueryParams(): OutFilterData {\n const f: FilterData = {};\n Object.assign(f, this.filterData);\n if (this.sortData.length) {\n f['ordering'] = this.sortData.join(',');\n }\n f['page_size'] = this.pageSize;\n f['page'] = this.page;\n if (this.options.emitFields && this.fields.length) {\n f['fields'] = this.fields.join(',');\n }\n return f as OutFilterData;\n }\n\n public get(refresh: boolean = true, sync: boolean = false): Observable<T[]> {\n if (!refresh && !this._pristine) {\n // console.log('@solidev/data: Get not refreshing, return current result observable');\n return this.results;\n }\n // console.log('@solidev/data: start get (query)');\n this._loading.next(true);\n const syncQp: { [index: string]: string } = {};\n if (sync) {\n syncQp['db'] = 'sync';\n }\n return this._coll\n .raw<IQueryFullResponse<T>>({\n method: 'GET',\n params: {\n ...this.getQueryParams(),\n ...syncQp,\n },\n })\n .pipe(\n switchMap((result) => {\n // Process results\n // console.log('@solidev/data: have meta');\n this._meta.next({ nav: result.nav, parameters: result.parameters });\n const out: T[] = [];\n for (const r of result.results) {\n const m = this._coll.fromJson(r);\n out.push(m);\n }\n this._pristine = false;\n // console.log('@solidev/data: have loading');\n this._loading.next(false);\n // console.log('@solidev/data: have result');\n this._results.next(out);\n // console.log('@solidev/data: done get');\n return this.results;\n })\n );\n }\n}\n","import { DataModel } from './data-model';\nimport { DataBackend } from './data-backend';\nimport { Observable } from 'rxjs';\nimport { FilterData, IQuerysetOptions, Queryset } from './data-query';\nimport { map, tap } from 'rxjs/operators';\n\nexport type IHttpMethod = 'POST' | 'GET' | 'DELETE' | 'PUT' | 'PATCH';\n\nexport interface IActionParams {\n body?: any;\n headers?: { [index: string]: string };\n params?: { [index: string]: string };\n responseType?: 'json' | 'blob';\n}\n\nexport interface ICollectionCacheParams {\n transferState?: {\n enabled: boolean;\n maxTime: number;\n maxCount: number;\n };\n}\n\nexport type DataModelType<T extends DataModel> = new (\n _coll?: Collection<T>\n) => T;\n\nexport class Collection<T extends DataModel> {\n public useTransferState = true;\n\n constructor(\n protected backend: DataBackend,\n protected path: string,\n public model: DataModelType<T>\n ) {}\n\n public create(data?: Partial<T>): T {\n if (!data) {\n data = {};\n }\n return this.fromJson(data);\n }\n\n fromJson(data: Partial<T>): T;\n fromJson(data: Partial<T>[]): T[];\n fromJson(data: Partial<T> | Partial<T>[]): T | T[] {\n if (data instanceof Array) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n const m = new this.model(this);\n m.fromJson(data);\n return m;\n }\n\n public queryset(options: IQuerysetOptions = {}): Queryset<T> {\n return new Queryset<T>(this, options);\n }\n\n public fetch(\n id: number,\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T> {\n return this.backend\n .get(this, this.getUrl(id, { prefix, suffix }), { headers, params })\n .pipe(map((result) => this.fromJson(result)));\n }\n\n public action<RT>(\n model: T | null,\n method: IHttpMethod,\n action: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {}\n ): Observable<RT> {\n return this.backend.action<T, RT>(\n this,\n method,\n this.getUrl(model ? model.id : null, {\n suffix: model ? '/' + action : action,\n }),\n { body, params, headers }\n );\n }\n\n public save(\n model: T,\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson() }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public update(\n model: T,\n fields: string[] = [],\n { updateModel = true }: { updateModel?: boolean } = {}\n ): Observable<T> {\n let saveMethod =\n model.id !== undefined\n ? this.backend.patch.bind(this.backend)\n : this.backend.post.bind(this.backend);\n let url = model.id !== undefined ? this.getUrl(model.id) : this.getUrl();\n return saveMethod(this, url, { body: model.toJson(fields) }).pipe(\n map((res) => this.fromJson(res)),\n tap((res) => {\n if (updateModel) {\n model.fromJson(res);\n }\n })\n );\n }\n\n public delete(\n model: T,\n { params = {}, headers = {} }: IActionParams = {}\n ): Observable<any> {\n return this.backend.delete(this, this.getUrl(model.id), {\n params,\n headers,\n });\n }\n\n public list(\n query: FilterData = {},\n {\n prefix = '',\n suffix = '',\n params = {},\n headers = {},\n }: {\n prefix?: string;\n suffix?: string;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}\n ): Observable<T[]> {\n const qry = Object.assign({}, query, params);\n return this.backend\n .list(\n this,\n this.getUrl(null, { suffix, prefix }),\n // SEE: forced typecast maybe bad\n { params: qry, headers }\n )\n .pipe(\n // FIXME: parametrize paginated results access\n map((result: { results: Partial<T>[] }) =>\n this.fromJson(result.results)\n )\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public raw<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<RT> {\n return this.backend.action(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n /**\n * Calls *method* endpoint for this collection and returns raw results.\n *\n * @param method GET/POST/...\n * @param prefix collection_urlPREFIXSUFFIX\n * @param suffix collection_urlPREFIXSUFFIX\n * @param params query paremeters\n * @param body body as json\n * @param headers headers\n */\n public blob<RT>({\n method = 'GET',\n prefix = '',\n suffix = '',\n params = {},\n body = {},\n headers = {},\n }: {\n method?: IHttpMethod;\n prefix?: string;\n suffix?: string;\n body?: any;\n params?: { [_index: string]: string };\n headers?: { [_index: string]: string };\n } = {}): Observable<Blob> {\n return this.backend.blob(\n this,\n method,\n this.getUrl(null, { suffix, prefix }),\n {\n params,\n headers,\n }\n );\n }\n\n public getUrl(\n id?: number | null,\n { prefix = '', suffix = '' }: { prefix?: string; suffix?: string } = {}\n ): string {\n if (id === undefined || id === null) {\n if (prefix || suffix) {\n return `${this.backend.apiUrl}${this.path}/${prefix}${suffix}`;\n } else {\n return `${this.backend.apiUrl}${this.path}`;\n }\n }\n return `${this.backend.apiUrl}${this.path}/${prefix}${id}${suffix}`;\n }\n}\n","import { HttpClient } from '@angular/common/http';\n\nimport {Observable, of} from 'rxjs';\nimport {tap} from 'rxjs/operators';\nimport {Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState,} from '@angular/core';\nimport {isPlatformServer} from '@angular/common';\nimport {Collection, IActionParams} from './data-collection';\nimport {DataModel} from './data-model';\nimport {DATA_API_URL, DATA_MAX_TRANSFERSTATE_TIME} from './data-parameters';\n\n/**\n * DataBackend provides CRUD operations to a REST api.\n * TransferState can be used if DATA_MAX_TRANSFERSTATE_TIME is set and > 0\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DataBackend {\n private _created = new Date();\n\n constructor(\n private _http: HttpClient,\n private _transferState: TransferState,\n @Inject(PLATFORM_ID) private _platform: any,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional()\n @Inject(DATA_MAX_TRANSFERSTATE_TIME)\n private _maxTransferstateTime: number = 0,\n ) {}\n\n /**\n * Return api url for this backend.\n */\n public get apiUrl(): string {\n return this._apiUrl;\n }\n\n /**\n * Launch an action on collection.\n * If method is GET and collection.useTranserState & transferState are enabled,\n * result is stored / retrieved from transferState.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n * @param responseType response type\n *\n * @return an observable of response body\n */\n public action<T extends DataModel, RT>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<RT> {\n if (method === 'GET') {\n return this._cachedGet(collection, url, {\n headers: this.headers(headers),\n params,\n });\n } else {\n // @ts-ignore\n return this._http.request<RT>(method, url, {\n body,\n params,\n headers: this.headers(headers),\n });\n }\n }\n\n /**\n * Launch an action on collection, receiving a blob.\n *\n * @param collection Collection reference\n * @param method HTTP method\n * @param url full URL for action\n * @param body JSON body\n * @param params query parameters\n * @param headers query headers\n * @param responseType response type\n *\n * @return an observable of response body\n */\n public blob<T extends DataModel>(\n collection: Collection<T>,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Blob> {\n // @ts-ignore\n return this._http.request(method, url, {\n body,\n params,\n headers: this.headers(headers),\n responseType: 'blob',\n });\n }\n\n public put<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<T> {\n return this._http.put<T>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public post<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._http.post<Partial<T>>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public patch<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { body = undefined, params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._http.patch<Partial<T>>(url, body, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public delete<T extends DataModel, R>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<R> {\n return this._http.delete<R>(url, {\n params,\n headers: this.headers(headers),\n });\n }\n\n public _cachedGet<T extends DataModel, RT>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<RT> {\n const cur_headers = this.headers(headers);\n\n const key = makeStateKey<RT>(\n url + '|' + JSON.stringify(params) + '|' + JSON.stringify(cur_headers),\n );\n if (\n collection.useTransferState &&\n this._maxTransferstateTime > 0 &&\n this._transferState.hasKey(key) &&\n new Date().getTime() - this._created.getTime() <\n this._maxTransferstateTime\n ) {\n return of(this._transferState.get<RT | null>(key, null) as RT);\n }\n return this._http.get<RT>(url, { headers: cur_headers, params }).pipe(\n tap((result) => {\n if (\n collection.useTransferState &&\n isPlatformServer(this._platform) &&\n this._maxTransferstateTime > 0\n ) {\n this._transferState.set<RT>(key, result);\n }\n }),\n );\n }\n\n public get<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<Partial<T>> {\n return this._cachedGet<T, Partial<T>>(collection, url, {\n headers: this.headers(headers),\n params,\n });\n }\n\n public list<T extends DataModel>(\n collection: Collection<T>,\n url: string,\n { params = {}, headers = {} }: IActionParams = {},\n ): Observable<any> {\n return this._cachedGet<T, Partial<T>>(collection, url, {\n headers: this.headers(headers),\n params,\n });\n }\n\n /**\n * Return headers for this backend.\n * Provided headers are copied and returned.\n * Can be overriden by subclasses for specific headers (e.g. auth token).\n */\n protected headers(headers: { [key: string]: string }): {\n [key: string]: string;\n } {\n return Object.assign({}, headers);\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { FieldsParams } from '../model-list.service';\n\nexport interface ModelListField {\n name: string;\n label: string;\n enabled: boolean;\n allowed: boolean;\n field: any;\n position: number;\n priority: number;\n}\n\nexport class ModelListFields<T extends DataModel> {\n private readonly __fields!: ModelListField[];\n\n constructor(collection: Collection<T>, params?: FieldsParams) {\n // Get fields from model\n const m = collection.create();\n const tmp = [];\n for (const fn of m.FN) {\n tmp.push({\n name: fn,\n label: m.FM(fn).description || fn,\n allowed: false,\n enabled: false,\n field: m.FV(fn),\n position: tmp.length * 10,\n priority: m.FM(fn).priority || 0,\n });\n }\n // Add custom fields if provided\n const custom = params?.custom || [];\n for (const c of custom) {\n tmp.push({\n name: c.name,\n label: c.label,\n allowed: false,\n enabled: false,\n field: null,\n position: tmp.length * 10,\n priority: c.priority || 0,\n });\n }\n\n tmp.sort((b, a) =>\n a.priority === b.priority\n ? b.position - a.position\n : a.priority - b.priority\n );\n let pos = 0;\n for (const i of tmp) {\n i.position = pos;\n pos += 10;\n }\n\n // Prepare allowed fields (all fields if not set or empty)\n let allowed: string[];\n let ddefaults: string[];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n allowed = tmp.map((f) => f.name);\n ddefaults = tmp.filter((f) => f.priority >= 0).map((f) => f.name);\n } else {\n allowed = params.allowed;\n ddefaults = params.allowed;\n }\n\n // Prepare excluded fields\n const excluded: string[] = params?.excluded || [];\n\n // Process default fields\n // Use all allowed fields if empty of not set\n const defaults: string[] = params?.defaults || ddefaults;\n\n // Prepare fields status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n let out = [];\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n const filtered = [];\n for (const f of tmp) {\n if (!(!f.enabled && !f.allowed)) {\n filtered.push(f);\n }\n }\n\n const ordered = [];\n const enabled = filtered.filter((f) => f.enabled);\n pos = 0;\n for (const fe of defaults) {\n for (const f of enabled) {\n if (f.name === fe) {\n f.position = pos;\n pos += 10;\n }\n }\n }\n enabled.sort((a, b) => a.position - b.position);\n const disabled = filtered.filter((f) => !f.enabled);\n let ei = 0;\n let di = 0;\n for (let i = 0; i < filtered.length; i++) {\n if (enabled[ei] && disabled[di]) {\n if (enabled[ei].priority > disabled[di].priority) {\n ordered.push(enabled[ei]);\n ei += 1;\n } else {\n ordered.push(disabled[di]);\n di += 1;\n }\n } else if (enabled[ei]) {\n ordered.push(enabled[ei]);\n ei += 1;\n } else {\n ordered.push(disabled[di]);\n di += 1;\n }\n }\n pos = 0;\n for (const f of ordered) {\n f.position = pos;\n pos += 10;\n }\n\n this.__fields = ordered;\n this._update();\n }\n\n private _fields = new ReplaySubject<ModelListField[]>(1);\n\n public get fields(): Observable<ModelListField[]> {\n return this._fields.asObservable();\n }\n\n private _enabled: string[] = [];\n\n public get enabled(): string[] {\n return this._enabled;\n }\n\n private _output = new ReplaySubject<string[]>(1);\n\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Enable a field by name. Position is optional.\n *\n * @param fname : name of field to be enabled\n * @param position : position (optional)\n * @returns current enabled fields\n */\n public enable(fname: string, position?: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = true;\n if (position !== undefined) {\n f.position = position;\n }\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Disable a field by name.\n *\n * @param fname : name of field to be disabled\n * @returns current enabled fields\n */\n public disable(fname: string): string[] {\n const f = this.get(fname);\n if (f) {\n f.enabled = false;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n /**\n * Move field `fname` before or after (depending on `position`) field `dest`.\n *\n * @param fname field to move\n * @param position (\"before\" or \"after\")\n * @param dest reference field\n * @returns current enabled fields\n */\n public move(\n fname: string,\n position: 'before' | 'after',\n dest: string = ''\n ): string[] {\n const ftarget = this.get(fname);\n if (dest == '') {\n const pos = this._enabled.indexOf(fname);\n dest = this._enabled[pos + (position === 'before' ? -1 : +1)];\n if (dest === undefined) {\n return this._enabled;\n }\n }\n const fdest = this.get(dest);\n // istanbul ignore if\n if (!ftarget || !fdest) {\n console.error('Target / dest not found', fname, dest);\n return this._enabled;\n }\n if (fname == dest) {\n ftarget.position = fdest.position + (position === 'before' ? -15 : +15);\n } else {\n ftarget.position = fdest.position + (position === 'before' ? -5 : +5);\n }\n\n this._update();\n return this._enabled;\n }\n\n /**\n * Check if field with name `fname` is enabled.\n *\n * @param fname : name of field\n * @returns enabled (true) or disabled (false)\n */\n public isEnabled(fname: string): boolean {\n return this._enabled.indexOf(fname) !== -1;\n }\n\n /**\n * Get field by name\n * @param fname : name of field\n * @returns Model list field or null if not found\n */\n public get(fname: string): ModelListField | null {\n for (const f of this.__fields) {\n if (f.name === fname) {\n return f;\n }\n }\n return null;\n }\n\n /**\n * Get field by position\n * @param pos : position of field\n * @returns Model list field or null if not found\n */\n public getAtPos(pos: number): ModelListField | null {\n return this.__fields[pos] || null;\n }\n\n setPosition(fname: any, position: number): string[] {\n const f = this.get(fname);\n if (f) {\n f.position = position;\n } else {\n console.error('Field not found', f);\n }\n this._update();\n return this._enabled;\n }\n\n private _update() {\n this.__fields.sort((a, b) => a.position - b.position);\n let i = 0;\n for (const f of this.__fields) {\n f.position = i * 10;\n i += 1;\n }\n const out: string[] = [];\n for (const f of this.__fields) {\n if (f.enabled) {\n out.push(f.name);\n }\n }\n this._enabled = out;\n this._output.next(this._enabled);\n this._fields.next(this.__fields);\n }\n}\n","import { IQueryNav } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nexport class ModelListPaginator {\n private _page_size!: number;\n private _page!: number;\n\n constructor(defaults?: IQueryNav) {\n if (!defaults) {\n defaults = { page_size: 20, page: 1 };\n }\n this._page_size = defaults.page_size || 20;\n this._page = defaults.page || 1;\n this._updateOutput('constructor');\n }\n\n private _output = new ReplaySubject<IQueryNav>(1);\n\n public get output(): Observable<IQueryNav> {\n return this._output.asObservable();\n }\n\n public setPage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n this._updateOutput('setPage');\n }\n }\n\n public updatePage(page: number): void {\n if (page !== this._page) {\n this._page = page;\n }\n }\n\n public setPageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n this._updateOutput('setPageSize');\n }\n }\n\n public updatePageSize(size: number): void {\n if (size !== this._page_size) {\n this._page_size = size;\n }\n }\n\n public getPageSize(): number {\n return this._page_size;\n }\n\n public getPage(): number {\n return this._page;\n }\n\n private _updateOutput(from: string = ''): void {\n this._output.next({ page: this._page, page_size: this._page_size });\n }\n}\n","import { Observable, ReplaySubject } from 'rxjs';\nimport { SorterDefaults } from '../model-list.service';\n\n// TODO: add an option to limit the number of ordering fields (eg. for tree queries)\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface FieldSortData {\n field: string;\n direction: SortDirection;\n}\n\nexport type SorterData = FieldSortData[];\n\nexport class ModelListSorter {\n private readonly _values: SorterData = [];\n\n /**\n * Create ModelListSorter instance, using defaults.\n * @param defaults defaults sort values, as a list of strings (+field, -field, field)\n */\n constructor(defaults: SorterDefaults = []) {\n this._output = new ReplaySubject(1);\n this._values = [];\n for (const d of defaults) {\n if (d.length < 1) {\n continue;\n }\n if (d[0] == '+') {\n this._values.push({ field: d.substring(1), direction: 'asc' });\n } else if (d[0] == '-') {\n this._values.push({ field: d.substring(1), direction: 'desc' });\n } else {\n this._values.push({ field: d, direction: 'asc' });\n }\n }\n this._updateOutput('constructor');\n }\n\n private _output: ReplaySubject<string[]>;\n\n /**\n * Returns a list of \"+/-field\" sort strings observable.\n * @returns sort strings observable\n */\n public get output(): Observable<string[]> {\n return this._output.asObservable();\n }\n\n /**\n * Set sorting for `name` key, in direction `direction`.\n * If sorting is already set for `name` key, updates direction without changing order.\n * If sorting isn't set for `name` key, adds it at the end of sorting directions.\n *\n * @param name field name\n * @param direction sort direction\n * @returns model list sorter\n */\n public set(name: string, direction: SortDirection): ModelListSorter {\n for (const v of this._values) {\n if (v.field === name) {\n v.direction = direction;\n this._updateOutput();\n return this;\n }\n }\n this._values.push({ field: name, direction });\n this._updateOutput('set');\n return this;\n }\n\n /**\n * Removes `name` sorting key from current keys.\n *\n * @param name sort key to be removed\n * @returns model list sorter\n */\n public unset(name: string): ModelListSorter {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === name) {\n this._values.splice(i, 1);\n break;\n }\n }\n this._updateOutput('unset');\n return this;\n }\n\n /**\n * Get sorting status for `field` argument.\n * If `field` is not found, returns null.\n *\n * @param field field name\n * @returns ordering direction / null\n */\n public get(field: string): FieldSortData | null {\n for (const v of this._values) {\n if (v.field === field) {\n return v;\n }\n }\n return null;\n }\n\n /**\n * Return all sorter data values.\n *\n * @returns all sorter data values.\n */\n public getAll(): SorterData {\n return this._values;\n }\n\n /**\n * Get the ordering position for `field` argument. If not found, returns -1.\n *\n * @param field field name\n * @returns ordering position for field\n */\n public getOrder(field: string): number {\n for (let i = 0; i < this._values.length; i++) {\n if (this._values[i].field === field) {\n return i + 1;\n }\n }\n return -1;\n }\n\n private _updateOutput(_from: string = ''): void {\n let out: string[] = [];\n for (const v of this._values) {\n out.push(`${v.direction === 'asc' ? '' : '-'}${v.field}`);\n }\n this._output.next(out);\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FILTER_TYPE } from './filters/filtertypes';\nimport { IDispEditChoice } from '../../dispedit/dispedit/dispedit.constants';\nimport { ModelListFilterGroup } from './model-list-filter-group';\n\nexport interface ModelListFilterParams {\n name: string;\n field: string;\n label?: string;\n help?: string;\n value?: any;\n desc?: any;\n default?: any;\n displayClasses?: string[] | string;\n group?: ModelListFilterGroup;\n}\n\nexport class ModelListFilter implements ModelListFilterParams {\n public name: string;\n public field: string;\n public label: string;\n public help: string;\n public desc?: any;\n public default?: any;\n public type: FILTER_TYPE;\n public allowed: boolean;\n public enabled: boolean;\n public displayClasses?: string[] | string;\n public pristine = true;\n public multi = false;\n public group?: ModelListFilterGroup;\n\n /** Single current value */\n protected _value: IDispEditChoice | null = null;\n /** Multiple current value */\n protected _mvalue = new Map<string, string>();\n /** Single current value observable */\n protected _current = new ReplaySubject<IDispEditChoice | null>(1);\n /** Multiple current value observable */\n protected _mcurrent = new ReplaySubject<IDispEditChoice[]>(1);\n\n constructor(params: ModelListFilterParams) {\n this.name = params.name;\n this.field = params.field;\n this.label = params.label || '';\n this.help = params.help || '';\n this.desc = params.desc;\n this.displayClasses = params.displayClasses;\n this.allowed = false;\n this.enabled = false;\n this.type = 'text';\n this.default = params.default;\n // FIXME: add value init\n }\n\n public get mcurrent$(): Observable<IDispEditChoice[]> {\n return this._mcurrent.asObservable();\n }\n\n public get current$(): Observable<IDispEditChoice | null> {\n return this._current.asObservable();\n }\n\n public get valueChanges(): Observable<\n IDispEditChoice | IDispEditChoice[] | null\n > {\n if (this.multi) {\n return this._mcurrent.asObservable();\n }\n return this._current.asObservable();\n }\n\n public get summary(): string {\n if (this.multi) {\n return Array.from(this._mvalue.values()).join(', ');\n } else {\n return this._value?.desc || '';\n }\n }\n\n public updateFilter(filter: FilterData) {\n if (this.multi && this._mvalue.size > 0) {\n filter[this.field] = this.getMultiValue();\n } else if (\n !this.multi &&\n this._value !== undefined &&\n this._value !== null\n ) {\n filter[this.field] = this.getValue();\n }\n }\n\n public clear(notify: boolean = true) {\n if (this.multi) {\n this._mvalue = new Map<string, string>();\n } else {\n this._value = null;\n }\n this.notify(notify);\n }\n\n public set(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mset(value, desc, notify);\n }\n return this.sset(value, desc, notify);\n }\n\n public unset(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.munset(value, desc, notify);\n }\n return this.sunset(value, desc, notify);\n }\n\n public toggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this.multi) {\n return this.mtoggle(value, desc, notify);\n }\n return this.stoggle(value, desc, notify);\n }\n\n public getValue(): string | number {\n return `${this._value?.value}`;\n }\n\n public get(): IDispEditChoice | null {\n return this._value;\n }\n\n private mtoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n } else {\n this._mvalue.set(`${value}`, desc);\n }\n this.notify(notify);\n return true;\n }\n\n private mset(value: any, desc: string, notify: boolean = true): boolean {\n if (!this._mvalue.has(`${value}`)) {\n this._mvalue.set(`${value}`, desc);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private munset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._mvalue.has(`${value}`)) {\n this._mvalue.delete(`${value}`);\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private stoggle(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null && this._value.value === value) {\n this._value = null;\n } else {\n this._value = { value, desc };\n }\n this.notify(notify);\n return true;\n }\n\n private sset(value: any, desc: string, notify: boolean = true): boolean {\n if (!(this._value !== null && this._value.value === value)) {\n this._value = { value, desc };\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private sunset(value: any, desc: string, notify: boolean = true): boolean {\n if (this._value !== null) {\n this._value = null;\n this.notify(notify);\n return true;\n }\n return false;\n }\n\n private getMultiValue(): string | number {\n return Array.from(this._mvalue.keys()).join(',');\n }\n\n private notify(notify: boolean = true) {\n if (notify) {\n if (this.multi) {\n this._mcurrent.next(\n Array.from(this._mvalue.entries()).map(([k, v]) => {\n return { desc: v, value: k };\n }),\n );\n } else {\n this._current.next(this._value);\n }\n }\n }\n}\n","import { FilterData } from '../../data/data-query';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { FiltersParams } from '../model-list.service';\nimport { ModelListFilter } from './model-list-filter';\nimport { ModelListFilterGroup } from './model-list-filter-group';\n\nexport class ModelListFilters {\n private _enabled$ = new ReplaySubject<ModelListFilter[]>(1);\n private _filters: ModelListFilter[] = [];\n private _output$ = new ReplaySubject<FilterData>(1);\n private _available$ = new ReplaySubject<ModelListFilter[]>(1);\n private _groups$ = new ReplaySubject<ModelListFilterGroup[]>(1);\n\n constructor(params?: FiltersParams) {\n const fwgroups = Array.from(params?.filters || []);\n // Ungroup filters, keeping groups\n const tmp: ModelListFilter[] = [];\n const groups: ModelListFilterGroup[] = [];\n for (const f of fwgroups) {\n if (f instanceof ModelListFilter) {\n tmp.push(f);\n } else {\n groups.push(f);\n for (const ff of f.filters) {\n tmp.push(ff);\n ff.group = f;\n }\n }\n }\n\n // Prepare allowed filters (all filters if not set or empty)\n let allowed: string[] = [];\n if (params?.allowed === undefined || params?.allowed.length === 0) {\n for (const f of tmp) {\n allowed.push(f.name);\n }\n } else {\n allowed = params.allowed;\n }\n // Prepare excluded filters\n const excluded: string[] = params?.excluded || [];\n\n // Process default filters\n // Use all allowed filters if empty of not set\n const defaults: string[] = params?.defaults || allowed;\n\n // Prepare filters status\n // Set allowed\n for (const fe of allowed) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.allowed = true;\n }\n }\n }\n // Set defaults\n for (const fe of defaults) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = true;\n f.allowed = true;\n }\n }\n }\n // remove excluded\n for (const fe of excluded) {\n for (const f of tmp) {\n if (f.name === fe) {\n f.enabled = false;\n f.allowed = false;\n }\n }\n }\n this._filters = tmp;\n this._groups = groups;\n this.update();\n }\n\n private _groups: ModelListFilterGroup[] = [];\n\n public get groups(): Observable<ModelListFilterGroup[]> {\n return this._groups$.asObservable();\n }\n\n private _enabled: ModelListFilter[] = [];\n\n public get enabled(): Observable<ModelListFilter[]> {\n return this._enabled$.asObservable();\n }\n\n private _available: ModelListFilter[] = [];\n\n public get available(): Observable<ModelListFilter[]> {\n return this._available$.asObservable();\n }\n\n public get output(): Observable<FilterData> {\n return this._output$.asObservable();\n }\n\n public update() {\n const filter: FilterData = {};\n for (const f of this._filters) {\n if (f.enabled) {\n f.updateFilter(filter);\n if (this._enabled.indexOf(f) === -1) {\n this._enabled.push(f);\n }\n } else {\n const i = this._enabled.indexOf(f);\n if (i !== -1) {\n this._enabled.splice(i, 1);\n }\n }\n if (f.allowed) {\n if (this._available.indexOf(f) === -1) {\n this._available.push(f);\n }\n } else {\n const i = this._available.indexOf(f);\n if (i !== -1) {\n this._available.splice(i, 1);\n }\n }\n }\n\n for (const g of this._groups) {\n g.enabled = false;\n g.allowed = false;\n for (const f of g.filters) {\n if (!f.enabled && f.allowed) {\n g.enabled = true;\n }\n if (f.allowed) {\n g.allowed = true;\n }\n }\n }\n\n this._output$.next(filter);\n this._enabled$.next(this._enabled);\n this._available$.next(this._available);\n this._groups$.next(\n this._groups\n .filter((g) => g.allowed && g.enabled)\n .sort((a, b) => a.position - b.position),\n );\n }\n}\n","import { jwtDecode } from 'jwt-decode';\n\nexport interface IJwtResponseJson {\n access: string;\n refresh: string;\n}\n\nexport interface IJwtRefreshResponseJson {\n access: string;\n}\n\nexport interface IJwtBaseData {\n // FIXME: check minimal jwt data\n token_type: 'access' | 'refresh';\n user_id: number;\n // exp: number;\n // jti: string;\n}\n\nexport class Jwt<UserJwtData extends IJwtBaseData> {\n public readonly access?: string;\n public readonly refresh?: string;\n private readonly _data: UserJwtData | null = null;\n\n constructor(response?: IJwtResponseJson) {\n if (response) {\n this.access = response.access;\n this._data = Object.freeze(jwtDecode<UserJwtData>(response.access));\n this.refresh = response.refresh;\n } else {\n this._data = null;\n }\n }\n\n public get data(): UserJwtData | null {\n return this._data;\n }\n\n public toJson() {\n return { access: this.access, refresh: this.refresh };\n }\n}\n","import { Inject, InjectionToken } from '@angular/core';\nimport {\n IJwtBaseData,\n IJwtRefreshResponseJson,\n IJwtResponseJson,\n Jwt,\n} from './jwt';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { Observable, of, ReplaySubject, Subject, throwError } from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport { Collection } from '../data/data-collection';\nimport { Router } from '@angular/router';\nimport { DataMessageService } from '../messages/message.service';\n\nexport interface AuthParams {\n tokenUrl: string;\n tokenRefreshUrl: string;\n requestReactivateUrl?: string;\n processReactivateUrl?: string;\n requestPwResetUrl?: string;\n processPwResetUrl?: string;\n loginField: string;\n passwordField: string;\n tokenField: string;\n loginRoute: string[];\n logoutRoute: string[];\n pwresetRoute?: string[];\n reactivateRoute?: string[];\n userFetchFields?: string[];\n userFetchValiditySeconds?: number;\n}\n\n/**\n * DATA_API_URL: stores data api base url\n */\nexport const DATA_AUTH_PARAMS = new InjectionToken<AuthParams>(\n 'data.auth.params'\n);\nexport const DATA_AUTH_USER_SERVICE = new InjectionToken<Collection<any>>(\n 'data.auth.user.service'\n);\n\nexport class AuthServiceBase<\n User extends DataModel,\n UserService extends Collection<User>,\n UserData extends IJwtBaseData\n> {\n public logout$: Subject<void> = new Subject<void>();\n private _user!: User;\n private _user$ = new ReplaySubject<User | null>(1);\n private _token!: Jwt<UserData>;\n private _fetched?: number;\n\n constructor(\n @Inject(DATA_AUTH_USER_SERVICE) public userService: UserService,\n @Inject(DATA_AUTH_PARAMS) private _params: AuthParams,\n private _router: Router,\n private _http: HttpClient,\n private _msgs: DataMessageService\n ) {\n this.autoLogin();\n }\n\n public get isAnonymous(): boolean {\n return !this._token.access;\n }\n\n public get accessToken(): string | null {\n return this._token.access ? this._token.access : null;\n }\n\n public get refreshToken(): string | null {\n return this._token.refresh ? this._token.refresh : null;\n }\n\n public get currentUser(): User | null {\n return this._user && this._user.id ? this._user : null;\n }\n\n public get currentUser$(): Observable<User | null> {\n // Needs refresh ?\n if (this.isAnonymous) {\n return of(null);\n }\n if (\n !this._fetched ||\n Date.now() - this._fetched >\n (this._params.userFetchValiditySeconds || 3600) * 1000\n ) {\n this._fetched = Date.now();\n return this._fetchUser().pipe(\n switchMap(() => {\n return this._user$.asObservable();\n })\n );\n }\n return this._user$.asObservable();\n }\n\n public get refreshUrl(): string {\n return `${this._params.tokenRefreshUrl}`;\n }\n\n public get loginUrl(): string {\n return `${this._params.tokenUrl}`;\n }\n\n public get loginRoute(): string[] {\n return this._params.loginRoute;\n }\n\n public get logoutRoute(): string[] {\n return this._params.logoutRoute;\n }\n\n public get pwresetRoute(): string[] | undefined {\n return this._params.pwresetRoute;\n }\n\n public get reactivateRoute(): string[] | undefined {\n return this._params.reactivateRoute;\n }\n\n public logout(): void {\n localStorage.removeItem('auth');\n\n this._token = new Jwt();\n this._user = this.userService.create();\n this._user$.next(null);\n this.logout$.next();\n }\n\n public autoLogin(): void {\n const localAuth = localStorage.getItem('auth');\n if (!localAuth) {\n return this.logout();\n }\n const {user, fetched, token} = JSON.parse(localAuth);\n this._token = new Jwt(token);\n this._user = this.userService.create(user);\n this._fetched = fetched;\n this._user$.next(this._user);\n }\n\n public login(\n username: string,\n password: string\n ): Observable<'success' | 'error' | 'invalid_token' | string> {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n return this._http.post<IJwtResponseJson>(this.loginUrl, payload).pipe(\n tap((tok) => {\n this._token = new Jwt(tok);\n this.saveAuth();\n }),\n switchMap(() => {\n return this._fetchUser();\n }),\n map(() => 'success'),\n catchError((error: any) => {\n this.logout();\n const code = error.error?.code || error?.code || 'error';\n console.error(code, error);\n return of(code);\n })\n );\n }\n\n public requestReactivate(username: string): Observable<boolean> {\n if (this._params.requestReactivateUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n return this._http\n .post<any>(this._params.requestReactivateUrl, payload)\n .pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public requestPwReset(username: string): Observable<boolean> {\n if (this._params.requestPwResetUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n return this._http.post<any>(this._params.requestPwResetUrl, payload).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public processReactivate(\n username: string,\n token: string\n ): Observable<boolean> {\n if (this._params.processReactivateUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.tokenField] = token;\n return this._http\n .post<any>(this._params.processReactivateUrl, payload)\n .pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public processPwReset(\n username: string,\n password: string,\n token: string\n ): Observable<boolean> {\n if (this._params.processPwResetUrl) {\n const payload: { [_index: string]: string } = {};\n payload[this._params.loginField] = username;\n payload[this._params.passwordField] = password;\n payload[this._params.tokenField] = token;\n return this._http.post<any>(this._params.processPwResetUrl, payload).pipe(\n map(() => true),\n catchError(() => of(false))\n );\n }\n return of(false);\n }\n\n public saveAuth() {\n if (this.isAnonymous) {\n localStorage.removeItem('auth');\n this._user$.next(null);\n } else {\n localStorage.setItem(\n 'auth',\n JSON.stringify({\n user: this._user.toJson(),\n fetched: Date.now(),\n token: this._token.toJson(),\n })\n );\n this._user$.next(this._user);\n }\n }\n\n public refresh(): Observable<IJwtRefreshResponseJson | null> {\n if (!this._token.refresh) {\n this.logout();\n return of(null);\n }\n return this._http\n .post<IJwtRefreshResponseJson>(this.refreshUrl, {\n refresh: this._token.refresh as string,\n })\n .pipe(\n catchError((err, caught) => {\n console.error('Token refresh error', err, caught);\n this.logout();\n this._msgs.warning('Vous devez vous reconnecter');\n this._router.navigate(this._params.loginRoute);\n return of(null);\n }),\n tap((tok) => {\n if (tok) {\n this._token = new Jwt({\n access: tok.access,\n refresh: this._token.refresh!,\n });\n this.saveAuth();\n }\n })\n );\n }\n\n private _fetchUser(): Observable<User> {\n if (this._token.data && this._token.data.user_id) {\n // Fetch user data using token\n return this.userService\n .fetch(this._token.data!.user_id, {\n params: {\n fields: (\n this._params.userFetchFields || [\n 'id',\n 'username',\n 'email',\n 'last_name',\n 'first_name',\n 'is_superuser',\n 'is_active',\n 'is_staff',\n 'last_login',\n 'current_groups_slugs',\n ]\n ).join(','),\n },\n })\n .pipe(\n tap((u) => {\n this._user = u;\n this.saveAuth();\n })\n );\n } else {\n return throwError(() => {\n return {code: 'invalid_token'};\n });\n }\n }\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { AuthServiceBase } from './auth.service';\nimport { catchError, filter, switchMap, take, tap } from 'rxjs/operators';\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { IJwtRefreshResponseJson } from './jwt';\nimport { DATA_API_URL } from '../data/data-parameters';\n\nexport const DATA_AUTH_SERVICE = new InjectionToken<\n AuthServiceBase<any, any, any>\n>('data.auth.service');\n\n/**\n * List of urls that should be intercepted by the auth interceptor, thus receiving the auth token\n * Default : empty list\n */\nexport const DATA_AUTH_URLS = new InjectionToken<string[]>('data.auth.urls');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthInterceptor implements HttpInterceptor {\n private _isRefreshing = false;\n private _refreshTokenSubject =\n new BehaviorSubject<IJwtRefreshResponseJson | null>(null);\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>,\n @Inject(DATA_API_URL) private _apiUrl: string,\n @Optional() @Inject(DATA_AUTH_URLS) private _urls: string[] | null,\n ) {}\n\n /**\n * The auth token in added to the request if :\n * - the request is not anonymous\n * - the request is for the api url, but not for the refresh or login urls\n * - the request is for one of the urls specified in the DATA_AUTH_URLS injection token\n * @param req\n * @param next\n */\n intercept(req: HttpRequest<any>, next: HttpHandler) {\n // If the user is anonymous, we don't add the token\n if (this._auth.isAnonymous) {\n return next.handle(req);\n }\n // If the request is refresh or login url, skip auth\n if (\n req.url.startsWith(this._auth.refreshUrl) ||\n req.url.startsWith(this._auth.loginUrl)\n ) {\n return next.handle(req);\n }\n // If the request is not for the api, and not for one of the urls specified in the\n // DATA_AUTH_URLS injection token, skip auth\n if (\n !req.url.startsWith(this._apiUrl) &&\n !(\n this._urls &&\n this._urls.length > 0 &&\n this._urls.some((url) => req.url.startsWith(url))\n )\n ) {\n return next.handle(req);\n }\n if (!this._auth.isAnonymous) {\n req = this._addToken(req, this._auth.accessToken as string);\n }\n return next.handle(req).pipe(\n catchError((error) => {\n console.log('Catched http error', error);\n if (error instanceof HttpErrorResponse && error.status === 401) {\n console.log('Passing to handle 401');\n return this._handle401Error(req, next);\n } else {\n console.log('throwing error');\n return throwError(error);\n }\n }),\n );\n }\n\n private _handle401Error(request: HttpRequest<any>, next: HttpHandler) {\n if (!this._isRefreshing) {\n this._isRefreshing = true;\n this._refreshTokenSubject.next(null);\n console.log('refreshing token');\n return this._auth.refresh().pipe(\n tap((token) => console.log('Refreshed token result', token)),\n switchMap((token) => {\n if (token === null) {\n this._isRefreshing = false;\n return throwError(\n () =>\n new HttpErrorResponse({\n error: 'Forbidden, please log in',\n status: 403,\n statusText: 'Warning',\n url: request.url,\n }),\n );\n } else {\n this._isRefreshing = false;\n this._refreshTokenSubject.next(token);\n return next.handle(this._addToken(request, token.access));\n }\n }),\n );\n } else {\n return this._refreshTokenSubject.pipe(\n filter((token) => token != null),\n take(1),\n switchMap((token) =>\n next.handle(\n this._addToken(request, (token as IJwtRefreshResponseJson).access),\n ),\n ),\n );\n }\n }\n\n private _addToken(request: HttpRequest<any>, token: string) {\n const headers = request.headers.append('Authorization', `Bearer ${token}`);\n return request.clone({ headers });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n combineLatest,\n NEVER,\n Observable,\n of,\n ReplaySubject,\n share,\n Subject,\n takeUntil,\n} from 'rxjs';\nimport { DataModel } from '../data/data-model';\nimport {\n IQueryMeta,\n IQueryMetaNavParams,\n IQueryNav,\n Queryset,\n} from '../data/data-query';\nimport { switchMap, tap, throttleTime } from 'rxjs/operators';\nimport { ModelListFields } from './model-list-fields/model-list-fields';\nimport { ModelListPaginator } from './model-list-paginator/model-list-paginator';\nimport { ModelListSorter } from './model-list-sorter/model-list-sorter';\nimport { ModelListFilters } from './model-list-filters/model-list-filters';\nimport { Collection } from '../data/data-collection';\nimport { ModelListFilter } from './model-list-filters/model-list-filter';\nimport { IFieldHeaderMessage } from './model-list-fields/model-list-field-header/messages';\nimport { AuthServiceBase } from '../auth/auth.service';\nimport { DATA_AUTH_SERVICE } from '../auth/auth-interceptor.service';\nimport { ModelListFilterGroup } from './model-list-filters/model-list-filter-group';\n\nexport interface CustomField {\n name: string;\n label: string;\n priority?: number;\n}\n\nexport interface FilterDefaults {\n [index: string]: string | number | undefined;\n}\n\nexport type SorterDefaults = string[];\n\n/**\n * Fields parameters.\n */\nexport interface FieldsParams {\n /** Allowed fields, all model fields are allowed if empty */\n allowed?: string[];\n /** Default enabled fields */\n defaults?: string[];\n /** Excluded fields */\n excluded?: string[];\n /** Custom fields */\n custom?: CustomField[];\n}\n\n/**\n * Filters parameters.\n */\nexport interface FiltersParams {\n /** Allowed filter names */\n allowed?: string[];\n /** Default active filter names */\n defaults?: string[];\n /** Excluded filter names */\n excluded?: string[];\n /** Filters definitions */\n filters?: (ModelListFilter | ModelListFilterGroup)[];\n}\n\nexport type PaginationParams = IQueryMetaNavParams;\n\nexport type IModelListMessage = IFieldHeaderMessage;\n\nexport interface ModelListParams {\n fields?: FieldsParams;\n filters?: FiltersParams;\n filter?: FilterDefaults | Observable<FilterDefaults>;\n sorter?: SorterDefaults;\n paginator?: IQueryNav;\n keep?: boolean;\n reload?: Subject<void | boolean>;\n unsubscribe?: Subject<void>;\n}\n\nexport class ModelList<T extends DataModel> {\n public name!: string;\n public filters!: ModelListFilters;\n public sorter!: ModelListSorter;\n public paginator!: ModelListPaginator;\n public queryset!: Queryset<T>;\n public fields!: ModelListFields<T>;\n public reload!: Subject<void | boolean>;\n public unsubscribe!: Subject<void>;\n public messages$ = new ReplaySubject<IModelListMessage>(1);\n public started = false;\n\n constructor(name: string, collection: Collection<T>) {\n this.name = name;\n this._collection = collection;\n }\n\n private _collection!: Collection<T>;\n\n public get collection(): Collection<T> {\n return this._collection;\n }\n\n private _count: number | null = null;\n\n /**\n * Get current results count (from last meta received).\n */\n public get count(): number | null {\n return this._count;\n }\n\n private _results?: Observable<T[]>;\n\n public get results(): Observable<T[]> {\n if (!this._results) {\n this._results = this.queryset.results.pipe(\n // tap(() => console.log('@solidev/data: modellist result')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._results;\n }\n\n private _meta?: Observable<IQueryMeta>;\n\n public get meta(): Observable<IQueryMeta> {\n if (!this._meta) {\n this._meta = this.queryset.meta.pipe(\n // tap(() => console.log('@solidev/data: modellist meta')),\n tap((m) => (this._count = m.nav.count)),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._meta;\n }\n\n private _loading?: Observable<boolean>;\n\n public get loading(): Observable<boolean> {\n if (!this._loading) {\n this._loading = this.queryset.loading.pipe(\n // tap(() => console.log('@solidev/data: modellist loading')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._loading;\n }\n\n private _full?: Observable<[T[], boolean, IQueryMeta]>;\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n if (!this._full) {\n this._full = this.queryset.full.pipe(\n // tap(() => console.log('@solidev/data: modellist full')),\n share(),\n takeUntil(this.unsubscribe || NEVER),\n );\n }\n return this._full;\n }\n\n public start(params: ModelListParams) {\n let filter$: Observable<FilterDefaults>;\n let reloadFired = false;\n if (params.filter && !params.filter.subscribe) {\n filter$ = of(params.filter as FilterDefaults);\n } else if (params.filter && params.filter.subscribe) {\n filter$ = params.filter as Observable<FilterDefaults>;\n } else {\n filter$ = of({});\n }\n combineLatest([\n this.reload.pipe(tap((v) => (reloadFired = !!v))),\n this.filters.output,\n filter$,\n this.paginator.output,\n this.sorter.output,\n this.fields.output,\n ])\n .pipe(\n throttleTime(200),\n switchMap(([, filter, manualFilter, paginator, sorter, fields]) => {\n this.queryset\n .filter(filter)\n .filter(manualFilter || {}, true)\n .paginateBy(paginator.page_size)\n .setPage(paginator.page)\n .sort(...sorter)\n .setFields(fields);\n const dbSync = reloadFired;\n reloadFired = false;\n return this.queryset.get(true, dbSync);\n }),\n takeUntil(this.unsubscribe || NEVER),\n )\n .subscribe({\n next: (): void => {\n // console.log('@solidev/data: modellist:get results', this.name);\n },\n error: (error) => {\n console.error(\n '@solidev/data: error while getting model list results : ',\n error,\n );\n },\n complete: () => {\n // console.log('@solidev/data: modellist:completed', this.name);\n this.started = false;\n },\n });\n this.reload.next();\n this.started = true;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelListService {\n private _instances: Map<string, ModelList<any>> = new Map();\n\n constructor(\n @Inject(DATA_AUTH_SERVICE) private _auth: AuthServiceBase<any, any, any>,\n ) {\n this._auth.logout$.subscribe(() => this.reset());\n }\n\n public reset() {\n for (const i of this._instances.values()) {\n if (i.unsubscribe) {\n console.log('Clearing ', i);\n i.unsubscribe.next();\n }\n }\n this._instances.clear();\n }\n\n public get<T extends DataModel>(\n name: string,\n collection: Collection<T>,\n defaults: ModelListParams,\n ) {\n let ml: ModelList<T>;\n\n if (!name || !this._instances.has(name) || !defaults.keep) {\n ml = new ModelList<T>(name, collection);\n ml.queryset = collection.queryset();\n ml.fields = new ModelListFields(collection, defaults.fields);\n ml.sorter = new ModelListSorter(defaults.sorter || []);\n ml.paginator = new ModelListPaginator(defaults.paginator);\n ml.filters = new ModelListFilters(defaults.filters);\n if (defaults.keep) {\n this._instances.set(name, ml);\n }\n } else {\n ml = this._instances.get(name)!;\n }\n if (!ml.started) {\n if (defaults.reload) {\n ml.reload = defaults.reload;\n } else {\n ml.reload = new Subject<void | boolean>();\n }\n if (defaults.unsubscribe) {\n ml.unsubscribe = defaults.unsubscribe;\n } else {\n ml.unsubscribe = new Subject<void>();\n }\n ml.start(defaults);\n }\n return ml;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelList } from '../../model-list.service';\nimport {\n CDK_DRAG_CONFIG,\n CdkDragDrop,\n DragDropModule,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgbOffcanvas, NgbOffcanvasModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListField } from '../model-list-fields';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\n\nconst DragConfig = {\n dragStartThreshold: 5,\n pointerDirectionChangeThreshold: 10,\n zIndex: 10000,\n};\n\n@Component({\n selector: 'data-model-list-fields-selector',\n templateUrl: './model-list-fields-selector.component.html',\n styleUrls: ['./model-list-fields-selector.component.sass'],\n imports: [\n CommonModule,\n DragDropModule,\n CdkScrollableModule,\n NgbOffcanvasModule,\n ],\n providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }]\n})\nexport class ModelListFieldsSelectorComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @ViewChild('selector', { static: true })\n public ofctpl!: ElementRef<HTMLDivElement>;\n public seeMore: boolean = false;\n\n constructor(private _ofc: NgbOffcanvas) {}\n\n public ngOnInit() {\n if (!this.list || !this.list.fields) {\n throw new Error('Missing list / fields');\n }\n }\n\n public open() {\n this._ofc.open(this.ofctpl);\n }\n\n drop($event: CdkDragDrop<T, any>) {\n let pos = $event.currentIndex * 10;\n if ($event.currentIndex > $event.previousIndex) {\n pos += 1;\n } else {\n pos -= 1;\n }\n this.list.fields.setPosition($event.item.data, pos);\n }\n\n public toggle(f: ModelListField) {\n if (f.enabled) {\n this.list.fields.disable(f.name);\n } else {\n this.list.fields.enable(f.name);\n }\n }\n}\n","<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\" aria-label=\"Choix des champs\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n @if (list.fields.fields|async; as fields) {\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\">\n @for (f of fields; track f) {\n @if (seeMore || f.priority >= 0) {\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\" [attr.arial-label]=\"f.label\" role=\"button\">{{f.label}}<span class=\"badge bg-info\"> {{f.priority}}</span></div>\n }\n }\n </div>\n }\n <button class=\"btn btn-sm btn-link\" (click)=\"seeMore=!seeMore\">plus de champs</button>\n </div>\n</ng-template>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\n\n\n@Component({\n selector: 'data-model-list-sorter',\n templateUrl: './model-list-sorter.component.html',\n styleUrls: ['./model-list-sorter.component.sass'],\n imports: []\n})\nexport class ModelListSorterComponent {\n /**\n * ModelList reference.\n */\n @Input() public list!: ModelList<any>;\n /**\n * Sort field name.\n */\n @Input() public field!: string;\n\n constructor() {}\n\n public isUp(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'asc';\n }\n return false;\n }\n\n public isDown(): boolean {\n const f = this.list.sorter.get(this.field);\n if (f) {\n return f.direction === 'desc';\n }\n return false;\n }\n\n public setUp(): void {\n this.list.sorter.set(this.field, 'asc');\n }\n\n public setDown(): void {\n this.list.sorter.set(this.field, 'desc');\n }\n\n public getCount(): number {\n return this.list.sorter.get(this.field)\n ? this.list.sorter.getAll().length\n : 0;\n }\n\n public getOrder(): number {\n return this.list.sorter.getOrder(this.field);\n }\n\n public cancel(): void {\n this.list.sorter.unset(this.field);\n }\n}\n","<span class=\"dirs\">@if (getOrder()>=0 || getCount()>1) {\n <span (click)=\"cancel()\" role=\"button\">@if (getCount()>1) {\n <span class=\"count\"> {{getOrder()}}</span>\n }<span class=\"bi bi-x\"></span></span>\n }<span class=\"bi bi-sort-down-alt\" (click)=\"setUp()\" [class.active]=\"isUp()\" role=\"button\"></span><span class=\"bi bi-sort-down\" (click)=\"setDown()\" [class.active]=\"isDown()\" role=\"button\"></span>&nbsp;</span>\n <ng-content></ng-content>","import {\n Component,\n DestroyRef,\n inject,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { DataModel } from '../../../data/data-model';\nimport { ModelListField } from '../model-list-fields';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ModelListSorterComponent } from '../../model-list-sorter/model-list-sorter/model-list-sorter.component';\nimport { filter } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-field-header',\n templateUrl: './model-list-field-header.component.html',\n styleUrls: ['./model-list-field-header.component.sass'],\n imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent]\n})\nexport class ModelListFieldHeaderComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public field!: string;\n @Input() public sort?: boolean = false;\n @Input() public sortField?: string;\n @Input() public menuMode: 'hide' | 'side' | 'click' = 'side';\n @Input() public sortMode: 'hide' | 'side' | 'click' = 'side';\n @Input() public display?: boolean;\n\n @ViewChild('mnu', { static: false }) public mnu?: NgbDropdown;\n public dispMenuMode = this.menuMode;\n public dispSortMode = this.sortMode;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit() {\n this.list.messages$\n .pipe(\n takeUntilDestroyed(this.destroy$),\n filter((m) => m.dest === 'header'),\n )\n .subscribe((m) => {\n this.dispMenuMode =\n m.menu && m.menu !== 'default' ? m.menu : this.menuMode;\n this.dispSortMode =\n m.sort && m.sort !== 'default' ? m.sort : this.sortMode;\n this.display = m.show !== undefined ? m.show : this.display;\n });\n }\n\n public disable() {\n this.list.fields.disable(this.field);\n }\n\n public enable(f: ModelListField) {\n this.list.fields.move(f.name, 'after', this.field);\n this.list.fields.enable(f.name);\n }\n}\n","\n<ng-template #label><span #ref>\n <ng-content></ng-content></span>@if (!ref.children.length) {\n <span>{{list.fields.get(field)?.label||field}}</span>\n}</ng-template>\n<div class=\"d-flex flex-row justify-content-between align-items-end slabel\">\n <div class=\"flex-grow-1\">\n @if (sort && dispSortMode==='side') {\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n }\n @if (!sort || dispSortMode==='hide') {\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n }\n </div>\n @if (dispMenuMode==='side') {\n <div class=\"navicons d-flex flex-row\" [attr.aria-label]=\"'Gestion champs'\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\" aria-label=\"Déplacer vers la gauche\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\" [container]=\"'body'\"><i class=\"bi bi-record\" ngbDropdownToggle aria-label=\"Ouvrir la boite de dialogue des champs\" role=\"button\"></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne après</h6>\n @for (f of list.fields.fields|async; track f) {\n @if (f.allowed && !f.enabled) {\n <button ngbDropdownItem (click)=\"enable(f)\" [attr.aria-label]=\"f.label||f.name\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n }\n }\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\" aria-label=\"Déplacer vers la droite\"></i>\n </div>\n}\n</div>","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { ModelListFilter } from '../model-list-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-filters-select',\n templateUrl: './model-list-filters-select.component.html',\n styleUrls: ['./model-list-filters-select.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListFiltersSelectComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemActiveClasses: string[] | string =\n 'badge bg-success mx-1';\n @Input() public itemInactiveClasses: string[] | string =\n 'badge bg-secondary mx-1';\n @Input() public mode: 'select' | 'badge' | 'badge_summary' = 'badge';\n\n public selectForm = new FormControl<ModelListFilter | null>(null);\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public toggle(f: ModelListFilter) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n }\n\n public ngOnInit() {\n if (this.mode === 'select') {\n this.selectForm.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((f) => {\n if (f) {\n f.enabled = !f.enabled;\n this.list.filters.update();\n this.selectForm.setValue(null, { emitEvent: false });\n }\n });\n }\n }\n}\n","\n@if (mode==='badge') {\n @for (f of list.filters.available|async; track f) {\n <span (click)=\"toggle(f)\" [ngClass]=\"containerClasses\">@if (f.enabled) {\n <span role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}}</span></span>\n }@if (!f.enabled) {\n <span role=\"button\" [ngClass]=\"itemInactiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-square me-2\"></i><span>{{f.label}}</span></span>\n }</span>\n }\n}\n@if (mode==='badge_summary') {\n @for (f of list.filters.available|async; track f) {\n <span (click)=\"toggle(f)\" [ngClass]=\"containerClasses\">@if (f.enabled) {\n <span role=\"button\" [ngClass]=\"itemActiveClasses\" [title]=\"f.desc\"><i class=\"bi bi-check2-square me-2\"></i><span>{{f.label}} : {{f.summary||'...'}}</span></span>\n }</span>\n }\n}\n@if (mode==='select') {\n <select class=\"form-select\" [formControl]=\"selectForm\">\n <option [ngValue]=\"null\">-- Ajouter un filtre --</option>\n @for (f of list.filters.available|async; track f) {\n @if (!f.enabled && !f.group) {\n <option [ngValue]=\"f\">{{f.label}}</option>\n }\n }\n @for (g of list.filters.groups|async; track g) {\n <optgroup [label]=\"g.label\">\n @for (f of g.filters; track f) {\n @if (!f.enabled && f.allowed) {\n <option [ngValue]=\"f\">{{f.label}}</option>\n }\n }\n </optgroup>\n }\n </select>\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListTextFilter } from './model-list-text-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-text-filter',\n templateUrl: './model-list-text-filter.component.html',\n styleUrls: ['./model-list-text-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListTextFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTextFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | null>(null);\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val || '')) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"text\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListAutocompleteFilter } from './model-list-autocomplete-filter';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\nimport { DataModel } from '../../../../data/data-model';\nimport { debounceTime, distinctUntilChanged, Observable } from 'rxjs';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { switchMap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-autocomplete-filter',\n templateUrl: './model-list-autocomplete-filter.component.html',\n styleUrls: ['./model-list-autocomplete-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListAutocompleteFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListAutocompleteFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n protected _resetAfterSet = false;\n private _tpl!: TplFun<T>;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit(): void {\n this._setDisplay();\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (val) {\n console.log('value changed', val, this._display(val));\n if (this.filter.set(val.id, this._display(val))) {\n this.list.filters.update();\n if (this._resetAfterSet) {\n this.fc.setValue(null);\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active',\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n private _setDisplay() {\n if (this.filter.display) {\n if (this.filter.display && typeof this.filter.display === 'string') {\n this._tpl = (model: T) =>\n `${(model as any)[this.filter.display as string]}`;\n } else if (\n this.filter.display &&\n typeof this.filter.display === 'function'\n ) {\n this._tpl = this.filter.display.bind(this);\n }\n } else {\n this._tpl = (model: T) => {\n if ((model as any)._display) {\n return (model as any)._display;\n } else {\n return `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n };\n }\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n return this._tpl(x);\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<T[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n // Generate filter\n for (const k of Object.keys(this.filter.filter)) {\n if (\n this.filter.filter[k] !== null ||\n this.filter.filter[k] !== undefined\n ) {\n f[k] = this.filter.filter[k];\n }\n }\n // Add search param\n f[this.filter.searchparam] = term;\n // Update queryset filter\n this.filter.queryset?.filter(f);\n // Launch queryset\n return this.filter.queryset.get();\n }),\n takeUntilDestroyed(this.destroy$),\n );\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelListAutocompleteMultiFilter } from './model-list-autocomplete-multi-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { ModelListAutocompleteFilterComponent } from '../model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { CommonModule } from '@angular/common';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-autocomplete-multi-filter',\n templateUrl: './model-list-autocomplete-multi-filter.component.html',\n styleUrls: ['./model-list-autocomplete-multi-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListAutocompleteMultiFilterComponent<\n T extends DataModel\n> extends ModelListAutocompleteFilterComponent<T> {\n @Input() public override filter!: ModelListAutocompleteMultiFilter<T>;\n protected override _resetAfterSet = true;\n\n public unset(value: any, desc: string) {\n this.filter.unset(value, desc);\n this.list.filters.update();\n this.fc.setValue(null);\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n <div class=\"enabled mt-1\">\n @for (e of filter.mcurrent$|async; track e) {\n <div><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n }\n </div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimeFilter } from './model-list-datetime-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-datetime-filter',\n templateUrl: './model-list-datetime-filter.component.html',\n styleUrls: ['./model-list-datetime-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListDatetimeFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimeFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"datetime-local\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDatetimerangeFilter } from './model-list-datetimerange-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { combineLatest } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-datetime-range-filter',\n templateUrl: './model-list-datetime-range-filter.component.html',\n styleUrls: ['./model-list-datetime-range-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule],\n})\nexport class ModelListDatetimeRangeFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDatetimerangeFilter;\n @Input() public classes: string[] | string = '';\n public fc1 = new FormControl();\n public fc2 = new FormControl();\n\n constructor() {}\n\n ngOnInit(): void {\n this.filter.valueChanges.subscribe((val) => {\n // If value is not an array, return\n if (val && !Array.isArray(val)) {\n const [v1, v2] = val.value.split('--');\n this.fc1.setValue(v1, { emitEvent: false });\n this.fc2.setValue(v2, { emitEvent: false });\n }\n });\n\n combineLatest([this.fc1.valueChanges, this.fc2.valueChanges]).subscribe(\n ([val1, val2]) => {\n if (val1 && val2) {\n if (this.filter.set(`${val1}--${val2}`, `${val1}--${val2}`)) {\n this.list.filters.update();\n }\n }\n },\n );\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control form-control-sm mb-1\" type=\"datetime-local\" [formControl]=\"fc1\" [placeholder]=\"filter.help\">\n <input class=\"form-control form-control-sm\" type=\"datetime-local\" [formControl]=\"fc2\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport {\n GetFlagsResult,\n ModelListFlagsFilter,\n} from './model-list-flags-filter';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../../../data/data-model';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime, Observable } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-flags-filter',\n templateUrl: './model-list-flags-filter.component.html',\n styleUrls: ['./model-list-flags-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListFlagsFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListFlagsFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | null>(null);\n public flags$!: Observable<GetFlagsResult>;\n\n constructor() {}\n\n public ngOnInit() {\n console.log(this.filter);\n if (this.filter.collection && this.filter.action) {\n this.flags$ = this.filter.collection.action<GetFlagsResult>(\n null,\n 'GET',\n this.filter.action\n );\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (val !== null) {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n this.fc.setValue(null, { emitEvent: false });\n }\n }\n });\n }\n }\n\n public unset(value: any, desc: string) {\n this.fc.setValue(null);\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n @for (c of flags$|async; track c) {\n <option [ngValue]=\"c.flag\">{{c.flag}} ({{c.count}})</option>\n }\n </select>\n <div class=\"enabled mt-1\">\n @for (e of filter.mcurrent$|async; track e) {\n <div><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n }\n </div>\n</div>","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport {\n GeoSearchResult,\n ModelListGeodistanceFilter,\n} from './model-list-geodistance-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n Observable,\n Subject,\n} from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-geodistance-filter',\n templateUrl: './model-list-geodistance-filter.component.html',\n styleUrls: ['./model-list-geodistance-filter.component.sass'],\n imports: [CommonModule, NgbTypeaheadModule, ReactiveFormsModule]\n})\nexport class ModelListGeodistanceFilterComponent implements OnInit, OnDestroy {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListGeodistanceFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n public fd = new FormControl('');\n public search = this._search.bind(this);\n public display = this._display.bind(this);\n private _subscription = new Subject<void>();\n\n constructor() {}\n\n public ngOnInit(): void {\n const address = this.fc.valueChanges.pipe(\n debounceTime(250),\n filter((val) => !!val)\n );\n const distance = this.fd.valueChanges.pipe(filter((d) => !!d));\n combineLatest([address, distance]).subscribe(([val, dist]) => {\n if (this.filter.set(`${dist},${val.lng},${val.lat}`, val.label)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n public ngOnDestroy(): void {\n this._subscription.next();\n this._subscription.complete();\n }\n\n private _display(x: GeoSearchResult): any {\n return `${x.label}`;\n }\n\n private _search(text$: Observable<string>): Observable<GeoSearchResult[]> {\n return text$.pipe(\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => this.filter.geolocator(term))\n );\n }\n\n public scrollAction($event: any) {\n if (!this.filter.scroll) {\n return;\n }\n const elem =\n $event.currentTarget.nextElementSibling.getElementsByClassName(\n 'active'\n )[0];\n elem.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <div class=\"row g-1\">\n <div class=\"col-4\">\n <select class=\"form-select\" [formControl]=\"fd\">\n <option value=\"\">Distance</option>\n <option value=\"lte,10\">< 10 km</option>\n <option value=\"lte,20\">< 20 km</option>\n <option value=\"lte,30\">< 30 km</option>\n <option value=\"lte,50\">< 50 km</option>\n <option value=\"lte,80\">< 80 km</option>\n <option value=\"lte,100\">< 100 km</option>\n <option value=\"lte,150\">< 150 km</option>\n <option value=\"lte,200\">< 200 km</option>\n <option value=\"lte,250\">< 250 km</option>\n <option value=\"lte,300\">< 300 km</option>\n <option value=\"lte,500\">< 500 km</option>\n <option value=\"lte,1000\">< 1000 km</option>\n </select>\n </div>\n <div class=\"col-8\">\n <input class=\"form-control\" [formControl]=\"fc\" [ngbTypeahead]=\"search\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"display\" [resultFormatter]=\"display\" [placeholder]=\"filter.help\" (keyup.arrowDown)=\"scrollAction($event)\" (keyup.arrowUp)=\"scrollAction($event)\" #th=\"ngbTypeahead\" [class.tascroll]=\"filter.scroll\">\n </div>\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectFilter } from './model-list-select-filter';\nimport { combineLatest, debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\n@Component({\n selector: 'data-model-list-select-filter',\n templateUrl: './model-list-select-filter.component.html',\n styleUrls: ['./model-list-select-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListSelectFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl<string | number | null>(null);\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue(val ? (val as IDispEditChoice).value : null, {\n emitEvent: false,\n });\n });\n\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n if (val === null) {\n this.filter.clear();\n this.list.filters.update();\n } else {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n @for (c of filter.choices|async; track c) {\n <option [ngValue]=\"c.value\">{{c.desc}}</option>\n }\n </select>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListSelectMultiFilter } from './model-list-select-multi-filter';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../../../data/data-model';\nimport { combineLatest, debounceTime } from 'rxjs';\n\n@Component({\n selector: 'data-model-list-select-multi-filter',\n templateUrl: './model-list-select-multi-filter.component.html',\n styleUrls: ['./model-list-select-multi-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListSelectMultiFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<T>;\n @Input() public filter!: ModelListSelectMultiFilter<T>;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl(null);\n\n constructor() {}\n\n public ngOnInit() {\n combineLatest([\n this.filter.choices,\n this.fc.valueChanges.pipe(debounceTime(250)),\n ]).subscribe(([choices, val]) => {\n for (const ch of choices) {\n if (ch.value === val) {\n if (this.filter.set(ch.value, ch.desc)) {\n this.list.filters.update();\n break;\n }\n }\n }\n this.fc.setValue(null, { emitEvent: false });\n });\n }\n\n public unset(value: any, desc: string) {\n this.fc.setValue(null);\n this.filter.unset(value, desc);\n this.list.filters.update();\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <select class=\"form-select\" [formControl]=\"fc\">\n <option [ngValue]=\"null\">-- {{filter.help}} --</option>\n @for (c of filter.choices|async; track c) {\n <option [ngValue]=\"c.value\">{{c.desc}}</option>\n }\n </select>\n <div class=\"enabled mt-1\">\n @for (e of filter.mcurrent$|async; track e) {\n <div><i class=\"bi bi-trash me-2\" (click)=\"unset(e.value, e.desc)\" role=\"button\"></i>{{e.desc}}</div>\n }\n </div>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListTreeFilter } from './model-list-tree-filter';\nimport { CommonModule } from '@angular/common';\nimport { DataModel } from '../../../../data/data-model';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime, firstValueFrom, Subject, Subscription } from 'rxjs';\nimport { FilterData, Queryset } from '../../../../data/data-query';\n\nclass Level<T extends DataModel> {\n public level: number;\n public tree: Tree<T>;\n public choices: { value: number; desc: string }[];\n public fc: FormControl;\n public selected!: number;\n public subs: Subscription;\n\n constructor(\n tree: Tree<T>,\n level: number,\n choices: { value: number; desc: string }[]\n ) {\n this.tree = tree;\n this.level = level;\n this.fc = new FormControl('');\n this.choices = choices;\n this.subs = this.fc.valueChanges.subscribe((val) => {\n if (this.selected !== val) {\n this.selected = val;\n this.tree.updated(this);\n }\n });\n }\n\n public close() {\n this.subs.unsubscribe();\n }\n}\n\nclass Tree<T extends DataModel> {\n levels: Level<T>[] = [];\n changed: Subject<number | null> = new Subject<number | null>();\n\n constructor(\n private qs: Queryset<T>,\n private maxLevel: number,\n private display: any,\n private filter: FilterData\n ) {}\n\n /**\n * Conditionnaly add level to current tree.\n *\n * - if previous level have non-empty selected value\n * - if current level choices are non empty\n */\n public async addLevel(fparent?: number): Promise<Level<T> | null> {\n let values: T[] = [];\n if (this.levels.length === 0) {\n values = await firstValueFrom(\n this.qs\n .filter({ level: this.levels.length, parent: 'null', ...this.filter })\n .get()\n );\n } else {\n const parent = fparent\n ? fparent\n : this.levels[this.levels.length - 1].selected;\n if (parent) {\n values = await firstValueFrom(\n this.qs\n .filter({\n level: this.levels.length,\n parent: this.levels[this.levels.length - 1].selected || 'null',\n ...this.filter,\n })\n .get()\n );\n }\n }\n if (values.length > 0) {\n const level = new Level(this, this.levels.length, []);\n for (const v of values) {\n level.choices.push({ value: v.id as number, desc: this.display(v) });\n }\n this.levels.push(level);\n return level;\n }\n return null;\n }\n\n public updated(level: Level<T>) {\n const newLevels: Level<T>[] = [];\n for (const l of this.levels) {\n if (l.level <= level.level) {\n newLevels.push(l);\n } else if (l.level > level.level) {\n l.close();\n }\n }\n this.levels = newLevels;\n this.addLevel();\n if (level.selected) {\n this.changed.next(level.selected);\n } else {\n this.changed.next(this.levels[level.level - 1]?.selected || null);\n }\n }\n\n public async prepare(value: number) {\n // console.log('prepare', value);\n const levels: T[] = [];\n let cur = (\n await firstValueFrom(this.qs.filter({ id: value, ...this.filter }).get())\n )[0];\n levels.push(cur);\n let nlev = 0;\n while ((cur as any).parent !== null) {\n cur = (\n await firstValueFrom(\n this.qs\n .filter({\n id: (cur as any).parent,\n ...this.filter,\n })\n .get()\n )\n )[0];\n levels.push(cur);\n nlev++;\n if (nlev > this.maxLevel) {\n throw Error('Max level error, could not find root');\n }\n }\n for (let i = levels.length - 1; i >= 0; i--) {\n const lv = await this.addLevel();\n if (lv !== null) {\n lv.selected = levels[i].id as number;\n lv.fc.setValue(levels[i].id as number, { emitEvent: false });\n }\n }\n if (this.levels.length <= this.maxLevel) {\n await this.addLevel();\n }\n }\n\n public reset() {}\n}\n\n@Component({\n selector: 'data-model-list-tree-filter',\n templateUrl: './model-list-tree-filter.component.html',\n styleUrls: ['./model-list-tree-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListTreeFilterComponent<T extends DataModel>\n implements OnInit\n{\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListTreeFilter<T>;\n @Input() public classes: string[] | string = '';\n public tree!: Tree<T>;\n\n constructor() {}\n\n public async ngOnInit() {\n this.tree = new Tree(\n this.filter.queryset,\n this.filter.maxLevel,\n this.filter.display,\n this.filter.filter\n );\n if (this.filter.get()) {\n await this.tree.prepare(this.filter.get()?.value as number);\n } else {\n await this.tree.addLevel();\n }\n\n this.tree.changed.pipe(debounceTime(250)).subscribe((val) => {\n // console.log('changed', val);\n if (val === null) {\n this.filter.clear();\n this.list.filters.update();\n } else {\n if (this.filter.set(val, '')) {\n this.list.filters.update();\n }\n }\n });\n\n // this.tree.changed.subscribe((selected) => {\n // console.log('tree changed', selected);\n // this.filter.set(selected, '');\n // });\n // if (this.filter.getValue()) {\n // console.log('filter value', this.filter.getValue());\n // await this.tree.prepare(this.filter.getValue() as number);\n // } else {\n // await this.tree.addLevel();\n // }\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n @for (l of tree.levels; track l) {\n <div class=\"levelselect\">\n <select class=\"form-select form-select-sm\" [formControl]=\"l.fc\">\n <option value=\"\">{{filter.help}}</option>\n @for (ch of l.choices; track ch) {\n <option [value]=\"ch.value\">{{ch.desc}}</option>\n }\n </select>\n </div>\n }\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { ModelListNumberFilter } from './model-list-number-filter';\nimport { CommonModule } from '@angular/common';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'data-model-list-number-filter',\n templateUrl: './model-list-number-filter.component.html',\n styleUrls: ['./model-list-number-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule, NgbDropdownModule]\n})\nexport class ModelListNumberFilterComponent implements OnInit {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListNumberFilter;\n @Input() public classes: string[] | string = '';\n public fc = new UntypedFormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as any).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n\n selectOp(eq: string) {\n this.filter.setOperator(eq);\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\">\n <div class=\"bi bi-trash\"></div>\n </div>\n <label>{{filter.label}}</label>\n <div class=\"input-group\" ngbDropdown>\n <button class=\"btn btn-outline-secondary\" type=\"button\" ngbDropdownToggle><span class=\"me-2\">{{filter.operator.label}}</span>\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @for (op of filter.operations; track op) {\n <button ngbDropdownItem (click)=\"selectOp(op.operator)\" [class.text-primary]=\"op.operator === filter.operator.operator\">{{op.label}}</button>\n }\n </div>\n </button>\n <input class=\"form-control\" type=\"number\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../../model-list.service';\nimport { ModelListDateFilter } from './model-list-date-filter';\nimport { CommonModule } from '@angular/common';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { debounceTime } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'data-model-list-date-filter',\n templateUrl: './model-list-date-filter.component.html',\n styleUrls: ['./model-list-date-filter.component.sass'],\n imports: [CommonModule, ReactiveFormsModule]\n})\nexport class ModelListDateFilterComponent {\n @Input() public list!: ModelList<any>;\n @Input() public filter!: ModelListDateFilter;\n @Input() public classes: string[] | string = '';\n public fc = new FormControl();\n\n constructor() {}\n\n public ngOnInit() {\n this.filter.valueChanges.subscribe((val) => {\n this.fc.setValue((val as IDispEditChoice).value, { emitEvent: false });\n });\n this.fc.valueChanges.pipe(debounceTime(250)).subscribe((val) => {\n if (this.filter.set(val, val)) {\n this.list.filters.update();\n }\n });\n }\n\n public disable() {\n this.filter.enabled = false;\n this.list.filters.update();\n }\n}\n","\n<div class=\"filteritem\" [ngClass]=\"filter.displayClasses || classes\">\n <div class=\"trash float-end\" (click)=\"disable()\"><i class=\"bi bi-trash\"></i></div>\n <label>{{filter.label}}</label>\n <input class=\"form-control\" type=\"date\" [formControl]=\"fc\" [placeholder]=\"filter.help\">\n</div>","import { Component, Input } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { CommonModule } from '@angular/common';\nimport { ModelListTextFilterComponent } from '../filters/model-list-text-filter/model-list-text-filter.component';\nimport { ModelListAutocompleteFilterComponent } from '../filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component';\nimport { ModelListAutocompleteMultiFilterComponent } from '../filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component';\nimport { ModelListDatetimeFilterComponent } from '../filters/model-list-datetime-filter/model-list-datetime-filter.component';\nimport { ModelListDatetimeRangeFilterComponent } from '../filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component';\nimport { ModelListFlagsFilterComponent } from '../filters/model-list-flags-filter/model-list-flags-filter.component';\nimport { ModelListGeodistanceFilterComponent } from '../filters/model-list-geodistance-filter/model-list-geodistance-filter.component';\nimport { ModelListSelectFilterComponent } from '../filters/model-list-select-filter/model-list-select-filter.component';\nimport { ModelListSelectMultiFilterComponent } from '../filters/model-list-select-multi-filter/model-list-select-multi-filter.component';\nimport { ModelListTreeFilterComponent } from '../filters/model-list-tree-filter/model-list-tree-filter.component';\nimport { ModelListNumberFilterComponent } from '../filters/model-list-number-filter/model-list-number-filter.component';\nimport { ModelListDateFilterComponent } from '../filters/model-list-date-filter/model-list-date-filter.component';\n\n// SEE: register filter components and load them dynamically to allow user defined filters\n\n@Component({\n selector: 'data-model-list-filters',\n templateUrl: './model-list-filters.component.html',\n styleUrls: ['./model-list-filters.component.sass'],\n imports: [\n CommonModule,\n ModelListTextFilterComponent,\n ModelListNumberFilterComponent,\n ModelListAutocompleteFilterComponent,\n ModelListAutocompleteMultiFilterComponent,\n ModelListDatetimeFilterComponent,\n ModelListDateFilterComponent,\n ModelListDatetimeRangeFilterComponent,\n ModelListFlagsFilterComponent,\n ModelListGeodistanceFilterComponent,\n ModelListSelectFilterComponent,\n ModelListSelectMultiFilterComponent,\n ModelListTreeFilterComponent,\n ]\n})\nexport class ModelListFiltersComponent {\n @Input() public list!: ModelList<any>;\n @Input() public containerClasses: string[] | string = '';\n @Input() public itemClasses: string[] | string = '';\n}\n","\n<div [ngClass]=\"containerClasses\">\n @for (f of list.filters.enabled|async; track f) {\n @switch (f.type) {\n @case ('autocomplete') {\n <data-model-list-autocomplete-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-filter>\n }\n @case ('autocompletemulti') {\n <data-model-list-autocomplete-multi-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-autocomplete-multi-filter>\n }\n @case ('datetime') {\n <data-model-list-datetime-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-filter>\n }\n @case ('date') {\n <data-model-list-date-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-date-filter>\n }\n @case ('datetimerange') {\n <data-model-list-datetime-range-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-datetime-range-filter>\n }\n @case ('flags') {\n <data-model-list-flags-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-flags-filter>\n }\n @case ('geodistance') {\n <data-model-list-geodistance-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-geodistance-filter>\n }\n @case ('number') {\n <data-model-list-number-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-number-filter>\n }\n @case ('select') {\n <data-model-list-select-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-filter>\n }\n @case ('selectmulti') {\n <data-model-list-select-multi-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-select-multi-filter>\n }\n @case ('text') {\n <data-model-list-text-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-text-filter>\n }\n @case ('tree') {\n <data-model-list-tree-filter [filter]=\"$any(f)\" [list]=\"list\" [ngClass]=\"itemClasses\"></data-model-list-tree-filter>\n }\n }\n }\n</div>","import { ModelListFilter } from './model-list-filter';\n\nexport class ModelListFilterGroup {\n public name: string = '';\n public label: string = '';\n public desc: string = '';\n public position: number = 0;\n public allowed: boolean = true;\n public enabled: boolean = true;\n public filters: ModelListFilter[] = [];\n\n constructor(params: Partial<ModelListFilterGroup>) {\n this.name = params.name || '';\n this.label = params.label || '';\n this.desc = params.desc || '';\n this.position = params.position || 0;\n this.allowed = params.allowed || true;\n this.enabled = params.enabled || true;\n this.filters = params.filters || [];\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { Collection } from '../../../../data/data-collection';\nimport { FilterData, Queryset } from '../../../../data/data-query';\nimport { TplFun } from '../../../../dispedit/fkselect/fkselect.component';\n\nexport interface ModelListAutocompleteParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n queryset?: Queryset<T>;\n searchparam?: string;\n display?: string | TplFun<T>;\n filter?: FilterData;\n scroll?: boolean;\n}\n\nexport class ModelListAutocompleteFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListAutocompleteParams<T>\n{\n public display?: string | TplFun<T>;\n public searchparam!: string;\n public queryset!: Queryset<T>;\n public collection?: Collection<T>;\n public filter!: FilterData;\n public scroll!: boolean;\n\n constructor(params: ModelListAutocompleteParams<T>) {\n super(params);\n this.type = 'autocomplete';\n this.display = params.display;\n this.searchparam = params.searchparam ? params.searchparam : 'search';\n if (!params.collection && !params.queryset) {\n throw 'Missing related data (collection or queryset)';\n }\n this.collection = params.collection;\n if (params.collection && !params.queryset) {\n this.queryset = params.collection.queryset();\n } else {\n this.queryset = params.queryset as Queryset<T>;\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n this.filter = params.filter || {};\n\n if (this.label == '') {\n this.label = 'Sélectionnez par texte';\n }\n if (this.help == '') {\n this.help = 'Recherche par texte';\n }\n }\n}\n","import {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListAutocompleteMultiParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {}\n\nexport class ModelListAutocompleteMultiFilter<\n T extends DataModel\n> extends ModelListAutocompleteFilter<T> {\n public override multi = true;\n\n constructor(params: ModelListAutocompleteMultiParams<T>) {\n super(params as ModelListAutocompleteParams<T>);\n this.type = 'autocompletemulti';\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetime\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure cible\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\n\nexport class ModelListDateFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = 'date';\n if (this.label == '') {\n this.label = 'Sélectionnez par date';\n }\n if (this.help == '') {\n this.help = 'Date cible';\n }\n }\n}\n","import {ModelListFilter, ModelListFilterParams} from \"../../model-list-filter\";\n\nexport class ModelListDatetimerangeFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = \"datetimerange\";\n if (this.label == \"\") {\n this.label = \"Sélectionnez par intervalle de date/heure\";\n }\n if (this.help == \"\") {\n this.help = \"Date/heure\";\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { Collection } from '../../../../data/data-collection';\nimport { DataModel } from '../../../../data/data-model';\n\nexport interface ModelListFlagsFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n collection?: Collection<T>;\n action?: string;\n}\n\nexport type GetFlagsResult = { flag: string; count: number }[];\n\nexport class ModelListFlagsFilter<T extends DataModel> extends ModelListFilter {\n public collection!: Collection<T>;\n public action: string = 'get_flags';\n public override multi = true;\n\n constructor(params: ModelListFlagsFilterParams<T>) {\n super(params);\n this.type = 'flags';\n if (this.label == '') {\n this.label = 'Sélectionnez par étiquette';\n }\n if (this.help == '') {\n this.help = \"Nom de l'étiquette\";\n }\n if (!params.collection) {\n throw 'Missing collection for flags filter';\n }\n this.collection = params.collection;\n if (params.action) {\n this.action = params.action;\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { Observable } from 'rxjs';\n\nexport interface GeoSearchResult {\n score: number;\n label: string;\n lat: number;\n lng: number;\n}\n\nexport interface ModelListGeodistanceFilterParams\n extends ModelListFilterParams {\n geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n geomap?: (pos: [number, number], dist: number) => string;\n scroll?: boolean;\n}\n\nexport class ModelListGeodistanceFilter\n extends ModelListFilter\n implements ModelListGeodistanceFilterParams\n{\n public geolocator: (pos: string) => Observable<GeoSearchResult[]>;\n public scroll!: boolean;\n\n constructor(params: ModelListGeodistanceFilterParams) {\n super(params);\n\n this.type = 'geodistance';\n this.geolocator = params.geolocator;\n if (this.label == '') {\n this.label = \"Par distance autour d'un point\";\n }\n if (this.help == '') {\n this.help = 'Ville & distance';\n }\n this.scroll = params.scroll !== undefined ? params.scroll : true;\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { FilterData } from '../../../../data/data-query';\n\ninterface OperationDescriptor {\n name: string;\n label: string;\n operator: string;\n}\n\nexport const ModelListNumberOperations: OperationDescriptor[] = [\n { name: 'eq', label: '= (égal)', operator: '' },\n { name: 'lt', label: '< (inférieur)', operator: '_lt' },\n { name: 'gt', label: '> (supérieur)', operator: '_gt' },\n { name: 'lte', label: '<= (inférieur ou égal)', operator: '_lte' },\n { name: 'gte', label: '>= (supérieur ou égal)', operator: '_gte' },\n];\n\nexport interface ModelListNumberFilterParams extends ModelListFilterParams {\n operations?: string[];\n}\n\nexport class ModelListNumberFilter extends ModelListFilter {\n public operator = ModelListNumberOperations[0];\n public operations = ModelListNumberOperations;\n\n constructor(params: ModelListNumberFilterParams) {\n super(params as ModelListFilterParams);\n this.type = 'number';\n if (this.label == '') {\n this.label = 'Recherche par valeur';\n }\n if (this.help == '') {\n this.help = 'Valeur à rechercher';\n }\n const ops: OperationDescriptor[] = [];\n if (params.operations && params.operations.length > 0) {\n for (const op of params.operations) {\n for (const dop of this.operations) {\n if (op === dop.name) {\n ops.push(dop);\n }\n }\n }\n if (ops.length > 0) {\n this.operations = ops;\n this.operator = ops[0];\n }\n }\n }\n\n public setOperator(op: string) {\n for (let o of this.operations) {\n if (op === o.operator) {\n this.operator = o;\n }\n }\n }\n\n public override updateFilter(filter: FilterData): void {\n if (this._value !== undefined && this._value !== null) {\n filter[`${this.field}${this.operator.operator}`] = this.getValue();\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\nimport { DataModel } from '../../../../data/data-model';\nimport { DataModelType } from '../../../../data/data-collection';\nimport { isObservable, Observable, of } from 'rxjs';\n\nexport interface ModelListSelectFilterParams<T extends DataModel>\n extends ModelListFilterParams {\n choices?: IDispEditChoice[] | Observable<IDispEditChoice[]>;\n model?: DataModelType<T>;\n mfield?: string;\n}\n\nexport class ModelListSelectFilter<T extends DataModel>\n extends ModelListFilter\n implements ModelListSelectFilterParams<T>\n{\n public choices!: Observable<IDispEditChoice[]>;\n public model?: DataModelType<T>;\n public mfield?: string;\n\n constructor(params: ModelListSelectFilterParams<T>) {\n super(params);\n this.type = 'select';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante';\n }\n if (!params.choices && !params.model) {\n throw 'Missing choices for select filter';\n }\n if (!params.choices && params.model) {\n const m = new params.model();\n const f = m.FM(params.mfield || params.field);\n const ch = (f as any).choices;\n if (!ch) {\n throw 'No choices found for model/field';\n }\n this.choices = of(ch);\n } else {\n if (!isObservable(params.choices)) {\n this.choices = of(params.choices as IDispEditChoice[]);\n } else {\n this.choices = params.choices;\n }\n }\n // Set default only for cur type\n if (this.default && this.type == 'select') {\n this.set(this.default, '', true);\n }\n }\n\n public setDefault() {}\n}\n","import {\n ModelListSelectFilter,\n ModelListSelectFilterParams,\n} from '../model-list-select-filter/model-list-select-filter';\nimport { DataModel } from '../../../../data/data-model';\nimport { IDispEditChoice } from '../../../../dispedit/dispedit/dispedit.constants';\n\nexport interface ModelListMultiSelectFilterParams<T extends DataModel>\n extends ModelListSelectFilterParams<T> {\n default?: IDispEditChoice[];\n}\n\nexport class ModelListSelectMultiFilter<\n T extends DataModel\n> extends ModelListSelectFilter<T> {\n public override multi = true;\n public override default?: IDispEditChoice[];\n\n constructor(params: ModelListMultiSelectFilterParams<T>) {\n super(params);\n\n this.type = 'selectmulti';\n if (this.label == '') {\n this.label = 'Sélectionnez un élément';\n }\n if (this.help == '') {\n this.help = 'Choix par liste déroulante (multiple)';\n }\n // Set default only for cur type\n if (this.default && this.type == 'selectmulti') {\n for (const f of this.default) {\n this.set(f.value, f.desc, true);\n }\n }\n }\n}\n","import {\n ModelListFilter,\n ModelListFilterParams,\n} from '../../model-list-filter';\n\nexport class ModelListTextFilter extends ModelListFilter {\n constructor(params: ModelListFilterParams) {\n super(params);\n this.type = 'text';\n if (this.label == '') {\n this.label = 'Recherche par texte';\n }\n if (this.help == '') {\n this.help = 'Texte à rechercher';\n }\n if (this.default) {\n this.set(this.default, '', true);\n }\n }\n}\n","import { DataModel } from '../../../../data/data-model';\nimport {\n ModelListAutocompleteFilter,\n ModelListAutocompleteParams,\n} from '../model-list-autocomplete-filter/model-list-autocomplete-filter';\n\nexport interface ModelListTreeParams<T extends DataModel>\n extends ModelListAutocompleteParams<T> {\n maxLevel?: number;\n}\n\nexport class ModelListTreeFilter<T extends DataModel>\n extends ModelListAutocompleteFilter<T>\n implements ModelListTreeParams<T>\n{\n public maxLevel: number = 5;\n\n constructor(params: ModelListTreeParams<T>) {\n super(params);\n this.type = 'tree';\n if (this.label == '') {\n this.label = 'Sélectionnez dans la hiérarchie';\n }\n if (this.help == '') {\n this.help = 'Texte à rechercher';\n }\n if (params.maxLevel) {\n this.maxLevel = params.maxLevel;\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { GeoSearchResult } from '../model-list-geodistance-filter';\n\nexport interface BanResults {\n type: 'FeatureCollection';\n version: string;\n features: {\n type: 'Feature';\n geometry: {\n type: 'Point';\n coordinates: [number, number];\n };\n properties: {\n label: string;\n score: number;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n x: number;\n y: number;\n population: number;\n city: string;\n context: string;\n importance: number;\n };\n }[];\n}\n\nexport class BanAdapter {\n constructor(private _http: HttpClient, private _baseUrl: string) {}\n\n public search(text: string): Observable<GeoSearchResult[]> {\n return this._http\n .get<BanResults>(`${this._baseUrl}`, { params: { q: text } })\n .pipe(\n map((r) => {\n const out: GeoSearchResult[] = [];\n for (const f of r.features) {\n out.push({\n score: f.properties.score,\n label: `${f.properties.label} (${f.properties.context})`,\n lat: f.geometry.coordinates[1],\n lng: f.geometry.coordinates[0],\n });\n }\n return out;\n })\n );\n }\n}\n","import { Component, DestroyRef, inject, Input, OnChanges } from '@angular/core';\nimport { ModelList } from '../../model-list.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { debounceTime } from 'rxjs';\nimport { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { DataModel } from '../../../data/data-model';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-model-list-paginator',\n templateUrl: './model-list-paginator.component.html',\n styleUrls: ['./model-list-paginator.component.sass'],\n imports: [ReactiveFormsModule, NgbPaginationModule]\n})\nexport class ModelListPaginatorComponent<T extends DataModel>\n implements OnChanges\n{\n @Input() public list!: ModelList<T>;\n @Input() public maxPages = 200;\n @Input() public hide = false;\n\n public perPageControl: FormControl = new FormControl<number>(10);\n public showDirectAccess = false;\n public directAccess: FormControl = new FormControl<number>(0);\n public curPage = 1;\n public curCount!: number;\n public pageSize!: number;\n private destroy$ = inject(DestroyRef);\n\n public onPageChange(page: number): void {\n if (!page) {\n return;\n }\n this.list.paginator.setPage(page);\n }\n\n public ngOnChanges(): void {\n if (this.list) {\n this.perPageControl.setValue(this.list.paginator.getPageSize(), {\n emitEvent: false,\n });\n this.list.meta\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((meta) => {\n if (meta.nav) {\n this.list.paginator.updatePage(meta.nav.page || 1);\n this.curPage = meta.nav.page || 1;\n this.curCount = meta.nav.count;\n this.list.paginator.updatePageSize(meta.nav.size);\n this.pageSize = this.list.paginator.getPageSize();\n this.perPageControl.setValue(this.pageSize, { emitEvent: false });\n }\n });\n\n this.perPageControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((count) => {\n this.list.paginator.setPageSize(count);\n });\n\n this.directAccess.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), debounceTime(400))\n .subscribe((count) => {\n this.list.paginator.setPage(+count);\n });\n }\n }\n}\n","\n@if (!hide) {\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <select class=\"form-select perpage\" [formControl]=\"perPageControl\">\n @if (maxPages>=10) {\n <option value=\"10\">10 / page</option>\n }\n @if (maxPages>=20) {\n <option value=\"20\">20 / page</option>\n }\n @if (maxPages>=50) {\n <option value=\"50\">50 / page</option>\n }\n @if (maxPages>=100) {\n <option value=\"100\">100 / page</option>\n }\n @if (maxPages>=200) {\n <option value=\"200\">200 / page</option>\n }\n @if (maxPages>=500) {\n <option value=\"500\">500 / page</option>\n }\n @if (maxPages>=1000) {\n <option value=\"1000\">1000 / page</option>\n }\n @if (maxPages>=2000) {\n <option value=\"2000\">2000 / page</option>\n }\n @if (maxPages>=5000) {\n <option value=\"5000\">5000 / page</option>\n }\n @if (maxPages>=10000) {\n <option value=\"10000\">10000 / page</option>\n }\n </select>\n </div>\n @if (list) {\n <div class=\"col-sm-5 pagination\">\n <div class=\"text-xs-center\">\n <ngb-pagination [pageSize]=\"pageSize\" [collectionSize]=\"curCount\" [page]=\"curPage\" (pageChange)=\"onPageChange($event)\" [maxSize]=\"5\" [rotate]=\"true\"></ngb-pagination>\n </div>\n </div>\n }\n <div class=\"col-sm-3 results\">\n <div>{{curCount}} résultats -<span (click)=\"showDirectAccess=!showDirectAccess\" role=\"button\">acces direct</span></div>\n @if (showDirectAccess) {\n <div>\n <input class=\"form-control\" [formControl]=\"directAccess\" type=\"number\" placeholder=\"Aller à la page\">\n </div>\n }\n </div>\n </div>\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\n\n@Pipe({\n name: 'choice',\n standalone: true,\n})\nexport class ChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!value) {\n return '-';\n }\n const fvalue = (value as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = value.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n\n@Pipe({\n name: 'pchoice',\n standalone: true,\n})\nexport class PChoicePipe<T extends DataModel> implements PipeTransform {\n transform(\n value: any,\n model: T,\n field: string,\n mode: 'code' | 'desc' | 'both' = 'desc'\n ): string {\n if (!model) {\n return '-';\n }\n if (!value) {\n return '-';\n }\n // Use value from input, not from field\n const fvalue = value; //- (model as any)[field];\n if (mode === 'code') {\n return `${fvalue}`;\n }\n const manager = model.FM(field);\n const choices = (manager as any).choices;\n if (!choices) {\n return `${fvalue}`;\n }\n for (const ch of choices) {\n if (ch.value === fvalue) {\n if (mode === 'desc') {\n return ch.desc;\n } else {\n return `[${fvalue}] ${ch.desc}`;\n }\n }\n }\n return `[${fvalue}] ??`;\n }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { formatNumber } from '@angular/common';\n\nexport function isValue(\n value: number | string | null | undefined\n): value is number | string {\n return !(value == null || value === '' || value !== value);\n}\n\nexport function strToNumber(value: number | string): number {\n // Convert strings to numbers\n if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new Error(`${value} is not a number`);\n }\n return value;\n}\n\n@Pipe({\n name: 'factor',\n standalone: true,\n})\nexport class FactorPipe<T extends DataModel> implements PipeTransform {\n constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n transform(\n value: T | null,\n field: string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) {\n return null;\n }\n locale = locale || this._locale;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n const manager = value.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatNumber(num / factor, locale, digitsInfo);\n }\n}\n\n@Pipe({\n name: 'pfactor',\n standalone: true,\n})\nexport class PFactorPipe<T extends DataModel> implements PipeTransform {\n constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n transform(\n value: number | string | null | undefined,\n model: T | null,\n field: string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!model) return null;\n if (!value) return null;\n\n locale = locale || this._locale;\n // Use value from input, not from model\n const fvalue = value; // (model as any)[field];\n if (!isValue(fvalue)) return null;\n const manager = model.FM(field);\n let factor = (manager as any).factor;\n factor = factor || 1;\n const num = strToNumber(fvalue);\n return formatNumber(num / factor, locale, digitsInfo);\n }\n}\n","import {\n DEFAULT_CURRENCY_CODE,\n Inject,\n LOCALE_ID,\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { DataModel } from '../data/data-model';\nimport { isValue, strToNumber } from './factor.pipe';\nimport { formatCurrency, getCurrencySymbol } from '@angular/common';\n\n@Pipe({\n name: 'factorc',\n standalone: true,\n})\nexport class FactorcPipe<T extends DataModel> implements PipeTransform {\n constructor(\n @Inject(LOCALE_ID) private _locale: string,\n @Inject(DEFAULT_CURRENCY_CODE) private _defaultCurrencyCode: string = 'EUR'\n ) {}\n\n transform(\n value: T | null,\n field: string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!value) return null;\n const fvalue = (value as any)[field];\n if (!isValue(fvalue)) return null;\n locale = locale || this._locale;\n let currency: string = currencyCode || this._defaultCurrencyCode;\n if (!display) {\n display = 'symbol';\n }\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(\n currency,\n display === 'symbol' ? 'wide' : 'narrow',\n locale\n );\n } else {\n currency = display!;\n }\n }\n\n const manager = value.FM(field);\n const factor = (manager as any).factor || 1;\n const num = strToNumber(fvalue);\n return formatCurrency(\n num / factor,\n locale,\n currency,\n currencyCode,\n digitsInfo\n );\n }\n}\n\n@Pipe({\n name: 'pfactorc',\n standalone: true,\n})\nexport class PFactorcPipe<T extends DataModel> implements PipeTransform {\n constructor(\n @Inject(LOCALE_ID) private _locale: string,\n @Inject(DEFAULT_CURRENCY_CODE) private _defaultCurrencyCode: string = 'EUR'\n ) {}\n\n transform(\n value: number | string | undefined | null,\n model: T | null,\n field: string,\n currencyCode?: string,\n display?: 'code' | 'symbol' | 'symbol-narrow' | string,\n digitsInfo?: string,\n locale?: string\n ): string | null {\n if (!model) return null;\n if (!value) return null;\n // Use value from input, not from model\n const fvalue = value; // (model as any)[field];\n if (!isValue(fvalue)) {\n return null;\n }\n locale = locale || this._locale;\n let currency: string = currencyCode || this._defaultCurrencyCode;\n if (!display) {\n display = 'symbol';\n }\n if (display !== 'code') {\n if (display === 'symbol' || display === 'symbol-narrow') {\n currency = getCurrencySymbol(\n currency,\n display === 'symbol' ? 'wide' : 'narrow',\n locale\n );\n } else {\n currency = display!;\n }\n }\n\n const manager = model.FM(field);\n const factor = (manager as any).factor || 1;\n const num = strToNumber(fvalue);\n return formatCurrency(\n num / factor,\n locale,\n currency,\n currencyCode,\n digitsInfo\n );\n }\n}\n","import {\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { debounceTime, distinctUntilChanged, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\n\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type TplFun<T extends DataModel> = (data: T) => string;\n\n@Component({\n selector: 'data-fkselect',\n templateUrl: './fkselect.component.html',\n styleUrls: ['./fkselect.component.sass'],\n imports: [ReactiveFormsModule, NgbTypeaheadModule]\n})\nexport class FkselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public value?: R;\n\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public update: boolean = false;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public inputClasses: string[] | string = [];\n\n @Output() public selected = new EventEmitter<T>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private _tpl!: TplFun<R>;\n private destroy$ = inject(DestroyRef);\n\n constructor() {}\n\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.selected.emit(value);\n }\n });\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n public clearAction(): void {\n this.cleared.emit();\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntilDestroyed(this.destroy$),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n }),\n );\n }\n}\n","\n<div class=\"form-group\">\n @if (label) {\n <label>{{label}}</label>\n }\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>","import {\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n UntypedFormControl,\n} from '@angular/forms';\nimport {\n debounceTime,\n distinctUntilChanged,\n firstValueFrom,\n Observable,\n} from 'rxjs';\nimport { TplFun } from '../fkselect/fkselect.component';\nimport { DataModel } from '../../data/data-model';\nimport { switchMap } from 'rxjs/operators';\n\nimport { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-m2mselect',\n templateUrl: './m2mselect.component.html',\n styleUrls: ['./m2mselect.component.sass'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: M2mselectComponent,\n },\n ],\n imports: [ReactiveFormsModule, NgbTypeaheadModule]\n})\nexport class M2mselectComponent<T extends DataModel, R extends DataModel>\n implements OnInit, ControlValueAccessor\n{\n // Model field value & update data\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public edit = false;\n // Raw value\n @Input() public values!: R[];\n public pks: number[] = [];\n public disabled = false;\n // Fk fields, either model / queryset / collection must be given\n @Input() public queryset?: Queryset<R>;\n @Input() public collection?: Collection<R>;\n @Input() public filter: FilterData = {};\n @Input() public mode: 'autocomplete' | 'select' | 'auto' = 'auto';\n @Input() public display?: string | TplFun<R>;\n @Input() public search = 'search';\n // Display\n @Input() public label = '';\n @Input() public placeholder = '';\n @Input() public emptyLabel = '';\n @Input() public inputClasses: string[] | string = [];\n // Outputs\n @Output() public added = new EventEmitter<R>();\n @Output() public removed = new EventEmitter<R>();\n @Output() public cancelled = new EventEmitter<void>();\n @Output() public cleared = new EventEmitter<void>();\n @Output() public detailsChanged = new EventEmitter<R[]>();\n @Output() public changed = new EventEmitter<number[]>();\n\n public fc!: UntypedFormControl;\n public searchFn = this._search.bind(this);\n public displayFn = this._display.bind(this);\n private touched = false;\n private _tpl!: TplFun<R>;\n private destroy$ = inject(DestroyRef);\n /**\n * Control value accessor onChange dummy callback;\n * @param fks\n */\n public onChange = (fks: number[]) => {};\n\n /**\n * Control value accessor onTouched dummy callback;\n */\n public onTouched = () => {};\n\n /**\n * OnChange register from controlValueAccessor\n * @param onChange callback\n */\n registerOnChange(onChange: any) {\n this.onChange = onChange;\n }\n\n /**\n * OnTouched register from controlValueAccessor\n * @param onTouched callback\n */\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n /**\n * OnInit :\n * - ensures queryset is available\n * - creates form control for input\n * - creates display function\n * - ensure values are set from any source\n */\n public ngOnInit(): void {\n // Create queryset if not given\n // queryset is create through model\n if (!this.queryset && this.collection) {\n this.queryset = this.collection.queryset();\n } else if (!this.queryset && this.model && this.model._collection) {\n this.collection = this.model._collection;\n this.queryset = this.collection.queryset();\n }\n if (!this.queryset) {\n throw Error('queryset is mandatory for m2m select');\n }\n // Create form control for typeahead and subscribe for changes\n this.fc = new UntypedFormControl('');\n this.fc.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), distinctUntilChanged())\n .subscribe((value) => {\n if (value) {\n this.onAdd(value);\n }\n });\n // Set display function\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n // Get values from model if not already given\n // TODO: check if this is necessary\n if (!this.values && this.model && this.field) {\n this.values = (this.model as any)[this.field + '_details'];\n }\n if (this.values === undefined) {\n console.error('no values available for ', this.model, this.field);\n throw Error('no values available');\n }\n }\n\n /**\n * Remove a value.\n * Emits detailsChanged, changed and removed signals.\n * @param i instance to be removed\n */\n public onRemove(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n const ps = this.pks.indexOf(i.id);\n this.pks.splice(ps, 1);\n this.values.splice(ps, 1);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.removed.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Add a value.\n * Emits detailsChanged, changed and added signals.\n * @param i instance to be added.\n */\n public onAdd(i: R) {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks.push(i.id);\n this.values.push(i);\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.added.emit(i);\n this.onChange(this.pks);\n }\n }\n\n /**\n * Clear all values.\n * Emits detailsChanged, changed and cleared signals.\n */\n public onClear() {\n if (!this.disabled) {\n this.markAsTouched();\n this.pks = [];\n this.values = [];\n this.detailsChanged.emit(this.values);\n this.changed.emit(this.pks);\n this.cleared.emit();\n this.onChange(this.pks);\n }\n }\n\n /**\n * Write value from controlValueAccessor.\n * @param pks\n */\n async writeValue(pks: number[]) {\n this.pks = pks;\n await this._getDisplayValues(pks);\n }\n\n /**\n * Mark as touched.\n */\n public markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n /**\n * Mark as disabled.\n * @param disabled\n */\n setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n\n /**\n * Retrieve display values for current set of pks.\n * Eventually fetches items from collection.\n * Emits detailsChanged signal.\n * @param pks list of current pks.\n * @private\n */\n private async _getDisplayValues(pks: number[] = []) {\n const values: R[] = [];\n for (const k of pks) {\n let found = false;\n for (let v of this.values) {\n if (v.id == k) {\n values.push(v);\n found = true;\n break;\n }\n }\n if (!found) {\n if (this.collection) {\n values.push(await firstValueFrom(this.collection.fetch(k)));\n } else {\n values.push({ id: k, _display: 'Unknown' } as any);\n }\n }\n }\n this.values = values;\n this.detailsChanged.next(this.values);\n }\n\n /**\n * Display function. Uses descfield or desc tpl (lodash template using model fields).\n */\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Search function.\n * @param text$\n * @private\n */\n private _search(text$: Observable<string>): Observable<any> {\n return text$.pipe(\n takeUntilDestroyed(this.destroy$),\n debounceTime(750),\n distinctUntilChanged(),\n switchMap((term) => {\n const f: any = {};\n for (const k of Object.keys(this.filter)) {\n if (this.filter[k] !== null || this.filter[k] !== undefined) {\n f[k] = this.filter[k];\n }\n }\n f[this.search] = term;\n const qs = this.queryset as Queryset<any>;\n qs.filter(f, true);\n return qs.get();\n }),\n );\n }\n}\n","\n<div class=\"form-group\">\n @if (label) {\n <label>{{label}}</label>\n }\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"cleared.emit()\"></i></div>\n </div>\n @for (i of values; track i) {\n <div><i class=\"bi bi-trash ms-2 float-end\" (click)=\"onRemove(i)\"></i>{{displayFn(i)}}</div>\n }\n</div>","import {Inject, Injectable, InjectionToken, NgZone, Optional} from \"@angular/core\";\nimport {Observable, ReplaySubject, Subscription, timer} from \"rxjs\";\n\nexport const enum TYPE {\n SUCCESS, INFO, WARNING, DANGER\n}\n\nexport enum DEFAULT_TIMEOUTS {\n SUCCESS = 3000,\n INFO = 4000,\n WARNING = 10000,\n DANGER = 30000\n}\n\nexport enum STATUS {\n UNDISP, DISP, ACK\n}\n\nconst DEFAULT_MESSAGE_TIMEOUT = 5000;\n\nexport interface ISoundTypes {\n [index: string]: string\n}\n\nexport const DATA_MESSAGE_SOUNDS = new InjectionToken<ISoundTypes>(\"data.message.sounds\");\n\n\nexport class Message {\n public status: string = STATUS[STATUS.UNDISP];\n public showTrace = false;\n\n constructor(public title: string,\n public type: TYPE = TYPE.INFO,\n public message: string = \"\",\n public trace: any = null,\n public ttl: number = DEFAULT_MESSAGE_TIMEOUT) {\n }\n\n public get style(): string {\n if (this.type === TYPE.DANGER) {\n return \"alert alert-dismissible alert-danger\";\n }\n if (this.type === TYPE.INFO) {\n return \"alert alert-dismissible alert-info\";\n }\n if (this.type === TYPE.WARNING) {\n return \"alert alert-dismissible alert-warning\";\n }\n if (this.type === TYPE.SUCCESS) {\n return \"alert alert-dismissible alert-success\";\n }\n return \"alert alert-dismissible alert-success\";\n }\n\n public ack(): void {\n this.status = STATUS[STATUS.ACK];\n }\n}\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DataMessageService {\n public _messages$: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);\n private _messages: Message[] = [];\n private _timer!: Observable<any>;\n private _subscription!: Subscription;\n\n constructor(public ngZone: NgZone,\n @Optional() @Inject(DATA_MESSAGE_SOUNDS) public sounds: ISoundTypes) {\n this.init();\n }\n\n public get current(): Observable<Message[]> {\n return this._messages$.asObservable();\n }\n\n public init(): void {\n let changed = false;\n if (!this._timer) {\n this.ngZone.runOutsideAngular(() => {\n this._timer = timer(500, 500);\n this._subscription = this._timer.subscribe(() => {\n for (const m of this._messages) {\n m.ttl -= 500;\n if (m.ttl <= 0) {\n changed = true;\n }\n }\n if (changed) {\n this.ngZone.run(() => {\n const out: Message[] = [];\n for (const m of this._messages) {\n if (m.ttl >= 0) {\n out.push(m);\n }\n }\n this._messages = out;\n this._notify();\n });\n }\n });\n });\n }\n }\n\n public close(): void {\n this._subscription.unsubscribe();\n }\n\n public success(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.SUCCESS): void {\n this._messages.push(new Message(title, TYPE.SUCCESS, message, trace, timeout));\n this.play(\"success\");\n this._notify();\n }\n\n public info(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.INFO): void {\n this._messages.push(new Message(title, TYPE.INFO, message, trace, timeout));\n this.play(\"info\");\n this._notify();\n }\n\n public warning(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.WARNING): void {\n this._messages.push(new Message(title, TYPE.WARNING, message, trace, timeout));\n this.play(\"warning\")\n this._notify();\n }\n\n public danger(title: string, message: string = \"\", trace: any = null, timeout: number = DEFAULT_TIMEOUTS.DANGER): void {\n this._messages.push(new Message(title, TYPE.DANGER, message, trace, DEFAULT_TIMEOUTS.DANGER));\n this.play(\"error\")\n this._notify();\n }\n\n public error(title: string, message: string = \"\", trace: any = null): void {\n this.danger(title, message, trace);\n }\n\n public debug(title: string, message: string = \"\", trace: any = null): void {\n console.log(title, message, trace);\n }\n\n public ack(message: Message): void {\n message.ack();\n this._notify();\n }\n\n public play(type: string = \"notify\") {\n if (this.sounds && this.sounds[type]) {\n const audio = new Audio(this.sounds[type]);\n audio.play();\n }\n }\n\n private _notify(): void {\n const out: Message[] = [];\n for (const message of this._messages) {\n if ((message.status === STATUS[STATUS.UNDISP]) ||\n (message.status === STATUS[STATUS.DISP])) {\n message.status = STATUS[STATUS.DISP];\n out.push(message);\n }\n }\n this._messages$.next(out);\n }\n\n}\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport {\n ReactiveFormsModule,\n UntypedFormControl,\n UntypedFormGroup,\n} from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n IDispEditChoice,\n} from './dispedit.constants';\nimport { FilterData, Queryset } from '../../data/data-query';\nimport { Collection } from '../../data/data-collection';\nimport { FkselectComponent, TplFun } from '../fkselect/fkselect.component';\nimport { DecimalFieldManager } from '../../data/fields/numbers';\nimport {\n BootstrapDataDisplayConfig,\n DATA_DISPLAY_CONFIG,\n DataDisplayConfig,\n} from '../../data/data-parameters';\nimport { DataMessageService } from '../../messages/message.service';\nimport { CommonModule } from '@angular/common';\nimport { M2mselectComponent } from '../m2mselect/m2mselect.component';\n\n@Component({\n selector: 'data-dispedit',\n templateUrl: './dispedit.component.html',\n styleUrls: ['./dispedit.component.sass'],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FkselectComponent,\n M2mselectComponent,\n ],\n})\nexport class DispeditComponent<FT, T extends DataModel, R extends DataModel>\n implements OnInit, OnChanges\n{\n /** Model (mandatory) */\n @Input() public model!: T;\n /** Field (mandatory) */\n @Input() public field!: string;\n /** External form */\n @Input() public form?: UntypedFormGroup;\n /**\n * Starting edit mode\n * If mode is inline, edit is always true.\n */\n @Input() public edit = false;\n /**\n * Can be switched to edit mode?\n * default : true\n */\n @Input() public editable = true;\n /**\n * Save updated values ?\n * If not given, default value depends on mode :\n * - save if mode is dd\n * - don't save if mode is inline\n */\n public save?: boolean;\n /**\n * Display mode\n * - dd provides display / edit within a dt/dd block\n * - inline (to be renamed to form) provides a (label? and) form control\n * */\n @Input() public mode: 'dd' | 'inline' | 'form' = 'inline';\n /**\n * Custom choices\n * If provided, a select form control will be used instead of base editor\n */\n @Input() public choices: IDispEditChoice[] = [];\n /** Custom input classes */\n @Input() public inputClasses!: string[] | string;\n /** Override editor, if provided */\n @Input() public editor?: DISPEDIT_EDITOR_TYPES;\n /** Override viewer, if provided */\n @Input() public viewer?: DISPEDIT_DISPLAY_TYPES;\n /** Override default value */\n @Input() public default?: any;\n /**\n * Override placeholder, if provided.\n * By default, manager.description is used\n */\n @Input() public placeholder: string = '';\n /**\n * Override help, if provided.\n * By default, manager.help is used.\n */\n @Input() public help: string = '';\n /**\n * Hide label (for inline forms)\n */\n @Input() public hideLabel: boolean = false;\n\n // FK fields\n // TODO: rename as fk_ or related_\n /** Fk queryset */\n @Input() public queryset?: Queryset<R>;\n /** Fk collection */\n @Input() public collection?: Collection<R>;\n /** Fk display */\n @Input() public display?: string | TplFun<R>;\n /** Fk filter */\n @Input() public filter: FilterData = {};\n\n /** Output emitter, output model on every change */\n @Output() public changed = new EventEmitter<T>();\n\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n\n /** Text value used for display */\n public txtValue?: string;\n /** Text values used for many displays */\n public txtValues?: string[];\n\n /** Computed editor type */\n public realEditor: DISPEDIT_EDITOR_TYPES = 'input.text';\n /** Computed display type */\n public realDisplay: DISPEDIT_DISPLAY_TYPES = 'text';\n /** Current disp raw value */\n public dispValue?: any;\n /** Computed chocies type */\n public realChoices?: IDispEditChoice[] = [];\n /** Computed help */\n public realHelp!: string;\n /** Computed placeholder */\n public realPlaceholder!: string;\n /** Computed required */\n public required!: boolean;\n /** Computed default value */\n public realDefault!: any;\n\n public m2mValues?: any[];\n\n // Local form group\n public fg?: UntypedFormGroup;\n\n // Display template function\n private _tpl!: TplFun<R>;\n\n /**\n * Constructor, can be given DATA_DISPLAY_CONFIG injection token to override display classes.\n * By default, bs5 config is used\n * @param dconf DataDisplayConfig item\n * @param _msgs messages service\n */\n constructor(\n @Optional() @Inject(DATA_DISPLAY_CONFIG) public dconf: DataDisplayConfig,\n private _msgs: DataMessageService,\n ) {\n if (this.dconf === null) {\n this.dconf = BootstrapDataDisplayConfig;\n }\n }\n\n /**\n * Init sequence.\n * - Sets mode\n * - Sets display function\n * - Loads manager\n * - Run misc checks on special values\n * - Get help, placeholder strings\n */\n public ngOnInit() {\n this._setMode();\n }\n\n /**\n * Upgrade all values on any change.\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n this._setDisplayFn();\n this.manager = this.model?.FM(this.field);\n this.required = this.manager?.required || false;\n this._checks();\n this.realHelp = this.help || this.manager?.help || '';\n this.realPlaceholder = this.placeholder || this.manager?.description || '';\n this.realDefault = this.default;\n this.save = this.save === undefined ? this.mode === 'dd' : this.save;\n if (\n (!this.edit && this.mode === 'dd') ||\n (!this.editable && this.mode === 'inline')\n ) {\n this.enableDisplayMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Set up display mode.\n * - get choices if available\n * - get display type\n * - process current value for display\n * - set display classes\n */\n public enableDisplayMode() {\n this._getChoices();\n this._getRealDisplay();\n this._getDisplayValue();\n this._setDisplayClasses();\n this.edit = false;\n }\n\n /**\n * Set up edit mode :\n * - get choices if available\n * - get editor type\n * - prepare form controle\n * - set form control value\n * - update form control classes\n */\n public enableEditMode() {\n if (!this.editable) {\n return;\n }\n this._getChoices();\n this._getRealEditor();\n this._setFormControl();\n this._setFormControlValue();\n this._setEditorClasses();\n this.edit = true;\n }\n\n /**\n * Update model field from form control value (if value is valid).\n * If save boolean is true, save values to API.\n */\n public async update(): Promise<void> {\n if (this.fg && this.model && this.fg.valid) {\n switch (this.realEditor) {\n case 'input.decimal':\n (this.model as any)[this.field] = Math.round(\n this.fg.value[this.field] * (this.manager as any).factor,\n );\n break;\n default:\n (this.model as any)[this.field] = this.fg.value[this.field];\n }\n if (this.save === true) {\n return this._save();\n }\n }\n }\n\n unsetEdit() {\n if (this.mode == 'dd' && this.edit) {\n this.edit = false;\n delete this.fg;\n }\n }\n\n toggleEdit() {\n if (!this.edit) {\n this.enableEditMode();\n } else {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n }\n\n /**\n * Reset field to default value\n * TODO: check if edit mode needs to be changed / saved\n */\n public async setDefault(): Promise<void> {\n if (this.model) {\n (this.model as any)[this.field] = this.realDefault;\n this.fg!.controls[this.field].setValue(this.realDefault, {\n emitEvent: false,\n });\n }\n await this.update();\n }\n\n public async selectedRefItem($event: T | null) {\n if (this.model) {\n if ($event !== null) {\n (this.model as any)[this.field] = $event.id;\n (this.model as any)[`${this.field}_details`] = $event;\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = $event.id;\n this.form.patchValue(fv, { emitEvent: true });\n this.form.markAsTouched();\n this.form.markAsDirty();\n }\n } else {\n (this.model as any)[this.field] = null;\n delete (this.model as any)[`${this.field}_details`];\n if (this.form) {\n const fv: { [index: string]: number | null } = {};\n fv[this.field] = null;\n this.form.patchValue(fv, { emitEvent: true });\n this.form.markAsTouched();\n this.form.markAsDirty();\n }\n }\n return this._save();\n }\n }\n\n public onM2MValuesChanges(v: any[]) {\n this.m2mValues = v;\n }\n\n private _checks() {\n if (this.editor === 'quill' && !this.viewer) {\n this.viewer = 'quill';\n }\n }\n\n /**\n * Save value to database, only if model have an id.\n * If mode is dd, toggle edit / display mode.\n * @private\n */\n private async _save(): Promise<void> {\n if (this.model) {\n if (this.model.id) {\n try {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true }),\n );\n } catch (e) {\n console.error(e);\n let msg: string = '';\n if (e && (e as any).error && (e as any).error[this.field]) {\n msg = `${(e as any).error[this.field]}`;\n }\n this._msgs.error(\n \"Erreur lors de l'enregistrement\",\n msg,\n JSON.stringify(e),\n );\n return;\n }\n }\n if (this.mode === 'dd') {\n this.unsetEdit();\n this.enableDisplayMode();\n }\n this.changed.next(this.model);\n }\n }\n\n private _display(x: any): any {\n if (x) {\n if (x._display) {\n if (x._display instanceof Function) {\n return x._display();\n } else {\n return x._display;\n }\n }\n if (this._tpl) {\n return this._tpl(x);\n }\n }\n return '';\n }\n\n /**\n * Set display mode based on current display config\n * @private\n */\n private _setMode() {\n if (!this.mode) {\n this.mode = this.dconf.dispEdit.defaultMode;\n }\n }\n\n private _setDisplayFn() {\n if (this.display) {\n if (this.display && typeof this.display === 'string') {\n this._tpl = (model: R) => `${(model as any)[this.display as string]}`;\n } else if (this.display && typeof this.display === 'function') {\n this._tpl = this.display.bind(this);\n }\n } else {\n this._tpl = (model: R) =>\n `${\n (model as any)['name'] ||\n (model as any)['title'] ||\n (model as any)['id']\n }`;\n }\n }\n\n private _getChoices() {\n // Set display choices\n let choices: IDispEditChoice[] | undefined;\n if (this.choices && this.choices.length) {\n choices = this.choices;\n } else if ((this.manager as any)?.choices) {\n choices = (this.manager as any)?.choices;\n }\n // Set display value\n if (choices && choices.length > 0) {\n this.realChoices = choices;\n } else {\n delete this.realChoices;\n }\n }\n\n private _getRealDisplay() {\n this.realDisplay = this.viewer\n ? this.viewer\n : this.manager?.displayType\n ? this.manager.displayType\n : 'text';\n if (this.realChoices && this.realChoices.length) {\n this.realDisplay = 'choice';\n }\n }\n\n private _getRealEditor() {\n this.realEditor = this.editor\n ? this.editor\n : this.manager?.editorType || 'input.text';\n if (this.realChoices && this.realChoices.length) {\n this.realEditor = 'select';\n }\n }\n\n private _setFormControl() {\n if (!this.form) {\n const fgc: { [index: string]: UntypedFormControl } = {};\n fgc[this.field] = this.model.FC(this.field);\n this.fg = new UntypedFormGroup(fgc);\n } else {\n this.fg = this.form;\n this.fg.setControl(this.field, this.model.FC(this.field), {\n emitEvent: false,\n });\n }\n if (this.mode === 'inline') {\n this.fg.valueChanges.subscribe(() => {\n this.update();\n });\n }\n }\n\n private _setFormControlValue() {\n switch (this.realEditor) {\n case 'input.datetime':\n const value = (this.model as any)[this.field];\n const now = new Date();\n const localnow = new Date(\n now.getTime() - now.getTimezoneOffset() * 60000,\n );\n if (value === null) {\n this.fg!.controls[this.field].setValue(null, { emitEvent: true });\n } else {\n const time = value ? new Date(value) : new Date();\n const offset = time.getTimezoneOffset();\n const localtime = new Date(time.getTime() - offset * 60000);\n this.fg!.controls[this.field].setValue(\n localtime.toISOString().substring(0, 16),\n { emitEvent: true },\n );\n }\n this.realDefault =\n this.default || this.manager?.required\n ? localnow.toISOString().substring(0, 16)\n : null;\n break;\n case 'input.date':\n const dt = this.model.toJson([this.field])[this.field];\n this.fg!.controls[this.field].setValue(dt);\n break;\n case 'input.decimal':\n this.fg!.controls[this.field].setValue(\n (this.model as any)[this.field] /\n ((this.manager as unknown as DecimalFieldManager).factor || 1),\n );\n }\n }\n\n private _setEditorClasses() {\n // FIXME: use realEditorClasses\n if (!this.inputClasses) {\n this.inputClasses =\n this.dconf.dispEdit.inputClasses[this.realEditor] || '';\n }\n }\n\n private _getDisplayValue() {\n const value = (this.model as any)[this.field];\n this.dispValue = value;\n if (this.realChoices) {\n for (const c of this.realChoices) {\n if (c === value) {\n this.txtValue = c as any;\n return;\n } else if (c.value !== undefined && c.value === value) {\n this.txtValue = c.desc;\n return;\n }\n }\n }\n // Set display text depending on value and realDisplay value\n if (value === true) {\n this.txtValue = 'OUI';\n } else if (value === false) {\n this.txtValue = 'NON';\n } else if (value === undefined || value === null) {\n this.txtValue = 'non défini';\n } else {\n switch (this.realDisplay) {\n case 'fkdetails':\n const details = (this.model as any)[`${this.field}_details`] as any;\n this.txtValue = this._display(details);\n break;\n case 'm2mdetails':\n const m2mDetails =\n this.m2mValues ||\n ((this.model as any)[`${this.field}_details`] as any[]);\n this.txtValues = [];\n for (const v of m2mDetails || []) {\n this.txtValues.push(this._display(v));\n }\n break;\n case 'decimal':\n this.txtValue = `${\n value /\n ((this.manager as unknown as DecimalFieldManager).factor || 1)\n }`;\n break;\n default:\n this.txtValue = `${value}`;\n }\n }\n }\n\n private _setDisplayClasses() {}\n}\n","\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<ng-template #dispTpl>\n @switch (realDisplay) {@case ('text') {\n <span class=\"editable disp-text\" (click)=\"enableEditMode()\">{{txtValue}}</span>\n }@case ('choice') {\n <span class=\"editable disp-choice\" (click)=\"enableEditMode()\">{{txtValue}}</span>\n }@case ('decimal') {\n <span class=\"editable disp-decimal\" (click)=\"enableEditMode()\">{{txtValue}}</span>\n }@case ('boolean') {\n <span class=\"editable disp-boolean\" (click)=\"enableEditMode()\">{{txtValue}}</span>\n }@case ('fkdetails') {\n <span class=\"editable disp-fkdetails\" (click)=\"enableEditMode()\">\n <div class=\"fkitem\">{{txtValue}}</div></span>\n }@case ('m2mdetails') {\n <span class=\"editable disp-m2mdetails\" (click)=\"enableEditMode()\">\n @for (v of txtValues; track v) {\n <div class=\"m2mitem\">{{v}}</div>\n }</span>\n }@case ('datetime') {\n <span class=\"editable disp-datetime\" (click)=\"enableEditMode()\">\n @if (dispValue) {\n {{txtValue|date:'short'}}\n }\n @if (!dispValue) {\n {{txtValue}}\n }</span>\n }@case ('date') {\n <span class=\"editable disp-datetime\" (click)=\"enableEditMode()\">\n @if (dispValue) {\n {{txtValue|date:'shortDate'}}\n }\n @if (!dispValue) {\n {{txtValue}}\n }</span>\n }}\n </ng-template>\n <ng-template #editTpl let-form=\"form\">\n @switch (realEditor) {\n @case ('input.text') {\n <input type=\"text\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('input.email') {\n <input type=\"email\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['email']\">Format d'email invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('input.password') {\n <input type=\"password\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('input.datetime') {\n <input type=\"datetime-local\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n }\n @case ('input.date') {\n <input type=\"date\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" (keyup.enter)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minDate']\">Doit être postérieur à {{$any(manager).min|date:'short'}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxDate']\">Doit être antérieur à {{$any(manager).max|date:'short'}}...</div>\n }\n @case ('input.number') {\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('input.decimal') {\n <input type=\"number\" [formControl]=\"form.get(field)\" [ngClass]=\"inputClasses\" (keyup.escape)=\"unsetEdit()\" [placeholder]=\"realPlaceholder\">\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['min']\">Trop petit : minimum {{$any(manager).min}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['max']\">Trop grand : maximum {{$any(manager).max}}...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('input.checkbox') {\n <input class=\"form-check-input\" type=\"checkbox\" [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\">\n <div class=\"form-text\">{{realHelp}}</div>\n }\n @case ('textarea') {\n <textarea [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" [ngClass]=\"inputClasses\" (keyup.control.enter)=\"update()\" [placeholder]=\"realPlaceholder\"></textarea>\n @if (mode==='dd') {\n <button class=\"btn btn-sm btn-link w-100 dispedit-text-update-button\" (click)=\"update()\"><i class=\"bi bi-save\"></i></button>\n }\n @if (realHelp) {\n <div class=\"form-text\">{{realHelp}}@if (required) {\n <span class=\"ms-1\">(requis)</span>\n }</div>\n }\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['minlength']\">Trop court : {{$any(manager).minLength}} caractères minimum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['maxlength']\">Trop long : {{$any(manager).maxLength}} caractères maximum...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['pattern']\">Format invalide...</div>\n <div class=\"invalid-feedback mt-0\" [class.d-block]=\"form &amp;&amp; !form.controls[field].pristine &amp;&amp; form.controls[field].errors?.['required']\">Ce champ est requis...</div>\n }\n @case ('fkselect') {\n <data-fkselect [collection]=\"collection\" [filter]=\"filter\" [display]=\"display\" (selected)=\"selectedRefItem($event)\" [placeholder]=\"placeholder\" (cancelled)=\"unsetEdit()\" (cleared)=\"selectedRefItem(null)\"></data-fkselect>\n }\n @case ('m2mselect') {\n <data-m2mselect [collection]=\"collection\" [filter]=\"filter\" (changed)=\"update()\" [formControl]=\"form.get(field)\" (detailsChanged)=\"onM2MValuesChanges($event)\" [model]=\"model\" [field]=\"field\" [placeholder]=\"placeholder\"></data-m2mselect>\n }\n @case ('select') {\n <select [formControl]=\"form.get(field)\" (keyup.escape)=\"unsetEdit()\" (change)=\"update()\" [ngClass]=\"inputClasses\">\n @for (c of realChoices; track c) {\n <option [ngValue]=\"c.value!==undefined ? c.value : c\">{{c.desc ? c.desc : c}}</option>\n }\n </select>\n <div class=\"form-text\">{{realHelp}}</div>\n }\n }\n </ng-template>\n <!-- Disp/edit toggler-->\n <ng-template #dispeditTpl>\n @if (!edit) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit) {\n @if (fg) {\n <form [formGroup]=\"fg\" (submit)=\"update()\">\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: fg}\"></ng-container>\n </form>\n }\n }\n </ng-template>\n <!-- DispEdit noform-->\n <ng-template #dispeditFormTpl>\n @if (!edit) {\n <ng-container *ngTemplateOutlet=\"dispTpl\"></ng-container>\n }\n @if (edit) {\n @if (form) {\n <ng-container *ngTemplateOutlet=\"editTpl; context: {form: form}\"></ng-container>\n }\n }\n </ng-template>\n <!-- Dd display-->\n @if (mode==='dd') {\n @if (!hideLabel) {\n <dt [class.required]=\"required\"><span class=\"editable\" (click)=\"toggleEdit()\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span>@if (realDefault!== undefined && edit) {\n <span class=\"pointer float-end\" (click)=\"setDefault()\"><i class=\"bi bi-trash ms-2\"></i></span>\n }</dt>\n }\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n </dd>\n }\n <!-- Inline display-->\n @if (mode==='inline') {\n @if (!hideLabel) {\n @if (realDefault!== undefined && edit) {\n <span class=\"pointer float-end\" (click)=\"setDefault()\"><i class=\"bi bi-trash ms-2\"></i></span>\n }\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditTpl\"></ng-container>\n }\n <!-- Form display-->\n @if (mode==='form') {\n @if (!hideLabel) {\n @if (realDefault!== undefined && edit) {\n <span class=\"pointer float-end\" (click)=\"setDefault()\"><i class=\"bi bi-trash ms-2\"></i></span>\n }\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"dispeditFormTpl\"></ng-container>\n }","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\n\nimport { DataModel } from '../../data/data-model';\nimport { debounceTime, firstValueFrom, Observable } from 'rxjs';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataMessageService } from '../../messages/message.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IFlagItem {\n flag: string;\n count: number;\n}\n\n@Component({\n selector: 'data-flags',\n imports: [ReactiveFormsModule],\n templateUrl: './flags.component.html',\n styleUrls: ['./flags.component.sass']\n})\nexport class FlagsComponent<T extends DataModel> implements OnInit {\n @Input() public model!: T;\n @Input() public field = 'flags';\n // FIXME: make all flags endpoint as optional parameters\n @Input() public get_flags_endpoint = 'get_flags';\n @Input() public edit: boolean = false;\n @Input() public editable: boolean = true;\n @Input() public flags!: Observable<IFlagItem[]>;\n @Input() public free = false;\n @Input() public create = true;\n @Input() public action = false; // if set to true, use add_flag and remove_flag model actions\n public ft!: FormControl;\n public fs!: FormControl;\n public curflags: string[] = [];\n public txtflag = '';\n public selflag = '';\n public flaglist: IFlagItem[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(private _msg: DataMessageService) {}\n\n public async ngOnInit(): Promise<any> {\n if (!this.flags && this.model._collection) {\n this.flags = this.model._collection.action(\n null,\n 'GET',\n this.get_flags_endpoint,\n );\n }\n if (this.model && this.field && (this.model as any)[this.field]) {\n this.curflags = (this.model as any)[this.field];\n } else {\n console.warn('Model or field problem in flagsfield component');\n this.curflags = [];\n }\n this.ft = new FormControl('');\n this.fs = new FormControl('');\n this.fs.valueChanges\n .pipe(takeUntilDestroyed(this.destroy$), debounceTime(250))\n .subscribe((value: string) => {\n if (value) {\n this.addFlag(value);\n }\n });\n }\n\n public async addFreeFlag(): Promise<any> {\n await this.addFlag(this.ft.value);\n }\n\n public async addFlag(flag: string): Promise<any> {\n if (!this.flagPresent(flag)) {\n this.curflags.push(flag);\n if (this.action) {\n try {\n await firstValueFrom(\n this.model.action('POST', 'add_flag', { body: { flag } }),\n );\n this._msg.success('Flag enregistré avec succès');\n } catch (e) {\n this._msg.error('Erreur lors de la sauvegarde', e as any);\n }\n } else {\n await this.update();\n }\n }\n }\n\n public async update(): Promise<any> {\n (this.model as any)[this.field] = this.curflags;\n try {\n await firstValueFrom(this.model.update([this.field]));\n this.fs.setValue('', { emitEvent: false });\n this.ft.setValue('', { emitEvent: false });\n this._msg.success('Flag enregistré avec succès');\n } catch (error) {\n this._msg.error(\n 'Erreur lors de la sauvegarde',\n `API Return : ${error}`,\n (error as any)._body,\n );\n }\n }\n\n public flagPresent(flag: string): boolean {\n return this.curflags.findIndex((f) => flag === f) !== -1;\n }\n\n public async removeFlag(flag: string): Promise<any> {\n this.curflags.splice(\n this.curflags.findIndex((f) => flag === f),\n 1,\n );\n if (this.action) {\n try {\n await firstValueFrom(\n this.model.action('POST', 'remove_flag', { body: { flag } }),\n );\n this._msg.success('Removed');\n } catch (e) {\n this._msg.error('Removing flag failed', e as any);\n }\n } else {\n await this.update();\n }\n }\n\n public async toggleEdit() {\n if (this.editable) {\n if (!this.edit) {\n this.flaglist = await firstValueFrom(this.flags);\n this.edit = true;\n } else {\n this.edit = false;\n }\n } else {\n this.edit = false;\n }\n }\n}\n","\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n@if (!edit) {\n <dd (click)=\"toggleEdit()\" role=\"button\">@for (flag of curflags; track flag) {\n <span class=\"badge bg-info me-1\">{{flag}}</span>\n }</dd>\n}\n@if (edit) {\n <dd>\n <div class=\"row\">\n @if (!free) {\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n @for (flag of flaglist; track flag) {\n <option [value]=\"flag.flag\">{{flag.flag}}@if (flag.count) {\n <span class=\"ms-1\">({{flag.count}})</span>\n }</option>\n }\n </select>\n </div>\n @if (create) {\n <div class=\"col\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n }\n }\n @if (free) {\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n }\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\">@for (flag of curflags; track flag) {\n <span class=\"badge bg-info me-1\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span>\n }<i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n </dd>\n }","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Editor, NgxEditorModule, Toolbar } from 'ngx-editor';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { DataModel } from '../../data/data-model';\nimport { BaseFieldManager } from '../../data/fields/base';\nimport { firstValueFrom } from 'rxjs';\n\nexport const RichEditToolbars: { [index: string]: Toolbar } = {\n default: [\n ['bold', 'italic'],\n ['underline', 'strike'],\n ['code', 'blockquote'],\n ['ordered_list', 'bullet_list'],\n [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n ['link'],\n ['text_color', 'background_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ],\n light: [\n ['bold', 'italic', 'underline'],\n ['ordered_list', 'bullet_list'],\n ['text_color'],\n ['align_left', 'align_center', 'align_right', 'align_justify'],\n ],\n none: [],\n};\n\n@Component({\n selector: 'data-richedit',\n imports: [CommonModule, NgxEditorModule, ReactiveFormsModule],\n templateUrl: './richedit.component.html',\n styleUrls: ['./richedit.component.sass']\n})\nexport class RicheditComponent<FT, T extends DataModel>\n implements OnInit, OnDestroy\n{\n @Input() public model?: T;\n @Input() public field?: string;\n @Input() public editable: boolean = true;\n @Input() public edit: boolean = true;\n @Input() public mode: 'dd' | 'inline' | 'form' = 'dd';\n /** Hide label (for inline forms) */\n @Input() public hideLabel: boolean = false;\n /** Hide button (for changed usage) */\n @Input() public hideButton: boolean = false;\n /** Form control, from outside or created */\n @Input() public fc!: FormControl<string | null>;\n /** Toolbar mode */\n @Input() public toolbar: 'none' | 'default' | 'light' | Toolbar = 'default';\n @Output() public changed = new EventEmitter<string | null>();\n /** Field manager */\n public manager?: BaseFieldManager<FT>;\n /** Computed required */\n public required!: boolean;\n public editor!: Editor;\n public html = '';\n public realToolbar!: Toolbar;\n\n ngOnInit(): void {\n this.editor = new Editor();\n if (this.toolbar === 'light' || this.toolbar === 'default') {\n this.realToolbar = RichEditToolbars[this.toolbar];\n } else if (this.toolbar === 'none') {\n } else {\n this.realToolbar = this.toolbar as Toolbar;\n }\n if (!this.fc) {\n this.fc = new FormControl<string>('');\n if (this.model && this.field) {\n this.manager = this.model.FM(this.field);\n this.required = this.manager?.required || false;\n this.fc.setValue((this.model as any)[this.field] || '', {\n emitEvent: false,\n });\n }\n if (this.edit) {\n this.fc.enable();\n } else {\n this.fc.disable();\n }\n this.fc.valueChanges.subscribe((v) => this.changed.emit(v));\n }\n }\n\n // make sure to destory the editor\n ngOnDestroy(): void {\n this.editor.destroy();\n }\n\n toggleEdit() {\n if (this.editable) {\n if (this.edit) {\n this.fc.disable();\n this.edit = false;\n } else {\n this.fc.enable();\n this.edit = true;\n }\n } else {\n this.fc.disable();\n this.edit = false;\n }\n }\n\n public async save() {\n if (this.model && this.field) {\n this.model.setFV(this.field, this.fc.value);\n if (this.mode === 'dd') {\n await firstValueFrom(\n this.model.update([this.field], { updateModel: true })\n );\n }\n }\n }\n}\n","\n<ng-template #editorTemplate>\n <div class=\"NgxEditor__Wrapper\">\n @if (edit && toolbar!=='none') {\n <ngx-editor-menu [editor]=\"editor\" [toolbar]=\"realToolbar\"></ngx-editor-menu>\n }\n <ngx-editor [editor]=\"editor\" [formControl]=\"fc\" [placeholder]=\"''\"></ngx-editor>\n </div>\n @if (edit && !hideButton) {\n <button class=\"btn btn-primary btn-sm w-100 mt-1\" (click)=\"save()\"><i class=\"bi bi-save me-2\"></i>Enregistrer</button>\n }\n</ng-template>\n<ng-template #titleTpl>\n <ng-content></ng-content>\n</ng-template>\n<!-- Dd display-->\n@if (mode==='dd') {\n @if (!hideLabel) {\n <dt [class.required]=\"required\"><span class=\"editable\" (click)=\"toggleEdit()\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container></span></dt>\n }\n <dd [class.mb-0]=\"hideLabel\">\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n </dd>\n }\n <!-- Inline display-->\n @if (mode==='inline') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }\n <!-- Form display-->\n @if (mode==='form') {\n @if (!hideLabel) {\n <label [class.required]=\"required\">\n <ng-container *ngTemplateOutlet=\"titleTpl\"></ng-container>\n </label>\n }\n <ng-container *ngTemplateOutlet=\"editorTemplate\"></ng-container>\n }","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { DataModel } from '../../data/data-model';\nimport { Collection } from '../../data/data-collection';\nimport { firstValueFrom } from 'rxjs';\nimport {\n NgbOffcanvas,\n NgbOffcanvasModule,\n NgbOffcanvasRef,\n} from '@ng-bootstrap/ng-bootstrap';\nimport { CommonModule } from '@angular/common';\nimport { DataMessageService } from '../../messages/message.service';\n\nexport interface FakeDeleteResult {\n count: number;\n details: [string, number][];\n}\n\n@Component({\n selector: 'data-safe-delete',\n templateUrl: './sdelete.component.html',\n styleUrls: ['./sdelete.component.sass'],\n imports: [CommonModule, NgbOffcanvasModule]\n})\nexport class SafeDeleteComponent<T extends DataModel> {\n /** Model instance to be deleted */\n @Input() public model!: T;\n /** Service to be used for deletion, taken from model if not provided */\n @Input() public service?: Collection<T>;\n /** Function to be called for deletion, overrides service deletion */\n @Input() public actionFn?: (model: T) => Promise<{ success: boolean }>;\n /** Translations of database objects names to human names */\n @Input() public checks: { [index: string]: string } = {};\n /** Messages to be displayed on success or error, default messages are used if not provided */\n @Input() public messages: { success?: string; error?: string } = {};\n /** Event emitted on successful deletion */\n @Output() public deleted = new EventEmitter<FakeDeleteResult>();\n /** Display mode, default is button.\n *\n * - `fbutton`: floating button (small)\n * - `button`: button (small), with text taken from ng-content (no space around icon to allow empty buttons)\n * - `icon`: icon\n * - `custom`: custom : ng-content is surrounded by a clickable div\n * */\n @Input() public display: 'fbutton' | 'button' | 'icon' | 'custom' = 'button';\n\n public result?: FakeDeleteResult;\n @ViewChild('dialog', { static: true })\n private _dialogRef?: ElementRef<HTMLDivElement>;\n private ofc?: NgbOffcanvasRef;\n\n constructor(\n private _ofc: NgbOffcanvas,\n private _msgs: DataMessageService,\n ) {}\n\n public async checkDelete(model: DataModel) {\n const service = this.service || this.model._collection;\n if (service) {\n try {\n this.result = await firstValueFrom(\n service.delete(this.model, { params: { doit: 'no' } }),\n );\n\n this.ofc = this._ofc.open(this._dialogRef, {\n position: 'end',\n });\n } catch (e) {\n console.error(e);\n if (this.messages.error) {\n this._msgs.error(\n this.messages.error,\n (e as any).error?.message || (e as any).message || '',\n );\n }\n }\n }\n }\n\n public async reallyDelete() {\n if (this.actionFn) {\n const res = await this.actionFn(this.model);\n if (res.success && this.messages.success) {\n this._msgs.success(this.messages.success);\n } else if (!res.success && this.messages.error) {\n this._msgs.error(this.messages.error);\n }\n this.ofc?.close();\n if (res.success) {\n this.deleted.emit(this.result);\n }\n } else {\n const service = this.service || this.model._collection;\n if (service) {\n try {\n this.result = await firstValueFrom(\n service.delete(this.model, { params: { doit: 'really' } }),\n );\n if (this.messages.success) {\n this._msgs.success(this.messages.success);\n }\n this.ofc?.close();\n this.deleted.emit(this.result);\n } catch (e) {\n console.error(e);\n if (this.messages.error) {\n this._msgs.error(\n this.messages.error,\n (e as any).error?.message || (e as any).message || '',\n );\n }\n }\n }\n }\n }\n}\n","\n<ng-template #dialog let-offcanvas>\n <div class=\"offcanvas-header\">\n <h2 class=\"offcanvas-title text-danger text-center\"><i class=\"bi bi-trash me-2\"></i>Supprimer réellement ??</h2>\n </div>\n @if (result) {\n <div class=\"offcanvas-body text-danger\">\n <div class=\"text-center my-4 fs-1\"><i class=\"bi bi-exclamation-diamond my-5\"></i></div>\n <div class=\"fs-4\">\n <p>La suppression de cet élément supprimera {{result.count}} éléments dans la base de données..</p>\n </div>\n <table class=\"table table-sm table-striped table-danger\">\n <thead>\n <tr>\n <th>Type d'élément</th>\n <th>Nombre</th>\n </tr>\n </thead>\n <tbody>\n @for (rl of result.details; track rl) {\n <tr>\n <td>{{checks[rl[0]] ? checks[rl[0]] : rl[0]}}</td>\n <td>{{rl[1]}}</td>\n </tr>\n }\n </tbody>\n </table>\n <button class=\"w-100 btn btn-lg btn-danger\" (click)=\"reallyDelete()\"><i class=\"bi bi-trash me-2\"></i>Je confirme la suppression</button>\n <button class=\"w-100 btn btn-outline-secondary my-3\" (click)=\"offcanvas.close()\"><i class=\"bi bi-door-open me-2\"></i>Je renonce à la suppression</button>\n </div>\n }\n</ng-template>\n<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n@if (display==='button') {\n <button class=\"btn btn-sm btn-danger\" (click)=\"checkDelete(model)\"><i class=\"bi bi-trash\"></i>\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n</button>\n}\n@if (display==='fbutton') {\n <button class=\"btn btn-sm btn-outline-danger float-end\" (click)=\"checkDelete(model)\"><i class=\"bi bi-trash mx-2\"></i></button>\n }@if (display==='icon') {\n <i class=\"bi bi-trash mx-2\" (click)=\"checkDelete(model)\" role=\"button\"></i>\n}\n@if (display==='custom') {\n <div (click)=\"checkDelete(model)\" role=\"button\">\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\n </div>\n}","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { DISPEDIT_EDITOR_TYPES } from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface ICharFieldDescChoice {\n value: string;\n desc: string;\n}\n\nexport type ICharFieldChoice = ICharFieldDescChoice | string;\n\nexport interface ICharFieldMetadata extends IFieldMetadata<string> {\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp | string;\n choices?: ICharFieldChoice[];\n}\n\nexport interface IEmailFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface IPasswordFieldMetadata extends ICharFieldMetadata {\n validate?: boolean;\n}\n\nexport interface ITextFieldMetadata extends ICharFieldMetadata {\n syntax?: string;\n}\n\nexport class CharFieldManager extends BaseFieldManager<string> {\n public minLength?: number;\n public maxLength?: number;\n public choices?: ICharFieldChoice[];\n public pattern?: RegExp | string;\n\n constructor(params: any) {\n super(params);\n if (this.choices) {\n this.editorType = 'select';\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.minLength) {\n v.push(Validators.minLength(this.minLength));\n }\n if (this.maxLength) {\n v.push(Validators.maxLength(this.maxLength));\n }\n if (this.pattern) {\n v.push(Validators.pattern(this.pattern));\n }\n // TODO: add choices validator ??\n return v;\n }\n\n public override fromJson(data: any): string {\n if (data === undefined) {\n return this.getDefaultValue()!;\n }\n if (data === null) {\n return this.getDefaultValue()!;\n }\n if (typeof data === 'string') {\n return data;\n }\n return `${data}`;\n }\n}\n\nexport class EmailFieldManager\n extends CharFieldManager\n implements ICharFieldMetadata\n{\n public validate = true;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.email';\n\n constructor(params: any) {\n super(params);\n if (this.validate === undefined) {\n this.validate = true;\n }\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.validate) {\n v.push(Validators.email);\n }\n return v;\n }\n}\n\nexport class TextFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'textarea';\n}\n\nexport class PasswordFieldManager extends CharFieldManager {\n public syntax?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.password';\n}\n\n/* eslint-disable max-len */\n\nexport const charField = (updates: ICharFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'charField', CharFieldManager);\n\nexport const emailField = (\n updates: IEmailFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'emailField', EmailFieldManager);\n\nexport const textField = (updates: ITextFieldMetadata = {}): FieldDecoratorFn =>\n genericDataField(updates, 'textField', TextFieldManager);\n\nexport const passwordField = (\n updates: IPasswordFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'passwordField', PasswordFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\n\nexport interface IPrimaryFieldMetadata extends IFieldMetadata<number> {\n step?: number;\n}\n\nexport class PrimaryFieldManager\n extends BaseFieldManager<number>\n implements IPrimaryFieldMetadata\n{\n public step = 1;\n}\n\nexport const primaryField = (\n updates: IPrimaryFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'primaryField', PrimaryFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport interface IDateFieldMetadata extends IFieldMetadata<Date | null> {\n autoNow?: boolean;\n autoNowAdd?: boolean;\n min?: Date;\n max?: Date;\n}\n\nexport const dateMinimum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n\n const controlDate = new Date(control.value);\n\n const validationDate = date;\n\n return controlDate > validationDate\n ? null\n : {\n minDate: {\n 'date-minimum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport const dateMaximum = (date: Date): ValidatorFn => {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value == null) {\n return null;\n }\n const controlDate = new Date(control.value);\n const validationDate = date;\n\n return controlDate < validationDate\n ? null\n : {\n maxDate: {\n 'date-maximum': validationDate,\n actual: controlDate,\n },\n };\n };\n};\n\nexport interface IDatetimeFieldMetadata extends IDateFieldMetadata {\n timezone?: string | null;\n}\n\nexport class DateFieldManager\n extends BaseFieldManager<Date | null>\n implements IDateFieldMetadata\n{\n public autoNow = false;\n public autoNowAdd = false;\n public min?: Date;\n public max?: Date;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.date';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'date';\n\n constructor(params: IDateFieldMetadata) {\n super(params as IFieldMetadata<Date | null>);\n }\n\n public override get validators(): ValidatorFn[] {\n const v = super.validators;\n if (this.min) {\n v.push(dateMinimum(this.min));\n }\n if (this.max) {\n v.push(dateMaximum(this.max));\n }\n return v;\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n const date = new Date(data);\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n\n public override toJson(data: Date | string | null): null | string {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n return `${data.getUTCFullYear()}-${\n data.getUTCMonth() + 1\n }-${data.getUTCDate()}`;\n }\n\n /**\n * Returns default value for model, using args if needed.\n * @param args\n * @protected\n */\n protected override getDefaultValue(args: any = {}): Date | null | undefined {\n if (this.defaultValue instanceof Function) {\n return this.defaultValue(args);\n }\n if (this.required && this.defaultValue === undefined) {\n throw new Error(\n `Field ${this.name} : no default value for required field`,\n );\n }\n if (this.defaultValue === undefined) {\n return this.autoNow || this.autoNowAdd ? new Date() : null;\n }\n return this.defaultValue;\n }\n}\n\n/**\n * Datetime field manager.\n *\n */\nexport class DatetimeFieldManager\n extends DateFieldManager\n implements IDatetimeFieldMetadata\n{\n public timezone?: string | null;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.datetime';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'datetime';\n\n constructor(params: IDatetimeFieldMetadata) {\n super(params as IFieldMetadata<Date | null>);\n }\n\n public override toJson(data: Date | string): string | null {\n if (data === null || data === undefined) {\n return null;\n }\n if (typeof data === 'string') {\n const d = this.fromJson(data);\n if (d === null) {\n return null;\n }\n data = d;\n }\n try {\n if (this.timezone === null || this.timezone === undefined) {\n const offset = data.getTimezoneOffset();\n const localDate = new Date(data.getTime() - offset * 60000);\n return localDate.toISOString().replace('Z', '');\n } else if (this.timezone === 'UTC') {\n return data.toISOString();\n } else {\n return data.toISOString().replace('Z', '') + this.timezone;\n }\n } catch (e) {\n console.error(e, data);\n return null;\n }\n }\n\n public override fromJson(data: any): Date | null {\n if (data === null || data === undefined) {\n return null;\n }\n let date: Date;\n if (typeof data === 'string') {\n // If we don't have timezone info, we parse all dates as local\n if (this.timezone === null || this.timezone === undefined) {\n if (data.endsWith('Z')) {\n date = new Date(data.replace('Z', ''));\n } else if (data.match(/[-+]\\d{4}$/)) {\n date = new Date(data.replace(/[-+]\\d{4}$/, ''));\n } else {\n date = new Date(data);\n }\n } else {\n date = new Date(data);\n }\n } else {\n date = new Date(data);\n }\n\n if (date instanceof Date && !isNaN(date as any)) {\n return date;\n }\n return null;\n }\n}\n\nexport const dateField = (updates: IDateFieldMetadata = {}) =>\n genericDataField(updates, 'dateField', DateFieldManager);\n\nexport const datetimeField = (updates: IDatetimeFieldMetadata = {}) =>\n genericDataField(updates, 'datetimeField', DatetimeFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport interface IForeignKeyFieldMetadata extends IFieldMetadata<number> {\n related?: string;\n}\n\nexport interface IReverseForeignKeyFieldMetadata\n extends IFieldMetadata<number> {\n related: string;\n}\n\nexport interface IDetailsFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n many?: boolean;\n model?: T;\n deserialize?: (data: any) => T;\n}\n\nexport interface IManyToManyFieldMetadata extends IFieldMetadata<number[]> {\n related: string;\n}\n\nexport class ForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'fkselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'fkdetails';\n}\n\nexport class ReverseForeignKeyFieldManager\n extends BaseFieldManager<number>\n implements IForeignKeyFieldMetadata\n{\n public related?: string;\n}\n\nexport class DetailsFieldManager<T>\n extends BaseFieldManager<T>\n implements IDetailsFieldMetadata<T>\n{\n public field?: string;\n public many?: boolean;\n public model: any;\n public deserialize?: (data: any) => any;\n\n public override fromJson(data: any, coll?: Collection<any>): any {\n if (data === null) {\n return data;\n }\n if (data === undefined) {\n return undefined;\n }\n if (this.deserialize) {\n return this.deserialize(data);\n }\n if (this.model) {\n if (!this.many) {\n const d = new this.model(coll);\n d.fromJson(data);\n return d;\n } else {\n const out: any[] = [];\n for (const dt of data) {\n const d = new this.model(coll);\n d.fromJson(dt);\n out.push(d);\n }\n return out;\n }\n }\n return data;\n }\n}\n\nexport interface IManyToManyKeyFieldMetadata extends IFieldMetadata<number[]> {\n related?: string;\n}\n\nexport class ManyToManyFieldManager\n extends BaseFieldManager<number[]>\n implements IManyToManyKeyFieldMetadata\n{\n public related?: string;\n public override editorType: DISPEDIT_EDITOR_TYPES = 'm2mselect';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'm2mdetails';\n}\n\n/* eslint-disable max-len */\nexport const foreignKeyField = (\n updates: IForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(updates, 'foreignKeyField', ForeignKeyFieldManager);\n\nexport const reverseForeignKeyField = (\n updates: IReverseForeignKeyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(\n updates,\n 'reverseForeignKeyField',\n ReverseForeignKeyFieldManager\n );\n\nexport const detailsField = (\n meta: IDetailsFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'detailsField', DetailsFieldManager);\n\nexport const manyToManyField = (\n meta: IManyToManyFieldMetadata\n): FieldDecoratorFn =>\n genericDataField(meta, 'manyToManyField', ManyToManyFieldManager);\n","import { BaseFieldManager, genericDataField, IFieldMetadata } from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\n\nexport type IBooleanFieldMetadata = IFieldMetadata<boolean | null>;\n\nexport class BooleanFieldManager\n extends BaseFieldManager<boolean | null>\n implements IBooleanFieldMetadata\n{\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.checkbox';\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'boolean';\n\n public override fromJson(data: any): boolean | null {\n if (data === undefined) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (data === null) {\n if (this.required) {\n return this.getDefaultValue()!;\n } else {\n return null;\n }\n }\n if (typeof data === 'boolean') {\n return data as boolean;\n }\n if (typeof data === 'string') {\n if (['true', '1', 'ok', 'yes'].indexOf(data) !== -1) {\n return true;\n }\n return ['false', '0', 'nok', 'no'].indexOf(data) === -1;\n }\n return !!data;\n }\n}\n\nexport const booleanField = (updates: IBooleanFieldMetadata = {}) =>\n genericDataField<boolean | null, IBooleanFieldMetadata, BooleanFieldManager>(\n updates,\n 'booleanField',\n BooleanFieldManager\n );\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport {\n DISPEDIT_DISPLAY_TYPES,\n DISPEDIT_EDITOR_TYPES,\n} from '../../dispedit/dispedit/dispedit.constants';\nimport { ValidatorFn, Validators } from '@angular/forms';\n\nexport interface IIntegerFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IFloatFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n}\n\nexport interface IDecimalFieldMetadata extends IFieldMetadata<number> {\n min?: number;\n max?: number;\n factor?: number;\n}\n\nexport class IntegerFieldManager\n extends BaseFieldManager<number>\n implements IIntegerFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n\n public min?: number;\n public max?: number;\n\n public override get validators(): ValidatorFn[] {\n const v = super.getValidators();\n if (this.min !== undefined) {\n v.push(Validators.min(this.min));\n }\n if (this.max !== undefined) {\n v.push(Validators.max(this.max));\n }\n return v;\n }\n}\n\nexport class FloatFieldManager\n extends IntegerFieldManager\n implements IFloatFieldMetadata\n{\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'text';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.number';\n}\n\nexport class DecimalFieldManager\n extends IntegerFieldManager\n implements IDecimalFieldMetadata\n{\n public factor?: number;\n public override displayType: DISPEDIT_DISPLAY_TYPES = 'decimal';\n public override editorType: DISPEDIT_EDITOR_TYPES = 'input.decimal';\n}\n\n/* eslint-disable max-len */\nexport const integerField = (\n updates: IIntegerFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'integerField', IntegerFieldManager);\n\nexport const floatField = (\n updates: IFloatFieldMetadata = {}\n): FieldDecoratorFn =>\n genericDataField(updates, 'floatField', FloatFieldManager);\n\nexport const decimalField = (\n updates: IDecimalFieldMetadata = { factor: 100 }\n): FieldDecoratorFn =>\n genericDataField(updates, 'decimalField', DecimalFieldManager);\n","import {\n BaseFieldManager,\n FieldDecoratorFn,\n genericDataField,\n IFieldMetadata,\n} from './base';\nimport { Collection } from '../data-collection';\nimport { ICharFieldChoice } from './stringfields';\n\nexport interface IComputedFieldMetadata<T> extends IFieldMetadata<T> {\n field?: string;\n factor?: number;\n choices?: ICharFieldChoice[];\n}\n\nexport class ComputedFieldManager<T>\n extends BaseFieldManager<T>\n implements IComputedFieldMetadata<T>\n{\n public field?: string;\n public override computed = true;\n\n public override fromJson(data: any, coll?: Collection<any>): any {}\n}\n\nexport const computedField = (\n meta: IComputedFieldMetadata<any> = {}\n): FieldDecoratorFn =>\n genericDataField(meta, 'computedField', ComputedFieldManager);\n","import { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DataMessageService, Message } from '../message.service';\n\nimport { provideAnimations } from '@angular/platform-browser/animations';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'data-message-zone',\n templateUrl: './message-zone.component.html',\n styleUrls: ['./message-zone.component.sass'],\n imports: [],\n providers: [provideAnimations()],\n animations: [\n trigger('dispStatus', [\n transition('void => *', [\n style({ opacity: 0 }),\n animate(550, style({ opacity: 1 })),\n ]),\n transition('* => void', [\n style({ opacity: '*' }),\n animate(550, style({ opacity: 0 })),\n ]),\n ]),\n ]\n})\nexport class MessageZoneComponent implements OnInit {\n @Input() public filter?: string;\n public current: Message[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(public messages: DataMessageService) {}\n\n public ngOnInit(): void {\n this.messages.current\n .pipe(takeUntilDestroyed(this.destroy$))\n .subscribe((messages) => {\n this.current = messages;\n });\n }\n}\n","\n<div class=\"messagezone\">\n @for (message of current; track message) {\n <div class=\"alert\" [@dispStatus]=\"message.status\" [class]=\"message.style\" (click)=\"message.showTrace=!message.showTrace\">\n <button class=\"btn-close\" type=\"button\" (click)=\"messages.ack(message)\" aria-label=\"Close\"></button><strong>{{message.title}}</strong>&nbsp; {{message.message}}\n @if (message.showTrace) {\n <div class=\"pretrace\">{{message.trace}}</div>\n }\n </div>\n }\n</div>","import {DataModel} from \"./data-model\";\nimport {CollectionMock} from \"./data-collection.mock\";\nimport {FilterData, IQueryMeta, IQuerysetOptions, SortData} from \"./data-query\";\nimport {combineLatest, Observable, of} from \"rxjs\";\n\nexport class QuerysetMock<T extends DataModel> {\n public mockData: T[] = [];\n\n public filterData: FilterData = {};\n public sortData: SortData[] = [];\n public pageSize = 100;\n public page = 1;\n\n public pristine = true;\n public loading = of(false);\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\n constructor(protected _coll: CollectionMock<T>, public options: IQuerysetOptions = {}) {\n\n }\n\n public get results(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n\n public get meta(): Observable<IQueryMeta> {\n return of({\n nav: {count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10},\n parameters: {page: \"page\", page_size: \"page_size\"}\n });\n }\n\n public get full(): Observable<[T[], boolean, IQueryMeta]> {\n return combineLatest([this.results, this.loading, this.meta]);\n }\n\n public filter(params: FilterData = {}): QuerysetMock<T> {\n return this;\n }\n\n public sort(...sorting: string[]): QuerysetMock<T> {\n return this;\n }\n\n public paginateBy(pageSize: number = 20): QuerysetMock<T> {\n return this;\n }\n\n public setPage(page: number): QuerysetMock<T> {\n return this;\n }\n\n public getQueryParams(): FilterData {\n return {};\n }\n\n public get(): Observable<T[]> {\n return of(this.mockData || this._coll.mockValues);\n }\n}\n","import {DataModel} from \"./data-model\";\nimport {Observable, of} from \"rxjs\";\nimport {IQuerysetOptions} from \"./data-query\";\nimport {QuerysetMock} from \"./data-query.mock\";\nimport {Collection, IActionParams, IHttpMethod} from \"./data-collection\";\n\nexport class CollectionMock<T extends DataModel> {\n public mockValue?: T;\n public mockValues?: T[];\n public actionValue: any;\n\n constructor(protected model: new(coll: Collection<T>) => T) {\n }\n\n public fetch(id: number, suffix: string = \"\"): Observable<T> {\n return of(this.mockValue as T);\n }\n\n public action(model: T | null, method: IHttpMethod, action: string, params: IActionParams): Observable<any> {\n return of(this.actionValue);\n }\n\n public queryset(options: IQuerysetOptions = {}): QuerysetMock<T> {\n return new QuerysetMock<T>(this, options);\n }\n\n public list(query: { [index: string]: string } = {}, suffix: string = \"\"): Observable<any> {\n return of({results: this.mockValues});\n }\n\n fromJson(data: any, many: boolean = false): T | any {\n if (data && data.id !== undefined) {\n const m = new this.model(this as any);\n m.fromJson(data);\n return m;\n } else {\n if (many && data && data.length) {\n const out: T[] = [];\n for (const r of data) {\n const ri = new this.model(this as any);\n ri.fromJson(r);\n out.push(ri);\n }\n return out;\n }\n return data;\n }\n }\n}\n","import {Subscription} from \"rxjs\";\n\nexport interface UploaderOptions {\n concurrency: number;\n allowedContentTypes?: string[];\n maxUploads?: number;\n maxFileSize?: number;\n}\n\nexport interface BlobFile extends Blob {\n name: string;\n}\n\nexport enum UploadStatus {\n Queue,\n Uploading,\n Done,\n Cancelled\n}\n\nexport interface UploadProgress {\n status: UploadStatus;\n data?: {\n percentage: number;\n speed: number;\n speedHuman: string;\n startTime: number | null;\n endTime: number | null;\n eta: number | null;\n etaHuman: string | null;\n };\n}\n\nexport interface UploadFile {\n id: string;\n fileIndex: number;\n lastModifiedDate: Date;\n name: string;\n size: number;\n type: string;\n form: FormData;\n progress: UploadProgress;\n response?: any;\n responseStatus?: number;\n sub?: Subscription | any;\n nativeFile?: File;\n responseHeaders?: { [key: string]: string };\n}\n\nexport interface UploadOutput {\n type: \"addedToQueue\" | \"allAddedToQueue\" | \"uploading\" | \"done\" | \"start\" | \"cancelled\" | \"dragOver\"\n | \"dragOut\" | \"drop\" | \"removed\" | \"removedAll\" | \"rejected\";\n file?: UploadFile;\n nativeFile?: File;\n}\n\nexport interface UploadInput {\n type: \"uploadAll\" | \"uploadFile\" | \"cancel\" | \"cancelAll\" | \"remove\" | \"removeAll\";\n url?: string;\n method?: string;\n id?: string;\n fieldName?: string;\n fileIndex?: number;\n file?: UploadFile;\n data?: { [key: string]: string | Blob };\n headers?: { [key: string]: string };\n includeWebKitFormBoundary?: boolean; // If false, only the file is send trough xhr.send (WebKitFormBoundary is omit)\n withCredentials?: boolean;\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { finalize, mergeMap } from 'rxjs/operators';\nimport {\n BlobFile,\n UploadFile,\n UploadInput,\n UploadOutput,\n UploadStatus,\n} from './interfaces';\n\nexport function humanizeBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 Byte';\n }\n\n const k = 1024;\n const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport class DataUploaderService {\n queue: UploadFile[];\n serviceEvents: EventEmitter<UploadOutput>;\n uploadScheduler: Subject<{ file: UploadFile; event: UploadInput }>;\n subs: { id: string; sub: Subscription }[];\n contentTypes: string[];\n maxUploads: number;\n maxFileSize: number;\n\n constructor(\n concurrency: number = Number.POSITIVE_INFINITY,\n contentTypes: string[] = ['*'],\n maxUploads: number = Number.POSITIVE_INFINITY,\n maxFileSize: number = Number.POSITIVE_INFINITY\n ) {\n this.queue = [];\n this.serviceEvents = new EventEmitter<UploadOutput>();\n this.uploadScheduler = new Subject();\n this.subs = [];\n this.contentTypes = contentTypes;\n this.maxUploads = maxUploads;\n this.maxFileSize = maxFileSize;\n\n this.uploadScheduler\n .pipe(mergeMap((upload) => this.startUpload(upload), concurrency))\n .subscribe((uploadOutput) => this.serviceEvents.emit(uploadOutput));\n }\n\n handleFiles(incomingFiles: FileList): void {\n let acc: File[] = [];\n\n for (let i = 0; i < incomingFiles.length; i++) {\n const futureQueueLength = acc.length + this.queue.length + 1;\n const checkFile = incomingFiles[i];\n if (\n this.isContentTypeAllowed(checkFile.type) &&\n futureQueueLength <= this.maxUploads &&\n this.isFileSizeAllowed(checkFile.size)\n ) {\n acc = acc.concat(checkFile);\n } else {\n const rejectedFile: UploadFile = this.makeUploadFile(checkFile, i);\n this.serviceEvents.emit({ type: 'rejected', file: rejectedFile });\n }\n }\n for (let i = 0; i < acc.length; i++) {\n const file = acc[i];\n const uploadFile: UploadFile = this.makeUploadFile(file, i);\n this.serviceEvents.emit({ type: 'addedToQueue', file: uploadFile });\n this.queue.push(uploadFile);\n }\n this.serviceEvents.emit({ type: 'allAddedToQueue' });\n }\n\n initInputEvents(input: EventEmitter<UploadInput>): Subscription {\n return input.subscribe((event: UploadInput) => {\n switch (event.type) {\n case 'uploadFile':\n const uploadFileIndex = this.queue.findIndex(\n (file) => file === event.file\n );\n if (uploadFileIndex !== -1 && event.file) {\n this.uploadScheduler.next({\n file: this.queue[uploadFileIndex],\n event: event,\n });\n }\n break;\n case 'uploadAll':\n const files = this.queue.filter(\n (file) => file.progress.status === UploadStatus.Queue\n );\n files.forEach((file) =>\n this.uploadScheduler.next({ file: file, event: event })\n );\n break;\n case 'cancel':\n const id = event.id || null;\n if (!id) {\n return;\n }\n const subs = this.subs.filter((sub) => sub.id === id);\n subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n const fileIndex = this.queue.findIndex((file) => file.id === id);\n if (fileIndex !== -1) {\n this.queue[fileIndex].progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({\n type: 'cancelled',\n file: this.queue[fileIndex],\n });\n }\n }\n });\n break;\n case 'cancelAll':\n this.subs.forEach((sub) => {\n if (sub.sub) {\n sub.sub.unsubscribe();\n }\n\n const file = this.queue.find(\n (uploadFile) => uploadFile.id === sub.id\n );\n if (file) {\n file.progress.status = UploadStatus.Cancelled;\n this.serviceEvents.emit({ type: 'cancelled', file: file });\n }\n });\n break;\n case 'remove':\n if (!event.id) {\n return;\n }\n\n const i = this.queue.findIndex((file) => file.id === event.id);\n if (i !== -1) {\n const file = this.queue[i];\n this.queue.splice(i, 1);\n this.serviceEvents.emit({ type: 'removed', file: file });\n }\n break;\n case 'removeAll':\n if (this.queue.length) {\n this.queue = [];\n this.serviceEvents.emit({ type: 'removedAll' });\n }\n break;\n }\n });\n }\n\n startUpload(upload: {\n file: UploadFile;\n event: UploadInput;\n }): Observable<UploadOutput> {\n return new Observable((observer) => {\n const sub = this.uploadFile(upload.file, upload.event)\n .pipe(\n finalize(() => {\n if (!observer.closed) {\n observer.complete();\n }\n })\n )\n .subscribe({\n next: (output) => {\n observer.next(output);\n },\n error: (err) => {\n observer.error(err);\n observer.complete();\n },\n complete: () => {\n observer.complete();\n },\n });\n\n this.subs.push({ id: upload.file.id, sub: sub });\n });\n }\n\n uploadFile(file: UploadFile, event: UploadInput): Observable<UploadOutput> {\n return new Observable((observer) => {\n const url = event.url || '';\n const method = event.method || 'POST';\n const data = event.data || {};\n const headers = event.headers || {};\n\n const xhr = new XMLHttpRequest();\n const time: number = new Date().getTime();\n let progressStartTime: number =\n (file.progress.data && file.progress.data.startTime) || time;\n let speed = 0;\n let eta: number | null = null;\n\n xhr.upload.addEventListener(\n 'progress',\n (e: ProgressEvent) => {\n if (e.lengthComputable) {\n const percentage = Math.round((e.loaded * 100) / e.total);\n const diff = new Date().getTime() - time;\n speed = Math.round((e.loaded / diff) * 1000);\n progressStartTime =\n (file.progress.data && file.progress.data.startTime) ||\n new Date().getTime();\n eta = Math.ceil((e.total - e.loaded) / speed);\n\n file.progress = {\n status: UploadStatus.Uploading,\n data: {\n percentage: percentage,\n speed: speed,\n speedHuman: `${humanizeBytes(speed)}/s`,\n startTime: progressStartTime,\n endTime: null,\n eta: eta,\n etaHuman: this.secondsToHuman(eta),\n },\n };\n\n observer.next({ type: 'uploading', file: file });\n }\n },\n false\n );\n\n xhr.upload.addEventListener('error', (e: Event) => {\n observer.error(e);\n observer.complete();\n });\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedAverage = Math.round(\n (file.size / (new Date().getTime() - progressStartTime)) * 1000\n );\n file.progress = {\n status: UploadStatus.Done,\n data: {\n percentage: 100,\n speed: speedAverage,\n speedHuman: `${humanizeBytes(speedAverage)}/s`,\n startTime: progressStartTime,\n endTime: new Date().getTime(),\n eta: eta,\n etaHuman: this.secondsToHuman(eta || 0),\n },\n };\n\n file.responseStatus = xhr.status;\n try {\n file.response = JSON.parse(xhr.response);\n } catch (e) {\n file.response = xhr.response;\n }\n\n file.responseHeaders = this.parseResponseHeaders(\n xhr.getAllResponseHeaders()\n );\n\n observer.next({ type: 'done', file: file });\n\n observer.complete();\n }\n };\n\n xhr.open(method, url, true);\n xhr.withCredentials = !!event.withCredentials;\n\n try {\n const uploadFile = <BlobFile>file.nativeFile;\n const uploadIndex = this.queue.findIndex(\n (outFile) => outFile.nativeFile === uploadFile\n );\n\n if (\n this.queue[uploadIndex].progress.status === UploadStatus.Cancelled\n ) {\n observer.complete();\n }\n\n Object.keys(headers).forEach((key) =>\n xhr.setRequestHeader(key, headers[key])\n );\n\n let bodyToSend: FormData | BlobFile;\n\n if (event.includeWebKitFormBoundary !== false) {\n Object.keys(data).forEach((key) => file.form.append(key, data[key]));\n file.form.append(\n event.fieldName || 'file',\n uploadFile,\n uploadFile.name\n );\n bodyToSend = file.form;\n } else {\n bodyToSend = uploadFile;\n }\n\n this.serviceEvents.emit({ type: 'start', file: file });\n xhr.send(bodyToSend);\n } catch (e) {\n observer.complete();\n }\n\n return () => {\n xhr.abort();\n };\n });\n }\n\n secondsToHuman(sec: number): string {\n return new Date(sec * 1000).toISOString().substring(11, 11 + 8);\n }\n\n generateId(): string {\n return Math.random().toString(36).substring(7);\n }\n\n setContentTypes(contentTypes: string[]): void {\n if (typeof contentTypes !== 'undefined' && contentTypes instanceof Array) {\n if (contentTypes.find((type: string) => type === '*') !== undefined) {\n this.contentTypes = ['*'];\n } else {\n this.contentTypes = contentTypes;\n }\n return;\n }\n this.contentTypes = ['*'];\n }\n\n allContentTypesAllowed(): boolean {\n return this.contentTypes.find((type: string) => type === '*') !== undefined;\n }\n\n isContentTypeAllowed(mimetype: string): boolean {\n if (this.allContentTypesAllowed()) {\n return true;\n }\n return (\n this.contentTypes.find((type: string) => type === mimetype) !== undefined\n );\n }\n\n isFileSizeAllowed(fileSize: number): boolean {\n if (!this.maxFileSize) {\n return true;\n }\n return fileSize <= this.maxFileSize;\n }\n\n makeUploadFile(file: File, index: number): UploadFile {\n return {\n fileIndex: index,\n id: this.generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n form: new FormData(),\n progress: {\n status: UploadStatus.Queue,\n data: {\n percentage: 0,\n speed: 0,\n speedHuman: `${humanizeBytes(0)}/s`,\n startTime: null,\n endTime: null,\n eta: null,\n etaHuman: null,\n },\n },\n lastModifiedDate: new Date(file.lastModified),\n sub: undefined,\n nativeFile: file,\n };\n }\n\n private parseResponseHeaders(httpHeaders: string): { [key: string]: string } {\n if (!httpHeaders) {\n return {};\n }\n\n return httpHeaders\n .split('\\n')\n .map((x: string) => x.split(/: */, 2))\n .filter((x: string[]) => x[0])\n .reduce((acc: { [key: string]: string }, x: string[]) => {\n acc[x[0]] = x[1];\n return acc;\n }, {});\n }\n}\n","import {Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadInput, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileDrop]\",\n standalone: false\n})\nexport class NgFileDropDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<UploadInput>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n\n this.el.addEventListener(\"drop\", this.stopEvent, false);\n this.el.addEventListener(\"dragenter\", this.stopEvent, false);\n this.el.addEventListener(\"dragover\", this.stopEvent, false);\n }\n\n ngOnDestroy() {\n if (this._sub) {\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n stopEvent = (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n @HostListener(\"drop\", [\"$event\"])\n public onDrop(e: any) {\n e.stopPropagation();\n e.preventDefault();\n\n const event: UploadOutput = {type: \"drop\"};\n this.uploadOutput.emit(event);\n this.upload.handleFiles(e.dataTransfer.files);\n }\n\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOver\"};\n this.uploadOutput.emit(event);\n }\n\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(e: Event) {\n if (!e) {\n return;\n }\n\n const event: UploadOutput = {type: \"dragOut\"};\n this.uploadOutput.emit(event);\n }\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from \"@angular/core\";\nimport {UploaderOptions, UploadOutput} from \"./interfaces\";\nimport {DataUploaderService} from \"./ngx-uploader.class\";\nimport {Subscription} from \"rxjs\";\n\n@Directive({\n selector: \"[dataFileSelect]\",\n standalone: false\n})\nexport class NgFileSelectDirective implements OnInit, OnDestroy {\n @Input() options!: UploaderOptions;\n @Input() uploadInput!: EventEmitter<any>;\n @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n public upload!: DataUploaderService;\n public el!: HTMLInputElement;\n\n private _sub!: Subscription[];\n\n constructor(public elementRef: ElementRef) {\n this.uploadOutput = new EventEmitter<UploadOutput>();\n }\n\n ngOnInit() {\n this._sub = [];\n const concurrency = this.options && this.options.concurrency || Number.POSITIVE_INFINITY;\n const allowedContentTypes = this.options && this.options.allowedContentTypes || [\"*\"];\n const maxUploads = this.options && this.options.maxUploads || Number.POSITIVE_INFINITY;\n const maxFileSize = this.options && this.options.maxFileSize || Number.POSITIVE_INFINITY;\n this.upload = new DataUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n this.el = this.elementRef.nativeElement;\n this.el.addEventListener(\"change\", this.fileListener, false);\n\n this._sub.push(\n this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n this.uploadOutput.emit(event);\n })\n );\n\n if (this.uploadInput instanceof EventEmitter) {\n this._sub.push(this.upload.initInputEvents(this.uploadInput));\n }\n }\n\n ngOnDestroy() {\n if (this.el) {\n this.el.removeEventListener(\"change\", this.fileListener, false);\n this._sub.forEach(sub => sub.unsubscribe());\n }\n }\n\n fileListener = () => {\n if (this.el.files) {\n this.upload.handleFiles(this.el.files);\n }\n };\n}\n","import {NgModule} from \"@angular/core\";\nimport {NgFileDropDirective} from \"./ng-file-drop.directive\";\nimport {NgFileSelectDirective} from \"./ng-file-select.directive\";\n\n@NgModule({\n declarations: [NgFileDropDirective, NgFileSelectDirective],\n exports: [NgFileDropDirective, NgFileSelectDirective]\n})\nexport class NgxUploaderModule {\n}\n","import { Route, Router } from '@angular/router';\n\n/**\n * Template function type.\n * Used for page title or other data to string operations.\n *\n * @param data: object\n * @param path: optional path (see: usage)\n */\nexport type TplFn<T> = (data: T, path?: string) => string;\n\n/**\n * Base route parameters interface.\n */\nexport interface BaseRouteParams {\n /** Skip route in breadcrumbs */\n skip?: boolean;\n /** Route title or title template */\n title?: string | TplFn<any>;\n /** Route icon string */\n icon?: string;\n /** Route config item */\n route: RouteConfigItem;\n /** This route is a tree route */\n tree?: boolean;\n}\n\n/**\n * Route function type.\n * Takes parameters, return a route.\n */\nexport type RouteFn = (...args: any[]) => (string | number)[];\n\n/**\n * Route config item.\n * Stores route named parameters, route function and route name.\n */\nexport interface RouteConfigItem {\n params: string[];\n route: RouteFn;\n name: string;\n}\n\nexport function RData<T extends BaseRouteParams>(value: T) {\n return value;\n}\n\nexport type RoutesConfig<T extends string> = {\n readonly [Property in T]: RouteConfigItem;\n};\n\nexport interface StrictRoutes extends Route {\n data: BaseRouteParams;\n}\n\nexport type RoutesDefinition = StrictRoutes[];\n\ninterface RouteArg<T> {\n [index: string]: T;\n}\n\nexport class Link<T> {\n private _cargs: { [index: string]: any } = {};\n private _params: string[] = [];\n private _route: RouteFn;\n private _router?: Router;\n\n constructor(config: RouteConfigItem, context: any, router?: Router) {\n this._params = config.params || [];\n this._route = config.route;\n this._router = router;\n this._name = config.name;\n if (context) {\n this.context(context);\n }\n }\n\n private _name!: string;\n\n public get name(): string {\n return this._name;\n }\n\n public context(ctx: any): void {\n for (const n of this._params) {\n if (ctx && ctx[n]) {\n this._cargs[n] = ctx[n];\n } else {\n this._cargs[n] = null;\n }\n }\n }\n\n public route(params?: Required<RouteArg<T>>): (string | number)[] {\n const rargs: any[] = [];\n for (const n of this._params) {\n if (params && params[n] !== undefined && params[n] !== null) {\n rargs.push(params[n]);\n } else if (this._cargs[n] !== undefined && this._cargs[n] !== null) {\n rargs.push(this._cargs[n]);\n } else {\n console.error('Missing route parameter', n);\n return [];\n }\n }\n // SEE: Check for undefined in rargs\n return this._route(...rargs);\n }\n\n public async navigate(\n params?: { [index: string]: T },\n router?: Router\n ): Promise<boolean> {\n if (router) {\n return router.navigate(this.route(params));\n }\n if (this._router) {\n return this._router.navigate(this.route(params));\n }\n console.error('Router not provided, no navigation');\n return false;\n }\n}\n","import {\n Component,\n DestroyRef,\n inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n ActivatedRouteSnapshot,\n NavigationEnd,\n Router,\n RouterModule,\n RouterState,\n UrlSegment,\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { BaseRouteParams, TplFn } from '../routing';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface IPathTreeItem {\n path: string;\n title: string;\n icon: string;\n current: boolean;\n}\n\n/**\n * Use data from route config to create a breadcrumb for current route.\n *\n * Route config data is :\n * - title : route fragment title or lodash template to build title\n * (provided arguments for template processing : route (current segment route snapshot)\n * and data (input argument)\n * - icon: icon classes. Example fa fa-home for home & font awesome\n */\n@Component({\n selector: 'data-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.css'],\n imports: [CommonModule, RouterModule]\n})\nexport class BreadcrumbComponent implements OnChanges, OnInit {\n /**\n * Additional data to be used in titleTemplate\n */\n @Input() public data: any;\n /**\n * Do we display icons ?\n */\n @Input() public icons = true;\n public tree: IPathTreeItem[] = [];\n private destroy$ = inject(DestroyRef);\n\n constructor(\n public router: Router,\n public route: ActivatedRoute,\n ) {}\n\n ngOnInit(): void {\n this.getRouteTree(this.router.routerState);\n this.router.events\n .pipe(\n takeUntilDestroyed(this.destroy$),\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.getRouteTree(this.router.routerState);\n });\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.getRouteTree(this.router.routerState);\n }\n\n public getRouteTree(current: RouterState): void {\n const tree: IPathTreeItem[] = [];\n const url: string[] = [];\n let p: ActivatedRouteSnapshot | null = current.root.snapshot;\n\n while (p != null) {\n let rdata: Partial<BaseRouteParams> = {\n tree: false,\n title: () => 'xxxx',\n icon: '',\n skip: true,\n };\n const data = p.data as BaseRouteParams;\n\n // Get route data\n if (p.routeConfig && p.routeConfig.data) {\n rdata = p.routeConfig.data as BaseRouteParams;\n }\n\n if (rdata.tree) {\n // Get icon\n for (const u of p.url) {\n url.push(u.path);\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data, u),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n } else {\n url.push(p.url.join('/'));\n let rtd: IPathTreeItem = {\n icon: this.getIcon(rdata, data),\n title: this.getTitle(rdata, data),\n path: url.join('/'),\n current: false,\n };\n if (rtd.path.length > 0 && rtd.path[0] !== '/') {\n rtd.path = '/' + rtd.path;\n }\n if (!rdata.skip) {\n tree.push(rtd);\n }\n }\n\n p = p.firstChild;\n }\n if (tree.length > 0) {\n tree[tree.length - 1].current = true;\n }\n this.tree = tree;\n }\n\n public getTitle(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n u?: UrlSegment,\n ): string {\n if (rdata['title']) {\n if (typeof rdata['title'] === 'function') {\n const tpl: TplFn<any> = rdata['title'];\n try {\n if (u) {\n return tpl(data, u.path);\n } else {\n return tpl(data);\n }\n } catch (e) {\n console.warn('Unable to process breadcrumb function', e);\n if (data.title != null) {\n return 'xx';\n }\n }\n } else {\n return rdata['title'];\n }\n }\n return 'xxx';\n }\n\n public getIcon(\n rdata: Partial<BaseRouteParams>,\n data: BaseRouteParams,\n ): string {\n if (data.icon) {\n return data.icon;\n }\n return '';\n }\n}\n","\n<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb\">\n @for (p of tree; track p) {\n @if (!p.current) {\n <li class=\"breadcrumb-item\"><a class=\"breadcrumb-item\" [routerLink]=\"p.path\">\n @if (icons && p.icon) {\n <i class=\"me-2\" [ngClass]=\"p.icon\"></i>{{p.title}}\n }\n @if (!(icons && p.icon)) {\n {{p.title}}\n }</a></li>\n }\n @if (p.current) {\n <li class=\"breadcrumb-item active\" aria-current=\"page\">\n @if (icons && p.icon) {\n <i class=\"me-1\" [ngClass]=\"p.icon\"></i>{{p.title}}\n }\n @if (!(icons && p.icon)) {\n {{p.title}}\n }\n </li>\n }\n }\n </ol>\n </nav>","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, UrlSegment } from '@angular/router';\n\ninterface ITabStoredMem {\n name: string;\n value: string;\n}\n\nexport class NavDriver {\n private lastActive!: Date;\n\n constructor(\n private _parent: TabMemoryService,\n public name: string,\n public defaults: string,\n private save: boolean\n ) {\n this._current = this.defaults;\n if (this.save) {\n const value = this._parent.load(this.name);\n if (value !== null) {\n this._current = value;\n }\n }\n }\n\n private _current: string;\n\n public get current(): string {\n return this._current;\n }\n\n public set current(value: string) {\n this._current = value;\n this.lastActive = new Date();\n if (this.save) {\n this._parent.save();\n }\n }\n\n public get value(): ITabStoredMem {\n return { name: this.name, value: this._current };\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabMemoryService {\n private tabMem: { [index: string]: NavDriver } = {};\n\n constructor(private _route: ActivatedRoute) {}\n\n private static targetToString(\n target: (string | number | UrlSegment)[]\n ): string {\n let out = '';\n for (const t of target) {\n out += `/${t}`;\n }\n return out;\n }\n\n public memFor(\n target: (string | number | UrlSegment)[],\n defaults: string,\n save: boolean = true,\n fragment?: string | null\n ): NavDriver {\n const tname = TabMemoryService.targetToString(target);\n if (this.tabMem[tname] === undefined) {\n this.tabMem[tname] = new NavDriver(this, tname, defaults, save);\n }\n if (fragment) {\n this.tabMem[tname].current = fragment;\n }\n return this.tabMem[tname];\n }\n\n public save() {\n const tosave: { [index: string]: ITabStoredMem } = {};\n for (const tn of Object.keys(this.tabMem)) {\n tosave[tn] = this.tabMem[tn].value;\n }\n localStorage.setItem('tabmem', JSON.stringify(tosave));\n }\n\n public load(name: string): string | null {\n const tm = localStorage.getItem('tabmem');\n if (tm) {\n const tmd = JSON.parse(tm);\n if (tmd && tmd[name] && tmd[name].value) {\n return tmd[name].value;\n }\n }\n return null;\n }\n}\n","export const slugify = (str: string): string => {\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\n str = str.toLowerCase();\n\n // remove accents, swap ñ for n, etc\n const from = 'àáäâèéëêìíïîòóöôùúüûñç·/_,:;';\n const to = 'aaaaeeeeiiiioooouuuunc------';\n for (let i = 0, l = from.length; i < l; i++) {\n str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n }\n\n str = str\n .replace(/[^a-z0-9 -]/g, '') // remove invalid chars\n .replace(/\\s+/g, '-') // collapse whitespace and replace by -\n .replace(/-+/g, '-'); // collapse dashes\n\n return str;\n};\n","// By default, Underscore uses ERB-style template delimiters, change the\n// following template settings to use alternative delimiters.\nconst settings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g,\n variable: 'obj',\n};\n\n// When customizing `templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nconst noMatch = /.^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nlet escapes: { [index: string]: string } = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n r: '\\r',\n n: '\\n',\n t: '\\t',\n u2028: '\\u2028',\n u2029: '\\u2029',\n};\n\nfor (let p in escapes) {\n escapes[escapes[p]] = p;\n}\n\nconst escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\nconst unescaper = /\\\\(\\\\|'|r|n|t|u2028|u2029)/g;\n\nexport const tmpl = (text: string, data?: any, objectName?: string) => {\n if (objectName) {\n settings.variable = objectName;\n }\n\n // Compile the template source, taking care to escape characters that\n // cannot be included in a string literal and then unescape them in code\n // blocks.\n let source =\n \"__p+='\" +\n text\n .replace(escaper, function (match) {\n return '\\\\' + escapes[match];\n })\n .replace(settings.escape || noMatch, function (match, code) {\n return \"'+\\n_.escape(\" + unescape(code) + \")+\\n'\";\n })\n .replace(settings.interpolate || noMatch, function (match, code) {\n return \"'+\\n(\" + unescape(code) + \")+\\n'\";\n })\n .replace(settings.evaluate || noMatch, function (match, code) {\n return \"';\\n\" + unescape(code) + \"\\n;__p+='\";\n }) +\n \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) {\n source = 'with(obj||{}){\\n' + source + '}\\n';\n }\n\n source =\n \"var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\\n\" +\n source +\n 'return __p;\\n';\n\n var render = new Function(settings.variable || 'obj', source);\n\n if (data) {\n return render(data);\n }\n\n const template = (data: any) => {\n return render.call(this, data);\n };\n\n // Provide the compiled function source as a convenience for build time\n // precompilation.\n template.source =\n 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\n return template;\n};\n","import { ApplicationRef, Injectable } from '@angular/core';\nimport { SwUpdate, VersionReadyEvent } from '@angular/service-worker';\nimport { filter, first, map, tap } from 'rxjs/operators';\nimport { merge, Observable, ReplaySubject, timer } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UpdateService {\n private stable = false;\n\n constructor(private appRef: ApplicationRef, private swUpdate: SwUpdate) {\n this._available$ = new ReplaySubject<boolean>(1);\n this._available$.next(false);\n const appIsStable$ = this.appRef.isStable\n .pipe(first((isStable) => isStable))\n .pipe(tap(() => console.log('App is stable')));\n const checkInterval$ = timer(10 * 1000, 5 * 60 * 1000);\n const checkWhenStable$ = merge(appIsStable$, checkInterval$);\n const updatesAvailable = swUpdate.versionUpdates.pipe(\n tap((evt) => console.log('Version updates event', evt)),\n filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),\n map((evt) => ({\n type: 'UPDATE_AVAILABLE',\n current: evt.currentVersion,\n available: evt.latestVersion,\n }))\n );\n updatesAvailable.subscribe(async (evt) => {\n this._available$.next(true);\n });\n checkWhenStable$.subscribe(async () => {\n this.stable = true;\n try {\n console.log('Checking for update');\n const res = await swUpdate.checkForUpdate();\n console.log('Check for update result', res);\n } catch (e) {\n console.warn('No service worker');\n }\n });\n }\n\n private _available$: ReplaySubject<boolean>;\n\n public get available$(): Observable<boolean> {\n return this._available$.asObservable();\n }\n\n public activate(): void {\n this._available$.next(false);\n console.log('RELOADING FULL PAGE');\n document.location.reload();\n }\n\n public dismiss(): void {\n this._available$.next(false);\n }\n}\n","import { Component } from '@angular/core';\nimport { UpdateService } from '../update.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'data-update',\n templateUrl: './update.component.html',\n styleUrls: ['./update.component.sass'],\n imports: [CommonModule]\n})\nexport class UpdateComponent {\n constructor(public update: UpdateService) {}\n}\n","\n@if (update.available$|async) {\n <div class=\"snack\">\n <p>Une nouvelle version de l'application est disponible.</p>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <button class=\"btn btn-primary btn-block w-100\" (click)=\"update.activate()\">L'ACTIVER MAINTENANT</button>\n </div>\n <div class=\"col-sm-6\">\n <button class=\"btn btn-warning btn-block w-100\" (click)=\"update.dismiss()\">Plus tard</button>\n </div>\n </div>\n </div>\n}","/*\n * Public API Surface of data\n */\n\nexport * from './lib/data/data-parameters';\nexport * from './lib/data/data-model';\nexport * from './lib/data/data-collection';\nexport * from './lib/data/data-backend';\nexport * from './lib/data/data-query';\n\nexport * from './lib/modellist/model-list.service';\nexport * from './lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component';\nexport * from './lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component';\nexport * from './lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters/model-list-filters.component';\nexport * from './lib/modellist/model-list-filters/model-list-filters';\nexport * from './lib/modellist/model-list-filters/model-list-filter';\nexport * from './lib/modellist/model-list-filters/model-list-filter-group';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter';\nexport * from './lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter';\n\nexport * from './lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban';\n\nexport * from './lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component';\n\nexport * from './lib/dispedit/choice.pipe';\nexport * from './lib/dispedit/factor.pipe';\nexport * from './lib/dispedit/factorc.pipe';\nexport * from './lib/dispedit/dispedit/dispedit.component';\nexport * from './lib/dispedit/fkselect/fkselect.component';\nexport * from './lib/dispedit/m2mselect/m2mselect.component';\nexport * from './lib/dispedit/flags/flags.component';\nexport * from './lib/dispedit/richedit/richedit.component';\n\nexport * from './lib/dispedit/sdelete/sdelete.component';\nexport * from './lib/data/fields/index';\n\nexport * from './lib/messages/message.service';\nexport * from './lib/messages/message-zone/message-zone.component';\n\nexport * from './lib/data/data-collection.mock';\nexport * from './lib/uploader/index';\n\nexport * from './lib/auth/auth.service';\nexport * from './lib/auth/auth-interceptor.service';\nexport * from './lib/auth/jwt';\n\nexport * from './lib/routing/routing';\nexport * from './lib/routing/breadcrumb/breadcrumb.component';\n\nexport * from './lib/utils/tab-memory.service';\nexport * from './lib/utils/slugify';\nexport * from './lib/utils/template';\n\nexport * from './lib/updates/update.service';\nexport * from './lib/updates/update/update.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.DataMessageService","i2.DataMessageService","this","i1.UpdateService"],"mappings":"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"}