@indigina/kendo 1.1.2 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,16 +40,16 @@ import * as i3$2 from '@progress/kendo-angular-popup';
40
40
  import { PopupModule } from '@progress/kendo-angular-popup';
41
41
  import * as i2$2 from '@progress/kendo-angular-dialog';
42
42
  import { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';
43
- import * as i2$4 from '@progress/kendo-angular-buttons';
44
- import { ButtonsModule } from '@progress/kendo-angular-buttons';
45
- import * as i2$3 from '@progress/kendo-angular-dateinputs';
46
- import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
47
- import * as i3$3 from '@progress/kendo-angular-dropdowns';
48
- import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
49
- import * as i3$4 from '@progress/kendo-angular-grid';
43
+ import * as i3$3 from '@progress/kendo-angular-grid';
50
44
  import { GridModule, ExcelModule } from '@progress/kendo-angular-grid';
45
+ import * as i2$3 from '@progress/kendo-angular-buttons';
46
+ import { ButtonsModule } from '@progress/kendo-angular-buttons';
51
47
  import * as i6 from '@progress/kendo-angular-inputs';
52
48
  import { InputsModule } from '@progress/kendo-angular-inputs';
49
+ import * as i2$4 from '@progress/kendo-angular-dateinputs';
50
+ import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
51
+ import * as i3$4 from '@progress/kendo-angular-dropdowns';
52
+ import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
53
53
  import { TooltipModule } from '@progress/kendo-angular-tooltip';
54
54
 
55
55
  class DebounceDirective {
@@ -1743,171 +1743,101 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
1743
1743
  type: Input
1744
1744
  }] } });
1745
1745
 
1746
- const AuthorizationHeader = 'Authorization';
1747
- class AuthHeadersInterceptor {
1748
- constructor(settingsService) {
1749
- this.settingsService = settingsService;
1746
+ class EntityService {
1747
+ constructor(httpService, endpoints) {
1748
+ this.httpService = httpService;
1749
+ this.endpoints = endpoints;
1750
1750
  }
1751
- intercept(request, next) {
1752
- if (!request.headers.keys().find((x) => x === AuthorizationHeader)) {
1753
- const token = this.settingsService.getToken();
1754
- if (token) {
1755
- const modified = request.clone({
1756
- setHeaders: {
1757
- Authorization: `Bearer ${token}`,
1758
- },
1759
- });
1760
- return next.handle(modified);
1761
- }
1762
- else {
1763
- return next.handle(request);
1764
- }
1751
+ getPage(state) {
1752
+ return this.httpService.get(this.endpoints.query(state));
1753
+ }
1754
+ get(id) {
1755
+ return this.httpService.get(this.endpoints.entityPath(id));
1756
+ }
1757
+ delete(id) {
1758
+ return this.httpService.delete(this.endpoints.entityPath(id));
1759
+ }
1760
+ save(model) {
1761
+ if (model.id) {
1762
+ return this.httpService.put(this.endpoints.entityPath(model.id), model);
1765
1763
  }
1766
- return next.handle(request);
1764
+ return this.httpService.post(this.endpoints.path, model);
1767
1765
  }
1768
1766
  }
1769
- AuthHeadersInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor, deps: [{ token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
1770
- AuthHeadersInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor });
1771
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor, decorators: [{
1772
- type: Injectable
1773
- }], ctorParameters: function () { return [{ type: SettingsService }]; } });
1774
-
1775
- var FieldTypes;
1776
- (function (FieldTypes) {
1777
- FieldTypes[FieldTypes["Text"] = 0] = "Text";
1778
- FieldTypes[FieldTypes["Checkbox"] = 1] = "Checkbox";
1779
- FieldTypes[FieldTypes["Dropdown"] = 2] = "Dropdown";
1780
- FieldTypes[FieldTypes["Multiselect"] = 3] = "Multiselect";
1781
- })(FieldTypes || (FieldTypes = {}));
1782
1767
 
1783
- const moment = momentModule;
1784
- class CurrentTimezoneComponent {
1785
- constructor() { }
1786
- ngOnInit() {
1787
- const timeZone = moment.tz.guess();
1788
- this.timeZoneAndOffset = timeZone + ' ' + moment().format('Z');
1768
+ class PartnerService extends EntityService {
1769
+ constructor(httpService) {
1770
+ super(httpService, endpoints.partners);
1789
1771
  }
1790
1772
  }
1791
- CurrentTimezoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CurrentTimezoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1792
- CurrentTimezoneComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: CurrentTimezoneComponent, selector: "current-timezone", ngImport: i0, template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n", styles: [""], pipes: { "translate": i1.TranslatePipe } });
1793
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CurrentTimezoneComponent, decorators: [{
1794
- type: Component,
1795
- args: [{ selector: 'current-timezone', template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n", styles: [""] }]
1796
- }], ctorParameters: function () { return []; } });
1773
+ PartnerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: PartnerService, deps: [{ token: HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
1774
+ PartnerServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: PartnerService });
1775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: PartnerService, decorators: [{
1776
+ type: Injectable
1777
+ }], ctorParameters: function () { return [{ type: HttpService }]; } });
1797
1778
 
1798
- const allKey = 'All';
1799
- const defaultValueField = 'id';
1800
- class ActivityFilterComponent {
1801
- constructor(translate) {
1802
- this.translate = translate;
1803
- this.showArchiveSwitcher = true;
1804
- this.showSearhText = true;
1805
- this.FieldTypes = FieldTypes;
1806
- this.defaultNamedModel = {
1807
- name: this.translate.instant(allKey),
1808
- id: null,
1809
- };
1810
- }
1811
- ngOnInit() {
1812
- this.customFilterElements?.forEach((element) => (element.valueField = element.valueField
1813
- ? element.valueField
1814
- : defaultValueField));
1815
- this.filterService.filter$.subscribe((filter) => {
1816
- this.filter = filter;
1817
- this.changeFilter();
1818
- });
1819
- }
1820
- ngOnChanges() {
1821
- this.changeFilter();
1822
- }
1823
- setTodayFilter() {
1824
- this.filterService.setToday();
1825
- }
1826
- clearFilter() {
1827
- this.customFilterElements?.forEach((element) => {
1828
- element.filter.value = null;
1829
- if (element.filter.values) {
1830
- element.filter.values = [];
1831
- }
1832
- });
1833
- this.filterService.reset();
1834
- this.emitChangeEvents();
1835
- }
1836
- applyFilter() {
1837
- this.setCustomFilters();
1838
- this.filterService.applyFilter(this.filter);
1839
- }
1840
- fieldChange(value, element) {
1841
- if (element.change) {
1842
- element.change(value);
1779
+ const urlSerialize = (object) => {
1780
+ let serialized = '';
1781
+ Object.keys(object).forEach((key) => {
1782
+ if (typeof object[key] === 'object') {
1783
+ const serializedObject = !isEmptyObject(object[key])
1784
+ ? JSON.stringify(object[key])
1785
+ : '';
1786
+ serialized += serializedObject ? `${key}=${serializedObject}&` : '';
1843
1787
  }
1844
- }
1845
- fillFilter() {
1846
- if (!this.filter) {
1847
- return;
1788
+ else {
1789
+ serialized +=
1790
+ object[key] || object[key] === 0 ? `${key}=${object[key]}&` : '';
1848
1791
  }
1849
- this.customFilterElements?.forEach((element) => {
1850
- element.filter = { ...element.filter, value: null, values: null };
1851
- });
1852
- this.filter.customFilters?.forEach((filter) => {
1853
- const element = this.customFilterElements?.find((x) => x.filter.field === filter.field &&
1854
- x.filter.filterTarget === filter.filterTarget);
1855
- if (element) {
1856
- element.filter = Object.assign({}, filter);
1857
- }
1858
- });
1859
- }
1860
- setCustomFilters() {
1861
- this.customFilterElements?.forEach((element) => {
1862
- const index = this.filter.customFilters?.findIndex((x) => x.field === element.filter.field);
1863
- if (index !== -1) {
1864
- this.filter.customFilters.splice(index, 1);
1865
- }
1866
- });
1867
- this.customFilterElements?.forEach((element) => this.filter.customFilters.push(element.filter));
1868
- }
1869
- fixMultiselectFilters() {
1870
- const multiSelectFilters = this.customFilterElements?.map((element) => {
1871
- if (element.fieldType === FieldTypes.Multiselect) {
1872
- return element.filter;
1873
- }
1874
- });
1875
- if (multiSelectFilters) {
1876
- multiSelectFilters.forEach((filter) => {
1877
- if (filter?.value) {
1878
- filter.values = [filter.value];
1879
- filter.value = null;
1880
- }
1881
- });
1792
+ });
1793
+ return serialized.slice(0, -1);
1794
+ };
1795
+ const isEmptyObject = (object) => {
1796
+ return object === null || Object.keys(object).length === 0;
1797
+ };
1798
+ const isDate = (date) => isNaN(date) && !isNaN(Date.parse(date));
1799
+ const urlDeserialize = (params) => {
1800
+ const deserialized = {};
1801
+ params.forEach((param, key) => {
1802
+ if (key === 'sort' || key === 'group') {
1803
+ deserialized[key] = JSON.parse(param);
1882
1804
  }
1883
- }
1884
- changeFilter() {
1885
- this.fillFilter();
1886
- this.fixMultiselectFilters();
1887
- this.emitChangeEvents();
1888
- }
1889
- emitChangeEvents() {
1890
- this.customFilterElements?.forEach((element) => {
1891
- if (element.filter.value || element.filter.values) {
1892
- this.fieldChange(element.filter.value ?? element.filter.values, element);
1805
+ else if (key === 'filter') {
1806
+ deserialized[key] = transformFilter(JSON.parse(param));
1807
+ }
1808
+ else {
1809
+ deserialized[key] = param;
1810
+ }
1811
+ });
1812
+ return deserialized;
1813
+ };
1814
+ function transformFilter(gridFilter) {
1815
+ transformFilters(gridFilter);
1816
+ return gridFilter;
1817
+ }
1818
+ function transformFilters(gridFilter) {
1819
+ if (gridFilter.filters.length) {
1820
+ gridFilter.filters.forEach((filter) => {
1821
+ let filterDescriptor = filter;
1822
+ filterDescriptor.value = isDate(filterDescriptor.value)
1823
+ ? new Date(filterDescriptor.value)
1824
+ : filterDescriptor.value;
1825
+ let compositeFilterDescriptor = filter;
1826
+ if (compositeFilterDescriptor.filters) {
1827
+ transformFilters(compositeFilterDescriptor);
1893
1828
  }
1894
1829
  });
1895
1830
  }
1896
1831
  }
1897
- ActivityFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ActivityFilterComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
1898
- ActivityFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ActivityFilterComponent, selector: "activity-filter", inputs: { showArchiveSwitcher: "showArchiveSwitcher", showSearhText: "showSearhText", customFilterElements: "customFilterElements", filterService: "filterService" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"], components: [{ type: i2$3.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["twoDigitYearMax", "focusableId", "title", "disabled", "readonly", "readOnlyInput", "cancelButton", "steps", "calendarType", "animateCalendarNavigation", "weekNumber", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "value", "format", "tabindex", "disabledDates", "popupSettings", "min", "max", "defaultTab", "size", "rounded", "fillMode", "formatPlaceholder", "placeholder", "focusedDate"], outputs: ["valueChange", "open", "close", "focus", "blur"], exportAs: ["kendo-datetimepicker"] }, { type: i3$3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i3$3.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: CurrentTimezoneComponent, selector: "current-timezone" }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3$3.SummaryTagDirective, selector: "[kendoMultiSelectSummaryTag]", inputs: ["kendoMultiSelectSummaryTag"] }], pipes: { "translate": i1.TranslatePipe } });
1899
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ActivityFilterComponent, decorators: [{
1832
+
1833
+ class ExcelExportButtonComponent {
1834
+ }
1835
+ ExcelExportButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ExcelExportButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1836
+ ExcelExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ExcelExportButtonComponent, selector: "excel-export-button", ngImport: i0, template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n", styles: [""], directives: [{ type: i3$3.ExcelCommandDirective, selector: "[kendoGridExcelCommand]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe } });
1837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ExcelExportButtonComponent, decorators: [{
1900
1838
  type: Component,
1901
- args: [{ selector: 'activity-filter', template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"] }]
1902
- }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { showArchiveSwitcher: [{
1903
- type: Input
1904
- }], showSearhText: [{
1905
- type: Input
1906
- }], customFilterElements: [{
1907
- type: Input
1908
- }], filterService: [{
1909
- type: Input
1910
- }] } });
1839
+ args: [{ selector: 'excel-export-button', template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n", styles: [""] }]
1840
+ }] });
1911
1841
 
1912
1842
  class ConfirmDialogComponent {
1913
1843
  constructor(dialogService) {
@@ -1930,7 +1860,7 @@ class ConfirmDialogComponent {
1930
1860
  }
1931
1861
  }
1932
1862
  ConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: i2$2.DialogService }], target: i0.ɵɵFactoryTarget.Component });
1933
- ConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ConfirmDialogComponent, selector: "confirm-dialog", viewQueries: [{ propertyName: "dialogActions", first: true, predicate: ["dialogActions"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #dialogActions>\n <button kendoButton (click)=\"cancel()\" translate=\"Cancel\"></button>\n <button kendoButton (click)=\"confirm()\" translate=\"Confirm\"></button>\n</ng-template>\n<div kendoDialogContainer></div>\n", styles: [""], directives: [{ type: i2$4.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "role", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "shape", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i2$2.DialogContainerDirective, selector: "[kendoDialogContainer]" }] });
1863
+ ConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ConfirmDialogComponent, selector: "confirm-dialog", viewQueries: [{ propertyName: "dialogActions", first: true, predicate: ["dialogActions"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #dialogActions>\n <button kendoButton (click)=\"cancel()\" translate=\"Cancel\"></button>\n <button kendoButton (click)=\"confirm()\" translate=\"Confirm\"></button>\n</ng-template>\n<div kendoDialogContainer></div>\n", styles: [""], directives: [{ type: i2$3.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "role", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "shape", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i2$2.DialogContainerDirective, selector: "[kendoDialogContainer]" }] });
1934
1864
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
1935
1865
  type: Component,
1936
1866
  args: [{ selector: 'confirm-dialog', template: "<ng-template #dialogActions>\n <button kendoButton (click)=\"cancel()\" translate=\"Cancel\"></button>\n <button kendoButton (click)=\"confirm()\" translate=\"Confirm\"></button>\n</ng-template>\n<div kendoDialogContainer></div>\n", styles: [""] }]
@@ -1939,401 +1869,527 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
1939
1869
  args: ['dialogActions', { static: true }]
1940
1870
  }] } });
1941
1871
 
1942
- class EntityEditButtonsBarComponent {
1943
- constructor() {
1944
- this.save = new EventEmitter();
1945
- }
1946
- }
1947
- EntityEditButtonsBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditButtonsBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1948
- EntityEditButtonsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: { valid: "valid" }, outputs: { save: "save" }, ngImport: i0, template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create']\"\n ></button>\n </div>\n</div>\n", styles: [""], directives: [{ type: i1$4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }] });
1949
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditButtonsBarComponent, decorators: [{
1950
- type: Component,
1951
- args: [{ selector: 'entity-edit-buttons-bar', template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create']\"\n ></button>\n </div>\n</div>\n", styles: [""] }]
1952
- }], propDecorators: { valid: [{
1953
- type: Input
1954
- }], save: [{
1955
- type: Output
1956
- }] } });
1957
-
1958
- class EntityEditFormComponent {
1959
- constructor(route) {
1872
+ const nameField = 'name';
1873
+ class EntityListComponent {
1874
+ constructor(translate, route, router) {
1875
+ this.translate = translate;
1960
1876
  this.route = route;
1961
- this.saveInProgress = false;
1962
- }
1963
- ngOnInit() {
1964
- this.route.params.subscribe((params) => {
1965
- this.formGroup = null;
1966
- const formGroup = new FormGroupWithErrors({});
1967
- if (params.id) {
1968
- this.adapter
1969
- .getService()
1970
- .get(params.id)
1971
- .subscribe((model) => {
1972
- formGroup.addControl('id', new FormControl(model.id));
1973
- for (const key of Object.keys(model)) {
1974
- formGroup.addControl(key, new FormControl(model[key]));
1975
- }
1976
- this.adapter.setForm(formGroup);
1977
- this.formGroup = formGroup;
1978
- });
1877
+ this.router = router;
1878
+ this.filterChange = new EventEmitter();
1879
+ this.gridState = {};
1880
+ this.loadings = 0;
1881
+ this.selected = [];
1882
+ this.gridFields = [];
1883
+ this.defaultFields = [
1884
+ { name: 'name', label: 'Name', sortable: true, position: 0 },
1885
+ ];
1886
+ this.getAllData = this.getAllData.bind(this);
1887
+ this.getRowClass = this.getRowClass.bind(this);
1888
+ }
1889
+ ngOnChanges(changes) {
1890
+ if (!changes.filters || changes.filters.firstChange) {
1891
+ return;
1892
+ }
1893
+ this.getFilteredData();
1894
+ }
1895
+ async ngOnInit() {
1896
+ this.gridFields = (this.fields || [])
1897
+ .concat(this.defaultFields)
1898
+ .sort((left, right) => (left.position || 0) - (right.position || 0));
1899
+ this.filters = this.filters ? this.filters : [];
1900
+ this.commands = this.commands ? this.commands : [];
1901
+ this.route.fragment.subscribe(async (fragment) => {
1902
+ await this.restoreGridState(new URLSearchParams(fragment));
1903
+ });
1904
+ this.route.firstChild.params.subscribe(async (params) => {
1905
+ if (params.id) {
1906
+ this.selected[0] = params.id;
1979
1907
  }
1980
1908
  else {
1981
- this.adapter.setForm(formGroup);
1982
- this.formGroup = formGroup;
1909
+ this.selected.pop();
1983
1910
  }
1984
1911
  });
1985
1912
  }
1986
- save() {
1987
- this.saveInProgress = true;
1988
- this.adapter
1989
- .getService()
1990
- .save(this.adapter.getValue())
1991
- .pipe(finalize(() => (this.saveInProgress = false)))
1992
- .subscribe((result) => {
1993
- this.adapter.onSaved(result);
1994
- }, (error) => {
1995
- this.formGroup.applyServerErrors(error.error, this.formGroup);
1996
- this.generalErrors.setErrors(this.formGroup.generalErrors);
1913
+ removeHandler({ dataItem }) {
1914
+ this.dialog.open(this.translate.instant('Confirmation.Delete') +
1915
+ ': "' +
1916
+ dataItem.name +
1917
+ '"?', () => this.remove(dataItem));
1918
+ }
1919
+ selectItem({ dataItem }) {
1920
+ this.router.navigate([dataItem.id], {
1921
+ relativeTo: this.route,
1922
+ fragment: urlSerialize(this.gridState),
1997
1923
  });
1998
1924
  }
1999
- }
2000
- EntityEditFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditFormComponent, deps: [{ token: i1$4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
2001
- EntityEditFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityEditFormComponent, selector: "entity-edit-form", inputs: { title: "title", adapter: "adapter" }, viewQueries: [{ propertyName: "generalErrors", first: true, predicate: ["general_errors"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n class=\"form-horizontal\"\n [formGroup]=\"formGroup\"\n novalidate\n autocomplete=\"off\"\n *ngIf=\"formGroup\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n #general_errors\n [form]=\"formGroup\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"formGroup.valid && formGroup.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n", styles: [""], components: [{ type: GeneralErrorsComponent, selector: "app-general-errors", inputs: ["form"] }, { type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: ["valid"], outputs: ["save"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe } });
2002
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditFormComponent, decorators: [{
2003
- type: Component,
2004
- args: [{ selector: 'entity-edit-form', template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n class=\"form-horizontal\"\n [formGroup]=\"formGroup\"\n novalidate\n autocomplete=\"off\"\n *ngIf=\"formGroup\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n #general_errors\n [form]=\"formGroup\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"formGroup.valid && formGroup.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n", styles: [""] }]
2005
- }], ctorParameters: function () { return [{ type: i1$4.ActivatedRoute }]; }, propDecorators: { generalErrors: [{
2006
- type: ViewChild,
2007
- args: ['general_errors']
2008
- }], title: [{
2009
- type: Input
2010
- }], adapter: [{
2011
- type: Input
2012
- }] } });
2013
-
2014
- class FieldDropdownComponent extends FieldComponent {
2015
- constructor(parent, eref) {
2016
- super(parent, eref, '');
2017
- this.parent = parent;
2018
- this.eref = eref;
2019
- this.data = [];
1925
+ onActivate(child) {
1926
+ if (child.saved) {
1927
+ child.saved.subscribe((data) => this.updateGrid(data));
1928
+ }
2020
1929
  }
2021
- get control() {
2022
- return this.parent.form.get(this.fieldName);
1930
+ onDeactivate(child) {
1931
+ if (child.saved) {
1932
+ child.saved.unsubscribe();
1933
+ }
2023
1934
  }
2024
- async ngOnChanges() {
2025
- await this.getData();
2026
- this.control.setValue((this.data.find((d) => d.id === this.control.value) || this.data[0]).id);
1935
+ dataStateChange(state) {
1936
+ Object.keys(state).forEach((key) => {
1937
+ this.gridState[key] = isNaN(state.skip)
1938
+ ? this.gridState[key]
1939
+ : state[key];
1940
+ });
1941
+ this.router.navigate([], {
1942
+ relativeTo: this.route,
1943
+ fragment: urlSerialize(this.gridState),
1944
+ });
2027
1945
  }
2028
- getData() {
2029
- this.service
2030
- .getPage(this.filter ? { filter: this.filter } : {})
2031
- .subscribe((data) => (this.data = data.data));
1946
+ onSearch(value) {
1947
+ this.searchTerm = value;
1948
+ this.gridState.skip = 0;
1949
+ this.getFilteredData();
2032
1950
  }
2033
- }
2034
- FieldDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownComponent, deps: [{ token: i1$3.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2035
- FieldDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldDropdownComponent, selector: "field-dropdown", inputs: { service: "service", rebind: "rebind", filter: "filter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""], components: [{ type: i3$3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe }, viewProviders: [
2036
- { provide: ControlContainer, useExisting: FormGroupDirective },
2037
- ] });
2038
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownComponent, decorators: [{
2039
- type: Component,
2040
- args: [{ selector: 'field-dropdown', viewProviders: [
2041
- { provide: ControlContainer, useExisting: FormGroupDirective },
2042
- ], template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""] }]
2043
- }], ctorParameters: function () { return [{ type: i1$3.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2044
- type: Input
2045
- }], rebind: [{
2046
- type: Input
2047
- }], filter: [{
2048
- type: Input
2049
- }] } });
2050
-
2051
- class FieldMultiSelectComponent extends FieldComponent {
2052
- constructor(parent, eref) {
2053
- super(parent, eref, []);
2054
- this.parent = parent;
2055
- this.eref = eref;
2056
- this.data = [];
1951
+ getAllData() {
1952
+ const state = Object.assign({}, this.gridState);
1953
+ delete state.skip;
1954
+ delete state.take;
1955
+ return this.service.getPage(state);
2057
1956
  }
2058
- get control() {
2059
- return this.parent.form.get(this.fieldName);
1957
+ getRowClass(context) {
1958
+ return this.rowClass && context
1959
+ ? this.rowClass(context.dataItem, context.index)
1960
+ : {};
2060
1961
  }
2061
- ngOnChanges() {
2062
- this.getData().subscribe((data) => {
2063
- this.data = data.data;
2064
- this.control.setValue(this.control.value.filter((x) => this.data.filter((d) => d.id === x).length));
1962
+ getFilteredData() {
1963
+ this.gridState.filter = this.getFilter();
1964
+ this.router.navigate([], {
1965
+ relativeTo: this.route,
1966
+ fragment: urlSerialize(this.gridState),
1967
+ });
1968
+ }
1969
+ updateGrid(data) {
1970
+ const exists = this.page.data.filter((x) => x.id === data.id);
1971
+ if (exists.length) {
1972
+ this.page.data[this.page.data.indexOf(exists[0])] = data;
1973
+ return;
1974
+ }
1975
+ this.page.total++;
1976
+ this.page.data.splice(0, 0, data);
1977
+ if (this.page.data.length > this.gridState.take) {
1978
+ this.page.data.splice(this.page.data.length - 1, 1);
1979
+ }
1980
+ this.selected[0] = data.id;
1981
+ this.router.navigate([data.id], {
1982
+ relativeTo: this.route,
1983
+ preserveFragment: true,
2065
1984
  });
2066
1985
  }
2067
1986
  getData() {
2068
- return this.service.getPage(this.filter ? { filter: this.filter } : {});
1987
+ this.loadings++;
1988
+ this.service.getPage(this.gridState).subscribe((page) => {
1989
+ this.page = page;
1990
+ this.loadings--;
1991
+ });
1992
+ }
1993
+ async remove(entity) {
1994
+ this.loadings++;
1995
+ this.service.delete(entity.id).subscribe(() => {
1996
+ if (this.selected.length &&
1997
+ this.selected[this.selected.length - 1] === entity.id) {
1998
+ this.router.navigate(['../'], {
1999
+ preserveFragment: true,
2000
+ relativeTo: this.route.firstChild,
2001
+ });
2002
+ }
2003
+ this.loadings--;
2004
+ });
2005
+ this.getData();
2006
+ }
2007
+ getFilter() {
2008
+ const filter = {
2009
+ logic: 'and',
2010
+ filters: this.searchTerm
2011
+ ? [
2012
+ { field: nameField, operator: 'contains', value: this.searchTerm },
2013
+ ...this.filters,
2014
+ ]
2015
+ : this.filters,
2016
+ };
2017
+ return filter;
2018
+ }
2019
+ onFilterChange() {
2020
+ const filter = this.gridState.filter?.filters.find((x) => x.field === nameField);
2021
+ this.searchTerm = filter?.value;
2022
+ this.filterChange.emit(this.gridState.filter);
2023
+ }
2024
+ async restoreGridState(params) {
2025
+ const defaultGridState = {
2026
+ sort: this.defaultSort || [{ field: nameField, dir: 'asc' }],
2027
+ skip: 0,
2028
+ take: 10,
2029
+ };
2030
+ const state = urlDeserialize(params);
2031
+ this.gridState = state.hasOwnProperty('take') ? state : defaultGridState;
2032
+ this.onFilterChange();
2033
+ this.getData();
2069
2034
  }
2070
2035
  }
2071
- FieldMultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldMultiSelectComponent, deps: [{ token: i1$3.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2072
- FieldMultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldMultiSelectComponent, selector: "field-multiselect", inputs: { service: "service", rebind: "rebind", filter: "filter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"false\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-multiselect>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""], components: [{ type: i3$3.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe }, viewProviders: [
2073
- { provide: ControlContainer, useExisting: FormGroupDirective },
2074
- ] });
2075
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldMultiSelectComponent, decorators: [{
2036
+ EntityListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityListComponent, deps: [{ token: i1.TranslateService }, { token: i1$4.ActivatedRoute }, { token: i1$4.Router }], target: i0.ɵɵFactoryTarget.Component });
2037
+ EntityListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityListComponent, selector: "entity-list", inputs: { service: "service", filters: "filters", fields: "fields", commands: "commands", rowClass: "rowClass", defaultSort: "defaultSort" }, outputs: { filterChange: "filterChange" }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["confirmDialog"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", styles: [""], components: [{ type: i3$3.GridComponent, selector: "kendo-grid", inputs: ["data", "scrollable", "selectable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "sort", "group", "navigatable", "rowClass", "rowSticky", "rowSelected", "cellSelected", "isDetailExpanded", "isGroupExpanded", "pageSize", "height", "rowHeight", "detailRowHeight", "filter"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { type: ExcelExportButtonComponent, selector: "excel-export-button" }, { type: i3$3.ExcelComponent, selector: "kendo-grid-excel", inputs: ["fileName", "filterable", "creator", "date", "forceProxy", "proxyURL", "fetchData", "paddingCellOptions", "headerPaddingCellOptions", "collapsible"] }, { type: i3$3.CommandColumnComponent, selector: "kendo-grid-command-column" }, { type: i3$3.ColumnComponent, selector: "kendo-grid-column", inputs: ["sortable", "groupable", "editor", "filter", "filterable", "editable", "field", "format"] }, { type: i3$3.GridSpacerComponent, selector: "kendo-grid-spacer, kendo-pager-spacer", inputs: ["width"] }, { type: i3$3.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { type: i3$3.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { type: i3$3.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { type: i3$3.PagerInfoComponent, selector: "kendo-pager-info" }, { type: ConfirmDialogComponent, selector: "confirm-dialog" }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: DebounceDirective, selector: "[appDebounce]", inputs: ["debounceTime"], outputs: ["debounceKeyup"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { type: i3$3.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { type: i3$3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { type: i3$3.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { type: i3$3.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$3.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { type: i3$3.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { type: i1$4.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i1.TranslatePipe } });
2038
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityListComponent, decorators: [{
2076
2039
  type: Component,
2077
- args: [{ selector: 'field-multiselect', viewProviders: [
2078
- { provide: ControlContainer, useExisting: FormGroupDirective },
2079
- ], template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"false\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-multiselect>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""] }]
2080
- }], ctorParameters: function () { return [{ type: i1$3.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2040
+ args: [{ selector: 'entity-list', template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", styles: [""] }]
2041
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i1$4.ActivatedRoute }, { type: i1$4.Router }]; }, propDecorators: { service: [{
2081
2042
  type: Input
2082
- }], rebind: [{
2043
+ }], filters: [{
2083
2044
  type: Input
2084
- }], filter: [{
2045
+ }], fields: [{
2046
+ type: Input
2047
+ }], commands: [{
2048
+ type: Input
2049
+ }], rowClass: [{
2050
+ type: Input
2051
+ }], defaultSort: [{
2085
2052
  type: Input
2053
+ }], filterChange: [{
2054
+ type: Output
2055
+ }], dialog: [{
2056
+ type: ViewChild,
2057
+ args: ['confirmDialog', { static: true }]
2086
2058
  }] } });
2087
2059
 
2088
- const urlSerialize = (object) => {
2089
- let serialized = '';
2090
- Object.keys(object).forEach((key) => {
2091
- if (typeof object[key] === 'object') {
2092
- const serializedObject = !isEmptyObject(object[key])
2093
- ? JSON.stringify(object[key])
2094
- : '';
2095
- serialized += serializedObject ? `${key}=${serializedObject}&` : '';
2096
- }
2097
- else {
2098
- serialized +=
2099
- object[key] || object[key] === 0 ? `${key}=${object[key]}&` : '';
2100
- }
2101
- });
2102
- return serialized.slice(0, -1);
2103
- };
2104
- const isEmptyObject = (object) => {
2105
- return object === null || Object.keys(object).length === 0;
2106
- };
2107
- const isDate = (date) => isNaN(date) && !isNaN(Date.parse(date));
2108
- const urlDeserialize = (params) => {
2109
- const deserialized = {};
2110
- params.forEach((param, key) => {
2111
- if (key === 'sort' || key === 'group') {
2112
- deserialized[key] = JSON.parse(param);
2113
- }
2114
- else if (key === 'filter') {
2115
- deserialized[key] = transformFilter(JSON.parse(param));
2116
- }
2117
- else {
2118
- deserialized[key] = param;
2060
+ class UserListAdminComponent extends EntityListComponent {
2061
+ constructor(translate, route, router, partnerService) {
2062
+ super(translate, route, router);
2063
+ this.partnerService = partnerService;
2064
+ }
2065
+ onActivate(child) {
2066
+ if (child.saved) {
2067
+ child.saved.subscribe((data) => this.partnerService
2068
+ .get(data.partnerId)
2069
+ .subscribe((partner) => {
2070
+ data.partnerName = partner.name;
2071
+ this.updateGrid(data);
2072
+ }));
2119
2073
  }
2120
- });
2121
- return deserialized;
2122
- };
2123
- function transformFilter(gridFilter) {
2124
- transformFilters(gridFilter);
2125
- return gridFilter;
2074
+ }
2126
2075
  }
2127
- function transformFilters(gridFilter) {
2128
- if (gridFilter.filters.length) {
2129
- gridFilter.filters.forEach((filter) => {
2130
- let filterDescriptor = filter;
2131
- filterDescriptor.value = isDate(filterDescriptor.value)
2132
- ? new Date(filterDescriptor.value)
2133
- : filterDescriptor.value;
2134
- let compositeFilterDescriptor = filter;
2135
- if (compositeFilterDescriptor.filters) {
2136
- transformFilters(compositeFilterDescriptor);
2076
+ UserListAdminComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: UserListAdminComponent, deps: [{ token: i1.TranslateService }, { token: i1$4.ActivatedRoute }, { token: i1$4.Router }, { token: PartnerService }], target: i0.ɵɵFactoryTarget.Component });
2077
+ UserListAdminComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: UserListAdminComponent, selector: "lib-user-list-admin", providers: [PartnerService], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", components: [{ type: i3$3.GridComponent, selector: "kendo-grid", inputs: ["data", "scrollable", "selectable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "sort", "group", "navigatable", "rowClass", "rowSticky", "rowSelected", "cellSelected", "isDetailExpanded", "isGroupExpanded", "pageSize", "height", "rowHeight", "detailRowHeight", "filter"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { type: ExcelExportButtonComponent, selector: "excel-export-button" }, { type: i3$3.ExcelComponent, selector: "kendo-grid-excel", inputs: ["fileName", "filterable", "creator", "date", "forceProxy", "proxyURL", "fetchData", "paddingCellOptions", "headerPaddingCellOptions", "collapsible"] }, { type: i3$3.CommandColumnComponent, selector: "kendo-grid-command-column" }, { type: i3$3.ColumnComponent, selector: "kendo-grid-column", inputs: ["sortable", "groupable", "editor", "filter", "filterable", "editable", "field", "format"] }, { type: i3$3.GridSpacerComponent, selector: "kendo-grid-spacer, kendo-pager-spacer", inputs: ["width"] }, { type: i3$3.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { type: i3$3.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { type: i3$3.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { type: i3$3.PagerInfoComponent, selector: "kendo-pager-info" }, { type: ConfirmDialogComponent, selector: "confirm-dialog" }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: DebounceDirective, selector: "[appDebounce]", inputs: ["debounceTime"], outputs: ["debounceKeyup"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { type: i3$3.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { type: i3$3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { type: i3$3.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { type: i3$3.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$3.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { type: i3$3.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { type: i1$4.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i1.TranslatePipe } });
2078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: UserListAdminComponent, decorators: [{
2079
+ type: Component,
2080
+ args: [{ selector: 'lib-user-list-admin', providers: [PartnerService], template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n" }]
2081
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i1$4.ActivatedRoute }, { type: i1$4.Router }, { type: PartnerService }]; } });
2082
+
2083
+ const AuthorizationHeader = 'Authorization';
2084
+ class AuthHeadersInterceptor {
2085
+ constructor(settingsService) {
2086
+ this.settingsService = settingsService;
2087
+ }
2088
+ intercept(request, next) {
2089
+ if (!request.headers.keys().find((x) => x === AuthorizationHeader)) {
2090
+ const token = this.settingsService.getToken();
2091
+ if (token) {
2092
+ const modified = request.clone({
2093
+ setHeaders: {
2094
+ Authorization: `Bearer ${token}`,
2095
+ },
2096
+ });
2097
+ return next.handle(modified);
2137
2098
  }
2138
- });
2099
+ else {
2100
+ return next.handle(request);
2101
+ }
2102
+ }
2103
+ return next.handle(request);
2139
2104
  }
2140
2105
  }
2106
+ AuthHeadersInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor, deps: [{ token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
2107
+ AuthHeadersInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor });
2108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AuthHeadersInterceptor, decorators: [{
2109
+ type: Injectable
2110
+ }], ctorParameters: function () { return [{ type: SettingsService }]; } });
2141
2111
 
2142
- class ExcelExportButtonComponent {
2112
+ var FieldTypes;
2113
+ (function (FieldTypes) {
2114
+ FieldTypes[FieldTypes["Text"] = 0] = "Text";
2115
+ FieldTypes[FieldTypes["Checkbox"] = 1] = "Checkbox";
2116
+ FieldTypes[FieldTypes["Dropdown"] = 2] = "Dropdown";
2117
+ FieldTypes[FieldTypes["Multiselect"] = 3] = "Multiselect";
2118
+ })(FieldTypes || (FieldTypes = {}));
2119
+
2120
+ const moment = momentModule;
2121
+ class CurrentTimezoneComponent {
2122
+ constructor() { }
2123
+ ngOnInit() {
2124
+ const timeZone = moment.tz.guess();
2125
+ this.timeZoneAndOffset = timeZone + ' ' + moment().format('Z');
2126
+ }
2143
2127
  }
2144
- ExcelExportButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ExcelExportButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2145
- ExcelExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ExcelExportButtonComponent, selector: "excel-export-button", ngImport: i0, template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n", styles: [""], directives: [{ type: i3$4.ExcelCommandDirective, selector: "[kendoGridExcelCommand]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i1.TranslatePipe } });
2146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ExcelExportButtonComponent, decorators: [{
2128
+ CurrentTimezoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CurrentTimezoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2129
+ CurrentTimezoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: CurrentTimezoneComponent, selector: "current-timezone", ngImport: i0, template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n", styles: [""], pipes: { "translate": i1.TranslatePipe } });
2130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CurrentTimezoneComponent, decorators: [{
2147
2131
  type: Component,
2148
- args: [{ selector: 'excel-export-button', template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n", styles: [""] }]
2149
- }] });
2132
+ args: [{ selector: 'current-timezone', template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n", styles: [""] }]
2133
+ }], ctorParameters: function () { return []; } });
2150
2134
 
2151
- const nameField = 'name';
2152
- class EntityListComponent {
2153
- constructor(translate, route, router) {
2135
+ const allKey = 'All';
2136
+ const defaultValueField = 'id';
2137
+ class ActivityFilterComponent {
2138
+ constructor(translate) {
2154
2139
  this.translate = translate;
2155
- this.route = route;
2156
- this.router = router;
2157
- this.filterChange = new EventEmitter();
2158
- this.gridState = {};
2159
- this.loadings = 0;
2160
- this.selected = [];
2161
- this.gridFields = [];
2162
- this.defaultFields = [
2163
- { name: 'name', label: 'Name', sortable: true, position: 0 },
2164
- ];
2165
- this.getAllData = this.getAllData.bind(this);
2166
- this.getRowClass = this.getRowClass.bind(this);
2140
+ this.showArchiveSwitcher = true;
2141
+ this.showSearhText = true;
2142
+ this.FieldTypes = FieldTypes;
2143
+ this.defaultNamedModel = {
2144
+ name: this.translate.instant(allKey),
2145
+ id: null,
2146
+ };
2167
2147
  }
2168
- ngOnChanges(changes) {
2169
- if (!changes.filters || changes.filters.firstChange) {
2148
+ ngOnInit() {
2149
+ this.customFilterElements?.forEach((element) => (element.valueField = element.valueField
2150
+ ? element.valueField
2151
+ : defaultValueField));
2152
+ this.filterService.filter$.subscribe((filter) => {
2153
+ this.filter = filter;
2154
+ this.changeFilter();
2155
+ });
2156
+ }
2157
+ ngOnChanges() {
2158
+ this.changeFilter();
2159
+ }
2160
+ setTodayFilter() {
2161
+ this.filterService.setToday();
2162
+ }
2163
+ clearFilter() {
2164
+ this.customFilterElements?.forEach((element) => {
2165
+ element.filter.value = null;
2166
+ if (element.filter.values) {
2167
+ element.filter.values = [];
2168
+ }
2169
+ });
2170
+ this.filterService.reset();
2171
+ this.emitChangeEvents();
2172
+ }
2173
+ applyFilter() {
2174
+ this.setCustomFilters();
2175
+ this.filterService.applyFilter(this.filter);
2176
+ }
2177
+ fieldChange(value, element) {
2178
+ if (element.change) {
2179
+ element.change(value);
2180
+ }
2181
+ }
2182
+ fillFilter() {
2183
+ if (!this.filter) {
2170
2184
  return;
2171
2185
  }
2172
- this.getFilteredData();
2186
+ this.customFilterElements?.forEach((element) => {
2187
+ element.filter = { ...element.filter, value: null, values: null };
2188
+ });
2189
+ this.filter.customFilters?.forEach((filter) => {
2190
+ const element = this.customFilterElements?.find((x) => x.filter.field === filter.field &&
2191
+ x.filter.filterTarget === filter.filterTarget);
2192
+ if (element) {
2193
+ element.filter = Object.assign({}, filter);
2194
+ }
2195
+ });
2173
2196
  }
2174
- async ngOnInit() {
2175
- this.gridFields = (this.fields || [])
2176
- .concat(this.defaultFields)
2177
- .sort((left, right) => (left.position || 0) - (right.position || 0));
2178
- this.filters = this.filters ? this.filters : [];
2179
- this.commands = this.commands ? this.commands : [];
2180
- this.route.fragment.subscribe(async (fragment) => {
2181
- await this.restoreGridState(new URLSearchParams(fragment));
2197
+ setCustomFilters() {
2198
+ this.customFilterElements?.forEach((element) => {
2199
+ const index = this.filter.customFilters?.findIndex((x) => x.field === element.filter.field);
2200
+ if (index !== -1) {
2201
+ this.filter.customFilters.splice(index, 1);
2202
+ }
2182
2203
  });
2183
- this.route.firstChild.params.subscribe(async (params) => {
2204
+ this.customFilterElements?.forEach((element) => this.filter.customFilters.push(element.filter));
2205
+ }
2206
+ fixMultiselectFilters() {
2207
+ const multiSelectFilters = this.customFilterElements?.map((element) => {
2208
+ if (element.fieldType === FieldTypes.Multiselect) {
2209
+ return element.filter;
2210
+ }
2211
+ });
2212
+ if (multiSelectFilters) {
2213
+ multiSelectFilters.forEach((filter) => {
2214
+ if (filter?.value) {
2215
+ filter.values = [filter.value];
2216
+ filter.value = null;
2217
+ }
2218
+ });
2219
+ }
2220
+ }
2221
+ changeFilter() {
2222
+ this.fillFilter();
2223
+ this.fixMultiselectFilters();
2224
+ this.emitChangeEvents();
2225
+ }
2226
+ emitChangeEvents() {
2227
+ this.customFilterElements?.forEach((element) => {
2228
+ if (element.filter.value || element.filter.values) {
2229
+ this.fieldChange(element.filter.value ?? element.filter.values, element);
2230
+ }
2231
+ });
2232
+ }
2233
+ }
2234
+ ActivityFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ActivityFilterComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
2235
+ ActivityFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ActivityFilterComponent, selector: "activity-filter", inputs: { showArchiveSwitcher: "showArchiveSwitcher", showSearhText: "showSearhText", customFilterElements: "customFilterElements", filterService: "filterService" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"], components: [{ type: i2$4.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["twoDigitYearMax", "focusableId", "title", "disabled", "readonly", "readOnlyInput", "cancelButton", "steps", "calendarType", "animateCalendarNavigation", "weekNumber", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "value", "format", "tabindex", "disabledDates", "popupSettings", "min", "max", "defaultTab", "size", "rounded", "fillMode", "formatPlaceholder", "placeholder", "focusedDate"], outputs: ["valueChange", "open", "close", "focus", "blur"], exportAs: ["kendo-datetimepicker"] }, { type: i3$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i3$4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: CurrentTimezoneComponent, selector: "current-timezone" }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3$4.SummaryTagDirective, selector: "[kendoMultiSelectSummaryTag]", inputs: ["kendoMultiSelectSummaryTag"] }], pipes: { "translate": i1.TranslatePipe } });
2236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ActivityFilterComponent, decorators: [{
2237
+ type: Component,
2238
+ args: [{ selector: 'activity-filter', template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"] }]
2239
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { showArchiveSwitcher: [{
2240
+ type: Input
2241
+ }], showSearhText: [{
2242
+ type: Input
2243
+ }], customFilterElements: [{
2244
+ type: Input
2245
+ }], filterService: [{
2246
+ type: Input
2247
+ }] } });
2248
+
2249
+ class EntityEditButtonsBarComponent {
2250
+ constructor() {
2251
+ this.save = new EventEmitter();
2252
+ }
2253
+ }
2254
+ EntityEditButtonsBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditButtonsBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2255
+ EntityEditButtonsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: { valid: "valid" }, outputs: { save: "save" }, ngImport: i0, template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create']\"\n ></button>\n </div>\n</div>\n", styles: [""], directives: [{ type: i1$4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }] });
2256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditButtonsBarComponent, decorators: [{
2257
+ type: Component,
2258
+ args: [{ selector: 'entity-edit-buttons-bar', template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create']\"\n ></button>\n </div>\n</div>\n", styles: [""] }]
2259
+ }], propDecorators: { valid: [{
2260
+ type: Input
2261
+ }], save: [{
2262
+ type: Output
2263
+ }] } });
2264
+
2265
+ class EntityEditFormComponent {
2266
+ constructor(route) {
2267
+ this.route = route;
2268
+ this.saveInProgress = false;
2269
+ }
2270
+ ngOnInit() {
2271
+ this.route.params.subscribe((params) => {
2272
+ this.formGroup = null;
2273
+ const formGroup = new FormGroupWithErrors({});
2184
2274
  if (params.id) {
2185
- this.selected[0] = params.id;
2275
+ this.adapter
2276
+ .getService()
2277
+ .get(params.id)
2278
+ .subscribe((model) => {
2279
+ formGroup.addControl('id', new FormControl(model.id));
2280
+ for (const key of Object.keys(model)) {
2281
+ formGroup.addControl(key, new FormControl(model[key]));
2282
+ }
2283
+ this.adapter.setForm(formGroup);
2284
+ this.formGroup = formGroup;
2285
+ });
2186
2286
  }
2187
2287
  else {
2188
- this.selected.pop();
2288
+ this.adapter.setForm(formGroup);
2289
+ this.formGroup = formGroup;
2189
2290
  }
2190
2291
  });
2191
2292
  }
2192
- removeHandler({ dataItem }) {
2193
- this.dialog.open(this.translate.instant('Confirmation.Delete') +
2194
- ': "' +
2195
- dataItem.name +
2196
- '"?', () => this.remove(dataItem));
2197
- }
2198
- selectItem({ dataItem }) {
2199
- this.router.navigate([dataItem.id], {
2200
- relativeTo: this.route,
2201
- fragment: urlSerialize(this.gridState),
2293
+ save() {
2294
+ this.saveInProgress = true;
2295
+ this.adapter
2296
+ .getService()
2297
+ .save(this.adapter.getValue())
2298
+ .pipe(finalize(() => (this.saveInProgress = false)))
2299
+ .subscribe((result) => {
2300
+ this.adapter.onSaved(result);
2301
+ }, (error) => {
2302
+ this.formGroup.applyServerErrors(error.error, this.formGroup);
2303
+ this.generalErrors.setErrors(this.formGroup.generalErrors);
2202
2304
  });
2203
2305
  }
2204
- onActivate(child) {
2205
- if (child.saved) {
2206
- child.saved.subscribe((data) => this.updateGrid(data));
2207
- }
2208
- }
2209
- onDeactivate(child) {
2210
- if (child.saved) {
2211
- child.saved.unsubscribe();
2212
- }
2213
- }
2214
- dataStateChange(state) {
2215
- Object.keys(state).forEach((key) => {
2216
- this.gridState[key] = isNaN(state.skip)
2217
- ? this.gridState[key]
2218
- : state[key];
2219
- });
2220
- this.router.navigate([], {
2221
- relativeTo: this.route,
2222
- fragment: urlSerialize(this.gridState),
2223
- });
2306
+ }
2307
+ EntityEditFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditFormComponent, deps: [{ token: i1$4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
2308
+ EntityEditFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityEditFormComponent, selector: "entity-edit-form", inputs: { title: "title", adapter: "adapter" }, viewQueries: [{ propertyName: "generalErrors", first: true, predicate: ["general_errors"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n class=\"form-horizontal\"\n [formGroup]=\"formGroup\"\n novalidate\n autocomplete=\"off\"\n *ngIf=\"formGroup\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n #general_errors\n [form]=\"formGroup\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"formGroup.valid && formGroup.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n", styles: [""], components: [{ type: GeneralErrorsComponent, selector: "app-general-errors", inputs: ["form"] }, { type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: ["valid"], outputs: ["save"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe } });
2309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityEditFormComponent, decorators: [{
2310
+ type: Component,
2311
+ args: [{ selector: 'entity-edit-form', template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n class=\"form-horizontal\"\n [formGroup]=\"formGroup\"\n novalidate\n autocomplete=\"off\"\n *ngIf=\"formGroup\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n #general_errors\n [form]=\"formGroup\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"formGroup.valid && formGroup.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n", styles: [""] }]
2312
+ }], ctorParameters: function () { return [{ type: i1$4.ActivatedRoute }]; }, propDecorators: { generalErrors: [{
2313
+ type: ViewChild,
2314
+ args: ['general_errors']
2315
+ }], title: [{
2316
+ type: Input
2317
+ }], adapter: [{
2318
+ type: Input
2319
+ }] } });
2320
+
2321
+ class FieldDropdownComponent extends FieldComponent {
2322
+ constructor(parent, eref) {
2323
+ super(parent, eref, '');
2324
+ this.parent = parent;
2325
+ this.eref = eref;
2326
+ this.data = [];
2224
2327
  }
2225
- onSearch(value) {
2226
- this.searchTerm = value;
2227
- this.gridState.skip = 0;
2228
- this.getFilteredData();
2328
+ get control() {
2329
+ return this.parent.form.get(this.fieldName);
2229
2330
  }
2230
- getAllData() {
2231
- const state = Object.assign({}, this.gridState);
2232
- delete state.skip;
2233
- delete state.take;
2234
- return this.service.getPage(state);
2331
+ async ngOnChanges() {
2332
+ await this.getData();
2333
+ this.control.setValue((this.data.find((d) => d.id === this.control.value) || this.data[0]).id);
2235
2334
  }
2236
- getRowClass(context) {
2237
- return this.rowClass && context
2238
- ? this.rowClass(context.dataItem, context.index)
2239
- : {};
2335
+ getData() {
2336
+ this.service
2337
+ .getPage(this.filter ? { filter: this.filter } : {})
2338
+ .subscribe((data) => (this.data = data.data));
2240
2339
  }
2241
- getFilteredData() {
2242
- this.gridState.filter = this.getFilter();
2243
- this.router.navigate([], {
2244
- relativeTo: this.route,
2245
- fragment: urlSerialize(this.gridState),
2246
- });
2340
+ }
2341
+ FieldDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownComponent, deps: [{ token: i1$3.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2342
+ FieldDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldDropdownComponent, selector: "field-dropdown", inputs: { service: "service", rebind: "rebind", filter: "filter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""], components: [{ type: i3$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe }, viewProviders: [
2343
+ { provide: ControlContainer, useExisting: FormGroupDirective },
2344
+ ] });
2345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownComponent, decorators: [{
2346
+ type: Component,
2347
+ args: [{ selector: 'field-dropdown', viewProviders: [
2348
+ { provide: ControlContainer, useExisting: FormGroupDirective },
2349
+ ], template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""] }]
2350
+ }], ctorParameters: function () { return [{ type: i1$3.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2351
+ type: Input
2352
+ }], rebind: [{
2353
+ type: Input
2354
+ }], filter: [{
2355
+ type: Input
2356
+ }] } });
2357
+
2358
+ class FieldMultiSelectComponent extends FieldComponent {
2359
+ constructor(parent, eref) {
2360
+ super(parent, eref, []);
2361
+ this.parent = parent;
2362
+ this.eref = eref;
2363
+ this.data = [];
2247
2364
  }
2248
- updateGrid(data) {
2249
- const exists = this.page.data.filter((x) => x.id === data.id);
2250
- if (exists.length) {
2251
- this.page.data[this.page.data.indexOf(exists[0])] = data;
2252
- return;
2253
- }
2254
- this.page.total++;
2255
- this.page.data.splice(0, 0, data);
2256
- if (this.page.data.length > this.gridState.take) {
2257
- this.page.data.splice(this.page.data.length - 1, 1);
2258
- }
2259
- this.selected[0] = data.id;
2260
- this.router.navigate([data.id], {
2261
- relativeTo: this.route,
2262
- preserveFragment: true,
2263
- });
2365
+ get control() {
2366
+ return this.parent.form.get(this.fieldName);
2264
2367
  }
2265
- async remove(entity) {
2266
- this.loadings++;
2267
- this.service.delete(entity.id).subscribe(() => {
2268
- if (this.selected.length &&
2269
- this.selected[this.selected.length - 1] === entity.id) {
2270
- this.router.navigate(['../'], {
2271
- preserveFragment: true,
2272
- relativeTo: this.route.firstChild,
2273
- });
2274
- }
2275
- this.loadings--;
2368
+ ngOnChanges() {
2369
+ this.getData().subscribe((data) => {
2370
+ this.data = data.data;
2371
+ this.control.setValue(this.control.value.filter((x) => this.data.filter((d) => d.id === x).length));
2276
2372
  });
2277
- this.getData();
2278
2373
  }
2279
2374
  getData() {
2280
- this.loadings++;
2281
- this.service.getPage(this.gridState).subscribe((page) => {
2282
- this.page = page;
2283
- this.loadings--;
2284
- });
2285
- }
2286
- getFilter() {
2287
- const filter = {
2288
- logic: 'and',
2289
- filters: this.searchTerm
2290
- ? [
2291
- { field: nameField, operator: 'contains', value: this.searchTerm },
2292
- ...this.filters,
2293
- ]
2294
- : this.filters,
2295
- };
2296
- return filter;
2297
- }
2298
- onFilterChange() {
2299
- const filter = this.gridState.filter?.filters.find((x) => x.field === nameField);
2300
- this.searchTerm = filter?.value;
2301
- this.filterChange.emit(this.gridState.filter);
2302
- }
2303
- async restoreGridState(params) {
2304
- const defaultGridState = {
2305
- sort: this.defaultSort || [{ field: nameField, dir: 'asc' }],
2306
- skip: 0,
2307
- take: 10,
2308
- };
2309
- const state = urlDeserialize(params);
2310
- this.gridState = state.hasOwnProperty('take') ? state : defaultGridState;
2311
- this.onFilterChange();
2312
- this.getData();
2375
+ return this.service.getPage(this.filter ? { filter: this.filter } : {});
2313
2376
  }
2314
2377
  }
2315
- EntityListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityListComponent, deps: [{ token: i1.TranslateService }, { token: i1$4.ActivatedRoute }, { token: i1$4.Router }], target: i0.ɵɵFactoryTarget.Component });
2316
- EntityListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: EntityListComponent, selector: "entity-list", inputs: { service: "service", filters: "filters", fields: "fields", commands: "commands", rowClass: "rowClass", defaultSort: "defaultSort" }, outputs: { filterChange: "filterChange" }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["confirmDialog"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", styles: [""], components: [{ type: i3$4.GridComponent, selector: "kendo-grid", inputs: ["data", "scrollable", "selectable", "trackBy", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "autoSize", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "skip", "sort", "group", "navigatable", "rowClass", "rowSticky", "rowSelected", "cellSelected", "isDetailExpanded", "isGroupExpanded", "pageSize", "height", "rowHeight", "detailRowHeight", "filter"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { type: ExcelExportButtonComponent, selector: "excel-export-button" }, { type: i3$4.ExcelComponent, selector: "kendo-grid-excel", inputs: ["fileName", "filterable", "creator", "date", "forceProxy", "proxyURL", "fetchData", "paddingCellOptions", "headerPaddingCellOptions", "collapsible"] }, { type: i3$4.CommandColumnComponent, selector: "kendo-grid-command-column" }, { type: i3$4.ColumnComponent, selector: "kendo-grid-column", inputs: ["sortable", "groupable", "editor", "filter", "filterable", "editable", "field", "format"] }, { type: i3$4.GridSpacerComponent, selector: "kendo-grid-spacer, kendo-pager-spacer", inputs: ["width"] }, { type: i3$4.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { type: i3$4.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { type: i3$4.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { type: i3$4.PagerInfoComponent, selector: "kendo-pager-info" }, { type: ConfirmDialogComponent, selector: "confirm-dialog" }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: DebounceDirective, selector: "[appDebounce]", inputs: ["debounceTime"], outputs: ["debounceKeyup"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$4.SelectionDirective, selector: "[kendoGridSelectBy]" }, { type: i3$4.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { type: i3$4.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { type: i3$4.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { type: i3$4.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$4.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { type: i3$4.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { type: i1$4.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i1.TranslatePipe } });
2317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: EntityListComponent, decorators: [{
2378
+ FieldMultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldMultiSelectComponent, deps: [{ token: i1$3.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2379
+ FieldMultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldMultiSelectComponent, selector: "field-multiselect", inputs: { service: "service", rebind: "rebind", filter: "filter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"false\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-multiselect>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""], components: [{ type: i3$4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i1.TranslatePipe }, viewProviders: [
2380
+ { provide: ControlContainer, useExisting: FormGroupDirective },
2381
+ ] });
2382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldMultiSelectComponent, decorators: [{
2318
2383
  type: Component,
2319
- args: [{ selector: 'entity-list', template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate>\n <button\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <i class=\"k-icon glyphicon glyphicon-trash\"></i>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <i *ngIf=\"command.iconClass\" class=\"{{ command.iconClass }}\"></i>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ 'Messages.NoRecords' | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"10\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", styles: [""] }]
2320
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i1$4.ActivatedRoute }, { type: i1$4.Router }]; }, propDecorators: { service: [{
2321
- type: Input
2322
- }], filters: [{
2323
- type: Input
2324
- }], fields: [{
2325
- type: Input
2326
- }], commands: [{
2384
+ args: [{ selector: 'field-multiselect', viewProviders: [
2385
+ { provide: ControlContainer, useExisting: FormGroupDirective },
2386
+ ], template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"false\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-multiselect>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate: { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""] }]
2387
+ }], ctorParameters: function () { return [{ type: i1$3.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2327
2388
  type: Input
2328
- }], rowClass: [{
2389
+ }], rebind: [{
2329
2390
  type: Input
2330
- }], defaultSort: [{
2391
+ }], filter: [{
2331
2392
  type: Input
2332
- }], filterChange: [{
2333
- type: Output
2334
- }], dialog: [{
2335
- type: ViewChild,
2336
- args: ['confirmDialog', { static: true }]
2337
2393
  }] } });
2338
2394
 
2339
2395
  const All = 'All';
@@ -2368,7 +2424,7 @@ class FieldDropdownlistComponent {
2368
2424
  }
2369
2425
  }
2370
2426
  FieldDropdownlistComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownlistComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
2371
- FieldDropdownlistComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldDropdownlistComponent, selector: "field-dropdownlist", inputs: { service: "service", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "kendoDropDown", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div class=\"header-selection-field\">\n <label\n for=\"{{ '_' + label }}\"\n class=\"title-field\"\n translate=\"{{ label }}\"\n ></label>\n <kendo-dropdownlist\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n id=\"{{ '_' + label }}\"\n (valueChange)=\"onValueChange($event)\"\n [defaultItem]=\"defaultItem\"\n #inputElement\n >\n </kendo-dropdownlist>\n</div>\n", styles: [""], components: [{ type: i3$3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] });
2427
+ FieldDropdownlistComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: FieldDropdownlistComponent, selector: "field-dropdownlist", inputs: { service: "service", label: "label" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "kendoDropDown", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div class=\"header-selection-field\">\n <label\n for=\"{{ '_' + label }}\"\n class=\"title-field\"\n translate=\"{{ label }}\"\n ></label>\n <kendo-dropdownlist\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n id=\"{{ '_' + label }}\"\n (valueChange)=\"onValueChange($event)\"\n [defaultItem]=\"defaultItem\"\n #inputElement\n >\n </kendo-dropdownlist>\n</div>\n", styles: [""], components: [{ type: i3$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["listHeight", "disabled", "readonly", "filterable", "ignoreCase", "delay", "tabindex", "id", "data", "value", "popupSettings", "itemDisabled", "virtual", "valuePrimitive", "tabIndex", "size", "rounded", "fillMode", "iconClass", "loading", "textField", "valueField", "defaultItem"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] });
2372
2428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: FieldDropdownlistComponent, decorators: [{
2373
2429
  type: Component,
2374
2430
  args: [{ selector: 'field-dropdownlist', template: "<div class=\"header-selection-field\">\n <label\n for=\"{{ '_' + label }}\"\n class=\"title-field\"\n translate=\"{{ label }}\"\n ></label>\n <kendo-dropdownlist\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n id=\"{{ '_' + label }}\"\n (valueChange)=\"onValueChange($event)\"\n [defaultItem]=\"defaultItem\"\n #inputElement\n >\n </kendo-dropdownlist>\n</div>\n", styles: [""] }]
@@ -2556,7 +2612,8 @@ KendoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
2556
2612
  CurrentTimezoneComponent,
2557
2613
  ModalWindowComponent,
2558
2614
  LiveUpdatesControlComponent,
2559
- AzureLoginCallbackComponent], imports: [CommonModule,
2615
+ AzureLoginCallbackComponent,
2616
+ UserListAdminComponent], imports: [CommonModule,
2560
2617
  RouterModule,
2561
2618
  IndiginaModule, i2$1.OAuthModule, PopupModule,
2562
2619
  GridModule,
@@ -2604,7 +2661,8 @@ KendoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
2604
2661
  ModalWindowComponent,
2605
2662
  LiveUpdatesControlComponent,
2606
2663
  MsalModule,
2607
- AzureLoginCallbackComponent] });
2664
+ AzureLoginCallbackComponent,
2665
+ UserListAdminComponent] });
2608
2666
  KendoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KendoModule, providers: [
2609
2667
  { provide: OAuthStorage, useValue: localStorage },
2610
2668
  {
@@ -2673,6 +2731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
2673
2731
  ModalWindowComponent,
2674
2732
  LiveUpdatesControlComponent,
2675
2733
  AzureLoginCallbackComponent,
2734
+ UserListAdminComponent,
2676
2735
  ],
2677
2736
  imports: [
2678
2737
  CommonModule,
@@ -2741,6 +2800,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
2741
2800
  LiveUpdatesControlComponent,
2742
2801
  MsalModule,
2743
2802
  AzureLoginCallbackComponent,
2803
+ UserListAdminComponent,
2744
2804
  ],
2745
2805
  }]
2746
2806
  }] });
@@ -3062,28 +3122,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
3062
3122
  type: Injectable
3063
3123
  }], ctorParameters: function () { return [{ type: i1$4.ActivatedRoute }, { type: i1$4.Router }]; } });
3064
3124
 
3065
- class EntityService {
3066
- constructor(httpService, endpoints) {
3067
- this.httpService = httpService;
3068
- this.endpoints = endpoints;
3069
- }
3070
- getPage(state) {
3071
- return this.httpService.get(this.endpoints.query(state));
3072
- }
3073
- get(id) {
3074
- return this.httpService.get(this.endpoints.entityPath(id));
3075
- }
3076
- delete(id) {
3077
- return this.httpService.delete(this.endpoints.entityPath(id));
3078
- }
3079
- save(model) {
3080
- if (model.id) {
3081
- return this.httpService.put(this.endpoints.entityPath(model.id), model);
3082
- }
3083
- return this.httpService.post(this.endpoints.path, model);
3084
- }
3085
- }
3086
-
3087
3125
  class EntityEditComponent {
3088
3126
  constructor(service) {
3089
3127
  this.service = service;
@@ -3112,5 +3150,5 @@ const momentTimezone = momentModule;
3112
3150
  * Generated bundle index. Do not edit.
3113
3151
  */
3114
3152
 
3115
- export { AccountMenuComponent, AccountService, ActivityFilterComponent, ActivityFilterService, AppSettings, AppToastrService, AuthProvider, AuthProviderResolver, AzureLoginCallbackComponent, BaseAccountService, ConfirmDialogComponent, CurrentTimezoneComponent, DebounceDirective, EntityEditButtonsBarComponent, EntityEditComponent, EntityEditFormComponent, EntityListComponent, EntityService, EventNames, ExcelExportButtonComponent, FieldComponent, FieldDropdownComponent, FieldDropdownlistComponent, FieldInputComponent, FieldMultiSelectComponent, FieldTypes, FilterTargets, FooterBarComponent, FormGroupWithErrors, GeneralErrorsComponent, HttpCodes, HttpMethods, HttpService, IndiginaConfiguration, IndiginaModule, KendoModule, LanguageSelectorComponent, LiveUpdatesControlComponent, LocaleSettingsService, MSALInstanceFactory, MemberTypes, ModalWindowComponent, MulticheckFilterComponent, NumberInputComponent, Operators, PermissionTypes, PermissionsService, ReEntrySubscription, RequirePermissionDirective, SettingsService, SideMenuComponent, SignalRService, TopMenuComponent, TreeViewComponent, buildActivityEndpoints, buildEntityEndpoints, endpoints, momentTimezone, urlDeserialize, urlSerialize };
3153
+ export { AccountMenuComponent, AccountService, ActivityFilterComponent, ActivityFilterService, AppSettings, AppToastrService, AuthProvider, AuthProviderResolver, AzureLoginCallbackComponent, BaseAccountService, ConfirmDialogComponent, CurrentTimezoneComponent, DebounceDirective, EntityEditButtonsBarComponent, EntityEditComponent, EntityEditFormComponent, EntityListComponent, EntityService, EventNames, ExcelExportButtonComponent, FieldComponent, FieldDropdownComponent, FieldDropdownlistComponent, FieldInputComponent, FieldMultiSelectComponent, FieldTypes, FilterTargets, FooterBarComponent, FormGroupWithErrors, GeneralErrorsComponent, HttpCodes, HttpMethods, HttpService, IndiginaConfiguration, IndiginaModule, KendoModule, LanguageSelectorComponent, LiveUpdatesControlComponent, LocaleSettingsService, MSALInstanceFactory, MemberTypes, ModalWindowComponent, MulticheckFilterComponent, NumberInputComponent, Operators, PermissionTypes, PermissionsService, ReEntrySubscription, RequirePermissionDirective, SettingsService, SideMenuComponent, SignalRService, TopMenuComponent, TreeViewComponent, UserListAdminComponent, buildActivityEndpoints, buildEntityEndpoints, endpoints, momentTimezone, urlDeserialize, urlSerialize };
3116
3154
  //# sourceMappingURL=indigina-kendo.mjs.map