@rosoftlab/core 0.0.100
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +6 -0
- package/esm2020/lib/base-components/base-form-edit.component.mjs +242 -0
- package/esm2020/lib/base-components/field-error-display/field-error-display.component.mjs +15 -0
- package/esm2020/lib/base-components/generic-table/generic-table.component.mjs +431 -0
- package/esm2020/lib/base-components/index.mjs +5 -0
- package/esm2020/lib/base-components/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2020/lib/base-components/searchable-dropdown/searchable-dropdown.component.mjs +231 -0
- package/esm2020/lib/base-components/under-construction/under-construction.component.mjs +12 -0
- package/esm2020/lib/constants/symbols.mjs +3 -0
- package/esm2020/lib/converters/date/date.converter.mjs +12 -0
- package/esm2020/lib/decorators/attribute.decorator.mjs +85 -0
- package/esm2020/lib/decorators/base-datastore-config.decorator.mjs +7 -0
- package/esm2020/lib/decorators/base-model-config.decorator.mjs +10 -0
- package/esm2020/lib/decorators/custom.type.decorator.mjs +11 -0
- package/esm2020/lib/decorators/grid-layout.decorator.mjs +23 -0
- package/esm2020/lib/directives/translated-content.directive.mjs +96 -0
- package/esm2020/lib/directives/translated-element.directive.mjs +20 -0
- package/esm2020/lib/index.mjs +29 -0
- package/esm2020/lib/interfaces/attribute-decorator-options.interface.mjs +2 -0
- package/esm2020/lib/interfaces/datastore-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/model-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/overrides.interface.mjs +2 -0
- package/esm2020/lib/interfaces/property-converter.interface.mjs +2 -0
- package/esm2020/lib/material.mjs +94 -0
- package/esm2020/lib/models/base-meta.model.mjs +7 -0
- package/esm2020/lib/models/base-query-data.mjs +13 -0
- package/esm2020/lib/models/base.model.mjs +171 -0
- package/esm2020/lib/models/error-response.model.mjs +9 -0
- package/esm2020/lib/models/grid-layout-format.enum.mjs +15 -0
- package/esm2020/lib/models/grid-layout.mjs +18 -0
- package/esm2020/lib/models/rule.mjs +6 -0
- package/esm2020/lib/module.mjs +55 -0
- package/esm2020/lib/pipes/Nl2brPipe.pipe.mjs +21 -0
- package/esm2020/lib/pipes/input-error.pipe.mjs +37 -0
- package/esm2020/lib/providers.mjs +10 -0
- package/esm2020/lib/services/base-datastore.service.mjs +333 -0
- package/esm2020/lib/services/base.service.mjs +95 -0
- package/esm2020/lib/services/dialog.service.mjs +150 -0
- package/esm2020/lib/services/grid-layout.service.mjs +21 -0
- package/esm2020/lib/services/index.mjs +5 -0
- package/esm2020/lib/validators/pattern-validator.mjs +15 -0
- package/esm2020/public-api.mjs +12 -0
- package/esm2020/rosoftlab-core.mjs +5 -0
- package/fesm2015/rosoftlab-core.mjs +2217 -0
- package/fesm2015/rosoftlab-core.mjs.map +1 -0
- package/fesm2020/rosoftlab-core.mjs +2210 -0
- package/fesm2020/rosoftlab-core.mjs.map +1 -0
- package/lib/base-components/base-form-edit.component.d.ts +58 -0
- package/lib/base-components/field-error-display/field-error-display.component.d.ts +7 -0
- package/lib/base-components/generic-table/generic-table.component.d.ts +93 -0
- package/lib/base-components/index.d.ts +4 -0
- package/lib/base-components/page-not-found/page-not-found.component.d.ts +8 -0
- package/lib/base-components/searchable-dropdown/searchable-dropdown.component.d.ts +62 -0
- package/lib/base-components/under-construction/under-construction.component.d.ts +6 -0
- package/lib/constants/symbols.d.ts +1 -0
- package/lib/converters/date/date.converter.d.ts +5 -0
- package/lib/decorators/attribute.decorator.d.ts +2 -0
- package/lib/decorators/base-datastore-config.decorator.d.ts +1 -0
- package/lib/decorators/base-model-config.decorator.d.ts +1 -0
- package/lib/decorators/custom.type.decorator.d.ts +1 -0
- package/lib/decorators/grid-layout.decorator.d.ts +2 -0
- package/lib/directives/translated-content.directive.d.ts +21 -0
- package/lib/directives/translated-element.directive.d.ts +10 -0
- package/lib/index.d.ts +27 -0
- package/lib/interfaces/attribute-decorator-options.interface.d.ts +8 -0
- package/lib/interfaces/datastore-config.interface.d.ts +8 -0
- package/lib/interfaces/model-config.interface.d.ts +8 -0
- package/lib/interfaces/overrides.interface.d.ts +5 -0
- package/lib/interfaces/property-converter.interface.d.ts +4 -0
- package/lib/material.d.ts +42 -0
- package/lib/models/base-meta.model.d.ts +5 -0
- package/lib/models/base-query-data.d.ts +7 -0
- package/lib/models/base.model.d.ts +33 -0
- package/lib/models/error-response.model.d.ts +17 -0
- package/lib/models/grid-layout-format.enum.d.ts +12 -0
- package/lib/models/grid-layout.d.ts +13 -0
- package/lib/models/rule.d.ts +5 -0
- package/lib/module.d.ts +14 -0
- package/lib/pipes/Nl2brPipe.pipe.d.ts +7 -0
- package/lib/pipes/input-error.pipe.d.ts +10 -0
- package/lib/providers.d.ts +2 -0
- package/lib/services/base-datastore.service.d.ts +45 -0
- package/lib/services/base.service.d.ts +26 -0
- package/lib/services/dialog.service.d.ts +21 -0
- package/lib/services/grid-layout.service.d.ts +9 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/validators/pattern-validator.d.ts +4 -0
- package/package.json +53 -0
- package/public-api.d.ts +7 -0
- package/rosoftlab-core.d.ts +5 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"rosoftlab-core.mjs","sources":["../../../../projects/rosoftlab/core/src/lib/base-components/field-error-display/field-error-display.component.ts","../../../../projects/rosoftlab/core/src/lib/base-components/field-error-display/field-error-display.component.html","../../../../projects/rosoftlab/core/src/lib/base-components/page-not-found/page-not-found.component.ts","../../../../projects/rosoftlab/core/src/lib/base-components/page-not-found/page-not-found.component.html","../../../../projects/rosoftlab/core/src/lib/base-components/searchable-dropdown/searchable-dropdown.component.ts","../../../../projects/rosoftlab/core/src/lib/base-components/searchable-dropdown/searchable-dropdown.component.html","../../../../projects/rosoftlab/core/src/lib/base-components/under-construction/under-construction.component.ts","../../../../projects/rosoftlab/core/src/lib/base-components/under-construction/under-construction.component.html","../../../../projects/rosoftlab/core/src/lib/models/base-query-data.ts","../../../../projects/rosoftlab/core/src/lib/services/base-datastore.service.ts","../../../../projects/rosoftlab/core/src/lib/services/base.service.ts","../../../../projects/rosoftlab/core/src/lib/services/dialog.service.ts","../../../../projects/rosoftlab/core/src/lib/base-components/base-form-edit.component.ts","../../../../projects/rosoftlab/core/src/lib/models/grid-layout-format.enum.ts","../../../../projects/rosoftlab/core/src/lib/base-components/generic-table/generic-table.component.ts","../../../../projects/rosoftlab/core/src/lib/base-components/generic-table/generic-table.component.html","../../../../projects/rosoftlab/core/src/lib/constants/symbols.ts","../../../../projects/rosoftlab/core/src/lib/converters/date/date.converter.ts","../../../../projects/rosoftlab/core/src/lib/decorators/attribute.decorator.ts","../../../../projects/rosoftlab/core/src/lib/decorators/base-datastore-config.decorator.ts","../../../../projects/rosoftlab/core/src/lib/models/base-meta.model.ts","../../../../projects/rosoftlab/core/src/lib/decorators/base-model-config.decorator.ts","../../../../projects/rosoftlab/core/src/lib/decorators/custom.type.decorator.ts","../../../../projects/rosoftlab/core/src/lib/decorators/grid-layout.decorator.ts","../../../../projects/rosoftlab/core/src/lib/directives/translated-element.directive.ts","../../../../projects/rosoftlab/core/src/lib/directives/translated-content.directive.ts","../../../../projects/rosoftlab/core/src/lib/models/grid-layout.ts","../../../../projects/rosoftlab/core/src/lib/models/base.model.ts","../../../../projects/rosoftlab/core/src/lib/models/error-response.model.ts","../../../../projects/rosoftlab/core/src/lib/models/rule.ts","../../../../projects/rosoftlab/core/src/lib/material.ts","../../../../projects/rosoftlab/core/src/lib/services/grid-layout.service.ts","../../../../projects/rosoftlab/core/src/lib/providers.ts","../../../../projects/rosoftlab/core/src/lib/module.ts","../../../../projects/rosoftlab/core/src/lib/pipes/input-error.pipe.ts","../../../../projects/rosoftlab/core/src/lib/pipes/Nl2brPipe.pipe.ts","../../../../projects/rosoftlab/core/src/lib/validators/pattern-validator.ts","../../../../projects/rosoftlab/core/src/public-api.ts","../../../../projects/rosoftlab/core/src/rosoftlab-core.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rsl-field-error-display',\r\n templateUrl: './field-error-display.component.html',\r\n styleUrls: ['./field-error-display.component.scss']\r\n})\r\nexport class FieldErrorDisplayComponent {\r\n\r\n @Input() errorMsg: string;\r\n @Input() displayError: boolean;\r\n\r\n}\r\n","<div *ngIf=\"displayError\" >\n <!-- <span class=\"glyphicon glyphicon-remove form-control-feedback fix-error-icon\"></span> -->\n <span class=\"sr-only\">(error)</span>\n <div class=\"error-msg\">\n {{ errorMsg }}\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rsl-page-not-found',\r\n templateUrl: './page-not-found.component.html',\r\n styleUrls: ['./page-not-found.component.scss']\r\n})\r\nexport class PageNotFoundComponent implements OnInit {\r\n\r\n constructor() { \r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","<div class=\"forms-view-container\">\n <div class=\"under-construction-view-container\">\n Page not found\n </div>\n</div>","import { FocusMonitor } from '@angular/cdk/a11y';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, filter, finalize, switchMap, takeUntil, tap } from 'rxjs/operators';\r\nimport { BaseQueryData } from '../../models/base-query-data';\r\nimport { BaseModel } from '../../models/base.model';\r\nimport { BaseService } from '../../services/base.service';\r\n\r\n@Component({\r\n selector: 'rsl-searchable-dropdown',\r\n templateUrl: './searchable-dropdown.component.html',\r\n // styleUrls: ['./searchable-dropdown.component.scss'],\r\n host: {\r\n '[class.example-floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n '[attr.aria-describedby]': 'describedBy',\r\n }\r\n})\r\nexport class SearchableDropdownComponent<T extends BaseModel> implements OnInit, OnDestroy, ControlValueAccessor {\r\n static nextId = 0;\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n errorState = false;\r\n id = `rsl-searchable-dropdown-${SearchableDropdownComponent.nextId++}`;\r\n\r\n // label for the search dropdown\r\n @Input() label: string = '';\r\n\r\n //Name of the form control\r\n @Input() fControlName: string;\r\n\r\n //Reference of the service\r\n @Input() serviceRef: BaseService<T>;\r\n\r\n //Fields for filtering\r\n @Input() searchFields: string;\r\n\r\n //Fields for display \r\n @Input() displayFields: string;\r\n\r\n //Fields for sorting the API data\r\n @Input() sortFields: string = '';\r\n\r\n // The value used to populate the control value\r\n @Input() valueField: string = 'id';\r\n\r\n // The minumum char for search\r\n @Input() minLengthTerm: number = 3;\r\n\r\n // The preload x elements\r\n @Input() preloadElementsCount: number;\r\n\r\n @Output() modelSelected: EventEmitter<BaseModel> = new EventEmitter();\r\n\r\n\r\n get empty() {\r\n return !this.value;\r\n }\r\n\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled = false;\r\n\r\n\r\n\r\n @Input()\r\n get value(): any | null {\r\n return this._value;\r\n }\r\n set value(value: any | null) {\r\n if (value)\r\n if (this._value !== value) {\r\n this.loadModel(value);\r\n }\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n private _value: any;\r\n // Search form control\r\n searchControl: AbstractControl;\r\n\r\n showSerach = true;\r\n isLoading = false;\r\n options = [];\r\n filteredOptions = [];\r\n /** Subject that emits when the component has been destroyed. */\r\n protected _onDestroy = new Subject<void>();\r\n\r\n constructor(\r\n private _focusMonitor: FocusMonitor,\r\n private _elementRef: ElementRef<HTMLElement>,\r\n @Optional() @Self() public ngControl: NgControl\r\n ) {\r\n\r\n this.searchControl = new FormControl('');\r\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\r\n if (this.focused && !origin) {\r\n this.onTouched();\r\n }\r\n this.focused = !!origin;\r\n this.stateChanges.next();\r\n });\r\n\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n if (!this.displayFields)\r\n this.displayFields = this.searchFields;\r\n\r\n this.loadModel(this.ngControl.value)\r\n\r\n if (this.preloadElementsCount) {\r\n this.serviceRef.getAll(1, this.preloadElementsCount).subscribe({\r\n next: (data: BaseQueryData<T>) => {\r\n this.showSerach = false;\r\n this.options = data.getModels();\r\n this.filteredOptions = this.options;\r\n }\r\n })\r\n }\r\n\r\n this.searchControl.valueChanges\r\n .pipe(\r\n filter((res) => {\r\n const result = res !== null && res.length >= this.minLengthTerm;\r\n if (!result) {\r\n this.options = [];\r\n this.filteredOptions = [];\r\n }\r\n this.showSerach = !result;\r\n return result;\r\n }),\r\n debounceTime(300),\r\n tap(() => {\r\n this.filteredOptions = [];\r\n this.isLoading = true;\r\n }),\r\n switchMap((value: string) =>\r\n this.serviceRef\r\n .getAll(1, 10, this.sortFields, `${this.searchFields.replace(',', '|')}@=*${value}`)\r\n .pipe(\r\n finalize(() => {\r\n this.isLoading = false;\r\n })\r\n )\r\n ),\r\n takeUntil(this._onDestroy)\r\n )\r\n .subscribe((options: any) => {\r\n this.filteredOptions = options.getModels();\r\n });\r\n }\r\n\r\n onSelected($event) {\r\n const value = $event.option.value;\r\n this.searchControl.setValue(value);\r\n this.modelSelected.emit(value);\r\n if (this.valueField in value) {\r\n this.setControlValue(value[this.valueField]);\r\n }\r\n\r\n }\r\n setControlValue(value: any) {\r\n this.value = value;\r\n this.ngControl.control.setValue(value);\r\n }\r\n displayWith(value: any) {\r\n return this.getConcatedFields(value);\r\n }\r\n\r\n clearSelection() {\r\n this.modelSelected.emit(null);\r\n this.setControlValue(null);\r\n this.searchControl.setValue(null);\r\n this.filteredOptions = this.options;\r\n }\r\n\r\n getConcatedFields(option): string {\r\n if (!option) return null;\r\n const filtersArr = this.displayFields.split(',');\r\n return filtersArr.reduce((acc, cv) => {\r\n return acc.concat(option[cv] + ' ');\r\n }, '');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.searchControl = null;\r\n this.stateChanges.complete();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n this._onDestroy.next();\r\n this._onDestroy.complete();\r\n }\r\n getSearchText(): string {\r\n return `Enter ${this.minLengthTerm} characters to start search`;\r\n\r\n }\r\n writeValue(model: T | null): void {\r\n console.log(model);\r\n this.value = model;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n private loadModel(id: string) {\r\n //Load the model from API to display the value\r\n let needLoad = false;\r\n if (id) {\r\n if (!this.searchControl.value)\r\n needLoad = true\r\n else {\r\n if (this.searchControl.value[this.valueField] !== id) {\r\n needLoad = true\r\n }\r\n }\r\n }\r\n if (needLoad) {\r\n this.serviceRef.get(id).subscribe({\r\n next: (model: T) => {\r\n this.options.push(model);\r\n this.filteredOptions = this.options;\r\n this.searchControl.setValue(model);\r\n }\r\n })\r\n }\r\n }\r\n}\r\n","<div class=\"form-group\">\r\n <label>{{label | translate}}</label>\r\n <mat-form-field appearance=\"outline\" fxFlex>\r\n <input matInput [matAutocomplete]=\"auto\" [formControl]=\"searchControl\">\r\n <button *ngIf=\"searchControl.value\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearSelection()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\"\r\n [displayWith]=\"displayWith.bind(this)\">\r\n <mat-option *ngIf=\"isLoading\">Loading...</mat-option>\r\n <mat-option *ngIf=\"!isLoading && filteredOptions.length == 0 && !showSerach\" disabled>Not found</mat-option>\r\n <mat-option *ngIf=\"showSerach\" disabled>{{getSearchText()}}</mat-option>\r\n <ng-container *ngIf=\"!isLoading && filteredOptions.length > 0\">\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n <span><b>{{getConcatedFields(option)}}</b></span>\r\n </mat-option>\r\n </ng-container>\r\n\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'rsl-under-construction',\r\n templateUrl: './under-construction.component.html',\r\n styleUrls: ['./under-construction.component.scss']\r\n})\r\nexport class UnderConstructionComponent {\r\n\r\n constructor() { }\r\n}\r\n","<div class=\"forms-view-container\">\n <div class=\"under-construction-view-container\">\n Page under construction\n </div>\n</div>","\r\nexport class BaseQueryData<T> {\r\n constructor(protected jsonApiModels: Array<T>, protected metaData?: any) { }\r\n\r\n public getModels(): T[] {\r\n return this.jsonApiModels;\r\n }\r\n\r\n public getMeta(): any {\r\n return this.metaData;\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { compare } from 'fast-json-patch';\r\nimport * as qs from 'qs';\r\nimport { Observable, Observer, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { DatastoreConfig } from '../interfaces/datastore-config.interface';\r\nimport { ModelConfig } from '../interfaces/model-config.interface';\r\nimport { BaseQueryData } from '../models/base-query-data';\r\nimport { BaseModel } from '../models/base.model';\r\nexport type ModelType<T extends BaseModel> = new (datastore: BaseDatastore, data: any) => T;\r\n\r\n@Injectable()\r\nexport class BaseDatastore {\r\n protected config!: DatastoreConfig;\r\n // tslint:disable-next-line:variable-name\r\n private _store: { [type: string]: { [id: string]: BaseModel } } = {};\r\n // tslint:enable:max-line-length\r\n // tslint:disable-next-line:ban-types\r\n private toQueryString: Function = this.datastoreConfig.overrides\r\n && this.datastoreConfig.overrides.toQueryString ?\r\n this.datastoreConfig.overrides.toQueryString : this._toQueryString;\r\n // tslint:enable:max-line-length\r\n\r\n private get getDirtyAttributes() {\r\n if (this.datastoreConfig.overrides\r\n && this.datastoreConfig.overrides.getDirtyAttributes) {\r\n return this.datastoreConfig.overrides.getDirtyAttributes;\r\n } else {\r\n return BaseDatastore.getDirtyAttributes;\r\n }\r\n }\r\n\r\n public get getAllAttributes() {\r\n if (this.datastoreConfig.overrides\r\n && this.datastoreConfig.overrides.getAllAttributes) {\r\n return this.datastoreConfig.overrides.getAllAttributes;\r\n } else {\r\n return BaseDatastore.getAllAttributes;\r\n }\r\n }\r\n\r\n // protected config: DatastoreConfig;\r\n\r\n private static getDirtyAttributes(attributesMetadata: any): { string: any } {\r\n const dirtyData: any = {};\r\n\r\n for (const propertyName in attributesMetadata) {\r\n if (attributesMetadata.hasOwnProperty(propertyName)) {\r\n const metadata: any = attributesMetadata[propertyName];\r\n\r\n if (metadata.hasDirtyAttributes) {\r\n const attributeName = metadata.serializedName != null ? metadata.serializedName : propertyName;\r\n dirtyData[attributeName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue;\r\n }\r\n }\r\n }\r\n return dirtyData;\r\n }\r\n\r\n private static getAllAttributes(attributesMetadata: any): { string: any } {\r\n const dirtyData: any = {};\r\n\r\n for (const propertyName in attributesMetadata) {\r\n if (attributesMetadata.hasOwnProperty(propertyName)) {\r\n const metadata: any = attributesMetadata[propertyName];\r\n const attributeName = metadata.serializedName != null ? metadata.serializedName : propertyName;\r\n dirtyData[attributeName] = metadata.serialisationValue ? metadata.serialisationValue : metadata.newValue;\r\n }\r\n }\r\n return dirtyData;\r\n }\r\n\r\n constructor(protected httpClient: HttpClient) {\r\n }\r\n\r\n findAll<T extends BaseModel>(\r\n modelType: ModelType<T>,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string\r\n ): Observable<BaseQueryData<T>> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const htmlParams = this.buildParams(params);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n\r\n const response = this.httpClient.get(url,\r\n { headers: customHeadhers, params: htmlParams, withCredentials: true })\r\n .pipe(\r\n map(res => this.extractQueryData(res, modelType)),\r\n catchError(this.handleError)\r\n );\r\n return response;\r\n }\r\n\r\n findRecord<T extends BaseModel>(\r\n modelType: ModelType<T>,\r\n id?: string,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string\r\n ): Observable<T> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n let url: string = this.buildUrl(modelType, customUrl);\r\n if (id) {\r\n url += '/' + id;\r\n }\r\n\r\n const htmlParams = this.buildParams(params, undefined);\r\n return this.httpClient.get(url, { headers: customHeadhers, params: htmlParams, withCredentials: true })\r\n .pipe(map(res => this.entityToModel(res, modelType, undefined)),\r\n catchError(this.handleError)\r\n );\r\n }\r\n getCustom<U, T extends BaseModel>(modelType: ModelType<T>,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customResponseType?: any): Observable<U> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params, undefined);\r\n if (!customResponseType)\r\n customResponseType = 'json';\r\n return this.httpClient.get<U>(url, { headers: customHeadhers, params: htmlParams, withCredentials: true, responseType: customResponseType });\r\n }\r\n\r\n postCustom<U, T extends BaseModel>(modelType: ModelType<T>,\r\n body: any,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string): Observable<U> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params, undefined);\r\n return this.httpClient.post<U>(url, body, { headers: customHeadhers, params: htmlParams, reportProgress: true, withCredentials: true });\r\n }\r\n\r\n patchCustom<U, T extends BaseModel>(modelType: ModelType<T>,\r\n body: any,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string): Observable<U> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params, undefined);\r\n return this.httpClient.patch<U>(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n }\r\n createRecord<T extends BaseModel>(modelType: ModelType<T>, data?: any): T {\r\n return new modelType(this, data);\r\n }\r\n\r\n saveRecord<T extends BaseModel>(\r\n attributesMetadata: any, model: T,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customBody?: any\r\n ): Observable<T> {\r\n const modelType = model.constructor as ModelType<T>;\r\n const modelConfig: ModelConfig = model.modelConfig;\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params);\r\n\r\n let httpCall: Observable<any>;\r\n\r\n const body = customBody || this.modelToEntity(model, attributesMetadata);\r\n\r\n if (model.id) {\r\n // tslint:disable-next-line:max-line-length\r\n httpCall = this.httpClient.patch(url + '/' + model.id, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n } else {\r\n httpCall = this.httpClient.post(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n }\r\n\r\n return httpCall\r\n .pipe(\r\n map(res => {\r\n const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);\r\n return this.entityToModel(data, modelType);\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n patchRecord<T extends BaseModel>(\r\n attributesMetadata: any, model: T,\r\n origModel: T,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string\r\n ): Observable<T> {\r\n const modelType = model.constructor as ModelType<T>;\r\n const modelConfig: ModelConfig = model.modelConfig;\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params);\r\n\r\n let httpCall: Observable<any>;\r\n let origData = { id: '' };\r\n if (origModel)\r\n origData = this.modelToEntity(origModel, origModel.attributeMetadata, true);\r\n const newData = this.modelToEntity(model, attributesMetadata, true);\r\n newData.id = origData.id;\r\n const patch = compare(origData, newData);\r\n if (patch.length > 0) {\r\n httpCall = this.httpClient.patch(url + '/' + model.id, patch, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n\r\n return httpCall\r\n .pipe(\r\n map(res => {\r\n const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);\r\n return this.entityToModel(data, modelType);\r\n }),\r\n catchError(this.handleError)\r\n );\r\n } else {\r\n return new Observable((observer: Observer<T>) => {\r\n observer.next(model);\r\n observer.complete();\r\n });\r\n }\r\n }\r\n // getPatch<T extends BaseModel>(\r\n // model: T,\r\n // origModel: T): any {\r\n\r\n // }\r\n replaceRecord<T extends BaseModel>(\r\n attributesMetadata: any, model: T,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customBody?: any\r\n ): Observable<T> {\r\n const modelType = model.constructor as ModelType<T>;\r\n const modelConfig: ModelConfig = model.modelConfig;\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n const url: string = this.buildUrl(modelType, customUrl);\r\n const htmlParams = this.buildParams(params);\r\n\r\n let httpCall: Observable<any>;\r\n\r\n const body = customBody || this.modelToEntity(model, attributesMetadata, true);\r\n\r\n if (model.id) {\r\n httpCall = this.httpClient.put(url + '/' + model.id, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n } else {\r\n httpCall = this.httpClient.post(url, body, { headers: customHeadhers, params: htmlParams, withCredentials: true });\r\n }\r\n\r\n return httpCall\r\n .pipe(\r\n map(res => {\r\n const data = this.resetMetadataAttributes(res, attributesMetadata, modelType);\r\n return this.entityToModel(data, modelType);\r\n }),\r\n catchError(this.handleError)\r\n );\r\n }\r\n\r\n\r\n deleteRecord<T extends BaseModel>(\r\n modelType: ModelType<T>,\r\n id: string,\r\n headers?: HttpHeaders,\r\n customUrl?: string\r\n ): Observable<{}> {\r\n const customHeadhers: HttpHeaders = this.buildHeaders(headers);\r\n let url: string = this.buildUrl(modelType, customUrl);\r\n if (!url.includes('share')) {\r\n url = url + '/' + id;\r\n }\r\n // const idParam = new HttpParams().set('id', id);\r\n return this.httpClient.delete(url, { headers: customHeadhers, withCredentials: true })\r\n .pipe(catchError(this.handleError));\r\n }\r\n\r\n public buildUrl<T extends BaseModel>(\r\n modelType: ModelType<T>,\r\n customUrl?: string\r\n ): string {\r\n\r\n if (customUrl) {\r\n return customUrl;\r\n }\r\n\r\n const modelConfig: ModelConfig = Reflect.getMetadata('BaseModelConfig', modelType);\r\n\r\n const baseUrl = modelConfig.baseUrl || this.datastoreConfig.baseUrl;\r\n const apiVersion = modelConfig.apiVersion || this.datastoreConfig.apiVersion;\r\n const modelEndpointUrl: string = modelConfig.modelEndpointUrl || modelConfig.type;\r\n\r\n const url: string = [baseUrl, apiVersion, modelEndpointUrl].filter((x) => x).join('/');\r\n\r\n return url;\r\n }\r\n\r\n protected extractQueryData<T extends BaseModel>(\r\n res: any,\r\n modelType: ModelType<T>\r\n ): BaseQueryData<T> {\r\n let result;\r\n const body: any = res;\r\n const models: T[] = [];\r\n\r\n for (const data of body.data) {\r\n const model = this.entityToModel(data, modelType, undefined);\r\n models.push(model);\r\n }\r\n\r\n result = new BaseQueryData(models, this.parseMeta(body, modelType));\r\n return result;\r\n }\r\n\r\n protected deserializeModel<T extends BaseModel>(modelType: ModelType<T>, data: any) {\r\n data = this.transformSerializedNamesToPropertyNames(modelType, data);\r\n return new modelType(this, data);\r\n }\r\n\r\n protected handleError(error: HttpErrorResponse) {\r\n if (error.error instanceof ErrorEvent) {\r\n // A client-side or network error occurred. Handle it accordingly.\r\n // console.error('An error occurred:', error.error.message);\r\n } else {\r\n // The backend returned an unsuccessful response code.\r\n // The response body may contain clues as to what went wrong,\r\n // console.error(\r\n // 'Backend returned code ${error.status}, ' +\r\n // 'body was: ${error.error}');\r\n }\r\n // return an observable with a user-facing error message\r\n return throwError(error);\r\n }\r\n\r\n protected parseMeta(body: any, modelType: ModelType<BaseModel>): any {\r\n const metaModel: any = Reflect.getMetadata('BaseModelConfig', modelType).meta;\r\n return new metaModel(body);\r\n }\r\n\r\n protected resetMetadataAttributes<T extends BaseModel>(res: T, attributesMetadata: any, modelType: ModelType<T>) {\r\n // TODO check why is attributesMetadata from the arguments never used\r\n\r\n for (const propertyName in attributesMetadata) {\r\n if (attributesMetadata.hasOwnProperty(propertyName)) {\r\n const metadata: any = attributesMetadata[propertyName];\r\n\r\n if (metadata.hasDirtyAttributes) {\r\n metadata.hasDirtyAttributes = false;\r\n }\r\n }\r\n }\r\n\r\n if (res) {\r\n res.attributeMetadata = attributesMetadata;\r\n }\r\n return res;\r\n }\r\n\r\n public get datastoreConfig(): DatastoreConfig {\r\n const configFromDecorator: DatastoreConfig = Reflect.getMetadata('BaseDatastoreConfig', this.constructor);\r\n return Object.assign(configFromDecorator, this.config);\r\n }\r\n\r\n protected transformSerializedNamesToPropertyNames<T extends BaseModel>(modelType: ModelType<T>, attributes: any) {\r\n const serializedNameToPropertyName = this.getModelPropertyNames(modelType.prototype);\r\n const properties: any = {};\r\n\r\n Object.keys(serializedNameToPropertyName).forEach((serializedName) => {\r\n if (attributes[serializedName] !== null && attributes[serializedName] !== undefined) {\r\n properties[serializedNameToPropertyName[serializedName]] = attributes[serializedName];\r\n }\r\n });\r\n\r\n return properties;\r\n }\r\n\r\n protected getModelPropertyNames(model: BaseModel) {\r\n return Reflect.getMetadata('AttributeMapping', model);\r\n }\r\n\r\n public buildHeaders(customHeaders?: HttpHeaders): HttpHeaders {\r\n const headers: any = {\r\n Accept: 'application/json-patch+json',\r\n // 'Content-Type': 'application/vnd.api+json',\r\n 'Content-Type': 'application/json-patch+json'\r\n };\r\n if (customHeaders && customHeaders.keys().length) {\r\n // tslint:disable-next-line:variable-name\r\n Object.assign({}, headers, customHeaders.keys().map(header_name => {\r\n headers['' + header_name] = customHeaders.get(header_name);\r\n }));\r\n }\r\n return new HttpHeaders(headers);\r\n }\r\n\r\n public buildParams(params: any, id?: string): HttpParams {\r\n let httpParams = new HttpParams();\r\n if (id) {\r\n httpParams = httpParams.set('id', id);\r\n }\r\n if (params) {\r\n Object.keys(params)\r\n .filter(key => {\r\n const v = params[key];\r\n return (Array.isArray(v) || typeof v === 'string') ?\r\n (v.length > 0) :\r\n (v !== null && v !== undefined);\r\n })\r\n .forEach(key => {\r\n httpParams = httpParams.set(key, params[key]);\r\n });\r\n }\r\n return httpParams;\r\n }\r\n\r\n\r\n protected entityToModel<T extends BaseModel>(\r\n res: any,\r\n modelType: ModelType<T>,\r\n model?: T\r\n ) {\r\n return this.extractRecordDataJson(res, modelType, model);\r\n }\r\n\r\n\r\n private extractRecordDataJson<T extends BaseModel>(\r\n res: Response,\r\n modelType: ModelType<T>,\r\n model?: T\r\n ): T {\r\n const body: any = res;\r\n if (!body) {\r\n throw new Error('no body in response');\r\n }\r\n if (model) {\r\n Object.assign(model, body);\r\n }\r\n const deserializedModel = model || this.deserializeModel(modelType, body.data || body);\r\n return deserializedModel;\r\n }\r\n\r\n public modelToEntity<T extends BaseModel>(\r\n model: T,\r\n attributesMetadata: any,\r\n allAttributes: boolean = false\r\n ): any {\r\n let attributes;\r\n if (allAttributes) {\r\n attributes = this.getAllAttributes(attributesMetadata, model);\r\n } else {\r\n attributes = this.getDirtyAttributes(attributesMetadata, model);\r\n }\r\n // this.getRelationships(model, attributes);\r\n return attributes;\r\n }\r\n private _toQueryString(params: any): string {\r\n return qs.stringify(params, { arrayFormat: 'brackets' });\r\n }\r\n\r\n\r\n}\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseQueryData } from '../models/base-query-data';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { BaseDatastore, ModelType } from './base-datastore.service';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport abstract class BaseService<T extends BaseModel> {\r\n public modelType: ModelType<T>;\r\n constructor(public datastore: BaseDatastore) {\r\n }\r\n setModelType(modelType: ModelType<T>) {\r\n this.modelType = modelType;\r\n }\r\n\r\n get(id?: any, customInclude: string = ''): Observable<T> {\r\n const response = this.datastore.findRecord(this.modelType, id, { customInclude });\r\n return response;\r\n }\r\n\r\n getAll(page: number,\r\n pageSize: number,\r\n sort: string = '',\r\n filters: string = '',\r\n customInclude: string = ''): Observable<BaseQueryData<T>> {\r\n const response = this.datastore.findAll(this.modelType,\r\n {\r\n Page: page,\r\n PageSize: pageSize,\r\n Sorts: sort,\r\n Filters: filters,\r\n customInclude\r\n });\r\n return response;\r\n }\r\n delete(id: any): Observable<{}> {\r\n const response = this.datastore.deleteRecord(this.modelType, id);\r\n return response;\r\n }\r\n getCustom<U>(params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customResponseType?: any): Observable<U> {\r\n return this.datastore.getCustom<U, T>(this.modelType, params, headers, customUrl, customResponseType);\r\n }\r\n postCustom<U>(\r\n body: any,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string): Observable<U> {\r\n return this.datastore.postCustom<U, T>(this.modelType, body, params, headers, customUrl);\r\n }\r\n patchCustom<U>(\r\n body: any,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string): Observable<U> {\r\n return this.datastore.patchCustom<U, T>(this.modelType, body, params, headers, customUrl);\r\n }\r\n // checkIfPropertyUnique(property: string, value: any): Observable<boolean> {\r\n\r\n // }\r\n\r\n save(docTypeOrFormGroup: T | FormGroup, id?: any, origModel?: T): Observable<T> {\r\n if (id == null) {\r\n let fromModel: T;\r\n if (docTypeOrFormGroup instanceof FormGroup) {\r\n fromModel = this.fromFormGroup(docTypeOrFormGroup, id);\r\n } else {\r\n fromModel = docTypeOrFormGroup;\r\n }\r\n const data = this.datastore.createRecord(this.modelType, fromModel);\r\n return data.save();\r\n } else {\r\n return this.patch(docTypeOrFormGroup, origModel, id);\r\n }\r\n }\r\n\r\n patch(docTypeOrFormGroup: T | FormGroup, origModel: T, id?: any): Observable<T> {\r\n let fromModel: T;\r\n if (docTypeOrFormGroup instanceof FormGroup) {\r\n fromModel = this.fromFormGroup(docTypeOrFormGroup, id);\r\n } else {\r\n fromModel = docTypeOrFormGroup;\r\n }\r\n const data = this.datastore.createRecord(this.modelType, fromModel);\r\n return data.patch(origModel);\r\n }\r\n\r\n newModel(data?: any): T {\r\n return new this.modelType(this.datastore, data);\r\n }\r\n\r\n toFormGroup(fb: FormBuilder, fromModel?: T): FormGroup {\r\n if (fromModel === undefined) {\r\n fromModel = this.newModel();\r\n }\r\n return fromModel.getFromGroup(fb);\r\n }\r\n\r\n fromFormGroup(formGroup: FormGroup, id?: any): T {\r\n // const saveModel = this.newModel(formGroup.getRawValue());\r\n // saveModel.id = id ? id : null;\r\n // return saveModel;\r\n const saveModel = this.newModel();\r\n saveModel.getModelFromFormGroup(formGroup)\r\n saveModel.id = id ? id : null; \r\n return saveModel;\r\n }\r\n}","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { from, Observable } from 'rxjs';\r\nimport Swal from 'sweetalert2';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Async modal dialog service\r\n * DialogService makes this app easier to test by faking this service.\r\n * TODO: better modal implementation that doesn't use window.confirm\r\n */\r\n@Injectable()\r\nexport class DialogService {\r\n /**\r\n * Ask user to confirm an action. `message` explains the action and choices.\r\n * Returns observable resolving to `true`=confirm or `false`=cancel\r\n */\r\n constructor() { }\r\n confirm(message?: string, text?: string,\r\n confirmButtonText: string = 'Delete',\r\n cancelButtonText: string = 'Cancel'): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n title: message || 'Are you sure?',\r\n icon: 'warning',\r\n text: text || '',\r\n showCancelButton: true,\r\n confirmButtonText: confirmButtonText,\r\n cancelButtonText: cancelButtonText,\r\n customClass: {\r\n confirmButton: 'btn btn-red btn-fill btn-wd',\r\n cancelButton: 'btn btn-grey btn-fill btn-wd',\r\n },\r\n buttonsStyling: false,\r\n reverseButtons: true\r\n })\r\n\r\n .then((result: any) => {\r\n if (result.value) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showSaveMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n timer: 2000,\r\n showConfirmButton: false,\r\n // customClass: 'overflow-hidden',\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\r\n const confirmation = Swal.fire({\r\n icon: 'success',\r\n title: message,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n\r\n // notification(message?: string, type?: NotificationType, fromPosition?: NotificationFrom, align?: NotificationAlign, timer?: number) {\r\n\r\n // if (!type) {\r\n // type = NotificationType.success;\r\n // }\r\n // if (!fromPosition) {\r\n // fromPosition = NotificationFrom.bottom;\r\n // }\r\n // if (!align) {\r\n // align = NotificationAlign.center;\r\n // }\r\n // if (!timer) {\r\n // timer = 3000;\r\n // }\r\n\r\n // $.notify({\r\n // icon: 'notifications',\r\n // message: message\r\n // }, {\r\n // type: type,\r\n // timer: 3000,\r\n // placement: {\r\n // from: from,\r\n // align: align\r\n // }\r\n // });\r\n // }\r\n showErrorMessage(e: any, message?: string): Observable<boolean> {\r\n if (!message) {\r\n message = 'Validation errors';\r\n }\r\n if (e instanceof HttpErrorResponse) {\r\n // Validation errors\r\n if (e.status === 400) {\r\n const errors = e.error.errors;\r\n if (errors) {\r\n errors.forEach(error => {\r\n message += error.field + ' ' + error.detail + '\\n';\r\n });\r\n // message = errors.detail;\r\n // if (detail.relationships) {\r\n // detail.relationships.forEach(relation => {\r\n // console.log(relation);\r\n // });\r\n // }\r\n }\r\n }\r\n }\r\n const confirmation = Swal.fire({\r\n icon: 'error',\r\n title: message,\r\n // timer: 2000,\r\n showConfirmButton: true,\r\n customClass: {\r\n confirmButton: 'btn btn-success',\r\n },\r\n buttonsStyling: false\r\n }).then(() => {\r\n return true;\r\n }, () => {\r\n return false;\r\n }).catch();\r\n return from(confirmation);\r\n }\r\n getTextTranslation(translationKey: string) {\r\n // // const result = await promise;\r\n // // return result;\r\n // const result = this.translate.instant(translationKey);\r\n // if (result === translationKey) {\r\n return translationKey;\r\n // }\r\n // return result;\r\n }\r\n}\r\n\r\n","import { Location } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BlockUI, NgBlockUI } from 'ng-block-ui';\r\nimport { Observable } from 'rxjs';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { BaseService } from '../services/base.service';\r\nimport { DialogService } from '../services/dialog.service';\r\n@Component({\r\n selector: 'app-base.form.edit',\r\n template: ''\r\n})\r\nexport abstract class BaseFormEditComponent<T extends BaseModel> implements OnInit {\r\n @BlockUI() blockUI: NgBlockUI;\r\n baseForm: FormGroup;\r\n modelId: string;\r\n model: T;\r\n isEdit: boolean;\r\n isLoading = true;\r\n cancelRoute: string;\r\n editRoute: string;\r\n public changeUrlRoute: boolean = true;\r\n constructor(\r\n protected fb: FormBuilder,\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected modelService: BaseService<T>,\r\n protected dialogService: DialogService,\r\n protected translate: TranslateService,\r\n protected location: Location\r\n ) {\r\n this.generateForm(this.modelService.newModel());\r\n }\r\n\r\n public afterSave(model: T): Observable<T> {\r\n return new Observable((observer) => {\r\n observer.next(model);\r\n observer.complete();\r\n });\r\n }\r\n\r\n public beforeSave(model: T): Observable<T> {\r\n return new Observable((observer) => {\r\n observer.next(model);\r\n observer.complete();\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.initForm();\r\n }\r\n initForm(customInclude: string = '', newModelId: string = null, model: T = null) {\r\n if (model === null) {\r\n this.modelId = this.route.snapshot.paramMap.get('id') ?? newModelId;\r\n this.isEdit = false;\r\n if (this.modelId) {\r\n this.modelService.get(this.modelId, customInclude).subscribe((value: T) => {\r\n this.isEdit = true;\r\n this.generateForm(value)\r\n }\r\n );\r\n } else {\r\n if (this.changeUrlRoute) {\r\n const addUrl = this.router.createUrlTree([]).toString();\r\n this.editRoute = this.router.createUrlTree([addUrl.replace('add', 'edit')]).toString();\r\n }\r\n // }\r\n this.generateForm(this.modelService.newModel());\r\n }\r\n } else {\r\n this.modelId = model.id;\r\n this.isEdit = true;\r\n this.generateForm(model)\r\n }\r\n }\r\n generateForm(model?: T) {\r\n this.isLoading = false;\r\n this.modelId = model.id;\r\n this.model = model;\r\n this.baseForm = this.modelService.toFormGroup(this.fb, model);\r\n this.afterFormGenerated();\r\n }\r\n public afterFormGenerated() {\r\n\r\n }\r\n private getFromGroup(formGroup: FormGroup | string = null): FormGroup {\r\n if (!formGroup)\r\n return this.baseForm;\r\n if (formGroup instanceof FormGroup)\r\n return formGroup;\r\n return this.baseForm.controls[formGroup] as FormGroup;\r\n }\r\n validateAllFormFields(formGroup: FormGroup | string = null) {\r\n const fg = this.getFromGroup(formGroup)\r\n Object.keys(fg.controls).forEach(field => {\r\n // console.log(field);\r\n const control = fg.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsTouched({ onlySelf: true });\r\n } else if (control instanceof FormGroup) {\r\n this.validateAllFormFields(control);\r\n }\r\n });\r\n }\r\n isFieldValid(field: string, formGroup: FormGroup | string = null) {\r\n const fg = this.getFromGroup(formGroup)\r\n const filedControl = fg.get(field)\r\n return !filedControl.valid && filedControl.touched;\r\n }\r\n\r\n isFieldValidFromArray(arrayIndex: number, field: string, arrayName: string = 'formArray') {\r\n const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field)\r\n return !fieldControl.valid && fieldControl.touched;\r\n }\r\n\r\n displayFieldCss(field: string) {\r\n return {\r\n 'has-error': this.isFieldValid(field),\r\n 'has-feedback': this.isFieldValid(field)\r\n };\r\n }\r\n onCancel() {\r\n this.router.navigate([this.cancelRoute]);\r\n }\r\n onSave() {\r\n this.saveModel(this.baseForm)\r\n }\r\n saveModel(formGroup: FormGroup | string = null) {\r\n const fg = this.getFromGroup(formGroup)\r\n const that = this;\r\n if (fg) {\r\n if (fg.valid) {\r\n that.blockUI.start('Saving ...');\r\n this.beforeSave(this.model).subscribe(_ => {\r\n this.modelService.save(this.baseForm, this.modelId, this.model).subscribe(\r\n (newModel: T) => {\r\n this.model = newModel;\r\n this.modelId = newModel.id;\r\n if (this.editRoute) {\r\n this.isEdit = true;\r\n if (this.changeUrlRoute) {\r\n const url = this.router.createUrlTree([this.editRoute, this.modelId]).toString();\r\n this.location.replaceState(url);\r\n }\r\n }\r\n this.afterSave(newModel).subscribe((val: T) => {\r\n this.blockUI.stop();\r\n this.dialogService.showSaveMessage('Your changes were saved successfully.').subscribe(d => {\r\n fg.markAsPristine();\r\n });\r\n });\r\n },\r\n err => {\r\n this.serverErrors(err)\r\n this.blockUI.stop();\r\n });\r\n });\r\n } else {\r\n this.validateAllFormFields(formGroup);\r\n }\r\n }\r\n }\r\n serverErrors(err: any) {\r\n if (err.error) {\r\n if (err.error.errors) {\r\n const validationErrors = err.error.errors;\r\n if (Array.isArray(validationErrors)) {\r\n validationErrors.forEach(prop => {\r\n const formControl = this.baseForm.get(prop);\r\n if (formControl) {\r\n // activate the error message\r\n formControl.setErrors({\r\n serverError: validationErrors[prop].join('\\n')\r\n });\r\n }\r\n });\r\n } else {\r\n const keys = Object.keys(validationErrors);\r\n keys.forEach(prop => {\r\n const formControl = this.baseForm.get(prop);\r\n if (formControl) {\r\n // activate the error message\r\n formControl.setErrors({\r\n serverError: validationErrors[prop].join('\\n')\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n canDeactivate(): Observable<boolean> | boolean {\r\n // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged\r\n if (!this.baseForm.dirty) {\r\n return true;\r\n }\r\n // Otherwise ask the user with the dialog service and return its\r\n // observable which resolves to true or false when the user decides\r\n return this.dialogService.confirm('Discard changes ?', null, 'Discard');\r\n }\r\n getFiledName(filedTranslationKey: string) {\r\n return { field: this.translate.instant(filedTranslationKey) };\r\n }\r\n getCustomErrorMessage(error: any, fieldLabel: string): string {\r\n return '';\r\n }\r\n getErrorMessageFromArray(arrayIndex: number, field: string, filedTranslationKey: string, arrayName: string = 'formArray'): string {\r\n const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field)\r\n return this.getErrorMessageForField(fieldControl, filedTranslationKey)\r\n }\r\n getErrorMessage(field: string, filedTranslationKey: string, formGroup: FormGroup | string = null): string {\r\n const fg = this.getFromGroup(formGroup)\r\n return this.getErrorMessageForField(fg.get(field), filedTranslationKey)\r\n }\r\n getErrorMessageForField(fieldControl: any, filedTranslationKey: string): string {\r\n const error = fieldControl.errors;\r\n const fieldLabel = this.translate.instant(filedTranslationKey);\r\n let rvalue = '';\r\n if (error !== null) {\r\n if (error['required'] === true) {\r\n rvalue = this.translate.instant('General.Field.Required', { field: fieldLabel });\r\n }\r\n if (error['minlength']) {\r\n rvalue = this.translate.instant('General.Field.MinLength', { field: fieldLabel, requiredLength: error.minlength.requiredLength });\r\n }\r\n if (error['email'] === true) {\r\n rvalue = this.translate.instant('General.Field.InvalidEmail');\r\n }\r\n if (error['url'] === true) {\r\n rvalue = this.translate.instant('General.Field.InvalidUrl');\r\n }\r\n if (error['serverError']) {\r\n rvalue = error['serverError'];\r\n }\r\n if (rvalue === '') {\r\n rvalue = this.getCustomErrorMessage(error, fieldLabel);\r\n }\r\n }\r\n return rvalue;\r\n }\r\n}\r\n","export enum GridLayoutFormat {\r\n none,\r\n date,\r\n number,\r\n percent,\r\n picture\r\n}\r\n\r\nexport enum CellTextAlign {\r\n left = 'left',\r\n center = 'center',\r\n right = 'right',\r\n}","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DatePipe, DecimalPipe, PercentPipe } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { Router } from '@angular/router';\r\nimport * as jsonLogic from 'json-logic-js/logic.js';\r\nimport { fromEvent, merge, Observable, of, Subject, Subscription } from 'rxjs';\r\nimport { catchError, debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { BaseQueryData } from '../../models/base-query-data';\r\nimport { BaseModel } from '../../models/base.model';\r\nimport { GridLayoutModel } from '../../models/grid-layout';\r\nimport { CellTextAlign, GridLayoutFormat } from '../../models/grid-layout-format.enum';\r\nimport { Rule } from '../../models/rule';\r\nimport { BaseService } from '../../services/base.service';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { GridLayoutService } from '../../services/grid-layout.service';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n selector: 'rsl-generic-table',\r\n templateUrl: './generic-table.component.html',\r\n styleUrls: ['./generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GenericTableComponent<T extends BaseModel> implements OnInit, OnChanges, AfterViewInit {\r\n // displayedColumns = ['code']; //, 'name', 'cif', 'city', 'address', 'state', 'priceListName', 'delete'];\r\n @Input() modelType: new (...args: any[]) => T;\r\n @Input() baseService: BaseService<T>;\r\n @Input() gridLayoutService?: GridLayoutService<T>;\r\n @Input() editLink: string;\r\n @Input() defaultSort: string = null;\r\n @Input() defaultSortDirection: SortDirection = null;\r\n @Input() deleteDisableRule: Rule[];\r\n @Input() deletePropertyName: string = 'name';\r\n @Input() hasSearch: boolean;\r\n @Input() searchFields: string;\r\n @Input() defaultFilter: string;\r\n @Input() allowReorderItems: boolean;\r\n @Input() stickyColumns: string = null;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n @Input() allowEdit: boolean = true;\r\n @Input() popupEdit: boolean = false;\r\n @Input() customInclude: string = null;\r\n @Input() changeItemPosition: (prevItem: T, currentItem: T) => boolean;\r\n @Input() infiniteScroll: boolean = false;\r\n dataSource: MatTableDataSource<T> = new MatTableDataSource();\r\n resultsLength = 0;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n filterValue: string;\r\n private filterChanged: Subject<string> = new Subject<string>();\r\n private filterChangedSubscription: Subscription\r\n\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n @ViewChild('table') table: MatTable<any>;\r\n @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n resizeSubscription: any;\r\n\r\n selectedItem: T;\r\n gridLayout: GridLayoutModel[];\r\n @Output() selectedObject: EventEmitter<T> = new EventEmitter<T>();\r\n @Output() click: EventEmitter<{ propertyName: string, model: T }> = new EventEmitter<{ propertyName: string, model: T }>();\r\n @Output() editModel: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n displayedColumns: string[];\r\n // ruleEngineService: RuleEngineService<T>;\r\n constructor(\r\n public dialogService: DialogService,\r\n public router: Router,\r\n private datePipe: DatePipe,\r\n private numberPipe: DecimalPipe,\r\n private percentPipe: PercentPipe,\r\n private renderer: Renderer2\r\n ) {\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.baseService !== undefined || this.baseService !== null) {\r\n if (this.gridLayoutService != null) {\r\n this.gridLayout = this.gridLayoutService.getGridLayout();\r\n }\r\n else {\r\n const model = this.baseService.newModel();\r\n this.gridLayout = model.getGridLayout();\r\n }\r\n this.displayedColumns = [];\r\n if (this.allowReorderItems) {\r\n this.displayedColumns.push('position')\r\n }\r\n this.displayedColumns.push.apply(this.displayedColumns, this.gridLayout.map(x => x.propertyName));\r\n if (!this.editOnClick && !this.editOnDblClick && this.allowEdit) {\r\n this.displayedColumns.push('delete');\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.filterChangedSubscription = this.filterChanged\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged()\r\n )\r\n .subscribe(newText => {\r\n if (newText.length >= 3 || newText.length == 0) {\r\n this.filterValue = newText;\r\n\r\n this.paginator.pageIndex = 0;\r\n this.refreshForm();\r\n }\r\n });\r\n // this.getGridLayout();\r\n this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);\r\n this.paginator.pageSize = 15;\r\n if (this.defaultSort) {\r\n this.sort.active = this.defaultSort;\r\n if (this.defaultSortDirection) {\r\n this.sort.direction = this.defaultSortDirection;\r\n } else {\r\n this.sort.direction = 'asc';\r\n }\r\n }\r\n\r\n // this.dataSource.paginator = this.paginator;\r\n merge(this.sort.sortChange, this.paginator.page)\r\n .pipe(\r\n startWith({}),\r\n switchMap(() => {\r\n this.isLoadingResults = true;\r\n return this.getData();\r\n }),\r\n map(data => {\r\n // Flip flag to show that loading has finished.\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n if (data) {\r\n this.resultsLength = data.getMeta().meta.count;\r\n return data.getModels();\r\n } else {\r\n this.resultsLength = 0;\r\n return [];\r\n }\r\n }),\r\n catchError(() => {\r\n this.isLoadingResults = false;\r\n // Catch if the GitHub API has reached its rate limit. Return empty data.\r\n this.isRateLimitReached = true;\r\n return of([]);\r\n })\r\n ).subscribe(data => {\r\n // if (this.infiniteScroll) {\r\n // let oldData = this.dataSource.data ?? null;\r\n // // if (oldData.length === 0) {\r\n // // oldData = data;\r\n // // } else {\r\n // oldData=oldData.concat(data);\r\n // // }\r\n // this.dataSource.data = oldData;\r\n // }\r\n // else {\r\n this.dataSource.data = data;\r\n // }\r\n });\r\n // this.paginator.nextPage()\r\n }\r\n getData(): Observable<BaseQueryData<T>> {\r\n this.isLoadingResults = true;\r\n const pageIndex = (this.paginator.pageIndex || 0) + 1;\r\n const pageSize = this.paginator.pageSize || 20;\r\n const filters = [];\r\n\r\n let sorts = '';\r\n if (this.sort.active) {\r\n if (this.sort.direction === 'desc') {\r\n sorts = '-' + this.sort.active;\r\n } else {\r\n sorts = this.sort.active;\r\n }\r\n }\r\n if (this.hasSearch) {\r\n if (this.filterValue) {\r\n // const filtersArr = this.searchFields.split(\",\");\r\n // filtersArr.forEach(element => {\r\n // filters.push(element + '@=*' + this.filterValue);\r\n // });\r\n const y = '(' + this.searchFields.replace(',', '|') + ')';\r\n filters.push(y + '@=*' + this.filterValue);\r\n }\r\n }\r\n if (this.defaultFilter) {\r\n filters.push(this.defaultFilter);\r\n }\r\n const filtersValue = filters.join(', ');\r\n return this.baseService.getAll(pageIndex, pageSize, sorts, filtersValue, this.customInclude);\r\n }\r\n\r\n refreshForm() {\r\n this.getData().subscribe(data => {\r\n if (data) {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = data.getMeta().meta.count;\r\n this.dataSource.data = data.getModels();\r\n } else {\r\n this.isLoadingResults = false;\r\n this.isRateLimitReached = false;\r\n this.resultsLength = 0;\r\n this.dataSource.data = [];\r\n }\r\n });\r\n }\r\n\r\n\r\n highlight(element: any) {\r\n if (this.selectedItem) {\r\n this.selectedItem.highlighted = element.highlighted;\r\n }\r\n this.selectedItem = null;\r\n element.highlighted = !element.highlighted;\r\n if (element.highlighted) {\r\n this.selectedItem = element;\r\n this.selectedObject.emit(element);\r\n } else {\r\n this.selectedObject.emit(null);\r\n }\r\n }\r\n deleteObject(model: T) {\r\n const msg = 'Do you want to delete ' + model[this.deletePropertyName] + '?';\r\n this.dialogService.confirm(msg).subscribe((response: boolean) => {\r\n if (response) {\r\n this.baseService.delete(model.id).subscribe(() => {\r\n const tempData = [];\r\n this.selectedObject.emit(null);\r\n this.dataSource.data.map((item) => {\r\n if (item.id !== model.id) {\r\n tempData.push(item);\r\n }\r\n });\r\n this.dataSource.data = tempData;\r\n });\r\n }\r\n });\r\n }\r\n editObject(model: T) {\r\n if (!this.popupEdit) {\r\n const id = model.id;\r\n this.router.navigate([this.editLink, id]);\r\n } else {\r\n this.editModel.emit(model);\r\n }\r\n }\r\n getFlexStyle(column: GridLayoutModel) {\r\n if (column.width) {\r\n const style = column.grow + ' ' + column.shrink + ' ' + column.width + 'px';\r\n return style;\r\n }\r\n return null;\r\n }\r\n\r\n getCellTextAlign(column: GridLayoutModel) {\r\n return column.textAlign ?? CellTextAlign.left;\r\n }\r\n\r\n showPictureCell(column: GridLayoutModel): boolean {\r\n return (column?.formating ?? GridLayoutFormat.none)===GridLayoutFormat.picture;\r\n }\r\n\r\n deleteDisabled(model: T) {\r\n if (this.deleteDisableRule) {\r\n return this.evaluateRule(this.deleteDisableRule, model);\r\n } else {\r\n return false;\r\n }\r\n }\r\n cellClick(model: T, propertyName: string) {\r\n this.click.emit({ propertyName, model });\r\n }\r\n\r\n private evaluateRule(rules: Rule[], model: T): boolean {\r\n let result = true;\r\n rules.forEach(rule => {\r\n let jsonRule: any;\r\n if (typeof rule.rule === 'string') {\r\n jsonRule = JSON.parse(rule.rule);\r\n } else {\r\n jsonRule = rule.rule;\r\n }\r\n if (rule.parameters) {\r\n const data = '{' + rule.parameters.map((item: string) => {\r\n return '\"' + item + '\":\"' + model[item] + '\"';\r\n }).join(',') + '}';\r\n result = jsonLogic.apply(jsonRule, JSON.parse(data));\r\n } else {\r\n result = jsonLogic.apply(jsonRule);\r\n }\r\n });\r\n return result;\r\n }\r\n getCelValue(row: any, propertyName: string): any {\r\n if (!row)\r\n return \"\";\r\n // if (propertyName == 'kompetenzenStdev')\r\n // console.log(propertyName);\r\n if (propertyName.indexOf('.') === -1) {\r\n var gridLayout = this.gridLayout.find(f => f.propertyName.indexOf(propertyName) > -1);\r\n return this.getFormatedValue(gridLayout, row[propertyName]);\r\n } else {\r\n const prop = propertyName.split('.')[0];\r\n const subProp = propertyName.replace(prop + '.', '');\r\n return this.getCelValue(row[prop], subProp);\r\n }\r\n }\r\n private getFormatedValue(gridLayout: GridLayoutModel, value: any) {\r\n\r\n if (gridLayout) {\r\n switch (gridLayout.formating) {\r\n case GridLayoutFormat.date:\r\n return this.datePipe.transform(value, gridLayout.format);\r\n break;\r\n case GridLayoutFormat.number:\r\n return this.numberPipe.transform(value, gridLayout.format);\r\n case GridLayoutFormat.percent:\r\n const valuePrc = value / 100;\r\n return this.percentPipe.transform(valuePrc, gridLayout.format);\r\n default:\r\n return value;\r\n break;\r\n }\r\n }\r\n return value;\r\n }\r\n applyFilter(event: Event) {\r\n }\r\n dropTable(event: CdkDragDrop<any>) {\r\n if (this.changeItemPosition) {\r\n const prevItem = this.dataSource.data[event.previousIndex];\r\n const currentItem = this.dataSource.data[event.currentIndex];\r\n\r\n if (this.changeItemPosition(prevItem, currentItem)) {\r\n const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);\r\n moveItemInArray(this.dataSource.data, prevIndex, event.currentIndex);\r\n this.table.renderRows();\r\n }\r\n }\r\n }\r\n isColumnSticky(name: string): boolean {\r\n if (this.stickyColumns) {\r\n const filtersArr = this.stickyColumns.split(\",\");\r\n return filtersArr.findIndex(f => f == name) !== -1;\r\n }\r\n return false;\r\n }\r\n updateElement(model: T) {\r\n //Find if element exist\r\n var currentElement = this.dataSource.data.find(f => f.id === model.id);\r\n if (currentElement !== null) {\r\n const index = this.dataSource.data.indexOf(currentElement);\r\n this.dataSource.data[index] = model;\r\n } else {\r\n this.dataSource.data.push(model);\r\n }\r\n const newData = [...this.dataSource.data];\r\n this.dataSource.data = newData;\r\n this.dataSource._updateChangeSubscription();\r\n }\r\n public ngAfterViewInit(): void {\r\n fromEvent(this.matTableRef.nativeElement, 'scroll')\r\n .pipe(debounceTime(700))\r\n .subscribe((e: any) => this.onTableScroll(e));\r\n }\r\n onTableScroll(e) {\r\n const tableViewHeight = e.target.offsetHeight // viewport: ~500px\r\n const tableScrollHeight = e.target.scrollHeight // length of all table\r\n const scrollLocation = e.target.scrollTop; // how far user scrolled\r\n\r\n // If the user has scrolled within 200px of the bottom, add more data\r\n const scrollThreshold = 200;\r\n\r\n const scrollUpLimit = scrollThreshold;\r\n if (scrollLocation < scrollUpLimit && this.paginator.pageIndex > 0) {\r\n // this.firstPage--;\r\n console.log(`onTableScroll() UP: firstPage decreased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n // this.fetchData();\r\n\r\n this.scrollTo(tableScrollHeight / 2 - 2 * tableViewHeight);\r\n }\r\n\r\n const scrollDownLimit = tableScrollHeight - tableViewHeight - scrollThreshold;\r\n if (scrollLocation > scrollDownLimit && this.paginator.pageIndex < this.paginator.getNumberOfPages()) {\r\n // this.firstPage++;\r\n console.log(`onTableScroll(): firstPage increased to ${this.paginator.pageIndex}. Now fetching data...`);\r\n this.paginator.nextPage();\r\n // this.scrollTo(tableScrollHeight / 2 + tableViewHeight);\r\n }\r\n }\r\n private scrollTo(position: number): void {\r\n this.renderer.setProperty(this.matTableRef.nativeElement, 'scrollTop', position);\r\n }\r\n getCellClass(model: T, property: string) {\r\n return model.getCellClass(property);\r\n }\r\n}\r\n","<div class=\"containerX\" *ngIf=\"hasSearch\">\r\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayout.sm=\"column\" fxFlexFill>\r\n <mat-form-field fxFlex>\r\n <mat-label>Filter</mat-label>\r\n <input matInput [ngModel]='filterValue' (ngModelChange)='filterChanged.next($event)' #filter>\r\n </mat-form-field>\r\n </div>\r\n</div>\r\n\r\n<div class=\"table-container\">\r\n <div class=\"mat-elevation-z2\">\r\n <!-- #applicationsContainer -->\r\n <div class=\"example-loading-shade\" *ngIf=\"isLoadingResults || isRateLimitReached\">\r\n <mat-spinner *ngIf=\"isLoadingResults\"></mat-spinner>\r\n <div class=\"example-rate-limit-reached\" *ngIf=\"isRateLimitReached\">\r\n {{'General.LoadingData' | translate}}\r\n </div>\r\n </div>\r\n\r\n\r\n <mat-table fxFlex #table [dataSource]=\"dataSource\" id=\"tempalte-forms-table\" matSort matSortDisableClear\r\n matSortDirection=\"asc\" cdkDropList [cdkDropListData]=\"dataSource\" (cdkDropListDropped)=\"dropTable($event)\">\r\n <!-- (scroll)=\"onTableScroll($event)\" -->\r\n\r\n\r\n <ng-container matColumnDef=\"position\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n <!-- {{'General.Order' | translate}} -->\r\n </mat-header-cell>\r\n <mat-cell fxFlex *matCellDef=\"let element;\">\r\n <mat-icon cdkDragHandle>reorder</mat-icon>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngFor=\"let column of gridLayout\" [matColumnDef]=\"column.propertyName\"\r\n [sticky]=\"isColumnSticky(column.propertyName)\">\r\n <mat-header-cell mat-sort-header disableClear [style.flex]=\"getFlexStyle(column)\" *matHeaderCellDef>\r\n {{column.translateKey | translate}}\r\n </mat-header-cell>\r\n <mat-cell matTooltip={{getCelValue(row,column.propertyName)}} [style.flex]=\"getFlexStyle(column)\"\r\n [style.text-align]=\"getCellTextAlign(column)\" *matCellDef=\"let row\" (click)=\"cellClick(row,column.propertyName)\">\r\n <div [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"!showPictureCell(column)\">\r\n {{getCelValue(row,column.propertyName)}}\r\n </div>\r\n <img [ngClass]=\"getCellClass(row,column.propertyName)\" *ngIf=\"showPictureCell(column)\">\r\n </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"delete\" stickyEnd *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-header-cell *matHeaderCellDef disableClear=\"true\">\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n <button class=\"btn btn-green btn-fill btn-wd btn-just-icon\" (click)=\"editObject(row)\"\r\n matTooltip=\"{{'General.Edit' | translate}}\">\r\n <!-- <mat-icon>edit</mat-icon> -->\r\n <i class=\"material-icons\">edit</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n <button class=\"btn btn-red btn-fill btn-wd btn-just-icon\" (click)=\"deleteObject(row)\"\r\n [disabled]=\"deleteDisabled(row)\" matTooltip=\"{{'General.Delete' | translate}}\">\r\n <i class=\"material-icons\">delete</i>\r\n <div class=\"ripple-container\"></div>\r\n </button>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns;sticky: true\"></mat-header-row>\r\n\r\n <ng-container *ngIf=\"!editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"highlight(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\">\r\n </mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"editOnClick && !editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (click)=\"editObject(row)\"\r\n (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!editOnClick && editOnDblClick\">\r\n <mat-row *matRowDef=\"let row;let index = dataIndex; columns: displayedColumns;\" cdkDrag [cdkDragData]=\"row\"\r\n [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\" (dblclick)=\"editObject(row)\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\"\r\n style=\"cursor: pointer;\"></mat-row>\r\n </ng-container>\r\n\r\n <!-- [ngClass]=\"{hovered: row.hovered, highlighted: row.highlighted}\"\r\n (click)=\"highlight(row)\" (mouseover)=\"row.hovered = true\" (mouseout)=\"row.hovered = false\" -->\r\n </mat-table>\r\n <mat-paginator #paginator [hidden]=\"infiniteScroll\" [length]=\"resultsLength\" [pageSize]=\"15\"\r\n [pageSizeOptions]=\"[15, 30, 100]\" [showFirstLastButtons]=\"true\">\r\n </mat-paginator>\r\n </div>\r\n</div>","// tslint:disable-next-line:variable-name\nexport const AttributeMetadata: any = Symbol('AttributeMetadata');\n","import { format, parse, parseISO } from 'date-fns';\r\nimport { PropertyConverter } from '../../interfaces/property-converter.interface';\r\n\r\nexport class DateConverter implements PropertyConverter {\r\n mask(value: any) {\r\n const d = parseISO(value);\r\n return d;\r\n }\r\n unmask(value: any) {\r\n // const result = format(value, 'YYYY-MM-DDTHH:mm:ssZ');\r\n return value;\r\n }\r\n}\r\n","import { } from 'reflect-metadata';\r\nimport { AttributeMetadata } from '../constants/symbols';\r\nimport { DateConverter } from '../converters/date/date.converter';\r\nimport { AttributeDecoratorOptions } from '../interfaces/attribute-decorator-options.interface';\r\n\r\nexport function Attribute(options: AttributeDecoratorOptions = {}): PropertyDecorator {\r\n return (target: any, propertyName: string) => {\r\n\r\n const converter = (dataType: any, value: any, forSerialisation = false): any => {\r\n let attrConverter;\r\n if (dataType) {\r\n if (options.converter) {\r\n attrConverter = options.converter;\r\n } else if (dataType === Date) {\r\n attrConverter = new DateConverter();\r\n } else {\r\n const datatype = new dataType();\r\n\r\n if (datatype.mask && datatype.unmask) {\r\n attrConverter = datatype;\r\n }\r\n }\r\n\r\n if (attrConverter) {\r\n if (!forSerialisation) {\r\n return attrConverter.mask(value);\r\n }\r\n return attrConverter.unmask(value);\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n const saveAnnotations = () => {\r\n const metadata = Reflect.getMetadata('Attribute', target) || {};\r\n\r\n metadata[propertyName] = {\r\n marked: true\r\n };\r\n\r\n Reflect.defineMetadata('Attribute', metadata, target);\r\n\r\n const mappingMetadata = Reflect.getMetadata('AttributeMapping', target) || {};\r\n const serializedPropertyName = options.serializedName !== undefined ? options.serializedName : propertyName;\r\n mappingMetadata[serializedPropertyName] = propertyName;\r\n Reflect.defineMetadata('AttributeMapping', mappingMetadata, target);\r\n\r\n const requiredMetadata = Reflect.getMetadata('AttributeRequired', target) || {};\r\n requiredMetadata[serializedPropertyName] = options.required !== undefined ? options.required : false;\r\n Reflect.defineMetadata('AttributeRequired', requiredMetadata, target);\r\n\r\n const defaultMetadata = Reflect.getMetadata('AttributedefaultValue', target) || {};\r\n defaultMetadata[serializedPropertyName] = options.defaultValue !== undefined ? options.defaultValue : null;\r\n Reflect.defineMetadata('AttributedefaultValue', defaultMetadata, target);\r\n\r\n const formSubGroupMetadata = Reflect.getMetadata('AttributeformSubGroup', target) || {};\r\n formSubGroupMetadata[serializedPropertyName] = options.formSubGroup !== undefined ? options.formSubGroup : null;\r\n Reflect.defineMetadata('AttributeformSubGroup', formSubGroupMetadata, target);\r\n\r\n };\r\n\r\n const setMetadata = (\r\n hasDirtyAttributes: boolean,\r\n instance: any,\r\n oldValue: any,\r\n newValue: any,\r\n isNew: boolean\r\n ) => {\r\n const targetType = Reflect.getMetadata('design:type', target, propertyName);\r\n\r\n if (!instance[AttributeMetadata]) {\r\n instance[AttributeMetadata] = {};\r\n }\r\n\r\n const propertyHasDirtyAttributes = typeof oldValue === 'undefined' && !isNew ? false : hasDirtyAttributes;\r\n\r\n instance[AttributeMetadata][propertyName] = {\r\n newValue,\r\n oldValue,\r\n serializedName: options.serializedName,\r\n hasDirtyAttributes: propertyHasDirtyAttributes,\r\n serialisationValue: converter(targetType, newValue, true)\r\n };\r\n };\r\n\r\n const getter = function () {\r\n return this['_' + (propertyName as string)];\r\n };\r\n\r\n const setter = function (newVal: any) {\r\n const targetType = Reflect.getMetadata('design:type', target, propertyName);\r\n const convertedValue = converter(targetType, newVal);\r\n\r\n if (convertedValue !== this['_' + (propertyName as string)]) {\r\n setMetadata(true, this, this['_' + (propertyName as string)], newVal, !this.id);\r\n this['_' + (propertyName as string)] = convertedValue;\r\n }\r\n };\r\n\r\n if (delete target[propertyName]) {\r\n saveAnnotations();\r\n Object.defineProperty(target, propertyName, {\r\n get: getter,\r\n set: setter,\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n };\r\n}\r\n","export function BaseDatastoreConfig(config: any = {}) {\r\n // tslint:disable-next-line:only-arrow-functions\r\n return (target: any) => {\r\n Reflect.defineMetadata('BaseDatastoreConfig', config, target);\r\n };\r\n}\r\n","export class BaseMetaModel {\r\n public links: Array<any>;\r\n public meta: any;\r\n\r\n constructor(response: any) {\r\n this.links = response.links || [];\r\n this.meta = response.meta;\r\n }\r\n}\r\n","import { BaseMetaModel } from '../models/base-meta.model';\r\n\r\nexport function BaseModelConfig(config: any = {}) {\r\n return (target: any) => {\r\n if (typeof config['meta'] === 'undefined' || config['meta'] == null) {\r\n config['meta'] = BaseMetaModel;\r\n }\r\n\r\n Reflect.defineMetadata('BaseModelConfig', config, target);\r\n };\r\n}\r\n","export function CustomType(config: any = {}) {\r\n return (target: any, propertyName: string | symbol) => {\r\n const annotations = Reflect.getMetadata('CustomType', target) || [];\r\n\r\n annotations.push({\r\n propertyName,\r\n relationship: config.key || propertyName\r\n });\r\n\r\n Reflect.defineMetadata('CustomType', annotations, target);\r\n };\r\n}\r\n","import { CellTextAlign, GridLayoutFormat } from '../models/grid-layout-format.enum';\r\n\r\nexport function GridLayout(translateKey: string, width?: number | null,\r\n grow: 0 | 1 = 0, shrink: 0 | 1 = 0, subProperty?: string | null,\r\n formating: GridLayoutFormat = GridLayoutFormat.none,\r\n format: string = '', order: number = 0, textAlign: CellTextAlign = CellTextAlign.left) {\r\n return (target: any, propertyName: string | symbol) => {\r\n const annotations = Reflect.getMetadata('GridLayout', target) || [];\r\n let propName = propertyName\r\n if (subProperty) {\r\n propName = propertyName.toString() + '.' + subProperty;\r\n }\r\n annotations.push({\r\n propertyName: propName,\r\n translateKey,\r\n width,\r\n grow,\r\n shrink,\r\n formating,\r\n format,\r\n order,\r\n textAlign\r\n });\r\n\r\n Reflect.defineMetadata('GridLayout', annotations, target);\r\n };\r\n}\r\n","\r\nimport { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[translatedElement]',\r\n})\r\nexport class TranslatedElementDirective {\r\n\r\n @Input('translatedElement')\r\n public elementKey: string;\r\n\r\n constructor(\r\n public readonly viewRef: ViewContainerRef,\r\n public readonly templateRef: TemplateRef<any>,\r\n ) {}\r\n}","import {\r\n AfterContentInit, ChangeDetectorRef, ContentChildren, Directive,\r\n Input, OnDestroy, OnInit, QueryList, Renderer2, ViewContainerRef\r\n} from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { BehaviorSubject, combineLatest, merge, Observable, Subscription } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { TranslatedElementDirective } from './translated-element.directive';\r\n\r\ninterface TranslationData {\r\n elements: TranslatedElementDirective[];\r\n rawTranslation: string;\r\n}\r\n\r\nconst TOKEN_START_DEMARC = '{{';\r\nconst TOKEN_END_DEMARC = '}}';\r\n\r\n// adapted from @kasperlauge's solution in https://github.com/ngx-translate/core/issues/223\r\n@Directive({\r\n selector: '[appTranslatedContent]',\r\n})\r\nexport class TranslatedContentDirective implements OnInit, OnDestroy, AfterContentInit {\r\n\r\n @Input('appTranslatedContent') translationKey: string;\r\n\r\n @ContentChildren(TranslatedElementDirective)\r\n private elements: QueryList<TranslatedElementDirective>;\r\n\r\n private subs: Subscription[] = [];\r\n private rawTranslation: Observable<string>;\r\n private translationData: Observable<TranslationData>;\r\n\r\n constructor(\r\n private viewRef: ViewContainerRef,\r\n private renderer: Renderer2,\r\n private translateService: TranslateService,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n ) { }\r\n\r\n public ngOnInit(): void {\r\n this.rawTranslation = merge(\r\n this.translateService.get(this.translationKey),\r\n this.translateService.onLangChange.asObservable().pipe(switchMap(() => this.translateService.get(this.translationKey)))\r\n );\r\n }\r\n\r\n\r\n public ngAfterContentInit(): void {\r\n // QueryList.changes doesn't re-emit after its initial value, which we have by now\r\n // BehaviorSubjects re-emit their initial value on subscription, so we get what we need by merging\r\n // the BehaviorSubject and the QueryList.changes observable\r\n const elementsSubject = new BehaviorSubject(this.elements.toArray());\r\n const elementsChanges = merge(elementsSubject, this.elements.changes);\r\n\r\n this.translationData = combineLatest(this.rawTranslation, elementsChanges)\r\n .pipe(\r\n map(([rawTranslation]) => {\r\n return {\r\n elements: this.elements.toArray(),\r\n rawTranslation,\r\n };\r\n })\r\n );\r\n\r\n this.subs.push(this.translationData.subscribe(this.render.bind(this)));\r\n }\r\n\r\n private render(translationData: TranslationData): void {\r\n\r\n if (!translationData.rawTranslation || translationData.rawTranslation === this.translationKey) {\r\n throw new Error(`No resource matching the key '${this.translationKey}'`);\r\n }\r\n\r\n while (this.viewRef.element.nativeElement.firstChild) {\r\n this.renderer.removeChild(this.viewRef.element.nativeElement, this.viewRef.element.nativeElement.firstChild);\r\n }\r\n\r\n let lastTokenEnd = 0;\r\n while (lastTokenEnd < translationData.rawTranslation.length) {\r\n const tokenStartDemarc = translationData.rawTranslation.indexOf(TOKEN_START_DEMARC, lastTokenEnd);\r\n if (tokenStartDemarc < 0) {\r\n break;\r\n }\r\n const tokenStart = tokenStartDemarc + TOKEN_START_DEMARC.length;\r\n const tokenEnd = translationData.rawTranslation.indexOf(TOKEN_END_DEMARC, tokenStart);\r\n if (tokenEnd < 0) {\r\n throw new Error(`Encountered unterminated token in translation string '${this.translationKey}'`);\r\n }\r\n const tokenEndDemarc = tokenEnd + TOKEN_END_DEMARC.length;\r\n\r\n const precedingText = translationData.rawTranslation.substring(lastTokenEnd, tokenStartDemarc);\r\n const precedingTextElement = this.renderer.createText(precedingText);\r\n this.renderer.appendChild(this.viewRef.element.nativeElement, precedingTextElement);\r\n\r\n const elementKey = translationData.rawTranslation.substring(tokenStart, tokenEnd);\r\n const embeddedElementTemplate = translationData.elements.find(element => element.elementKey === elementKey);\r\n if (embeddedElementTemplate) {\r\n const embeddedElementView = embeddedElementTemplate.viewRef.createEmbeddedView(embeddedElementTemplate.templateRef);\r\n this.renderer.appendChild(this.viewRef.element.nativeElement, embeddedElementView.rootNodes[0]);\r\n } else {\r\n const missingTokenText = translationData.rawTranslation.substring(tokenStartDemarc, tokenEndDemarc);\r\n const missingTokenElement = this.renderer.createText(missingTokenText);\r\n this.renderer.appendChild(this.viewRef.element.nativeElement, missingTokenElement);\r\n }\r\n\r\n lastTokenEnd = tokenEndDemarc;\r\n }\r\n\r\n const trailingText = translationData.rawTranslation.substring(lastTokenEnd);\r\n const trailingTextElement = this.renderer.createText(trailingText);\r\n\r\n this.renderer.appendChild(this.viewRef.element.nativeElement, trailingTextElement);\r\n\r\n // in case the rendering happens outside of a change detection event, this ensures that any translations in the\r\n // embedded elements are rendered\r\n this.changeDetectorRef.detectChanges();\r\n\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.subs.forEach(sub => sub.unsubscribe());\r\n }\r\n}","import { CellTextAlign, GridLayoutFormat } from './grid-layout-format.enum';\r\n\r\nexport class GridLayoutModel {\r\n constructor(\r\n propertyName: string, translateKey: any = null, width: any = null, grow: 0 | 1 = 0, shrink: 0 | 1 = 0,\r\n formating: GridLayoutFormat = GridLayoutFormat.none, format = '', order = 0,\r\n textAlign: CellTextAlign = CellTextAlign.left) {\r\n this.propertyName = propertyName;\r\n this.translateKey = translateKey;\r\n this.width = width;\r\n this.grow = grow;\r\n this.shrink = shrink;\r\n this.formating = formating;\r\n this.format = format;\r\n this.order = order;\r\n this.textAlign = textAlign;\r\n }\r\n public propertyName: string;\r\n public translateKey: string;\r\n public width: number;\r\n public grow: 0 | 1;\r\n public shrink: 0 | 1;\r\n public formating: GridLayoutFormat = GridLayoutFormat.none;\r\n public format: string;\r\n public order: number = 0;\r\n public textAlign: CellTextAlign = CellTextAlign.left;\r\n}\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\nimport { AttributeMetadata } from '../constants/symbols';\r\nimport { ModelConfig } from '../interfaces/model-config.interface';\r\nimport { BaseDatastore, ModelType } from '../services/base-datastore.service';\r\nimport { GridLayoutModel } from './grid-layout';\r\nexport class BaseModel {\r\n public highlighted: boolean;\r\n public id: any;\r\n [key: string]: any;\r\n\r\n // tslint:disable-next-line:variable-name\r\n constructor(protected _datastore: BaseDatastore, data?: any) {\r\n if (data) {\r\n if (data.id) {\r\n this.id = data.id;\r\n }\r\n Object.assign(this, data);\r\n }\r\n }\r\n\r\n save(\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customBody?: any): Observable<this> {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n return this._datastore.saveRecord(attributesMetadata, this, params, headers, customUrl, customBody);\r\n }\r\n\r\n patch(\r\n origModel: this,\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string\r\n ): Observable<this> {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n return this._datastore.patchRecord(attributesMetadata, this, origModel, params, headers, customUrl);\r\n }\r\n\r\n replace(\r\n params?: any,\r\n headers?: HttpHeaders,\r\n customUrl?: string,\r\n customBody?: any): Observable<this> {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n return this._datastore.replaceRecord(attributesMetadata, this, params, headers, customUrl, customBody);\r\n }\r\n get attributeMetadata(): any {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n return attributesMetadata;\r\n }\r\n set attributeMetadata(val: any) {\r\n this[AttributeMetadata] = val;\r\n }\r\n get hasDirtyAttributes() {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n let hasDirtyAttributes = false;\r\n for (const propertyName in attributesMetadata) {\r\n if (attributesMetadata.hasOwnProperty(propertyName)) {\r\n const metadata: any = attributesMetadata[propertyName];\r\n\r\n if (metadata.hasDirtyAttributes) {\r\n hasDirtyAttributes = true;\r\n break;\r\n }\r\n }\r\n }\r\n return hasDirtyAttributes;\r\n }\r\n\r\n rollbackAttributes(): void {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n let metadata: any;\r\n for (const propertyName in attributesMetadata) {\r\n if (attributesMetadata.hasOwnProperty(propertyName)) {\r\n if (attributesMetadata[propertyName].hasDirtyAttributes) {\r\n this[propertyName] = attributesMetadata[propertyName].oldValue;\r\n metadata = {\r\n hasDirtyAttributes: false,\r\n newValue: attributesMetadata[propertyName].oldValue,\r\n oldValue: undefined\r\n };\r\n attributesMetadata[propertyName] = metadata;\r\n }\r\n }\r\n }\r\n\r\n this[AttributeMetadata] = attributesMetadata;\r\n }\r\n\r\n get modelConfig(): ModelConfig {\r\n return Reflect.getMetadata('BaseModelConfig', this.constructor);\r\n }\r\n\r\n\r\n protected deserializeModel<T extends BaseModel>(modelType: ModelType<T>, data: any) {\r\n data = this.transformSerializedNamesToPropertyNames(modelType, data);\r\n return new modelType(this._datastore, data);\r\n }\r\n\r\n\r\n protected transformSerializedNamesToPropertyNames<T extends BaseModel>(modelType: ModelType<T>, attributes: any) {\r\n const serializedNameToPropertyName = this.getModelPropertyNames(modelType.prototype);\r\n const properties: any = {};\r\n\r\n Object.keys(serializedNameToPropertyName).forEach((serializedName) => {\r\n if (attributes[serializedName] !== null && attributes[serializedName] !== undefined) {\r\n properties[serializedNameToPropertyName[serializedName]] = attributes[serializedName];\r\n }\r\n });\r\n\r\n return properties;\r\n }\r\n\r\n public getModelPropertyNames(model: BaseModel) {\r\n return Reflect.getMetadata('AttributeMapping', model);\r\n }\r\n public getModelRequiredPropertyNames(model: BaseModel) {\r\n return Reflect.getMetadata('AttributeRequired', model);\r\n }\r\n public getModelDefaultPropertyValues(model: BaseModel) {\r\n return Reflect.getMetadata('AttributedefaultValue', model);\r\n }\r\n\r\n public getModelSubGroupPropertyNames(model: BaseModel) {\r\n return Reflect.getMetadata('AttributeformSubGroup', model);\r\n }\r\n\r\n public getFromGroup(fb: FormBuilder): FormGroup {\r\n const props = Object.keys(this.getModelPropertyNames(this));\r\n const requiredProps = this.getModelRequiredPropertyNames(this);\r\n const defaultValues = this.getModelDefaultPropertyValues(this);\r\n const formSubGroupsValues = this.getModelSubGroupPropertyNames(this);\r\n const controlsConfig: any = {};\r\n const that = this;\r\n if (props) {\r\n props.forEach(property => {\r\n const value = that[property] !== undefined ? that[property] : defaultValues[property];\r\n const formSubGroup = formSubGroupsValues[property] ?? null;\r\n if (requiredProps[property]) {\r\n if (formSubGroup)\r\n this.getSubFromGroup(fb, controlsConfig, formSubGroup).addControl(property, fb.control(value, Validators.required));\r\n else\r\n controlsConfig[property] = [value, Validators.required];\r\n } else {\r\n if (formSubGroup)\r\n this.getSubFromGroup(fb, controlsConfig, formSubGroup).addControl(property, fb.control(value));\r\n else\r\n controlsConfig[property] = value;\r\n }\r\n });\r\n\r\n }\r\n return fb.group(controlsConfig);\r\n }\r\n private getSubFromGroup(fb: FormBuilder, controlsConfig: any, subGroup: string): FormGroup {\r\n if (!controlsConfig[subGroup])\r\n controlsConfig[subGroup] = fb.group({});\r\n return controlsConfig[subGroup];\r\n }\r\n\r\n public getModelFromFormGroup(formGroup: FormGroup, id?: any) {\r\n const props = Object.keys(this.getModelPropertyNames(this));\r\n const formSubGroupsValues = this.getModelSubGroupPropertyNames(this);\r\n const data: any = {};\r\n if (id) {\r\n data.id = id;\r\n }\r\n const that = this;\r\n if (props) {\r\n props.forEach(property => {\r\n const formSubGroup = formSubGroupsValues[property] ?? null;\r\n if (!formSubGroup)\r\n data[property] = formGroup.controls[property].value ?? null;\r\n else\r\n data[property] = (formGroup.controls[formSubGroup] as FormGroup).controls[property].value ?? null;\r\n });\r\n }\r\n if (data) {\r\n if (id) {\r\n this.id = id;\r\n }\r\n Object.assign(this, data);\r\n }\r\n }\r\n\r\n public getGridLayout(): GridLayoutModel[] {\r\n const result = Array<GridLayoutModel>();\r\n const gridLayout: any = Reflect.getMetadata('GridLayout', this);\r\n if (gridLayout) {\r\n for (const layout of gridLayout) {\r\n const data = new GridLayoutModel(layout.propertyName, layout.translateKey,\r\n layout.width, layout.shrink, layout.grow,\r\n layout.formating, layout.format, layout.order, layout.textAlign);\r\n result.push(data);\r\n }\r\n }\r\n return result.sort(function (a, b) { return a.order - b.order; })\r\n //result;\r\n }\r\n\r\n public getSerializedModel() {\r\n const attributesMetadata: any = this[AttributeMetadata];\r\n return this._datastore.modelToEntity(this, attributesMetadata, true);\r\n }\r\n getCellClass(property: string) {\r\n return '';\r\n }\r\n}\r\n","export interface JsonBaseError {\r\n id?: string;\r\n links ?: Array<any>;\r\n status ?: string;\r\n code ?: string;\r\n title ?: string;\r\n detail ?: string;\r\n source ?: {\r\n pointer ?: string;\r\n parameter ?: string\r\n };\r\n meta ?: any;\r\n}\r\n\r\nexport class ErrorResponse {\r\n errors?: JsonBaseError[] = [];\r\n\r\n constructor(errors ?: JsonBaseError[]) {\r\n if (errors) {\r\n this.errors = errors;\r\n }\r\n }\r\n}\r\n","export class Rule {\n rule: any;\n order: number;\n parameters: string[] = [];\n}\n","import { NgModule } from '@angular/core';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatOptionModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSpinner, MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { MatBadgeModule } from '@angular/material/badge'\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\n@NgModule({\r\n imports: [\r\n MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule,\r\n MatDialogModule, MatExpansionModule, MatGridListModule, MatIconModule,\r\n MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule,\r\n MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule,\r\n MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatTableModule, MatTabsModule, MatToolbarModule,\r\n MatTooltipModule, MatOptionModule, DragDropModule, MatDividerModule, PortalModule, MatTreeModule, MatBadgeModule, MatStepperModule,\r\n CdkStepperModule\r\n ],\r\n exports: [\r\n MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule,\r\n MatDialogModule, MatExpansionModule, MatGridListModule, MatIconModule,\r\n MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule,\r\n MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule,\r\n MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatTableModule, MatTabsModule, MatToolbarModule,\r\n MatTooltipModule, MatOptionModule, DragDropModule, MatDividerModule, PortalModule, MatTreeModule, MatBadgeModule, MatStepperModule,\r\n CdkStepperModule\r\n ],\r\n})\r\nexport class MaterialModule {\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseModel, BaseService, GridLayoutModel } from '..';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GridLayoutService<T extends BaseModel> {\r\n\r\n constructor(protected baseService: BaseService<T>) { }\r\n public getGridLayout(): GridLayoutModel[] {\r\n var model = this.baseService.newModel();\r\n return model.getGridLayout();\r\n }\r\n}\r\n","import { DatePipe, DecimalPipe, PercentPipe } from '@angular/common';\r\nimport { BaseDatastore } from './services/base-datastore.service';\r\nexport * from './services';\r\n\r\nexport const PROVIDERS: any[] = [\r\n BaseDatastore,\r\n DatePipe,\r\n DecimalPipe,\r\n PercentPipe,\r\n];\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { BlockUIModule } from 'ng-block-ui';\r\nimport { GenericTableComponent } from './base-components/generic-table/generic-table.component';\r\nimport { SearchableDropdownComponent } from './base-components/searchable-dropdown/searchable-dropdown.component';\r\nimport { MaterialModule } from './material';\r\nimport { PROVIDERS } from './providers';\r\n\r\n@NgModule({\r\n declarations: [\r\n GenericTableComponent,\r\n SearchableDropdownComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n TranslateModule.forChild({}),\r\n MaterialModule,\r\n ReactiveFormsModule,\r\n BlockUIModule.forRoot(),\r\n ],\r\n providers: [\r\n PROVIDERS\r\n ],\r\n exports: [\r\n HttpClientModule,\r\n GenericTableComponent,\r\n SearchableDropdownComponent\r\n ]\r\n})\r\nexport class RslBaseModule {\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Pipe({\r\n name: 'inputError'\r\n})\r\nexport class InputErrorPipe implements PipeTransform {\r\n constructor(protected translate: TranslateService) {\r\n\r\n }\r\n transform(value: any, filedTranslationKey: any): string {\r\n let rvalue = '';\r\n if (value !== null) {\r\n if (value['invalid'] === true) {\r\n rvalue = 'ERROR.INVALID';\r\n }\r\n if (value['mustMatch'] === true) {\r\n rvalue = 'Account.Password.MustMach';\r\n }\r\n if (value['required'] === true) {\r\n const field = this.translate.instant(filedTranslationKey.field);\r\n rvalue = this.translate.instant('General.Field.Required', { field });\r\n }\r\n if (value['minlength']) {\r\n const field = this.translate.instant(filedTranslationKey.field);\r\n rvalue = this.translate.instant('General.Field.MinLength', { field, requiredLength: value.minlength.requiredLength });\r\n }\r\n }\r\n return rvalue;\r\n }\r\n\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'nl2br'\r\n})\r\nexport class Nl2brPipe implements PipeTransform {\r\n\r\n transform(value: any, args?: any): any {\r\n // return value.replace(/\\n/g, '<br />');\r\n if (value) {\r\n value = value.replace(/(?:\\r\\n\\r\\n|\\r\\r|\\n\\n)/g, '</p><p>');\r\n return '<p>' + value.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>') + '</p>';\r\n }\r\n return value;\r\n }\r\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport class CustomValidators {\n static patternValidator(regex: RegExp, error: ValidationErrors): ValidatorFn {\n return (control: AbstractControl): { [key: string]: any } => {\n if (!control.value) {\n // if control is empty return no error\n return null;\n }\n\n // test the value of the control against the regexp supplied\n const valid = regex.test(control.value);\n\n // if true, return no error (no error), else return error passed in the second parameter\n return valid ? null : error;\n };\n }\n}\n","/*\r\n * Public API Surface of core\r\n */\r\n\r\nexport * from './lib/base-components';\r\nexport * from './lib/base-components/base-form-edit.component';\r\nexport * from './lib/base-components/generic-table/generic-table.component';\r\nexport * from './lib/index';\r\nexport * from './lib/material';\r\nexport * from './lib/module';\r\nexport * from './lib/providers';\r\n// export * from './lib/services/base-datastore.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|