ngx-techlify-core 11.4.9 → 11.5.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.
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/material/dialog'), require('@angular/material/table'), require('@angular/material/sort'), require('@ngneat/until-destroy'), require('@angular/common'), require('@angular/forms'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/material/snack-bar'), require('@angular/cdk/a11y'), require('@angular/cdk/coercion'), require('@angular/material/form-field'), require('@angular/material/select'), require('moment'), require('@angular/material/icon'), require('@angular/router'), require('@angular/material/tooltip'), require('@angular/material/core'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/input'), require('@angular/material/menu'), require('@angular/material/progress-spinner'), require('@angular/material/card'), require('@angular/material/divider'), require('@angular/material/chips'), require('@angular/material/datepicker'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/flex-layout'), require('ngx-infinite-scroll'), require('ngx-doc-viewer'), require('@angular/cdk/keycodes'), require('@angular/material/autocomplete'), require('ngx-editor'), require('xlsx'), require('@angular/platform-browser'), require('jsondiffpatch'), require('@angular/material/slide-toggle')) :
3
- typeof define === 'function' && define.amd ? define('ngx-techlify-core', ['exports', '@angular/core', '@angular/material/dialog', '@angular/material/table', '@angular/material/sort', '@ngneat/until-destroy', '@angular/common', '@angular/forms', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/material/snack-bar', '@angular/cdk/a11y', '@angular/cdk/coercion', '@angular/material/form-field', '@angular/material/select', 'moment', '@angular/material/icon', '@angular/router', '@angular/material/tooltip', '@angular/material/core', '@angular/material/button', '@angular/material/checkbox', '@angular/material/input', '@angular/material/menu', '@angular/material/progress-spinner', '@angular/material/card', '@angular/material/divider', '@angular/material/chips', '@angular/material/datepicker', '@angular/material/list', '@angular/material/button-toggle', '@angular/flex-layout', 'ngx-infinite-scroll', 'ngx-doc-viewer', '@angular/cdk/keycodes', '@angular/material/autocomplete', 'ngx-editor', 'xlsx', '@angular/platform-browser', 'jsondiffpatch', '@angular/material/slide-toggle'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['ngx-techlify-core'] = {}, global.ng.core, global.ng.material.dialog, global.ng.material.table, global.ng.material.sort, global['@ngneat/until-destroy'], global.ng.common, global.ng.forms, global.ng.common.http, global.rxjs, global.rxjs.operators, global.ng.material.snackBar, global.ng.cdk.a11y, global.ng.cdk.coercion, global.ng.material.formField, global.ng.material.select, global.moment, global.ng.material.icon, global.ng.router, global.ng.material.tooltip, global.ng.material.core, global.ng.material.button, global.ng.material.checkbox, global.ng.material.input, global.ng.material.menu, global.ng.material.progressSpinner, global.ng.material.card, global.ng.material.divider, global.ng.material.chips, global.ng.material.datepicker, global.ng.material.list, global.ng.material.buttonToggle, global.ng.flexLayout, global['ngx-infinite-scroll'], global['ngx-doc-viewer'], global.ng.cdk.keycodes, global.ng.material.autocomplete, global['ngx-editor'], global.xlsx, global.ng.platformBrowser, global.jsondiffpatch, global.ng.material.slideToggle));
5
- }(this, (function (exports, i0, dialog, table, sort, untilDestroy, common, forms, i1$1, rxjs, operators, i1, a11y, coercion, formField, select, moment_, icon, i1$2, tooltip, core, button, checkbox, input, menu, progressSpinner, card, divider, chips, datepicker, list, buttonToggle, flexLayout, ngxInfiniteScroll, ngxDocViewer, keycodes, autocomplete, ngxEditor, XLSX, platformBrowser, jsondiffpatch, slideToggle) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/material/dialog'), require('@angular/material/table'), require('@angular/material/sort'), require('@ngneat/until-destroy'), require('@angular/common'), require('@angular/forms'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/material/snack-bar'), require('@angular/cdk/a11y'), require('@angular/cdk/coercion'), require('@angular/material/form-field'), require('@angular/material/select'), require('moment'), require('@angular/material/icon'), require('@angular/router'), require('@angular/material/tooltip'), require('@angular/material/core'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/input'), require('@angular/material/menu'), require('@angular/material/progress-spinner'), require('@angular/material/card'), require('@angular/material/divider'), require('@angular/material/chips'), require('@angular/material/datepicker'), require('@angular/material/list'), require('@angular/material/button-toggle'), require('@angular/material/sidenav'), require('@angular/flex-layout'), require('ngx-infinite-scroll'), require('ngx-doc-viewer'), require('@angular/cdk/keycodes'), require('@angular/material/autocomplete'), require('ngx-editor'), require('xlsx'), require('@angular/platform-browser'), require('jsondiffpatch'), require('@angular/material/slide-toggle')) :
3
+ typeof define === 'function' && define.amd ? define('ngx-techlify-core', ['exports', '@angular/core', '@angular/material/dialog', '@angular/material/table', '@angular/material/sort', '@ngneat/until-destroy', '@angular/common', '@angular/forms', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/material/snack-bar', '@angular/cdk/a11y', '@angular/cdk/coercion', '@angular/material/form-field', '@angular/material/select', 'moment', '@angular/material/icon', '@angular/router', '@angular/material/tooltip', '@angular/material/core', '@angular/material/button', '@angular/material/checkbox', '@angular/material/input', '@angular/material/menu', '@angular/material/progress-spinner', '@angular/material/card', '@angular/material/divider', '@angular/material/chips', '@angular/material/datepicker', '@angular/material/list', '@angular/material/button-toggle', '@angular/material/sidenav', '@angular/flex-layout', 'ngx-infinite-scroll', 'ngx-doc-viewer', '@angular/cdk/keycodes', '@angular/material/autocomplete', 'ngx-editor', 'xlsx', '@angular/platform-browser', 'jsondiffpatch', '@angular/material/slide-toggle'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['ngx-techlify-core'] = {}, global.ng.core, global.ng.material.dialog, global.ng.material.table, global.ng.material.sort, global['@ngneat/until-destroy'], global.ng.common, global.ng.forms, global.ng.common.http, global.rxjs, global.rxjs.operators, global.ng.material.snackBar, global.ng.cdk.a11y, global.ng.cdk.coercion, global.ng.material.formField, global.ng.material.select, global.moment, global.ng.material.icon, global.ng.router, global.ng.material.tooltip, global.ng.material.core, global.ng.material.button, global.ng.material.checkbox, global.ng.material.input, global.ng.material.menu, global.ng.material.progressSpinner, global.ng.material.card, global.ng.material.divider, global.ng.material.chips, global.ng.material.datepicker, global.ng.material.list, global.ng.material.buttonToggle, global.ng.material.sidenav, global.ng.flexLayout, global['ngx-infinite-scroll'], global['ngx-doc-viewer'], global.ng.cdk.keycodes, global.ng.material.autocomplete, global['ngx-editor'], global.xlsx, global.ng.platformBrowser, global.jsondiffpatch, global.ng.material.slideToggle));
5
+ }(this, (function (exports, i0, dialog, table, sort, untilDestroy, common, forms, i1$1, rxjs, operators, i1, a11y, coercion, formField, select, moment_, icon, i1$2, tooltip, core, button, checkbox, input, menu, progressSpinner, card, divider, chips, datepicker, list, buttonToggle, sidenav, flexLayout, ngxInfiniteScroll, ngxDocViewer, keycodes, autocomplete, ngxEditor, XLSX, platformBrowser, jsondiffpatch, slideToggle) { 'use strict';
6
6
 
7
7
  function _interopNamespace(e) {
8
8
  if (e && e.__esModule) return e;
@@ -1570,6 +1570,9 @@
1570
1570
  .skipHeader()
1571
1571
  .post("api/entity-files-upload", formData).toPromise();
1572
1572
  };
1573
+ EntityFileService.prototype.bulkUpdate = function (model) {
1574
+ return this.http.post("api/entity-files/bulk-update", model).toPromise();
1575
+ };
1573
1576
  return EntityFileService;
1574
1577
  }());
1575
1578
  EntityFileService.ɵprov = i0.ɵɵdefineInjectable({ factory: function EntityFileService_Factory() { return new EntityFileService(i0.ɵɵinject(HttpService)); }, token: EntityFileService, providedIn: "root" });
@@ -1774,14 +1777,18 @@
1774
1777
  ]; };
1775
1778
 
1776
1779
  exports.ɵo = /** @class */ (function () {
1777
- function EntityFilesViewAllComponent(entityFileService, location, alertService, dialog, fb) {
1780
+ function EntityFilesViewAllComponent(entityFileService, location, alertService, dialog, fb, errorHandler) {
1778
1781
  this.entityFileService = entityFileService;
1779
1782
  this.location = location;
1780
1783
  this.alertService = alertService;
1781
1784
  this.dialog = dialog;
1782
1785
  this.fb = fb;
1786
+ this.errorHandler = errorHandler;
1783
1787
  this.viewOnly = false;
1784
1788
  this.allowMultipleFiles = false;
1789
+ this.allowBulkUpdate = false;
1790
+ this.documentIds = [];
1791
+ this.isAllSelected = false;
1785
1792
  /**
1786
1793
  * Should we allow tagging entity-files?
1787
1794
  */
@@ -1801,10 +1808,17 @@
1801
1808
  this.perPage = 25;
1802
1809
  this.lastPage = 0;
1803
1810
  this.fileList = [];
1811
+ this.dataSource = new table.MatTableDataSource();
1812
+ this.isReload = false;
1804
1813
  this.filterFormGroup = this.fb.group({
1805
1814
  title: [""],
1806
1815
  tag_ids: [""]
1807
1816
  });
1817
+ this.updateRowForm = this.fb.group({
1818
+ title: [''],
1819
+ details: [''],
1820
+ tag_ids: [''],
1821
+ });
1808
1822
  }
1809
1823
  EntityFilesViewAllComponent.prototype.ngOnInit = function () {
1810
1824
  //File dropper config
@@ -1846,6 +1860,9 @@
1846
1860
  if (!this.viewOnly) {
1847
1861
  this.displayedColumns.push('actions');
1848
1862
  }
1863
+ if (this.allowBulkUpdate) {
1864
+ this.displayedColumns.push('select');
1865
+ }
1849
1866
  };
1850
1867
  EntityFilesViewAllComponent.prototype.listenRoutes = function () {
1851
1868
  var _this = this;
@@ -1871,6 +1888,7 @@
1871
1888
  result = _a.sent();
1872
1889
  this.lastPage = result.last_page || this.page;
1873
1890
  this.entityFiles = this.entityFiles.concat(result.data);
1891
+ this.dataSource = new table.MatTableDataSource(this.entityFiles);
1874
1892
  this.isWorking = false;
1875
1893
  return [2 /*return*/];
1876
1894
  }
@@ -1898,6 +1916,7 @@
1898
1916
  files = __spread(this.entityFiles);
1899
1917
  files.push(result);
1900
1918
  this.entityFiles = files;
1919
+ this.dataSource = new table.MatTableDataSource(this.entityFiles);
1901
1920
  }
1902
1921
  return [2 /*return*/];
1903
1922
  });
@@ -1957,6 +1976,8 @@
1957
1976
  };
1958
1977
  EntityFilesViewAllComponent.prototype.reload = function () {
1959
1978
  this.entityFiles = [];
1979
+ this.documentIds = [];
1980
+ this.isReload = false;
1960
1981
  this.page = 1;
1961
1982
  if (!this.isWorking) {
1962
1983
  this.fetchEntityFilesDetails();
@@ -2007,12 +2028,74 @@
2007
2028
  });
2008
2029
  });
2009
2030
  };
2031
+ EntityFilesViewAllComponent.prototype.selectAll = function () {
2032
+ var _this = this;
2033
+ this.documentIds = [];
2034
+ this.entityFiles.map(function (employee) {
2035
+ employee.is_selected = _this.isAllSelected;
2036
+ if (_this.isAllSelected) {
2037
+ _this.documentIds.push(employee.id);
2038
+ }
2039
+ });
2040
+ this.dataSource = new table.MatTableDataSource(this.entityFiles);
2041
+ };
2042
+ EntityFilesViewAllComponent.prototype.employeeListModified = function (event, employee) {
2043
+ this.isAllSelected = false;
2044
+ if (event.checked) {
2045
+ this.documentIds.push(employee.id);
2046
+ }
2047
+ else {
2048
+ this.documentIds = this.documentIds.filter(function (employeeData) { return employeeData != employee.id; });
2049
+ }
2050
+ };
2051
+ EntityFilesViewAllComponent.prototype.unCheckAll = function () {
2052
+ this.isAllSelected = false;
2053
+ this.documentIds = [];
2054
+ this.entityFiles.map(function (employee) {
2055
+ employee.is_selected = false;
2056
+ });
2057
+ this.dataSource = new table.MatTableDataSource(this.entityFiles);
2058
+ };
2059
+ EntityFilesViewAllComponent.prototype.resetFieldValueOfRow = function (field, event) {
2060
+ event.stopPropagation();
2061
+ this.updateRowForm.get(field).setValue("");
2062
+ };
2063
+ EntityFilesViewAllComponent.prototype.bulkUpdate = function (fieldName) {
2064
+ return __awaiter(this, void 0, void 0, function () {
2065
+ var data, error_1;
2066
+ var _this = this;
2067
+ return __generator(this, function (_a) {
2068
+ switch (_a.label) {
2069
+ case 0:
2070
+ data = this.updateRowForm.value;
2071
+ this.isReload = this.isWorking = true;
2072
+ data.field_name = fieldName;
2073
+ data.document_ids = this.documentIds;
2074
+ _a.label = 1;
2075
+ case 1:
2076
+ _a.trys.push([1, 3, , 4]);
2077
+ return [4 /*yield*/, this.entityFileService.bulkUpdate(data).then(function (res) {
2078
+ _this.alertService.addAlert("Successfully updated", "success");
2079
+ _this.isWorking = false;
2080
+ })];
2081
+ case 2:
2082
+ _a.sent();
2083
+ return [3 /*break*/, 4];
2084
+ case 3:
2085
+ error_1 = _a.sent();
2086
+ this.errorHandler.handleError(error_1);
2087
+ return [3 /*break*/, 4];
2088
+ case 4: return [2 /*return*/];
2089
+ }
2090
+ });
2091
+ });
2092
+ };
2010
2093
  return EntityFilesViewAllComponent;
2011
2094
  }());
2012
2095
  exports.ɵo.decorators = [
2013
2096
  { type: i0.Component, args: [{
2014
2097
  selector: 'app-entity-files-view-all',
2015
- template: "<div class=\"mat-typography\" *ngIf=\"!displayMode\">\n <div fxLayout=\"row\" fxLayoutGap=\"1rem\">\n <mat-card fxFlex=\"70%\">\n <mat-card-title>\n <div fxLayout fxLayoutGap=\"1rem\">\n <h3 class=\"font-weight-bold primary-color\" fxLayout=\"center center\">\n <mat-icon>\n <span class=\"material-icons\">\n description\n </span>\n </mat-icon>\n {{title}}s\n </h3>\n <div>\n <button type=\"button\" class=\"mx-1\" mat-raised-button color=\"primary\" (click)=\"addEntityFile()\"\n *ngIf=\"!viewOnly\">\n <mat-icon>\n <span class=\"material-icons\">\n add_circle_outline\n </span>\n </mat-icon>\n {{title}}\n </button>\n </div>\n </div>\n </mat-card-title>\n <mat-card-subtitle>\n <form [formGroup]=\"filterFormGroup\" style=\"font-size: 10px;\" fxLayout fxLayoutGap=\"1rem\">\n <mat-form-field *ngIf=\"!removeSearch\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input type=\"text\" matInput formControlName=\"title\" placeholder=\"Search\" name=\"title\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"filters.title\" matSuffix mat-icon-button\n (click)=\"resetFieldValue($event, 'title')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"useTechlifyTags && !isWorking\">\n <mat-label>Tag</mat-label>\n <app-searchable-selector formControlName=\"tag_ids\" apiUrl=\"api/techlify-tagger-tags\" [multiple]=\"true\"\n placeHolder=\"Tag\">\n </app-searchable-selector>\n <button mat-icon-button matSuffix *ngIf=\"filterFormGroup.get('tag_ids').value.length\"\n (click)=\"resetFieldValue($event, 'tag_ids')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </mat-card-subtitle>\n <mat-card-content class=\"entity-file-card\">\n <table mat-table [dataSource]=\"entityFiles\" class=\"w-100\" matSort multiTemplateDataRows infiniteScroll\n [infiniteScrollDistance]=\"1.5\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\">\n\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\"> {{ i+1 }} </td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef> Title </th>\n <td mat-cell *matCellDef=\"let element\">\n <div>\n <span>\n {{element.title}}\n </span>\n <span>\n <a href=\"{{element.url}}\" target=\"_blank\" class=\"text-decoration-none text-muted\">\n <button mat-icon-button type=\"button\">\n <mat-icon>download</mat-icon>\n </button>\n </a>\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"details\">\n <th mat-header-cell *matHeaderCellDef> Details </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-read-more [text]=\"element.details\" [maxLength]=\"50\"></app-read-more>\n </td>\n </ng-container>\n\n <!-- File size Column -->\n <ng-container matColumnDef=\"file_size\">\n <th mat-header-cell *matHeaderCellDef> File Size </th>\n <td mat-cell *matCellDef=\"let element\"> {{ sizeOf(element.file_size)}} </td>\n </ng-container>\n\n <!-- Tags Column -->\n <ng-container matColumnDef=\"tag\">\n <th mat-header-cell *matHeaderCellDef> Tag </th>\n <td mat-cell *matCellDef=\"let element\" class=\"p-1\">\n <mat-chip-list aria-label=\"Tags\">\n <mat-chip *ngFor=\"let taggerModel of element.tags\">\n {{taggerModel?.tag?.title}}\n </mat-chip>\n </mat-chip-list>\n </td>\n </ng-container>\n\n <!-- Uploaded On Column -->\n <ng-container matColumnDef=\"uploaded_on\">\n <th mat-header-cell *matHeaderCellDef> Uploaded On </th>\n <td mat-cell *matCellDef=\"let element\">\n <div>\n {{element.created_at | date: 'mediumDate'}}\n </div>\n <div class=\"text-muted\">\n By {{element.creator?.name}}\n </div>\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 element\" style=\"min-width:110px\" class=\"text-muted\">\n <button type=\"button\" mat-icon-button (click)=\"editEntityFile(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"deleteEntityFile(element)\">\n <mat-icon>delete</mat-icon>\n </button>\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 <section fxFlex=\"30%\">\n <app-file-dropper [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </div>\n</div>\n\n<div fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" class=\"mat-typography p-4\" *ngIf=\"displayMode\">\n <div *ngFor=\"let efile of entityFiles\">\n <app-document-viewer [file]=\"efile.file\" [fileUrl]=\"efile.url\" [config]=\"this.viewerConfig\" [disableEdit]=\"true\">\n </app-document-viewer>\n <a href=\"{{efile.url}}\" target=\"_blank\">\n <button mat-button type=\"button\">View</button>\n </a>\n </div>\n</div>\n",
2098
+ template: "<mat-drawer-container>\n <mat-drawer style=\"z-index: 1;\" fxLayout=\"column\" [fxHide]=\"!this.documentIds.length\" fxHide.xs fxHide.sm fxHide.lt-md\n mode=\"side\" position=\"end\" opened>\n <mat-card class=\"update_card\" *ngIf=\"this.documentIds.length\">\n <mat-card-header>\n <mat-card-title>\n <div mat-dialog-title class=\"mt-2 ml-2 text-center\">\n <div>Update Selected Rows</div>\n </div>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content fxLayout=\"column\">\n <form [formGroup]=\"updateRowForm\">\n <div fxLayout=\"column\">\n\n <mat-form-field fxFlex=\"100%\" class=\"px-1\">\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"updateRowForm.get('title').value || updateRowForm.get('title').value===0\"\n matSuffix mat-icon-button style=\"color:red\" (click)=\"resetFieldValueOfRow('title', $event)\">\n <mat-icon>close</mat-icon>\n </button>\n <button mat-button matSuffix mat-icon-button type=\"button\" style=\"color:green\" *ngIf=\"(updateRowForm.get('title').value || updateRowForm.get('title').value===0)\n && updateRowForm.get('title').valid\" (click)=\"bulkUpdate('title')\">\n <mat-icon>done</mat-icon>\n </button>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"100%\" class=\"px-1\">\n <textarea matInput formControlName=\"details\" placeholder=\"Details\" autocomplete=\"off\"></textarea>\n <button mat-button *ngIf=\"updateRowForm.get('details').value || updateRowForm.get('details').value===0\"\n matSuffix mat-icon-button style=\"color:red\" (click)=\"resetFieldValueOfRow('details', $event)\">\n <mat-icon>close</mat-icon>\n </button>\n <button mat-button matSuffix mat-icon-button type=\"button\" style=\"color:green\" *ngIf=\"(updateRowForm.get('details').value || updateRowForm.get('details').value===0)\n && updateRowForm.get('details').valid\" (click)=\"bulkUpdate('details')\">\n <mat-icon>done</mat-icon>\n </button>\n </mat-form-field>\n\n <ng-container *ngIf=\"useTechlifyTags\">\n <mat-form-field>\n <mat-label>Tag</mat-label>\n <app-techlify-tagger-tag-form-field modelType=\"entity-file\" formControlName=\"tag_ids\"\n placeholder=\"Enter new tag\">\n </app-techlify-tagger-tag-form-field>\n <button mat-button *ngIf=\"updateRowForm.get('tag_ids').value || updateRowForm.get('tag_ids').value===0\"\n matSuffix mat-icon-button style=\"color:red\" (click)=\"resetFieldValueOfRow('tag_ids', $event)\">\n <mat-icon>close</mat-icon>\n </button>\n <button mat-button matSuffix mat-icon-button type=\"button\" style=\"color:green\" *ngIf=\"(updateRowForm.get('tag_ids').value || updateRowForm.get('tag_ids').value===0)\n && updateRowForm.get('tag_ids').valid\" (click)=\"bulkUpdate('tag_ids')\">\n <mat-icon>done</mat-icon>\n </button>\n </mat-form-field>\n </ng-container>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n\n </mat-drawer>\n\n <mat-drawer-content>\n <div class=\"mat-typography\" *ngIf=\"!displayMode\">\n <div fxLayout=\"row\" fxLayoutGap=\"1rem\">\n <mat-card [fxFlex]=\"this.documentIds.length ? '100%' : '70%'\">\n <mat-card-title>\n <div fxLayout fxLayoutGap=\"1rem\">\n <h3 class=\"font-weight-bold primary-color\" fxLayout=\"center center\">\n <mat-icon>\n <span class=\"material-icons\">\n description\n </span>\n </mat-icon>\n {{title}}s\n </h3>\n <div>\n <button type=\"button\" class=\"mx-1\" mat-raised-button color=\"primary\" (click)=\"addEntityFile()\"\n *ngIf=\"!viewOnly\">\n <mat-icon>\n <span class=\"material-icons\">\n add_circle_outline\n </span>\n </mat-icon>\n {{title}}\n </button>\n </div>\n </div>\n </mat-card-title>\n <mat-card-subtitle>\n <form [formGroup]=\"filterFormGroup\" style=\"font-size: 10px;\" fxLayout fxLayoutGap=\"1rem\">\n <mat-form-field *ngIf=\"!removeSearch\" appearance=\"outline\">\n <mat-label>Search</mat-label>\n <input type=\"text\" matInput formControlName=\"title\" placeholder=\"Search\" name=\"title\"\n autocomplete=\"off\" />\n <button mat-button *ngIf=\"filters.title\" matSuffix mat-icon-button\n (click)=\"resetFieldValue($event, 'title')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"useTechlifyTags && !isWorking\">\n <mat-label>Tag</mat-label>\n <app-searchable-selector formControlName=\"tag_ids\" apiUrl=\"api/techlify-tagger-tags\" [multiple]=\"true\"\n placeHolder=\"Tag\">\n </app-searchable-selector>\n <button mat-icon-button matSuffix *ngIf=\"filterFormGroup.get('tag_ids').value.length\"\n (click)=\"resetFieldValue($event, 'tag_ids')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button mat-icon-button (click)=\"reload()\" *ngIf=\"isReload\" type=\"button\" matTooltip=\"Refresh\">\n <mat-icon>\n <span class=\"material-icons\">\n refresh\n </span>\n </mat-icon>\n </button>\n </form>\n </mat-card-subtitle>\n <mat-card-content class=\"entity-file-card\">\n <table mat-table [dataSource]=\"dataSource\" class=\"w-100\" matSort multiTemplateDataRows infiniteScroll\n [infiniteScrollDistance]=\"1.5\" [infiniteScrollThrottle]=\"50\" (scrolled)=\"onScroll()\">\n\n <!-- Select Column -->\n <ng-container matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef style=\"width:30px\">\n <mat-checkbox name=\"employee\" [(ngModel)]=\"isAllSelected\" (change)=\"selectAll()\">\n </mat-checkbox>\n </th>\n <td mat-cell *matCellDef=\"let element\" style=\"width:30px\">\n <mat-checkbox name=\"employee[{{element?.id}}]\" (click)=\"$event.stopPropagation()\"\n [(ngModel)]=\"element.is_selected\" (change)=\"employeeListModified($event, element)\"\n [disabled]=\"!entityFiles.length\">\n </mat-checkbox>\n </td>\n </ng-container>\n\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\"> {{ i+1 }} </td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef> Title </th>\n <td mat-cell *matCellDef=\"let element\">\n <div>\n <span>\n {{element.title}}\n </span>\n <span>\n <a href=\"{{element.url}}\" target=\"_blank\" class=\"text-decoration-none text-muted\">\n <button mat-icon-button type=\"button\">\n <mat-icon>download</mat-icon>\n </button>\n </a>\n </span>\n </div>\n </td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"details\">\n <th mat-header-cell *matHeaderCellDef> Details </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-read-more [text]=\"element.details\" [maxLength]=\"50\"></app-read-more>\n </td>\n </ng-container>\n\n <!-- File size Column -->\n <ng-container matColumnDef=\"file_size\">\n <th mat-header-cell *matHeaderCellDef> File Size </th>\n <td mat-cell *matCellDef=\"let element\"> {{ sizeOf(element.file_size)}} </td>\n </ng-container>\n\n <!-- Tags Column -->\n <ng-container matColumnDef=\"tag\">\n <th mat-header-cell *matHeaderCellDef> Tag </th>\n <td mat-cell *matCellDef=\"let element\" class=\"p-1\">\n <mat-chip-list aria-label=\"Tags\">\n <mat-chip *ngFor=\"let taggerModel of element.tags\">\n {{taggerModel?.tag?.title}}\n </mat-chip>\n </mat-chip-list>\n </td>\n </ng-container>\n\n <!-- Uploaded On Column -->\n <ng-container matColumnDef=\"uploaded_on\">\n <th mat-header-cell *matHeaderCellDef> Uploaded On </th>\n <td mat-cell *matCellDef=\"let element\">\n <div>\n {{element.created_at | date: 'mediumDate'}}\n </div>\n <div class=\"text-muted\">\n By {{element.creator?.name}}\n </div>\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 element\" style=\"min-width:110px\" class=\"text-muted\">\n <button type=\"button\" mat-icon-button (click)=\"editEntityFile(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"deleteEntityFile(element)\">\n <mat-icon>delete</mat-icon>\n </button>\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 <section fxFlex=\"30%\" *ngIf=\"!this.documentIds.length\">\n <app-file-dropper [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </div>\n </div>\n </mat-drawer-content>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" class=\"mat-typography p-4\" *ngIf=\"displayMode\">\n <div *ngFor=\"let efile of entityFiles\">\n <app-document-viewer [file]=\"efile.file\" [fileUrl]=\"efile.url\" [config]=\"this.viewerConfig\" [disableEdit]=\"true\">\n </app-document-viewer>\n <a href=\"{{efile.url}}\" target=\"_blank\">\n <button mat-button type=\"button\">View</button>\n </a>\n </div>\n </div>\n",
2016
2099
  styles: [""]
2017
2100
  },] }
2018
2101
  ];
@@ -2021,7 +2104,8 @@
2021
2104
  { type: common.Location },
2022
2105
  { type: AlertService },
2023
2106
  { type: dialog.MatDialog },
2024
- { type: forms.FormBuilder }
2107
+ { type: forms.FormBuilder },
2108
+ { type: ErrorHandlerService }
2025
2109
  ]; };
2026
2110
  exports.ɵo.propDecorators = {
2027
2111
  entityId: [{ type: i0.Input }],
@@ -2031,6 +2115,7 @@
2031
2115
  hideTitleAndDetails: [{ type: i0.Input }],
2032
2116
  displayMode: [{ type: i0.Input }],
2033
2117
  allowMultipleFiles: [{ type: i0.Input }],
2118
+ allowBulkUpdate: [{ type: i0.Input }],
2034
2119
  useTechlifyTags: [{ type: i0.Input }],
2035
2120
  title: [{ type: i0.Input }]
2036
2121
  };
@@ -2554,7 +2639,7 @@
2554
2639
  };
2555
2640
 
2556
2641
  var SearchableSelectorComponent_1;
2557
- exports.ɵq = SearchableSelectorComponent_1 = /** @class */ (function () {
2642
+ exports.ɵs = SearchableSelectorComponent_1 = /** @class */ (function () {
2558
2643
  function SearchableSelectorComponent(formBuilder, _focusMonitor, http, _elementRef, dialog, ngControl) {
2559
2644
  var _this = this;
2560
2645
  this._focusMonitor = _focusMonitor;
@@ -2832,8 +2917,8 @@
2832
2917
  };
2833
2918
  return SearchableSelectorComponent;
2834
2919
  }());
2835
- exports.ɵq.nextId = 0;
2836
- exports.ɵq.decorators = [
2920
+ exports.ɵs.nextId = 0;
2921
+ exports.ɵs.decorators = [
2837
2922
  { type: i0.Component, args: [{
2838
2923
  selector: 'app-searchable-selector',
2839
2924
  template: "<div [formGroup]=\"selectorForm\" class=\"searchable-selctor-container\">\n <mat-select formControlName=\"select_value\" focused=\"false\" [multiple]=\"multiple\" [required]=\"required\"\n autocomplete=\"off\" (selectionChange)=\"_handleInput()\" msInfiniteScroll (infiniteScroll)=\"onScroll()\"\n (openedChange)=\"openedChange($event)\">\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\">\n </mat-form-field>\n <div>\n <!-- TODO:Implement scroll only for options and have search fixed -->\n <mat-option *ngFor=\" let item of dataItems\" [value]=\"getPropertyValue(item,valueField)\">\n {{getPropertyValue(item,titleField)}}\n </mat-option>\n </div>\n <div fxlayout=\"column\" class=\"w-100\" fxLayoutAlign=\"center center\">\n <mat-spinner class=\"my-4\" color=\"primary\" diameter=\"30\" *ngIf=\"isLoading\"></mat-spinner>\n </div>\n </mat-select>\n <mat-icon *ngIf=\"add\" class=\"relative-icon\" matSuffix (click)=\"addItem($event)\">add_circle_outline</mat-icon>\n <mat-icon *ngIf=\"edit && selectedValue\" class=\"relative-icon\" matSuffix (click)=\"editItem($event)\">edit</mat-icon>\n</div>",
@@ -2846,7 +2931,7 @@
2846
2931
  styles: [".searchable-selctor-container{display:flex}.relative-icon{position:relative;top:-4px}"]
2847
2932
  },] }
2848
2933
  ];
2849
- exports.ɵq.ctorParameters = function () { return [
2934
+ exports.ɵs.ctorParameters = function () { return [
2850
2935
  { type: forms.FormBuilder },
2851
2936
  { type: a11y.FocusMonitor },
2852
2937
  { type: HttpService },
@@ -2854,7 +2939,7 @@
2854
2939
  { type: dialog.MatDialog },
2855
2940
  { type: forms.NgControl, decorators: [{ type: i0.Optional }, { type: i0.Self }] }
2856
2941
  ]; };
2857
- exports.ɵq.propDecorators = {
2942
+ exports.ɵs.propDecorators = {
2858
2943
  valueField: [{ type: i0.Input }],
2859
2944
  titleField: [{ type: i0.Input }],
2860
2945
  apiUrl: [{ type: i0.Input }],
@@ -2881,9 +2966,9 @@
2881
2966
  disabled: [{ type: i0.Input }],
2882
2967
  value: [{ type: i0.Input }]
2883
2968
  };
2884
- exports.ɵq = SearchableSelectorComponent_1 = __decorate([
2969
+ exports.ɵs = SearchableSelectorComponent_1 = __decorate([
2885
2970
  untilDestroy.UntilDestroy()
2886
- ], exports.ɵq);
2971
+ ], exports.ɵs);
2887
2972
 
2888
2973
  var MatSelectInfiniteScrollDirective = /** @class */ (function () {
2889
2974
  function MatSelectInfiniteScrollDirective(matSelect, ngZone) {
@@ -3205,7 +3290,7 @@
3205
3290
  }
3206
3291
 
3207
3292
  var TimelineFilterComponent_1;
3208
- exports.ɵbb = TimelineFilterComponent_1 = /** @class */ (function () {
3293
+ exports.ɵbc = TimelineFilterComponent_1 = /** @class */ (function () {
3209
3294
  function TimelineFilterComponent(formBuilder, ngControl, datePipe) {
3210
3295
  this.ngControl = ngControl;
3211
3296
  this.datePipe = datePipe;
@@ -3381,8 +3466,8 @@
3381
3466
  };
3382
3467
  return TimelineFilterComponent;
3383
3468
  }());
3384
- exports.ɵbb.nextId = 0;
3385
- exports.ɵbb.decorators = [
3469
+ exports.ɵbc.nextId = 0;
3470
+ exports.ɵbc.decorators = [
3386
3471
  { type: i0.Component, args: [{
3387
3472
  selector: 'app-timeline-filter',
3388
3473
  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",
@@ -3395,12 +3480,12 @@
3395
3480
  styles: [""]
3396
3481
  },] }
3397
3482
  ];
3398
- exports.ɵbb.ctorParameters = function () { return [
3483
+ exports.ɵbc.ctorParameters = function () { return [
3399
3484
  { type: forms.FormBuilder },
3400
3485
  { type: forms.NgControl, decorators: [{ type: i0.Optional }, { type: i0.Self }] },
3401
3486
  { type: common.DatePipe }
3402
3487
  ]; };
3403
- exports.ɵbb.propDecorators = {
3488
+ exports.ɵbc.propDecorators = {
3404
3489
  picker: [{ type: i0.ViewChild, args: ['picker',] }],
3405
3490
  timelineValue: [{ type: i0.Input }],
3406
3491
  timelines: [{ type: i0.Input }],
@@ -3419,9 +3504,9 @@
3419
3504
  disabled: [{ type: i0.Input }],
3420
3505
  value: [{ type: i0.Input }]
3421
3506
  };
3422
- exports.ɵbb = TimelineFilterComponent_1 = __decorate([
3507
+ exports.ɵbc = TimelineFilterComponent_1 = __decorate([
3423
3508
  untilDestroy.UntilDestroy()
3424
- ], exports.ɵbb);
3509
+ ], exports.ɵbc);
3425
3510
 
3426
3511
  var LoaderComponent = /** @class */ (function () {
3427
3512
  function LoaderComponent() {
@@ -3783,7 +3868,8 @@
3783
3868
  datepicker.MatDatepickerModule,
3784
3869
  list.MatListModule,
3785
3870
  tooltip.MatTooltipModule,
3786
- buttonToggle.MatButtonToggleModule
3871
+ buttonToggle.MatButtonToggleModule,
3872
+ sidenav.MatSidenavModule
3787
3873
  ]
3788
3874
  },] }
3789
3875
  ];
@@ -4274,11 +4360,11 @@
4274
4360
  MaterialModule
4275
4361
  ],
4276
4362
  declarations: [
4277
- exports.ɵq,
4363
+ exports.ɵs,
4278
4364
  MatSelectInfiniteScrollDirective
4279
4365
  ],
4280
4366
  exports: [
4281
- exports.ɵq,
4367
+ exports.ɵs,
4282
4368
  MatSelectInfiniteScrollDirective
4283
4369
  ]
4284
4370
  },] }
@@ -4441,7 +4527,7 @@
4441
4527
  }());
4442
4528
  TimelineFilterModule.decorators = [
4443
4529
  { type: i0.NgModule, args: [{
4444
- declarations: [exports.ɵbb],
4530
+ declarations: [exports.ɵbc],
4445
4531
  imports: [
4446
4532
  common.CommonModule,
4447
4533
  TimelineFilterRoutingModule,
@@ -4449,7 +4535,7 @@
4449
4535
  MaterialModule,
4450
4536
  forms.ReactiveFormsModule
4451
4537
  ],
4452
- exports: [exports.ɵbb]
4538
+ exports: [exports.ɵbc]
4453
4539
  },] }
4454
4540
  ];
4455
4541
 
@@ -4551,7 +4637,7 @@
4551
4637
  required: "Email Type is required"
4552
4638
  },
4553
4639
  };
4554
- exports.ɵbe = /** @class */ (function () {
4640
+ exports.ɵbf = /** @class */ (function () {
4555
4641
  function EmailSubscriptionUserFormComponent(fb, formValidatorService, alertService, dialogRef, data, http) {
4556
4642
  this.fb = fb;
4557
4643
  this.formValidatorService = formValidatorService;
@@ -4613,14 +4699,14 @@
4613
4699
  };
4614
4700
  return EmailSubscriptionUserFormComponent;
4615
4701
  }());
4616
- exports.ɵbe.decorators = [
4702
+ exports.ɵbf.decorators = [
4617
4703
  { type: i0.Component, args: [{
4618
4704
  selector: 'app-email-subscription-user-form',
4619
4705
  template: "<form [formGroup]=\"esUserFormGroup\" (ngSubmit)=\"submit()\" class=\"mat-typography\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>Email Subscription User</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field fxFlex=\"48%\" class=\"mt-1\">\n <mat-label>User</mat-label>\n <app-searchable-selector formControlName=\"user_id\" apiUrl=\"api/users\" titleField=\"name\" required\n [selectedValue]=\"selectedUser\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('user_id')\">{{getErrorMessage('user_id')}}</mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"48%\" class=\"mt-1\">\n <mat-label>Email Type</mat-label>\n <app-searchable-selector formControlName=\"email_type_id\" apiUrl=\"api/email-subscription-types\"\n required [selectedValue]=\"selectedType\">\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('email_type_id')\">{{getErrorMessage('email_type_id')}}</mat-error>\n </mat-form-field>\n\n <div class=\"my-2\" fxLayout=\"row\" fxLayoutGap=\"30px\" fxLayoutAlign=\"end\" fxFlex=\"100%\">\n <button mat-raised-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button mat-raised-button type=\"submit\" color=\"primary\" [disabled]=\"isSubmitLoading\">\n <app-loader class=\"inline-loader\" [isLoading]=\"isSubmitLoading\"></app-loader>\n Save\n </button>\n </div>\n </div>\n </div>\n\n\n </div>\n</form>",
4620
4706
  styles: [""]
4621
4707
  },] }
4622
4708
  ];
4623
- exports.ɵbe.ctorParameters = function () { return [
4709
+ exports.ɵbf.ctorParameters = function () { return [
4624
4710
  { type: forms.FormBuilder },
4625
4711
  { type: FormValidatorService },
4626
4712
  { type: AlertService },
@@ -4628,9 +4714,9 @@
4628
4714
  { type: undefined, decorators: [{ type: i0.Inject, args: [dialog.MAT_DIALOG_DATA,] }] },
4629
4715
  { type: HttpService }
4630
4716
  ]; };
4631
- exports.ɵbe = __decorate([
4717
+ exports.ɵbf = __decorate([
4632
4718
  untilDestroy.UntilDestroy()
4633
- ], exports.ɵbe);
4719
+ ], exports.ɵbf);
4634
4720
 
4635
4721
  var EmailSubscriptionUserFormModule = /** @class */ (function () {
4636
4722
  function EmailSubscriptionUserFormModule() {
@@ -4639,7 +4725,7 @@
4639
4725
  }());
4640
4726
  EmailSubscriptionUserFormModule.decorators = [
4641
4727
  { type: i0.NgModule, args: [{
4642
- declarations: [exports.ɵbe],
4728
+ declarations: [exports.ɵbf],
4643
4729
  imports: [
4644
4730
  common.CommonModule,
4645
4731
  MaterialModule,
@@ -4649,12 +4735,12 @@
4649
4735
  EmailSubscriptionUserFormRoutingModule,
4650
4736
  LoaderModule
4651
4737
  ],
4652
- entryComponents: [exports.ɵbe]
4738
+ entryComponents: [exports.ɵbf]
4653
4739
  },] }
4654
4740
  ];
4655
4741
 
4656
4742
  var log$4 = new Logger('EmailSubscriptionUser list');
4657
- exports.ɵbf = /** @class */ (function () {
4743
+ exports.ɵbg = /** @class */ (function () {
4658
4744
  function EmailSubscriptionUserListComponent(dialog, http, router) {
4659
4745
  this.dialog = dialog;
4660
4746
  this.http = http;
@@ -4715,7 +4801,7 @@
4715
4801
  };
4716
4802
  EmailSubscriptionUserListComponent.prototype.addEmailSubscriptionUser = function () {
4717
4803
  var _this = this;
4718
- var dialogRef = this.dialog.open(exports.ɵbe, {
4804
+ var dialogRef = this.dialog.open(exports.ɵbf, {
4719
4805
  width: '800px',
4720
4806
  autoFocus: false,
4721
4807
  data: {} // Any data passed here will be injected into the model
@@ -4730,7 +4816,7 @@
4730
4816
  EmailSubscriptionUserListComponent.prototype.editEmailSubscriptionUser = function (event, esUser) {
4731
4817
  var _this = this;
4732
4818
  event.stopPropagation();
4733
- var dialogRef = this.dialog.open(exports.ɵbe, {
4819
+ var dialogRef = this.dialog.open(exports.ɵbf, {
4734
4820
  width: '800px',
4735
4821
  autoFocus: false,
4736
4822
  data: {
@@ -4788,24 +4874,24 @@
4788
4874
  };
4789
4875
  return EmailSubscriptionUserListComponent;
4790
4876
  }());
4791
- exports.ɵbf.decorators = [
4877
+ exports.ɵbg.decorators = [
4792
4878
  { type: i0.Component, args: [{
4793
4879
  selector: 'app-email-subscription-user-list',
4794
4880
  template: "<div class=\"mat-typography m-4\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <app-email-subscription-user-list-filter (valueChange)=\"filterChange($event)\">\n </app-email-subscription-user-list-filter>\n <div class=\"ml-2\">\n <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"addEmailSubscriptionUser()\">+\n User Subscription</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\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"esUserList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"email-subscription-user-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let esUser; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n <ng-container matColumnDef=\"user.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> User </th>\n <td mat-cell *matCellDef=\"let esUser;\"> {{ esUser?.user?.name }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"email_type.title\">\n <th mat-header-cell *matHeaderCellDef> Email Type </th>\n <td mat-cell *matCellDef=\"let esUser;\"> {{ esUser?.email_type?.title }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"creator.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Creator</th>\n <td mat-cell *matCellDef=\"let esUser;\">\n {{esUser?.creator?.name }}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created On</th>\n <td mat-cell *matCellDef=\"let esUser;\">\n {{esUser?.created_at | date:'medium' }}\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 esUser\">\n <button type=\"button\" mat-icon-button (click)=\"deleteEmailSubscriptionUser($event,esUser)\">\n <mat-icon>delete</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"editEmailSubscriptionUser($event,esUser)\">\n <mat-icon>edit</mat-icon>\n </button>\n </td>\n </ng-container>\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>",
4795
4881
  styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
4796
4882
  },] }
4797
4883
  ];
4798
- exports.ɵbf.ctorParameters = function () { return [
4884
+ exports.ɵbg.ctorParameters = function () { return [
4799
4885
  { type: dialog.MatDialog },
4800
4886
  { type: HttpService },
4801
4887
  { type: i1$2.Router }
4802
4888
  ]; };
4803
- exports.ɵbf.propDecorators = {
4889
+ exports.ɵbg.propDecorators = {
4804
4890
  sort: [{ type: i0.ViewChild, args: [sort.MatSort, { static: true },] }]
4805
4891
  };
4806
- exports.ɵbf = __decorate([
4892
+ exports.ɵbg = __decorate([
4807
4893
  untilDestroy.UntilDestroy()
4808
- ], exports.ɵbf);
4894
+ ], exports.ɵbg);
4809
4895
 
4810
4896
  var esulr = {
4811
4897
  title: 'Email Subscription Users',
@@ -4817,7 +4903,7 @@
4817
4903
  var routes$4 = [
4818
4904
  {
4819
4905
  path: '',
4820
- component: exports.ɵbf,
4906
+ component: exports.ɵbg,
4821
4907
  canActivate: [AuthenticationGuard],
4822
4908
  data: esulr
4823
4909
  },
@@ -4847,7 +4933,7 @@
4847
4933
  },] }
4848
4934
  ];
4849
4935
 
4850
- exports.ɵbh = /** @class */ (function () {
4936
+ exports.ɵbi = /** @class */ (function () {
4851
4937
  function EmailSubscriptionUserListFilterComponent(fb) {
4852
4938
  this.fb = fb;
4853
4939
  this.valueChange = new i0.EventEmitter();
@@ -4876,22 +4962,22 @@
4876
4962
  };
4877
4963
  return EmailSubscriptionUserListFilterComponent;
4878
4964
  }());
4879
- exports.ɵbh.decorators = [
4965
+ exports.ɵbi.decorators = [
4880
4966
  { type: i0.Component, args: [{
4881
4967
  selector: 'app-email-subscription-user-list-filter',
4882
4968
  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>",
4883
4969
  styles: [""]
4884
4970
  },] }
4885
4971
  ];
4886
- exports.ɵbh.ctorParameters = function () { return [
4972
+ exports.ɵbi.ctorParameters = function () { return [
4887
4973
  { type: forms.FormBuilder }
4888
4974
  ]; };
4889
- exports.ɵbh.propDecorators = {
4975
+ exports.ɵbi.propDecorators = {
4890
4976
  valueChange: [{ type: i0.Output }]
4891
4977
  };
4892
- exports.ɵbh = __decorate([
4978
+ exports.ɵbi = __decorate([
4893
4979
  untilDestroy.UntilDestroy()
4894
- ], exports.ɵbh);
4980
+ ], exports.ɵbi);
4895
4981
 
4896
4982
  var EmailSubscriptionUserListFilterModule = /** @class */ (function () {
4897
4983
  function EmailSubscriptionUserListFilterModule() {
@@ -4900,7 +4986,7 @@
4900
4986
  }());
4901
4987
  EmailSubscriptionUserListFilterModule.decorators = [
4902
4988
  { type: i0.NgModule, args: [{
4903
- declarations: [exports.ɵbh],
4989
+ declarations: [exports.ɵbi],
4904
4990
  imports: [
4905
4991
  common.CommonModule,
4906
4992
  MaterialModule,
@@ -4909,7 +4995,7 @@
4909
4995
  SearchableSelectorModule,
4910
4996
  EmailSubscriptionUserListFilterRoutingModule
4911
4997
  ],
4912
- exports: [exports.ɵbh]
4998
+ exports: [exports.ɵbi]
4913
4999
  },] }
4914
5000
  ];
4915
5001
 
@@ -4920,7 +5006,7 @@
4920
5006
  }());
4921
5007
  EmailSubscriptionUserListModule.decorators = [
4922
5008
  { type: i0.NgModule, args: [{
4923
- declarations: [exports.ɵbf],
5009
+ declarations: [exports.ɵbg],
4924
5010
  imports: [
4925
5011
  common.CommonModule,
4926
5012
  ngxInfiniteScroll.InfiniteScrollModule,
@@ -4931,7 +5017,7 @@
4931
5017
  EmailSubscriptionUserFormModule,
4932
5018
  EmailSubscriptionUserListFilterModule
4933
5019
  ],
4934
- exports: [exports.ɵbf]
5020
+ exports: [exports.ɵbg]
4935
5021
  },] }
4936
5022
  ];
4937
5023
 
@@ -4987,7 +5073,7 @@
4987
5073
  required: "Frequency is required"
4988
5074
  },
4989
5075
  };
4990
- exports.ɵbi = /** @class */ (function () {
5076
+ exports.ɵbj = /** @class */ (function () {
4991
5077
  function EmailSubscriptionTypeFormComponent(fb, formValidatorService, alertService, dialogRef, data, http) {
4992
5078
  this.fb = fb;
4993
5079
  this.formValidatorService = formValidatorService;
@@ -5051,14 +5137,14 @@
5051
5137
  };
5052
5138
  return EmailSubscriptionTypeFormComponent;
5053
5139
  }());
5054
- exports.ɵbi.decorators = [
5140
+ exports.ɵbj.decorators = [
5055
5141
  { type: i0.Component, args: [{
5056
5142
  selector: 'app-email-subscription-type-form',
5057
5143
  template: "<form [formGroup]=\"emailSubscriptionTypeFormGroup\" (ngSubmit)=\"submit()\" class=\"mat-typography\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>Email Subscription Type</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"column\">\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field fxFlex=\"100%\" class=\"mt-1\">\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('title')\">{{getErrorMessage('title')}}</mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"100%\" class=\"mt-1\">\n <input matInput formControlName=\"code\" placeholder=\"Code\" autocomplete=\"off\" required />\n <mat-hint align=\"end\">Unique Value</mat-hint>\n <mat-error *ngIf=\"isFieldValid('code')\">{{getErrorMessage('code')}}</mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"100%\" class=\"mt-1\">\n <mat-label>Frequency</mat-label>\n <app-searchable-selector formControlName=\"frequency_id\" apiUrl=\"api/email-subscription-frequencies\"\n [(selectedValue)]=\"selectedFrequency\" [enableSearch]=\"false\" required>\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('frequency_id')\">{{getErrorMessage('frequency_id')}}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field fxFlex=\"100%\" class=\"mt-1\">\n <textarea matInput formControlName=\"description\" placeholder=\"Description\"\n autocomplete=\"off\"></textarea>\n </mat-form-field>\n\n <div class=\"my-2\" fxLayout=\"row\" fxLayoutGap=\"30px\" fxLayoutAlign=\"end\" fxFlex=\"100%\">\n <button mat-raised-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n <button mat-raised-button type=\"submit\" color=\"primary\" [disabled]=\"isSubmitLoading\">\n <app-loader class=\"inline-loader\" [isLoading]=\"isSubmitLoading\"></app-loader>\n Save\n </button>\n </div>\n </div>\n </div>\n\n\n </div>\n</form>",
5058
5144
  styles: [""]
5059
5145
  },] }
5060
5146
  ];
5061
- exports.ɵbi.ctorParameters = function () { return [
5147
+ exports.ɵbj.ctorParameters = function () { return [
5062
5148
  { type: forms.FormBuilder },
5063
5149
  { type: FormValidatorService },
5064
5150
  { type: AlertService },
@@ -5066,9 +5152,9 @@
5066
5152
  { type: undefined, decorators: [{ type: i0.Inject, args: [dialog.MAT_DIALOG_DATA,] }] },
5067
5153
  { type: HttpService }
5068
5154
  ]; };
5069
- exports.ɵbi = __decorate([
5155
+ exports.ɵbj = __decorate([
5070
5156
  untilDestroy.UntilDestroy()
5071
- ], exports.ɵbi);
5157
+ ], exports.ɵbj);
5072
5158
 
5073
5159
  var EmailSubscriptionTypeFormModule = /** @class */ (function () {
5074
5160
  function EmailSubscriptionTypeFormModule() {
@@ -5077,7 +5163,7 @@
5077
5163
  }());
5078
5164
  EmailSubscriptionTypeFormModule.decorators = [
5079
5165
  { type: i0.NgModule, args: [{
5080
- declarations: [exports.ɵbi],
5166
+ declarations: [exports.ɵbj],
5081
5167
  imports: [
5082
5168
  common.CommonModule,
5083
5169
  MaterialModule,
@@ -5087,12 +5173,12 @@
5087
5173
  EmailSubscriptionTypeFormRoutingModule,
5088
5174
  LoaderModule
5089
5175
  ],
5090
- exports: [exports.ɵbi],
5091
- entryComponents: [exports.ɵbi]
5176
+ exports: [exports.ɵbj],
5177
+ entryComponents: [exports.ɵbj]
5092
5178
  },] }
5093
5179
  ];
5094
5180
 
5095
- exports.ɵbj = /** @class */ (function () {
5181
+ exports.ɵbk = /** @class */ (function () {
5096
5182
  function EmailSubscriptionTypeListComponent(dialog, http) {
5097
5183
  this.dialog = dialog;
5098
5184
  this.http = http;
@@ -5156,7 +5242,7 @@
5156
5242
  };
5157
5243
  EmailSubscriptionTypeListComponent.prototype.addEmailSubscriptionType = function () {
5158
5244
  var _this = this;
5159
- var dialogRef = this.dialog.open(exports.ɵbi, {
5245
+ var dialogRef = this.dialog.open(exports.ɵbj, {
5160
5246
  width: '400px',
5161
5247
  autoFocus: false,
5162
5248
  data: {} // Any data passed here will be injected into the model
@@ -5170,7 +5256,7 @@
5170
5256
  EmailSubscriptionTypeListComponent.prototype.editEmailSubscriptionType = function (event, emailSubscriptionType) {
5171
5257
  var _this = this;
5172
5258
  event.stopPropagation();
5173
- var dialogRef = this.dialog.open(exports.ɵbi, {
5259
+ var dialogRef = this.dialog.open(exports.ɵbj, {
5174
5260
  width: '400px',
5175
5261
  autoFocus: false,
5176
5262
  data: {
@@ -5227,23 +5313,23 @@
5227
5313
  };
5228
5314
  return EmailSubscriptionTypeListComponent;
5229
5315
  }());
5230
- exports.ɵbj.decorators = [
5316
+ exports.ɵbk.decorators = [
5231
5317
  { type: i0.Component, args: [{
5232
5318
  selector: 'app-email-subscription-type-list',
5233
5319
  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>",
5234
5320
  styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
5235
5321
  },] }
5236
5322
  ];
5237
- exports.ɵbj.ctorParameters = function () { return [
5323
+ exports.ɵbk.ctorParameters = function () { return [
5238
5324
  { type: dialog.MatDialog },
5239
5325
  { type: HttpService }
5240
5326
  ]; };
5241
- exports.ɵbj.propDecorators = {
5327
+ exports.ɵbk.propDecorators = {
5242
5328
  sort: [{ type: i0.ViewChild, args: [sort.MatSort, { static: true },] }]
5243
5329
  };
5244
- exports.ɵbj = __decorate([
5330
+ exports.ɵbk = __decorate([
5245
5331
  untilDestroy.UntilDestroy()
5246
- ], exports.ɵbj);
5332
+ ], exports.ɵbk);
5247
5333
 
5248
5334
  var estlr = {
5249
5335
  title: 'Email Subscription Type',
@@ -5255,7 +5341,7 @@
5255
5341
  var routes$8 = [
5256
5342
  {
5257
5343
  path: '',
5258
- component: exports.ɵbj,
5344
+ component: exports.ɵbk,
5259
5345
  canActivate: [AuthenticationGuard],
5260
5346
  data: estlr
5261
5347
  },
@@ -5279,7 +5365,7 @@
5279
5365
  }());
5280
5366
  EmailSubscriptionTypeListModule.decorators = [
5281
5367
  { type: i0.NgModule, args: [{
5282
- declarations: [exports.ɵbj],
5368
+ declarations: [exports.ɵbk],
5283
5369
  imports: [
5284
5370
  common.CommonModule,
5285
5371
  MaterialModule,
@@ -5289,11 +5375,11 @@
5289
5375
  EmailSubscriptionTypeFormModule,
5290
5376
  EmailSubscriptionTypeListRoutingModule
5291
5377
  ],
5292
- exports: [exports.ɵbj]
5378
+ exports: [exports.ɵbk]
5293
5379
  },] }
5294
5380
  ];
5295
5381
 
5296
- exports.ɵbk = /** @class */ (function () {
5382
+ exports.ɵbl = /** @class */ (function () {
5297
5383
  function EmailSubscriptionForUserComponent(http) {
5298
5384
  this.http = http;
5299
5385
  this.subscriptions = [];
@@ -5348,19 +5434,19 @@
5348
5434
  };
5349
5435
  return EmailSubscriptionForUserComponent;
5350
5436
  }());
5351
- exports.ɵbk.decorators = [
5437
+ exports.ɵbl.decorators = [
5352
5438
  { type: i0.Component, args: [{
5353
5439
  selector: 'app-email-subscription-for-user',
5354
5440
  template: "<div fxLayout=\"column\" class=\"container my-4\">\n\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <mat-list>\n <div mat-subheader>Available Subscriptions</div>\n <mat-list-item *ngFor=\"let sub of subscriptions\">\n <mat-icon mat-list-icon>email</mat-icon>\n <div mat-line>{{sub?.title}} </div>\n <div mat-line class=\"text-secondary\">{{sub?.frequency?.title}}</div>\n <div mat-line> {{sub?.description}} </div>\n <div fxLayout fxLayoutAlign=\"end\">\n <button type=\"button\" *ngIf=\"!sub?.current_user_subscription\" mat-raised-button color=\"primary\"\n (click)=\"subscribe(sub)\">Subscribe</button>\n <button type=\"button\" *ngIf=\"sub?.current_user_subscription\" mat-stroked-button color=\"primary\"\n (click)=\"unsubscribe(sub)\">Unsubscribe</button>\n </div>\n <mat-divider></mat-divider>\n </mat-list-item>\n </mat-list>\n </div>\n\n</div>",
5355
5441
  styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
5356
5442
  },] }
5357
5443
  ];
5358
- exports.ɵbk.ctorParameters = function () { return [
5444
+ exports.ɵbl.ctorParameters = function () { return [
5359
5445
  { type: HttpService }
5360
5446
  ]; };
5361
- exports.ɵbk = __decorate([
5447
+ exports.ɵbl = __decorate([
5362
5448
  untilDestroy.UntilDestroy()
5363
- ], exports.ɵbk);
5449
+ ], exports.ɵbl);
5364
5450
 
5365
5451
  var esfur = {
5366
5452
  permissions: {
@@ -5370,7 +5456,7 @@
5370
5456
  var routes$9 = [
5371
5457
  {
5372
5458
  path: '',
5373
- component: exports.ɵbk,
5459
+ component: exports.ɵbl,
5374
5460
  canActivate: [AuthenticationGuard],
5375
5461
  data: esfur
5376
5462
  },
@@ -5394,7 +5480,7 @@
5394
5480
  }());
5395
5481
  EmailSubscriptionForUserModule.decorators = [
5396
5482
  { type: i0.NgModule, args: [{
5397
- declarations: [exports.ɵbk],
5483
+ declarations: [exports.ɵbl],
5398
5484
  imports: [
5399
5485
  common.CommonModule,
5400
5486
  ngxInfiniteScroll.InfiniteScrollModule,
@@ -5402,7 +5488,7 @@
5402
5488
  flexLayout.FlexLayoutModule,
5403
5489
  EmailSubscriptionForUserRoutingModule
5404
5490
  ],
5405
- exports: [exports.ɵbk]
5491
+ exports: [exports.ɵbl]
5406
5492
  },] }
5407
5493
  ];
5408
5494
 
@@ -5594,7 +5680,7 @@
5594
5680
  },] }
5595
5681
  ];
5596
5682
 
5597
- exports.ɵbl = /** @class */ (function () {
5683
+ exports.ɵbm = /** @class */ (function () {
5598
5684
  function TechlifyUpdatesListComponent(dialog, alertService, techlifyUpdateService, fb) {
5599
5685
  this.dialog = dialog;
5600
5686
  this.alertService = alertService;
@@ -5754,26 +5840,26 @@
5754
5840
  };
5755
5841
  return TechlifyUpdatesListComponent;
5756
5842
  }());
5757
- exports.ɵbl.decorators = [
5843
+ exports.ɵbm.decorators = [
5758
5844
  { type: i0.Component, args: [{
5759
5845
  selector: 'app-techlify-updates-list',
5760
5846
  template: "<section class=\"p-4\" fxLayout=\"column\">\n <h3 class=\"primary-color text-center\">\n App Updates\n <button mat-raised-button (click)=\"modifyTechlifyUpdate()\" class=\"primary-bg text-white\">\n <mat-icon>\n add\n </mat-icon>\n Create\n </button>\n </h3>\n <form [formGroup]=\"filterFormGroup\" fxLayout=\"row wrap\" fxLayoutGap=\"0.5rem\" fxFlex=\"100%\" style=\"font-size: 12px;\">\n <mat-form-field fxFlex=\"0 1 calc(100% - 0.5rem)\" fxFlex.gt-md=\"0 1 calc(15% - 0.5rem)\" appearance=\"outline\"\n fxFlex.gt-sm=\"0 1 calc(20% - 0.5rem)\">\n <input type=\"text\" matInput formControlName=\"search\" placeholder=\"Title\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"filterFormGroup.get('search').value\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field fxFlex=\"0 1 calc(100% - 0.5rem)\" fxFlex.gt-md=\"0 1 calc(15% - 0.5rem)\" appearance=\"outline\"\n fxFlex.gt-sm=\"0 1 calc(20% - 0.5rem)\">\n <input type=\"text\" matInput formControlName=\"version\" placeholder=\"Version\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"filterFormGroup.get('version').value\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('version')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <table mat-table [dataSource]=\"techlifyUpdates\" class=\"mat-elevation-z8 w-100\" matSort multiTemplateDataRows\n (matSortChange)=\"sortColumn($event)\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\">\n\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\"> {{ i+1 }} </td>\n </ng-container>\n\n <!-- Course Column -->\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Title </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.title}} </td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Version </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.version}} </td>\n </ng-container>\n\n <!-- Released On Column -->\n <ng-container matColumnDef=\"released_on\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Released On </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.released_on | date:'mediumDate'}} </td>\n </ng-container>\n\n <!-- Learn More Link Column -->\n <ng-container matColumnDef=\"learn_more_link\">\n <th mat-header-cell *matHeaderCellDef> Learn more link </th>\n <td mat-cell *matCellDef=\"let element\">\n <a [href]=\"element?.learn_more_link\" target=\"_blank\">\n {{element?.learn_more_link}}\n </a>\n </td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-read-more [text]=\"element?.description\" [maxLength]=\"50\"></app-read-more>\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator\">\n <th mat-header-cell *matHeaderCellDef> Creator </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.creator?.name}}\n <div fxLayout class=\"small\">\n {{element?.created_at | date : 'mediumDate'}}\n </div>\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 element\" class=\"secondary-color\">\n <button type=\"button\" class=\"secondary-color\" mat-icon-button (click)=\"modifyTechlifyUpdate(element)\">\n <mat-icon>edit</mat-icon>\n </button>\n\n <button type=\"button\" class=\"secondary-color\" mat-icon-button (click)=\"deleteTechlifyUpdate(element)\">\n <mat-icon>delete</mat-icon>\n </button>\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</section>\n",
5761
5847
  styles: [""]
5762
5848
  },] }
5763
5849
  ];
5764
- exports.ɵbl.ctorParameters = function () { return [
5850
+ exports.ɵbm.ctorParameters = function () { return [
5765
5851
  { type: dialog.MatDialog },
5766
5852
  { type: AlertService },
5767
5853
  { type: TechlifyUpdateService },
5768
5854
  { type: forms.FormBuilder }
5769
5855
  ]; };
5770
- exports.ɵbl = __decorate([
5856
+ exports.ɵbm = __decorate([
5771
5857
  untilDestroy.UntilDestroy()
5772
- ], exports.ɵbl);
5858
+ ], exports.ɵbm);
5773
5859
 
5774
5860
  var routes$a = [
5775
5861
  { path: '', redirectTo: 'all', pathMatch: 'full' },
5776
- { path: 'all', component: exports.ɵbl },
5862
+ { path: 'all', component: exports.ɵbm },
5777
5863
  //fallback
5778
5864
  {
5779
5865
  path: '**',
@@ -5800,7 +5886,7 @@
5800
5886
  }());
5801
5887
  TechlifyUpdateModule.decorators = [
5802
5888
  { type: i0.NgModule, args: [{
5803
- declarations: [exports.ɵbl],
5889
+ declarations: [exports.ɵbm],
5804
5890
  imports: [
5805
5891
  common.CommonModule,
5806
5892
  forms.ReactiveFormsModule,
@@ -5847,7 +5933,7 @@
5847
5933
  { type: i1$2.Router }
5848
5934
  ]; };
5849
5935
 
5850
- exports.ɵbr = /** @class */ (function () {
5936
+ exports.ɵbs = /** @class */ (function () {
5851
5937
  function TechlifyUpdateHistoryComponent(dialog, techlifyUpdateService, fb, alertService) {
5852
5938
  this.dialog = dialog;
5853
5939
  this.techlifyUpdateService = techlifyUpdateService;
@@ -5984,26 +6070,26 @@
5984
6070
  };
5985
6071
  return TechlifyUpdateHistoryComponent;
5986
6072
  }());
5987
- exports.ɵbr.decorators = [
6073
+ exports.ɵbs.decorators = [
5988
6074
  { type: i0.Component, args: [{
5989
6075
  selector: 'app-techlify-update-history',
5990
6076
  template: "<section class=\"p-4\" fxLayout=\"column\">\n <h3 class=\"primary-color text-center\">\n App Updates\n </h3>\n <form [formGroup]=\"filterFormGroup\" fxLayout=\"row wrap\" fxLayoutGap=\"0.5rem\" fxFlex=\"100%\" style=\"font-size: 12px;\">\n <mat-form-field fxFlex=\"0 1 calc(100% - 0.5rem)\" fxFlex.gt-md=\"0 1 calc(15% - 0.5rem)\" appearance=\"outline\"\n fxFlex.gt-sm=\"0 1 calc(20% - 0.5rem)\">\n <input type=\"text\" matInput formControlName=\"search\" placeholder=\"Title\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"filterFormGroup.get('search').value\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('search')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field fxFlex=\"0 1 calc(100% - 0.5rem)\" fxFlex.gt-md=\"0 1 calc(15% - 0.5rem)\" appearance=\"outline\"\n fxFlex.gt-sm=\"0 1 calc(20% - 0.5rem)\">\n <input type=\"text\" matInput formControlName=\"version\" placeholder=\"Version\" autocomplete=\"off\" />\n <button mat-button *ngIf=\"filterFormGroup.get('version').value\" matSuffix mat-icon-button\n (click)=\"resetFieldValue('version')\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n\n <table mat-table [dataSource]=\"techlifyUpdates\" class=\"mat-elevation-z8 w-100\" matSort multiTemplateDataRows\n (matSortChange)=\"sortColumn($event)\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\">\n\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\"> {{ i+1 }} </td>\n </ng-container>\n\n <!-- Course Column -->\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Title </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.title}} </td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Version </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.version}} </td>\n </ng-container>\n\n <!-- Released On Column -->\n <ng-container matColumnDef=\"released_on\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header disableClear> Released On </th>\n <td mat-cell *matCellDef=\"let element\"> {{element?.released_on | date:'mediumDate'}} </td>\n </ng-container>\n\n <!-- Learn More Link Column -->\n <ng-container matColumnDef=\"learn_more_link\">\n <th mat-header-cell *matHeaderCellDef> Learn more link </th>\n <td mat-cell *matCellDef=\"let element\">\n <a [href]=\"element?.learn_more_link\" target=\"_blank\">\n {{element?.learn_more_link}}\n </a>\n </td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"description\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let element\">\n <app-read-more [text]=\"element?.description\" [maxLength]=\"50\"></app-read-more>\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator\">\n <th mat-header-cell *matHeaderCellDef> Creator </th>\n <td mat-cell *matCellDef=\"let element\">\n {{element?.creator?.name}}\n <div fxLayout class=\"small\">\n {{element?.created_at | date : 'mediumDate'}}\n </div>\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 element\" class=\"secondary-color\">\n <button type=\"button\" class=\"secondary-color\" mat-icon-button (click)=\"openUpdateView(element)\">\n <mat-icon>remove_red_eye</mat-icon>\n </button>\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</section>\n",
5991
6077
  styles: [""]
5992
6078
  },] }
5993
6079
  ];
5994
- exports.ɵbr.ctorParameters = function () { return [
6080
+ exports.ɵbs.ctorParameters = function () { return [
5995
6081
  { type: dialog.MatDialog },
5996
6082
  { type: TechlifyUpdateService },
5997
6083
  { type: forms.FormBuilder },
5998
6084
  { type: AlertService }
5999
6085
  ]; };
6000
- exports.ɵbr = __decorate([
6086
+ exports.ɵbs = __decorate([
6001
6087
  untilDestroy.UntilDestroy()
6002
- ], exports.ɵbr);
6088
+ ], exports.ɵbs);
6003
6089
 
6004
6090
  var routes$b = [
6005
6091
  { path: '', redirectTo: 'update-history', pathMatch: 'full' },
6006
- { path: 'update-history', component: exports.ɵbr },
6092
+ { path: 'update-history', component: exports.ɵbs },
6007
6093
  //fallback
6008
6094
  {
6009
6095
  path: '**',
@@ -6040,7 +6126,7 @@
6040
6126
  ReadMoreModule,
6041
6127
  TechlifyUpdateHistoryRoutingModule
6042
6128
  ],
6043
- declarations: [exports.ɵbr]
6129
+ declarations: [exports.ɵbs]
6044
6130
  },] }
6045
6131
  ];
6046
6132
 
@@ -8226,24 +8312,24 @@
8226
8312
  exports.DateValidator = DateValidator;
8227
8313
  exports.DocumentViewerComponent = DocumentViewerComponent;
8228
8314
  exports.DocumentViewerModule = DocumentViewerModule;
8229
- exports.EmailSubscriptionForUserComponent = exports.ɵbk;
8315
+ exports.EmailSubscriptionForUserComponent = exports.ɵbl;
8230
8316
  exports.EmailSubscriptionForUserModule = EmailSubscriptionForUserModule;
8231
8317
  exports.EmailSubscriptionForUserRoutingModule = EmailSubscriptionForUserRoutingModule;
8232
8318
  exports.EmailSubscriptionModule = EmailSubscriptionModule;
8233
8319
  exports.EmailSubscriptionRoutingModule = EmailSubscriptionRoutingModule;
8234
- exports.EmailSubscriptionTypeFormComponent = exports.ɵbi;
8320
+ exports.EmailSubscriptionTypeFormComponent = exports.ɵbj;
8235
8321
  exports.EmailSubscriptionTypeFormModule = EmailSubscriptionTypeFormModule;
8236
8322
  exports.EmailSubscriptionTypeFormRoutingModule = EmailSubscriptionTypeFormRoutingModule;
8237
- exports.EmailSubscriptionTypeListComponent = exports.ɵbj;
8323
+ exports.EmailSubscriptionTypeListComponent = exports.ɵbk;
8238
8324
  exports.EmailSubscriptionTypeListModule = EmailSubscriptionTypeListModule;
8239
8325
  exports.EmailSubscriptionTypeListRoutingModule = EmailSubscriptionTypeListRoutingModule;
8240
8326
  exports.EmailSubscriptionTypeModule = EmailSubscriptionTypeModule;
8241
8327
  exports.EmailSubscriptionTypeRoutingModule = EmailSubscriptionTypeRoutingModule;
8242
- exports.EmailSubscriptionUserFormComponent = exports.ɵbe;
8328
+ exports.EmailSubscriptionUserFormComponent = exports.ɵbf;
8243
8329
  exports.EmailSubscriptionUserFormModule = EmailSubscriptionUserFormModule;
8244
8330
  exports.EmailSubscriptionUserFormRoutingModule = EmailSubscriptionUserFormRoutingModule;
8245
- exports.EmailSubscriptionUserListComponent = exports.ɵbf;
8246
- exports.EmailSubscriptionUserListFilterComponent = exports.ɵbh;
8331
+ exports.EmailSubscriptionUserListComponent = exports.ɵbg;
8332
+ exports.EmailSubscriptionUserListFilterComponent = exports.ɵbi;
8247
8333
  exports.EmailSubscriptionUserListFilterModule = EmailSubscriptionUserListFilterModule;
8248
8334
  exports.EmailSubscriptionUserListFilterRoutingModule = EmailSubscriptionUserListFilterRoutingModule;
8249
8335
  exports.EmailSubscriptionUserListModule = EmailSubscriptionUserListModule;
@@ -8282,7 +8368,7 @@
8282
8368
  exports.ReadMoreComponent = ReadMoreComponent;
8283
8369
  exports.ReadMoreModule = ReadMoreModule;
8284
8370
  exports.RouteReusableStrategy = RouteReusableStrategy;
8285
- exports.SearchableSelectorComponent = exports.ɵq;
8371
+ exports.SearchableSelectorComponent = exports.ɵs;
8286
8372
  exports.SearchableSelectorModule = SearchableSelectorModule;
8287
8373
  exports.SnackModule = SnackModule;
8288
8374
  exports.StorageService = StorageService;
@@ -8300,7 +8386,7 @@
8300
8386
  exports.TechlifyUpdateHistoryModule = TechlifyUpdateHistoryModule;
8301
8387
  exports.TechlifyUpdateModule = TechlifyUpdateModule;
8302
8388
  exports.Timeline = Timeline;
8303
- exports.TimelineFilterComponent = exports.ɵbb;
8389
+ exports.TimelineFilterComponent = exports.ɵbc;
8304
8390
  exports.TimelineFilterModule = TimelineFilterModule;
8305
8391
  exports.TokenInterceptor = TokenInterceptor;
8306
8392
  exports.UpdateNotifierComponent = UpdateNotifierComponent;
@@ -8313,20 +8399,20 @@
8313
8399
  exports.esulr = esulr;
8314
8400
  exports.ɵa = SnackModule;
8315
8401
  exports.ɵb = SuccessSnackComponent;
8316
- exports.ɵba = NumberSelector;
8317
- exports.ɵbc = TimelineFilterRoutingModule;
8318
- exports.ɵbd = LoaderComponent;
8319
- exports.ɵbg = AuthenticationGuard;
8320
- exports.ɵbm = TechlifyUpdateService;
8321
- exports.ɵbn = TechlifyUpdateRoutingModule;
8322
- exports.ɵbo = TechlifyUpdateFormModule;
8323
- exports.ɵbp = TechlifyUpdateFormComponent;
8324
- exports.ɵbq = TechlifyUpdateHistoryRoutingModule;
8325
- exports.ɵbs = UpdateNotifierSnackComponent;
8326
- exports.ɵbt = UpdateViewModule;
8327
- exports.ɵbu = UpdateViewComponent;
8328
- exports.ɵbv = DataManager;
8329
- exports.ɵbw = ErrorHandlerService;
8402
+ exports.ɵba = NumItemsSelector;
8403
+ exports.ɵbb = NumberSelector;
8404
+ exports.ɵbd = TimelineFilterRoutingModule;
8405
+ exports.ɵbe = LoaderComponent;
8406
+ exports.ɵbh = AuthenticationGuard;
8407
+ exports.ɵbn = TechlifyUpdateService;
8408
+ exports.ɵbo = TechlifyUpdateRoutingModule;
8409
+ exports.ɵbp = TechlifyUpdateFormModule;
8410
+ exports.ɵbq = TechlifyUpdateFormComponent;
8411
+ exports.ɵbr = TechlifyUpdateHistoryRoutingModule;
8412
+ exports.ɵbt = UpdateNotifierSnackComponent;
8413
+ exports.ɵbu = UpdateViewModule;
8414
+ exports.ɵbv = UpdateViewComponent;
8415
+ exports.ɵbw = DataManager;
8330
8416
  exports.ɵbx = FieldMappingComponent;
8331
8417
  exports.ɵby = FailedItemsListComponent;
8332
8418
  exports.ɵbz = ImportHistoryListComponent;
@@ -8346,16 +8432,16 @@
8346
8432
  exports.ɵl = FormValidatorService;
8347
8433
  exports.ɵm = EntityFileService;
8348
8434
  exports.ɵn = AlertService;
8349
- exports.ɵp = FileDropperComponent;
8350
- exports.ɵr = MatSelectInfiniteScrollDirective;
8351
- exports.ɵs = NoteListComponent;
8352
- exports.ɵt = NoteService;
8353
- exports.ɵu = NoteFormComponent;
8354
- exports.ɵv = CommentFormComponent;
8355
- exports.ɵw = CredentialsService;
8356
- exports.ɵx = ConfigService;
8357
- exports.ɵy = TechlifyConfig;
8358
- exports.ɵz = NumItemsSelector;
8435
+ exports.ɵp = ErrorHandlerService;
8436
+ exports.ɵq = TechlifyConfig;
8437
+ exports.ɵr = FileDropperComponent;
8438
+ exports.ɵt = MatSelectInfiniteScrollDirective;
8439
+ exports.ɵu = NoteListComponent;
8440
+ exports.ɵv = NoteService;
8441
+ exports.ɵw = NoteFormComponent;
8442
+ exports.ɵx = CommentFormComponent;
8443
+ exports.ɵy = CredentialsService;
8444
+ exports.ɵz = ConfigService;
8359
8445
 
8360
8446
  Object.defineProperty(exports, '__esModule', { value: true });
8361
8447