@sd-angular/core 1.3.229 → 1.3.230

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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/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","SdTable","loadingService","tableConfiguration","exportService","gridFilterService","_gridId","uuid.v4","_optionChanges","Subject","_localItems","items","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","indexOf","columnType_1","selection","columnValues_1","valueField","filterValues","every","fv","fValue","replace","cValue","fromDate","Date","begin","toDate","end","columnTime","getTime","fromDateTime","toDateTime","columns_1","columns_1_1","type_1","field_1","sort","tableItemCurrent","tableItemNext","s1","s2","reverse","index","total","_getFilter","_load","filterReq","catch","err","notify","warning","console","_15","_format","finally","results","isArray","_render","sdScroll","scrollTop","reload","onReload","_updateSelectedItems","tableFilter","_exportedItems","export","isObservable","toPromise","exportedItems","_allColumns","disabled","_allExportedColumns","_onExport","isCSV","columns_2","_getExportColumns","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","_18","exportCSV","fileName","sheets","sheet","name","_16","gridColumns","columns_4","displayColumns","reduce","first","e1","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","start","stop","configurationResult_1","displayColumns_1","paginator","page","sortChange","switchMap","setTimeout","updateStickyColumnStyles","combineLatest","animations","trigger","style","height","minHeight","visibility","transition","animate","SdLoadingService","SdExportService","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","emit","onChangeOperator","_value","inlineOperator","useFilterDate","Output","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","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 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, 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\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 #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 setTimeout(() => {\r\n this.table?.updateStickyColumnStyles();\r\n }, 0);\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 };\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 (isCSV?: boolean) => {\r\n try {\r\n let columns = this.#getExportColumns();\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\r\n obj[column.field] = Date.toFormat(date, 'dd/MM/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, 'dd/MM/yyyy HH:mm');\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 (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 = () => {\r\n let gridColumns: 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 gridColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n gridColumns.push(column);\r\n });\r\n if (this.configuration) {\r\n const columns = [...gridColumns];\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 gridColumns = 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 return [...gridColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])];\r\n };\r\n\r\n exportExcel = () => {\r\n this.#onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.#onExport(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\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} trên ${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 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\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/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","SdTable","loadingService","tableConfiguration","exportService","gridFilterService","_gridId","uuid.v4","_optionChanges","Subject","_localItems","items","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","indexOf","columnType_1","selection","columnValues_1","valueField","filterValues","every","fv","fValue","replace","cValue","fromDate","Date","begin","toDate","end","columnTime","getTime","fromDateTime","toDateTime","columns_1","columns_1_1","type_1","field_1","sort","tableItemCurrent","tableItemNext","s1","s2","reverse","index","total","_getFilter","_load","filterReq","catch","err","notify","warning","console","_15","_format","finally","results","isArray","_render","sdScroll","scrollTop","reload","onReload","_updateSelectedItems","setTimeout","updateStickyColumnStyles","tableFilter","_exportedItems","export","isObservable","toPromise","exportedItems","_allColumns","disabled","_allExportedColumns","_onExport","isCSV","columns_2","_getExportColumns","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","_18","exportCSV","fileName","sheets","sheet","name","_16","gridColumns","columns_4","displayColumns","reduce","first","e1","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","start","stop","configurationResult_1","displayColumns_1","paginator","page","sortChange","switchMap","combineLatest","animations","trigger","style","height","minHeight","visibility","transition","animate","SdLoadingService","SdExportService","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","emit","onChangeOperator","_value","inlineOperator","useFilterDate","Output","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","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 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, 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\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 #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 (isCSV?: boolean) => {\r\n try {\r\n let columns = this.#getExportColumns();\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\r\n obj[column.field] = Date.toFormat(date, 'dd/MM/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, 'dd/MM/yyyy HH:mm');\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 (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 = () => {\r\n let gridColumns: 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 gridColumns.push(childColumn);\r\n });\r\n return;\r\n }\r\n gridColumns.push(column);\r\n });\r\n if (this.configuration) {\r\n const columns = [...gridColumns];\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 gridColumns = 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 return [...gridColumns, ...(this.tableOption.export?.columns?.filter(e => !e.export?.disabled) || [])];\r\n };\r\n\r\n exportExcel = () => {\r\n this.#onExport();\r\n };\r\n\r\n exportCSV = () => {\r\n this.#onExport(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\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} trên ${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 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\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"]}