ngx-techlify-core 11.3.6 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/bundles/ngx-techlify-core.umd.js +268 -96
  2. package/bundles/ngx-techlify-core.umd.js.map +1 -1
  3. package/bundles/ngx-techlify-core.umd.min.js +2 -2
  4. package/bundles/ngx-techlify-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +7 -9
  6. package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +7 -9
  7. package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +2 -2
  8. package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +2 -2
  9. package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +11 -2
  10. package/esm2015/lib/searchable-selector/searchable-selector.component.js +34 -4
  11. package/esm2015/lib/techlify-feature/on-off-switch/on-off-switch.component.js +27 -0
  12. package/esm2015/lib/techlify-feature/techlify-feature-enabled.directive.js +78 -0
  13. package/esm2015/lib/techlify-feature/techlify-feature-listing.component.js +177 -0
  14. package/esm2015/lib/techlify-feature/techlify-feature.module.js +30 -0
  15. package/esm2015/lib/techlify-feature/techlify-feature.routing.js +12 -0
  16. package/esm2015/lib/techlify-feature/techlify-feature.service.js +28 -0
  17. package/esm2015/lib/timeline-filter/calculate-timeline.js +2 -2
  18. package/esm2015/lib/timeline-filter/timeline-filter.component.js +145 -16
  19. package/esm2015/ngx-techlify-core.js +6 -3
  20. package/esm2015/public-api.js +5 -6
  21. package/fesm2015/ngx-techlify-core.js +221 -61
  22. package/fesm2015/ngx-techlify-core.js.map +1 -1
  23. package/lib/login-history-for-user/login-history-for-user.component.d.ts +2 -0
  24. package/lib/searchable-selector/searchable-selector.component.d.ts +5 -0
  25. package/lib/{company-feature → techlify-feature}/on-off-switch/on-off-switch.component.d.ts +0 -0
  26. package/lib/techlify-feature/techlify-feature-enabled.directive.d.ts +17 -0
  27. package/lib/{company-feature/company-feature.component.d.ts → techlify-feature/techlify-feature-listing.component.d.ts} +7 -4
  28. package/lib/techlify-feature/techlify-feature.module.d.ts +2 -0
  29. package/lib/techlify-feature/techlify-feature.routing.d.ts +2 -0
  30. package/lib/{company-feature/company-feature.service.d.ts → techlify-feature/techlify-feature.service.d.ts} +1 -1
  31. package/lib/timeline-filter/calculate-timeline.d.ts +5 -0
  32. package/lib/timeline-filter/timeline-filter.component.d.ts +47 -6
  33. package/ngx-techlify-core.d.ts +5 -2
  34. package/ngx-techlify-core.metadata.json +1 -1
  35. package/package.json +1 -1
  36. package/public-api.d.ts +4 -5
  37. package/esm2015/lib/company-feature/company-feature.component.js +0 -174
  38. package/esm2015/lib/company-feature/company-feature.module.js +0 -30
  39. package/esm2015/lib/company-feature/company-feature.routing.js +0 -12
  40. package/esm2015/lib/company-feature/company-feature.service.js +0 -28
  41. package/esm2015/lib/company-feature/ngx-feature-enabled.directive.js +0 -77
  42. package/esm2015/lib/company-feature/on-off-switch/on-off-switch.component.js +0 -27
  43. package/lib/company-feature/company-feature.module.d.ts +0 -2
  44. package/lib/company-feature/company-feature.routing.d.ts +0 -2
  45. package/lib/company-feature/ngx-feature-enabled.directive.d.ts +0 -16
@@ -4,7 +4,7 @@ import { __decorate, __awaiter } from 'tslib';
4
4
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
5
5
  import { MatSort, MatSortModule } from '@angular/material/sort';
6
6
  import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
7
- import { Location, CommonModule } from '@angular/common';
7
+ import { Location, DatePipe, CommonModule } from '@angular/common';
8
8
  import { Validators, FormBuilder, FormControl, NgControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
9
  import { HttpResponse, HttpClient, HttpHandler, HttpClientModule } from '@angular/common/http';
10
10
  import { throwError, Observable, Subject, of, from, fromEvent } from 'rxjs';
@@ -1829,6 +1829,9 @@ let SearchableSelectorComponent = SearchableSelectorComponent_1 = class Searchab
1829
1829
  this.edit = false;
1830
1830
  this.sort = true;
1831
1831
  this.items = [];
1832
+ this.cache = false;
1833
+ this.perPage = 25;
1834
+ this.inDataSearch = false;
1832
1835
  this.selectionChange = new EventEmitter();
1833
1836
  this.itemsChange = new EventEmitter();
1834
1837
  this.isLoading = false;
@@ -1839,6 +1842,7 @@ let SearchableSelectorComponent = SearchableSelectorComponent_1 = class Searchab
1839
1842
  this.controlType = 'searchable-selctor';
1840
1843
  this.id = `searchable-selctor-${SearchableSelectorComponent_1.nextId++}`;
1841
1844
  this.describedBy = '';
1845
+ this.cachedItems = [];
1842
1846
  this._required = false;
1843
1847
  this._disabled = false;
1844
1848
  this.selectorForm = formBuilder.group({
@@ -1908,7 +1912,7 @@ let SearchableSelectorComponent = SearchableSelectorComponent_1 = class Searchab
1908
1912
  this.search(value);
1909
1913
  });
1910
1914
  this.filters = {
1911
- perPage: 25,
1915
+ perPage: this.perPage,
1912
1916
  search: '',
1913
1917
  page: 1,
1914
1918
  lastPage: 1
@@ -1923,8 +1927,15 @@ let SearchableSelectorComponent = SearchableSelectorComponent_1 = class Searchab
1923
1927
  }
1924
1928
  fetchItemList() {
1925
1929
  this.isLoading = true;
1926
- of().pipe(startWith(true), switchMap((_) => from(this.http.get(this.apiUrl, { params: this.filters }))), finalize(() => this.isLoading = false), untilDestroyed(this)).subscribe((result) => {
1930
+ let request = this.http.get(this.apiUrl, { params: this.filters });
1931
+ if (this.cache) {
1932
+ request = this.http.cache().get(this.apiUrl, { params: this.filters });
1933
+ }
1934
+ of().pipe(startWith(true), switchMap((_) => from(request)), finalize(() => this.isLoading = false), untilDestroyed(this)).subscribe((result) => {
1927
1935
  this.items = this.items.concat(result.data);
1936
+ if (this.cache) {
1937
+ this.cachedItems = this.items;
1938
+ }
1928
1939
  this.filters.page = result.current_page;
1929
1940
  this.filters.lastPage = result.last_page;
1930
1941
  });
@@ -1993,7 +2004,23 @@ let SearchableSelectorComponent = SearchableSelectorComponent_1 = class Searchab
1993
2004
  else {
1994
2005
  this.filters.search = event;
1995
2006
  }
1996
- this.reloadData();
2007
+ // we need search field to search in data
2008
+ if (this.inDataSearch && this.searchField) {
2009
+ this.filterItems(event);
2010
+ }
2011
+ else {
2012
+ this.reloadData();
2013
+ }
2014
+ }
2015
+ filterItems(event) {
2016
+ if (event) {
2017
+ this.items = this.cachedItems.filter((value) => {
2018
+ return value[this.searchField].toLowerCase().search(event.toLowerCase()) != -1;
2019
+ });
2020
+ }
2021
+ else {
2022
+ this.items = this.cachedItems;
2023
+ }
1997
2024
  }
1998
2025
  addItem(event) {
1999
2026
  const dialogRef = this.dialog.open(this.itemComponent, Object.assign({ width: '400px', autoFocus: false, data: {} }, this.addConfig));
@@ -2065,6 +2092,9 @@ SearchableSelectorComponent.propDecorators = {
2065
2092
  searchField: [{ type: Input }],
2066
2093
  itemComponent: [{ type: Input }],
2067
2094
  items: [{ type: Input }],
2095
+ cache: [{ type: Input }],
2096
+ perPage: [{ type: Input }],
2097
+ inDataSearch: [{ type: Input }],
2068
2098
  selectionChange: [{ type: Output }],
2069
2099
  itemsChange: [{ type: Output }],
2070
2100
  required: [{ type: Input }],
@@ -2290,7 +2320,7 @@ function calculateTimeline(value) {
2290
2320
  }
2291
2321
  case 4: { // This Week
2292
2322
  var first = date.getDate() - date.getDay() + 1; // First day is the day of the month - the day of the week
2293
- var last = first + 6; // last day is the first day + 6
2323
+ var last = first + 6; // last day is the first day + 6
2294
2324
  data.date_from = new Date(date.setDate(first));
2295
2325
  data.date_to = new Date(date.setDate(last));
2296
2326
  break;
@@ -2369,8 +2399,11 @@ Timeline.THIS_YEAR = 10;
2369
2399
  Timeline.LAST_YEAR = 11;
2370
2400
  Timeline.ALL = 12;
2371
2401
 
2372
- let TimelineFilterComponent = class TimelineFilterComponent {
2373
- constructor() {
2402
+ var TimelineFilterComponent_1;
2403
+ let TimelineFilterComponent = TimelineFilterComponent_1 = class TimelineFilterComponent {
2404
+ constructor(formBuilder, ngControl, datePipe) {
2405
+ this.ngControl = ngControl;
2406
+ this.datePipe = datePipe;
2374
2407
  this.timelineValue = new FormControl('');
2375
2408
  this.timelines = [
2376
2409
  { value: 1, viewValue: 'Custom' },
@@ -2386,20 +2419,73 @@ let TimelineFilterComponent = class TimelineFilterComponent {
2386
2419
  { value: 11, viewValue: 'Last Year' },
2387
2420
  { value: 12, viewValue: 'All dates' },
2388
2421
  ];
2389
- this.labelText = 'Select Timeline';
2390
2422
  this.dateFrom = 'date_from';
2391
2423
  this.dateTo = 'date_to';
2392
2424
  this.appearance = "legacy";
2393
2425
  this.showClearbutton = false;
2426
+ /**
2427
+ * @deprecated The form input is deprated
2428
+ */
2429
+ this.form = null;
2430
+ this.labelText = 'Select Timeline';
2431
+ this.touchUi = true;
2432
+ this.selectedValueChange = new EventEmitter();
2433
+ this.selectionChange = new EventEmitter();
2434
+ this.onChange = () => { };
2435
+ this.onTouched = () => { };
2436
+ this.stateChanges = new Subject();
2437
+ this.controlType = 'timeline-filter';
2438
+ this.id = `timeline-filter-${TimelineFilterComponent_1.nextId++}`;
2439
+ this.describedBy = '';
2394
2440
  this.showCustomDateFields = false;
2441
+ this._required = false;
2442
+ this._disabled = false;
2443
+ this.selectorForm = formBuilder.group({
2444
+ select_value: [null],
2445
+ });
2446
+ if (this.ngControl != null) {
2447
+ this.ngControl.valueAccessor = this;
2448
+ }
2395
2449
  }
2396
2450
  set defaultValue(value) {
2397
2451
  this.timelineValue.setValue(value);
2398
2452
  this.changeTimeline(value);
2399
2453
  }
2400
- ngOnInit() {
2401
- this.timelineValue.valueChanges.
2402
- pipe(debounceTime(100), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => this.changeTimeline(value));
2454
+ get required() { return this._required; }
2455
+ set required(value) {
2456
+ this.selectorForm.get('select_value').setValidators(Validators.required);
2457
+ this._required = coerceBooleanProperty(value);
2458
+ this.stateChanges.next();
2459
+ }
2460
+ get disabled() { return this._disabled; }
2461
+ set disabled(value) {
2462
+ this._disabled = coerceBooleanProperty(value);
2463
+ this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();
2464
+ this.stateChanges.next();
2465
+ }
2466
+ get value() {
2467
+ if (this.selectorForm.valid) {
2468
+ return this.selectorForm.value.select_value;
2469
+ }
2470
+ return '';
2471
+ }
2472
+ set value(data) {
2473
+ this.selectorForm.patchValue({ select_value: data || '' });
2474
+ this._handleInput();
2475
+ this.stateChanges.next();
2476
+ }
2477
+ getDateRangeString() {
2478
+ var _a, _b, _c, _d, _e, _f, _g;
2479
+ let str = "";
2480
+ if ((_a = this.selectedRange) === null || _a === void 0 ? void 0 : _a.show_custom_field) {
2481
+ if (((_b = this.selectedRange) === null || _b === void 0 ? void 0 : _b.date_from.toUTCString()) != 'Invalid Date') {
2482
+ str += ' - ' + this.datePipe.transform((_d = (_c = this.selectedRange) === null || _c === void 0 ? void 0 : _c.date_from) === null || _d === void 0 ? void 0 : _d.toUTCString());
2483
+ }
2484
+ if (((_e = this.selectedRange) === null || _e === void 0 ? void 0 : _e.date_to.toUTCString()) != 'Invalid Date') {
2485
+ str += ' - ' + this.datePipe.transform((_g = (_f = this.selectedRange) === null || _f === void 0 ? void 0 : _f.date_to) === null || _g === void 0 ? void 0 : _g.toUTCString());
2486
+ }
2487
+ }
2488
+ return str;
2403
2489
  }
2404
2490
  resetFieldValue(field) {
2405
2491
  this.form.get(field).setValue('');
@@ -2418,27 +2504,96 @@ let TimelineFilterComponent = class TimelineFilterComponent {
2418
2504
  this.showCustomDateFields = timeline.show_custom_field;
2419
2505
  }
2420
2506
  }
2507
+ _handleInput() {
2508
+ if (this.value == 1) {
2509
+ this.picker.open();
2510
+ return;
2511
+ }
2512
+ const range = calculateTimeline(this.value);
2513
+ this.selectedRange = range;
2514
+ this.onChange(this.value);
2515
+ this.selectedValueChange.emit(this.selectedValue);
2516
+ this.selectionChange.emit(range);
2517
+ }
2518
+ dateRangeChange(dateRangeStart, dateRangeEnd) {
2519
+ const range = {
2520
+ date_from: new Date(dateRangeStart.value),
2521
+ date_to: new Date(dateRangeEnd.value),
2522
+ show_custom_field: true
2523
+ };
2524
+ this.selectedRange = range;
2525
+ this.onChange(this.value);
2526
+ this.selectedValueChange.emit(this.selectedValue);
2527
+ this.selectionChange.emit(range);
2528
+ }
2529
+ onCustomDateChange(event) {
2530
+ }
2531
+ setDescribedByIds(ids) {
2532
+ this.describedBy = ids.join(' ');
2533
+ }
2534
+ onContainerClick(event) {
2535
+ event.stopPropagation();
2536
+ }
2537
+ writeValue(data) {
2538
+ this.value = data;
2539
+ }
2540
+ registerOnChange(fn) {
2541
+ this.onChange = fn;
2542
+ }
2543
+ registerOnTouched(fn) {
2544
+ this.onTouched = fn;
2545
+ }
2546
+ setDisabledState(isDisabled) {
2547
+ this.disabled = isDisabled;
2548
+ }
2549
+ ngOnInit() {
2550
+ console.log(this.form);
2551
+ this.timelineValue.valueChanges.
2552
+ pipe(debounceTime(100), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => this.changeTimeline(value));
2553
+ }
2554
+ ngOnDestroy() {
2555
+ this.stateChanges.complete();
2556
+ }
2421
2557
  };
2558
+ TimelineFilterComponent.nextId = 0;
2422
2559
  TimelineFilterComponent.decorators = [
2423
2560
  { type: Component, args: [{
2424
2561
  selector: 'app-timeline-filter',
2425
- template: "<ng-container [formGroup]=\"form\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select [formControl]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button mat-button *ngIf=\"showClearbutton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>From Date</mat-label>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>To Date</mat-label>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>",
2562
+ template: "<ng-container *ngIf=\"form\" [formGroup]=\"form\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select [formControl]=\"timelineValue\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button mat-button *ngIf=\"showClearbutton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"showCustomDateFields\">\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>From Date</mat-label>\n <input matInput formControlName=\"{{dateFrom}}\" [matDatepicker]=\"fromPicker\" (click)=\"fromPicker.open()\"\n placeholder=\"From Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"fromPicker\"></mat-datepicker-toggle>\n <mat-datepicker #fromPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateFrom)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateFrom)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>To Date</mat-label>\n <input matInput formControlName=\"{{dateTo}}\" [matDatepicker]=\"toPicker\" (click)=\"toPicker.open()\"\n placeholder=\"To Date\" readonly />\n <mat-datepicker-toggle matSuffix [for]=\"\"></mat-datepicker-toggle>\n <mat-datepicker #toPicker></mat-datepicker>\n <button mat-button *ngIf=\"getFieldValue(dateTo)\" matSuffix mat-icon-button\n (click)=\"resetFieldValue(dateTo)\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n </ng-container>\n</ng-container>\n<div *ngIf=\"!form\" [formGroup]=\"selectorForm\">\n <mat-select formControlName=\"select_value\" focused=\"false\" [required]=\"required\"\n autocomplete=\"off\" (selectionChange)=\"_handleInput()\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline?.value\">\n {{ timeline?.viewValue }} {{ selectedRange?.show_custom_field && timeline?.value == 1 ? getDateRangeString() : '' }}\n </mat-option>\n </mat-select>\n <mat-date-range-input hidden (dateChange)=\"onCustomDateChange($event)\" [rangePicker]=\"picker\">\n <input matStartDate #customStartDate>\n <input matEndDate (dateChange)=\"dateRangeChange(customStartDate, customEndDate)\" #customEndDate>\n </mat-date-range-input>\n <mat-date-range-picker #picker [touchUi]=\"touchUi\"></mat-date-range-picker>\n</div>\n",
2563
+ providers: [
2564
+ {
2565
+ provide: MatFormFieldControl,
2566
+ useExisting: TimelineFilterComponent_1
2567
+ }
2568
+ ],
2426
2569
  styles: [""]
2427
2570
  },] }
2428
2571
  ];
2429
- TimelineFilterComponent.ctorParameters = () => [];
2572
+ TimelineFilterComponent.ctorParameters = () => [
2573
+ { type: FormBuilder },
2574
+ { type: NgControl, decorators: [{ type: Optional }, { type: Self }] },
2575
+ { type: DatePipe }
2576
+ ];
2430
2577
  TimelineFilterComponent.propDecorators = {
2578
+ picker: [{ type: ViewChild, args: ['picker',] }],
2431
2579
  timelineValue: [{ type: Input }],
2432
2580
  timelines: [{ type: Input }],
2433
- labelText: [{ type: Input }],
2434
2581
  dateFrom: [{ type: Input }],
2435
2582
  dateTo: [{ type: Input }],
2436
2583
  appearance: [{ type: Input }],
2437
2584
  showClearbutton: [{ type: Input }],
2438
2585
  form: [{ type: Input }],
2439
- defaultValue: [{ type: Input }]
2586
+ labelText: [{ type: Input }],
2587
+ selectedValue: [{ type: Input }],
2588
+ touchUi: [{ type: Input }],
2589
+ selectedValueChange: [{ type: Output }],
2590
+ selectionChange: [{ type: Output }],
2591
+ defaultValue: [{ type: Input }],
2592
+ required: [{ type: Input }],
2593
+ disabled: [{ type: Input }],
2594
+ value: [{ type: Input }]
2440
2595
  };
2441
- TimelineFilterComponent = __decorate([
2596
+ TimelineFilterComponent = TimelineFilterComponent_1 = __decorate([
2442
2597
  UntilDestroy()
2443
2598
  ], TimelineFilterComponent);
2444
2599
 
@@ -3442,7 +3597,7 @@ let EmailSubscriptionUserListFilterComponent = class EmailSubscriptionUserListFi
3442
3597
  EmailSubscriptionUserListFilterComponent.decorators = [
3443
3598
  { type: Component, args: [{
3444
3599
  selector: 'app-email-subscription-user-list-filter',
3445
- template: "<form [formGroup]=\"esUserFilterForm\" fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" fxLayoutAlign=\"start center\">\n <mat-form-field class=\"ml-3\">\n <mat-label>User</mat-label>\n <app-searchable-selector formControlName=\"user_id\" apiUrl=\"api/users\" titleField=\"name\">\n </app-searchable-selector>\n <button mat-button *ngIf=\"getFieldValue('user_id')\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('user_id')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class=\"ml-3\">\n <mat-label>Email Type</mat-label>\n <app-searchable-selector formControlName=\"email_type_id\" apiUrl=\"api/email-subscription-types\">\n </app-searchable-selector>\n <button mat-button *ngIf=\"getFieldValue('user_id')\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('user_id')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</form>",
3600
+ template: "<form [formGroup]=\"esUserFilterForm\" fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" fxLayoutAlign=\"start center\">\n <mat-form-field class=\"ml-3\">\n <mat-label>User</mat-label>\n <app-searchable-selector formControlName=\"user_id\" apiUrl=\"api/users\" titleField=\"name\">\n </app-searchable-selector>\n <button mat-button *ngIf=\"getFieldValue('user_id')\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('user_id')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field class=\"ml-3\">\n <mat-label>Email Type</mat-label>\n <app-searchable-selector formControlName=\"email_type_id\" apiUrl=\"api/email-subscription-types\">\n </app-searchable-selector>\n <button mat-button *ngIf=\"getFieldValue('email_type_id')\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('email_type_id')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n</form>",
3446
3601
  styles: [""]
3447
3602
  },] }
3448
3603
  ];
@@ -3762,7 +3917,7 @@ let EmailSubscriptionTypeListComponent = class EmailSubscriptionTypeListComponen
3762
3917
  EmailSubscriptionTypeListComponent.decorators = [
3763
3918
  { type: Component, args: [{
3764
3919
  selector: 'app-email-subscription-type-list',
3765
- template: "<div class=\"mat-typography m-4\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <mat-form-field>\n <input matInput [formControl]=\"search\" placeholder=\"Email Type\" autocomplete=\"off\" />\n <button mat-button matSuffix mat-icon-button>\n <mat-icon>search</mat-icon>\n </button>\n <button mat-button *ngIf=\"search.value\" matSuffix mat-icon-button (click)=\"search.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"ml-2\">\n <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"addEmailSubscriptionType()\">+ Email\n Type</button>\n </div>\n <span fxFlex></span>\n <mat-form-field appearance=\"outline\" class=\"no-padding\">\n <mat-label>Columns</mat-label>\n <mat-select [formControl]=\"displayColumns\" multiple (selectionChange)=\"columnsChange()\">\n <mat-option *ngFor=\"let column of availableDisplayColumns\" [value]=\"column.value\">{{column.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"emailSubscriptionTypeList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"email-subscription-type-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Title </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.title }} </td>\n </ng-container>\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Code </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.code }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"frequency.title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Code </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.frequency?.title }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.description }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType\">\n <button type=\"button\" mat-icon-button\n (click)=\"deleteEmailSubscriptionType($event,emailSubscriptionType)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button\n (click)=\"editEmailSubscriptionType($event,emailSubscriptionType)\">\n <mat-icon>edit</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </section>\n</div>",
3920
+ template: "<div class=\"mat-typography m-4\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <mat-form-field>\n <input matInput [formControl]=\"search\" placeholder=\"Email Type\" autocomplete=\"off\" />\n <button mat-button matSuffix mat-icon-button>\n <mat-icon>search</mat-icon>\n </button>\n <button mat-button *ngIf=\"search.value\" matSuffix mat-icon-button (click)=\"search.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"ml-2\">\n <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"addEmailSubscriptionType()\">+ Email\n Type</button>\n </div>\n <span fxFlex></span>\n <mat-form-field appearance=\"outline\" class=\"no-padding\">\n <mat-label>Columns</mat-label>\n <mat-select [formControl]=\"displayColumns\" multiple (selectionChange)=\"columnsChange()\">\n <mat-option *ngFor=\"let column of availableDisplayColumns\" [value]=\"column.value\">{{column.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"emailSubscriptionTypeList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"email-subscription-type-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Title </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.title }} </td>\n </ng-container>\n <ng-container matColumnDef=\"code\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Code </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.code }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"frequency.title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Frequency </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.frequency?.title }}\n </td>\n </ng-container>\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType;\"> {{ emailSubscriptionType?.description }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let emailSubscriptionType\">\n <button type=\"button\" mat-icon-button\n (click)=\"deleteEmailSubscriptionType($event,emailSubscriptionType)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button\n (click)=\"editEmailSubscriptionType($event,emailSubscriptionType)\">\n <mat-icon>edit</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </section>\n</div>",
3766
3921
  styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
3767
3922
  },] }
3768
3923
  ];
@@ -4713,14 +4868,12 @@ let AuditLogViewModelComponent = class AuditLogViewModelComponent {
4713
4868
  }
4714
4869
  getTransformedChanges() {
4715
4870
  var _a, _b, _c, _d;
4716
- if ((_b = (_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.changes) {
4717
- const changes = Object.keys((_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.changes) || [];
4718
- changes.forEach((key) => {
4719
- var _a, _b, _c, _d;
4720
- const displayAttribute = key.split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');
4721
- this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (_b = (_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.object[key]) !== null && _b !== void 0 ? _b : '', oldValue: (_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.pre_object[key]) !== null && _d !== void 0 ? _d : '' });
4722
- });
4723
- }
4871
+ const changes = ((((_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.action) === 'deleted') ? Object.keys((_b = this.logInfo) === null || _b === void 0 ? void 0 : _b.object) : Object.keys((_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.changes)) || [];
4872
+ changes.forEach((key) => {
4873
+ var _a, _b, _c, _d, _e;
4874
+ const displayAttribute = key.split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');
4875
+ this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (((_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.action) === 'deleted') ? '' : ((_c = (_b = this.logInfo) === null || _b === void 0 ? void 0 : _b.object[key]) !== null && _c !== void 0 ? _c : ''), oldValue: (_e = (_d = this.logInfo) === null || _d === void 0 ? void 0 : _d.pre_object[key]) !== null && _e !== void 0 ? _e : '' });
4876
+ });
4724
4877
  }
4725
4878
  close() {
4726
4879
  this.dialogRef.close();
@@ -5161,14 +5314,12 @@ class AuditLogViewComponent {
5161
5314
  }
5162
5315
  getTransformedChanges() {
5163
5316
  var _a, _b, _c, _d;
5164
- if ((_b = (_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.changes) {
5165
- const changes = Object.keys((_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.changes) || [];
5166
- changes.forEach((key) => {
5167
- var _a, _b, _c, _d;
5168
- const displayAttribute = key.split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');
5169
- this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (_b = (_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.object[key]) !== null && _b !== void 0 ? _b : '', oldValue: (_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.pre_object[key]) !== null && _d !== void 0 ? _d : '' });
5170
- });
5171
- }
5317
+ const changes = ((((_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.action) === 'deleted') ? Object.keys((_b = this.logInfo) === null || _b === void 0 ? void 0 : _b.object) : Object.keys((_d = (_c = this.logInfo) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.changes)) || [];
5318
+ changes.forEach((key) => {
5319
+ var _a, _b, _c, _d, _e;
5320
+ const displayAttribute = key.split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');
5321
+ this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: (((_a = this.logInfo) === null || _a === void 0 ? void 0 : _a.action) === 'deleted') ? '' : ((_c = (_b = this.logInfo) === null || _b === void 0 ? void 0 : _b.object[key]) !== null && _c !== void 0 ? _c : ''), oldValue: (_e = (_d = this.logInfo) === null || _d === void 0 ? void 0 : _d.pre_object[key]) !== null && _e !== void 0 ? _e : '' });
5322
+ });
5172
5323
  }
5173
5324
  fetchLogDetail(logId) {
5174
5325
  return __awaiter(this, void 0, void 0, function* () {
@@ -5605,6 +5756,7 @@ let LoginHistoryForUserComponent = class LoginHistoryForUserComponent {
5605
5756
  };
5606
5757
  this.displayedColumns = ['index', 'created_at'];
5607
5758
  this.historyFilterForm = this.fb.group({
5759
+ 'duration': [''],
5608
5760
  'date_from': [''],
5609
5761
  'date_to': ['']
5610
5762
  });
@@ -5620,6 +5772,14 @@ let LoginHistoryForUserComponent = class LoginHistoryForUserComponent {
5620
5772
  });
5621
5773
  this.initializeData();
5622
5774
  }
5775
+ onTimelineChange(range) {
5776
+ let date_from = (range === null || range === void 0 ? void 0 : range.date_from) ? new Date(range.date_from) : '';
5777
+ let date_to = (range === null || range === void 0 ? void 0 : range.date_to) ? new Date(range.date_to) : '';
5778
+ this.historyFilterForm.patchValue({
5779
+ date_from,
5780
+ date_to
5781
+ });
5782
+ }
5623
5783
  initializeData() {
5624
5784
  this.http.get(`api/user-login-history`, { params: Object.assign(Object.assign({}, this.filters), this.pageEvent) })
5625
5785
  .pipe(untilDestroyed(this))
@@ -5651,7 +5811,7 @@ let LoginHistoryForUserComponent = class LoginHistoryForUserComponent {
5651
5811
  LoginHistoryForUserComponent.decorators = [
5652
5812
  { type: Component, args: [{
5653
5813
  selector: 'app-login-history-for-user',
5654
- template: "<div class=\"mat-typography m-4\">\n <form fxLayoutAlign=\" start center\">\n <app-timeline-filter [form]=\"historyFilterForm\"></app-timeline-filter>\n </form>\n\n\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"loginHistoryList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"login-history-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let loginHistory; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Last Login</th>\n <td mat-cell *matCellDef=\"let loginHistory;\">\n {{loginHistory?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n </section>\n</div>",
5814
+ template: "<div class=\"mat-typography m-4\">\n <form [formGroup]=\"historyFilterForm\" fxLayoutAlign=\" start center\">\n <app-timeline-filter formControlName=\"duration\" (selectionChange)=\"onTimelineChange($event)\"></app-timeline-filter>\n </form>\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"loginHistoryList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"login-history-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let loginHistory; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Last Login</th>\n <td mat-cell *matCellDef=\"let loginHistory;\">\n {{loginHistory?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n </section>\n</div>\n",
5655
5815
  styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
5656
5816
  },] }
5657
5817
  ];
@@ -6167,7 +6327,7 @@ TechlifyTaggerTagSelectorModule.decorators = [
6167
6327
  },] }
6168
6328
  ];
6169
6329
 
6170
- class CompanyFeatureService {
6330
+ class TechlifyFeatureService {
6171
6331
  constructor(dataManager) {
6172
6332
  this.dataManager = dataManager;
6173
6333
  }
@@ -6181,17 +6341,17 @@ class CompanyFeatureService {
6181
6341
  return this.dataManager.GET(`api/feature/${id}/enable`);
6182
6342
  }
6183
6343
  }
6184
- CompanyFeatureService.ɵprov = ɵɵdefineInjectable({ factory: function CompanyFeatureService_Factory() { return new CompanyFeatureService(ɵɵinject(DataManager)); }, token: CompanyFeatureService, providedIn: "root" });
6185
- CompanyFeatureService.decorators = [
6344
+ TechlifyFeatureService.ɵprov = ɵɵdefineInjectable({ factory: function TechlifyFeatureService_Factory() { return new TechlifyFeatureService(ɵɵinject(DataManager)); }, token: TechlifyFeatureService, providedIn: "root" });
6345
+ TechlifyFeatureService.decorators = [
6186
6346
  { type: Injectable, args: [{
6187
6347
  providedIn: 'root'
6188
6348
  },] }
6189
6349
  ];
6190
- CompanyFeatureService.ctorParameters = () => [
6350
+ TechlifyFeatureService.ctorParameters = () => [
6191
6351
  { type: DataManager }
6192
6352
  ];
6193
6353
 
6194
- let CompanyFeatureComponent = class CompanyFeatureComponent {
6354
+ let TechlifyFeatureListingComponent = class TechlifyFeatureListingComponent {
6195
6355
  constructor(dataManager, errorHandler, fb, alertService, dialog, storage, featureService) {
6196
6356
  this.dataManager = dataManager;
6197
6357
  this.errorHandler = errorHandler;
@@ -6334,34 +6494,34 @@ let CompanyFeatureComponent = class CompanyFeatureComponent {
6334
6494
  }
6335
6495
  }
6336
6496
  };
6337
- CompanyFeatureComponent.decorators = [
6497
+ TechlifyFeatureListingComponent.decorators = [
6338
6498
  { type: Component, args: [{
6339
- selector: 'app-company-feature',
6499
+ selector: 'app-techlify-listing-feature',
6340
6500
  template: "<div fxLayout=\"column\" fxLayoutGap=\"3rem\" class=\"p-3\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"primary-color mt-3\">\n <h3>Features Configuration</h3>\n <mat-hint>\n <i> Here you can specify which optional features you'd like to have available to your team </i>\n </mat-hint>\n </div>\n\n\n <div>\n <mat-card>\n <mat-card-content fxlayout=\"column\" style=\"overflow: auto; height: 700px\" class=\"classifications-card\">\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8 w-100\" matSort multiTemplateDataRows\n (matSortChange)=\"sortColumn($event)\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [fromRoot]=\"true\" [infiniteScrollContainer]=\"'.classifications-card'\">\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\">\n {{ i + 1 }}\n </td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"feature\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear>\n Feature\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.title }}</td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear>\n Descriptions\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.description }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear>\n Actions\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <div *ngIf=\"!element?.client_feature\">\n <app-on-off-switch [value]=\"element?.is_enabled_default\"\n (click)=\"toggeleFeature(element?.is_enabled_default, element)\"></app-on-off-switch>\n </div>\n <div *ngIf=\"element?.client_feature\">\n <app-on-off-switch [value]=\"element?.client_feature?.is_enabled\"\n (click)=\"toggeleFeature(element?.client_feature?.is_enabled, element)\"></app-on-off-switch>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n </mat-card-content>\n </mat-card>\n </div>\n</div>\n",
6341
6501
  styles: [""]
6342
6502
  },] }
6343
6503
  ];
6344
- CompanyFeatureComponent.ctorParameters = () => [
6504
+ TechlifyFeatureListingComponent.ctorParameters = () => [
6345
6505
  { type: DataManager },
6346
6506
  { type: ErrorHandlerService },
6347
6507
  { type: FormBuilder },
6348
6508
  { type: AlertService },
6349
6509
  { type: MatDialog },
6350
6510
  { type: StorageService },
6351
- { type: CompanyFeatureService }
6511
+ { type: TechlifyFeatureService }
6352
6512
  ];
6353
- CompanyFeatureComponent = __decorate([
6513
+ TechlifyFeatureListingComponent = __decorate([
6354
6514
  UntilDestroy()
6355
- ], CompanyFeatureComponent);
6515
+ ], TechlifyFeatureListingComponent);
6356
6516
 
6357
6517
  const routes$n = [
6358
6518
  {
6359
6519
  path: '',
6360
- component: CompanyFeatureComponent,
6520
+ component: TechlifyFeatureListingComponent,
6361
6521
  canActivate: [AuthenticationGuard]
6362
6522
  },
6363
6523
  ];
6364
- const CompanyFeatureRoutes = RouterModule.forChild(routes$n);
6524
+ const TechlifyFeatureRoutes = RouterModule.forChild(routes$n);
6365
6525
 
6366
6526
  class OnOffSwitchComponent {
6367
6527
  constructor(fb) {
@@ -6388,7 +6548,7 @@ OnOffSwitchComponent.propDecorators = {
6388
6548
  value: [{ type: Input }]
6389
6549
  };
6390
6550
 
6391
- class NgxFeatureEnabledDirective {
6551
+ class TechlifyFeatureEnabledDirective {
6392
6552
  constructor(el, featureService, errorHandler, storage) {
6393
6553
  this.el = el;
6394
6554
  this.featureService = featureService;
@@ -6446,37 +6606,37 @@ class NgxFeatureEnabledDirective {
6446
6606
  }
6447
6607
  }
6448
6608
  }
6449
- NgxFeatureEnabledDirective.decorators = [
6609
+ TechlifyFeatureEnabledDirective.decorators = [
6450
6610
  { type: Directive, args: [{
6451
- selector: '[ngxFeatureEnabled]'
6611
+ selector: '[techlifyFeatureEnabled]'
6452
6612
  },] }
6453
6613
  ];
6454
- NgxFeatureEnabledDirective.ctorParameters = () => [
6614
+ TechlifyFeatureEnabledDirective.ctorParameters = () => [
6455
6615
  { type: ElementRef },
6456
- { type: CompanyFeatureService },
6616
+ { type: TechlifyFeatureService },
6457
6617
  { type: ErrorHandlerService },
6458
6618
  { type: StorageService }
6459
6619
  ];
6460
- NgxFeatureEnabledDirective.propDecorators = {
6461
- enabledFeature: [{ type: Input, args: ['ngxFeatureEnabled',] }]
6620
+ TechlifyFeatureEnabledDirective.propDecorators = {
6621
+ enabledFeature: [{ type: Input, args: ['techlifyFeatureEnabled',] }]
6462
6622
  };
6463
6623
 
6464
- class CompanyFeatureModule {
6624
+ class TechlifyFeatureModule {
6465
6625
  }
6466
- CompanyFeatureModule.decorators = [
6626
+ TechlifyFeatureModule.decorators = [
6467
6627
  { type: NgModule, args: [{
6468
6628
  imports: [
6469
6629
  CommonModule,
6470
6630
  MaterialModule,
6471
6631
  FlexLayoutModule,
6472
- CompanyFeatureRoutes,
6632
+ TechlifyFeatureRoutes,
6473
6633
  MatSlideToggleModule,
6474
6634
  FormsModule,
6475
6635
  ReactiveFormsModule,
6476
6636
  InfiniteScrollModule
6477
6637
  ],
6478
- declarations: [CompanyFeatureComponent, OnOffSwitchComponent, NgxFeatureEnabledDirective],
6479
- exports: [CompanyFeatureComponent, NgxFeatureEnabledDirective]
6638
+ declarations: [TechlifyFeatureListingComponent, OnOffSwitchComponent, TechlifyFeatureEnabledDirective],
6639
+ exports: [TechlifyFeatureListingComponent, TechlifyFeatureEnabledDirective]
6480
6640
  },] }
6481
6641
  ];
6482
6642
 
@@ -6488,5 +6648,5 @@ CompanyFeatureModule.decorators = [
6488
6648
  * Generated bundle index. Do not edit.
6489
6649
  */
6490
6650
 
6491
- export { ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, CommentFormComponent, CompanyFeatureComponent, CompanyFeatureModule, CompanyFeatureRoutes, ConfigService, CoreModule, CredentialsService, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FailedItemsComponent, FailedItemsModule, FailedItemsRoutingModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImportConfig, ImportCsvComponent, ImportCsvModule, ImportCsvRoutingModule, ImportItemsComponent, ImportItemsModule, ImportItemsRoutingModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, MatSelectInfiniteScrollDirective, MaterialModule, NgxFeatureEnabledDirective, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberSelector, OnOffSwitchComponent, PageEvent, ReadMoreComponent, ReadMoreModule, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyConfig, TechlifyTaggerTagFormConfigModel, TechlifyTaggerTagFormFieldComponent, TechlifyTaggerTagFormFieldModule, TechlifyTaggerTagSelectorComponent, TechlifyTaggerTagSelectorModule, TechlifyUpdateHistoryModule, TechlifyUpdateModule, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, UtilityModule, ViewerConfig, calculateTimeline, esfur, estlr, esulr, SnackModule as ɵa, SuccessSnackComponent as ɵb, NumberSelector as ɵba, TimelineFilterComponent as ɵbb, TimelineFilterRoutingModule as ɵbc, LoaderComponent as ɵbd, EmailSubscriptionUserFormComponent as ɵbe, EmailSubscriptionUserListComponent as ɵbf, AuthenticationGuard as ɵbg, EmailSubscriptionUserListFilterComponent as ɵbh, EmailSubscriptionTypeFormComponent as ɵbi, EmailSubscriptionTypeListComponent as ɵbj, EmailSubscriptionForUserComponent as ɵbk, TechlifyUpdatesListComponent as ɵbl, TechlifyUpdateService as ɵbm, TechlifyUpdateRoutingModule as ɵbn, TechlifyUpdateFormModule as ɵbo, TechlifyUpdateFormComponent as ɵbp, TechlifyUpdateHistoryRoutingModule as ɵbq, TechlifyUpdateHistoryComponent as ɵbr, UpdateNotifierSnackComponent as ɵbs, UpdateViewModule as ɵbt, UpdateViewComponent as ɵbu, DataManager as ɵbv, DataManager as ɵbw, ErrorHandlerService as ɵbx, AlertService as ɵby, StorageService as ɵbz, ErrorSnackComponent as ɵc, CompanyFeatureService as ɵca, AuthenticationGuard as ɵcb, HTTP_DYNAMIC_INTERCEPTORS as ɵd, HttpService as ɵe, RouteReusableStrategy as ɵf, ActionPopupComponent as ɵg, ActionPopup as ɵh, DataTableComponent as ɵi, DocumentViewerComponent as ɵj, EntityFileFormComponent as ɵk, FormValidatorService as ɵl, EntityFileService as ɵm, AlertService as ɵn, EntityFilesViewAllComponent as ɵo, FileDropperComponent as ɵp, NoteListComponent as ɵq, NoteService as ɵr, NoteFormComponent as ɵs, CommentFormComponent as ɵt, CredentialsService as ɵu, ConfigService as ɵv, TechlifyConfig as ɵw, SearchableSelectorComponent as ɵx, MatSelectInfiniteScrollDirective as ɵy, NumItemsSelector as ɵz };
6651
+ export { ActionPopup, ActionPopupComponent, ActionPopupModule, AlertService, ApiPrefixInterceptor, AuditLogForModelComponent, AuditLogForModelModule, AuditLogForModelRoutingModule, AuditLogListComponent, AuditLogListFilterComponent, AuditLogListFilterModule, AuditLogListFilterRoutingModule, AuditLogListModule, AuditLogListRoutingModule, AuditLogModule, AuditLogRoutingModule, AuditLogViewComponent, AuditLogViewModelComponent, AuditLogViewModelModule, AuditLogViewModelRoutingModule, AuditLogViewModule, AuditLogViewRoutingModule, AuditLogsViewModelComponent, AuditLogsViewModelModule, AuditLogsViewModelRoutingModule, AuthenticationGuard, AuthenticationService, CacheInterceptor, CommentFormComponent, ConfigService, CoreModule, CredentialsService, DataManager, DataTable, DataTableComponent, DataTableModule, DateUtils, DateValidator, DocumentViewerComponent, DocumentViewerModule, EmailSubscriptionForUserComponent, EmailSubscriptionForUserModule, EmailSubscriptionForUserRoutingModule, EmailSubscriptionModule, EmailSubscriptionRoutingModule, EmailSubscriptionTypeFormComponent, EmailSubscriptionTypeFormModule, EmailSubscriptionTypeFormRoutingModule, EmailSubscriptionTypeListComponent, EmailSubscriptionTypeListModule, EmailSubscriptionTypeListRoutingModule, EmailSubscriptionTypeModule, EmailSubscriptionTypeRoutingModule, EmailSubscriptionUserFormComponent, EmailSubscriptionUserFormModule, EmailSubscriptionUserFormRoutingModule, EmailSubscriptionUserListComponent, EmailSubscriptionUserListFilterComponent, EmailSubscriptionUserListFilterModule, EmailSubscriptionUserListFilterRoutingModule, EmailSubscriptionUserListModule, EmailSubscriptionUserListRoutingModule, EmailSubscriptionUserModule, EmailSubscriptionUserRoutingModule, EntityFileFormComponent, EntityFilesViewAllComponent, EntityFilesViewAllModule, ErrorHandlerInterceptor, ErrorHandlerService, ErrorSnackComponent, ExportExcelButtonComponent, ExportExcelModule, FailedItemsComponent, FailedItemsModule, FailedItemsRoutingModule, FileDropperComponent, FileDropperConfig, FileDropperModule, FormValidatorService, HTTP_DYNAMIC_INTERCEPTORS, HttpCacheService, HttpService, ImportConfig, ImportCsvComponent, ImportCsvModule, ImportCsvRoutingModule, ImportItemsComponent, ImportItemsModule, ImportItemsRoutingModule, LoaderComponent, LoaderModule, LogLevel, Logger, LoginHistoryForUserComponent, LoginHistoryForUserModule, LoginHistoryForUserRoutingModule, MatSelectInfiniteScrollDirective, MaterialModule, NoteFormComponent, NoteListComponent, NoteModule, NumItemsSelector, NumberSelector, PageEvent, ReadMoreComponent, ReadMoreModule, RouteReusableStrategy, SearchableSelectorComponent, SearchableSelectorModule, SnackModule, StorageService, SuccessSnackComponent, TechlifyConfig, TechlifyFeatureEnabledDirective, TechlifyFeatureListingComponent, TechlifyFeatureModule, TechlifyFeatureRoutes, TechlifyTaggerTagFormConfigModel, TechlifyTaggerTagFormFieldComponent, TechlifyTaggerTagFormFieldModule, TechlifyTaggerTagSelectorComponent, TechlifyTaggerTagSelectorModule, TechlifyUpdateHistoryModule, TechlifyUpdateModule, Timeline, TimelineFilterComponent, TimelineFilterModule, TokenInterceptor, UpdateNotifierComponent, UpdateNotifierModule, UtilityModule, ViewerConfig, calculateTimeline, esfur, estlr, esulr, SnackModule as ɵa, SuccessSnackComponent as ɵb, NumberSelector as ɵba, TimelineFilterComponent as ɵbb, TimelineFilterRoutingModule as ɵbc, LoaderComponent as ɵbd, EmailSubscriptionUserFormComponent as ɵbe, EmailSubscriptionUserListComponent as ɵbf, AuthenticationGuard as ɵbg, EmailSubscriptionUserListFilterComponent as ɵbh, EmailSubscriptionTypeFormComponent as ɵbi, EmailSubscriptionTypeListComponent as ɵbj, EmailSubscriptionForUserComponent as ɵbk, TechlifyUpdatesListComponent as ɵbl, TechlifyUpdateService as ɵbm, TechlifyUpdateRoutingModule as ɵbn, TechlifyUpdateFormModule as ɵbo, TechlifyUpdateFormComponent as ɵbp, TechlifyUpdateHistoryRoutingModule as ɵbq, TechlifyUpdateHistoryComponent as ɵbr, UpdateNotifierSnackComponent as ɵbs, UpdateViewModule as ɵbt, UpdateViewComponent as ɵbu, DataManager as ɵbv, ErrorHandlerService as ɵbw, StorageService as ɵbx, TechlifyFeatureService as ɵby, DataManager as ɵbz, ErrorSnackComponent as ɵc, AuthenticationGuard as ɵca, OnOffSwitchComponent as ɵcb, HTTP_DYNAMIC_INTERCEPTORS as ɵd, HttpService as ɵe, RouteReusableStrategy as ɵf, ActionPopupComponent as ɵg, ActionPopup as ɵh, DataTableComponent as ɵi, DocumentViewerComponent as ɵj, EntityFileFormComponent as ɵk, FormValidatorService as ɵl, EntityFileService as ɵm, AlertService as ɵn, EntityFilesViewAllComponent as ɵo, FileDropperComponent as ɵp, NoteListComponent as ɵq, NoteService as ɵr, NoteFormComponent as ɵs, CommentFormComponent as ɵt, CredentialsService as ɵu, ConfigService as ɵv, TechlifyConfig as ɵw, SearchableSelectorComponent as ɵx, MatSelectInfiniteScrollDirective as ɵy, NumItemsSelector as ɵz };
6492
6652
  //# sourceMappingURL=ngx-techlify-core.js.map