@sd-angular/core 1.3.255 → 1.3.257
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.
- package/bundles/sd-angular-core-table.umd.js +2 -1
- package/bundles/sd-angular-core-table.umd.js.map +1 -1
- package/bundles/sd-angular-core-table.umd.min.js +1 -1
- package/bundles/sd-angular-core-table.umd.min.js.map +1 -1
- package/esm2015/table/src/lib/services/table-filter/table-filter.model.js +1 -1
- package/esm2015/table/src/lib/table.component.js +3 -2
- package/fesm2015/sd-angular-core-table.js +2 -1
- package/fesm2015/sd-angular-core-table.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.3.255.tgz → sd-angular-core-1.3.257.tgz} +0 -0
- package/table/src/lib/services/table-filter/table-filter.model.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../projects/sd-core/table/src/lib/directives/sd-table-cell-def.directive.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-filter-def.directive.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/table/src/lib/models/table-configuration.model.ts","../../../../projects/sd-core/table/src/lib/components/popup-filter/popup-filter.component.ts","../../../../projects/sd-core/table/src/lib/components/table-filter/table-filter.component.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-expand-def.directive.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-footer-def.directive.ts","../../../../projects/sd-core/table/src/lib/services/table-configuration.service.ts","../../../../projects/sd-core/table/src/lib/models/table-item.model.ts","../../../../projects/sd-core/table/src/lib/services/table-filter/table-filter.service.ts","../../../../projects/sd-core/table/src/lib/components/popup-configuration/popup-configuration.component.ts","../../../../projects/sd-core/table/src/lib/components/popup-export/popup-export.component.ts","../../../../projects/sd-core/table/src/lib/table.component.ts","../../../../projects/sd-core/table/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-disable.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-cell-view/desktop-cell-view.component.ts","../../../../projects/sd-core/table/src/lib/pipes/filter-external.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/filter-column.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-command/desktop-command.component.ts","../../../../projects/sd-core/table/src/lib/pipes/column-tooltip.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-action-filter.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-disable.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-visible-select-all.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-cell/desktop-cell.component.ts","../../../../projects/sd-core/table/src/lib/models/table-column.model.ts","../../../../projects/sd-core/table/src/lib/components/column-inline-filter/column-inline-filter.component.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-visible.pipe.ts","../../../../projects/sd-core/table/src/lib/components/quick-action/quick-action.component.ts","../../../../projects/sd-core/table/src/lib/pipes/sd-group.pipe.ts","../../../../projects/sd-core/table/src/lib/table.module.ts","../../../../projects/sd-core/table/src/lib/services/table-filter/table-filter.model.ts"],"names":["templateRef","this","Directive","args","selector","TemplateRef","Input","SdTableFilterDefDirective","Object","defineProperty","prototype","val","defaultShowing","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","length","push","create","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","DEFAULT_TABLE_CONFIG","paginate","pageSize","pages","TABLE_CONFIG","InjectionToken","SdPopupFilter","cdRef","_this","_filterRegister","externalFilters","externalFilter","inlineExternal","columns","columnFilter","inlineColumn","filterDefs","filterDef","inlineFilterDef","open","configuration","JSON","parse","stringify","filterValue","modal","markForCheck","close","onApply","ngAfterViewInit","ngOnDestroy","onClear","remove","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","ViewChild","SdModal","SdTableFilter","ref","deviceService","filterRegisterChange","BehaviorSubject","_subscription","Subscription","onFilter","item","filterRegister","updateFilter","notReload","popupFilter","isMobileOrTablet","isDesktop","filter","add","pipe","startWith","subscribe","observer","unsubscribe","DeviceDetectorService","settingService","gridMaterialConfiguration","_COLUMNS","SUBINFORMATION","COMMAND","SELECTION","GROUP","_prefix","_getSetting","option","key","prefix","default","_default","loadConfiguration","loadConfigurationResult","column","fixedColumn","firstColumns","secondColumns","firstHeaders","secondHeaders","displayedColumns","displayedFooters","multipleHeader","_d","commands","group","visible","_a","fields","_b","col","invisible","forEach","find","field","origin","title","width","fixed","assign","type","children","childColumn","_c","some","expand","init","gridOption","hidden","map","Injectable","SdSettingService","Inject","Optional","MapToSdTableItem","data","meta","id","hash","display","isExpanding","isExpanded","actions","isSelected","selectable","_filterConfiguration","_filterValue","_cache","register","cacheSession","tempKey","filterConfiguration_1","_defaultConfiguration","undefined","_initConfiguration","filterValue_1","cacheFilter","_defaultValue","_initValue","keys","current","columnOperator","updatedFilter","includes","_y","_z","_0","_1","_2","_3","sdTableFilterDef","operator","enable","_e","_g","_f","from","_k","_j","_h","_l","to","_p","_o","_m","_q","_s","_r","_u","_t","SdPopupConfiguration","notifyService","tableConfigurationService","changes","EventEmitter","_setting","isCreatingColumn","selected","disabledDrag","tableOption","onSave","detectChanges","onReset","confirm","ngOnInit","mouseUp","event","dropTable","moveItemInArray","previousIndex","currentIndex","table","renderRows","handleMouseDown","handleMouseUp","SdNotifyService","SdTableConfigurationService","HostListener","SdPopupExport","loadingService","exportService","translateService","enableCreating","files","export","form","FormGroup","_getExportableColumns","tableColumns","additionalColumns","loadFiles","exportDefault","_getExportColumns","columns_1","displayColumns","reduce","first","e1","emit","file","isCSV","exportCSV","filesInFolder","_initTemplate","fileName","sheets","isArray","sheet","name","items","generateTemplate","start","finally","stop","generateAndUploadTemplate","generateUploadTemplate","onExport","uploadTemplate","removeFile","translate","idx","indexOf","splice","createTemplate","invalid","markAllAsTouched","notify","warning","templateName","filePath","templateNameValidator","test","disabled","description","SdLoadingService","SdExportService","SdTranslateService","Output","SdTable","tableConfiguration","gridFilterService","_gridId","uuid.v4","_optionChanges","Subject","_localItems","selectedTableItems","isLoading","isHiddenPaginator","_paginator","_sort","sdCellDefs","QueryList","cellDef","sdFooterDefs","footerDef","hasFooter","sdFilterDefs","_reload","isExporting","isSelectAll","exportTitle","_loadCompleted","cacheValues","_cacheObjValues","_initCellDef","_13","_14","sdTableCellDef","_initFilterDef","_initFooterDef","sdTableFooterDef","_filterExportInfo","pageNumber","_12","rawColumnFilter","rawExternalFilter","rawFilterDef","orderBy","active","orderDirection","direction","isExported","showFirstLastButtons","_v","list","_x","_w","defaultListString","defaultListNumber","_4","defaultListValues","_7","_6","_5","defaultListDate","_11","_10","_9","_8","defaultOperator","el","_loadFilterRegister","_subscription$1","debounceTime","pageIndex","force","_filterLocal","localItems","filterInfo","tableItem","toString","trim","toLowerCase","columnValue","columnType_1","selection","columnValues_1","valueField","filterValues","every","fv","fValue","replace","cValue","fromDate","Date","begin","toDate","end","columnTime","getTime","fromDateTime","toDateTime","columns_1_1","type_1","field_1","sort","tableItemCurrent","tableItemNext","s1","s2","reverse","index","total","_getFilter","_load","filterReq","catch","err","console","_15","_format","results","_render","sdScroll","scrollTop","reload","onReload","_updateSelectedItems","setTimeout","updateStickyColumnStyles","tableFilter","_exportedItems","isObservable","toPromise","exportedItems","_allColumns","_allExportedColumns","columns_2","_getExportColumns$1","pageSize_1","maxItemsPerRequest","batch","total_1","pageNumber_1","exportItems_1","items_1","promises_1","handleData","all","results_1","results_1_1","mapping","results_2","totalPage","percent","Math","round","allColumns","allExportedColumns","obj","handle","exportColumn","exportedColumn","transform","isExport","displayOnTrue","displayOnFalse","date","toFormat","mapValue","vals","displayField","join","e_9","columns_3","columns_3_1","exportItems_2","exportItems_2_1","_19","exportByTemplate","_16","_17","columns_4","columnFields","exportExcel","onFilterChange","onExpand","rowData","always","multiple","res","onSelect","single","onSelectAll","onClearSelection","clearFilter","setFilter","_loadValues","promises","this_1","toObject","columns_5","columns_5_1","this_2","results_3","results_3_1","rawItems","cellStyle","click","tooltip","htmlTemplate","views","mapValue_1","this_3","values_1","union","lazyItems","badge","text-align","isHtml","newValue","time","endsWith","Number","isNumber","toVNCurrency","color","icon","badgeType","badgeIcon","e_13","items_2","items_2_1","columns_6","columns_6_1","onOperatorChange","operatorChange","trackBy","_initConfiguration$1","setting_1","subject","getValue","configurationResult","configurationResult_1","displayColumns_1","paginator","page","sortChange","switchMap","combineLatest","animations","trigger","style","height","minHeight","visibility","transition","animate","SdTableFilterService","MatTable","SdScrollDirective","SdQuickAction","MatPaginator","MatSort","ContentChild","SdMaterialSubInformationDefDirective","ContentChildren","SdTabelCellDefDirective","SdMaterialFooterDefDirective","SdCommandFilterPipe","commands_1","commands_1_1","command","flag","isHidden","e_1","childCommand","hidden_1","Pipe","SdCommandDisablePipe","SdCommandIconPipe","SdCommandTitlePipe","SdFilterExternalPipe","externalFilters_1","externalFilters_1_1","SdFilterColumnPipe","e_2","columnChildren","SdColumnTooltipPipe","_convert","action","fontSet","selectedItems","childAction","key_1","actions_1","actions_1_1","availableActions","availableActions_1","availableActions_1_1","isGrouped","SdFilterOperators","symbol","SdColumnInlineFilter","inlineSymbol","_inlineOperator_1","inlineOperatorChange","operators","filterChange","_valueChanges","_subcription","onChangeOperator","_value","inlineOperator","useFilterDate","groupedActions","hasGroup","clear","onClickAction","SdGroupPipe","groupItem","items_1_1","fields_1","fields_1_1","e_4","MatPaginatorIntlCro","_super","firstPageLabel","lastPageLabel","itemsPerPageLabel","nextPageLabel","previousPageLabel","getRangeLabel","String","__","constructor","__extends","MatPaginatorIntl","NgModule","imports","CommonModule","MatSortModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatSlideToggleModule","MatCheckboxModule","MatListModule","MatChipsModule","CdkTableModule","DragDropModule","SdFormModule","SdServiceModule","SdCommonModule","SdGroupModule","declarations","SdTableQuickAction","SdDesktopCell","SdDesktopCellView","SdDesktopCommand","SdSelectionActionFilterPipe","SdSelectionVisiblePipe","SdSelectionDisablePipe","SdSelectionVisibleSelectAllPipe","exports","providers","DatePipe","DecimalPipe","CdkColumnDef","provide","useClass"],"mappings":"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","sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableCellDef]'\r\n})\r\nexport class SdTabelCellDefDirective {\r\n @Input() sdTableCellDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableFilterDef]'\r\n})\r\nexport class SdTableFilterDefDirective {\r\n @Input() sdTableFilterDef: string;\r\n defaultShowing: boolean;\r\n @Input('defaultShowing') set showing(val: boolean | '') {\r\n this.defaultShowing = (val === '') || val;\r\n }\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { SdFilterOperator, SdTableColumn } from './table-column.model';\r\n\r\nexport interface ISdTableConfiguration {\r\n filter?: {\r\n quickFilter?: boolean;\r\n operator?: {\r\n defaultListString?: SdFilterOperator[];\r\n defaultListNumber?: SdFilterOperator[];\r\n defaultListDate?: SdFilterOperator[];\r\n defaultListValues?: SdFilterOperator[];\r\n defaultOperator?:{\r\n [key in SdTableColumn['type']]?:SdFilterOperator\r\n }\r\n };\r\n };\r\n paginate?: {\r\n pageSize?: number;\r\n pages?: number[]\r\n };\r\n translate?: boolean;\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\r\n paginate: {\r\n pageSize: 20,\r\n pages: [20, 50, 100, 200]\r\n }\r\n};\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\r\n","import { Component, ViewChild, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableExternalFilter, SdTableFilterRegister } from '../../services/table-filter/table-filter.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sd-popup-filter',\r\n templateUrl: './popup-filter.component.html',\r\n styleUrls: ['./popup-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdPopupFilter {\r\n @ViewChild(SdModal) modal: SdModal;\r\n #filterRegister: SdTableFilterRegister;\r\n @Input() set filterRegister(value: SdTableFilterRegister) {\r\n this.#filterRegister = value;\r\n }\r\n @Input() externalFilters: SdTableExternalFilter[] = [];\r\n externalFilter: Record<string, any> = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n @Input() columns: SdTableColumn[] = [];\r\n columnFilter: Record<string, any> = {};\r\n inlineColumn: Record<string, boolean> = {};\r\n\r\n @Input() filterDefs: SdTableFilterDefDirective[] = [];\r\n filterDef: Record<string, any> = {};\r\n inlineFilterDef: Record<string, boolean> = {};\r\n constructor(private cdRef: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy() {}\r\n\r\n open = () => {\r\n const configuration = this.#filterRegister.configuration.get();\r\n this.inlineColumn = JSON.parse(JSON.stringify(configuration.inlineColumn));\r\n this.inlineExternal = JSON.parse(JSON.stringify(configuration.inlineExternal));\r\n this.inlineFilterDef = JSON.parse(JSON.stringify(configuration.inlineFilterDef));\r\n const filterValue = this.#filterRegister.value.get();\r\n this.columnFilter = JSON.parse(JSON.stringify(filterValue.columnFilter));\r\n this.externalFilter = JSON.parse(JSON.stringify(filterValue.externalFilter));\r\n this.filterDef = JSON.parse(JSON.stringify(filterValue.filterDef));\r\n this.modal.open();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n close = () => {\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n onApply = () => {\r\n this.#filterRegister.configuration.set({\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.inlineExternal,\r\n inlineFilterDef: this.inlineFilterDef,\r\n });\r\n this.#filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n });\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n onClear() {\r\n this.#filterRegister.value.remove();\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ViewChild,\r\n AfterViewInit,\r\n OnDestroy,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport {\r\n SdTableOptionFilter,\r\n SdTableExternalFilter,\r\n SdTableFilterRegister,\r\n} from '../../services/table-filter/table-filter.model';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdPopupFilter } from '../popup-filter/popup-filter.component';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { startWith } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'sd-table-filter',\r\n templateUrl: './table-filter.component.html',\r\n styleUrls: ['./table-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTableFilter implements AfterViewInit, OnDestroy {\r\n @ViewChild(SdPopupFilter) popupFilter: SdPopupFilter;\r\n filter: Readonly<SdTableOptionFilter>;\r\n @Input('filter') set _filter(filter: SdTableOptionFilter) {\r\n this.filter = filter;\r\n }\r\n @Input() columns: SdTableColumn[] = [];\r\n externalFilters: SdTableExternalFilter[] = [];\r\n @Input('externalFilters') set _externalFilters(value: SdTableExternalFilter[]) {\r\n this.externalFilters = value || [];\r\n }\r\n @Input() filterDefs: SdTableFilterDefDirective[] = [];\r\n filterRegister: SdTableFilterRegister;\r\n @Input('filterRegister') set _filterRegister(value: SdTableFilterRegister) {\r\n this.filterRegister = value;\r\n this.filterRegisterChange.next(this.filterRegister);\r\n }\r\n filterRegisterChange = new BehaviorSubject<SdTableFilterRegister>(null);\r\n\r\n filterDef: any = {};\r\n inlineFilterDef: Record<string, boolean> = {};\r\n columnFilter: any = {};\r\n inlineColumn: Record<string, boolean> = {};\r\n externalFilter: any = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n isMobileOrTablet: boolean;\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(private ref: ChangeDetectorRef, private deviceService: DeviceDetectorService) {\r\n this.isMobileOrTablet = !this.deviceService.isDesktop();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.filterRegisterChange.pipe(startWith(this.filterRegister)).subscribe(filterRegister => {\r\n if (this.filterRegister) {\r\n this.#subscription.add(\r\n this.filterRegister.configuration.observer.subscribe(configuration => {\r\n const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;\r\n this.inlineColumn = inlineColumn;\r\n this.inlineExternal = inlineExternal;\r\n this.inlineFilterDef = inlineFilterDef;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.filterRegister.value.observer.subscribe(value => {\r\n const { columnFilter, externalFilter, filterDef } = value;\r\n this.columnFilter = columnFilter;\r\n this.externalFilter = externalFilter;\r\n this.filterDef = filterDef;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onFilter = (item?: SdTableColumn | SdTableExternalFilter) => {\r\n this.filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n });\r\n };\r\n\r\n updateFilter = () => {\r\n this.filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n notReload: true\r\n });\r\n };\r\n\r\n open = () => {\r\n this.popupFilter.open();\r\n };\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableExpandDef]'\r\n})\r\nexport class SdMaterialSubInformationDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableFooterDef]'\r\n})\r\nexport class SdMaterialFooterDefDirective {\r\n @Input() sdTableFooterDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSetting, SdSettingService } from '@sd-angular/core/setting';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport {\r\n SdColumnConfiguration,\r\n SdTableConfiguration,\r\n SdTableConfigurationResult,\r\n} from '../models/table-option-config.model';\r\nimport { TABLE_CONFIG, ISdTableConfiguration } from '../models/table-configuration.model';\r\n\r\n@Injectable()\r\nexport class SdTableConfigurationService {\r\n #COLUMNS = {\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup',\r\n };\r\n #prefix = 'c9e94836-6ace-4aeb-b148-4f0be63589ee';\r\n constructor(\r\n private settingService: SdSettingService,\r\n @Inject(TABLE_CONFIG) @Optional() public gridMaterialConfiguration: ISdTableConfiguration\r\n ) { }\r\n\r\n #getSetting = (option: SdTableOption): SdSetting<SdTableConfiguration> => {\r\n // Nếu không có key thì không lấy được setting\r\n if (!option?.key) {\r\n return null;\r\n }\r\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\r\n return this.settingService.create<SdTableConfiguration>(\r\n { prefix: this.#prefix, key: option.key },\r\n {\r\n default: this.#default(option),\r\n }\r\n );\r\n };\r\n\r\n loadConfiguration = (option: SdTableOption) => {\r\n // Nếu không có key thì trả về thông tin mặc định\r\n if (!option?.key) {\r\n return this.#default(option);\r\n }\r\n const setting = this.#getSetting(option);\r\n return setting.get();\r\n };\r\n\r\n loadConfigurationResult = (option: SdTableOption, configuration: SdTableConfiguration) => {\r\n const result: SdTableConfigurationResult = {\r\n column: {},\r\n fixedColumn: {},\r\n firstColumns: [],\r\n secondColumns: [],\r\n firstHeaders: [],\r\n secondHeaders: [],\r\n displayedColumns: [],\r\n displayedFooters: [],\r\n multipleHeader: false,\r\n };\r\n const { selector, commands, group } = option || {};\r\n if (selector?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (commands?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\r\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\r\n }\r\n if (group?.fields?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.GROUP);\r\n result.displayedColumns.push(this.#COLUMNS.GROUP);\r\n }\r\n configuration?.columns\r\n ?.filter(col => !col.invisible)\r\n .forEach(col => {\r\n // Kiểm tra column trong config có còn được khai báo trong option\r\n // Nếu không thì ẩn column đó đi\r\n const column = option?.columns.find(e => e.field === col.origin.field);\r\n if (column) {\r\n result.column[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n if (col.fixed) {\r\n result.fixedColumn[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n }\r\n result.firstColumns.push({\r\n ...column,\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n });\r\n result.firstHeaders.push(col.origin.field);\r\n result.displayedColumns.push(col.origin.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n }\r\n });\r\n // Nếu có thêm các column mới, chèn các column đó vào cuối\r\n option?.columns?.filter(column=> !configuration?.columns?.some(e=>e.origin.field === column.field))\r\n .forEach(column =>{\r\n result.firstColumns.push({\r\n ...column,\r\n title: column.title,\r\n width: column.width,\r\n });\r\n result.firstHeaders.push(column.field);\r\n result.displayedColumns.push(column.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n })\r\n if (option.expand) {\r\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\r\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\r\n }\r\n result.multipleHeader = result.secondHeaders.length > 0;\r\n // Sub infomation không thể có footer\r\n result.displayedFooters = result.displayedColumns.filter(val => val !== this.#COLUMNS.SUBINFORMATION);\r\n return result;\r\n };\r\n\r\n init = (gridOption: SdTableOption) => {\r\n return this.#getSetting(gridOption);\r\n };\r\n\r\n #default = (gridOption: SdTableOption): SdTableConfiguration => {\r\n const columns: SdColumnConfiguration[] =\r\n gridOption?.columns\r\n ?.filter(e => !e.hidden)\r\n .map(e => ({\r\n origin: {\r\n field: e.field,\r\n title: e.title,\r\n width: e.width,\r\n invisible: e.invisible,\r\n },\r\n invisible: e.invisible,\r\n fixed: false,\r\n })) || [];\r\n return {\r\n columns,\r\n };\r\n };\r\n}\r\n","import * as hash from 'object-hash';\r\nimport { SdTableColumn } from './table-column.model';\r\nimport { SdBadgeColor } from '@sd-angular/core/badge';\r\nexport interface SdTableMetaSelector {\r\n selectable?: boolean;\r\n isSelected?: boolean;\r\n actions?: string[];\r\n}\r\n\r\nexport interface SdTableMetaExpand {\r\n isExpanded?: boolean;\r\n isExpanding?: boolean;\r\n data?: any;\r\n}\r\n\r\nexport interface SdTableDisplay {\r\n tooltip: string;\r\n badge: {\r\n type: 'round' | 'circle' | 'icon';\r\n color: SdBadgeColor;\r\n icon: string;\r\n };\r\n cellStyle: Record<string, string>;\r\n data: string;\r\n isHtml: boolean;\r\n click: () => void;\r\n}\r\n\r\nexport interface SdTableMeta<T> {\r\n id?: string;\r\n display: Record<string, SdTableDisplay>;\r\n selector?: SdTableMetaSelector;\r\n expand?: SdTableMetaExpand;\r\n group?: {\r\n htmlTemplate?: string;\r\n items?: SdTableItem<T>[];\r\n };\r\n}\r\n\r\nexport interface SdTableItem<T = any> {\r\n meta: SdTableMeta<T>;\r\n data: T;\r\n}\r\n\r\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\r\n data: item,\r\n meta: {\r\n id: hash(item),\r\n display: {},\r\n expand: {\r\n isExpanding: false,\r\n isExpanded: false,\r\n },\r\n group: {},\r\n selector: { actions: [], isSelected: false, selectable: false },\r\n },\r\n});\r\n","import { Injectable } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSettingService } from '@sd-angular/core/setting';\r\nimport {\r\n SdTableExternalFilter,\r\n SdTableFilterConfiguration,\r\n SdTableOptionFilter,\r\n SdTableFilterRegister,\r\n SdTableFilterValue,\r\n} from './table-filter.model';\r\nimport { SdFilterOperator, SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { map, startWith } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class SdTableFilterService {\r\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\r\n #filterValue = 'GRID-FILTER-VALUE';\r\n #cache: Record<string, SdTableFilterRegister> = {};\r\n constructor(private settingService: SdSettingService) {}\r\n register = (\r\n filter: SdTableOptionFilter,\r\n args: {\r\n id: string;\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string,SdFilterOperator>;\r\n }\r\n ) => {\r\n let cacheSession = false;\r\n \r\n const { id, columns, externalFilters } = args;\r\n const tempKey = hash({\r\n id,\r\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\r\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\r\n });\r\n const key = filter?.key || tempKey;\r\n if (!filter?.key) {\r\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\r\n }\r\n if (!this.#cache[key]) {\r\n // Setting của filter configuration\r\n const filterConfiguration = this.settingService.create<SdTableFilterConfiguration>(\r\n {\r\n prefix: this.#filterConfiguration,\r\n key,\r\n },\r\n {\r\n default: this.#defaultConfiguration(args),\r\n type: cacheSession ? 'session' : undefined,\r\n }\r\n );\r\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\r\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\r\n // Setting của filter value\r\n const filterValue = this.settingService.create<SdTableFilterValue>(\r\n {\r\n prefix: this.#filterValue,\r\n key: !filter?.cacheFilter ? tempKey : key,\r\n },\r\n {\r\n default: this.#defaultValue(args),\r\n type: cacheSession || !filter?.cacheFilter ? 'session' : undefined,\r\n }\r\n );\r\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\r\n filterValue.set(this.#initValue(args, filterValue.get()));\r\n this.#cache[key] = {\r\n configuration: {\r\n get: (): SdTableFilterConfiguration => {\r\n return filterConfiguration.get();\r\n },\r\n set: (configuration: Partial<SdTableFilterConfiguration>): SdTableFilterConfiguration => {\r\n const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;\r\n filterConfiguration.set({\r\n inlineColumn,\r\n inlineExternal,\r\n inlineFilterDef,\r\n });\r\n return {\r\n inlineColumn,\r\n inlineExternal,\r\n inlineFilterDef,\r\n };\r\n },\r\n remove: () => {\r\n filterConfiguration.set(this.#defaultConfiguration(args));\r\n },\r\n observer: filterConfiguration.observer.pipe(\r\n startWith(filterConfiguration.get()),\r\n // Sử dụng mặc định nếu bị reset\r\n map(configuration => configuration || this.#defaultConfiguration(args))\r\n ),\r\n },\r\n value: {\r\n get: (): SdTableFilterValue => {\r\n return filterValue.get();\r\n },\r\n set: (value: Partial<SdTableFilterValue>): SdTableFilterValue => {\r\n const keys = Object.keys(value || {});\r\n const current = filterValue.get();\r\n const { columnOperator, columnFilter, externalFilter, filterDef, notReload } = current;\r\n const updatedFilter = {\r\n // Filter column\r\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\r\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\r\n // Filter external\r\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\r\n // Filter def\r\n filterDef: keys.includes('filterDef') ? value?.filterDef || {} : filterDef,\r\n // Force\r\n notReload: !!value?.notReload,\r\n };\r\n filterValue.set(updatedFilter);\r\n return updatedFilter;\r\n },\r\n remove: () => {\r\n filterValue.set(this.#defaultValue(args));\r\n },\r\n observer: filterValue.observer.pipe(\r\n startWith(filterValue.get()),\r\n // Sử dụng mặc định nếu bị reset\r\n map(value => value || this.#defaultValue(args))\r\n ),\r\n },\r\n };\r\n }\r\n return this.#cache[key];\r\n };\r\n\r\n #defaultConfiguration = (args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n }): SdTableFilterConfiguration => {\r\n const { columns, externalFilters, filterDefs } = args;\r\n const inlineColumn: Record<string, boolean> = {};\r\n const inlineExternal: Record<string, boolean> = {};\r\n const inlineFilterDef: Record<string, boolean> = {};\r\n // Filter column\r\n for (const item of columns || []) {\r\n inlineColumn[item.field] = item?.filter?.defaultShowing;\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n inlineExternal[item.field] = item?.defaultShowing;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n inlineFilterDef[item.sdTableFilterDef] = item?.defaultShowing;\r\n }\r\n return {\r\n // Filter column\r\n inlineColumn,\r\n // Filter external\r\n inlineExternal,\r\n // Filter def\r\n inlineFilterDef,\r\n };\r\n };\r\n\r\n #defaultValue = (args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string,SdFilterOperator>\r\n }): SdTableFilterValue => {\r\n const columnFilter: Record<string, any> = {};\r\n const externalFilter: Record<string, any> = {};\r\n const filterDef: Record<string, any> = {};\r\n const columnOperator:Record<string,SdFilterOperator> = args.columnOperator || {}\r\n const { columns, externalFilters, filterDefs } = args;\r\n // Filter column\r\n for (const item of columns || []) {\r\n columnFilter[item.field] = item?.filter?.default;\r\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default){\r\n columnOperator[item.field]=item.filter.operator.default;\r\n }\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n externalFilter[item.field] = item?.default;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n filterDef[item.sdTableFilterDef] = undefined;\r\n }\r\n\r\n\r\n return {\r\n // Filter column\r\n columnFilter,\r\n // Filter external\r\n externalFilter,\r\n // Filter def\r\n filterDef,\r\n // columnOperator\r\n columnOperator,\r\n };\r\n };\r\n\r\n #initConfiguration = (\r\n args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n },\r\n configuration: SdTableFilterConfiguration\r\n ): SdTableFilterConfiguration => {\r\n const { columns, externalFilters, filterDefs } = args;\r\n const inlineColumn: Record<string, boolean> = {};\r\n const inlineExternal: Record<string, boolean> = {};\r\n const inlineFilterDef: Record<string, boolean> = {};\r\n // Filter column\r\n for (const item of columns || []) {\r\n inlineColumn[item.field] = configuration?.inlineColumn?.[item.field] ?? item?.filter?.defaultShowing;\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n inlineFilterDef[item.sdTableFilterDef] = configuration?.inlineFilterDef?.[item.sdTableFilterDef] ?? item?.defaultShowing;\r\n }\r\n return {\r\n // Filter column\r\n inlineColumn,\r\n // Filter external\r\n inlineExternal,\r\n // Filter def\r\n inlineFilterDef,\r\n };\r\n };\r\n\r\n #initValue = (\r\n args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string, SdFilterOperator>\r\n },\r\n value: SdTableFilterValue\r\n ): SdTableFilterValue => {\r\n const columnFilter: Record<string, any> = {};\r\n const externalFilter: Record<string, any> = {};\r\n const filterDef: Record<string, any> = {};\r\n const columnOperator:Record<string, SdFilterOperator> = args.columnOperator || {};\r\n const { columns, externalFilters, filterDefs} = args;\r\n // Filter column\r\n for (const item of columns || []) {\r\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\r\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default){\r\n columnOperator[item.field]=item.filter.operator.default;\r\n }\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n if (item.type === 'daterange') {\r\n externalFilter[item.field] = {\r\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\r\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\r\n };\r\n } else {\r\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\r\n }\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n filterDef[item.sdTableFilterDef] = value?.filterDef?.[item.sdTableFilterDef] ?? undefined;\r\n }\r\n return {\r\n // Filter column\r\n columnFilter,\r\n // Filter external\r\n externalFilter,\r\n // Filter def\r\n filterDef,\r\n //column Operator\r\n columnOperator\r\n };\r\n };\r\n}\r\n","import { Component, OnInit, ViewChild, EventEmitter, ChangeDetectorRef, Input, HostListener } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableConfigurationResult, SdTableConfiguration } from '../../models/table-option-config.model';\r\nimport { SdTableConfigurationService } from '../../services/table-configuration.service';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdSetting } from '@sd-angular/core/setting';\r\n\r\n@Component({\r\n selector: 'sd-popup-configuration',\r\n templateUrl: './popup-configuration.component.html',\r\n styleUrls: ['./popup-configuration.component.scss'],\r\n})\r\nexport class SdPopupConfiguration implements OnInit {\r\n @Input() tableOption: SdTableOption;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('table') table: MatTable<SdTableColumn>;\r\n readonly changes = new EventEmitter<SdTableConfigurationResult>();\r\n #setting: SdSetting<SdTableConfiguration>;\r\n configuration: SdTableConfiguration;\r\n isCreatingColumn = false;\r\n selected: {\r\n [key: string]: boolean;\r\n } = {};\r\n disabledDrag = true;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private tableConfigurationService: SdTableConfigurationService\r\n ) {}\r\n\r\n ngOnInit() {}\r\n @HostListener('window:mouseup', ['$event'])\r\n mouseUp(event) {\r\n this.disabledDrag = true;\r\n }\r\n open = async () => {\r\n this.#setting = this.tableConfigurationService.init(this.tableOption);\r\n this.configuration = this.#setting.get();\r\n this.modal.open();\r\n };\r\n\r\n onSave = () => {\r\n this.#setting.set(this.configuration);\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n };\r\n\r\n onReset = async () => {\r\n this.notifyService.confirm('Xác nhận đưa tất cả thiết lập về mặc định').then(() => {\r\n this.#setting.remove();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n dropTable(event: CdkDragDrop<SdTableColumn[]>) {\r\n moveItemInArray(this.configuration.columns, event.previousIndex, event.currentIndex);\r\n this.table.renderRows();\r\n }\r\n\r\n handleMouseDown() {\r\n this.disabledDrag = false;\r\n }\r\n\r\n handleMouseUp() {\r\n this.disabledDrag = true;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n AfterViewInit,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n Input,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\n\r\nimport * as uuid from 'uuid';\r\n\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\n\r\nimport { SdLoadingService } from '@sd-angular/core/loading';\r\n\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport hash from 'object-hash';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdExportFile, SdExportService, SdExportColumn } from '@sd-angular/core/export';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdTableColumn, SdTableOption } from '../../models';\r\nimport { SdTableConfigurationResult } from '../../models/table-option-config.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdPopupExport implements OnInit, AfterViewInit {\r\n tableOption: SdTableOption;\r\n columns: SdExportColumn[] = [];\r\n templateName: string;\r\n enableCreating = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('listGroups') listGroups: MatSelectionList;\r\n\r\n selected: {\r\n [key: string]: boolean;\r\n } = {};\r\n files: SdExportFile[] = [];\r\n\r\n @Output() export = new EventEmitter<{ file: SdExportFile; columns: SdExportColumn[]; isCSV?: boolean }>();\r\n form = new FormGroup({});\r\n\r\n @Input('tableOption') set _tableOption(option: SdTableOption) {\r\n this.tableOption = option;\r\n this.columns = this.#getExportableColumns();\r\n }\r\n @Input() configuration: SdTableConfigurationResult;\r\n private get key(): string {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.tableOption?.export?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: this.tableOption?.export?.key,\r\n });\r\n }\r\n\r\n private get tableColumns() {\r\n const columns: SdExportColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExportColumn[] => {\r\n return [...this.tableColumns, ...this.additionalColumns];\r\n };\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {}\r\n\r\n ngOnInit() {}\r\n\r\n ngAfterViewInit() {}\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n this.loadFiles(null);\r\n this.selected = {};\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n };\r\n\r\n #getExportColumns = () => {\r\n if (this.configuration) {\r\n const columns = [...this.tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n return [...first, ...column.children];\r\n }, []);\r\n const results = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n };\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false,\r\n });\r\n };\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true,\r\n });\r\n };\r\n\r\n loadFiles = async (group: string = null) => {\r\n this.files = await this.exportService.filesInFolder({\r\n key: this.key,\r\n group,\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateTemplate({\r\n fileName: fileName || this.tableOption?.export?.fileName,\r\n columns: this.columns,\r\n sheets,\r\n });\r\n };\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n };\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption?.export?.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateUploadTemplate({\r\n key: this.key,\r\n template: {\r\n fileName: fileName || this.tableOption?.export?.fileName,\r\n columns: this.columns.filter(e => this.selected[e.field]),\r\n sheets,\r\n },\r\n });\r\n };\r\n\r\n onExport = (file: SdExportFile) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns,\r\n });\r\n this.ref.detectChanges();\r\n };\r\n\r\n uploadTemplate = async () => {\r\n const file = await this.exportService.uploadTemplate({\r\n key: this.key,\r\n });\r\n if (file) {\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n removeFile = (file: SdExportFile) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(() => {\r\n this.exportService.removeFile({\r\n key: this.key,\r\n fileName: file.fileName,\r\n });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n createTemplate = async () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.notify.warning(`Vui lòng chọn cột dữ liệu để xuất`);\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n if (result?.filePath) {\r\n const file: SdExportFile = {\r\n filePath: result.filePath,\r\n fileName: result.fileName,\r\n };\r\n this.onExport(file);\r\n this.templateName = null;\r\n this.enableCreating = false;\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n };\r\n\r\n templateNameValidator = (val: string) => {\r\n const { translate } = this.translateService;\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return translate('Please enter your template name');\r\n }\r\n if (val.length > 50) {\r\n return translate('Template name is too long');\r\n }\r\n if (!regex.test(val)) {\r\n return translate('Template name only contains letters, numbers and spaces');\r\n }\r\n return null;\r\n };\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n AfterViewInit,\r\n Optional,\r\n Inject,\r\n ChangeDetectorRef,\r\n ContentChildren,\r\n QueryList,\r\n OnInit,\r\n OnDestroy,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport * as uuid from 'uuid';\r\nimport { SdTableFilterRegister, SdTableFilterRequest } from './services/table-filter/table-filter.model';\r\nimport { SdTableOption } from './models/table-option.model';\r\nimport { TABLE_CONFIG, DEFAULT_TABLE_CONFIG, ISdTableConfiguration } from './models/table-configuration.model';\r\nimport { Subscription, isObservable, Subject, combineLatest } from 'rxjs';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdFilterOperator, SdTableColumn, SdTableColumnLazyValues, SdTableColumnValues } from './models/table-column.model';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { SdTableFilter } from './components/table-filter/table-filter.component';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdExportColumn, SdExportFile, SdExportService } from '@sd-angular/core/export';\r\nimport { SdTableConfigurationResult } from './models/table-option-config.model';\r\nimport { SdTableConfigurationService } from './services/table-configuration.service';\r\nimport { SdTableOptionExportColumn } from './models/table-option-export.model';\r\nimport { SdQuickAction } from '@sd-angular/core/quick-action';\r\nimport { MapToSdTableItem, SdTableItem } from './models/table-item.model';\r\nimport { SdScrollDirective } from '@sd-angular/core/common';\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdPopupConfiguration } from './components/popup-configuration/popup-configuration.component';\r\nimport { SdLoadingService } from '@sd-angular/core/loading';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\n\r\n@Component({\r\n selector: 'sd-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\r\n state('expanded', style({ height: '*', visibility: 'visible' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n})\r\nexport class SdTable<T = any> implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(MatTable) table: MatTable<any>;\r\n @ViewChild(SdPopupConfiguration) popupConfiguration: SdPopupConfiguration;\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport: SdPopupExport;\r\n #gridId = uuid.v4();\r\n @ViewChild(SdScrollDirective) sdScroll: SdScrollDirective;\r\n filterRegister: SdTableFilterRegister;\r\n key = uuid.v4();\r\n @ViewChild(SdQuickAction) quickAction: SdQuickAction;\r\n @ViewChild(SdTableFilter) tableFilter: SdTableFilter;\r\n tableOption: SdTableOption<T>;\r\n configuration: SdTableConfigurationResult;\r\n @Input() set option(option: SdTableOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.tableOption = option;\r\n this.#loadCompleted = false;\r\n const setting = this.tableConfigurationService.init(this.tableOption);\r\n if (setting) {\r\n this.#subscription.add(\r\n setting.observer.pipe(startWith(setting.subject.getValue())).subscribe(() => {\r\n const configurationResult = this.tableConfigurationService.loadConfigurationResult(this.tableOption, setting.get());\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.loadingService.start();\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.loadingService.stop();\r\n this.ref.detectChanges();\r\n });\r\n })\r\n );\r\n } else {\r\n const configuration = this.tableConfigurationService.loadConfiguration(this.tableOption);\r\n const configurationResult = this.tableConfigurationService.loadConfigurationResult(this.tableOption, configuration);\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.loadingService.start();\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.loadingService.stop();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n }\r\n }\r\n #optionChanges = new Subject<SdTableOption>();\r\n\r\n #localItems: SdTableItem<T>[] = [];\r\n items: SdTableItem<T>[] = [];\r\n selectedTableItems: SdTableItem<T>[] = [];\r\n total: number;\r\n\r\n // Loading\r\n isLoading = false;\r\n\r\n // Paginate\r\n isHiddenPaginator = false;\r\n #paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(\r\n paginator.page\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sorting\r\n #sort: MatSort;\r\n @ViewChild(MatSort) set sort(sort: MatSort) {\r\n if (sort && this.#sort !== sort) {\r\n this.#sort = sort;\r\n this.#subscription.add(\r\n sort.sortChange\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective)\r\n sdSubInformation: SdMaterialSubInformationDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdTabelCellDefDirective) sdCellDefs = new QueryList<SdTabelCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdTabelCellDefDirective;\r\n } = {};\r\n\r\n // Footer Def\r\n @ContentChildren(SdMaterialFooterDefDirective) sdFooterDefs = new QueryList<SdMaterialFooterDefDirective>();\r\n footerDef: {\r\n [column: string]: SdMaterialFooterDefDirective;\r\n } = {};\r\n hasFooter = false;\r\n\r\n // Filter Def\r\n @ContentChildren(SdTableFilterDefDirective) sdFilterDefs = new QueryList<SdTableFilterDefDirective>();\r\n filterDefs: SdTableFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnOperator: Record<string, SdFilterOperator> = {};\r\n columnFilter: Record<string, any> = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<{\r\n force: boolean;\r\n }>();\r\n isExporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n #loadCompleted = false;\r\n cacheValues: Record<string, any[]> = {};\r\n #cacheObjValues: Record<string, Record<string, string>> = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n @Inject(TABLE_CONFIG)\r\n @Optional()\r\n public tableConfiguration: ISdTableConfiguration,\r\n private tableConfigurationService: SdTableConfigurationService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private gridFilterService: SdTableFilterService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.#reload\r\n .pipe(\r\n debounceTime(200),\r\n switchMap(async data => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n )\r\n .subscribe(this.#render)\r\n );\r\n this.#subscription.add(this.sdCellDefs.changes.pipe(startWith([])).subscribe(this.#initCellDef));\r\n this.#subscription.add(this.sdFooterDefs.changes.pipe(startWith([])).subscribe(this.#initFooterDef));\r\n this.#subscription.add(this.sdFilterDefs.changes.pipe(startWith([])).subscribe(this.#initFilterDef));\r\n this.#subscription.add(\r\n combineLatest([\r\n this.#optionChanges.pipe(startWith(this.tableOption)),\r\n this.sdFilterDefs.changes.pipe(startWith(this.filterDefs)),\r\n ]).subscribe(() => {\r\n this.#loadFilterRegister();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#optionChanges.subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#reload.next({\r\n force: true,\r\n });\r\n }\r\n })\r\n );\r\n this.ref.detectChanges();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #initCellDef = () => {\r\n this.cellDef = {};\r\n for (const cellDef of this.sdCellDefs || []) {\r\n if (cellDef.sdTableCellDef) {\r\n this.cellDef[cellDef.sdTableCellDef] = cellDef;\r\n }\r\n }\r\n };\r\n\r\n #initFilterDef = () => {\r\n this.filterDefs = [];\r\n for (const filterDef of this.sdFilterDefs) {\r\n this.filterDefs.push(filterDef);\r\n }\r\n };\r\n\r\n #initFooterDef = () => {\r\n // NOTE: ContentChildren nên subcribe trong AfterViewInit\r\n this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdTableFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdTableFooterDef] = footerDef;\r\n }\r\n }\r\n };\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter, filterDef } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n rawFilterDef: filterDef || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction || '',\r\n pageNumber,\r\n pageSize,\r\n isExported: true,\r\n };\r\n };\r\n\r\n #initConfiguration = (option: SdTableOption) => {\r\n // Init pagination\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? false,\r\n };\r\n for (const column of option.columns || []) {\r\n if (column.filter?.operator?.enable) {\r\n if (!column.filter?.operator?.list?.length) {\r\n if (column.type === 'string') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListString || [];\r\n }\r\n if (column.type === 'number') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListNumber || [];\r\n }\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListValues || [];\r\n }\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListDate || [];\r\n }\r\n }\r\n\r\n this.columnOperator[column.field] = this.tableConfiguration?.filter?.operator?.defaultOperator?.[column.type] || undefined;\r\n if (column.filter.operator.default && column.filter.operator.list.some(el => el === column.filter.operator.default)) {\r\n this.columnOperator[column.field] = column.filter.operator.default;\r\n }\r\n }\r\n }\r\n return option;\r\n };\r\n\r\n #loadFilterRegister = () => {\r\n // Init filter\r\n if (this.tableOption) {\r\n if (!this.filterRegister) {\r\n this.filterRegister = this.gridFilterService.register(this.tableOption?.filter, {\r\n id: this.#gridId,\r\n columns: this.tableOption?.columns,\r\n externalFilters: this.tableOption?.filter?.externalFilters,\r\n filterDefs: this.filterDefs,\r\n columnOperator: this.columnOperator,\r\n });\r\n this.#subscription.add(\r\n this.filterRegister.value.observer\r\n .pipe(\r\n debounceTime(500),\r\n map(filterValue => {\r\n const { columnOperator, columnFilter, notReload } = filterValue;\r\n this.columnOperator = columnOperator || {};\r\n this.columnFilter = columnFilter;\r\n if (!notReload) {\r\n if (this.#paginator) {\r\n this.#paginator.pageIndex = 0;\r\n }\r\n this.#reload.next({\r\n force: false,\r\n });\r\n }\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n };\r\n\r\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\r\n const { columns } = this.tableOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(tableItem => {\r\n const item = tableItem.data;\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field as string] || '').toString().trim().toLowerCase();\r\n const columnValue: string = (item[field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\r\n return false;\r\n }\r\n if (type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (type === 'values' || type === 'lazy-values') {\r\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\r\n const isMultiple = ['MULTIPLE'].includes(columnType.option.selection);\r\n if (isMultiple) {\r\n const columnValues: string[] =\r\n (item[field] as any).map(i => (i[columnType.option.valueField] ?? '').toString().trim().toLowerCase()) ?? [];\r\n const filterValues: string[] = rawColumnFilter[field as string]?.map(v => (v ?? '').toString().trim().toLowerCase());\r\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\r\n return false;\r\n }\r\n } else {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'number') {\r\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\r\n const cValue = +columnValue;\r\n if (fValue || fValue === 0) {\r\n if (!cValue && cValue !== 0) {\r\n return false;\r\n }\r\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\r\n return false;\r\n } else if (cValue !== fValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'bool') {\r\n if (filterValue === '1' && columnValue !== '1' && columnValue !== 'true') {\r\n return false;\r\n } else if (filterValue === '0' && columnValue !== '0' && columnValue !== 'false') {\r\n return false;\r\n }\r\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\r\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\r\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\r\n const fromDate = Date.begin(from);\r\n const toDate = Date.end(to);\r\n if (fromDate || toDate) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n\r\n const columnTime = new Date(columnValue).getTime();\r\n const fromDateTime = fromDate?.getTime() || null;\r\n const toDateTime = toDate?.getTime() || null;\r\n\r\n if (fromDateTime && fromDateTime > columnTime) {\r\n return false;\r\n }\r\n if (toDateTime && columnTime > toDateTime) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n // Sort\r\n if (orderBy && orderDirection) {\r\n const column = columns.find(e => e.field === orderBy);\r\n if (column) {\r\n const { type, field } = column;\r\n items.sort((tableItemCurrent, tableItemNext) => {\r\n const data = tableItemCurrent.data;\r\n const next = tableItemNext.data;\r\n if (type === 'number') {\r\n return (data[field as string] || 0) - (next[field as string] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date(data[field as string] || '').getTime();\r\n const d2 = new Date(data[field as string] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = (data[field] || '').toString();\r\n const s2 = (next[field] || '').toString();\r\n if (s1 > s2) {\r\n return 1;\r\n }\r\n if (s1 < s2) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n if (orderDirection === 'desc') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items: items.filter((item, index) => {\r\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length,\r\n };\r\n };\r\n\r\n #getFilter = (): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter, filterDef } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n rawFilterDef: filterDef || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction || '',\r\n pageNumber: this.#paginator?.pageIndex || 0,\r\n pageSize: this.#paginator?.pageSize || this.tableOption?.paginate?.pageSize || 50,\r\n };\r\n };\r\n\r\n #load = async (filterReq: SdTableFilterRequest, force: boolean = true) => {\r\n this.isLoading = true;\r\n this.ref.detectChanges();\r\n if (this.tableOption.type === 'server') {\r\n const { items } = this.tableOption;\r\n const data = await items(filterReq).catch(err => {\r\n this.notifyService.notify.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return {\r\n items: [] as T[],\r\n total: 0,\r\n };\r\n });\r\n return {\r\n items: await this.#format(data?.items, this.tableOption.columns).finally(() => {\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n }),\r\n total: data?.total || 0,\r\n };\r\n }\r\n if (force) {\r\n const { items } = this.tableOption;\r\n const results = items();\r\n let data: T[] = [];\r\n if (results instanceof Promise) {\r\n data = await results.catch(err => {\r\n this.notifyService.notify.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return [];\r\n });\r\n } else {\r\n data = results;\r\n }\r\n if (!Array.isArray(data)) {\r\n this.notifyService.notify.warning('Dữ liệu không phải là một mảng');\r\n data = [];\r\n }\r\n this.#localItems = await this.#format(data, this.tableOption.columns);\r\n }\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n };\r\n\r\n #render = async (args: { items: SdTableItem<T>[]; total: number }) => {\r\n this.sdScroll?.scrollTop();\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n await this.tableOption?.reload?.onReload?.(this.items);\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n setTimeout(() => {\r\n this.table?.updateStickyColumnStyles();\r\n }, 0);\r\n };\r\n\r\n reload = async (force: boolean = true) => {\r\n this.tableFilter?.updateFilter?.();\r\n const data = await this.#load(this.#getFilter(), force);\r\n this.#render(data);\r\n };\r\n\r\n #exportedItems = async (pageNumber: number = 0, pageSize: number = 10000) => {\r\n if (this.tableOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.tableOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n if (Array.isArray(result)) {\r\n return result;\r\n }\r\n if (isObservable<any[]>(result)) {\r\n result = result.toPromise();\r\n }\r\n if (isObservable<{ items: any[]; total: number }>(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n const filterInfo = this.#filterExportInfo(pageNumber, pageSize);\r\n if (this.tableOption.type === 'server') {\r\n let result = this.tableOption.items(filterInfo);\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof this.tableOption.items === 'function') {\r\n const results = this.tableOption.items();\r\n if (results instanceof Promise) {\r\n exportedItems = await results;\r\n } else {\r\n exportedItems = results;\r\n }\r\n } else {\r\n exportedItems = this.tableOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterInfo);\r\n }\r\n }\r\n };\r\n\r\n #allColumns = (): SdTableColumn[] => {\r\n const columns: SdTableColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns;\r\n };\r\n\r\n #allExportedColumns = (): SdTableOptionExportColumn[] => {\r\n return this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n };\r\n\r\n onExport = async (args?: { file?: SdExportFile; columns?: SdExportColumn[]; isCSV?: boolean }) => {\r\n const { file, isCSV } = { ...args };\r\n try {\r\n let columns = this.#getExportColumns(args?.columns);\r\n const pageSize = this.tableOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.tableOption?.export?.batch || 1;\r\n let total = this.total;\r\n let pageNumber = 0;\r\n let exportItems = [];\r\n this.isExporting = true;\r\n const items: any[] = [];\r\n let promises: Promise<\r\n | any[]\r\n | {\r\n items: any[];\r\n total: number;\r\n }\r\n >[] = [];\r\n const handleData = async () => {\r\n const results = await Promise.all(promises);\r\n promises = [];\r\n exportItems = [];\r\n for (const result of results) {\r\n if ('items' in result) {\r\n exportItems = [...exportItems, ...result.items];\r\n total = result.total;\r\n } else {\r\n exportItems = [...exportItems, ...result];\r\n }\r\n }\r\n if (this.tableOption.export?.mapping) {\r\n const results = this.tableOption.export.mapping(exportItems);\r\n if (results instanceof Promise) {\r\n exportItems = await results;\r\n } else {\r\n exportItems = results;\r\n }\r\n }\r\n const totalPage = total / pageSize;\r\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\r\n this.exportTitle = `Exporting...${percent}%`;\r\n const allColumns = this.#allColumns();\r\n const allExportedColumns = this.#allExportedColumns();\r\n for (const item of exportItems) {\r\n const obj: any = {};\r\n const handle = async (exportColumn: SdExportColumn) => {\r\n obj[exportColumn.field] = item[exportColumn.field];\r\n const column = allColumns.find(e => e.field === exportColumn.field);\r\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\r\n if (exportedColumn?.transform) {\r\n obj[exportedColumn.field] = exportedColumn.transform(item[exportedColumn.field], item);\r\n return;\r\n }\r\n if (!column) {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column?.children.forEach(childColumn => handle(childColumn));\r\n return;\r\n }\r\n if (!columns.some(e => e.field === column.field)) {\r\n return;\r\n }\r\n if (column.transform) {\r\n const transform = column.transform(item[column.field], item, {\r\n isExport: true,\r\n });\r\n if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\r\n obj[column.field] = obj[column.field] ?? '';\r\n } else if (item[column.field] === undefined || item[column.field] === null || item[column.field] === '') {\r\n obj[column.field] = '';\r\n } else if (column.type === 'string' || column.type === 'number') {\r\n // Nếu cell là string hoặc number thì gán bằng chính nó\r\n obj[column.field] = item[column.field];\r\n } else if (column.type === 'bool') {\r\n // Nếu là bool thì gán bằng giá trị trueValue và falseValue (nếu có), mặc định là TRUE/FALSE\r\n if (item[column.field]) {\r\n obj[column.field] = column.option?.displayOnTrue || 'True';\r\n } else if (obj[column.field] !== undefined && obj[column.field] !== null) {\r\n obj[column.field] = column.option?.displayOnFalse || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n let date = item[column.field];\r\n // Nếu là date thì convert theo đúng format ISO\r\n obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy');\r\n } else if (column.type === 'datetime') {\r\n let date = item[column.field];\r\n // Nếu là datetime thì convert theo đúng format\r\n obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n let date = item[column.field];\r\n // Nếu là time thì convert theo đúng format\r\n obj[column.field] = Date.toFormat(date, 'HH:mm');\r\n } else if (column.type === 'values' || column.type === 'lazy-values') {\r\n const value = item[column.field];\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, item);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField] || val)\r\n ?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField] || val)\r\n ?.join(', ');\r\n }\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n };\r\n while (pageNumber * pageSize < total) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n if (file?.filePath) {\r\n await this.exportService.exportByTemplate({\r\n filePath: file.filePath,\r\n fileName: file.fileName,\r\n columns,\r\n items,\r\n });\r\n return;\r\n }\r\n if (isCSV) {\r\n await this.exportService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n });\r\n return;\r\n }\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n await this.exportService.export({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n sheets,\r\n });\r\n return;\r\n } finally {\r\n this.isExporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n #getExportColumns = (columns?: SdExportColumn[]) => {\r\n let tableColumns: SdExportColumn[] = [];\r\n // Lấy column từ option\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n tableColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n tableColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width,\r\n });\r\n });\r\n // Lấy columns từ configuration\r\n if (this.configuration) {\r\n const columns = [...tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n const children = column.children;\r\n return [...first, ...children];\r\n }, []);\r\n tableColumns = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data);\r\n }\r\n // Chỉ lấy các columns được thiết lập\r\n const columnFields = columns?.map(e => e.field) || [];\r\n return [...tableColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\r\n column => !columnFields?.length || columnFields.includes(column.field)\r\n );\r\n };\r\n\r\n exportExcel = () => {\r\n this.onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.onExport({ isCSV: true });\r\n };\r\n\r\n onFilterChange = () => {\r\n this.tableFilter?.updateFilter?.();\r\n this.filterRegister.value.set({\r\n columnOperator: this.columnOperator || {},\r\n columnFilter: this.columnFilter,\r\n });\r\n };\r\n\r\n onExpand = async (rowData: SdTableItem<T>) => {\r\n if (this.tableOption.expand?.always) {\r\n return;\r\n }\r\n if (rowData.meta.expand.isExpanding) {\r\n return;\r\n }\r\n if (rowData.meta.expand.isExpanded) {\r\n rowData.meta.expand.isExpanded = false;\r\n return;\r\n }\r\n const data = this.tableOption?.expand?.onExpand?.(rowData.data);\r\n if (!this.tableOption.expand?.multiple) {\r\n this.items.forEach(item => (item.meta.expand.isExpanding = item.meta.expand.isExpanded = false));\r\n }\r\n if (data instanceof Promise) {\r\n rowData.meta.expand.isExpanding = true;\r\n data\r\n .then(res => {\r\n rowData.meta.expand.data = res;\r\n rowData.meta.expand.isExpanded = true;\r\n })\r\n .finally(() => (rowData.meta.expand.isExpanding = false));\r\n } else {\r\n rowData.meta.expand.data = data;\r\n rowData.meta.expand.isExpanded = true;\r\n }\r\n };\r\n\r\n onSelect = (rowData: SdTableItem<T>) => {\r\n if (rowData.meta.group?.items?.length) {\r\n rowData.meta.group.items.forEach(e => (e.meta.selector.isSelected = rowData.meta.selector.isSelected));\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.tableOption.selector?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => (e.meta.selector.isSelected = false));\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n };\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.meta.selector.selectable && (!this.tableOption?.selector?.actions?.length || e.meta.selector.actions?.length)) {\r\n e.meta.selector.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.tableOption.selector?.onSelectAll?.(this.items.filter(e => e.meta.selector.isSelected).map(e => e.data));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n onClearSelection = (items?: SdTableItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => (e.meta.selector.isSelected = false));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedTableItems = this.items.filter(item => item.meta.selector.isSelected);\r\n this.ref.detectChanges();\r\n };\r\n\r\n clearFilter = () => {\r\n this.filterRegister.value.remove();\r\n };\r\n\r\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any>; filterDef?: Record<string, any> }) => {\r\n const { columnFilter, externalFilter, filterDef } = args || {};\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n this.filterRegister.value.set({\r\n columnFilter,\r\n externalFilter,\r\n filterDef,\r\n });\r\n };\r\n\r\n get dataItems(): T[] {\r\n return this.items.map(item => item.data);\r\n }\r\n\r\n get selectedItems(): T[] {\r\n return this.selectedTableItems.map(item => item.data);\r\n }\r\n\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n #loadValues = async (columns: SdTableColumn[]) => {\r\n const promises: Promise<{\r\n key: string;\r\n valueField: string;\r\n displayField: string;\r\n data: any[];\r\n }>[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'values' && !this.cacheValues[column.field]) {\r\n if (typeof column.option.items === 'function') {\r\n promises.push(\r\n column.option\r\n .items()\r\n .then(data => ({\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: Array.isArray(data) ? data : [],\r\n }))\r\n .catch(err => {\r\n console.error(err);\r\n return {\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: [],\r\n };\r\n })\r\n );\r\n } else {\r\n this.cacheValues[column.field] = column.option.items.map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n this.#cacheObjValues[column.field] = Array.toObject(this.cacheValues[column.field], column.option.valueField);\r\n }\r\n }\r\n }\r\n if (promises.length) {\r\n const results = await Promise.all(promises);\r\n for (const result of results) {\r\n this.cacheValues[result.key] = result.data.map(e => ({\r\n [result.valueField]: e?.[result.valueField],\r\n [result.displayField]: e?.[result.displayField],\r\n }));\r\n this.#cacheObjValues[result.key] = Array.toObject(this.cacheValues[result.key], result.valueField);\r\n }\r\n }\r\n };\r\n\r\n #format = async <T = any>(rawItems: T[], columns: SdTableColumn[]) => {\r\n const items = rawItems.map(MapToSdTableItem);\r\n for (const column of columns) {\r\n // Clickable\r\n const { field, cellStyle, click, tooltip, htmlTemplate, transform } = column;\r\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\r\n const {\r\n option: { views, mapValue },\r\n } = column;\r\n this.#cacheObjValues[field] = this.#cacheObjValues[field] || {};\r\n const values = items\r\n .map(item => {\r\n if (typeof mapValue === 'function') {\r\n return mapValue(item.data?.[field], item.data);\r\n }\r\n return item.data?.[field];\r\n })\r\n .filter(val => !!val?.toString())\r\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\r\n .filter(val => !Object.keys(this.#cacheObjValues[field]).includes(val))\r\n .union();\r\n\r\n if (values.length) {\r\n const lazyItems: any[] = (\r\n await views(values).catch(err => {\r\n console.error(err);\r\n return [];\r\n })\r\n )\r\n .filter(item => values.includes(item?.[column.option.valueField]))\r\n .map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n Object.assign(this.#cacheObjValues[field], Array.toObject(lazyItems, column.option.valueField) || {});\r\n }\r\n }\r\n for (const item of items) {\r\n const rowData = item.data;\r\n const value = rowData?.[field];\r\n item.meta.display[field] = {\r\n badge: undefined,\r\n cellStyle: column.type === 'number' ? { 'text-align': 'right!important' } : undefined,\r\n data: value,\r\n isHtml: false,\r\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\r\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\r\n };\r\n const display = item.meta.display[field];\r\n // Display\r\n if (typeof htmlTemplate === 'function') {\r\n display.isHtml = true;\r\n display.data = htmlTemplate(value, rowData);\r\n } else if (typeof transform === 'function') {\r\n const newValue = transform(value, rowData);\r\n if (newValue instanceof Promise) {\r\n display.data = await newValue;\r\n } else {\r\n display.data = newValue;\r\n }\r\n } else {\r\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const date = Date.toFormat(value, 'dd/MM/yyyy');\r\n let time = Date.toFormat(value, 'HH:mm:ss');\r\n if (time?.endsWith('00')) {\r\n time = Date.toFormat(value, 'HH:mm');\r\n }\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n if (column.type === 'datetime') {\r\n display.isHtml = true;\r\n display.data = `<span class=\"d-block T14R text-black400\">${time}</span><span class=\"d-block T14R\">${date}</span>`;\r\n } else {\r\n display.data = date;\r\n }\r\n }\r\n if (column.type === 'time') {\r\n display.data = time;\r\n }\r\n }\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, rowData);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField] || val)?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField] || val)?.join(', ');\r\n }\r\n }\r\n if (column.type === 'number' && Number.isNumber(value)) {\r\n display.data = Number.toVNCurrency(value);\r\n }\r\n if (column.type === 'bool') {\r\n const { option } = column;\r\n if (value !== undefined && value !== null && value !== '') {\r\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\r\n } else {\r\n display.data = null;\r\n }\r\n }\r\n // Badge\r\n if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n display.badge = {\r\n type: !column?.badgeType ? 'icon' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column.badgeIcon?.(value, rowData),\r\n };\r\n } else if (column.type === 'bool') {\r\n display.badge = {\r\n type: 'circle',\r\n color: !!value ? 'success' : 'danger',\r\n icon: null,\r\n };\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n };\r\n\r\n onOperatorChange = (column: SdTableColumn, operator: SdFilterOperator) => {\r\n this.tableOption?.filter?.operatorChange?.(column, operator);\r\n };\r\n\r\n trackBy = (index: number, item: SdTableItem) => {\r\n return item.meta.id;\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand, SdTableCommandNormal } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class SdCommandFilterPipe implements PipeTransform {\r\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<SdTableCommand[]> {\r\n const results: SdTableCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n let flag = false;\r\n const { hidden } = command;\r\n if (hidden === undefined) {\r\n flag = true;\r\n } else if (typeof (hidden) === 'boolean') {\r\n if (!hidden) {\r\n flag = true;\r\n }\r\n } else {\r\n const isHidden = hidden(item.data);\r\n if (isHidden instanceof Promise) {\r\n if (!await isHidden) {\r\n flag = true;\r\n }\r\n } else {\r\n if (!isHidden) {\r\n flag = true;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n if ('children' in command) {\r\n const children: SdTableCommandNormal[] = [];\r\n for (const childCommand of command.children) {\r\n const { hidden } = childCommand;\r\n if (hidden === undefined) {\r\n children.push(childCommand);\r\n } else if (typeof (hidden) === 'boolean') {\r\n if (!hidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n const isHidden = hidden(item.data);\r\n if (isHidden instanceof Promise) {\r\n if (!await isHidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n if (!isHidden) {\r\n children.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n if (children.length > 0) {\r\n results.push({ ...command, children });\r\n }\r\n } else {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandDisable',\r\n})\r\nexport class SdCommandDisablePipe implements PipeTransform {\r\n transform(item: SdTableItem, command: SdTableCommand): boolean {\r\n if ('disabled' in command) {\r\n const { disabled } = command;\r\n if (typeof disabled === 'boolean') {\r\n return disabled;\r\n }\r\n return disabled(item.data);\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class SdCommandIconPipe implements PipeTransform {\r\n transform(command: SdTableCommand, item: SdTableItem): string {\r\n if (!command?.icon) {\r\n return undefined;\r\n }\r\n if (typeof (command.icon) === 'string') {\r\n return command.icon;\r\n }\r\n return command.icon(item.data);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class SdCommandTitlePipe implements PipeTransform {\r\n transform(command: SdTableCommand, item: SdTableItem): string {\r\n if (!command?.title) {\r\n return undefined;\r\n }\r\n if (typeof (command.title) === 'string') {\r\n return command.title;\r\n }\r\n return command.title(item.data);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-view',\r\n templateUrl: './desktop-cell-view.component.html',\r\n styleUrls: ['./desktop-cell-view.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCellView {\r\n @Input() column: SdTableColumn;\r\n @Input() item: SdTableItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableExternalFilter } from '../services/table-filter/table-filter.model';\r\n@Pipe({\r\n name: 'sdFilterExternal'\r\n})\r\nexport class SdFilterExternalPipe implements PipeTransform {\r\n transform(externalFilters: SdTableExternalFilter[], field?: string): SdTableExternalFilter[] {\r\n const results: SdTableExternalFilter[] = [];\r\n if (!externalFilters) {\r\n return results;\r\n }\r\n for (const filter of externalFilters) {\r\n results.push(filter);\r\n }\r\n return results.filter(e => !field || e.field === field);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableColumn } from '../models/table-column.model';\r\n@Pipe({\r\n name: 'sdFilterColumn'\r\n})\r\nexport class SdFilterColumnPipe implements PipeTransform {\r\n transform(columns: SdTableColumn[], field?: string): SdTableColumn[] {\r\n const results: SdTableColumn[] = [];\r\n if (!columns) {\r\n return results;\r\n }\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const columnChildren of column?.children) {\r\n if (!columnChildren.filter?.disabled) {\r\n results.push(columnChildren);\r\n }\r\n }\r\n continue;\r\n }\r\n if (!column.filter?.disabled) {\r\n results.push(column);\r\n }\r\n }\r\n return results.filter(e => !field || e.field === field);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTableCommand } from '../../models/table-command.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-command',\r\n templateUrl: './desktop-command.component.html',\r\n styleUrls: ['./desktop-command.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCommand {\r\n @Input() item: SdTableItem;\r\n @Input() commands: SdTableCommand[] = [];\r\n constructor() {\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableColumn } from '../models/table-column.model';\r\n@Pipe({\r\n name: 'columnTooltip'\r\n})\r\nexport class SdColumnTooltipPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: any, rowData: any, column: SdTableColumn): string {\r\n if (column?.tooltip) {\r\n return column.tooltip(value, rowData);\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableItem } from '../models/table-item.model';\r\nimport { SdTableAction, SdTableActionNormal } from '../models/table-option-selector.model';\r\n@Pipe({\r\n name: 'selectionActionFilter'\r\n})\r\nexport class SdSelectionActionFilterPipe implements PipeTransform {\r\n #convert = (action: SdTableAction): SdTableAction => {\r\n if ('children' in action) {\r\n return {\r\n title: action.title,\r\n icon: action.icon,\r\n fontSet: action.fontSet,\r\n tooltip: action.tooltip,\r\n color: action.color,\r\n type: action.type,\r\n children: action.children.map(e => ({\r\n title: e.title,\r\n icon: e.icon,\r\n color: action.color,\r\n type: action.type,\r\n fontSet: e.fontSet,\r\n tooltip: e.tooltip,\r\n click: e.click\r\n }))\r\n };\r\n }\r\n return {\r\n title: action.title,\r\n icon: action.icon,\r\n color: action.color,\r\n type: action.type,\r\n fontSet: action.fontSet,\r\n tooltip: action.tooltip,\r\n click: action.click\r\n };\r\n\r\n }\r\n transform = (selectedItems: SdTableItem[], actions: SdTableAction[]): SdTableAction[] => {\r\n const results: SdTableAction[] = [];\r\n if (!actions?.length || !selectedItems?.length) {\r\n return [];\r\n }\r\n for (const action of actions) {\r\n if ('children' in action) {\r\n const children: SdTableActionNormal[] = [];\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n children.push(childAction);\r\n }\r\n }\r\n if (children.length > 0) {\r\n results.push({ ...action, children });\r\n }\r\n } else {\r\n const key = hash(action);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n results.push(action);\r\n }\r\n }\r\n }\r\n return results.map(result => this.#convert(result));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'selectionDisable'\r\n})\r\nexport class SdSelectionDisablePipe implements PipeTransform {\r\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\r\n const { disabled, actions } = selection;\r\n if (!actions?.length) {\r\n if (!disabled) {\r\n rowData.meta.selector.selectable = true;\r\n return false;\r\n }\r\n rowData.meta.selector.selectable = !disabled(rowData, selectedItems);\r\n return !rowData.meta.selector.selectable;\r\n }\r\n // Lọc các action theo selectedItems hiện tại\r\n const availableActions = actions.filter(action => {\r\n if ('children' in action) {\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n const key = hash(action);\r\n return selectedItems.every(e => e.meta.selector.actions.includes(key));\r\n }\r\n });\r\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\r\n for (const action of availableActions) {\r\n if ('children' in action) {\r\n for (const childAction of action.children) {\r\n if(rowData.meta.selector.actions.includes(hash(childAction))) {\r\n return false;\r\n }\r\n }\r\n } else {\r\n if(rowData.meta.selector.actions.includes(hash(action))) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'selectionVisibleSelectAll'\r\n})\r\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\r\n transform = async (items: SdTableItem[], selection: SdTableOptionSelector): Promise<boolean> => {\r\n const { actions } = selection;\r\n if (!actions?.length) {\r\n return true;\r\n }\r\n if (!items.length) {\r\n return false;\r\n }\r\n if (actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\r\n return false;\r\n }\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n const first = items.find(t => t.meta.selector.actions?.length);\r\n if (first) {\r\n for (const action of first.meta.selector.actions) {\r\n if (items.filter(t => t.meta.selector.actions?.length).every(e => e.meta.selector.actions.includes(action))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTabelCellDefDirective } from '../../directives/sd-table-cell-def.directive';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell',\r\n templateUrl: './desktop-cell.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCell {\r\n @Input() value: any;\r\n @Input() column: SdTableColumn;\r\n @Input() item: SdTableItem;\r\n @Input() cellDef: {\r\n [column: string]: SdTabelCellDefDirective\r\n } = {};\r\n constructor(\r\n ) { }\r\n}\r\n","import { SdBadgeColor } from '@sd-angular/core/badge';\r\nimport { SdTabelCellDefDirective } from '../directives/sd-table-cell-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nexport type SdTableColumn<T = any> =\r\n | SdTableColumnText<T>\r\n | SdTableColumnNumber<T>\r\n | SdTableColumnBool<T>\r\n | SdTableColumnDate<T>\r\n | SdTableColumnValues<T>\r\n | SdTableColumnLazyValues<T>\r\n | SdTableColumnChildren<T>;\r\n\r\nexport type SdFilterOperator =\r\n | 'EQUAL'\r\n | 'NOT_EQUAL'\r\n | 'CONTAIN'\r\n | 'NOT_CONTAIN'\r\n | 'IN'\r\n | 'NOT_IN'\r\n | 'START_WITH'\r\n | 'END_WITH'\r\n | 'GREATER_THAN'\r\n | 'LESS_THAN'\r\n | 'GREATER_OR_EQUAL'\r\n | 'LESS_OR_EQUAL'\r\n | 'NULL'\r\n | 'NOT_NULL';\r\n\r\nexport const SdFilterOperators: { value: SdFilterOperator; symbol?: string; display: string }[] = [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'GREATER_THAN',\r\n symbol: '>',\r\n display: 'Lớn hơn',\r\n },\r\n {\r\n value: 'LESS_THAN',\r\n symbol: '<',\r\n display: 'Nhỏ hơn',\r\n },\r\n {\r\n value: 'GREATER_OR_EQUAL',\r\n symbol: '≥',\r\n display: 'Lớn hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'LESS_OR_EQUAL',\r\n symbol: '≤',\r\n display: 'Nhỏ hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'CONTAIN',\r\n symbol: 'join_inner',\r\n display: 'Chứa',\r\n },\r\n {\r\n value: 'NOT_CONTAIN',\r\n symbol: 'join',\r\n display: 'Không chứa',\r\n },\r\n {\r\n value: 'START_WITH',\r\n symbol: 'line_start_circle',\r\n display: 'Bắt đầu bởi',\r\n },\r\n {\r\n value: 'END_WITH',\r\n symbol: 'line_end_circle',\r\n display: 'Kết thúc bởi',\r\n },\r\n {\r\n value: 'IN',\r\n symbol: 'checklist_rtl',\r\n display: 'Nằm trong',\r\n },\r\n {\r\n value: 'NOT_IN',\r\n symbol: 'event_list',\r\n display: 'Không nằm trong',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n];\r\n\r\nexport type SdTableColumnTransformFunc<T = any> = (\r\n value: any,\r\n rowData: T,\r\n args?: {\r\n isExport?: boolean;\r\n }\r\n) => string | Promise<string>;\r\n\r\ninterface SdTableColumnBase<T = any> {\r\n field: Extract<keyof T, string>;\r\n title: string;\r\n titleHtml?: string;\r\n description?: string;\r\n width?: string;\r\n hidden?: boolean;\r\n invisible?: boolean;\r\n fixed?: boolean;\r\n cellStyle?: (value: any, rowData: T) => Record<string, string>;\r\n htmlTemplate?: (value: any, rowData: T) => string;\r\n transform?: SdTableColumnTransformFunc<T>;\r\n tooltip?: (value: any, rowData: T) => string;\r\n click?: (value: any, rowData: T) => void;\r\n sortable?: boolean;\r\n filter?: {\r\n disabled?: boolean;\r\n defaultShowing?: boolean;\r\n default?: any;\r\n // Chỉ dành cho filter inline column\r\n operator?: {\r\n default?:SdFilterOperator;\r\n enable?: boolean;\r\n list?: SdFilterOperator[];\r\n };\r\n };\r\n export?: {\r\n disabled?: boolean;\r\n };\r\n cellDef?: TemplateRef<SdTabelCellDefDirective>;\r\n}\r\n\r\ninterface SdTableColumnText<T = any> extends SdTableColumnBase<T> {\r\n type: 'string';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'circle' | 'icon';\r\n}\r\n\r\ninterface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {\r\n type: 'number';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'circle' | 'icon';\r\n}\r\n\r\ninterface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {\r\n type: 'bool';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n}\r\n\r\ninterface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {\r\n type: 'date' | 'datetime' | 'time';\r\n filter?: SdTableColumnBase['filter'] & { useFilterDate?: boolean }\r\n}\r\n\r\nexport interface SdTableColumnValues<T = any> extends SdTableColumnBase<T> {\r\n type: 'values';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'icon' | 'circle' | 'round';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n}\r\n\r\nexport interface SdTableColumnLazyValues<T = any> extends SdTableColumnBase<T> {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: (searchText: string) => Promise<any[]>; // Filter\r\n // Nếu không có tranform hay htmlTemplate cần khai báo views\r\n views?: (values: string[]) => Promise<any[]>; // Hiển thị\r\n mapValue?: (value: any, rowData?: T) => string | string[]; // Một số trường hợp dữ liệu của field là object hoặc muốn value lấy dữ liệu khác thì sử dụng hàm này\r\n selection?: 'MULTIPLE';\r\n };\r\n}\r\n\r\ntype SdTableColumnNormal<T> = Exclude<SdTableColumn<T>, SdTableColumnChildren<T>>;\r\n\r\nexport interface SdTableColumnChildren<T = any> extends SdTableColumnBase<T> {\r\n type: 'children';\r\n children: SdTableColumnNormal<T>[];\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList } from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdFilterOperator, SdFilterOperators, SdTableColumn } from '../../models/table-column.model';\r\n\r\n@Component({\r\n selector: 'sd-column-inline-filter',\r\n templateUrl: './column-inline-filter.component.html',\r\n styleUrls: ['./column-inline-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdColumnInlineFilter implements OnInit {\r\n value: any;\r\n @Input('value') _value(value: any) {\r\n this.value = value;\r\n this.#valueChanges.next();\r\n }\r\n inlineSymbol: string = 'filter_alt';\r\n #inlineOperator: SdFilterOperator;\r\n @Input('inlineOperator') set _inlineOperator(inlineOperator: SdFilterOperator) {\r\n if (this.#inlineOperator !== inlineOperator) {\r\n this.#inlineOperator = inlineOperator;\r\n this.inlineSymbol = SdFilterOperators.find(e => e.value === inlineOperator)?.symbol ?? 'filter_alt';\r\n }\r\n }\r\n @Output() inlineOperatorChange = new EventEmitter<SdFilterOperator>();\r\n @Output() operatorChange = new EventEmitter<SdFilterOperator>();\r\n\r\n\r\n columnFilter: Record<string, any> = {};\r\n @Input('columnFilter') set _columnFilter(columnFilter: Record<string, any>) {\r\n this.columnFilter = columnFilter || {};\r\n this.#valueChanges.next();\r\n }\r\n operators: { value: SdFilterOperator; display: string }[] = [];\r\n column: SdTableColumn;\r\n items: any[] | ((searchText: string) => Promise<any[]>) = [];\r\n @Input() cacheValues: Record<string, any[]>;\r\n @Input('column') set _column(column: SdTableColumn) {\r\n this.column = column;\r\n if (!column?.filter?.disabled && column?.filter?.operator?.enable) {\r\n this.operators = SdFilterOperators.filter(e => column.filter.operator.list?.includes?.(e.value));\r\n } else {\r\n this.operators = [];\r\n }\r\n if (this.column.type === 'values') {\r\n if (Array.isArray(this.column.option.items)) {\r\n this.items = this.column.option.items;\r\n } else {\r\n this.items = this.cacheValues?.[column.field] || []\r\n }\r\n } else if (this.column.type === 'lazy-values') {\r\n this.items = this.column.option.items;\r\n }\r\n } \r\n @Output() filterChange = new EventEmitter();\r\n #valueChanges = new Subject();\r\n #subcription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subcription.add(\r\n this.#valueChanges.pipe(startWith(this.columnFilter)).subscribe(() => {\r\n if (this.column.type === 'date' || this.column.type === 'time' || this.column.type === 'datetime') {\r\n if (!this.column?.filter?.useFilterDate) {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subcription.unsubscribe();\r\n }\r\n\r\n onFilterChange = () => {\r\n this.filterChange.emit();\r\n };\r\n\r\n onChangeOperator = (operator: { value: SdFilterOperator; symbol?: string; display: string }) => {\r\n if (operator) {\r\n this.#inlineOperator = operator.value;\r\n this.inlineSymbol = operator.symbol;\r\n } else {\r\n this.#inlineOperator = null;\r\n this.inlineSymbol = 'filter_alt';\r\n }\r\n this.inlineOperatorChange.emit(this.#inlineOperator);\r\n this.operatorChange.emit(this.#inlineOperator);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n\r\n@Pipe({\r\n name: 'selectionVisible'\r\n})\r\nexport class SdSelectionVisiblePipe implements PipeTransform {\r\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\r\n const { actions } = selection;\r\n const groupedActions: string[] = [];\r\n rowData.meta.selector.actions = rowData.meta.selector.actions || [];\r\n if (!actions?.length) {\r\n rowData.meta.selector.selectable = true;\r\n return rowData.meta.selector.selectable;\r\n }\r\n for (const action of actions) {\r\n if ('children' in action) {\r\n let flag = false;\r\n let hasGroup = false;\r\n for (const childAction of action.children) {\r\n const { hidden, isGrouped } = childAction;\r\n const key = hash(childAction);\r\n if (isGrouped) {\r\n hasGroup = true;\r\n }\r\n if (typeof (hidden) === 'function') {\r\n if (!hidden(rowData.data)) {\r\n flag = true;\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n flag = true;\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n if (flag) {\r\n rowData.meta.selector.actions.push(hash(action));\r\n if (hasGroup) {\r\n groupedActions.push(hash(action));\r\n }\r\n }\r\n } else {\r\n const { hidden, isGrouped } = action;\r\n const key = hash(action);\r\n if (typeof (hidden) === 'function') {\r\n if (!hidden(rowData.data)) {\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n }\r\n rowData.meta.selector.selectable = !!rowData.meta.selector.actions?.length;\r\n if (!rowData.meta.selector.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\r\n return rowData.meta.selector.selectable;\r\n }\r\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\r\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\r\n return rowData.meta.selector.actions.some(action => !groupedActions.includes(action));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { SdTableAction } from '../../models/table-option-selector.model';\r\n\r\n@Component({\r\n selector: 'sd-table-quick-action',\r\n templateUrl: './quick-action.component.html',\r\n styleUrls: ['./quick-action.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTableQuickAction {\r\n @Input() tableOption: SdTableOption;\r\n @Input() selectedTableItems: SdTableItem[];\r\n @Output() clear = new EventEmitter();\r\n constructor() {}\r\n onClear = () => {\r\n this.clear.emit();\r\n };\r\n\r\n onClickAction = (action: SdTableAction) => {\r\n if ('click' in action) {\r\n action?.click(this.selectedTableItems.map(e => e.data));\r\n }\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'sdGroup',\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: SdTableItem[], gridOption: SdTableOption): SdTableItem[] {\r\n const { group } = gridOption;\r\n if (!group) {\r\n return items;\r\n }\r\n const { fields, htmlTemplate } = group;\r\n if (!fields?.length) {\r\n return items;\r\n }\r\n const groupItem: {\r\n [key: string]: SdTableItem[];\r\n } = {};\r\n for (const item of items) {\r\n let obj = {};\r\n for (const field of fields) {\r\n obj = {\r\n ...obj,\r\n ...(item[field] ?? { [field]: item[field] }),\r\n };\r\n }\r\n const key = hash(obj);\r\n if (!groupItem[key]) {\r\n groupItem[key] = [];\r\n }\r\n groupItem[key].push(item);\r\n }\r\n const results: SdTableItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n const result = MapToSdTableItem({});\r\n result.meta.group.items = groupItem[key];\r\n result.meta.group.htmlTemplate = htmlTemplate(groupItem[key]);\r\n results.push(result);\r\n for (const item of groupItem[key]) {\r\n results.push(item);\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Injectable, NgModule } from '@angular/core';\r\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTable } from './table.component';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { CdkTableModule, CdkColumnDef } from '@angular/cdk/table';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdCommandFilterPipe } from './pipes/command-filter.pipe';\r\nimport { SdCommandDisablePipe } from './pipes/command-disable.pipe';\r\nimport { SdCommandIconPipe } from './pipes/command-icon.pipe';\r\nimport { SdCommandTitlePipe } from './pipes/command-title.pipe';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SdDesktopCellView } from './components/desktop-cell-view/desktop-cell-view.component';\r\nimport { SdServiceModule } from '@sd-angular/core/service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdFilterExternalPipe } from './pipes/filter-external.pipe';\r\nimport { SdFilterColumnPipe } from './pipes/filter-column.pipe';\r\nimport { SdTableFilter } from './components/table-filter/table-filter.component';\r\nimport { SdPopupFilter } from './components/popup-filter/popup-filter.component';\r\n\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SdPopupConfiguration } from './components/popup-configuration/popup-configuration.component';\r\nimport { SdTableConfigurationService } from './services/table-configuration.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { SdColumnTooltipPipe } from './pipes/column-tooltip.pipe';\r\nimport { SdSelectionActionFilterPipe } from './pipes/selection-action-filter.pipe';\r\nimport { SdSelectionDisablePipe } from './pipes/selection-disable.pipe';\r\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdColumnInlineFilter } from './components/column-inline-filter/column-inline-filter.component';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { SdTableQuickAction } from './components/quick-action/quick-action.component';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\r\nimport { SdGroupModule } from '@sd-angular/core/group';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n@Injectable()\r\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\r\n firstPageLabel = 'Trang đầu';\r\n lastPageLabel = 'Trang cuối';\r\n itemsPerPageLabel = 'Kích thước trang';\r\n nextPageLabel = 'Trang sau';\r\n previousPageLabel = 'Trang trước';\r\n\r\n getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n if (length === 0 || pageSize === 0) {\r\n return '';\r\n }\r\n const from = page * pageSize + 1;\r\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\r\n return `${from}-${to}/${length}`;\r\n };\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatTableModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule,\r\n MatCheckboxModule,\r\n MatListModule,\r\n MatChipsModule,\r\n CdkTableModule,\r\n DragDropModule,\r\n SdFormModule,\r\n SdServiceModule,\r\n SdCommonModule,\r\n SdGroupModule,\r\n ],\r\n declarations: [\r\n SdTableQuickAction,\r\n SdDesktopCell,\r\n SdDesktopCellView,\r\n SdDesktopCommand,\r\n SdColumnInlineFilter,\r\n SdTable,\r\n\r\n SdMaterialFooterDefDirective,\r\n SdTabelCellDefDirective,\r\n SdTableFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n SdPopupConfiguration,\r\n SdTableFilter,\r\n SdPopupFilter,\r\n SdPopupExport,\r\n // Pipes\r\n SdCommandFilterPipe,\r\n SdCommandDisablePipe,\r\n SdCommandIconPipe,\r\n SdCommandTitlePipe,\r\n SdColumnTooltipPipe,\r\n SdFilterColumnPipe,\r\n SdFilterExternalPipe,\r\n SdSelectionActionFilterPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionDisablePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdGroupPipe,\r\n ],\r\n exports: [\r\n SdTable,\r\n SdMaterialFooterDefDirective,\r\n SdTabelCellDefDirective,\r\n SdTableFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdTableFilterService,\r\n SdTableConfigurationService,\r\n {\r\n provide: MatPaginatorIntl,\r\n useClass: MatPaginatorIntlCro,\r\n },\r\n ],\r\n})\r\nexport class SdTableModule {}\r\n","import { Observable } from 'rxjs';\r\nimport { SdFilterOperator, SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nexport class SdTableQuickFilter {\r\n code: string;\r\n columnFilter: {\r\n [field: string]: any;\r\n };\r\n externalFilter: {\r\n [field: string]: any;\r\n };\r\n filterDef: {\r\n [field: string]: any;\r\n };\r\n}\r\n\r\nexport interface SdTableFilterConfiguration {\r\n // selectedQuickFilter: string;\r\n // quickFilters: SdGridMaterialQuickFilter[];\r\n\r\n inlineColumn: Record<string, boolean>; // Ẩn hiện filter column\r\n // columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\r\n // externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n inlineFilterDef: Record<string, boolean>; // Ẩn hiện filter def\r\n // filterDef?: Record<string, any>; // Giá trị filter def\r\n}\r\n\r\nexport interface SdTableFilterValue {\r\n columnOperator?: Record<string, SdFilterOperator>;\r\n\r\n columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n filterDef?: Record<string, any>; // Giá trị filter def\r\n\r\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\r\n}\r\n\r\nexport interface SdTableFilterRequest<T = any> {\r\n columnOperator: Record<string, SdFilterOperator>;\r\n rawColumnFilter: Record<keyof T, any>;\r\n rawExternalFilter: Record<string, any>;\r\n rawFilterDef: Record<string, any>;\r\n pageNumber: number;\r\n pageSize: number;\r\n orderBy: string;\r\n orderDirection: 'asc' | 'desc' | '';\r\n isExported?: boolean;\r\n}\r\n\r\nexport interface SdTableOptionFilter {\r\n key?: string;\r\n cacheFilter?: boolean;\r\n disabled?: boolean;\r\n hideInlineFilter?: boolean;\r\n externalFilters?: SdTableExternalFilter[];\r\n sorts?: string[];\r\n enableCollapse?: boolean;\r\n operatorChange?: (column?: SdTableColumn, operator?: SdFilterOperator) => void;\r\n}\r\n\r\nexport declare type SdTableExternalFilter =\r\n | TextFilter\r\n | DateFilter\r\n | DateTimeFilter\r\n | DateRangeFilter\r\n | NumberFilter\r\n | ValuesFilter\r\n | LazyValuesFilter\r\n | BoolFilter\r\n | CustomFilter;\r\n\r\ninterface BaseFilter {\r\n field: string;\r\n title: string;\r\n defaultShowing?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface TextFilter extends BaseFilter {\r\n type: 'string';\r\n default?: string;\r\n}\r\n\r\ninterface DateFilter extends BaseFilter {\r\n type: 'date';\r\n default?: Date | string;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n}\r\n\r\ninterface DateTimeFilter extends BaseFilter {\r\n type: 'datetime';\r\n default?: Date | string;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n}\r\n\r\ninterface DateRangeFilter extends BaseFilter {\r\n type: 'daterange';\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n default?: {\r\n from?: Date | string;\r\n to?: Date | string;\r\n };\r\n}\r\n\r\ninterface NumberFilter extends BaseFilter {\r\n type: 'number';\r\n default?: number;\r\n}\r\n\r\ninterface ValuesFilter extends BaseFilter {\r\n type: 'values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface LazyValuesFilter extends BaseFilter {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: (searchText: string) => Promise<any[]>; // Filter\r\n selection?: 'MULTIPLE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface BoolFilter extends BaseFilter {\r\n type: 'bool';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n default?: boolean;\r\n}\r\n\r\ninterface CustomFilter extends BaseFilter {\r\n type: 'custom';\r\n filterDef?: TemplateRef<SdTableFilterDefDirective>;\r\n default?: any;\r\n}\r\n\r\nexport interface SdTableFilterRegister {\r\n configuration: {\r\n get: () => SdTableFilterConfiguration;\r\n set: (configuration: Partial<SdTableFilterConfiguration>) => SdTableFilterConfiguration;\r\n remove: () => void;\r\n observer: Observable<SdTableFilterConfiguration>;\r\n };\r\n value: {\r\n get: () => SdTableFilterValue;\r\n set: (value: Partial<SdTableFilterValue>) => SdTableFilterValue;\r\n remove: () => void;\r\n observer: Observable<SdTableFilterValue>;\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../projects/sd-core/table/src/lib/directives/sd-table-cell-def.directive.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-filter-def.directive.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/table/src/lib/models/table-configuration.model.ts","../../../../projects/sd-core/table/src/lib/components/popup-filter/popup-filter.component.ts","../../../../projects/sd-core/table/src/lib/components/table-filter/table-filter.component.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-expand-def.directive.ts","../../../../projects/sd-core/table/src/lib/directives/sd-table-footer-def.directive.ts","../../../../projects/sd-core/table/src/lib/services/table-configuration.service.ts","../../../../projects/sd-core/table/src/lib/models/table-item.model.ts","../../../../projects/sd-core/table/src/lib/services/table-filter/table-filter.service.ts","../../../../projects/sd-core/table/src/lib/components/popup-configuration/popup-configuration.component.ts","../../../../projects/sd-core/table/src/lib/components/popup-export/popup-export.component.ts","../../../../projects/sd-core/table/src/lib/table.component.ts","../../../../projects/sd-core/table/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-disable.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-cell-view/desktop-cell-view.component.ts","../../../../projects/sd-core/table/src/lib/pipes/filter-external.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/filter-column.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-command/desktop-command.component.ts","../../../../projects/sd-core/table/src/lib/pipes/column-tooltip.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-action-filter.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-disable.pipe.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-visible-select-all.pipe.ts","../../../../projects/sd-core/table/src/lib/components/desktop-cell/desktop-cell.component.ts","../../../../projects/sd-core/table/src/lib/models/table-column.model.ts","../../../../projects/sd-core/table/src/lib/components/column-inline-filter/column-inline-filter.component.ts","../../../../projects/sd-core/table/src/lib/pipes/selection-visible.pipe.ts","../../../../projects/sd-core/table/src/lib/components/quick-action/quick-action.component.ts","../../../../projects/sd-core/table/src/lib/pipes/sd-group.pipe.ts","../../../../projects/sd-core/table/src/lib/table.module.ts","../../../../projects/sd-core/table/src/lib/services/table-filter/table-filter.model.ts"],"names":["templateRef","this","Directive","args","selector","TemplateRef","Input","SdTableFilterDefDirective","Object","defineProperty","prototype","val","defaultShowing","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","length","push","create","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","DEFAULT_TABLE_CONFIG","paginate","pageSize","pages","TABLE_CONFIG","InjectionToken","SdPopupFilter","cdRef","_this","_filterRegister","externalFilters","externalFilter","inlineExternal","columns","columnFilter","inlineColumn","filterDefs","filterDef","inlineFilterDef","open","configuration","JSON","parse","stringify","filterValue","modal","markForCheck","close","onApply","ngAfterViewInit","ngOnDestroy","onClear","remove","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","ViewChild","SdModal","SdTableFilter","ref","deviceService","filterRegisterChange","BehaviorSubject","_subscription","Subscription","onFilter","item","filterRegister","updateFilter","notReload","popupFilter","isMobileOrTablet","isDesktop","filter","add","pipe","startWith","subscribe","observer","unsubscribe","DeviceDetectorService","settingService","gridMaterialConfiguration","_COLUMNS","SUBINFORMATION","COMMAND","SELECTION","GROUP","_prefix","_getSetting","option","key","prefix","default","_default","loadConfiguration","loadConfigurationResult","column","fixedColumn","firstColumns","secondColumns","firstHeaders","secondHeaders","displayedColumns","displayedFooters","multipleHeader","_d","commands","group","visible","_a","fields","_b","col","invisible","forEach","find","field","origin","title","width","fixed","assign","type","children","childColumn","_c","some","expand","init","gridOption","hidden","map","Injectable","SdSettingService","Inject","Optional","MapToSdTableItem","data","meta","id","hash","display","isExpanding","isExpanded","actions","isSelected","selectable","_filterConfiguration","_filterValue","_cache","register","cacheSession","tempKey","filterConfiguration_1","_defaultConfiguration","undefined","_initConfiguration","filterValue_1","cacheFilter","_defaultValue","_initValue","keys","current","columnOperator","updatedFilter","includes","_y","_z","_0","_1","_2","_3","sdTableFilterDef","operator","enable","_e","_g","_f","from","_k","_j","_h","_l","to","_p","_o","_m","_q","_s","_r","_u","_t","SdPopupConfiguration","notifyService","tableConfigurationService","changes","EventEmitter","_setting","isCreatingColumn","selected","disabledDrag","tableOption","onSave","detectChanges","onReset","confirm","ngOnInit","mouseUp","event","dropTable","moveItemInArray","previousIndex","currentIndex","table","renderRows","handleMouseDown","handleMouseUp","SdNotifyService","SdTableConfigurationService","HostListener","SdPopupExport","loadingService","exportService","translateService","enableCreating","files","export","form","FormGroup","_getExportableColumns","tableColumns","additionalColumns","loadFiles","exportDefault","_getExportColumns","columns_1","displayColumns","reduce","first","e1","emit","file","isCSV","exportCSV","filesInFolder","_initTemplate","fileName","sheets","isArray","sheet","name","items","generateTemplate","start","finally","stop","generateAndUploadTemplate","generateUploadTemplate","onExport","uploadTemplate","removeFile","translate","idx","indexOf","splice","createTemplate","invalid","markAllAsTouched","notify","warning","templateName","filePath","templateNameValidator","test","disabled","description","SdLoadingService","SdExportService","SdTranslateService","Output","SdTable","tableConfiguration","gridFilterService","_gridId","uuid.v4","_optionChanges","Subject","_localItems","selectedTableItems","isLoading","isHiddenPaginator","_paginator","_sort","sdCellDefs","QueryList","cellDef","sdFooterDefs","footerDef","hasFooter","sdFilterDefs","_reload","isExporting","isSelectAll","exportTitle","_loadCompleted","cacheValues","_cacheObjValues","_initCellDef","_13","_14","sdTableCellDef","_initFilterDef","_initFooterDef","sdTableFooterDef","_filterExportInfo","pageNumber","_12","rawColumnFilter","rawExternalFilter","rawFilterDef","orderBy","active","orderDirection","direction","isExported","showFirstLastButtons","_v","list","_x","_w","defaultListString","defaultListNumber","_4","defaultListValues","_7","_6","_5","defaultListDate","_11","_10","_9","_8","defaultOperator","el","_loadFilterRegister","_subscription$1","debounceTime","pageIndex","force","_filterLocal","localItems","filterInfo","tableItem","toString","trim","toLowerCase","columnValue","columnType_1","selection","columnValues_1","valueField","filterValues","every","fv","fValue","replace","cValue","fromDate","Date","begin","toDate","end","columnTime","getTime","fromDateTime","toDateTime","columns_1_1","type_1","field_1","sort","tableItemCurrent","tableItemNext","s1","s2","reverse","index","total","_getFilter","visibledColumns","union","_load","filterReq","catch","err","console","_15","_format","results","_render","sdScroll","scrollTop","reload","onReload","_updateSelectedItems","setTimeout","updateStickyColumnStyles","tableFilter","_exportedItems","isObservable","toPromise","exportedItems","_allColumns","_allExportedColumns","columns_2","_getExportColumns$1","pageSize_1","maxItemsPerRequest","batch","total_1","pageNumber_1","exportItems_1","items_1","promises_1","handleData","all","results_1","results_1_1","mapping","results_2","totalPage","percent","Math","round","allColumns","allExportedColumns","obj","handle","exportColumn","exportedColumn","transform","isExport","displayOnTrue","displayOnFalse","date","toFormat","mapValue","vals","displayField","join","e_9","columns_3","columns_3_1","exportItems_2","exportItems_2_1","_19","exportByTemplate","_16","_17","columns_4","columnFields","exportExcel","onFilterChange","onExpand","rowData","always","multiple","res","onSelect","single","onSelectAll","onClearSelection","clearFilter","setFilter","_loadValues","promises","this_1","toObject","columns_5","columns_5_1","this_2","results_3","results_3_1","rawItems","cellStyle","click","tooltip","htmlTemplate","views","mapValue_1","this_3","values_1","lazyItems","badge","text-align","isHtml","newValue","time","endsWith","Number","isNumber","toVNCurrency","color","icon","badgeType","badgeIcon","e_13","items_2","items_2_1","columns_6","columns_6_1","onOperatorChange","operatorChange","trackBy","_initConfiguration$1","setting_1","subject","getValue","configurationResult","configurationResult_1","displayColumns_1","paginator","page","sortChange","switchMap","combineLatest","animations","trigger","style","height","minHeight","visibility","transition","animate","SdTableFilterService","MatTable","SdScrollDirective","SdQuickAction","MatPaginator","MatSort","ContentChild","SdMaterialSubInformationDefDirective","ContentChildren","SdTabelCellDefDirective","SdMaterialFooterDefDirective","SdCommandFilterPipe","commands_1","commands_1_1","command","flag","isHidden","e_1","childCommand","hidden_1","Pipe","SdCommandDisablePipe","SdCommandIconPipe","SdCommandTitlePipe","SdFilterExternalPipe","externalFilters_1","externalFilters_1_1","SdFilterColumnPipe","e_2","columnChildren","SdColumnTooltipPipe","_convert","action","fontSet","selectedItems","childAction","key_1","actions_1","actions_1_1","availableActions","availableActions_1","availableActions_1_1","isGrouped","SdFilterOperators","symbol","SdColumnInlineFilter","inlineSymbol","_inlineOperator_1","inlineOperatorChange","operators","filterChange","_valueChanges","_subcription","onChangeOperator","_value","inlineOperator","useFilterDate","groupedActions","hasGroup","clear","onClickAction","SdGroupPipe","groupItem","items_1_1","fields_1","fields_1_1","e_4","MatPaginatorIntlCro","_super","firstPageLabel","lastPageLabel","itemsPerPageLabel","nextPageLabel","previousPageLabel","getRangeLabel","String","__","constructor","__extends","MatPaginatorIntl","NgModule","imports","CommonModule","MatSortModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatSlideToggleModule","MatCheckboxModule","MatListModule","MatChipsModule","CdkTableModule","DragDropModule","SdFormModule","SdServiceModule","SdCommonModule","SdGroupModule","declarations","SdTableQuickAction","SdDesktopCell","SdDesktopCellView","SdDesktopCommand","SdSelectionActionFilterPipe","SdSelectionVisiblePipe","SdSelectionDisablePipe","SdSelectionVisibleSelectAllPipe","exports","providers","DatePipe","DecimalPipe","CdkColumnDef","provide","useClass"],"mappings":"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","sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableCellDef]'\r\n})\r\nexport class SdTabelCellDefDirective {\r\n @Input() sdTableCellDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableFilterDef]'\r\n})\r\nexport class SdTableFilterDefDirective {\r\n @Input() sdTableFilterDef: string;\r\n defaultShowing: boolean;\r\n @Input('defaultShowing') set showing(val: boolean | '') {\r\n this.defaultShowing = (val === '') || val;\r\n }\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { SdFilterOperator, SdTableColumn } from './table-column.model';\r\n\r\nexport interface ISdTableConfiguration {\r\n filter?: {\r\n quickFilter?: boolean;\r\n operator?: {\r\n defaultListString?: SdFilterOperator[];\r\n defaultListNumber?: SdFilterOperator[];\r\n defaultListDate?: SdFilterOperator[];\r\n defaultListValues?: SdFilterOperator[];\r\n defaultOperator?:{\r\n [key in SdTableColumn['type']]?:SdFilterOperator\r\n }\r\n };\r\n };\r\n paginate?: {\r\n pageSize?: number;\r\n pages?: number[]\r\n };\r\n translate?: boolean;\r\n}\r\n\r\nexport const DEFAULT_TABLE_CONFIG: ISdTableConfiguration = {\r\n paginate: {\r\n pageSize: 20,\r\n pages: [20, 50, 100, 200]\r\n }\r\n};\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<ISdTableConfiguration>('sd-table.configuration');\r\n","import { Component, ViewChild, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableExternalFilter, SdTableFilterRegister } from '../../services/table-filter/table-filter.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sd-popup-filter',\r\n templateUrl: './popup-filter.component.html',\r\n styleUrls: ['./popup-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdPopupFilter {\r\n @ViewChild(SdModal) modal: SdModal;\r\n #filterRegister: SdTableFilterRegister;\r\n @Input() set filterRegister(value: SdTableFilterRegister) {\r\n this.#filterRegister = value;\r\n }\r\n @Input() externalFilters: SdTableExternalFilter[] = [];\r\n externalFilter: Record<string, any> = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n @Input() columns: SdTableColumn[] = [];\r\n columnFilter: Record<string, any> = {};\r\n inlineColumn: Record<string, boolean> = {};\r\n\r\n @Input() filterDefs: SdTableFilterDefDirective[] = [];\r\n filterDef: Record<string, any> = {};\r\n inlineFilterDef: Record<string, boolean> = {};\r\n constructor(private cdRef: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy() {}\r\n\r\n open = () => {\r\n const configuration = this.#filterRegister.configuration.get();\r\n this.inlineColumn = JSON.parse(JSON.stringify(configuration.inlineColumn));\r\n this.inlineExternal = JSON.parse(JSON.stringify(configuration.inlineExternal));\r\n this.inlineFilterDef = JSON.parse(JSON.stringify(configuration.inlineFilterDef));\r\n const filterValue = this.#filterRegister.value.get();\r\n this.columnFilter = JSON.parse(JSON.stringify(filterValue.columnFilter));\r\n this.externalFilter = JSON.parse(JSON.stringify(filterValue.externalFilter));\r\n this.filterDef = JSON.parse(JSON.stringify(filterValue.filterDef));\r\n this.modal.open();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n close = () => {\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n onApply = () => {\r\n this.#filterRegister.configuration.set({\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.inlineExternal,\r\n inlineFilterDef: this.inlineFilterDef,\r\n });\r\n this.#filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n });\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n };\r\n\r\n onClear() {\r\n this.#filterRegister.value.remove();\r\n this.modal.close();\r\n this.cdRef.markForCheck();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ViewChild,\r\n AfterViewInit,\r\n OnDestroy,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport {\r\n SdTableOptionFilter,\r\n SdTableExternalFilter,\r\n SdTableFilterRegister,\r\n} from '../../services/table-filter/table-filter.model';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdPopupFilter } from '../popup-filter/popup-filter.component';\r\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { startWith } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'sd-table-filter',\r\n templateUrl: './table-filter.component.html',\r\n styleUrls: ['./table-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTableFilter implements AfterViewInit, OnDestroy {\r\n @ViewChild(SdPopupFilter) popupFilter: SdPopupFilter;\r\n filter: Readonly<SdTableOptionFilter>;\r\n @Input('filter') set _filter(filter: SdTableOptionFilter) {\r\n this.filter = filter;\r\n }\r\n @Input() columns: SdTableColumn[] = [];\r\n externalFilters: SdTableExternalFilter[] = [];\r\n @Input('externalFilters') set _externalFilters(value: SdTableExternalFilter[]) {\r\n this.externalFilters = value || [];\r\n }\r\n @Input() filterDefs: SdTableFilterDefDirective[] = [];\r\n filterRegister: SdTableFilterRegister;\r\n @Input('filterRegister') set _filterRegister(value: SdTableFilterRegister) {\r\n this.filterRegister = value;\r\n this.filterRegisterChange.next(this.filterRegister);\r\n }\r\n filterRegisterChange = new BehaviorSubject<SdTableFilterRegister>(null);\r\n\r\n filterDef: any = {};\r\n inlineFilterDef: Record<string, boolean> = {};\r\n columnFilter: any = {};\r\n inlineColumn: Record<string, boolean> = {};\r\n externalFilter: any = {};\r\n inlineExternal: Record<string, boolean> = {};\r\n isMobileOrTablet: boolean;\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(private ref: ChangeDetectorRef, private deviceService: DeviceDetectorService) {\r\n this.isMobileOrTablet = !this.deviceService.isDesktop();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.filterRegisterChange.pipe(startWith(this.filterRegister)).subscribe(filterRegister => {\r\n if (this.filterRegister) {\r\n this.#subscription.add(\r\n this.filterRegister.configuration.observer.subscribe(configuration => {\r\n const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;\r\n this.inlineColumn = inlineColumn;\r\n this.inlineExternal = inlineExternal;\r\n this.inlineFilterDef = inlineFilterDef;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.filterRegister.value.observer.subscribe(value => {\r\n const { columnFilter, externalFilter, filterDef } = value;\r\n this.columnFilter = columnFilter;\r\n this.externalFilter = externalFilter;\r\n this.filterDef = filterDef;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onFilter = (item?: SdTableColumn | SdTableExternalFilter) => {\r\n this.filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n });\r\n };\r\n\r\n updateFilter = () => {\r\n this.filterRegister.value.set({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n notReload: true\r\n });\r\n };\r\n\r\n open = () => {\r\n this.popupFilter.open();\r\n };\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableExpandDef]'\r\n})\r\nexport class SdMaterialSubInformationDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdTableFooterDef]'\r\n})\r\nexport class SdMaterialFooterDefDirective {\r\n @Input() sdTableFooterDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSetting, SdSettingService } from '@sd-angular/core/setting';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport {\r\n SdColumnConfiguration,\r\n SdTableConfiguration,\r\n SdTableConfigurationResult,\r\n} from '../models/table-option-config.model';\r\nimport { TABLE_CONFIG, ISdTableConfiguration } from '../models/table-configuration.model';\r\n\r\n@Injectable()\r\nexport class SdTableConfigurationService {\r\n #COLUMNS = {\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup',\r\n };\r\n #prefix = 'c9e94836-6ace-4aeb-b148-4f0be63589ee';\r\n constructor(\r\n private settingService: SdSettingService,\r\n @Inject(TABLE_CONFIG) @Optional() public gridMaterialConfiguration: ISdTableConfiguration\r\n ) { }\r\n\r\n #getSetting = (option: SdTableOption): SdSetting<SdTableConfiguration> => {\r\n // Nếu không có key thì không lấy được setting\r\n if (!option?.key) {\r\n return null;\r\n }\r\n // Key của setting là tổ hợp từ key truyền vào và prefix để tránh chung key với các tính năng khác cũng dùng key trong core table\r\n return this.settingService.create<SdTableConfiguration>(\r\n { prefix: this.#prefix, key: option.key },\r\n {\r\n default: this.#default(option),\r\n }\r\n );\r\n };\r\n\r\n loadConfiguration = (option: SdTableOption) => {\r\n // Nếu không có key thì trả về thông tin mặc định\r\n if (!option?.key) {\r\n return this.#default(option);\r\n }\r\n const setting = this.#getSetting(option);\r\n return setting.get();\r\n };\r\n\r\n loadConfigurationResult = (option: SdTableOption, configuration: SdTableConfiguration) => {\r\n const result: SdTableConfigurationResult = {\r\n column: {},\r\n fixedColumn: {},\r\n firstColumns: [],\r\n secondColumns: [],\r\n firstHeaders: [],\r\n secondHeaders: [],\r\n displayedColumns: [],\r\n displayedFooters: [],\r\n multipleHeader: false,\r\n };\r\n const { selector, commands, group } = option || {};\r\n if (selector?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (commands?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.COMMAND);\r\n result.displayedColumns.push(this.#COLUMNS.COMMAND);\r\n }\r\n if (group?.fields?.length) {\r\n result.firstHeaders.push(this.#COLUMNS.GROUP);\r\n result.displayedColumns.push(this.#COLUMNS.GROUP);\r\n }\r\n configuration?.columns\r\n ?.filter(col => !col.invisible)\r\n .forEach(col => {\r\n // Kiểm tra column trong config có còn được khai báo trong option\r\n // Nếu không thì ẩn column đó đi\r\n const column = option?.columns.find(e => e.field === col.origin.field);\r\n if (column) {\r\n result.column[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n if (col.fixed) {\r\n result.fixedColumn[col.origin.field] = {\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n };\r\n }\r\n result.firstColumns.push({\r\n ...column,\r\n title: col.title || col.origin.title,\r\n width: col.width || col.origin.width,\r\n });\r\n result.firstHeaders.push(col.origin.field);\r\n result.displayedColumns.push(col.origin.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n }\r\n });\r\n // Nếu có thêm các column mới, chèn các column đó vào cuối\r\n option?.columns?.filter(column=> !configuration?.columns?.some(e=>e.origin.field === column.field))\r\n .forEach(column =>{\r\n result.firstColumns.push({\r\n ...column,\r\n title: column.title,\r\n width: column.width,\r\n });\r\n result.firstHeaders.push(column.field);\r\n result.displayedColumns.push(column.field);\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n result.secondColumns.push(childColumn);\r\n result.secondHeaders.push(childColumn.field);\r\n result.displayedColumns.push(childColumn.field);\r\n });\r\n }\r\n })\r\n if (option.expand) {\r\n result.firstHeaders.push(this.#COLUMNS.SUBINFORMATION);\r\n result.displayedColumns.push(this.#COLUMNS.SUBINFORMATION);\r\n }\r\n result.multipleHeader = result.secondHeaders.length > 0;\r\n // Sub infomation không thể có footer\r\n result.displayedFooters = result.displayedColumns.filter(val => val !== this.#COLUMNS.SUBINFORMATION);\r\n return result;\r\n };\r\n\r\n init = (gridOption: SdTableOption) => {\r\n return this.#getSetting(gridOption);\r\n };\r\n\r\n #default = (gridOption: SdTableOption): SdTableConfiguration => {\r\n const columns: SdColumnConfiguration[] =\r\n gridOption?.columns\r\n ?.filter(e => !e.hidden)\r\n .map(e => ({\r\n origin: {\r\n field: e.field,\r\n title: e.title,\r\n width: e.width,\r\n invisible: e.invisible,\r\n },\r\n invisible: e.invisible,\r\n fixed: false,\r\n })) || [];\r\n return {\r\n columns,\r\n };\r\n };\r\n}\r\n","import * as hash from 'object-hash';\r\nimport { SdTableColumn } from './table-column.model';\r\nimport { SdBadgeColor } from '@sd-angular/core/badge';\r\nexport interface SdTableMetaSelector {\r\n selectable?: boolean;\r\n isSelected?: boolean;\r\n actions?: string[];\r\n}\r\n\r\nexport interface SdTableMetaExpand {\r\n isExpanded?: boolean;\r\n isExpanding?: boolean;\r\n data?: any;\r\n}\r\n\r\nexport interface SdTableDisplay {\r\n tooltip: string;\r\n badge: {\r\n type: 'round' | 'circle' | 'icon';\r\n color: SdBadgeColor;\r\n icon: string;\r\n };\r\n cellStyle: Record<string, string>;\r\n data: string;\r\n isHtml: boolean;\r\n click: () => void;\r\n}\r\n\r\nexport interface SdTableMeta<T> {\r\n id?: string;\r\n display: Record<string, SdTableDisplay>;\r\n selector?: SdTableMetaSelector;\r\n expand?: SdTableMetaExpand;\r\n group?: {\r\n htmlTemplate?: string;\r\n items?: SdTableItem<T>[];\r\n };\r\n}\r\n\r\nexport interface SdTableItem<T = any> {\r\n meta: SdTableMeta<T>;\r\n data: T;\r\n}\r\n\r\nexport const MapToSdTableItem = <T = any>(item: T): SdTableItem<T> => ({\r\n data: item,\r\n meta: {\r\n id: hash(item),\r\n display: {},\r\n expand: {\r\n isExpanding: false,\r\n isExpanded: false,\r\n },\r\n group: {},\r\n selector: { actions: [], isSelected: false, selectable: false },\r\n },\r\n});\r\n","import { Injectable } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSettingService } from '@sd-angular/core/setting';\r\nimport {\r\n SdTableExternalFilter,\r\n SdTableFilterConfiguration,\r\n SdTableOptionFilter,\r\n SdTableFilterRegister,\r\n SdTableFilterValue,\r\n} from './table-filter.model';\r\nimport { SdFilterOperator, SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { map, startWith } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class SdTableFilterService {\r\n #filterConfiguration = 'GRID-FILTER-CONFIGURATION';\r\n #filterValue = 'GRID-FILTER-VALUE';\r\n #cache: Record<string, SdTableFilterRegister> = {};\r\n constructor(private settingService: SdSettingService) {}\r\n register = (\r\n filter: SdTableOptionFilter,\r\n args: {\r\n id: string;\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string,SdFilterOperator>;\r\n }\r\n ) => {\r\n let cacheSession = false;\r\n \r\n const { id, columns, externalFilters } = args;\r\n const tempKey = hash({\r\n id,\r\n columns: columns?.map(e => e.field).filter(field => !!field) || [],\r\n externalFilters: externalFilters?.map(e => e.field).filter(field => !!field) || [],\r\n });\r\n const key = filter?.key || tempKey;\r\n if (!filter?.key) {\r\n cacheSession = true; // Nếu không có key thì chỉ lưu theo session\r\n }\r\n if (!this.#cache[key]) {\r\n // Setting của filter configuration\r\n const filterConfiguration = this.settingService.create<SdTableFilterConfiguration>(\r\n {\r\n prefix: this.#filterConfiguration,\r\n key,\r\n },\r\n {\r\n default: this.#defaultConfiguration(args),\r\n type: cacheSession ? 'session' : undefined,\r\n }\r\n );\r\n // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi\r\n filterConfiguration.set(this.#initConfiguration(args, filterConfiguration.get()));\r\n // Setting của filter value\r\n const filterValue = this.settingService.create<SdTableFilterValue>(\r\n {\r\n prefix: this.#filterValue,\r\n key: !filter?.cacheFilter ? tempKey : key,\r\n },\r\n {\r\n default: this.#defaultValue(args),\r\n type: cacheSession || !filter?.cacheFilter ? 'session' : undefined,\r\n }\r\n );\r\n // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi\r\n filterValue.set(this.#initValue(args, filterValue.get()));\r\n this.#cache[key] = {\r\n configuration: {\r\n get: (): SdTableFilterConfiguration => {\r\n return filterConfiguration.get();\r\n },\r\n set: (configuration: Partial<SdTableFilterConfiguration>): SdTableFilterConfiguration => {\r\n const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;\r\n filterConfiguration.set({\r\n inlineColumn,\r\n inlineExternal,\r\n inlineFilterDef,\r\n });\r\n return {\r\n inlineColumn,\r\n inlineExternal,\r\n inlineFilterDef,\r\n };\r\n },\r\n remove: () => {\r\n filterConfiguration.set(this.#defaultConfiguration(args));\r\n },\r\n observer: filterConfiguration.observer.pipe(\r\n startWith(filterConfiguration.get()),\r\n // Sử dụng mặc định nếu bị reset\r\n map(configuration => configuration || this.#defaultConfiguration(args))\r\n ),\r\n },\r\n value: {\r\n get: (): SdTableFilterValue => {\r\n return filterValue.get();\r\n },\r\n set: (value: Partial<SdTableFilterValue>): SdTableFilterValue => {\r\n const keys = Object.keys(value || {});\r\n const current = filterValue.get();\r\n const { columnOperator, columnFilter, externalFilter, filterDef, notReload } = current;\r\n const updatedFilter = {\r\n // Filter column\r\n columnOperator: keys.includes('columnOperator') ? value?.columnOperator || {} : columnOperator,\r\n columnFilter: keys.includes('columnFilter') ? value?.columnFilter || {} : columnFilter,\r\n // Filter external\r\n externalFilter: keys.includes('externalFilter') ? value?.externalFilter || {} : externalFilter,\r\n // Filter def\r\n filterDef: keys.includes('filterDef') ? value?.filterDef || {} : filterDef,\r\n // Force\r\n notReload: !!value?.notReload,\r\n };\r\n filterValue.set(updatedFilter);\r\n return updatedFilter;\r\n },\r\n remove: () => {\r\n filterValue.set(this.#defaultValue(args));\r\n },\r\n observer: filterValue.observer.pipe(\r\n startWith(filterValue.get()),\r\n // Sử dụng mặc định nếu bị reset\r\n map(value => value || this.#defaultValue(args))\r\n ),\r\n },\r\n };\r\n }\r\n return this.#cache[key];\r\n };\r\n\r\n #defaultConfiguration = (args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n }): SdTableFilterConfiguration => {\r\n const { columns, externalFilters, filterDefs } = args;\r\n const inlineColumn: Record<string, boolean> = {};\r\n const inlineExternal: Record<string, boolean> = {};\r\n const inlineFilterDef: Record<string, boolean> = {};\r\n // Filter column\r\n for (const item of columns || []) {\r\n inlineColumn[item.field] = item?.filter?.defaultShowing;\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n inlineExternal[item.field] = item?.defaultShowing;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n inlineFilterDef[item.sdTableFilterDef] = item?.defaultShowing;\r\n }\r\n return {\r\n // Filter column\r\n inlineColumn,\r\n // Filter external\r\n inlineExternal,\r\n // Filter def\r\n inlineFilterDef,\r\n };\r\n };\r\n\r\n #defaultValue = (args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string,SdFilterOperator>\r\n }): SdTableFilterValue => {\r\n const columnFilter: Record<string, any> = {};\r\n const externalFilter: Record<string, any> = {};\r\n const filterDef: Record<string, any> = {};\r\n const columnOperator:Record<string,SdFilterOperator> = args.columnOperator || {}\r\n const { columns, externalFilters, filterDefs } = args;\r\n // Filter column\r\n for (const item of columns || []) {\r\n columnFilter[item.field] = item?.filter?.default;\r\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default){\r\n columnOperator[item.field]=item.filter.operator.default;\r\n }\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n externalFilter[item.field] = item?.default;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n filterDef[item.sdTableFilterDef] = undefined;\r\n }\r\n\r\n\r\n return {\r\n // Filter column\r\n columnFilter,\r\n // Filter external\r\n externalFilter,\r\n // Filter def\r\n filterDef,\r\n // columnOperator\r\n columnOperator,\r\n };\r\n };\r\n\r\n #initConfiguration = (\r\n args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n },\r\n configuration: SdTableFilterConfiguration\r\n ): SdTableFilterConfiguration => {\r\n const { columns, externalFilters, filterDefs } = args;\r\n const inlineColumn: Record<string, boolean> = {};\r\n const inlineExternal: Record<string, boolean> = {};\r\n const inlineFilterDef: Record<string, boolean> = {};\r\n // Filter column\r\n for (const item of columns || []) {\r\n inlineColumn[item.field] = configuration?.inlineColumn?.[item.field] ?? item?.filter?.defaultShowing;\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n inlineExternal[item.field] = configuration?.inlineExternal?.[item.field] ?? item?.defaultShowing;\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n inlineFilterDef[item.sdTableFilterDef] = configuration?.inlineFilterDef?.[item.sdTableFilterDef] ?? item?.defaultShowing;\r\n }\r\n return {\r\n // Filter column\r\n inlineColumn,\r\n // Filter external\r\n inlineExternal,\r\n // Filter def\r\n inlineFilterDef,\r\n };\r\n };\r\n\r\n #initValue = (\r\n args: {\r\n columns: SdTableColumn[];\r\n externalFilters: SdTableExternalFilter[];\r\n filterDefs: SdTableFilterDefDirective[];\r\n columnOperator?:Record<string, SdFilterOperator>\r\n },\r\n value: SdTableFilterValue\r\n ): SdTableFilterValue => {\r\n const columnFilter: Record<string, any> = {};\r\n const externalFilter: Record<string, any> = {};\r\n const filterDef: Record<string, any> = {};\r\n const columnOperator:Record<string, SdFilterOperator> = args.columnOperator || {};\r\n const { columns, externalFilters, filterDefs} = args;\r\n // Filter column\r\n for (const item of columns || []) {\r\n columnFilter[item.field] = value?.columnFilter?.[item.field] ?? item?.filter?.default;\r\n if (item?.filter?.operator?.enable && item?.filter?.operator?.default){\r\n columnOperator[item.field]=item.filter.operator.default;\r\n }\r\n }\r\n // Filter external\r\n for (const item of externalFilters || []) {\r\n if (item.type === 'daterange') {\r\n externalFilter[item.field] = {\r\n from: value?.externalFilter?.[item.field]?.from ?? item.default?.from,\r\n to: value?.externalFilter?.[item.field]?.to ?? item.default?.to,\r\n };\r\n } else {\r\n externalFilter[item.field] = value?.externalFilter?.[item.field] ?? item?.default;\r\n }\r\n }\r\n // Filter def\r\n for (const item of filterDefs || []) {\r\n filterDef[item.sdTableFilterDef] = value?.filterDef?.[item.sdTableFilterDef] ?? undefined;\r\n }\r\n return {\r\n // Filter column\r\n columnFilter,\r\n // Filter external\r\n externalFilter,\r\n // Filter def\r\n filterDef,\r\n //column Operator\r\n columnOperator\r\n };\r\n };\r\n}\r\n","import { Component, OnInit, ViewChild, EventEmitter, ChangeDetectorRef, Input, HostListener } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableConfigurationResult, SdTableConfiguration } from '../../models/table-option-config.model';\r\nimport { SdTableConfigurationService } from '../../services/table-configuration.service';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdSetting } from '@sd-angular/core/setting';\r\n\r\n@Component({\r\n selector: 'sd-popup-configuration',\r\n templateUrl: './popup-configuration.component.html',\r\n styleUrls: ['./popup-configuration.component.scss'],\r\n})\r\nexport class SdPopupConfiguration implements OnInit {\r\n @Input() tableOption: SdTableOption;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('table') table: MatTable<SdTableColumn>;\r\n readonly changes = new EventEmitter<SdTableConfigurationResult>();\r\n #setting: SdSetting<SdTableConfiguration>;\r\n configuration: SdTableConfiguration;\r\n isCreatingColumn = false;\r\n selected: {\r\n [key: string]: boolean;\r\n } = {};\r\n disabledDrag = true;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private tableConfigurationService: SdTableConfigurationService\r\n ) {}\r\n\r\n ngOnInit() {}\r\n @HostListener('window:mouseup', ['$event'])\r\n mouseUp(event) {\r\n this.disabledDrag = true;\r\n }\r\n open = async () => {\r\n this.#setting = this.tableConfigurationService.init(this.tableOption);\r\n this.configuration = this.#setting.get();\r\n this.modal.open();\r\n };\r\n\r\n onSave = () => {\r\n this.#setting.set(this.configuration);\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n };\r\n\r\n onReset = async () => {\r\n this.notifyService.confirm('Xác nhận đưa tất cả thiết lập về mặc định').then(() => {\r\n this.#setting.remove();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n dropTable(event: CdkDragDrop<SdTableColumn[]>) {\r\n moveItemInArray(this.configuration.columns, event.previousIndex, event.currentIndex);\r\n this.table.renderRows();\r\n }\r\n\r\n handleMouseDown() {\r\n this.disabledDrag = false;\r\n }\r\n\r\n handleMouseUp() {\r\n this.disabledDrag = true;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n AfterViewInit,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n Input,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\n\r\nimport * as uuid from 'uuid';\r\n\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\n\r\nimport { SdLoadingService } from '@sd-angular/core/loading';\r\n\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport hash from 'object-hash';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdExportFile, SdExportService, SdExportColumn } from '@sd-angular/core/export';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdTableColumn, SdTableOption } from '../../models';\r\nimport { SdTableConfigurationResult } from '../../models/table-option-config.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdPopupExport implements OnInit, AfterViewInit {\r\n tableOption: SdTableOption;\r\n columns: SdExportColumn[] = [];\r\n templateName: string;\r\n enableCreating = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('listGroups') listGroups: MatSelectionList;\r\n\r\n selected: {\r\n [key: string]: boolean;\r\n } = {};\r\n files: SdExportFile[] = [];\r\n\r\n @Output() export = new EventEmitter<{ file: SdExportFile; columns: SdExportColumn[]; isCSV?: boolean }>();\r\n form = new FormGroup({});\r\n\r\n @Input('tableOption') set _tableOption(option: SdTableOption) {\r\n this.tableOption = option;\r\n this.columns = this.#getExportableColumns();\r\n }\r\n @Input() configuration: SdTableConfigurationResult;\r\n private get key(): string {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.tableOption?.export?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: this.tableOption?.export?.key,\r\n });\r\n }\r\n\r\n private get tableColumns() {\r\n const columns: SdExportColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width,\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExportColumn[] => {\r\n return [...this.tableColumns, ...this.additionalColumns];\r\n };\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {}\r\n\r\n ngOnInit() {}\r\n\r\n ngAfterViewInit() {}\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n this.loadFiles(null);\r\n this.selected = {};\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n };\r\n\r\n #getExportColumns = () => {\r\n if (this.configuration) {\r\n const columns = [...this.tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n return [...first, ...column.children];\r\n }, []);\r\n const results = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n };\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false,\r\n });\r\n };\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true,\r\n });\r\n };\r\n\r\n loadFiles = async (group: string = null) => {\r\n this.files = await this.exportService.filesInFolder({\r\n key: this.key,\r\n group,\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateTemplate({\r\n fileName: fileName || this.tableOption?.export?.fileName,\r\n columns: this.columns,\r\n sheets,\r\n });\r\n };\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n };\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption?.export?.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateUploadTemplate({\r\n key: this.key,\r\n template: {\r\n fileName: fileName || this.tableOption?.export?.fileName,\r\n columns: this.columns.filter(e => this.selected[e.field]),\r\n sheets,\r\n },\r\n });\r\n };\r\n\r\n onExport = (file: SdExportFile) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns,\r\n });\r\n this.ref.detectChanges();\r\n };\r\n\r\n uploadTemplate = async () => {\r\n const file = await this.exportService.uploadTemplate({\r\n key: this.key,\r\n });\r\n if (file) {\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n removeFile = (file: SdExportFile) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(() => {\r\n this.exportService.removeFile({\r\n key: this.key,\r\n fileName: file.fileName,\r\n });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n };\r\n\r\n createTemplate = async () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.notify.warning(`Vui lòng chọn cột dữ liệu để xuất`);\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n if (result?.filePath) {\r\n const file: SdExportFile = {\r\n filePath: result.filePath,\r\n fileName: result.fileName,\r\n };\r\n this.onExport(file);\r\n this.templateName = null;\r\n this.enableCreating = false;\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n };\r\n\r\n templateNameValidator = (val: string) => {\r\n const { translate } = this.translateService;\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return translate('Please enter your template name');\r\n }\r\n if (val.length > 50) {\r\n return translate('Template name is too long');\r\n }\r\n if (!regex.test(val)) {\r\n return translate('Template name only contains letters, numbers and spaces');\r\n }\r\n return null;\r\n };\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n AfterViewInit,\r\n Optional,\r\n Inject,\r\n ChangeDetectorRef,\r\n ContentChildren,\r\n QueryList,\r\n OnInit,\r\n OnDestroy,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTable } from '@angular/material/table';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport * as uuid from 'uuid';\r\nimport { SdTableFilterRegister, SdTableFilterRequest } from './services/table-filter/table-filter.model';\r\nimport { SdTableOption } from './models/table-option.model';\r\nimport { TABLE_CONFIG, DEFAULT_TABLE_CONFIG, ISdTableConfiguration } from './models/table-configuration.model';\r\nimport { Subscription, isObservable, Subject, combineLatest } from 'rxjs';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdFilterOperator, SdTableColumn, SdTableColumnLazyValues, SdTableColumnValues } from './models/table-column.model';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { SdTableFilter } from './components/table-filter/table-filter.component';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdExportColumn, SdExportFile, SdExportService } from '@sd-angular/core/export';\r\nimport { SdTableConfigurationResult } from './models/table-option-config.model';\r\nimport { SdTableConfigurationService } from './services/table-configuration.service';\r\nimport { SdTableOptionExportColumn } from './models/table-option-export.model';\r\nimport { SdQuickAction } from '@sd-angular/core/quick-action';\r\nimport { MapToSdTableItem, SdTableItem } from './models/table-item.model';\r\nimport { SdScrollDirective } from '@sd-angular/core/common';\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdPopupConfiguration } from './components/popup-configuration/popup-configuration.component';\r\nimport { SdLoadingService } from '@sd-angular/core/loading';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\n\r\n@Component({\r\n selector: 'sd-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [\r\n trigger('detailExpand', [\r\n state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),\r\n state('expanded', style({ height: '*', visibility: 'visible' })),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n ]),\r\n ],\r\n})\r\nexport class SdTable<T = any> implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(MatTable) table: MatTable<any>;\r\n @ViewChild(SdPopupConfiguration) popupConfiguration: SdPopupConfiguration;\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport: SdPopupExport;\r\n #gridId = uuid.v4();\r\n @ViewChild(SdScrollDirective) sdScroll: SdScrollDirective;\r\n filterRegister: SdTableFilterRegister;\r\n key = uuid.v4();\r\n @ViewChild(SdQuickAction) quickAction: SdQuickAction;\r\n @ViewChild(SdTableFilter) tableFilter: SdTableFilter;\r\n tableOption: SdTableOption<T>;\r\n configuration: SdTableConfigurationResult;\r\n @Input() set option(option: SdTableOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.tableOption = option;\r\n this.#loadCompleted = false;\r\n const setting = this.tableConfigurationService.init(this.tableOption);\r\n if (setting) {\r\n this.#subscription.add(\r\n setting.observer.pipe(startWith(setting.subject.getValue())).subscribe(() => {\r\n const configurationResult = this.tableConfigurationService.loadConfigurationResult(this.tableOption, setting.get());\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.loadingService.start();\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.loadingService.stop();\r\n this.ref.detectChanges();\r\n });\r\n })\r\n );\r\n } else {\r\n const configuration = this.tableConfigurationService.loadConfiguration(this.tableOption);\r\n const configurationResult = this.tableConfigurationService.loadConfigurationResult(this.tableOption, configuration);\r\n const displayColumns = configurationResult.displayedColumns || [];\r\n this.loadingService.start();\r\n this.ref.detectChanges();\r\n this.#loadValues(this.tableOption.columns.filter(column => displayColumns.includes(column.field)))\r\n .then(() => {\r\n this.configuration = configurationResult;\r\n this.#optionChanges.next(this.tableOption);\r\n })\r\n .finally(() => {\r\n this.loadingService.stop();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n }\r\n }\r\n #optionChanges = new Subject<SdTableOption>();\r\n\r\n #localItems: SdTableItem<T>[] = [];\r\n items: SdTableItem<T>[] = [];\r\n selectedTableItems: SdTableItem<T>[] = [];\r\n total: number;\r\n\r\n // Loading\r\n isLoading = false;\r\n\r\n // Paginate\r\n isHiddenPaginator = false;\r\n #paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(paginator: MatPaginator) {\r\n if (paginator && this.#paginator !== paginator) {\r\n this.#paginator = paginator;\r\n this.#subscription.add(\r\n paginator.page\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sorting\r\n #sort: MatSort;\r\n @ViewChild(MatSort) set sort(sort: MatSort) {\r\n if (sort && this.#sort !== sort) {\r\n this.#sort = sort;\r\n this.#subscription.add(\r\n sort.sortChange\r\n .pipe(\r\n map(() => {\r\n this.#reload.next({\r\n force: false,\r\n });\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective)\r\n sdSubInformation: SdMaterialSubInformationDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdTabelCellDefDirective) sdCellDefs = new QueryList<SdTabelCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdTabelCellDefDirective;\r\n } = {};\r\n\r\n // Footer Def\r\n @ContentChildren(SdMaterialFooterDefDirective) sdFooterDefs = new QueryList<SdMaterialFooterDefDirective>();\r\n footerDef: {\r\n [column: string]: SdMaterialFooterDefDirective;\r\n } = {};\r\n hasFooter = false;\r\n\r\n // Filter Def\r\n @ContentChildren(SdTableFilterDefDirective) sdFilterDefs = new QueryList<SdTableFilterDefDirective>();\r\n filterDefs: SdTableFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnOperator: Record<string, SdFilterOperator> = {};\r\n columnFilter: Record<string, any> = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<{\r\n force: boolean;\r\n }>();\r\n isExporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n #loadCompleted = false;\r\n cacheValues: Record<string, any[]> = {};\r\n #cacheObjValues: Record<string, Record<string, string>> = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n @Inject(TABLE_CONFIG)\r\n @Optional()\r\n public tableConfiguration: ISdTableConfiguration,\r\n private tableConfigurationService: SdTableConfigurationService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private gridFilterService: SdTableFilterService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.#reload\r\n .pipe(\r\n debounceTime(200),\r\n switchMap(async data => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || data.force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n )\r\n .subscribe(this.#render)\r\n );\r\n this.#subscription.add(this.sdCellDefs.changes.pipe(startWith([])).subscribe(this.#initCellDef));\r\n this.#subscription.add(this.sdFooterDefs.changes.pipe(startWith([])).subscribe(this.#initFooterDef));\r\n this.#subscription.add(this.sdFilterDefs.changes.pipe(startWith([])).subscribe(this.#initFilterDef));\r\n this.#subscription.add(\r\n combineLatest([\r\n this.#optionChanges.pipe(startWith(this.tableOption)),\r\n this.sdFilterDefs.changes.pipe(startWith(this.filterDefs)),\r\n ]).subscribe(() => {\r\n this.#loadFilterRegister();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#optionChanges.subscribe(() => {\r\n if (this.filterRegister) {\r\n this.#reload.next({\r\n force: true,\r\n });\r\n }\r\n })\r\n );\r\n this.ref.detectChanges();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #initCellDef = () => {\r\n this.cellDef = {};\r\n for (const cellDef of this.sdCellDefs || []) {\r\n if (cellDef.sdTableCellDef) {\r\n this.cellDef[cellDef.sdTableCellDef] = cellDef;\r\n }\r\n }\r\n };\r\n\r\n #initFilterDef = () => {\r\n this.filterDefs = [];\r\n for (const filterDef of this.sdFilterDefs) {\r\n this.filterDefs.push(filterDef);\r\n }\r\n };\r\n\r\n #initFooterDef = () => {\r\n // NOTE: ContentChildren nên subcribe trong AfterViewInit\r\n this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdTableFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdTableFooterDef] = footerDef;\r\n }\r\n }\r\n };\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter, filterDef } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n rawFilterDef: filterDef || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction || '',\r\n pageNumber,\r\n pageSize,\r\n isExported: true,\r\n };\r\n };\r\n\r\n #initConfiguration = (option: SdTableOption) => {\r\n // Init pagination\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.tableConfiguration?.paginate?.pageSize ?? DEFAULT_TABLE_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.tableConfiguration?.paginate?.pages ?? DEFAULT_TABLE_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? false,\r\n };\r\n for (const column of option.columns || []) {\r\n if (column.filter?.operator?.enable) {\r\n if (!column.filter?.operator?.list?.length) {\r\n if (column.type === 'string') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListString || [];\r\n }\r\n if (column.type === 'number') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListNumber || [];\r\n }\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListValues || [];\r\n }\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n column.filter.operator.list = this.tableConfiguration?.filter?.operator?.defaultListDate || [];\r\n }\r\n }\r\n\r\n this.columnOperator[column.field] = this.tableConfiguration?.filter?.operator?.defaultOperator?.[column.type] || undefined;\r\n if (column.filter.operator.default && column.filter.operator.list.some(el => el === column.filter.operator.default)) {\r\n this.columnOperator[column.field] = column.filter.operator.default;\r\n }\r\n }\r\n }\r\n return option;\r\n };\r\n\r\n #loadFilterRegister = () => {\r\n // Init filter\r\n if (this.tableOption) {\r\n if (!this.filterRegister) {\r\n this.filterRegister = this.gridFilterService.register(this.tableOption?.filter, {\r\n id: this.#gridId,\r\n columns: this.tableOption?.columns,\r\n externalFilters: this.tableOption?.filter?.externalFilters,\r\n filterDefs: this.filterDefs,\r\n columnOperator: this.columnOperator,\r\n });\r\n this.#subscription.add(\r\n this.filterRegister.value.observer\r\n .pipe(\r\n debounceTime(500),\r\n map(filterValue => {\r\n const { columnOperator, columnFilter, notReload } = filterValue;\r\n this.columnOperator = columnOperator || {};\r\n this.columnFilter = columnFilter;\r\n if (!notReload) {\r\n if (this.#paginator) {\r\n this.#paginator.pageIndex = 0;\r\n }\r\n this.#reload.next({\r\n force: false,\r\n });\r\n }\r\n })\r\n )\r\n .subscribe()\r\n );\r\n }\r\n }\r\n };\r\n\r\n #filterLocal = (localItems: SdTableItem<T>[], filterInfo: SdTableFilterRequest) => {\r\n const { columns } = this.tableOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(tableItem => {\r\n const item = tableItem.data;\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field as string] || '').toString().trim().toLowerCase();\r\n const columnValue: string = (item[field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue && type !== 'datetime' && type !== 'date' && type !== 'time') {\r\n return false;\r\n }\r\n if (type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (type === 'values' || type === 'lazy-values') {\r\n const columnType = column as SdTableColumnValues<T> | SdTableColumnLazyValues<T>;\r\n const isMultiple = ['MULTIPLE'].includes(columnType.option.selection);\r\n if (isMultiple) {\r\n const columnValues: string[] =\r\n (item[field] as any).map(i => (i[columnType.option.valueField] ?? '').toString().trim().toLowerCase()) ?? [];\r\n const filterValues: string[] = rawColumnFilter[field as string]?.map(v => (v ?? '').toString().trim().toLowerCase());\r\n if (filterValues?.length && filterValues.every(fv => !columnValues.includes(fv))) {\r\n return false;\r\n }\r\n } else {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'number') {\r\n const fValue = +filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '');\r\n const cValue = +columnValue;\r\n if (fValue || fValue === 0) {\r\n if (!cValue && cValue !== 0) {\r\n return false;\r\n }\r\n if (filterValue.indexOf('>=') > -1 && cValue < fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<=') > -1 && cValue > fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('<') > -1 && cValue >= fValue) {\r\n return false;\r\n } else if (filterValue.indexOf('>') > -1 && cValue <= fValue) {\r\n return false;\r\n } else if (cValue !== fValue) {\r\n return false;\r\n }\r\n }\r\n } else if (type === 'bool') {\r\n if (filterValue === '1' && columnValue !== '1' && columnValue !== 'true') {\r\n return false;\r\n } else if (filterValue === '0' && columnValue !== '0' && columnValue !== 'false') {\r\n return false;\r\n }\r\n } else if (type === 'datetime' || type === 'date' || type === 'time') {\r\n const from = rawColumnFilter[field]?.from ?? rawColumnFilter[field];\r\n const to = rawColumnFilter[field]?.to ?? rawColumnFilter[field];\r\n const fromDate = Date.begin(from);\r\n const toDate = Date.end(to);\r\n if (fromDate || toDate) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n\r\n const columnTime = new Date(columnValue).getTime();\r\n const fromDateTime = fromDate?.getTime() || null;\r\n const toDateTime = toDate?.getTime() || null;\r\n\r\n if (fromDateTime && fromDateTime > columnTime) {\r\n return false;\r\n }\r\n if (toDateTime && columnTime > toDateTime) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n // Sort\r\n if (orderBy && orderDirection) {\r\n const column = columns.find(e => e.field === orderBy);\r\n if (column) {\r\n const { type, field } = column;\r\n items.sort((tableItemCurrent, tableItemNext) => {\r\n const data = tableItemCurrent.data;\r\n const next = tableItemNext.data;\r\n if (type === 'number') {\r\n return (data[field as string] || 0) - (next[field as string] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date(data[field as string] || '').getTime();\r\n const d2 = new Date(data[field as string] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = (data[field] || '').toString();\r\n const s2 = (next[field] || '').toString();\r\n if (s1 > s2) {\r\n return 1;\r\n }\r\n if (s1 < s2) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n if (orderDirection === 'desc') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items: items.filter((item, index) => {\r\n return index >= pageNumber * pageSize && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length,\r\n };\r\n };\r\n\r\n #getFilter = (): SdTableFilterRequest => {\r\n const { columnOperator, columnFilter, externalFilter, filterDef } = this.filterRegister.value.get();\r\n return {\r\n columnOperator: columnOperator || {},\r\n rawColumnFilter: columnFilter || {},\r\n rawExternalFilter: externalFilter || {},\r\n rawFilterDef: filterDef || {},\r\n orderBy: this.#sort?.active || '',\r\n orderDirection: this.#sort?.direction || '',\r\n pageNumber: this.#paginator?.pageIndex || 0,\r\n pageSize: this.#paginator?.pageSize || this.tableOption?.paginate?.pageSize || 50,\r\n visibledColumns: [...(this.configuration?.firstColumns || []), ...(this.configuration?.secondColumns || [])].union('field')\r\n };\r\n };\r\n\r\n #load = async (filterReq: SdTableFilterRequest, force: boolean = true) => {\r\n this.isLoading = true;\r\n this.ref.detectChanges();\r\n if (this.tableOption.type === 'server') {\r\n const { items } = this.tableOption;\r\n const data = await items(filterReq).catch(err => {\r\n this.notifyService.notify.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return {\r\n items: [] as T[],\r\n total: 0,\r\n };\r\n });\r\n return {\r\n items: await this.#format(data?.items, this.tableOption.columns).finally(() => {\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n }),\r\n total: data?.total || 0,\r\n };\r\n }\r\n if (force) {\r\n const { items } = this.tableOption;\r\n const results = items();\r\n let data: T[] = [];\r\n if (results instanceof Promise) {\r\n data = await results.catch(err => {\r\n this.notifyService.notify.warning('Có lỗi xảy ra');\r\n console.error(err);\r\n return [];\r\n });\r\n } else {\r\n data = results;\r\n }\r\n if (!Array.isArray(data)) {\r\n this.notifyService.notify.warning('Dữ liệu không phải là một mảng');\r\n data = [];\r\n }\r\n this.#localItems = await this.#format(data, this.tableOption.columns);\r\n }\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n };\r\n\r\n #render = async (args: { items: SdTableItem<T>[]; total: number }) => {\r\n this.sdScroll?.scrollTop();\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n await this.tableOption?.reload?.onReload?.(this.items);\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n setTimeout(() => {\r\n this.table?.updateStickyColumnStyles();\r\n }, 0);\r\n };\r\n\r\n reload = async (force: boolean = true) => {\r\n this.tableFilter?.updateFilter?.();\r\n const data = await this.#load(this.#getFilter(), force);\r\n this.#render(data);\r\n };\r\n\r\n #exportedItems = async (pageNumber: number = 0, pageSize: number = 10000) => {\r\n if (this.tableOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.tableOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n if (Array.isArray(result)) {\r\n return result;\r\n }\r\n if (isObservable<any[]>(result)) {\r\n result = result.toPromise();\r\n }\r\n if (isObservable<{ items: any[]; total: number }>(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n const filterInfo = this.#filterExportInfo(pageNumber, pageSize);\r\n if (this.tableOption.type === 'server') {\r\n let result = this.tableOption.items(filterInfo);\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof this.tableOption.items === 'function') {\r\n const results = this.tableOption.items();\r\n if (results instanceof Promise) {\r\n exportedItems = await results;\r\n } else {\r\n exportedItems = results;\r\n }\r\n } else {\r\n exportedItems = this.tableOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterInfo);\r\n }\r\n }\r\n };\r\n\r\n #allColumns = (): SdTableColumn[] => {\r\n const columns: SdTableColumn[] = [];\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns;\r\n };\r\n\r\n #allExportedColumns = (): SdTableOptionExportColumn[] => {\r\n return this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n };\r\n\r\n onExport = async (args?: { file?: SdExportFile; columns?: SdExportColumn[]; isCSV?: boolean }) => {\r\n const { file, isCSV } = { ...args };\r\n try {\r\n let columns = this.#getExportColumns(args?.columns);\r\n const pageSize = this.tableOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.tableOption?.export?.batch || 1;\r\n let total = this.total;\r\n let pageNumber = 0;\r\n let exportItems = [];\r\n this.isExporting = true;\r\n const items: any[] = [];\r\n let promises: Promise<\r\n | any[]\r\n | {\r\n items: any[];\r\n total: number;\r\n }\r\n >[] = [];\r\n const handleData = async () => {\r\n const results = await Promise.all(promises);\r\n promises = [];\r\n exportItems = [];\r\n for (const result of results) {\r\n if ('items' in result) {\r\n exportItems = [...exportItems, ...result.items];\r\n total = result.total;\r\n } else {\r\n exportItems = [...exportItems, ...result];\r\n }\r\n }\r\n if (this.tableOption.export?.mapping) {\r\n const results = this.tableOption.export.mapping(exportItems);\r\n if (results instanceof Promise) {\r\n exportItems = await results;\r\n } else {\r\n exportItems = results;\r\n }\r\n }\r\n const totalPage = total / pageSize;\r\n const percent = Math.round(((pageNumber - 1) * 100.0) / totalPage);\r\n this.exportTitle = `Exporting...${percent}%`;\r\n const allColumns = this.#allColumns();\r\n const allExportedColumns = this.#allExportedColumns();\r\n for (const item of exportItems) {\r\n const obj: any = {};\r\n const handle = async (exportColumn: SdExportColumn) => {\r\n obj[exportColumn.field] = item[exportColumn.field];\r\n const column = allColumns.find(e => e.field === exportColumn.field);\r\n const exportedColumn = allExportedColumns.find(e => e.field === exportColumn.field);\r\n if (exportedColumn?.transform) {\r\n obj[exportedColumn.field] = exportedColumn.transform(item[exportedColumn.field], item);\r\n return;\r\n }\r\n if (!column) {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column?.children.forEach(childColumn => handle(childColumn));\r\n return;\r\n }\r\n if (!columns.some(e => e.field === column.field)) {\r\n return;\r\n }\r\n if (column.transform) {\r\n const transform = column.transform(item[column.field], item, {\r\n isExport: true,\r\n });\r\n if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\r\n obj[column.field] = obj[column.field] ?? '';\r\n } else if (item[column.field] === undefined || item[column.field] === null || item[column.field] === '') {\r\n obj[column.field] = '';\r\n } else if (column.type === 'string' || column.type === 'number') {\r\n // Nếu cell là string hoặc number thì gán bằng chính nó\r\n obj[column.field] = item[column.field];\r\n } else if (column.type === 'bool') {\r\n // Nếu là bool thì gán bằng giá trị trueValue và falseValue (nếu có), mặc định là TRUE/FALSE\r\n if (item[column.field]) {\r\n obj[column.field] = column.option?.displayOnTrue || 'True';\r\n } else if (obj[column.field] !== undefined && obj[column.field] !== null) {\r\n obj[column.field] = column.option?.displayOnFalse || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n let date = item[column.field];\r\n // Nếu là date thì convert theo đúng format ISO\r\n obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy');\r\n } else if (column.type === 'datetime') {\r\n let date = item[column.field];\r\n // Nếu là datetime thì convert theo đúng format\r\n obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n let date = item[column.field];\r\n // Nếu là time thì convert theo đúng format\r\n obj[column.field] = Date.toFormat(date, 'HH:mm');\r\n } else if (column.type === 'values' || column.type === 'lazy-values') {\r\n const value = item[column.field];\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, item);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField] || val)\r\n ?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n obj[column.field] = vals\r\n .map(val => this.#cacheObjValues[column.field]?.[val]?.[column.option.displayField] || val)\r\n ?.join(', ');\r\n }\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n };\r\n while (pageNumber * pageSize < total) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n if (file?.filePath) {\r\n await this.exportService.exportByTemplate({\r\n filePath: file.filePath,\r\n fileName: file.fileName,\r\n columns,\r\n items,\r\n });\r\n return;\r\n }\r\n if (isCSV) {\r\n await this.exportService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n });\r\n return;\r\n }\r\n const sheets: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[] = [];\r\n if (Array.isArray(this.tableOption?.export?.sheets)) {\r\n for (const sheet of this.tableOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields,\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n await this.exportService.export({\r\n columns,\r\n items,\r\n fileName: this.tableOption?.export?.fileName,\r\n sheets,\r\n });\r\n return;\r\n } finally {\r\n this.isExporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n };\r\n\r\n #getExportColumns = (columns?: SdExportColumn[]) => {\r\n let tableColumns: SdExportColumn[] = [];\r\n // Lấy column từ option\r\n this.tableOption.columns\r\n .filter(e => !e.export?.disabled)\r\n .forEach(column => {\r\n if (column.type === 'children') {\r\n column.children\r\n ?.filter(e => !e.export?.disabled)\r\n .forEach(childColumn => {\r\n tableColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n tableColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width,\r\n });\r\n });\r\n // Lấy columns từ configuration\r\n if (this.configuration) {\r\n const columns = [...tableColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdTableColumn[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.tableOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children') {\r\n return [...first, column];\r\n }\r\n const children = column.children;\r\n return [...first, ...children];\r\n }, []);\r\n tableColumns = displayColumns\r\n .map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field),\r\n }))\r\n .filter(e => !!e.data)\r\n .map(e => e.data);\r\n }\r\n // Chỉ lấy các columns được thiết lập\r\n const columnFields = columns?.map(e => e.field) || [];\r\n return [...tableColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])].filter(\r\n column => !columnFields?.length || columnFields.includes(column.field)\r\n );\r\n };\r\n\r\n exportExcel = () => {\r\n this.onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.onExport({ isCSV: true });\r\n };\r\n\r\n onFilterChange = () => {\r\n this.tableFilter?.updateFilter?.();\r\n this.filterRegister.value.set({\r\n columnOperator: this.columnOperator || {},\r\n columnFilter: this.columnFilter,\r\n });\r\n };\r\n\r\n onExpand = async (rowData: SdTableItem<T>) => {\r\n if (this.tableOption.expand?.always) {\r\n return;\r\n }\r\n if (rowData.meta.expand.isExpanding) {\r\n return;\r\n }\r\n if (rowData.meta.expand.isExpanded) {\r\n rowData.meta.expand.isExpanded = false;\r\n return;\r\n }\r\n const data = this.tableOption?.expand?.onExpand?.(rowData.data);\r\n if (!this.tableOption.expand?.multiple) {\r\n this.items.forEach(item => (item.meta.expand.isExpanding = item.meta.expand.isExpanded = false));\r\n }\r\n if (data instanceof Promise) {\r\n rowData.meta.expand.isExpanding = true;\r\n data\r\n .then(res => {\r\n rowData.meta.expand.data = res;\r\n rowData.meta.expand.isExpanded = true;\r\n })\r\n .finally(() => (rowData.meta.expand.isExpanding = false));\r\n } else {\r\n rowData.meta.expand.data = data;\r\n rowData.meta.expand.isExpanded = true;\r\n }\r\n };\r\n\r\n onSelect = (rowData: SdTableItem<T>) => {\r\n if (rowData.meta.group?.items?.length) {\r\n rowData.meta.group.items.forEach(e => (e.meta.selector.isSelected = rowData.meta.selector.isSelected));\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.tableOption.selector?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => (e.meta.selector.isSelected = false));\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.tableOption.selector?.onSelect?.(\r\n rowData.data,\r\n this.items.filter(e => e.meta.selector.isSelected).map(e => e.data)\r\n );\r\n this.isSelectAll = this.items.every(e => e.meta.selector.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n };\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.meta.selector.selectable && (!this.tableOption?.selector?.actions?.length || e.meta.selector.actions?.length)) {\r\n e.meta.selector.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.tableOption.selector?.onSelectAll?.(this.items.filter(e => e.meta.selector.isSelected).map(e => e.data));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n onClearSelection = (items?: SdTableItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => (e.meta.selector.isSelected = false));\r\n this.#updateSelectedItems();\r\n };\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedTableItems = this.items.filter(item => item.meta.selector.isSelected);\r\n this.ref.detectChanges();\r\n };\r\n\r\n clearFilter = () => {\r\n this.filterRegister.value.remove();\r\n };\r\n\r\n setFilter = (args: { columnFilter?: Record<string, any>; externalFilter?: Record<string, any>; filterDef?: Record<string, any> }) => {\r\n const { columnFilter, externalFilter, filterDef } = args || {};\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n this.filterRegister.value.set({\r\n columnFilter,\r\n externalFilter,\r\n filterDef,\r\n });\r\n };\r\n\r\n get dataItems(): T[] {\r\n return this.items.map(item => item.data);\r\n }\r\n\r\n get selectedItems(): T[] {\r\n return this.selectedTableItems.map(item => item.data);\r\n }\r\n\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n #loadValues = async (columns: SdTableColumn[]) => {\r\n const promises: Promise<{\r\n key: string;\r\n valueField: string;\r\n displayField: string;\r\n data: any[];\r\n }>[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'values' && !this.cacheValues[column.field]) {\r\n if (typeof column.option.items === 'function') {\r\n promises.push(\r\n column.option\r\n .items()\r\n .then(data => ({\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: Array.isArray(data) ? data : [],\r\n }))\r\n .catch(err => {\r\n console.error(err);\r\n return {\r\n key: column.field,\r\n valueField: column.option.valueField,\r\n displayField: column.option.displayField,\r\n data: [],\r\n };\r\n })\r\n );\r\n } else {\r\n this.cacheValues[column.field] = column.option.items.map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n this.#cacheObjValues[column.field] = Array.toObject(this.cacheValues[column.field], column.option.valueField);\r\n }\r\n }\r\n }\r\n if (promises.length) {\r\n const results = await Promise.all(promises);\r\n for (const result of results) {\r\n this.cacheValues[result.key] = result.data.map(e => ({\r\n [result.valueField]: e?.[result.valueField],\r\n [result.displayField]: e?.[result.displayField],\r\n }));\r\n this.#cacheObjValues[result.key] = Array.toObject(this.cacheValues[result.key], result.valueField);\r\n }\r\n }\r\n };\r\n\r\n #format = async <T = any>(rawItems: T[], columns: SdTableColumn[]) => {\r\n const items = rawItems.map(MapToSdTableItem);\r\n for (const column of columns) {\r\n // Clickable\r\n const { field, cellStyle, click, tooltip, htmlTemplate, transform } = column;\r\n if (!transform && !htmlTemplate && column.type === 'lazy-values' && typeof column.option.views === 'function') {\r\n const {\r\n option: { views, mapValue },\r\n } = column;\r\n this.#cacheObjValues[field] = this.#cacheObjValues[field] || {};\r\n const values = items\r\n .map(item => {\r\n if (typeof mapValue === 'function') {\r\n return mapValue(item.data?.[field], item.data);\r\n }\r\n return item.data?.[field];\r\n })\r\n .filter(val => !!val?.toString())\r\n .reduce<string[]>((current, next) => [...current, ...(Array.isArray(next) ? next : [next])], [])\r\n .filter(val => !Object.keys(this.#cacheObjValues[field]).includes(val))\r\n .union();\r\n\r\n if (values.length) {\r\n const lazyItems: any[] = (\r\n await views(values).catch(err => {\r\n console.error(err);\r\n return [];\r\n })\r\n )\r\n .filter(item => values.includes(item?.[column.option.valueField]))\r\n .map(e => ({\r\n [column.option.valueField]: e?.[column.option.valueField],\r\n [column.option.displayField]: e?.[column.option.displayField],\r\n }));\r\n Object.assign(this.#cacheObjValues[field], Array.toObject(lazyItems, column.option.valueField) || {});\r\n }\r\n }\r\n for (const item of items) {\r\n const rowData = item.data;\r\n const value = rowData?.[field];\r\n item.meta.display[field] = {\r\n badge: undefined,\r\n cellStyle: column.type === 'number' ? { 'text-align': 'right!important' } : undefined,\r\n data: value,\r\n isHtml: false,\r\n tooltip: typeof tooltip === 'function' ? tooltip(value, rowData) : undefined,\r\n click: typeof click === 'function' ? () => click(value, rowData) : undefined,\r\n };\r\n const display = item.meta.display[field];\r\n // Display\r\n if (typeof htmlTemplate === 'function') {\r\n display.isHtml = true;\r\n display.data = htmlTemplate(value, rowData);\r\n } else if (typeof transform === 'function') {\r\n const newValue = transform(value, rowData);\r\n if (newValue instanceof Promise) {\r\n display.data = await newValue;\r\n } else {\r\n display.data = newValue;\r\n }\r\n } else {\r\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'time') {\r\n const date = Date.toFormat(value, 'dd/MM/yyyy');\r\n let time = Date.toFormat(value, 'HH:mm:ss');\r\n if (time?.endsWith('00')) {\r\n time = Date.toFormat(value, 'HH:mm');\r\n }\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n if (column.type === 'datetime') {\r\n display.isHtml = true;\r\n display.data = `<span class=\"d-block T14R text-black400\">${time}</span><span class=\"d-block T14R\">${date}</span>`;\r\n } else {\r\n display.data = date;\r\n }\r\n }\r\n if (column.type === 'time') {\r\n display.data = time;\r\n }\r\n }\r\n if (column.type === 'values' || column.type === 'lazy-values') {\r\n if (column.type === 'lazy-values' && typeof column.option.mapValue === 'function') {\r\n const val = column.option.mapValue(value, rowData);\r\n const vals = (Array.isArray(val) ? val : [val]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField] || val)?.join(', ');\r\n } else {\r\n const vals = (Array.isArray(value) ? value : [value]).filter(e => !!e?.toString());\r\n display.data = vals.map(val => this.#cacheObjValues[field]?.[val]?.[column.option.displayField] || val)?.join(', ');\r\n }\r\n }\r\n if (column.type === 'number' && Number.isNumber(value)) {\r\n display.data = Number.toVNCurrency(value);\r\n }\r\n if (column.type === 'bool') {\r\n const { option } = column;\r\n if (value !== undefined && value !== null && value !== '') {\r\n display.data = value === true ? option?.displayOnTrue || 'True' : option?.displayOnFalse || 'False';\r\n } else {\r\n display.data = null;\r\n }\r\n }\r\n // Badge\r\n if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n display.badge = {\r\n type: !column?.badgeType ? 'icon' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column.badgeIcon?.(value, rowData),\r\n };\r\n } else if (column.type === 'bool') {\r\n display.badge = {\r\n type: 'circle',\r\n color: !!value ? 'success' : 'danger',\r\n icon: null,\r\n };\r\n }\r\n }\r\n }\r\n }\r\n return items;\r\n };\r\n\r\n onOperatorChange = (column: SdTableColumn, operator: SdFilterOperator) => {\r\n this.tableOption?.filter?.operatorChange?.(column, operator);\r\n };\r\n\r\n trackBy = (index: number, item: SdTableItem) => {\r\n return item.meta.id;\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand, SdTableCommandNormal } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class SdCommandFilterPipe implements PipeTransform {\r\n async transform(item: SdTableItem, commands: SdTableCommand[]): Promise<SdTableCommand[]> {\r\n const results: SdTableCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n let flag = false;\r\n const { hidden } = command;\r\n if (hidden === undefined) {\r\n flag = true;\r\n } else if (typeof (hidden) === 'boolean') {\r\n if (!hidden) {\r\n flag = true;\r\n }\r\n } else {\r\n const isHidden = hidden(item.data);\r\n if (isHidden instanceof Promise) {\r\n if (!await isHidden) {\r\n flag = true;\r\n }\r\n } else {\r\n if (!isHidden) {\r\n flag = true;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n if ('children' in command) {\r\n const children: SdTableCommandNormal[] = [];\r\n for (const childCommand of command.children) {\r\n const { hidden } = childCommand;\r\n if (hidden === undefined) {\r\n children.push(childCommand);\r\n } else if (typeof (hidden) === 'boolean') {\r\n if (!hidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n const isHidden = hidden(item.data);\r\n if (isHidden instanceof Promise) {\r\n if (!await isHidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n if (!isHidden) {\r\n children.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n if (children.length > 0) {\r\n results.push({ ...command, children });\r\n }\r\n } else {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandDisable',\r\n})\r\nexport class SdCommandDisablePipe implements PipeTransform {\r\n transform(item: SdTableItem, command: SdTableCommand): boolean {\r\n if ('disabled' in command) {\r\n const { disabled } = command;\r\n if (typeof disabled === 'boolean') {\r\n return disabled;\r\n }\r\n return disabled(item.data);\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class SdCommandIconPipe implements PipeTransform {\r\n transform(command: SdTableCommand, item: SdTableItem): string {\r\n if (!command?.icon) {\r\n return undefined;\r\n }\r\n if (typeof (command.icon) === 'string') {\r\n return command.icon;\r\n }\r\n return command.icon(item.data);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableCommand } from '../models/table-command.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class SdCommandTitlePipe implements PipeTransform {\r\n transform(command: SdTableCommand, item: SdTableItem): string {\r\n if (!command?.title) {\r\n return undefined;\r\n }\r\n if (typeof (command.title) === 'string') {\r\n return command.title;\r\n }\r\n return command.title(item.data);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-view',\r\n templateUrl: './desktop-cell-view.component.html',\r\n styleUrls: ['./desktop-cell-view.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCellView {\r\n @Input() column: SdTableColumn;\r\n @Input() item: SdTableItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableExternalFilter } from '../services/table-filter/table-filter.model';\r\n@Pipe({\r\n name: 'sdFilterExternal'\r\n})\r\nexport class SdFilterExternalPipe implements PipeTransform {\r\n transform(externalFilters: SdTableExternalFilter[], field?: string): SdTableExternalFilter[] {\r\n const results: SdTableExternalFilter[] = [];\r\n if (!externalFilters) {\r\n return results;\r\n }\r\n for (const filter of externalFilters) {\r\n results.push(filter);\r\n }\r\n return results.filter(e => !field || e.field === field);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableColumn } from '../models/table-column.model';\r\n@Pipe({\r\n name: 'sdFilterColumn'\r\n})\r\nexport class SdFilterColumnPipe implements PipeTransform {\r\n transform(columns: SdTableColumn[], field?: string): SdTableColumn[] {\r\n const results: SdTableColumn[] = [];\r\n if (!columns) {\r\n return results;\r\n }\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const columnChildren of column?.children) {\r\n if (!columnChildren.filter?.disabled) {\r\n results.push(columnChildren);\r\n }\r\n }\r\n continue;\r\n }\r\n if (!column.filter?.disabled) {\r\n results.push(column);\r\n }\r\n }\r\n return results.filter(e => !field || e.field === field);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTableCommand } from '../../models/table-command.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-command',\r\n templateUrl: './desktop-command.component.html',\r\n styleUrls: ['./desktop-command.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCommand {\r\n @Input() item: SdTableItem;\r\n @Input() commands: SdTableCommand[] = [];\r\n constructor() {\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableColumn } from '../models/table-column.model';\r\n@Pipe({\r\n name: 'columnTooltip'\r\n})\r\nexport class SdColumnTooltipPipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: any, rowData: any, column: SdTableColumn): string {\r\n if (column?.tooltip) {\r\n return column.tooltip(value, rowData);\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableItem } from '../models/table-item.model';\r\nimport { SdTableAction, SdTableActionNormal } from '../models/table-option-selector.model';\r\n@Pipe({\r\n name: 'selectionActionFilter'\r\n})\r\nexport class SdSelectionActionFilterPipe implements PipeTransform {\r\n #convert = (action: SdTableAction): SdTableAction => {\r\n if ('children' in action) {\r\n return {\r\n title: action.title,\r\n icon: action.icon,\r\n fontSet: action.fontSet,\r\n tooltip: action.tooltip,\r\n color: action.color,\r\n type: action.type,\r\n children: action.children.map(e => ({\r\n title: e.title,\r\n icon: e.icon,\r\n color: action.color,\r\n type: action.type,\r\n fontSet: e.fontSet,\r\n tooltip: e.tooltip,\r\n click: e.click\r\n }))\r\n };\r\n }\r\n return {\r\n title: action.title,\r\n icon: action.icon,\r\n color: action.color,\r\n type: action.type,\r\n fontSet: action.fontSet,\r\n tooltip: action.tooltip,\r\n click: action.click\r\n };\r\n\r\n }\r\n transform = (selectedItems: SdTableItem[], actions: SdTableAction[]): SdTableAction[] => {\r\n const results: SdTableAction[] = [];\r\n if (!actions?.length || !selectedItems?.length) {\r\n return [];\r\n }\r\n for (const action of actions) {\r\n if ('children' in action) {\r\n const children: SdTableActionNormal[] = [];\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n children.push(childAction);\r\n }\r\n }\r\n if (children.length > 0) {\r\n results.push({ ...action, children });\r\n }\r\n } else {\r\n const key = hash(action);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n results.push(action);\r\n }\r\n }\r\n }\r\n return results.map(result => this.#convert(result));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'selectionDisable'\r\n})\r\nexport class SdSelectionDisablePipe implements PipeTransform {\r\n transform = (selectedItems: SdTableItem[], rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\r\n const { disabled, actions } = selection;\r\n if (!actions?.length) {\r\n if (!disabled) {\r\n rowData.meta.selector.selectable = true;\r\n return false;\r\n }\r\n rowData.meta.selector.selectable = !disabled(rowData, selectedItems);\r\n return !rowData.meta.selector.selectable;\r\n }\r\n // Lọc các action theo selectedItems hiện tại\r\n const availableActions = actions.filter(action => {\r\n if ('children' in action) {\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.meta.selector.actions.includes(key))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n const key = hash(action);\r\n return selectedItems.every(e => e.meta.selector.actions.includes(key));\r\n }\r\n });\r\n // Kiểm tra rowData có action nào thỏa hay ko, nếu ko thì disabled\r\n for (const action of availableActions) {\r\n if ('children' in action) {\r\n for (const childAction of action.children) {\r\n if(rowData.meta.selector.actions.includes(hash(childAction))) {\r\n return false;\r\n }\r\n }\r\n } else {\r\n if(rowData.meta.selector.actions.includes(hash(action))) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'selectionVisibleSelectAll'\r\n})\r\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\r\n transform = async (items: SdTableItem[], selection: SdTableOptionSelector): Promise<boolean> => {\r\n const { actions } = selection;\r\n if (!actions?.length) {\r\n return true;\r\n }\r\n if (!items.length) {\r\n return false;\r\n }\r\n if (actions.some(e => ('children' in e && e.children.some(e1 => e1.isGrouped)) || e.isGrouped)) {\r\n return false;\r\n }\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n const first = items.find(t => t.meta.selector.actions?.length);\r\n if (first) {\r\n for (const action of first.meta.selector.actions) {\r\n if (items.filter(t => t.meta.selector.actions?.length).every(e => e.meta.selector.actions.includes(action))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdTabelCellDefDirective } from '../../directives/sd-table-cell-def.directive';\r\nimport { SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell',\r\n templateUrl: './desktop-cell.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCell {\r\n @Input() value: any;\r\n @Input() column: SdTableColumn;\r\n @Input() item: SdTableItem;\r\n @Input() cellDef: {\r\n [column: string]: SdTabelCellDefDirective\r\n } = {};\r\n constructor(\r\n ) { }\r\n}\r\n","import { SdBadgeColor } from '@sd-angular/core/badge';\r\nimport { SdTabelCellDefDirective } from '../directives/sd-table-cell-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nexport type SdTableColumn<T = any> =\r\n | SdTableColumnText<T>\r\n | SdTableColumnNumber<T>\r\n | SdTableColumnBool<T>\r\n | SdTableColumnDate<T>\r\n | SdTableColumnValues<T>\r\n | SdTableColumnLazyValues<T>\r\n | SdTableColumnChildren<T>;\r\n\r\nexport type SdFilterOperator =\r\n | 'EQUAL'\r\n | 'NOT_EQUAL'\r\n | 'CONTAIN'\r\n | 'NOT_CONTAIN'\r\n | 'IN'\r\n | 'NOT_IN'\r\n | 'START_WITH'\r\n | 'END_WITH'\r\n | 'GREATER_THAN'\r\n | 'LESS_THAN'\r\n | 'GREATER_OR_EQUAL'\r\n | 'LESS_OR_EQUAL'\r\n | 'NULL'\r\n | 'NOT_NULL';\r\n\r\nexport const SdFilterOperators: { value: SdFilterOperator; symbol?: string; display: string }[] = [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'GREATER_THAN',\r\n symbol: '>',\r\n display: 'Lớn hơn',\r\n },\r\n {\r\n value: 'LESS_THAN',\r\n symbol: '<',\r\n display: 'Nhỏ hơn',\r\n },\r\n {\r\n value: 'GREATER_OR_EQUAL',\r\n symbol: '≥',\r\n display: 'Lớn hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'LESS_OR_EQUAL',\r\n symbol: '≤',\r\n display: 'Nhỏ hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'CONTAIN',\r\n symbol: 'join_inner',\r\n display: 'Chứa',\r\n },\r\n {\r\n value: 'NOT_CONTAIN',\r\n symbol: 'join',\r\n display: 'Không chứa',\r\n },\r\n {\r\n value: 'START_WITH',\r\n symbol: 'line_start_circle',\r\n display: 'Bắt đầu bởi',\r\n },\r\n {\r\n value: 'END_WITH',\r\n symbol: 'line_end_circle',\r\n display: 'Kết thúc bởi',\r\n },\r\n {\r\n value: 'IN',\r\n symbol: 'checklist_rtl',\r\n display: 'Nằm trong',\r\n },\r\n {\r\n value: 'NOT_IN',\r\n symbol: 'event_list',\r\n display: 'Không nằm trong',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n];\r\n\r\nexport type SdTableColumnTransformFunc<T = any> = (\r\n value: any,\r\n rowData: T,\r\n args?: {\r\n isExport?: boolean;\r\n }\r\n) => string | Promise<string>;\r\n\r\ninterface SdTableColumnBase<T = any> {\r\n field: Extract<keyof T, string>;\r\n title: string;\r\n titleHtml?: string;\r\n description?: string;\r\n width?: string;\r\n hidden?: boolean;\r\n invisible?: boolean;\r\n fixed?: boolean;\r\n cellStyle?: (value: any, rowData: T) => Record<string, string>;\r\n htmlTemplate?: (value: any, rowData: T) => string;\r\n transform?: SdTableColumnTransformFunc<T>;\r\n tooltip?: (value: any, rowData: T) => string;\r\n click?: (value: any, rowData: T) => void;\r\n sortable?: boolean;\r\n filter?: {\r\n disabled?: boolean;\r\n defaultShowing?: boolean;\r\n default?: any;\r\n // Chỉ dành cho filter inline column\r\n operator?: {\r\n default?:SdFilterOperator;\r\n enable?: boolean;\r\n list?: SdFilterOperator[];\r\n };\r\n };\r\n export?: {\r\n disabled?: boolean;\r\n };\r\n cellDef?: TemplateRef<SdTabelCellDefDirective>;\r\n}\r\n\r\ninterface SdTableColumnText<T = any> extends SdTableColumnBase<T> {\r\n type: 'string';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'circle' | 'icon';\r\n}\r\n\r\ninterface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {\r\n type: 'number';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'circle' | 'icon';\r\n}\r\n\r\ninterface SdTableColumnBool<T = any> extends SdTableColumnBase<T> {\r\n type: 'bool';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n}\r\n\r\ninterface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {\r\n type: 'date' | 'datetime' | 'time';\r\n filter?: SdTableColumnBase['filter'] & { useFilterDate?: boolean }\r\n}\r\n\r\nexport interface SdTableColumnValues<T = any> extends SdTableColumnBase<T> {\r\n type: 'values';\r\n badge?: (value: any, rowData: T) => SdBadgeColor;\r\n badgeIcon?: (value: any, rowData: T) => string;\r\n badgeType?: 'icon' | 'circle' | 'round';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n}\r\n\r\nexport interface SdTableColumnLazyValues<T = any> extends SdTableColumnBase<T> {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: (searchText: string) => Promise<any[]>; // Filter\r\n // Nếu không có tranform hay htmlTemplate cần khai báo views\r\n views?: (values: string[]) => Promise<any[]>; // Hiển thị\r\n mapValue?: (value: any, rowData?: T) => string | string[]; // Một số trường hợp dữ liệu của field là object hoặc muốn value lấy dữ liệu khác thì sử dụng hàm này\r\n selection?: 'MULTIPLE';\r\n };\r\n}\r\n\r\ntype SdTableColumnNormal<T> = Exclude<SdTableColumn<T>, SdTableColumnChildren<T>>;\r\n\r\nexport interface SdTableColumnChildren<T = any> extends SdTableColumnBase<T> {\r\n type: 'children';\r\n children: SdTableColumnNormal<T>[];\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList } from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdFilterOperator, SdFilterOperators, SdTableColumn } from '../../models/table-column.model';\r\n\r\n@Component({\r\n selector: 'sd-column-inline-filter',\r\n templateUrl: './column-inline-filter.component.html',\r\n styleUrls: ['./column-inline-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdColumnInlineFilter implements OnInit {\r\n value: any;\r\n @Input('value') _value(value: any) {\r\n this.value = value;\r\n this.#valueChanges.next();\r\n }\r\n inlineSymbol: string = 'filter_alt';\r\n #inlineOperator: SdFilterOperator;\r\n @Input('inlineOperator') set _inlineOperator(inlineOperator: SdFilterOperator) {\r\n if (this.#inlineOperator !== inlineOperator) {\r\n this.#inlineOperator = inlineOperator;\r\n this.inlineSymbol = SdFilterOperators.find(e => e.value === inlineOperator)?.symbol ?? 'filter_alt';\r\n }\r\n }\r\n @Output() inlineOperatorChange = new EventEmitter<SdFilterOperator>();\r\n @Output() operatorChange = new EventEmitter<SdFilterOperator>();\r\n\r\n\r\n columnFilter: Record<string, any> = {};\r\n @Input('columnFilter') set _columnFilter(columnFilter: Record<string, any>) {\r\n this.columnFilter = columnFilter || {};\r\n this.#valueChanges.next();\r\n }\r\n operators: { value: SdFilterOperator; display: string }[] = [];\r\n column: SdTableColumn;\r\n items: any[] | ((searchText: string) => Promise<any[]>) = [];\r\n @Input() cacheValues: Record<string, any[]>;\r\n @Input('column') set _column(column: SdTableColumn) {\r\n this.column = column;\r\n if (!column?.filter?.disabled && column?.filter?.operator?.enable) {\r\n this.operators = SdFilterOperators.filter(e => column.filter.operator.list?.includes?.(e.value));\r\n } else {\r\n this.operators = [];\r\n }\r\n if (this.column.type === 'values') {\r\n if (Array.isArray(this.column.option.items)) {\r\n this.items = this.column.option.items;\r\n } else {\r\n this.items = this.cacheValues?.[column.field] || []\r\n }\r\n } else if (this.column.type === 'lazy-values') {\r\n this.items = this.column.option.items;\r\n }\r\n } \r\n @Output() filterChange = new EventEmitter();\r\n #valueChanges = new Subject();\r\n #subcription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subcription.add(\r\n this.#valueChanges.pipe(startWith(this.columnFilter)).subscribe(() => {\r\n if (this.column.type === 'date' || this.column.type === 'time' || this.column.type === 'datetime') {\r\n if (!this.column?.filter?.useFilterDate) {\r\n this.columnFilter[this.column.field] = this.columnFilter[this.column.field] || {\r\n from: null,\r\n to: null,\r\n };\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subcription.unsubscribe();\r\n }\r\n\r\n onFilterChange = () => {\r\n this.filterChange.emit();\r\n };\r\n\r\n onChangeOperator = (operator: { value: SdFilterOperator; symbol?: string; display: string }) => {\r\n if (operator) {\r\n this.#inlineOperator = operator.value;\r\n this.inlineSymbol = operator.symbol;\r\n } else {\r\n this.#inlineOperator = null;\r\n this.inlineSymbol = 'filter_alt';\r\n }\r\n this.inlineOperatorChange.emit(this.#inlineOperator);\r\n this.operatorChange.emit(this.#inlineOperator);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOptionSelector } from '../models/table-option-selector.model';\r\nimport { SdTableItem } from '../models/table-item.model';\r\n\r\n@Pipe({\r\n name: 'selectionVisible'\r\n})\r\nexport class SdSelectionVisiblePipe implements PipeTransform {\r\n transform = (rowData: SdTableItem, selection: SdTableOptionSelector): boolean => {\r\n const { actions } = selection;\r\n const groupedActions: string[] = [];\r\n rowData.meta.selector.actions = rowData.meta.selector.actions || [];\r\n if (!actions?.length) {\r\n rowData.meta.selector.selectable = true;\r\n return rowData.meta.selector.selectable;\r\n }\r\n for (const action of actions) {\r\n if ('children' in action) {\r\n let flag = false;\r\n let hasGroup = false;\r\n for (const childAction of action.children) {\r\n const { hidden, isGrouped } = childAction;\r\n const key = hash(childAction);\r\n if (isGrouped) {\r\n hasGroup = true;\r\n }\r\n if (typeof (hidden) === 'function') {\r\n if (!hidden(rowData.data)) {\r\n flag = true;\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n flag = true;\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n if (flag) {\r\n rowData.meta.selector.actions.push(hash(action));\r\n if (hasGroup) {\r\n groupedActions.push(hash(action));\r\n }\r\n }\r\n } else {\r\n const { hidden, isGrouped } = action;\r\n const key = hash(action);\r\n if (typeof (hidden) === 'function') {\r\n if (!hidden(rowData.data)) {\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n rowData.meta.selector.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n }\r\n rowData.meta.selector.selectable = !!rowData.meta.selector.actions?.length;\r\n if (!rowData.meta.selector.selectable || !groupedActions.length || rowData?.meta.group?.items?.length) {\r\n return rowData.meta.selector.selectable;\r\n }\r\n // Đối với trường hợp grouped, tuy selectable là true nhưng vẫn ẩn đi checkbox\r\n // nếu các action đều thuộc groupedActions và rowData ko phải là dòng group\r\n return rowData.meta.selector.actions.some(action => !groupedActions.includes(action));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdTableOption } from '../../models/table-option.model';\r\nimport { SdTableItem } from '../../models/table-item.model';\r\nimport { SdTableAction } from '../../models/table-option-selector.model';\r\n\r\n@Component({\r\n selector: 'sd-table-quick-action',\r\n templateUrl: './quick-action.component.html',\r\n styleUrls: ['./quick-action.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTableQuickAction {\r\n @Input() tableOption: SdTableOption;\r\n @Input() selectedTableItems: SdTableItem[];\r\n @Output() clear = new EventEmitter();\r\n constructor() {}\r\n onClear = () => {\r\n this.clear.emit();\r\n };\r\n\r\n onClickAction = (action: SdTableAction) => {\r\n if ('click' in action) {\r\n action?.click(this.selectedTableItems.map(e => e.data));\r\n }\r\n };\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdTableOption } from '../models/table-option.model';\r\nimport { MapToSdTableItem, SdTableItem } from '../models/table-item.model';\r\n@Pipe({\r\n name: 'sdGroup',\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: SdTableItem[], gridOption: SdTableOption): SdTableItem[] {\r\n const { group } = gridOption;\r\n if (!group) {\r\n return items;\r\n }\r\n const { fields, htmlTemplate } = group;\r\n if (!fields?.length) {\r\n return items;\r\n }\r\n const groupItem: {\r\n [key: string]: SdTableItem[];\r\n } = {};\r\n for (const item of items) {\r\n let obj = {};\r\n for (const field of fields) {\r\n obj = {\r\n ...obj,\r\n ...(item[field] ?? { [field]: item[field] }),\r\n };\r\n }\r\n const key = hash(obj);\r\n if (!groupItem[key]) {\r\n groupItem[key] = [];\r\n }\r\n groupItem[key].push(item);\r\n }\r\n const results: SdTableItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n const result = MapToSdTableItem({});\r\n result.meta.group.items = groupItem[key];\r\n result.meta.group.htmlTemplate = htmlTemplate(groupItem[key]);\r\n results.push(result);\r\n for (const item of groupItem[key]) {\r\n results.push(item);\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Injectable, NgModule } from '@angular/core';\r\nimport { CommonModule, DatePipe, DecimalPipe } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTable } from './table.component';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { CdkTableModule, CdkColumnDef } from '@angular/cdk/table';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdCommandFilterPipe } from './pipes/command-filter.pipe';\r\nimport { SdCommandDisablePipe } from './pipes/command-disable.pipe';\r\nimport { SdCommandIconPipe } from './pipes/command-icon.pipe';\r\nimport { SdCommandTitlePipe } from './pipes/command-title.pipe';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { SdDesktopCellView } from './components/desktop-cell-view/desktop-cell-view.component';\r\nimport { SdServiceModule } from '@sd-angular/core/service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdFilterExternalPipe } from './pipes/filter-external.pipe';\r\nimport { SdFilterColumnPipe } from './pipes/filter-column.pipe';\r\nimport { SdTableFilter } from './components/table-filter/table-filter.component';\r\nimport { SdPopupFilter } from './components/popup-filter/popup-filter.component';\r\n\r\nimport { SdTableFilterService } from './services/table-filter/table-filter.service';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SdPopupConfiguration } from './components/popup-configuration/popup-configuration.component';\r\nimport { SdTableConfigurationService } from './services/table-configuration.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { SdColumnTooltipPipe } from './pipes/column-tooltip.pipe';\r\nimport { SdSelectionActionFilterPipe } from './pipes/selection-action-filter.pipe';\r\nimport { SdSelectionDisablePipe } from './pipes/selection-disable.pipe';\r\nimport { SdSelectionVisibleSelectAllPipe } from './pipes/selection-visible-select-all.pipe';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdColumnInlineFilter } from './components/column-inline-filter/column-inline-filter.component';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { SdTableQuickAction } from './components/quick-action/quick-action.component';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\r\nimport { SdGroupModule } from '@sd-angular/core/group';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n@Injectable()\r\nexport class MatPaginatorIntlCro extends MatPaginatorIntl {\r\n firstPageLabel = 'Trang đầu';\r\n lastPageLabel = 'Trang cuối';\r\n itemsPerPageLabel = 'Kích thước trang';\r\n nextPageLabel = 'Trang sau';\r\n previousPageLabel = 'Trang trước';\r\n\r\n getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n if (length === 0 || pageSize === 0) {\r\n return '';\r\n }\r\n const from = page * pageSize + 1;\r\n const to = from + (length - page * pageSize > pageSize ? pageSize : length - page * pageSize) - 1;\r\n return `${from}-${to}/${length}`;\r\n };\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatTableModule,\r\n MatMenuModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatProgressSpinnerModule,\r\n MatSlideToggleModule,\r\n MatCheckboxModule,\r\n MatListModule,\r\n MatChipsModule,\r\n CdkTableModule,\r\n DragDropModule,\r\n SdFormModule,\r\n SdServiceModule,\r\n SdCommonModule,\r\n SdGroupModule,\r\n ],\r\n declarations: [\r\n SdTableQuickAction,\r\n SdDesktopCell,\r\n SdDesktopCellView,\r\n SdDesktopCommand,\r\n SdColumnInlineFilter,\r\n SdTable,\r\n\r\n SdMaterialFooterDefDirective,\r\n SdTabelCellDefDirective,\r\n SdTableFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n SdPopupConfiguration,\r\n SdTableFilter,\r\n SdPopupFilter,\r\n SdPopupExport,\r\n // Pipes\r\n SdCommandFilterPipe,\r\n SdCommandDisablePipe,\r\n SdCommandIconPipe,\r\n SdCommandTitlePipe,\r\n SdColumnTooltipPipe,\r\n SdFilterColumnPipe,\r\n SdFilterExternalPipe,\r\n SdSelectionActionFilterPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionDisablePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdGroupPipe,\r\n ],\r\n exports: [\r\n SdTable,\r\n SdMaterialFooterDefDirective,\r\n SdTabelCellDefDirective,\r\n SdTableFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdTableFilterService,\r\n SdTableConfigurationService,\r\n {\r\n provide: MatPaginatorIntl,\r\n useClass: MatPaginatorIntlCro,\r\n },\r\n ],\r\n})\r\nexport class SdTableModule {}\r\n","import { Observable } from 'rxjs';\r\nimport { SdFilterOperator, SdTableColumn } from '../../models/table-column.model';\r\nimport { SdTableFilterDefDirective } from '../../directives/sd-table-filter-def.directive';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\nexport class SdTableQuickFilter {\r\n code: string;\r\n columnFilter: {\r\n [field: string]: any;\r\n };\r\n externalFilter: {\r\n [field: string]: any;\r\n };\r\n filterDef: {\r\n [field: string]: any;\r\n };\r\n}\r\n\r\nexport interface SdTableFilterConfiguration {\r\n // selectedQuickFilter: string;\r\n // quickFilters: SdGridMaterialQuickFilter[];\r\n\r\n inlineColumn: Record<string, boolean>; // Ẩn hiện filter column\r\n // columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n inlineExternal: Record<string, boolean>; // Ẩn hiện filter external\r\n // externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n inlineFilterDef: Record<string, boolean>; // Ẩn hiện filter def\r\n // filterDef?: Record<string, any>; // Giá trị filter def\r\n}\r\n\r\nexport interface SdTableFilterValue {\r\n columnOperator?: Record<string, SdFilterOperator>;\r\n\r\n columnFilter?: Record<string, any>; // Giá trị filter column\r\n\r\n externalFilter?: Record<string, any>; // Giá trị filter external\r\n\r\n filterDef?: Record<string, any>; // Giá trị filter def\r\n\r\n notReload?: boolean; // Để nhận biết là chỉ set giá trị, không trigger change\r\n}\r\n\r\nexport interface SdTableFilterRequest<T = any> {\r\n columnOperator: Record<string, SdFilterOperator>;\r\n rawColumnFilter: Record<keyof T, any>;\r\n rawExternalFilter: Record<string, any>;\r\n rawFilterDef: Record<string, any>;\r\n pageNumber: number;\r\n pageSize: number;\r\n orderBy: string;\r\n orderDirection: 'asc' | 'desc' | '';\r\n isExported?: boolean;\r\n visibledColumns?: SdTableColumn[];\r\n}\r\n\r\nexport interface SdTableOptionFilter {\r\n key?: string;\r\n cacheFilter?: boolean;\r\n disabled?: boolean;\r\n hideInlineFilter?: boolean;\r\n externalFilters?: SdTableExternalFilter[];\r\n sorts?: string[];\r\n enableCollapse?: boolean;\r\n operatorChange?: (column?: SdTableColumn, operator?: SdFilterOperator) => void;\r\n}\r\n\r\nexport declare type SdTableExternalFilter =\r\n | TextFilter\r\n | DateFilter\r\n | DateTimeFilter\r\n | DateRangeFilter\r\n | NumberFilter\r\n | ValuesFilter\r\n | LazyValuesFilter\r\n | BoolFilter\r\n | CustomFilter;\r\n\r\ninterface BaseFilter {\r\n field: string;\r\n title: string;\r\n defaultShowing?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface TextFilter extends BaseFilter {\r\n type: 'string';\r\n default?: string;\r\n}\r\n\r\ninterface DateFilter extends BaseFilter {\r\n type: 'date';\r\n default?: Date | string;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n}\r\n\r\ninterface DateTimeFilter extends BaseFilter {\r\n type: 'datetime';\r\n default?: Date | string;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n}\r\n\r\ninterface DateRangeFilter extends BaseFilter {\r\n type: 'daterange';\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n default?: {\r\n from?: Date | string;\r\n to?: Date | string;\r\n };\r\n}\r\n\r\ninterface NumberFilter extends BaseFilter {\r\n type: 'number';\r\n default?: number;\r\n}\r\n\r\ninterface ValuesFilter extends BaseFilter {\r\n type: 'values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: any[] | (() => Promise<any[]>);\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface LazyValuesFilter extends BaseFilter {\r\n type: 'lazy-values';\r\n option: {\r\n valueField: string;\r\n displayField: string;\r\n items: (searchText: string) => Promise<any[]>; // Filter\r\n selection?: 'MULTIPLE';\r\n };\r\n default?: string | string[];\r\n}\r\n\r\ninterface BoolFilter extends BaseFilter {\r\n type: 'bool';\r\n option?: {\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n };\r\n default?: boolean;\r\n}\r\n\r\ninterface CustomFilter extends BaseFilter {\r\n type: 'custom';\r\n filterDef?: TemplateRef<SdTableFilterDefDirective>;\r\n default?: any;\r\n}\r\n\r\nexport interface SdTableFilterRegister {\r\n configuration: {\r\n get: () => SdTableFilterConfiguration;\r\n set: (configuration: Partial<SdTableFilterConfiguration>) => SdTableFilterConfiguration;\r\n remove: () => void;\r\n observer: Observable<SdTableFilterConfiguration>;\r\n };\r\n value: {\r\n get: () => SdTableFilterValue;\r\n set: (value: Partial<SdTableFilterValue>) => SdTableFilterValue;\r\n remove: () => void;\r\n observer: Observable<SdTableFilterValue>;\r\n };\r\n}\r\n"]}
|