@sd-angular/core 1.3.15 → 1.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sd-angular-core-grid-material.umd.js +159 -137
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/esm2015/grid-material/src/lib/grid-material.component.js +20 -6
- package/esm2015/grid-material/src/lib/models/grid-editor.model.js +1 -1
- package/fesm2015/sd-angular-core-grid-material.js +19 -5
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/grid-material/src/lib/grid-material.component.d.ts +1 -1
- package/grid-material/src/lib/models/grid-editor.model.d.ts +1 -0
- package/package.json +1 -1
- package/{sd-angular-core-1.3.15.tgz → sd-angular-core-1.3.16.tgz} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-cell-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-filter-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-footer-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-empty-data-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-sub-information-def.directive.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/grid-material/src/lib/models/grid-configuration.model.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-filter/popup-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/services/grid-filter.service.ts","../../../../projects/sd-core/grid-material/src/lib/components/grid-filter/grid-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-export/popup-export.component.ts","../../../../projects/sd-core/grid-material/src/lib/services/grid-configuration.service.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-values.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/functions/calculate-sd-id.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-handler-column.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/grid-material.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-disable.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-html-template.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-transform.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/filter-external.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/filter-column.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-children-view/desktop-cell-children-view.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-children-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-title.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-command/desktop-command.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-badge.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/grid-configuration-result.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-grid-configuration/popup-grid-configuration.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-tooltip.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-action-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-disable.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-visible-select-all.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/services/generated-column/generated-column.service.ts","../../../../projects/sd-core/grid-material/src/lib/components/dynamic-column/dynamic-column.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell/desktop-cell.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-handler-row.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-validate.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/style-row-css.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-editor-validation/desktop-editor-validation.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/column-inline-filter/column-inline-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-visible.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/quick-action/quick-action.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/cell-view.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/sd-group.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/grid-material.module.ts"],"names":["templateRef","this","Directive","args","selector","TemplateRef","Input","SdMaterialFilterDefDirective","Object","defineProperty","prototype","val","defaultShowing","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__rest","s","e","t","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","apply","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","push","create","__values","o","m","__read","r","ar","error","__spread","arguments","concat","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","DEFAULT_GRID_MATERIAL_CONFIG","pageSize","pages","GRID_MATERIAL_CONFIG","InjectionToken","SdPopupFilter","cdRef","_this","externalFilters","externalFilter","inlineExternal","columns","columnFilter","inlineColumn","filterDefs","filterDef","inlineFilterDef","changeFilter","EventEmitter","clearFilter","open","JSON","parse","stringify","modal","markForCheck","close","onApply","emit","onClear","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","ViewChild","Output","settingService","_prefix","key","prefix","selectedQuickFilter","quickFilters","configuration","_b","_a","hash","Injectable","SdSettingService","SdGridFilter","ref","deviceService","gridFilterService","isVisible","_filterOptionChanges","Subject","filterChange","_subscription","Subscription","_loadDefault","_u","_v","column","field","filter","_c","_d","default","_w","_x","_e","type","from","_j","_g","_f","_h","undefined","to","_o","_l","_k","_m","_p","_y","_z","sdMaterialFilterDef","_q","_clearFilter","_s","_t","onFilter","item","popupFilter","onChangeFilter","onReset","onClearFilter","setFilter","externalFilter_1","isMobileOrTablet","isDesktop","disabled","ngAfterViewInit","add","pipe","startWith","subscribe","ngOnDestroy","unsubscribe","DeviceDetectorService","SdGridFilterService","SdPopupExport","loadingService","exportService","notifyService","translateService","groups","enableCreating","selected","files","export","form","FormGroup","_getExportableColumns","gridColumns","additionalColumns","_getExportableGroups","gridOption","permission","hideMyTemplates","loadFiles","code","detectChanges","exportDefault","_getExportColumns","columns_1","displayColumns","firstColumns","secondColumns","reduce","first","find","children","e1","map","assign","data","file","isCSV","exportCSV","exportRaw","isRaw","group","selectedGroup","filesInFolder","_initTemplate","fileName","sheets","isArray","sheet","name","items","fields","_0","_1","_3","generateTemplate","start","finally","stop","generateAndUploadTemplate","generateUploadTemplate","onExport","uploadTemplate","validator","_r","validators","removeFile","confirm","translate","idx","splice","createTemplate","invalid","markAllAsTouched","some","notify","warning","templateName","filePath","onChangeGroup","listGroups","selectedOptions","validatorTemplateName","test","option","forEach","childColumn","title","description","width","ngOnInit","SdLoadingService","SdExportService","SdNotifyService","SdTranslateService","gridMaterialConfiguration","_COLUMNS","EDITORVALIDATION","EDITOR","SUBINFORMATION","COMMAND","SELECTION","GROUP","_cache","init","subject_1","load","_load","_get","_set","remove","_remove","_default","observer","_getKey","config","hidden","origin","invisible","fixed","subject","storage","createServer","catch","console","isGeneratedColumn","col","generateConfigurationResult","sdSubInformation","fixedColumn","firstHeaders","secondHeaders","displayedColumns","displayedFooters","multipleHeader","selection","commands","editor","addable","removable","visible","generatedColumn","generatedColumns","includes","subColumn","e_2","colSpan","Inject","Optional","transform","valueField","displayField","remain","_prefix$1","_cache$1","values","Pipe","CalculateSdId","sdId","editorHandlerColumn","expandDetail","isExpanded","isExpanding","isSelected","sdGroup","selectable","actions","groupedActions","originItem","editorErrorMessage","editorHandlerRow","SdEditorHandlerColumnPipe","zone","_visible","columns_1_1","childCol","run","NgZone","SdGridMaterial","gridConfigurationService","columnValuesPipe","editorHandlerColumnPipe","uuid.v4","_localItems","selectedItems","isLoading","isHiddenPaginator","_paginator","_sort","sdCellDefs","QueryList","cellDef","sdFooterDefs","footerDef","hasFooter","sdFilterDefs","_reload","isExporting","isSelectAll","exportTitle","_loadCompleted","_initCellDef","_4","sdMaterialCellDef","_initFilterDef","_initFooterDef","sdMaterialFooterDef","_filterExportInfo","pageNumber","rawColumnFilter","gridFilter","rawExternalFilter","rawFilterDef","orderBy","active","orderDirection","direction","isExported","_initConfiguration","paginate","showFirstLastButtons","_filterLocal","localItems","filterInfo","filterValue","toString","trim","toLowerCase","columnValue","fValue","replace","cValue","fromDate","Date","begin","toDate","end","getTime","type_1","field_1","sort","current","s1","s2","reverse","index","total","_getFilter","pageIndex","filterReq","force","isObservable","toPromise","results","_2","handle","error_1","_render","sdScroll","scrollTop","reload","onReload","every","_updateSelectedItems","_load$1","_exportedItems","exportedItems","_allColumns","_allExportedColumns","_onExport","columns_2","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","exportColumn","exportedColumn","_6","displayOnTrue","displayOnFalse","date","transformDate","toFormat","_5","e_8","columns_3","columns_3_1","exportItems_2","exportItems_2_1","_8","exportExcelRaw","exportByTemplate","max","onFilterChange","onExpand","rowData","subInformation","always","multiple","res","onSelect","single","onSelectAll","onClearSelection","editorStatus","sdVersion","onCreate","onAdd","addToLast","temporary","onUpdate","onSave","saving","validate","message","err_1","onCancel","idx2","idx1","onRemove","update","refreshItem","_subscription$1","gridConfigurationObserver","paginator","page","sortChange","debounceTime","switchMap","changes","drop","event","moveItemInArray","previousIndex","currentIndex","keys","animations","trigger","style","height","minHeight","visibility","transition","animate","SdGridConfigurationService","SdColumnValuesPipe","SdScrollDirective","SdQuickAction","MatPaginator","MatSort","ContentChild","SdMaterialSubInformationDefDirective","SdMaterialEmptyDataDefDirective","ContentChildren","SdMaterialCellDefDirective","SdMaterialFooterDefDirective","SdCommandFilterPipe","commands_1","commands_1_1","command","flag","isHidden","e_1","childCommand","hidden_1","SdCommandDisablePipe","SdCommandIconPipe","icon","SdCommandTitlePipe","SdColumnHtmlTemplatePipe","htmlTemplate","SdColumnTransformPipe","Number","isNumber","toVNCurrency","SdFilterExternalPipe","externalFilters_1","externalFilters_1_1","SdFilterColumnPipe","columnChildren","SdColumnChildrenFilterPipe","_isMobileOrTablet","transformValue","templateValue","SdColumnTitlePipe","dynamicTitle","SdColumnBadgePipe","badge","badgeType","color","badgeIcon","SdGridConfigurationResultPipe","SdPopupGridConfiguration","isCreatingColumn","disabledDrag","_cache$2","createColumn","mouseUp","dropTable","table","renderRows","handleMouseDown","handleMouseUp","HostListener","SdColumnTooltipPipe","tooltip","_convert","action","fontSet","click","childAction","key_1","actions_1","actions_1_1","availableActions","availableActions_1","availableActions_1_1","isGrouped","setTimeout","_cache$3","loadSystem","systemColumn","SdDynamicColumn","generatedColumnService","columnTypes","isDetail","originColumns","onDetail","detail","isSystem","useTemplate","markAsUntouched","markAsPristine","systemSetting","setting","id","systemColumns","_subscription$2","SdGeneratedColumnService","SdSideDrawer","onChange","change","editorOnAdd","editorOnEdit","edit","editorOnDelete","delete","SdEditorHandlerRowPipe","status","isDisabled","editable","savable","cancelable","_visible$1","SdEditorValidatePipe","_previous","_delay","now","SdStyleRowCss","rowCss","SdColumnInlineFilter","useFilterDate","hasGroup","clear","SdCellViewPipe","utilityService","_maxSecond","_maxMinute","_maxHour","_maxDay","_maxMonth","_isMobileOrTablet$1","displayOnEmpty","align","display","hasHtml","html","seconds","timeDifferent","timeDifference","time","dateTime","emptyValues","SdUtilityService","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","FormsModule","ReactiveFormsModule","MatInputModule","MatFormFieldModule","MatSortModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatChipsModule","MatRadioModule","MatSlideToggleModule","MatCheckboxModule","MatListModule","MatDividerModule","CdkTableModule","DragDropModule","SdFormModule","SdServiceModule","MatSliderModule","ScrollingModule","SdCommonModule","declarations","SdGridQuickAction","SdDesktopCell","SdDesktopCellEditor","SdDesktopEditorValidation","SdDesktopCellView","SdDesktopCellChildrenView","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: '[sdMaterialCellDef]'\r\n})\r\nexport class SdMaterialCellDefDirective {\r\n @Input() sdMaterialCellDef: 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: '[sdMaterialFilterDef]'\r\n})\r\nexport class SdMaterialFilterDefDirective {\r\n @Input() sdMaterialFilterDef: string;\r\n @Input('defaultShowing') set showing(val: boolean | '') {\r\n this.defaultShowing = (val === '') || val;\r\n }\r\n defaultShowing: boolean;\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: '[sdMaterialFooterDef]'\r\n})\r\nexport class SdMaterialFooterDefDirective {\r\n @Input() sdMaterialFooterDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdMaterialEmptyDataDef]'\r\n})\r\nexport class SdMaterialEmptyDataDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdMaterialSubInformationDef]'\r\n})\r\nexport class SdMaterialSubInformationDefDirective {\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\n\r\nexport interface ISdGridMaterialConfiguration {\r\n filter?: {\r\n quickFilter?: boolean;\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_GRID_MATERIAL_CONFIG: ISdGridMaterialConfiguration = {\r\n paginate: {\r\n pageSize: 50,\r\n pages: [50, 100, 200]\r\n }\r\n};\r\n\r\nexport const GRID_MATERIAL_CONFIG = new InjectionToken<ISdGridMaterialConfiguration>('sd-grid-material.configuration');\r\n","import { Component, ViewChild, Output, EventEmitter, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialExternalFilter } from '../../models/grid-filter.model';\r\nimport { SdMaterialFilterDefDirective } from '../../directives/sd-material-filter-def.directive';\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('modal') modal: SdModal;\r\n @Input() externalFilters: SdGridMaterialExternalFilter[] = [];\r\n externalFilter: any = {};\r\n inlineExternal: {\r\n [key: string]: boolean\r\n } = {};\r\n @Input() columns: SdGridMaterialColumn[] = [];\r\n columnFilter: any = {};\r\n inlineColumn: {\r\n [key: string]: boolean\r\n } = {};\r\n\r\n @Input() filterDefs: SdMaterialFilterDefDirective[] = [];\r\n filterDef: any = {};\r\n inlineFilterDef: {\r\n [key: string]: boolean;\r\n } = {};\r\n\r\n @Output() changeFilter = new EventEmitter<{\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }>();\r\n @Output() clearFilter = new EventEmitter();\r\n constructor(\r\n private cdRef: ChangeDetectorRef\r\n ) {\r\n }\r\n\r\n open = (args: {\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }) => {\r\n const { inlineColumn, columnFilter, inlineExternal, externalFilter, inlineFilterDef, filterDef } = args;\r\n this.inlineColumn = JSON.parse(JSON.stringify(inlineColumn || {}));\r\n this.columnFilter = JSON.parse(JSON.stringify(columnFilter || {}));\r\n this.inlineExternal = JSON.parse(JSON.stringify(inlineExternal || {}));\r\n this.externalFilter = JSON.parse(JSON.stringify(externalFilter || {}));\r\n this.inlineFilterDef = JSON.parse(JSON.stringify(inlineFilterDef || {}));\r\n this.filterDef = JSON.parse(JSON.stringify(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.changeFilter.emit({\r\n inlineColumn: this.inlineColumn || {},\r\n columnFilter: this.columnFilter || {},\r\n inlineExternal: this.inlineExternal || {},\r\n externalFilter: this.externalFilter || {},\r\n inlineFilterDef: this.inlineFilterDef || {},\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.clearFilter.emit();\r\n this.modal.close();\r\n this.cdRef.markForCheck();\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 { SdGridMaterialFilterConfiguration } from '../models/grid-filter.model';\r\n\r\n@Injectable()\r\nexport class SdGridFilterService {\r\n #prefix = '61d22e8e-eee8-4aad-8e1c-044a532fea91';\r\n constructor(private settingService: SdSettingService) {\r\n }\r\n get = async (key: string): Promise<SdGridMaterialFilterConfiguration> => {\r\n if (!key) {\r\n return {\r\n selectedQuickFilter: null,\r\n quickFilters: [],\r\n inlineExternal: {},\r\n inlineColumn: {},\r\n inlineFilterDef: {}\r\n };\r\n }\r\n const { get } = this.settingService.create<SdGridMaterialFilterConfiguration>({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n const configuration = await get();\r\n return {\r\n selectedQuickFilter: configuration?.selectedQuickFilter ?? null,\r\n quickFilters: configuration?.quickFilters || [],\r\n inlineExternal: configuration?.inlineExternal || {},\r\n inlineColumn: configuration?.inlineColumn || {},\r\n inlineFilterDef: configuration?.inlineFilterDef || {},\r\n };\r\n }\r\n\r\n set = async (key: string, configuration: SdGridMaterialFilterConfiguration): Promise<SdGridMaterialFilterConfiguration> => {\r\n configuration = {\r\n selectedQuickFilter: configuration?.selectedQuickFilter || null,\r\n quickFilters: configuration?.quickFilters || [],\r\n inlineExternal: configuration.inlineExternal || {},\r\n inlineColumn: configuration.inlineColumn || {},\r\n inlineFilterDef: configuration.inlineFilterDef || {}\r\n };\r\n if (!key) {\r\n return configuration;\r\n }\r\n const { set } = this.settingService.create<SdGridMaterialFilterConfiguration>({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n key = hash({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n await set(configuration);\r\n return configuration;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdGridMaterialFilterOption, SdGridMaterialExternalFilter } from '../../models/grid-filter.model';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdPopupFilter } from '../popup-filter/popup-filter.component';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdGridFilterService } from '../../services/grid-filter.service';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdMaterialFilterDefDirective } from '../../directives/sd-material-filter-def.directive';\r\n\r\n@Component({\r\n selector: 'sd-grid-filter',\r\n templateUrl: './grid-filter.component.html',\r\n styleUrls: ['./grid-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGridFilter implements AfterViewInit, OnDestroy {\r\n @ViewChild(SdPopupFilter) popupFilter: SdPopupFilter;\r\n isVisible = true;\r\n filter: Readonly<SdGridMaterialFilterOption>;\r\n #filterOptionChanges = new Subject<SdGridMaterialFilterOption>();\r\n @Input('filter') set _filter(filter: SdGridMaterialFilterOption) {\r\n this.filter = filter;\r\n this.isVisible = !this.filter?.disabled;\r\n this.#filterOptionChanges.next(this.filter);\r\n }\r\n @Input() columns: SdGridMaterialColumn[] = [];\r\n @Input() filterDefs: SdMaterialFilterDefDirective[] = [];\r\n filterDef: any = {};\r\n inlineFilterDef: {\r\n [key: string]: boolean;\r\n } = {};\r\n\r\n @Output() filterChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n\r\n columnFilter: any = {};\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n externalFilters: SdGridMaterialExternalFilter[] = [];\r\n externalFilter: any = {};\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n isMobileOrTablet: boolean;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private deviceService: DeviceDetectorService,\r\n private gridFilterService: SdGridFilterService) {\r\n this.isMobileOrTablet = !this.deviceService.isDesktop();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#filterOptionChanges.pipe(startWith(this.filter)).subscribe(() => {\r\n if (!this.isVisible) {\r\n this.filterChange.emit();\r\n return;\r\n }\r\n this.externalFilters = this.filter?.externalFilters || [];\r\n this.gridFilterService.get(this.filter?.key).then(configuration => {\r\n this.inlineColumn = configuration.inlineColumn;\r\n this.inlineExternal = configuration.inlineExternal;\r\n this.inlineFilterDef = configuration.inlineFilterDef;\r\n this.#loadDefault();\r\n this.filterChange.emit();\r\n });\r\n this.ref.markForCheck();\r\n }));\r\n }\r\n\r\n #loadDefault = () => {\r\n for (const column of this.columns) {\r\n this.inlineColumn[column.field] = this.inlineColumn[column.field] ?? column?.filter?.defaultShowing;\r\n this.columnFilter[column.field] = this.columnFilter[column.field] ?? column?.filter?.default;\r\n }\r\n for (const externalFilter of this.externalFilters) {\r\n this.inlineExternal[externalFilter.field] = this.inlineExternal[externalFilter.field] ?? externalFilter?.defaultShowing;\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: this.externalFilter[externalFilter.field]?.from ?? externalFilter.default?.from ?? undefined,\r\n to: this.externalFilter[externalFilter.field]?.to ?? externalFilter.default?.to ?? undefined\r\n };\r\n } else {\r\n this.externalFilter[externalFilter.field] = this.externalFilter[externalFilter.field] ?? externalFilter.default;\r\n }\r\n }\r\n for (const filterDef of this.filterDefs) {\r\n this.inlineFilterDef[filterDef.sdMaterialFilterDef] = this.inlineFilterDef[filterDef.sdMaterialFilterDef] ?? filterDef?.defaultShowing;\r\n }\r\n }\r\n\r\n #clearFilter = () => {\r\n this.columnFilter = {};\r\n this.externalFilter = {};\r\n this.filterDef = {};\r\n for (const externalFilter of this.externalFilters) {\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: undefined,\r\n to: undefined\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?: SdGridMaterialColumn | SdGridMaterialExternalFilter) => {\r\n this.filterChange.emit();\r\n }\r\n\r\n open = () => {\r\n this.popupFilter.open({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.inlineExternal,\r\n inlineFilterDef: this.inlineFilterDef\r\n });\r\n }\r\n\r\n onChangeFilter = (args: {\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }) => {\r\n const { inlineColumn, columnFilter, inlineExternal, externalFilter, inlineFilterDef, filterDef } = args;\r\n this.inlineColumn = inlineColumn;\r\n this.columnFilter = columnFilter;\r\n this.inlineExternal = inlineExternal;\r\n this.externalFilter = externalFilter;\r\n this.inlineFilterDef = inlineFilterDef;\r\n this.filterDef = filterDef;\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn,\r\n inlineExternal,\r\n quickFilters: [],\r\n inlineFilterDef,\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n }\r\n\r\n onReset = () => {\r\n this.inlineColumn = {};\r\n this.columnFilter = {};\r\n this.inlineExternal = {};\r\n this.externalFilter = {};\r\n this.inlineFilterDef = {};\r\n this.filterDef = {};\r\n this.#loadDefault();\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.columnFilter,\r\n inlineFilterDef: this.inlineFilterDef,\r\n quickFilters: [],\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClearFilter = () => {\r\n this.#clearFilter();\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.columnFilter,\r\n inlineFilterDef: this.inlineFilterDef,\r\n quickFilters: [],\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n }\r\n\r\n setFilter = (args: {\r\n columnFilter?: any,\r\n externalFilter?: any,\r\n filterDef?: any\r\n }) => {\r\n const { columnFilter, externalFilter, filterDef} = args;\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n if (externalFilter) {\r\n this.externalFilter = externalFilter;\r\n }\r\n if (filterDef) {\r\n this.filterDef = filterDef;\r\n }\r\n for (const externalFilter of this.externalFilters) {\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: this.externalFilter[externalFilter.field]?.from ?? undefined,\r\n to: this.externalFilter[externalFilter.field]?.to ?? undefined\r\n };\r\n }\r\n }\r\n this.ref.markForCheck();\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport * as uuid from 'uuid';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdLoadingService\r\n} from '@sd-angular/core/loading';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport hash from 'object-hash';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdExportFile, SdExportService, SdExportColumn } from '@sd-angular/core/export';\r\nimport { SdGroupExport } from '../../models/grid-export.model';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdGridConfigurationResult } from '../../models/grid-config.model';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdPopupExport implements OnInit, AfterViewInit {\r\n gridOption: SdGridMaterialOption;\r\n columns: SdExportColumn[] = [];\r\n groups: SdGroupExport[] = [];\r\n templateName: string;\r\n enableCreating = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('listGroups') listGroups: MatSelectionList;\r\n\r\n selected: {\r\n [key: string]: boolean\r\n } = {};\r\n files: SdExportFile[] = [];\r\n selectedGroup: SdGroupExport;\r\n\r\n @Output() export = new EventEmitter<{ file: SdExportFile, columns: SdExportColumn[], isCSV?: boolean, isRaw?: boolean }>();\r\n form = new FormGroup({});\r\n\r\n @Input('gridOption') set _gridOption(option: SdGridMaterialOption) {\r\n this.gridOption = option;\r\n this.columns = this.#getExportableColumns();\r\n this.groups = this.#getExportableGroups();\r\n }\r\n @Input() configuration: SdGridConfigurationResult;\r\n private get key(): string {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.gridOption?.export?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: this.gridOption?.export?.key\r\n });\r\n }\r\n\r\n private get gridColumns() {\r\n const columns: SdExportColumn[] = [];\r\n this.gridOption.columns.filter(e => !e.export?.disabled).forEach(column => {\r\n if (column.type === 'image') {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n if (column.type === 'children-col') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.gridOption.export?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExportColumn[] => {\r\n return [...this.gridColumns, ...this.additionalColumns];\r\n }\r\n\r\n #getExportableGroups = () => {\r\n return this.gridOption?.export?.groups?.filter(e => {\r\n const permission = e.permission;\r\n if (typeof (permission) === 'function') {\r\n return permission();\r\n }\r\n return permission;\r\n }) || [];\r\n }\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n if (this.groups.length === 1 && this.gridOption?.export?.hideMyTemplates) {\r\n this.loadFiles(this.groups[0].code);\r\n } else {\r\n this.loadFiles(null);\r\n }\r\n this.selected = {};\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n }\r\n\r\n #getExportColumns = () => {\r\n if (this.configuration) {\r\n const columns = [...this.gridColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdGridMaterialColumn<any>[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.gridOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children' && column.type !== 'children-col') {\r\n return [...first, column];\r\n }\r\n const children = column.children.filter(e1 => e1.type !== 'image');\r\n return [...first, ...children];\r\n }, []);\r\n const results = displayColumns.map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field)\r\n })).filter(e => !!e.data)\r\n .map(e => e.data);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n }\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false\r\n });\r\n }\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true\r\n });\r\n }\r\n\r\n exportRaw = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isRaw: true\r\n });\r\n }\r\n\r\n loadFiles = async (group: string = null) => {\r\n this.selectedGroup = this.groups.find(e => e.code === group);\r\n this.files = await this.exportService.filesInFolder({\r\n key: this.key,\r\n group\r\n });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateTemplate({\r\n fileName: fileName || this.gridOption?.export?.fileName,\r\n columns: this.columns,\r\n sheets\r\n });\r\n }\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n }\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption?.export?.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateUploadTemplate({\r\n key: this.key,\r\n template: {\r\n fileName: fileName || this.gridOption?.export?.fileName,\r\n columns: this.columns.filter(e => this.selected[e.field]),\r\n sheets\r\n },\r\n group: this.selectedGroup?.code\r\n });\r\n }\r\n\r\n onExport = (file: SdExportFile) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n uploadTemplate = async () => {\r\n const file = await this.exportService.uploadTemplate({\r\n key: this.key,\r\n group: this.selectedGroup?.code,\r\n validator: this.gridOption?.export?.validators\r\n });\r\n if (file) {\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n removeFile = (file: SdExportFile) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(() => {\r\n this.exportService.removeFile({\r\n key: this.key,\r\n fileName: file.fileName,\r\n group: this.selectedGroup?.code || null\r\n });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n createTemplate = async () => {\r\n const { translate } = this.translateService;\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.notify.warning(translate('Please select columns'));\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n if (this.gridOption?.export?.validators?.(fileName)) {\r\n this.notifyService.notify.warning(this.gridOption?.export?.validators(fileName));\r\n return;\r\n }\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n if (result?.filePath) {\r\n const file: SdExportFile = {\r\n filePath: result.filePath,\r\n fileName: result.fileName\r\n };\r\n this.onExport(file);\r\n this.templateName = null;\r\n this.enableCreating = false;\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n }\r\n\r\n onChangeGroup = () => {\r\n this.loadFiles(this.listGroups?.selectedOptions?.selected[0]?.value);\r\n }\r\n\r\n validatorTemplateName = (val: string) => {\r\n const { translate } = this.translateService;\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return translate('Please enter your template name');\r\n }\r\n if (val.length > 50) {\r\n return translate('Template name is too long');\r\n }\r\n if (!regex.test(val)) {\r\n return translate('Template name only contains letters, numbers and spaces');\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSettingService } from '@sd-angular/core/setting';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdColumnConfiguration, SdGridConfiguration, SdGridConfigurationCache, SdGridConfigurationResult } from '../models/grid-config.model';\r\nimport { SdMaterialSubInformationDefDirective } from '../directives/sd-material-sub-information-def.directive';\r\nimport { Subject } from 'rxjs';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { GRID_MATERIAL_CONFIG, ISdGridMaterialConfiguration } from '../models/grid-configuration.model';\r\n\r\n@Injectable()\r\nexport class SdGridConfigurationService {\r\n #COLUMNS = {\r\n EDITORVALIDATION: 'sdEditorValidation',\r\n EDITOR: 'sdEditor',\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup'\r\n };\r\n #cache: {\r\n [key: string]: SdGridConfigurationCache\r\n } = {};\r\n constructor(\r\n private settingService: SdSettingService,\r\n @Inject(GRID_MATERIAL_CONFIG) @Optional() public gridMaterialConfiguration: ISdGridMaterialConfiguration) {\r\n }\r\n\r\n init = (key: string, gridOption: SdGridMaterialOption) => {\r\n if (!this.#cache[key]) {\r\n const subject = new Subject<SdGridConfiguration>();\r\n this.#cache[key] = {\r\n load: this.#load(gridOption, subject),\r\n get: this.#get(gridOption),\r\n set: (configuration: SdGridConfiguration) => {\r\n configuration = this.#set(gridOption, configuration);\r\n subject.next({ ...configuration });\r\n return configuration;\r\n },\r\n remove: () => {\r\n this.#remove(gridOption)();\r\n subject.next(this.#default(gridOption));\r\n },\r\n observer: subject\r\n };\r\n }\r\n return this.#cache[key];\r\n }\r\n\r\n #getKey = (gridOption: SdGridMaterialOption) => {\r\n const prefix = 'c9e94836-6ace-4aeb-b148-4f0be63589ee';\r\n if (!gridOption?.config?.key && !gridOption?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: gridOption?.config?.key || !gridOption?.key\r\n });\r\n }\r\n\r\n #default = (gridOption: SdGridMaterialOption): SdGridConfiguration => {\r\n const columns: SdColumnConfiguration[] = gridOption?.columns?.filter(e => !e.hidden).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 #load = (gridOption: SdGridMaterialOption, subject: Subject<SdGridConfiguration>) => {\r\n return async () => {\r\n const get = this.#get(gridOption);\r\n const configuration = await get();\r\n subject.next({ ...configuration });\r\n };\r\n }\r\n\r\n #get = (gridOption: SdGridMaterialOption) => {\r\n return async () => {\r\n const key = this.#getKey(gridOption);\r\n if (!key) {\r\n return this.#default(gridOption);\r\n }\r\n const { columns, config } = gridOption;\r\n let configuration: SdGridConfiguration;\r\n if (config?.storage === 'server') {\r\n const { get, remove } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: config?.args\r\n });\r\n configuration = await get().catch(() => undefined);\r\n if (!configuration?.columns) {\r\n remove().catch(console.error);\r\n return this.#default(gridOption);\r\n }\r\n } else {\r\n const { get, remove } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: config?.storage,\r\n args: config?.args\r\n });\r\n configuration = get();\r\n if (!configuration?.columns) {\r\n remove();\r\n return this.#default(gridOption);\r\n }\r\n }\r\n\r\n configuration.columns = configuration.columns\r\n .filter(column => column.isGeneratedColumn || columns.some(e => !e.hidden && e.field === column.origin.field));\r\n // Thêm những column mới vào storage nếu có\r\n columns.forEach(column => {\r\n const col = configuration.columns.find(e => e.origin?.field === column.field);\r\n if (!col) {\r\n configuration.columns.push({\r\n origin: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n invisible: column.invisible,\r\n },\r\n invisible: column.invisible,\r\n fixed: false\r\n });\r\n } else {\r\n col.origin = {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n invisible: column.invisible\r\n };\r\n }\r\n });\r\n return configuration;\r\n };\r\n }\r\n\r\n #set = (gridOption: SdGridMaterialOption, configuration: SdGridConfiguration) => {\r\n const key = this.#getKey(gridOption);\r\n if (key) {\r\n if (gridOption?.config?.storage === 'server') {\r\n const { set } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: gridOption?.config?.args\r\n });\r\n set(configuration);\r\n } else {\r\n const { set } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: gridOption?.config?.storage,\r\n args: gridOption?.config?.args\r\n });\r\n set(configuration);\r\n }\r\n }\r\n return JSON.parse(JSON.stringify(configuration));\r\n }\r\n\r\n #remove = (gridOption: SdGridMaterialOption) => {\r\n return () => {\r\n const key = this.#getKey(gridOption);\r\n if (key) {\r\n if (gridOption?.config?.storage === 'server') {\r\n const { remove } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: gridOption?.config?.args\r\n });\r\n remove();\r\n } else {\r\n const { remove } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: gridOption?.config?.storage,\r\n args: gridOption?.config?.args\r\n });\r\n remove();\r\n }\r\n }\r\n };\r\n }\r\n\r\n // get = async (gridOption: SdGridMaterialOption): Promise<SdGridConfiguration> => {\r\n // if (!gridOption?.key) {\r\n // return this.#getDefaultConfiguration(gridOption);\r\n // }\r\n // const { key, columns } = gridOption;\r\n // const configuration: SdGridConfiguration = await this.settingService.get(this.#getKey(key)).catch(() => undefined);\r\n // if (!configuration?.columns) {\r\n // this.settingService.remove(this.#getKey(key)).catch(console.error);\r\n // return this.#getDefaultConfiguration(gridOption);\r\n // }\r\n // configuration.columns = configuration.columns\r\n // .filter(column => columns.some(e => !e.hidden && e.field === column.origin.field));\r\n // // Thêm những column mới vào storage nếu có\r\n // columns.forEach(column => {\r\n // const col = configuration.columns.find(e => e.origin?.field === column.field);\r\n // if (!col) {\r\n // configuration.columns.push({\r\n // origin: {\r\n // field: column.field,\r\n // title: column.title,\r\n // width: column.width,\r\n // invisible: column.invisible,\r\n // },\r\n // invisible: column.invisible,\r\n // fixed: false\r\n // });\r\n // } else {\r\n // col.origin = {\r\n // field: column.field,\r\n // title: column.title,\r\n // width: column.width,\r\n // invisible: column.invisible\r\n // };\r\n // }\r\n // });\r\n // return configuration;\r\n // }\r\n\r\n // set = async (key: string, configuration: SdGridConfiguration): Promise<SdGridConfiguration> => {\r\n // if (key) {\r\n // this.settingService.set(this.#getKey(key), configuration);\r\n // }\r\n // return configuration;\r\n // }\r\n\r\n // remove = (key: string) => {\r\n // if (key) {\r\n // this.settingService.remove(this.#getKey(key));\r\n // }\r\n // }\r\n\r\n generateConfigurationResult = (\r\n configuration: SdGridConfiguration,\r\n gridOption: SdGridMaterialOption,\r\n sdSubInformation: SdMaterialSubInformationDefDirective) => {\r\n const result: SdGridConfigurationResult = {\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 { selection, commands, editor, group } = gridOption || {};\r\n if (editor?.addable || (editor?.type === 'inline' && (editor?.removable || typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'focus' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))) {\r\n result.firstHeaders.push(this.#COLUMNS.EDITORVALIDATION);\r\n result.displayedColumns.push(this.#COLUMNS.EDITORVALIDATION);\r\n }\r\n if (selection?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (!editor?.hidden) {\r\n if (editor?.addable\r\n || (editor?.type === 'inline' && (editor?.removable || typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'focus' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'popup' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))) {\r\n result.firstHeaders.push(this.#COLUMNS.EDITOR);\r\n result.displayedColumns.push(this.#COLUMNS.EDITOR);\r\n }\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?.filter(col => !col.invisible).forEach(col => {\r\n if (col.isGeneratedColumn) {\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 const generatedColumn: SdGridMaterialColumn = {\r\n type: 'children',\r\n field: col.origin.field,\r\n title: col.origin.title,\r\n children: []\r\n };\r\n for (const subColumn of gridOption?.columns.filter(e1 => col.generatedColumns.includes(e1.field))) {\r\n if (subColumn.type === 'children' || subColumn.type === 'children-col') {\r\n for (const childColumn of subColumn.children) {\r\n generatedColumn.children.push({\r\n ...childColumn,\r\n colSpan: 2\r\n });\r\n }\r\n } else {\r\n generatedColumn.children.push({\r\n ...subColumn,\r\n colSpan: 2\r\n });\r\n }\r\n\r\n }\r\n result.firstColumns.push({\r\n ...generatedColumn,\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 return;\r\n }\r\n const column = gridOption?.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 if (column.type === 'children-col') {\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 } else {\r\n result.displayedColumns.push(col.origin.field);\r\n }\r\n }\r\n });\r\n if (sdSubInformation?.templateRef) {\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","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnValues'\r\n})\r\nexport class SdColumnValuesPipe implements PipeTransform {\r\n #prefix = 'a1e67660-8aa2-4c11-b02d-71a32188719f';\r\n #cache: {\r\n [key: string]: {\r\n result: any\r\n }\r\n } = {};\r\n transform = async (value: any, column: SdGridMaterialColumn): Promise<string> => {\r\n if (column.type !== 'values' || !column.option?.items || !column.option?.valueField || !column.option?.displayField) {\r\n return value;\r\n }\r\n const { items, valueField, displayField, ...remain } = column.option;\r\n const key = hash({\r\n prefix: this.#prefix,\r\n valueField,\r\n displayField,\r\n remain,\r\n value\r\n });\r\n if (typeof (items) === 'function') {\r\n if (!this.#cache[key]) {\r\n const values = await items(value, true);\r\n this.#cache[key] = {\r\n result: values?.find(e => e?.[valueField] === value)?.[displayField] || value\r\n };\r\n }\r\n } else {\r\n if (!this.#cache[key]) {\r\n this.#cache[key] = {\r\n result: items?.find(e => e?.[valueField] === value)?.[displayField] || value\r\n };\r\n }\r\n }\r\n return this.#cache[key].result;\r\n }\r\n}\r\n","import hash from 'object-hash';\r\nimport { SdItem } from \"../models/grid.model\";\r\n\r\nexport const CalculateSdId = (item: SdItem) => {\r\n const {\r\n sdId,\r\n editorHandlerColumn,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n sdGroup,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n originItem,\r\n editorErrorMessage,\r\n editorHandlerRow,\r\n ...remain } = item;\r\n return hash(remain);\r\n}","import { Injectable, NgZone, Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { CalculateSdId } from '../functions/calculate-sd-id';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorHandlerColumn'\r\n})\r\n@Injectable()\r\nexport class SdEditorHandlerColumnPipe implements PipeTransform {\r\n constructor(private zone: NgZone) { }\r\n #visible = (col: SdGridMaterialColumn, item: SdItem) => {\r\n if (col.type === 'children' || col.type === 'children-col') {\r\n return false;\r\n }\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (col.editor) {\r\n const isDisabled = typeof (col.editor.disabled) === 'function' ? col.editor.disabled(item) : col.editor.disabled;\r\n if (isDisabled) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n transform(value: any, item: SdItem, gridOption: SdGridMaterialOption) {\r\n const key = CalculateSdId(item);\r\n if (item.sdId === key && item.editorHandlerColumn) {\r\n return true;\r\n }\r\n item.editorHandlerColumn = item.editorHandlerColumn || {};\r\n const { columns } = gridOption;\r\n for (const col of columns) {\r\n if (col.type === 'children-col') {\r\n for (const childCol of col.children) {\r\n item.editorHandlerColumn[childCol.field] = {\r\n ...item.editorHandlerColumn[childCol.field],\r\n visible: this.#visible(childCol, item)\r\n }\r\n }\r\n } else {\r\n item.editorHandlerColumn[col.field] = {\r\n ...item.editorHandlerColumn[col.field],\r\n visible: this.#visible(col, item)\r\n }\r\n }\r\n }\r\n this.zone.run(() => {\r\n item.sdId = CalculateSdId(item);\r\n });\r\n item.sdId = key;\r\n return 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 EventEmitter,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport * as uuid from 'uuid';\r\nimport {\r\n SdGridMaterialFilterRequest\r\n} from './models/grid-filter.model';\r\nimport {\r\n SdGridMaterialOption\r\n} from './models/grid-option.model';\r\nimport {\r\n GRID_MATERIAL_CONFIG,\r\n DEFAULT_GRID_MATERIAL_CONFIG,\r\n ISdGridMaterialConfiguration\r\n} from './models/grid-configuration.model';\r\nimport { Subscription, isObservable, Observable, Subject, defer, from } from 'rxjs';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdGridMaterialColumn } from './models/grid-column.model';\r\nimport { SdMaterialCellDefDirective } from './directives/sd-material-cell-def.directive';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { SdGridFilter } from './components/grid-filter/grid-filter.component';\r\nimport { SdMaterialFilterDefDirective } from './directives/sd-material-filter-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-material-sub-information-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-material-footer-def.directive';\r\nimport { SdMaterialEmptyDataDefDirective } from './directives/sd-material-empty-data-def.directive';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SdExportColumn, SdExportFile, SdExportService } from '@sd-angular/core/export';\r\nimport { SdGridConfiguration, SdGridConfigurationResult } from './models/grid-config.model';\r\nimport { SdGridConfigurationService } from './services/grid-configuration.service';\r\nimport { SdGridMaterialExportColumn } from './models/grid-export.model';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdQuickAction } from '@sd-angular/core/quick-action';\r\nimport { SdGridMaterialItem, SdItem } from './models/grid.model';\r\nimport { SdColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { SdEditorHandlerColumnPipe } from './pipes/editor-handler-column.pipe';\r\nimport { SdScrollDirective } from '@sd-angular/core/common';\r\n\r\n@Component({\r\n selector: 'sd-grid-material',\r\n templateUrl: './grid-material.component.html',\r\n styleUrls: ['./grid-material.component.scss'],\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 SdGridMaterial<T = any> implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(SdScrollDirective) sdScroll: SdScrollDirective;\r\n key = uuid.v4();\r\n gridConfigurationObserver: Observable<SdGridConfiguration>;\r\n gridFilter: SdGridFilter;\r\n @ViewChild(SdQuickAction) quickAction: SdQuickAction;\r\n @ViewChild(SdGridFilter) set _gridFilter(gridFilter: SdGridFilter) {\r\n if (gridFilter && this.gridFilter !== gridFilter) {\r\n this.gridFilter = gridFilter;\r\n this.#subscription.add(gridFilter.filterChange.pipe(\r\n map(() => {\r\n this.#paginator.pageIndex = 0;\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\r\n }\r\n }\r\n\r\n @Input() set option(option: SdGridMaterialOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.gridOption = option;\r\n this.#loadCompleted = false;\r\n this.#reload.next(true);\r\n option?.columns?.forEach(col => {\r\n if (col.filter?.default) {\r\n this.columnFilter[col.field] = col.filter.default;\r\n }\r\n });\r\n const configuration = this.gridConfigurationService.init(this.key, this.gridOption);\r\n this.gridConfigurationObserver = configuration.observer;\r\n configuration.load();\r\n }\r\n }\r\n\r\n gridOption: SdGridMaterialOption;\r\n #localItems: any[] = [];\r\n items: SdGridMaterialItem<T>[] = [];\r\n selectedItems: 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(paginator.page.pipe(\r\n map(() => {\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\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(sort.sortChange.pipe(\r\n map(() => {\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\r\n }\r\n }\r\n\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport: SdPopupExport;\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective) sdSubInformation: SdMaterialSubInformationDefDirective;\r\n\r\n // Empty Data\r\n @ContentChild(SdMaterialEmptyDataDefDirective) sdEmptyData: SdMaterialEmptyDataDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdMaterialCellDefDirective) sdCellDefs = new QueryList<SdMaterialCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdMaterialCellDefDirective\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(SdMaterialFilterDefDirective) sdFilterDefs = new QueryList<SdMaterialFilterDefDirective>();\r\n filterDefs: SdMaterialFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnFilter: {\r\n [key: string]: any\r\n } = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<boolean>();\r\n isExporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(GRID_MATERIAL_CONFIG) @Optional() public configuration: ISdGridMaterialConfiguration,\r\n private gridConfigurationService: SdGridConfigurationService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService,\r\n private columnValuesPipe: SdColumnValuesPipe,\r\n private editorHandlerColumnPipe: SdEditorHandlerColumnPipe) {\r\n }\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n #loadCompleted = false;\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#reload.pipe(\r\n debounceTime(200),\r\n startWith(true),\r\n switchMap(async force => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n ).subscribe(this.#render));\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 \r\n // this.#subscription.add(this.#optionChanges.pipe(\r\n // debounceTime(200),\r\n // startWith({}),\r\n // map(this.#getFilter),\r\n // switchMap(filterInfo => this.#load(filterInfo, true))\r\n // ).subscribe(this.#render));\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.sdMaterialCellDef) {\r\n this.cellDef[cellDef.sdMaterialCellDef] = 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 this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdMaterialFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdMaterialFooterDef] = footerDef;\r\n }\r\n }\r\n }\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdGridMaterialFilterRequest => {\r\n return {\r\n rawColumnFilter: (this.gridOption?.filter?.inlineColumn ? this.columnFilter : this.gridFilter?.columnFilter) || {},\r\n rawExternalFilter: this.gridFilter?.externalFilter || {},\r\n rawFilterDef: this.gridFilter?.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: SdGridMaterialOption) => {\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.configuration?.paginate?.pageSize ?? DEFAULT_GRID_MATERIAL_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.configuration?.paginate?.pages ?? DEFAULT_GRID_MATERIAL_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? false\r\n };\r\n return option;\r\n }\r\n\r\n #filterLocal = (localItems: any[], filterInfo: SdGridMaterialFilterRequest) => {\r\n const { columns } = this.gridOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(item => {\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field] || '').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') {\r\n if (columnValue !== filterValue) {\r\n return false;\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 if (new Date(columnValue).getTime() < fromDate.getTime() || new Date(columnValue).getTime() >= toDate.getTime()) {\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((current, next) => {\r\n if (type === 'number') {\r\n return (current[field] || 0) - (next[field] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date(current[field] || '').getTime();\r\n const d2 = new Date(current[field] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = (current[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\r\n && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length\r\n };\r\n }\r\n\r\n #getFilter = (): SdGridMaterialFilterRequest => ({\r\n rawColumnFilter: (this.gridOption?.filter?.inlineColumn ? this.columnFilter : this.gridFilter?.columnFilter) || {},\r\n rawExternalFilter: this.gridFilter?.externalFilter || {},\r\n rawFilterDef: this.gridFilter?.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.gridOption?.paginate?.pageSize || 50\r\n })\r\n\r\n #load = async (filterReq: SdGridMaterialFilterRequest, force: boolean = true) => {\r\n this.isLoading = true;\r\n try {\r\n if (this.gridOption.type === 'server') {\r\n let result = this.gridOption.items(filterReq);\r\n if (isObservable(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n if (force) {\r\n const results = this.gridOption.items();\r\n if (results instanceof Promise) {\r\n this.#localItems = await results;\r\n } else {\r\n this.#localItems = results;\r\n }\r\n }\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n }\r\n } catch (error) {\r\n this.notifyService.handle.error(error);\r\n } finally {\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n #render = async (args: { items: any[], total: number }) => {\r\n this.sdScroll?.scrollTop();\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n // this.isHiddenPaginator = this.filterInfo.pageNumber === 0 && this.total <= this.filterInfo.pageSize;\r\n this.items.forEach((item: SdItem) => {\r\n item.originItem = { ...item };\r\n });\r\n await this.gridOption?.reload?.onReload?.(this.items);\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n\r\n reload = async (force: boolean = true) => {\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.gridOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.gridOption.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.gridOption.type === 'server') {\r\n let result = this.gridOption.items(filterInfo);\r\n if (isObservable(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof (this.gridOption.items) === 'function') {\r\n const results = this.gridOption.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.gridOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterInfo);\r\n }\r\n }\r\n }\r\n\r\n drop(event: CdkDragDrop<string[]>, columns: string[]) {\r\n moveItemInArray(columns, event.previousIndex, event.currentIndex);\r\n }\r\n\r\n #allColumns = (): SdGridMaterialColumn[] => {\r\n const columns: SdGridMaterialColumn[] = [];\r\n this.gridOption.columns.filter(e => !e.export?.disabled).forEach(column => {\r\n if (column.type === 'image') {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n if (column.type === 'children-col') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\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 = (): SdGridMaterialExportColumn[] => {\r\n return this.gridOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n }\r\n\r\n #onExport = async (args: { file: SdExportFile, columns: SdExportColumn[], isCSV: boolean, isRaw: boolean }) => {\r\n try {\r\n const { file, isCSV, isRaw } = args;\r\n let { columns } = args;\r\n const pageSize = this.gridOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.gridOption?.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<any[] | {\r\n items: any[];\r\n total: number;\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.gridOption.export?.mapping) {\r\n const results = this.gridOption.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' || column.type === 'children-col') {\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 if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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') {\r\n // Nếu là values thì lấy giá trị của value được chọn\r\n obj[column.field] = await this.columnValuesPipe.transform(item[column.field], column);\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n }\r\n while (pageNumber * pageSize < total) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n if (!file?.filePath) {\r\n if (isCSV) {\r\n await this.exportService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.gridOption?.export?.fileName\r\n });\r\n return;\r\n }\r\n if (isRaw) {\r\n await this.exportService.exportExcelRaw({\r\n columns,\r\n items,\r\n fileName: this.gridOption?.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.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption.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.gridOption?.export?.fileName,\r\n sheets\r\n });\r\n return;\r\n }\r\n await this.exportService.exportByTemplate({\r\n filePath: file.filePath,\r\n fileName: file.fileName,\r\n columns,\r\n items\r\n });\r\n } finally {\r\n this.isExporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onExport = async (args: { file: SdExportFile, columns: SdExportColumn[], isCSV: boolean, isRaw: boolean }) => {\r\n const { translate } = this.translateService;\r\n if (!args.isCSV && this.gridOption.export.max && this.total > this.gridOption.export.max) {\r\n args.isRaw = true;\r\n this.#onExport(args);\r\n // this.notifyService.confirm(translate(`Total rows reach limit, do you want to export CSV`)).then(() => {\r\n // args.isCSV = true;\r\n // this.#onExport(args);\r\n // });\r\n return;\r\n }\r\n this.#onExport(args);\r\n }\r\n\r\n onFilterChange = () => {\r\n this.#paginator.pageIndex = 0;\r\n this.reload(false);\r\n }\r\n\r\n onExpand = async (rowData: SdGridMaterialItem<T>) => {\r\n if (this.gridOption.subInformation?.always) {\r\n return;\r\n }\r\n if (rowData.isExpanding) {\r\n return;\r\n }\r\n if (rowData.isExpanded) {\r\n rowData.isExpanded = false;\r\n return;\r\n }\r\n const data = this.gridOption?.subInformation?.onExpand?.(rowData);\r\n if (!this.gridOption.subInformation?.multiple) {\r\n this.items.forEach(item => item.isExpanding = item.isExpanded = false);\r\n }\r\n if (data instanceof Promise) {\r\n rowData.isExpanding = true;\r\n data.then(res => {\r\n rowData.expandDetail = res;\r\n rowData.isExpanded = true;\r\n }).finally(() => rowData.isExpanding = false);\r\n } else {\r\n rowData.expandDetail = data;\r\n rowData.isExpanded = true;\r\n }\r\n }\r\n\r\n onSelect = (rowData: SdGridMaterialItem<T>) => {\r\n if (rowData?.sdGroup?.items?.length) {\r\n rowData?.sdGroup?.items.forEach(e => e.isSelected = rowData.isSelected);\r\n this.gridOption.selection?.onSelect?.(rowData, this.items.filter(e => e.isSelected));\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.gridOption.selection?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => e.isSelected = false);\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.gridOption.selection?.onSelect?.(rowData, this.items.filter(e => e.isSelected));\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n }\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.selectable && (!this.gridOption?.selection?.actions?.length || e.actions?.length)) {\r\n e.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.gridOption.selection?.onSelectAll?.(this.items.filter(e => e.isSelected));\r\n this.#updateSelectedItems();\r\n }\r\n\r\n onClearSelection = (items?: SdGridMaterialItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => e.isSelected = false);\r\n this.#updateSelectedItems();\r\n }\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedItems = this.items.filter(item => item.isSelected)\r\n .map(item => {\r\n const {\r\n isSelected,\r\n isExpanded,\r\n isExpanding,\r\n expandDetail,\r\n editorErrorMessage,\r\n editorHandlerColumn,\r\n editorHandlerRow,\r\n editorStatus,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n // Giữ lại các trường thông tin cho selectable (action, groupedAction, sdGroup, selectable)\r\n ...result\r\n } = item;\r\n return result;\r\n }) as T[];\r\n this.ref.detectChanges();\r\n }\r\n\r\n clearFilter = () => {\r\n this.gridFilter?.onClearFilter();\r\n }\r\n\r\n setFilter = (args: {\r\n columnFilter: any,\r\n externalFilter: any,\r\n filterDef: any\r\n }) => {\r\n this.gridFilter?.setFilter(args);\r\n }\r\n\r\n onCreate = () => {\r\n const { type, editor, columns } = this.gridOption;\r\n if (!editor?.addable) {\r\n return;\r\n }\r\n const item: SdGridMaterialItem = {};\r\n // Gán giá trị mặc định\r\n columns.forEach(column => {\r\n if (column.type === 'values') {\r\n item[column.field] = '';\r\n } else if (column.type === 'bool') {\r\n item[column.field] = true;\r\n } else if (column.type === 'number') {\r\n item[column.field] = null;\r\n }\r\n });\r\n if (type === 'local') {\r\n editor.onAdd?.(item, this.#localItems);\r\n } else {\r\n editor.onAdd?.(item, this.items);\r\n }\r\n // Đưa item lên dòng đầu tiên nếu type khác popup\r\n if (editor.type !== 'popup') {\r\n if (editor.addToLast) {\r\n if (type === 'local') {\r\n this.#localItems = [...this.#localItems, item];\r\n }\r\n this.items = [...this.items, item];\r\n } else {\r\n if (type === 'local') {\r\n this.#localItems = [item, ...this.#localItems];\r\n }\r\n this.items = [item, ...this.items];\r\n }\r\n }\r\n item.editorStatus = 'create';\r\n item.editorHandlerRow = {\r\n temporary: { ...item }\r\n };\r\n }\r\n onUpdate = (item: SdItem) => {\r\n const { editor } = this.gridOption;\r\n item.editorStatus = 'update';\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n temporary: { ...item }\r\n };\r\n // this.generateEditorHanlder(item);\r\n if (editor.type === 'popup') {\r\n // Xử lý case popup\r\n // this.sdGridPopupEditor.open(item, columns, isModified);\r\n }\r\n this.ref.detectChanges();\r\n }\r\n onSave = async (item: SdGridMaterialItem<T>) => {\r\n if (item.editorHandlerRow.saving) {\r\n return;\r\n }\r\n const { editor } = this.gridOption;\r\n try {\r\n item.editorHandlerRow.saving = true;\r\n if (editor.validate) {\r\n const result = editor.validate(item, this.items.indexOf(item));\r\n if (result instanceof Promise) {\r\n const message = await result;\r\n if (message) {\r\n throw message;\r\n }\r\n } else {\r\n if (result) {\r\n throw result;\r\n }\r\n }\r\n }\r\n if (editor.onSave) {\r\n const result = editor.onSave(item);\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n if (item.editorStatus === 'create' && editor.type === 'popup') {\r\n if (this.gridOption.type === 'local') {\r\n this.items.splice(0, 0, item);\r\n }\r\n // this.viewItems.splice(0, 0, item);\r\n }\r\n\r\n item.editorStatus = undefined;\r\n // this.generateEditorHanlder(item);\r\n } catch (err) {\r\n this.notifyService.notify.warning(err);\r\n } finally {\r\n item.editorHandlerRow.saving = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n onCancel = (item: SdGridMaterialItem<T>) => {\r\n const { editor } = this.gridOption;\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n if (this.gridOption.type === 'local') {\r\n editor?.onCancel?.(item, this.#localItems);\r\n } else {\r\n editor?.onCancel?.(item, this.items);\r\n }\r\n this.ref.detectChanges();\r\n return;\r\n }\r\n if (editor.type === 'focus') {\r\n if (item.editorStatus === 'create') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n } else {\r\n Object.assign(item, item.editorHandlerRow.temporary);\r\n }\r\n }\r\n item.editorStatus = undefined;\r\n this.ref.detectChanges();\r\n }\r\n onRemove = (item: SdGridMaterialItem<T>) => {\r\n const { editor } = this.gridOption;\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n if (this.gridOption.type === 'local') {\r\n editor?.onRemove?.(item, this.#localItems);\r\n } else {\r\n editor?.onRemove?.(item, this.items);\r\n }\r\n this.ref.detectChanges();\r\n return;\r\n }\r\n }\r\n\r\n add = (idx: number, item: T) => {\r\n if (this.items.length > idx) {\r\n this.items.splice(idx, 0, item);\r\n this.items = [...this.items];\r\n } else {\r\n this.items = [...this.items, item];\r\n }\r\n }\r\n\r\n update = (idx: number, item: T) => {\r\n if (this.items[idx]) {\r\n Object.assign(this.items[idx], item);\r\n this.items = [...this.items];\r\n }\r\n }\r\n\r\n remove = (idx: number) => {\r\n if (this.items[idx]) {\r\n this.items.splice(idx, 1);\r\n this.items = [...this.items];\r\n }\r\n }\r\n\r\n refreshItem = (idx: number) => {\r\n const item = this.items[idx];\r\n this.editorHandlerColumnPipe.transform(item.sdVersion, item, this.gridOption);\r\n }\r\n\r\n get editedItems(): (T & { editorErrorMessage: string })[] {\r\n return this.items.filter(item => {\r\n if (!item.originItem) {\r\n return true;\r\n }\r\n if (Object.keys(item.originItem).some(key => item.originItem[key] !== item[key])) {\r\n return true;\r\n }\r\n return false;\r\n }).map(item => {\r\n const {\r\n editorStatus,\r\n editorHandlerRow,\r\n editorHandlerColumn,\r\n editorErrorMessage,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n sdGroup,\r\n temporary,\r\n ...result } = item;\r\n return {\r\n ...result,\r\n editorErrorMessage\r\n } as any;\r\n });\r\n }\r\n\r\n get gridItems(): T[] {\r\n return this.items.map(item => {\r\n const {\r\n editorStatus,\r\n editorHandlerRow,\r\n editorHandlerColumn,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n sdGroup,\r\n temporary,\r\n ...result } = item;\r\n return result as T;\r\n });\r\n }\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n get isEditing() {\r\n return this.items.some(e => e.editorStatus !== undefined);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand, SdGridMaterialCommandNormal } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class SdCommandFilterPipe implements PipeTransform {\r\n async transform(item: any, commands: SdGridMaterialCommand[]): Promise<SdGridMaterialCommand[]> {\r\n const results: SdGridMaterialCommand[] = [];\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);\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: SdGridMaterialCommandNormal[] = [];\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);\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 { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandDisable'\r\n})\r\nexport class SdCommandDisablePipe implements PipeTransform {\r\n transform(item: any, command: SdGridMaterialCommand): boolean {\r\n if (!command?.disabled) {\r\n return false;\r\n }\r\n if (typeof (command.disabled) === 'boolean') {\r\n return command.disabled;\r\n }\r\n return command.disabled(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class SdCommandIconPipe implements PipeTransform {\r\n transform(command: SdGridMaterialCommand, item: any): string {\r\n if (!command?.icon) {\r\n return '';\r\n }\r\n if (typeof (command.icon) === 'string') {\r\n return command.icon;\r\n }\r\n return command.icon(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class SdCommandTitlePipe implements PipeTransform {\r\n transform(command: SdGridMaterialCommand, item: any): string {\r\n if (!command?.title) {\r\n return '';\r\n }\r\n if (typeof (command.title) === 'string') {\r\n return command.title;\r\n }\r\n return command.title(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnHtmlTemplate'\r\n})\r\nexport class SdColumnHtmlTemplatePipe implements PipeTransform {\r\n private isMobileOrTablet = false;\r\n constructor(deviceService: DeviceDetectorService) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n transform(value: any, rowData: any, column: SdGridMaterialColumn): string {\r\n if (typeof (column?.htmlTemplate) !== 'function') {\r\n return value;\r\n }\r\n return column?.htmlTemplate(value, rowData, this.isMobileOrTablet);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.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() sdId: string;\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n @Input() gridOption: SdGridMaterialOption;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdColumnValuesPipe } from './column-values.pipe';\r\n@Pipe({\r\n name: 'columnTransform'\r\n})\r\nexport class SdColumnTransformPipe implements PipeTransform {\r\n constructor(private columnValuesPipe: SdColumnValuesPipe) { }\r\n async transform(value: any, rowData: any, column: SdGridMaterialColumn, key?: string): Promise<string> {\r\n if (column?.transform) {\r\n return column.transform(value, rowData);\r\n }\r\n if (column.type === 'values') {\r\n return await this.columnValuesPipe.transform(value, column);\r\n }\r\n if (column.type === 'number' && Number.isNumber(value)) {\r\n return Number.toVNCurrency(value); // this.decimalPipe.transform(value, '1.0-2');\r\n }\r\n if (column.type === 'bool') {\r\n return value === true ? (column.option?.displayOnTrue || 'True') : (column.option?.displayOnFalse || 'False');\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialExternalFilter } from '../models/grid-filter.model';\r\n@Pipe({\r\n name: 'sdFilterExternal'\r\n})\r\nexport class SdFilterExternalPipe implements PipeTransform {\r\n transform(externalFilters: SdGridMaterialExternalFilter[], field?: string): SdGridMaterialExternalFilter[] {\r\n const results: SdGridMaterialExternalFilter[] = [];\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 { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'sdFilterColumn'\r\n})\r\nexport class SdFilterColumnPipe implements PipeTransform {\r\n transform(columns: SdGridMaterialColumn[], field?: string): SdGridMaterialColumn[] {\r\n const results: SdGridMaterialColumn[] = [];\r\n if (!columns) {\r\n return results;\r\n }\r\n for (const column of columns) {\r\n if (column.type === 'image') {\r\n continue;\r\n }\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 { Component, Input } from '@angular/core';\r\nimport { SdGridMaterialColumnChildren } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-children-view',\r\n templateUrl: './desktop-cell-children-view.component.html',\r\n styleUrls: ['./desktop-cell-children-view.component.scss']\r\n})\r\nexport class SdDesktopCellChildrenView {\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumnChildren;\r\n @Input() item: any;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n\r\n@Pipe({\r\n name: 'columnChildrenFilter'\r\n})\r\nexport class SdColumnChildrenFilterPipe implements PipeTransform {\r\n #isMobileOrTablet = false;\r\n constructor(deviceService: DeviceDetectorService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n transform(columns: SdGridMaterialColumn[], item: any): SdGridMaterialColumn[] {\r\n return columns.filter(column => {\r\n const value = item?.[column.field];\r\n const transformValue = column.transform?.(item[column.field], item);\r\n const templateValue = column.htmlTemplate?.(item[column.field], item, this.#isMobileOrTablet);\r\n return (value !== undefined && value !== null && value !== '')\r\n || (transformValue !== undefined && transformValue !== null && transformValue !== '')\r\n || (templateValue !== undefined && templateValue !== null && templateValue !== '');\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialChildColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnTitle'\r\n})\r\nexport class SdColumnTitlePipe implements PipeTransform {\r\n async transform(item: any, column: SdGridMaterialChildColumn): Promise<string> {\r\n if (!column?.title) {\r\n return '';\r\n }\r\n const result = column?.dynamicTitle?.(item);\r\n if (result instanceof Promise) {\r\n return (await result) || column?.title;\r\n }\r\n return result || column?.title;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../../models/grid-command.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: any;\r\n @Input() commands: SdGridMaterialCommand[] = [];\r\n constructor() {\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdBadgeColor } from '@sd-angular/core/badge';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnBadge'\r\n})\r\nexport class SdColumnBadgePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: any, rowData: any, column: SdGridMaterialColumn): {\r\n type: 'round' | 'circle' | 'icon',\r\n color: SdBadgeColor,\r\n icon: string\r\n } {\r\n if (column.type === 'string' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n if (column.type === 'number' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n if (column.type === 'bool') {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: !!value ? 'success' : 'danger',\r\n icon: null\r\n };\r\n }\r\n if (column.type === 'values' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdGridConfiguration, SdGridConfigurationResult } from '../models/grid-config.model';\r\nimport { SdGridConfigurationService } from '../services/grid-configuration.service';\r\nimport { SdMaterialSubInformationDefDirective } from '../directives/sd-material-sub-information-def.directive';\r\n\r\n@Pipe({\r\n name: 'sdGridConfigurationResult'\r\n})\r\nexport class SdGridConfigurationResultPipe implements PipeTransform {\r\n constructor(private gridConfigurationService: SdGridConfigurationService) { }\r\n transform(configuration: SdGridConfiguration, gridOption: SdGridMaterialOption, sdSubInformation: SdMaterialSubInformationDefDirective): SdGridConfigurationResult {\r\n return this.gridConfigurationService.generateConfigurationResult(configuration, gridOption, sdSubInformation);\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 { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdGridConfigurationResult, SdGridConfiguration, SdGridConfigurationCache, SdColumnConfiguration } from '../../models/grid-config.model';\r\nimport { SdGridConfigurationService } from '../../services/grid-configuration.service';\r\nimport * as uuid from 'uuid';\r\nimport { MatTable } from '@angular/material/table';\r\n// import { SdGridMaterialColumn } from '@sd-angular/core/grid-material';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-grid-configuration',\r\n templateUrl: './popup-grid-configuration.component.html',\r\n styleUrls: ['./popup-grid-configuration.component.scss']\r\n})\r\nexport class SdPopupGridConfiguration implements OnInit {\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() key: string;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('table') table: MatTable<SdGridMaterialColumn>;\r\n readonly changes = new EventEmitter<SdGridConfigurationResult>();\r\n #cache: SdGridConfigurationCache;\r\n configuration: SdGridConfiguration;\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 translateService: SdTranslateService,\r\n private gridConfigurationService: SdGridConfigurationService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n mouseUp(event) {\r\n this.disabledDrag = true;\r\n }\r\n open = async () => {\r\n this.#cache = this.gridConfigurationService.init(this.key, this.gridOption);\r\n this.configuration = await this.#cache.get();\r\n this.modal.open();\r\n }\r\n\r\n onSave = () => {\r\n this.#cache.set(this.configuration);\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n onReset = async () => {\r\n const { translate } = this.translateService;\r\n this.notifyService.confirm(translate('Reset grid configuration to default')).then(() => {\r\n this.#cache.remove();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n createColumn = async () => {\r\n this.selected = {};\r\n this.isCreatingColumn = true;\r\n }\r\n\r\n confirm = async () => {\r\n const generatedColumn: SdColumnConfiguration = {\r\n origin: {\r\n field: uuid.v4(),\r\n title: 'Generated',\r\n width: '300px'\r\n },\r\n fixed: false,\r\n invisible: false,\r\n title: 'Generated',\r\n width: '300px',\r\n isGeneratedColumn: true,\r\n generatedColumns: this.configuration.columns.filter(e => this.selected[e.origin?.field]).map(e => e.origin?.field)\r\n };\r\n this.configuration.columns.push(generatedColumn);\r\n this.configuration = this.#cache.set(this.configuration);\r\n this.isCreatingColumn = false;\r\n }\r\n\r\n dropTable(event: CdkDragDrop<SdGridMaterialColumn[]>) {\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 { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../models/grid-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: SdGridMaterialColumn): 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 { SdGridMaterialAction, SdGridMaterialActionNormal, SdGridMaterialActionSimple } from '../models/grid-action.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionActionFilter'\r\n})\r\nexport class SdSelectionActionFilterPipe implements PipeTransform {\r\n #convert = (action: SdGridMaterialAction): SdGridMaterialActionSimple => {\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: SdItem[], actions: SdGridMaterialAction[]): SdGridMaterialActionSimple[] => {\r\n const results: SdGridMaterialAction[] = [];\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: SdGridMaterialActionNormal[] = [];\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.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.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 { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionDisable'\r\n})\r\nexport class SdSelectionDisablePipe implements PipeTransform {\r\n transform = (selectedItems: SdItem[], rowData: SdItem, selection: SdGridMaterialSelection): boolean => {\r\n const { disabled, actions } = selection;\r\n if (!actions?.length) {\r\n if (!disabled) {\r\n rowData.selectable = true;\r\n return false;\r\n }\r\n rowData.selectable = !disabled(rowData, selectedItems);\r\n return !rowData.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.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.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.actions.includes(hash(childAction))) {\r\n return false;\r\n }\r\n }\r\n } else {\r\n if(rowData.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 { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionVisibleSelectAll'\r\n})\r\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\r\n transform = async (items: SdItem[], selection: SdGridMaterialSelection): 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.actions?.length);\r\n if (first) {\r\n for (const action of first.actions) {\r\n if (items.filter(t => t.actions?.length).every(e => e.actions.includes(action))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\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 { SdGridMaterialConfigOption } from '../../models/grid-config.model';\r\nimport { SdGeneratedColumn } from './generated-column.model';\r\nimport { SdSettingServer } from '@sd-angular/core/setting';\r\n\r\n@Injectable()\r\nexport class SdGeneratedColumnService {\r\n #cache: {\r\n [key: string]: SdSetting<SdGeneratedColumn[]> | SdSettingServer<SdGeneratedColumn[]>\r\n } = {};\r\n constructor(\r\n private settingService: SdSettingService) {\r\n }\r\n\r\n load = (configuration: SdGridMaterialConfigOption) => {\r\n if (!configuration?.key) {\r\n return null;\r\n }\r\n const key = hash({\r\n prefix: '260f5e94-5865-4425-8ced-b9c083c390dd',\r\n key: configuration.key\r\n });\r\n if(!this.#cache[key]) {\r\n if(configuration?.storage === 'server') {\r\n this.#cache[key] = this.settingService.createServer<SdGeneratedColumn[]>(key, {\r\n args: configuration?.args,\r\n default: []\r\n });\r\n } else {\r\n this.#cache[key] = this.settingService.create<SdGeneratedColumn[]>(key, {\r\n type: configuration?.storage,\r\n args: configuration?.args,\r\n default: []\r\n });\r\n }\r\n }\r\n return this.#cache[key];\r\n }\r\n\r\n loadSystem = (configuration: SdGridMaterialConfigOption) => {\r\n if (!configuration?.key) {\r\n return null;\r\n }\r\n if (!configuration?.systemColumn) {\r\n return null;\r\n }\r\n const key = hash({\r\n prefix: '8b8050ca-1f44-4860-bad3-20e646c0d68f',\r\n key: configuration.key\r\n });\r\n if(!this.#cache[key]) {\r\n if(configuration?.storage === 'server') {\r\n this.#cache[key] = this.settingService.createServer<SdGeneratedColumn[]>(key, {\r\n args: configuration?.systemColumn?.args,\r\n default: []\r\n });\r\n } else {\r\n this.#cache[key] = this.settingService.create<SdGeneratedColumn[]>(key, {\r\n type: configuration?.storage,\r\n args: configuration?.systemColumn?.args,\r\n default: []\r\n });\r\n }\r\n }\r\n return this.#cache[key];\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, ChangeDetectorRef, Input, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdGridConfigurationService } from '../../services/grid-configuration.service';\r\nimport * as uuid from 'uuid';\r\nimport { SdGeneratedColumnService } from '../../services/generated-column/generated-column.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdGeneratedColumn } from '../../services/generated-column/generated-column.model';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSideDrawer } from '@sd-angular/core/side-drawer';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-dynamic-column',\r\n templateUrl: './dynamic-column.component.html',\r\n styleUrls: ['./dynamic-column.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDynamicColumn implements OnInit, OnDestroy {\r\n @ViewChild(SdSideDrawer) sideDrawer: SdSideDrawer;\r\n @Input() gridOption: SdGridMaterialOption;\r\n systemColumns: SdGeneratedColumn[];\r\n columns: SdGeneratedColumn[];\r\n #subscription = new Subscription();\r\n columnTypes = ['string', 'number', 'bool', 'date', 'datetime', 'time', 'values', 'children', 'children-col'];\r\n form = new FormGroup({});\r\n isDetail = false;\r\n detail: SdGeneratedColumn;\r\n originColumns: SdGridMaterialColumn[] = [];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private generatedColumnService: SdGeneratedColumnService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService,\r\n private gridConfigurationService: SdGridConfigurationService) {\r\n }\r\n\r\n ngOnInit() {\r\n const systemSetting = this.generatedColumnService.loadSystem(this.gridOption.config);\r\n const setting = this.generatedColumnService.load(this.gridOption?.config);\r\n if (systemSetting) {\r\n this.#subscription?.add(systemSetting.observer.subscribe(columns => {\r\n this.systemColumns = columns;\r\n }));\r\n }\r\n if (setting) {\r\n this.#subscription?.add(setting.observer.subscribe(columns => {\r\n this.columns = columns;\r\n }));\r\n }\r\n this.originColumns = this.gridOption.columns.filter(e => e.type !== 'children' && e.type !== 'children-col');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onDetail = (column?: SdGeneratedColumn) => {\r\n this.detail = column || {\r\n field: uuid.v4(),\r\n title: '',\r\n type: 'string',\r\n isSystem: false,\r\n useTemplate: false\r\n };\r\n this.form.markAsUntouched();\r\n this.form.markAsPristine();\r\n this.isDetail = true;\r\n }\r\n\r\n onSave = () => {\r\n const systemSetting = this.generatedColumnService.loadSystem(this.gridOption.config);\r\n const setting = this.generatedColumnService.load(this.gridOption?.config);\r\n if (this.detail.isSystem) {\r\n if (!this.detail.id) {\r\n systemSetting.set([...this.systemColumns, {\r\n ...this.detail,\r\n id: uuid.v4()\r\n }]);\r\n } else {\r\n systemSetting.set([...this.systemColumns]);\r\n }\r\n } else {\r\n if (!this.detail.id) {\r\n setting.set([...this.columns, {\r\n ...this.detail,\r\n id: uuid.v4()\r\n }]);\r\n } else {\r\n setting.set([...this.columns]);\r\n }\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdMaterialCellDefDirective } from '../../directives/sd-material-cell-def.directive';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.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() sdId: string;\r\n @Input() value: any;\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() cellDef: {\r\n [column: string]: SdMaterialCellDefDirective\r\n } = {};\r\n @Input() idx: number;\r\n constructor(\r\n ) { }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn, SdGridMaterialColumnValues } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-editor',\r\n templateUrl: './desktop-cell-editor.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCellEditor {\r\n @Input() sdId: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n constructor(\r\n ) { }\r\n\r\n onChange = (selected: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n this.column?.editor?.change?.(this.item, selected);\r\n }\r\n\r\n editorOnAdd = () => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.add?.(this.item);\r\n }\r\n }\r\n\r\n editorOnEdit = (option: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.edit?.(option, this.item);\r\n }\r\n }\r\n\r\n editorOnDelete = (option: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.delete?.(option, this.item);\r\n }\r\n }\r\n}\r\n","import { NgZone, Pipe, PipeTransform } from '@angular/core';\r\nimport { CalculateSdId } from '../functions/calculate-sd-id';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { EditorHandlerRow, SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorHandlerRow'\r\n})\r\nexport class SdEditorHandlerRowPipe implements PipeTransform {\r\n constructor(private zone: NgZone) { }\r\n #visible = (col: SdGridMaterialColumn, item: SdItem) => {\r\n if (col.type === 'children' || col.type === 'children-col') {\r\n return false;\r\n }\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (col.editor) {\r\n const isDisabled = typeof (col.editor.disabled) === 'function' ? col.editor.disabled(item) : col.editor.disabled;\r\n if (isDisabled) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n transform(status: 'create' | 'update', item: SdItem, gridOption: SdGridMaterialOption): EditorHandlerRow {\r\n const { editor } = gridOption;\r\n if (!editor) {\r\n return null;\r\n }\r\n let isDisabled = false;\r\n if (typeof (editor?.disabled) === 'function') {\r\n isDisabled = editor.disabled(item);\r\n } else {\r\n isDisabled = editor?.disabled;\r\n }\r\n if (editor.type === 'inline') {\r\n const removable = editor.removable;\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: !isDisabled,\r\n editable: false,\r\n removable: status !== 'create' && (typeof (removable) === 'function' ? removable(item) : removable),\r\n savable: false,\r\n cancelable: !isDisabled && status === 'create'\r\n }\r\n } else if (editor.type === 'focus') {\r\n if (isDisabled) {\r\n return null;\r\n }\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: !!status,\r\n editable: !status,\r\n removable: false,\r\n savable: !!status,\r\n cancelable: !!status\r\n }\r\n } else if (editor.type === 'popup') {\r\n if (isDisabled) {\r\n return null;\r\n }\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: false,\r\n editable: !status,\r\n removable: false,\r\n savable: false,\r\n cancelable: false\r\n }\r\n }\r\n item.editorHandlerColumn = item.editorHandlerColumn || {};\r\n const { columns } = gridOption;\r\n for (const col of columns) {\r\n if (col.type === 'children-col') {\r\n for (const childCol of col.children) {\r\n item.editorHandlerColumn[childCol.field] = {\r\n ...item.editorHandlerColumn[childCol.field],\r\n visible: this.#visible(childCol, item)\r\n }\r\n }\r\n } else {\r\n item.editorHandlerColumn[col.field] = {\r\n ...item.editorHandlerColumn[col.field],\r\n visible: this.#visible(col, item)\r\n }\r\n }\r\n }\r\n this.zone.run(() => {\r\n item.sdId = CalculateSdId(item);\r\n });\r\n return item.editorHandlerRow;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorValidate'\r\n})\r\nexport class SdEditorValidatePipe implements PipeTransform {\r\n #previous: Date;\r\n #delay = 200; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện validate\r\n async transform(sdId: string, item: SdItem, items: SdItem[], gridOption: SdGridMaterialOption): Promise<string> {\r\n const { editor } = gridOption;\r\n if (!editor.validate) {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n if(editor.type === 'popup') {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n if (editor.type === 'focus' && !item.editorStatus) {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n this.#previous = new Date();\r\n await new Promise(resolve => setTimeout(resolve, this.#delay));\r\n const now = new Date();\r\n const dif = now.getTime() - this.#previous.getTime();\r\n if (dif < this.#delay) {\r\n return;\r\n }\r\n const result = editor.validate(item, items?.indexOf(item));\r\n if (result instanceof Promise) {\r\n item.editorErrorMessage = await result;\r\n return;\r\n } else {\r\n item.editorErrorMessage = result;\r\n return;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\n@Pipe({\r\n name: 'sdStyleRowCss'\r\n})\r\nexport class SdStyleRowCss implements PipeTransform {\r\n transform(item: any, gridOption: SdGridMaterialOption) {\r\n return gridOption?.style?.rowCss?.(item) || {};\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-editor-validation',\r\n templateUrl: './desktop-editor-validation.component.html',\r\n styleUrls: ['./desktop-editor-validation.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopEditorValidation {\r\n @Input() sdId: string;\r\n @Input() item: any;\r\n @Input() items: any[];\r\n @Input() gridOption: SdGridMaterialOption;\r\n constructor(\r\n ) { }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../../models/grid-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 @Input() value: any;\r\n @Input() columnFilter: {\r\n [key: string]: any\r\n } = {};\r\n @Input() column: SdGridMaterialColumn;\r\n @Output() filterChange = new EventEmitter();\r\n constructor(\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.column.type === 'date' || this.column.type === 'time' || this.column.type === 'datetime') {\r\n if (!this.column?.option?.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 onFilterChange = () => {\r\n this.filterChange.emit();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n\r\n@Pipe({\r\n name: 'selectionVisible'\r\n})\r\nexport class SdSelectionVisiblePipe implements PipeTransform {\r\n transform = (rowData: SdItem, selection: SdGridMaterialSelection): boolean => {\r\n const { actions } = selection;\r\n const groupedActions: string[] = [];\r\n rowData.actions = rowData.actions || [];\r\n if (!actions?.length) {\r\n rowData.selectable = true;\r\n return rowData.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)) {\r\n flag = true;\r\n rowData.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.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.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)) {\r\n rowData.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n rowData.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n }\r\n rowData.selectable = !!rowData.actions.length;\r\n if (!rowData.selectable || !groupedActions.length || rowData?.sdGroup?.items?.length) {\r\n return rowData.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.actions.some(action => !groupedActions.includes(action));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-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 SdGridQuickAction {\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() selectedItems: any[];\r\n @Output() clear = new EventEmitter();\r\n constructor(\r\n ) { }\r\n onClear = () => {\r\n this.clear.emit();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUtilityService } from '@sd-angular/core/utility';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdCellView } from '../models/grid-cell.model';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdColumnValuesPipe } from './column-values.pipe';\r\n@Pipe({\r\n name: 'cellView'\r\n})\r\nexport class SdCellViewPipe implements PipeTransform {\r\n #maxSecond = 60;\r\n #maxMinute = this.#maxSecond * 60;\r\n #maxHour = this.#maxMinute * 24;\r\n #maxDay = this.#maxHour * 30;\r\n #maxMonth = this.#maxHour * 365;\r\n #isMobileOrTablet = false;\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private utilityService: SdUtilityService,\r\n private columnValuesPipe: SdColumnValuesPipe) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n async transform(\r\n value: any,\r\n rowData: any,\r\n column: SdGridMaterialColumn,\r\n gridOption: SdGridMaterialOption,\r\n key: string): Promise<SdCellView> {\r\n const { displayOnEmpty } = gridOption;\r\n const { align, click, tooltip, htmlTemplate, transform } = column;\r\n const result: SdCellView = {\r\n badge: null,\r\n tooltip: null,\r\n display: {\r\n align: align || (column.type === 'number' ? 'right' : 'left'),\r\n value\r\n },\r\n click: null\r\n };\r\n // Display\r\n if (typeof (htmlTemplate) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = htmlTemplate(value, rowData, this.#isMobileOrTablet);\r\n } else {\r\n if (column.type === 'datetime' || column.type === 'date' || column.type === 'time') {\r\n const { transformDate } = column;\r\n if (transformDate) {\r\n value = transformDate(value, rowData);\r\n }\r\n }\r\n if (typeof (transform) === 'function') {\r\n const val = transform(value, rowData);\r\n if (val instanceof Promise) {\r\n result.display.value = await val;\r\n } else {\r\n result.display.value = val;\r\n }\r\n } else {\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n const { option } = column;\r\n const seconds = Math.round((new Date().getTime() - new Date(value).getTime()) / 1000);\r\n if (option?.timeDifferent === 'month' && seconds < this.#maxMonth) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'day' && seconds < this.#maxDay) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'hour' && seconds < this.#maxHour) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'minute' && seconds < this.#maxMinute) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'second' && seconds < this.#maxSecond) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else {\r\n const date = Date.toFormat(value, 'dd/MM/yyyy');\r\n const time = Date.toFormat(value, 'HH:mm');\r\n const dateTime = Date.toFormat(value, 'HH:mm');\r\n if (column.type === 'datetime' && time && time !== '00:00') {\r\n result.display.value = dateTime;\r\n result.display.hasHtml = true;\r\n result.display.html = `<span class=\"d-block T14R text-black400\">${Date.toFormat(value, 'HH:mm')}</span><span class=\"d-block T14R\">${Date.toFormat(value, 'dd/MM/yyyy')}</span>`;\r\n } else {\r\n result.display.value = date;\r\n }\r\n }\r\n }\r\n if (column.type === 'time') {\r\n result.display.value = Date.toFormat(value, 'HH:mm');\r\n }\r\n if (column.type === 'values') {\r\n result.display.value = await this.columnValuesPipe.transform(value, column);\r\n } else if (column.type === 'number' && Number.isNumber(value)) {\r\n result.display.value = 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 result.display.value = value === true ? (option?.displayOnTrue || 'True') : (option?.displayOnFalse || 'False');\r\n } else {\r\n result.display.value = null;\r\n }\r\n }\r\n }\r\n if (displayOnEmpty) {\r\n let values = [null, undefined, ''];\r\n if (typeof (displayOnEmpty) === 'object') {\r\n const { display, emptyValues } = displayOnEmpty;\r\n values = [null, undefined, '', ...emptyValues];\r\n if (values.includes(result.display.value)) {\r\n if (typeof (display) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = display(rowData, column);\r\n } else {\r\n result.display.hasHtml = true;\r\n result.display.html = `<div class=\"T16R text-black400\">--</div>`;\r\n }\r\n }\r\n } else {\r\n if (values.includes(result.display.value)) {\r\n if (typeof (displayOnEmpty) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = displayOnEmpty(rowData, column);\r\n } else {\r\n result.display.hasHtml = true;\r\n result.display.html = `<div class=\"T16R text-black400\">--</div>`;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Badge\r\n if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n result.badge = {\r\n type: !column?.badgeType ? 'round' : 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 result.badge = {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: !!value ? 'success' : 'danger',\r\n icon: null\r\n };\r\n }\r\n // Tooltip\r\n if (typeof (tooltip) === 'function') {\r\n result.tooltip = tooltip(value, rowData);\r\n }\r\n // Clickable\r\n if (typeof (click) === 'function') {\r\n result.click = () => click(value, rowData);\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdGridMaterialItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdGroup'\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: any[], gridOption: SdGridMaterialOption): SdGridMaterialItem[] {\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]: SdGridMaterialItem[]\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: SdGridMaterialItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n results.push({\r\n sdGroup: {\r\n items: groupItem[key],\r\n htmlTemplate: htmlTemplate(groupItem[key])\r\n }\r\n });\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 { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdGridMaterial } from './grid-material.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 { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSliderModule } from '@angular/material/slider';\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 { SdColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { SdColumnHtmlTemplatePipe } from './pipes/column-html-template.pipe';\r\nimport { SdDesktopCellView } from './components/desktop-cell-view/desktop-cell-view.component';\r\nimport { SdColumnTransformPipe } from './pipes/column-transform.pipe';\r\nimport { SdServiceModule } from '@sd-angular/core/service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { SdMaterialCellDefDirective } from './directives/sd-material-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 { SdGridFilter } from './components/grid-filter/grid-filter.component';\r\nimport { SdPopupFilter } from './components/popup-filter/popup-filter.component';\r\n\r\nimport { SdGridFilterService } from './services/grid-filter.service';\r\nimport { SdDesktopCellChildrenView } from './components/desktop-cell-children-view/desktop-cell-children-view.component';\r\nimport { SdColumnChildrenFilterPipe } from './pipes/column-children-filter.pipe';\r\nimport { SdColumnTitlePipe } from './pipes/column-title.pipe';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdMaterialFilterDefDirective } from './directives/sd-material-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-material-footer-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-material-sub-information-def.directive';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { SdMaterialEmptyDataDefDirective } from './directives/sd-material-empty-data-def.directive';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SdColumnBadgePipe } from './pipes/column-badge.pipe';\r\nimport { SdGridConfigurationResultPipe } from './pipes/grid-configuration-result.pipe';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SdPopupGridConfiguration } from './components/popup-grid-configuration/popup-grid-configuration.component';\r\nimport { SdGridConfigurationService } from './services/grid-configuration.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatDividerModule } from '@angular/material/divider';\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 { SdDynamicColumn } from './components/dynamic-column/dynamic-column.component';\r\nimport { SdGeneratedColumnService } from './services/generated-column/generated-column.service';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdDesktopCellEditor } from './components/desktop-cell-editor/desktop-cell-editor.component';\r\nimport { SdEditorHandlerRowPipe } from './pipes/editor-handler-row.pipe';\r\nimport { SdEditorHandlerColumnPipe } from './pipes/editor-handler-column.pipe';\r\nimport { SdEditorValidatePipe } from './pipes/editor-validate.pipe';\r\nimport { SdStyleRowCss } from './pipes/style-row-css.pipe';\r\nimport { SdDesktopEditorValidation } from './components/desktop-editor-validation/desktop-editor-validation.component';\r\nimport { SdColumnInlineFilter } from './components/column-inline-filter/column-inline-filter.component';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { SdGridQuickAction } from './components/quick-action/quick-action.component';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdCellViewPipe } from './pipes/cell-view.pipe';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\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 FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatFormFieldModule,\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 MatChipsModule,\r\n MatRadioModule,\r\n MatSlideToggleModule,\r\n MatCheckboxModule,\r\n MatListModule,\r\n MatDividerModule,\r\n CdkTableModule,\r\n DragDropModule,\r\n SdFormModule,\r\n SdServiceModule,\r\n MatSliderModule,\r\n ScrollingModule,\r\n SdCommonModule\r\n ],\r\n declarations: [\r\n SdGridQuickAction,\r\n SdDesktopCell,\r\n SdDesktopCellEditor,\r\n SdDesktopEditorValidation,\r\n SdDesktopCellView,\r\n SdDesktopCellChildrenView,\r\n SdDesktopCommand,\r\n SdColumnInlineFilter,\r\n SdGridMaterial,\r\n\r\n SdMaterialFooterDefDirective,\r\n SdMaterialCellDefDirective,\r\n SdMaterialFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n SdMaterialEmptyDataDefDirective,\r\n SdPopupExport,\r\n SdPopupGridConfiguration,\r\n SdGridFilter,\r\n SdPopupFilter,\r\n SdDynamicColumn,\r\n\r\n // Pipes\r\n SdGridConfigurationResultPipe,\r\n SdColumnChildrenFilterPipe,\r\n SdColumnTitlePipe,\r\n SdCommandFilterPipe,\r\n SdCommandDisablePipe,\r\n SdCommandIconPipe,\r\n SdCommandTitlePipe,\r\n SdColumnValuesPipe,\r\n SdColumnHtmlTemplatePipe,\r\n SdColumnTransformPipe,\r\n SdColumnTooltipPipe,\r\n SdColumnBadgePipe,\r\n SdFilterColumnPipe,\r\n SdFilterExternalPipe,\r\n SdSelectionActionFilterPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionDisablePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdEditorHandlerRowPipe,\r\n SdEditorHandlerColumnPipe,\r\n SdEditorValidatePipe,\r\n SdStyleRowCss,\r\n SdCellViewPipe,\r\n SdGroupPipe\r\n ],\r\n exports: [\r\n SdGridMaterial,\r\n SdMaterialFooterDefDirective,\r\n SdMaterialCellDefDirective,\r\n SdMaterialFilterDefDirective,\r\n SdMaterialEmptyDataDefDirective,\r\n SdMaterialSubInformationDefDirective\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdGridFilterService,\r\n SdGridConfigurationService,\r\n SdGeneratedColumnService,\r\n SdColumnValuesPipe,\r\n SdEditorHandlerColumnPipe,\r\n {\r\n provide: MatPaginatorIntl, useClass: MatPaginatorIntlCro\r\n }\r\n ]\r\n})\r\nexport class SdGridMaterialModule {\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-cell-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-filter-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-footer-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-empty-data-def.directive.ts","../../../../projects/sd-core/grid-material/src/lib/directives/sd-material-sub-information-def.directive.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/grid-material/src/lib/models/grid-configuration.model.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-filter/popup-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/services/grid-filter.service.ts","../../../../projects/sd-core/grid-material/src/lib/components/grid-filter/grid-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-export/popup-export.component.ts","../../../../projects/sd-core/grid-material/src/lib/services/grid-configuration.service.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-values.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/functions/calculate-sd-id.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-handler-column.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/grid-material.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-disable.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-html-template.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-transform.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/filter-external.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/filter-column.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-children-view/desktop-cell-children-view.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-children-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-title.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-command/desktop-command.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-badge.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/grid-configuration-result.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/popup-grid-configuration/popup-grid-configuration.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/column-tooltip.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-action-filter.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-disable.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-visible-select-all.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/services/generated-column/generated-column.service.ts","../../../../projects/sd-core/grid-material/src/lib/components/dynamic-column/dynamic-column.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell/desktop-cell.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-handler-row.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/editor-validate.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/style-row-css.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/desktop-editor-validation/desktop-editor-validation.component.ts","../../../../projects/sd-core/grid-material/src/lib/components/column-inline-filter/column-inline-filter.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/selection-visible.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/components/quick-action/quick-action.component.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/cell-view.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/pipes/sd-group.pipe.ts","../../../../projects/sd-core/grid-material/src/lib/grid-material.module.ts"],"names":["templateRef","this","Directive","args","selector","TemplateRef","Input","SdMaterialFilterDefDirective","Object","defineProperty","prototype","val","defaultShowing","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__rest","s","e","t","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","apply","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","push","create","__values","o","m","__read","r","ar","error","__spread","arguments","concat","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","DEFAULT_GRID_MATERIAL_CONFIG","pageSize","pages","GRID_MATERIAL_CONFIG","InjectionToken","SdPopupFilter","cdRef","_this","externalFilters","externalFilter","inlineExternal","columns","columnFilter","inlineColumn","filterDefs","filterDef","inlineFilterDef","changeFilter","EventEmitter","clearFilter","open","JSON","parse","stringify","modal","markForCheck","close","onApply","emit","onClear","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","ChangeDetectorRef","ViewChild","Output","settingService","_prefix","key","prefix","selectedQuickFilter","quickFilters","configuration","_b","_a","hash","Injectable","SdSettingService","SdGridFilter","ref","deviceService","gridFilterService","isVisible","_filterOptionChanges","Subject","filterChange","_subscription","Subscription","_loadDefault","_u","_v","column","field","filter","_c","_d","default","_w","_x","_e","type","from","_j","_g","_f","_h","undefined","to","_o","_l","_k","_m","_p","_y","_z","sdMaterialFilterDef","_q","_clearFilter","_s","_t","onFilter","item","popupFilter","onChangeFilter","onReset","onClearFilter","setFilter","externalFilter_1","isMobileOrTablet","isDesktop","disabled","ngAfterViewInit","add","pipe","startWith","subscribe","ngOnDestroy","unsubscribe","DeviceDetectorService","SdGridFilterService","SdPopupExport","loadingService","exportService","notifyService","translateService","groups","enableCreating","selected","files","export","form","FormGroup","_getExportableColumns","gridColumns","additionalColumns","_getExportableGroups","gridOption","permission","hideMyTemplates","loadFiles","code","detectChanges","exportDefault","_getExportColumns","columns_1","displayColumns","firstColumns","secondColumns","reduce","first","find","children","e1","map","assign","data","file","isCSV","exportCSV","exportRaw","isRaw","group","selectedGroup","filesInFolder","_initTemplate","fileName","sheets","isArray","sheet","name","items","fields","_0","_1","_3","generateTemplate","start","finally","stop","generateAndUploadTemplate","generateUploadTemplate","onExport","uploadTemplate","validator","_r","validators","removeFile","confirm","translate","idx","splice","createTemplate","invalid","markAllAsTouched","some","notify","warning","templateName","filePath","onChangeGroup","listGroups","selectedOptions","validatorTemplateName","test","option","forEach","childColumn","title","description","width","ngOnInit","SdLoadingService","SdExportService","SdNotifyService","SdTranslateService","gridMaterialConfiguration","_COLUMNS","EDITORVALIDATION","EDITOR","SUBINFORMATION","COMMAND","SELECTION","GROUP","_cache","init","subject_1","load","_load","_get","_set","remove","_remove","_default","observer","_getKey","config","hidden","origin","invisible","fixed","subject","storage","createServer","catch","console","isGeneratedColumn","col","generateConfigurationResult","sdSubInformation","fixedColumn","firstHeaders","secondHeaders","displayedColumns","displayedFooters","multipleHeader","selection","commands","editor","addable","removable","visible","generatedColumn","generatedColumns","includes","subColumn","e_2","colSpan","Inject","Optional","transform","valueField","displayField","remain","_prefix$1","_cache$1","values","Pipe","CalculateSdId","sdId","editorHandlerColumn","expandDetail","isExpanded","isExpanding","isSelected","sdGroup","selectable","actions","groupedActions","originItem","editorErrorMessage","editorHandlerRow","SdEditorHandlerColumnPipe","zone","_visible","columns_1_1","childCol","run","NgZone","SdGridMaterial","gridConfigurationService","columnValuesPipe","editorHandlerColumnPipe","uuid.v4","_localItems","selectedItems","isLoading","isHiddenPaginator","_paginator","_sort","sdCellDefs","QueryList","cellDef","sdFooterDefs","footerDef","hasFooter","sdFilterDefs","_reload","isExporting","isSelectAll","exportTitle","_loadCompleted","_initCellDef","_5","_6","sdMaterialCellDef","_initFilterDef","_initFooterDef","sdMaterialFooterDef","_filterExportInfo","pageNumber","rawColumnFilter","gridFilter","rawExternalFilter","rawFilterDef","orderBy","active","orderDirection","direction","isExported","_initConfiguration","paginate","showFirstLastButtons","_filterLocal","localItems","filterInfo","filterValue","toString","trim","toLowerCase","columnValue","fValue","replace","cValue","fromDate","Date","begin","toDate","end","getTime","type_1","field_1","sort","current","s1","s2","reverse","index","total","_getFilter","pageIndex","filterReq","force","isObservable","toPromise","results","_4","handle","error_1","_render","sdScroll","scrollTop","reload","onReload","every","_updateSelectedItems","_load$1","_exportedItems","exportedItems","_allColumns","_allExportedColumns","_onExport","columns_2","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","exportColumn","exportedColumn","_8","displayOnTrue","displayOnFalse","date","transformDate","toFormat","_7","e_8","columns_3","columns_3_1","exportItems_2","exportItems_2_1","_10","exportExcelRaw","exportByTemplate","max","onFilterChange","onExpand","rowData","subInformation","always","multiple","res","onSelect","single","onSelectAll","onClearSelection","editorStatus","sdVersion","onCreate","onAdd","addToLast","temporary","onUpdate","onSave","saving","validate","message","err_1","onCancel","idx2","idx1","onRemove","beforeRemove","_2","update","refreshItem","_subscription$1","gridConfigurationObserver","paginator","page","sortChange","debounceTime","switchMap","changes","drop","event","moveItemInArray","previousIndex","currentIndex","keys","animations","trigger","style","height","minHeight","visibility","transition","animate","SdGridConfigurationService","SdColumnValuesPipe","SdScrollDirective","SdQuickAction","MatPaginator","MatSort","ContentChild","SdMaterialSubInformationDefDirective","SdMaterialEmptyDataDefDirective","ContentChildren","SdMaterialCellDefDirective","SdMaterialFooterDefDirective","SdCommandFilterPipe","commands_1","commands_1_1","command","flag","isHidden","e_1","childCommand","hidden_1","SdCommandDisablePipe","SdCommandIconPipe","icon","SdCommandTitlePipe","SdColumnHtmlTemplatePipe","htmlTemplate","SdColumnTransformPipe","Number","isNumber","toVNCurrency","SdFilterExternalPipe","externalFilters_1","externalFilters_1_1","SdFilterColumnPipe","columnChildren","SdColumnChildrenFilterPipe","_isMobileOrTablet","transformValue","templateValue","SdColumnTitlePipe","dynamicTitle","SdColumnBadgePipe","badge","badgeType","color","badgeIcon","SdGridConfigurationResultPipe","SdPopupGridConfiguration","isCreatingColumn","disabledDrag","_cache$2","createColumn","mouseUp","dropTable","table","renderRows","handleMouseDown","handleMouseUp","HostListener","SdColumnTooltipPipe","tooltip","_convert","action","fontSet","click","childAction","key_1","actions_1","actions_1_1","availableActions","availableActions_1","availableActions_1_1","isGrouped","setTimeout","_cache$3","loadSystem","systemColumn","SdDynamicColumn","generatedColumnService","columnTypes","isDetail","originColumns","onDetail","detail","isSystem","useTemplate","markAsUntouched","markAsPristine","systemSetting","setting","id","systemColumns","_subscription$2","SdGeneratedColumnService","SdSideDrawer","onChange","change","editorOnAdd","editorOnEdit","edit","editorOnDelete","delete","SdEditorHandlerRowPipe","status","isDisabled","editable","savable","cancelable","_visible$1","SdEditorValidatePipe","_previous","_delay","now","SdStyleRowCss","rowCss","SdColumnInlineFilter","useFilterDate","hasGroup","clear","SdCellViewPipe","utilityService","_maxSecond","_maxMinute","_maxHour","_maxDay","_maxMonth","_isMobileOrTablet$1","displayOnEmpty","align","display","hasHtml","html","seconds","timeDifferent","timeDifference","time","dateTime","emptyValues","SdUtilityService","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","FormsModule","ReactiveFormsModule","MatInputModule","MatFormFieldModule","MatSortModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatChipsModule","MatRadioModule","MatSlideToggleModule","MatCheckboxModule","MatListModule","MatDividerModule","CdkTableModule","DragDropModule","SdFormModule","SdServiceModule","MatSliderModule","ScrollingModule","SdCommonModule","declarations","SdGridQuickAction","SdDesktopCell","SdDesktopCellEditor","SdDesktopEditorValidation","SdDesktopCellView","SdDesktopCellChildrenView","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: '[sdMaterialCellDef]'\r\n})\r\nexport class SdMaterialCellDefDirective {\r\n @Input() sdMaterialCellDef: 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: '[sdMaterialFilterDef]'\r\n})\r\nexport class SdMaterialFilterDefDirective {\r\n @Input() sdMaterialFilterDef: string;\r\n @Input('defaultShowing') set showing(val: boolean | '') {\r\n this.defaultShowing = (val === '') || val;\r\n }\r\n defaultShowing: boolean;\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: '[sdMaterialFooterDef]'\r\n})\r\nexport class SdMaterialFooterDefDirective {\r\n @Input() sdMaterialFooterDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdMaterialEmptyDataDef]'\r\n})\r\nexport class SdMaterialEmptyDataDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdMaterialSubInformationDef]'\r\n})\r\nexport class SdMaterialSubInformationDefDirective {\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\n\r\nexport interface ISdGridMaterialConfiguration {\r\n filter?: {\r\n quickFilter?: boolean;\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_GRID_MATERIAL_CONFIG: ISdGridMaterialConfiguration = {\r\n paginate: {\r\n pageSize: 50,\r\n pages: [50, 100, 200]\r\n }\r\n};\r\n\r\nexport const GRID_MATERIAL_CONFIG = new InjectionToken<ISdGridMaterialConfiguration>('sd-grid-material.configuration');\r\n","import { Component, ViewChild, Output, EventEmitter, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialExternalFilter } from '../../models/grid-filter.model';\r\nimport { SdMaterialFilterDefDirective } from '../../directives/sd-material-filter-def.directive';\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('modal') modal: SdModal;\r\n @Input() externalFilters: SdGridMaterialExternalFilter[] = [];\r\n externalFilter: any = {};\r\n inlineExternal: {\r\n [key: string]: boolean\r\n } = {};\r\n @Input() columns: SdGridMaterialColumn[] = [];\r\n columnFilter: any = {};\r\n inlineColumn: {\r\n [key: string]: boolean\r\n } = {};\r\n\r\n @Input() filterDefs: SdMaterialFilterDefDirective[] = [];\r\n filterDef: any = {};\r\n inlineFilterDef: {\r\n [key: string]: boolean;\r\n } = {};\r\n\r\n @Output() changeFilter = new EventEmitter<{\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }>();\r\n @Output() clearFilter = new EventEmitter();\r\n constructor(\r\n private cdRef: ChangeDetectorRef\r\n ) {\r\n }\r\n\r\n open = (args: {\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }) => {\r\n const { inlineColumn, columnFilter, inlineExternal, externalFilter, inlineFilterDef, filterDef } = args;\r\n this.inlineColumn = JSON.parse(JSON.stringify(inlineColumn || {}));\r\n this.columnFilter = JSON.parse(JSON.stringify(columnFilter || {}));\r\n this.inlineExternal = JSON.parse(JSON.stringify(inlineExternal || {}));\r\n this.externalFilter = JSON.parse(JSON.stringify(externalFilter || {}));\r\n this.inlineFilterDef = JSON.parse(JSON.stringify(inlineFilterDef || {}));\r\n this.filterDef = JSON.parse(JSON.stringify(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.changeFilter.emit({\r\n inlineColumn: this.inlineColumn || {},\r\n columnFilter: this.columnFilter || {},\r\n inlineExternal: this.inlineExternal || {},\r\n externalFilter: this.externalFilter || {},\r\n inlineFilterDef: this.inlineFilterDef || {},\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.clearFilter.emit();\r\n this.modal.close();\r\n this.cdRef.markForCheck();\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 { SdGridMaterialFilterConfiguration } from '../models/grid-filter.model';\r\n\r\n@Injectable()\r\nexport class SdGridFilterService {\r\n #prefix = '61d22e8e-eee8-4aad-8e1c-044a532fea91';\r\n constructor(private settingService: SdSettingService) {\r\n }\r\n get = async (key: string): Promise<SdGridMaterialFilterConfiguration> => {\r\n if (!key) {\r\n return {\r\n selectedQuickFilter: null,\r\n quickFilters: [],\r\n inlineExternal: {},\r\n inlineColumn: {},\r\n inlineFilterDef: {}\r\n };\r\n }\r\n const { get } = this.settingService.create<SdGridMaterialFilterConfiguration>({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n const configuration = await get();\r\n return {\r\n selectedQuickFilter: configuration?.selectedQuickFilter ?? null,\r\n quickFilters: configuration?.quickFilters || [],\r\n inlineExternal: configuration?.inlineExternal || {},\r\n inlineColumn: configuration?.inlineColumn || {},\r\n inlineFilterDef: configuration?.inlineFilterDef || {},\r\n };\r\n }\r\n\r\n set = async (key: string, configuration: SdGridMaterialFilterConfiguration): Promise<SdGridMaterialFilterConfiguration> => {\r\n configuration = {\r\n selectedQuickFilter: configuration?.selectedQuickFilter || null,\r\n quickFilters: configuration?.quickFilters || [],\r\n inlineExternal: configuration.inlineExternal || {},\r\n inlineColumn: configuration.inlineColumn || {},\r\n inlineFilterDef: configuration.inlineFilterDef || {}\r\n };\r\n if (!key) {\r\n return configuration;\r\n }\r\n const { set } = this.settingService.create<SdGridMaterialFilterConfiguration>({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n key = hash({\r\n prefix: this.#prefix,\r\n key\r\n });\r\n await set(configuration);\r\n return configuration;\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport { SdGridMaterialFilterOption, SdGridMaterialExternalFilter } from '../../models/grid-filter.model';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdPopupFilter } from '../popup-filter/popup-filter.component';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdGridFilterService } from '../../services/grid-filter.service';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdMaterialFilterDefDirective } from '../../directives/sd-material-filter-def.directive';\r\n\r\n@Component({\r\n selector: 'sd-grid-filter',\r\n templateUrl: './grid-filter.component.html',\r\n styleUrls: ['./grid-filter.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGridFilter implements AfterViewInit, OnDestroy {\r\n @ViewChild(SdPopupFilter) popupFilter: SdPopupFilter;\r\n isVisible = true;\r\n filter: Readonly<SdGridMaterialFilterOption>;\r\n #filterOptionChanges = new Subject<SdGridMaterialFilterOption>();\r\n @Input('filter') set _filter(filter: SdGridMaterialFilterOption) {\r\n this.filter = filter;\r\n this.isVisible = !this.filter?.disabled;\r\n this.#filterOptionChanges.next(this.filter);\r\n }\r\n @Input() columns: SdGridMaterialColumn[] = [];\r\n @Input() filterDefs: SdMaterialFilterDefDirective[] = [];\r\n filterDef: any = {};\r\n inlineFilterDef: {\r\n [key: string]: boolean;\r\n } = {};\r\n\r\n @Output() filterChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n\r\n columnFilter: any = {};\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n externalFilters: SdGridMaterialExternalFilter[] = [];\r\n externalFilter: any = {};\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n isMobileOrTablet: boolean;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private deviceService: DeviceDetectorService,\r\n private gridFilterService: SdGridFilterService) {\r\n this.isMobileOrTablet = !this.deviceService.isDesktop();\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#filterOptionChanges.pipe(startWith(this.filter)).subscribe(() => {\r\n if (!this.isVisible) {\r\n this.filterChange.emit();\r\n return;\r\n }\r\n this.externalFilters = this.filter?.externalFilters || [];\r\n this.gridFilterService.get(this.filter?.key).then(configuration => {\r\n this.inlineColumn = configuration.inlineColumn;\r\n this.inlineExternal = configuration.inlineExternal;\r\n this.inlineFilterDef = configuration.inlineFilterDef;\r\n this.#loadDefault();\r\n this.filterChange.emit();\r\n });\r\n this.ref.markForCheck();\r\n }));\r\n }\r\n\r\n #loadDefault = () => {\r\n for (const column of this.columns) {\r\n this.inlineColumn[column.field] = this.inlineColumn[column.field] ?? column?.filter?.defaultShowing;\r\n this.columnFilter[column.field] = this.columnFilter[column.field] ?? column?.filter?.default;\r\n }\r\n for (const externalFilter of this.externalFilters) {\r\n this.inlineExternal[externalFilter.field] = this.inlineExternal[externalFilter.field] ?? externalFilter?.defaultShowing;\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: this.externalFilter[externalFilter.field]?.from ?? externalFilter.default?.from ?? undefined,\r\n to: this.externalFilter[externalFilter.field]?.to ?? externalFilter.default?.to ?? undefined\r\n };\r\n } else {\r\n this.externalFilter[externalFilter.field] = this.externalFilter[externalFilter.field] ?? externalFilter.default;\r\n }\r\n }\r\n for (const filterDef of this.filterDefs) {\r\n this.inlineFilterDef[filterDef.sdMaterialFilterDef] = this.inlineFilterDef[filterDef.sdMaterialFilterDef] ?? filterDef?.defaultShowing;\r\n }\r\n }\r\n\r\n #clearFilter = () => {\r\n this.columnFilter = {};\r\n this.externalFilter = {};\r\n this.filterDef = {};\r\n for (const externalFilter of this.externalFilters) {\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: undefined,\r\n to: undefined\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?: SdGridMaterialColumn | SdGridMaterialExternalFilter) => {\r\n this.filterChange.emit();\r\n }\r\n\r\n open = () => {\r\n this.popupFilter.open({\r\n columnFilter: this.columnFilter,\r\n externalFilter: this.externalFilter,\r\n filterDef: this.filterDef,\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.inlineExternal,\r\n inlineFilterDef: this.inlineFilterDef\r\n });\r\n }\r\n\r\n onChangeFilter = (args: {\r\n inlineColumn: {\r\n [key: string]: boolean\r\n },\r\n columnFilter: any,\r\n inlineExternal: {\r\n [key: string]: boolean\r\n }\r\n externalFilter: any,\r\n inlineFilterDef: {\r\n [key: string]: boolean\r\n },\r\n filterDef: any\r\n }) => {\r\n const { inlineColumn, columnFilter, inlineExternal, externalFilter, inlineFilterDef, filterDef } = args;\r\n this.inlineColumn = inlineColumn;\r\n this.columnFilter = columnFilter;\r\n this.inlineExternal = inlineExternal;\r\n this.externalFilter = externalFilter;\r\n this.inlineFilterDef = inlineFilterDef;\r\n this.filterDef = filterDef;\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn,\r\n inlineExternal,\r\n quickFilters: [],\r\n inlineFilterDef,\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n }\r\n\r\n onReset = () => {\r\n this.inlineColumn = {};\r\n this.columnFilter = {};\r\n this.inlineExternal = {};\r\n this.externalFilter = {};\r\n this.inlineFilterDef = {};\r\n this.filterDef = {};\r\n this.#loadDefault();\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.columnFilter,\r\n inlineFilterDef: this.inlineFilterDef,\r\n quickFilters: [],\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClearFilter = () => {\r\n this.#clearFilter();\r\n this.gridFilterService.set(this.filter?.key, {\r\n inlineColumn: this.inlineColumn,\r\n inlineExternal: this.columnFilter,\r\n inlineFilterDef: this.inlineFilterDef,\r\n quickFilters: [],\r\n selectedQuickFilter: null\r\n });\r\n this.filterChange.emit();\r\n }\r\n\r\n setFilter = (args: {\r\n columnFilter?: any,\r\n externalFilter?: any,\r\n filterDef?: any\r\n }) => {\r\n const { columnFilter, externalFilter, filterDef} = args;\r\n if (columnFilter) {\r\n this.columnFilter = columnFilter;\r\n }\r\n if (externalFilter) {\r\n this.externalFilter = externalFilter;\r\n }\r\n if (filterDef) {\r\n this.filterDef = filterDef;\r\n }\r\n for (const externalFilter of this.externalFilters) {\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: this.externalFilter[externalFilter.field]?.from ?? undefined,\r\n to: this.externalFilter[externalFilter.field]?.to ?? undefined\r\n };\r\n }\r\n }\r\n this.ref.markForCheck();\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport * as uuid from 'uuid';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdLoadingService\r\n} from '@sd-angular/core/loading';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport hash from 'object-hash';\r\nimport { MatSelectionList } from '@angular/material/list';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdExportFile, SdExportService, SdExportColumn } from '@sd-angular/core/export';\r\nimport { SdGroupExport } from '../../models/grid-export.model';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdGridConfigurationResult } from '../../models/grid-config.model';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-export',\r\n templateUrl: './popup-export.component.html',\r\n styleUrls: ['./popup-export.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdPopupExport implements OnInit, AfterViewInit {\r\n gridOption: SdGridMaterialOption;\r\n columns: SdExportColumn[] = [];\r\n groups: SdGroupExport[] = [];\r\n templateName: string;\r\n enableCreating = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('listGroups') listGroups: MatSelectionList;\r\n\r\n selected: {\r\n [key: string]: boolean\r\n } = {};\r\n files: SdExportFile[] = [];\r\n selectedGroup: SdGroupExport;\r\n\r\n @Output() export = new EventEmitter<{ file: SdExportFile, columns: SdExportColumn[], isCSV?: boolean, isRaw?: boolean }>();\r\n form = new FormGroup({});\r\n\r\n @Input('gridOption') set _gridOption(option: SdGridMaterialOption) {\r\n this.gridOption = option;\r\n this.columns = this.#getExportableColumns();\r\n this.groups = this.#getExportableGroups();\r\n }\r\n @Input() configuration: SdGridConfigurationResult;\r\n private get key(): string {\r\n const prefix = '93889e78-f971-4a1d-8c73-fe2321af9233';\r\n if (!this.gridOption?.export?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: this.gridOption?.export?.key\r\n });\r\n }\r\n\r\n private get gridColumns() {\r\n const columns: SdExportColumn[] = [];\r\n this.gridOption.columns.filter(e => !e.export?.disabled).forEach(column => {\r\n if (column.type === 'image') {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n if (column.type === 'children-col') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n columns.push(column);\r\n });\r\n return columns.map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width\r\n }));\r\n }\r\n private get additionalColumns() {\r\n return (this.gridOption.export?.columns?.filter(e => !e.export?.disabled) || []).map(e => ({\r\n field: e.field,\r\n title: e.title,\r\n description: e.description,\r\n width: e.width\r\n }));\r\n }\r\n\r\n #getExportableColumns = (): SdExportColumn[] => {\r\n return [...this.gridColumns, ...this.additionalColumns];\r\n }\r\n\r\n #getExportableGroups = () => {\r\n return this.gridOption?.export?.groups?.filter(e => {\r\n const permission = e.permission;\r\n if (typeof (permission) === 'function') {\r\n return permission();\r\n }\r\n return permission;\r\n }) || [];\r\n }\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n open = async () => {\r\n if (!this.key) {\r\n this.exportDefault();\r\n return;\r\n }\r\n if (this.groups.length === 1 && this.gridOption?.export?.hideMyTemplates) {\r\n this.loadFiles(this.groups[0].code);\r\n } else {\r\n this.loadFiles(null);\r\n }\r\n this.selected = {};\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n }\r\n\r\n #getExportColumns = () => {\r\n if (this.configuration) {\r\n const columns = [...this.gridColumns];\r\n const { firstColumns, secondColumns } = this.configuration;\r\n const displayColumns: SdGridMaterialColumn<any>[] = [...firstColumns, ...secondColumns].reduce((first, next) => {\r\n const column = this.gridOption.columns.find(e => e.field === next.field);\r\n if (!column) {\r\n return first;\r\n }\r\n if (column.type !== 'children' && column.type !== 'children-col') {\r\n return [...first, column];\r\n }\r\n const children = column.children.filter(e1 => e1.type !== 'image');\r\n return [...first, ...children];\r\n }, []);\r\n const results = displayColumns.map(e => ({\r\n ...e,\r\n data: columns.find(e1 => e1.field === e.field)\r\n })).filter(e => !!e.data)\r\n .map(e => e.data);\r\n return [...results, ...this.additionalColumns];\r\n } else {\r\n return this.columns;\r\n }\r\n }\r\n\r\n exportDefault = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: false\r\n });\r\n }\r\n\r\n exportCSV = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isCSV: true\r\n });\r\n }\r\n\r\n exportRaw = () => {\r\n this.export.emit({\r\n file: null,\r\n columns: this.#getExportColumns(),\r\n isRaw: true\r\n });\r\n }\r\n\r\n loadFiles = async (group: string = null) => {\r\n this.selectedGroup = this.groups.find(e => e.code === group);\r\n this.files = await this.exportService.filesInFolder({\r\n key: this.key,\r\n group\r\n });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #initTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption.export.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateTemplate({\r\n fileName: fileName || this.gridOption?.export?.fileName,\r\n columns: this.columns,\r\n sheets\r\n });\r\n }\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.#initTemplate().finally(this.loadingService.stop);\r\n }\r\n\r\n generateAndUploadTemplate = async (fileName?: string) => {\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption?.export?.sheets) {\r\n if (sheet.name && sheet.items && sheet.fields) {\r\n if (Array.isArray(sheet.items)) {\r\n sheets.push({\r\n name: sheet.name,\r\n items: sheet.items,\r\n fields: sheet.fields\r\n });\r\n } else {\r\n sheets.push({\r\n name: sheet.name,\r\n items: await sheet.items(),\r\n fields: sheet.fields\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return await this.exportService.generateUploadTemplate({\r\n key: this.key,\r\n template: {\r\n fileName: fileName || this.gridOption?.export?.fileName,\r\n columns: this.columns.filter(e => this.selected[e.field]),\r\n sheets\r\n },\r\n group: this.selectedGroup?.code\r\n });\r\n }\r\n\r\n onExport = (file: SdExportFile) => {\r\n this.export.emit({\r\n file,\r\n columns: this.columns\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n uploadTemplate = async () => {\r\n const file = await this.exportService.uploadTemplate({\r\n key: this.key,\r\n group: this.selectedGroup?.code,\r\n validator: this.gridOption?.export?.validators\r\n });\r\n if (file) {\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n removeFile = (file: SdExportFile) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(() => {\r\n this.exportService.removeFile({\r\n key: this.key,\r\n fileName: file.fileName,\r\n group: this.selectedGroup?.code || null\r\n });\r\n const idx = this.files.indexOf(file);\r\n this.files.splice(idx, 1);\r\n this.files = [...this.files];\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n createTemplate = async () => {\r\n const { translate } = this.translateService;\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (!this.columns.some(e => this.selected[e.field])) {\r\n this.notifyService.notify.warning(translate('Please select columns'));\r\n return;\r\n }\r\n this.loadingService.start();\r\n const fileName = this.templateName + '.xlsx';\r\n try {\r\n if (this.gridOption?.export?.validators?.(fileName)) {\r\n this.notifyService.notify.warning(this.gridOption?.export?.validators(fileName));\r\n return;\r\n }\r\n const result = await this.generateAndUploadTemplate(fileName);\r\n if (result?.filePath) {\r\n const file: SdExportFile = {\r\n filePath: result.filePath,\r\n fileName: result.fileName\r\n };\r\n this.onExport(file);\r\n this.templateName = null;\r\n this.enableCreating = false;\r\n this.files = [...this.files, file];\r\n this.ref.detectChanges();\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n }\r\n\r\n onChangeGroup = () => {\r\n this.loadFiles(this.listGroups?.selectedOptions?.selected[0]?.value);\r\n }\r\n\r\n validatorTemplateName = (val: string) => {\r\n const { translate } = this.translateService;\r\n const regex = /^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$/;\r\n if (!val) {\r\n return translate('Please enter your template name');\r\n }\r\n if (val.length > 50) {\r\n return translate('Template name is too long');\r\n }\r\n if (!regex.test(val)) {\r\n return translate('Template name only contains letters, numbers and spaces');\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdSettingService } from '@sd-angular/core/setting';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdColumnConfiguration, SdGridConfiguration, SdGridConfigurationCache, SdGridConfigurationResult } from '../models/grid-config.model';\r\nimport { SdMaterialSubInformationDefDirective } from '../directives/sd-material-sub-information-def.directive';\r\nimport { Subject } from 'rxjs';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { GRID_MATERIAL_CONFIG, ISdGridMaterialConfiguration } from '../models/grid-configuration.model';\r\n\r\n@Injectable()\r\nexport class SdGridConfigurationService {\r\n #COLUMNS = {\r\n EDITORVALIDATION: 'sdEditorValidation',\r\n EDITOR: 'sdEditor',\r\n SUBINFORMATION: 'sdSubInformationAction',\r\n COMMAND: 'sdCommand',\r\n SELECTION: 'sdSelection',\r\n GROUP: 'sdGroup'\r\n };\r\n #cache: {\r\n [key: string]: SdGridConfigurationCache\r\n } = {};\r\n constructor(\r\n private settingService: SdSettingService,\r\n @Inject(GRID_MATERIAL_CONFIG) @Optional() public gridMaterialConfiguration: ISdGridMaterialConfiguration) {\r\n }\r\n\r\n init = (key: string, gridOption: SdGridMaterialOption) => {\r\n if (!this.#cache[key]) {\r\n const subject = new Subject<SdGridConfiguration>();\r\n this.#cache[key] = {\r\n load: this.#load(gridOption, subject),\r\n get: this.#get(gridOption),\r\n set: (configuration: SdGridConfiguration) => {\r\n configuration = this.#set(gridOption, configuration);\r\n subject.next({ ...configuration });\r\n return configuration;\r\n },\r\n remove: () => {\r\n this.#remove(gridOption)();\r\n subject.next(this.#default(gridOption));\r\n },\r\n observer: subject\r\n };\r\n }\r\n return this.#cache[key];\r\n }\r\n\r\n #getKey = (gridOption: SdGridMaterialOption) => {\r\n const prefix = 'c9e94836-6ace-4aeb-b148-4f0be63589ee';\r\n if (!gridOption?.config?.key && !gridOption?.key) {\r\n return null;\r\n }\r\n return hash({\r\n prefix,\r\n key: gridOption?.config?.key || !gridOption?.key\r\n });\r\n }\r\n\r\n #default = (gridOption: SdGridMaterialOption): SdGridConfiguration => {\r\n const columns: SdColumnConfiguration[] = gridOption?.columns?.filter(e => !e.hidden).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 #load = (gridOption: SdGridMaterialOption, subject: Subject<SdGridConfiguration>) => {\r\n return async () => {\r\n const get = this.#get(gridOption);\r\n const configuration = await get();\r\n subject.next({ ...configuration });\r\n };\r\n }\r\n\r\n #get = (gridOption: SdGridMaterialOption) => {\r\n return async () => {\r\n const key = this.#getKey(gridOption);\r\n if (!key) {\r\n return this.#default(gridOption);\r\n }\r\n const { columns, config } = gridOption;\r\n let configuration: SdGridConfiguration;\r\n if (config?.storage === 'server') {\r\n const { get, remove } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: config?.args\r\n });\r\n configuration = await get().catch(() => undefined);\r\n if (!configuration?.columns) {\r\n remove().catch(console.error);\r\n return this.#default(gridOption);\r\n }\r\n } else {\r\n const { get, remove } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: config?.storage,\r\n args: config?.args\r\n });\r\n configuration = get();\r\n if (!configuration?.columns) {\r\n remove();\r\n return this.#default(gridOption);\r\n }\r\n }\r\n\r\n configuration.columns = configuration.columns\r\n .filter(column => column.isGeneratedColumn || columns.some(e => !e.hidden && e.field === column.origin.field));\r\n // Thêm những column mới vào storage nếu có\r\n columns.forEach(column => {\r\n const col = configuration.columns.find(e => e.origin?.field === column.field);\r\n if (!col) {\r\n configuration.columns.push({\r\n origin: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n invisible: column.invisible,\r\n },\r\n invisible: column.invisible,\r\n fixed: false\r\n });\r\n } else {\r\n col.origin = {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n invisible: column.invisible\r\n };\r\n }\r\n });\r\n return configuration;\r\n };\r\n }\r\n\r\n #set = (gridOption: SdGridMaterialOption, configuration: SdGridConfiguration) => {\r\n const key = this.#getKey(gridOption);\r\n if (key) {\r\n if (gridOption?.config?.storage === 'server') {\r\n const { set } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: gridOption?.config?.args\r\n });\r\n set(configuration);\r\n } else {\r\n const { set } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: gridOption?.config?.storage,\r\n args: gridOption?.config?.args\r\n });\r\n set(configuration);\r\n }\r\n }\r\n return JSON.parse(JSON.stringify(configuration));\r\n }\r\n\r\n #remove = (gridOption: SdGridMaterialOption) => {\r\n return () => {\r\n const key = this.#getKey(gridOption);\r\n if (key) {\r\n if (gridOption?.config?.storage === 'server') {\r\n const { remove } = this.settingService.createServer<SdGridConfiguration>(key, {\r\n args: gridOption?.config?.args\r\n });\r\n remove();\r\n } else {\r\n const { remove } = this.settingService.create<SdGridConfiguration>(key, {\r\n type: gridOption?.config?.storage,\r\n args: gridOption?.config?.args\r\n });\r\n remove();\r\n }\r\n }\r\n };\r\n }\r\n\r\n // get = async (gridOption: SdGridMaterialOption): Promise<SdGridConfiguration> => {\r\n // if (!gridOption?.key) {\r\n // return this.#getDefaultConfiguration(gridOption);\r\n // }\r\n // const { key, columns } = gridOption;\r\n // const configuration: SdGridConfiguration = await this.settingService.get(this.#getKey(key)).catch(() => undefined);\r\n // if (!configuration?.columns) {\r\n // this.settingService.remove(this.#getKey(key)).catch(console.error);\r\n // return this.#getDefaultConfiguration(gridOption);\r\n // }\r\n // configuration.columns = configuration.columns\r\n // .filter(column => columns.some(e => !e.hidden && e.field === column.origin.field));\r\n // // Thêm những column mới vào storage nếu có\r\n // columns.forEach(column => {\r\n // const col = configuration.columns.find(e => e.origin?.field === column.field);\r\n // if (!col) {\r\n // configuration.columns.push({\r\n // origin: {\r\n // field: column.field,\r\n // title: column.title,\r\n // width: column.width,\r\n // invisible: column.invisible,\r\n // },\r\n // invisible: column.invisible,\r\n // fixed: false\r\n // });\r\n // } else {\r\n // col.origin = {\r\n // field: column.field,\r\n // title: column.title,\r\n // width: column.width,\r\n // invisible: column.invisible\r\n // };\r\n // }\r\n // });\r\n // return configuration;\r\n // }\r\n\r\n // set = async (key: string, configuration: SdGridConfiguration): Promise<SdGridConfiguration> => {\r\n // if (key) {\r\n // this.settingService.set(this.#getKey(key), configuration);\r\n // }\r\n // return configuration;\r\n // }\r\n\r\n // remove = (key: string) => {\r\n // if (key) {\r\n // this.settingService.remove(this.#getKey(key));\r\n // }\r\n // }\r\n\r\n generateConfigurationResult = (\r\n configuration: SdGridConfiguration,\r\n gridOption: SdGridMaterialOption,\r\n sdSubInformation: SdMaterialSubInformationDefDirective) => {\r\n const result: SdGridConfigurationResult = {\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 { selection, commands, editor, group } = gridOption || {};\r\n if (editor?.addable || (editor?.type === 'inline' && (editor?.removable || typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'focus' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))) {\r\n result.firstHeaders.push(this.#COLUMNS.EDITORVALIDATION);\r\n result.displayedColumns.push(this.#COLUMNS.EDITORVALIDATION);\r\n }\r\n if (selection?.visible) {\r\n result.firstHeaders.push(this.#COLUMNS.SELECTION);\r\n result.displayedColumns.push(this.#COLUMNS.SELECTION);\r\n }\r\n if (!editor?.hidden) {\r\n if (editor?.addable\r\n || (editor?.type === 'inline' && (editor?.removable || typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'focus' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))\r\n || (editor?.type === 'popup' && (typeof (editor?.disabled) === 'function' || !editor?.disabled))) {\r\n result.firstHeaders.push(this.#COLUMNS.EDITOR);\r\n result.displayedColumns.push(this.#COLUMNS.EDITOR);\r\n }\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?.filter(col => !col.invisible).forEach(col => {\r\n if (col.isGeneratedColumn) {\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 const generatedColumn: SdGridMaterialColumn = {\r\n type: 'children',\r\n field: col.origin.field,\r\n title: col.origin.title,\r\n children: []\r\n };\r\n for (const subColumn of gridOption?.columns.filter(e1 => col.generatedColumns.includes(e1.field))) {\r\n if (subColumn.type === 'children' || subColumn.type === 'children-col') {\r\n for (const childColumn of subColumn.children) {\r\n generatedColumn.children.push({\r\n ...childColumn,\r\n colSpan: 2\r\n });\r\n }\r\n } else {\r\n generatedColumn.children.push({\r\n ...subColumn,\r\n colSpan: 2\r\n });\r\n }\r\n\r\n }\r\n result.firstColumns.push({\r\n ...generatedColumn,\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 return;\r\n }\r\n const column = gridOption?.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 if (column.type === 'children-col') {\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 } else {\r\n result.displayedColumns.push(col.origin.field);\r\n }\r\n }\r\n });\r\n if (sdSubInformation?.templateRef) {\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","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnValues'\r\n})\r\nexport class SdColumnValuesPipe implements PipeTransform {\r\n #prefix = 'a1e67660-8aa2-4c11-b02d-71a32188719f';\r\n #cache: {\r\n [key: string]: {\r\n result: any\r\n }\r\n } = {};\r\n transform = async (value: any, column: SdGridMaterialColumn): Promise<string> => {\r\n if (column.type !== 'values' || !column.option?.items || !column.option?.valueField || !column.option?.displayField) {\r\n return value;\r\n }\r\n const { items, valueField, displayField, ...remain } = column.option;\r\n const key = hash({\r\n prefix: this.#prefix,\r\n valueField,\r\n displayField,\r\n remain,\r\n value\r\n });\r\n if (typeof (items) === 'function') {\r\n if (!this.#cache[key]) {\r\n const values = await items(value, true);\r\n this.#cache[key] = {\r\n result: values?.find(e => e?.[valueField] === value)?.[displayField] || value\r\n };\r\n }\r\n } else {\r\n if (!this.#cache[key]) {\r\n this.#cache[key] = {\r\n result: items?.find(e => e?.[valueField] === value)?.[displayField] || value\r\n };\r\n }\r\n }\r\n return this.#cache[key].result;\r\n }\r\n}\r\n","import hash from 'object-hash';\r\nimport { SdItem } from \"../models/grid.model\";\r\n\r\nexport const CalculateSdId = (item: SdItem) => {\r\n const {\r\n sdId,\r\n editorHandlerColumn,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n sdGroup,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n originItem,\r\n editorErrorMessage,\r\n editorHandlerRow,\r\n ...remain } = item;\r\n return hash(remain);\r\n}","import { Injectable, NgZone, Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { CalculateSdId } from '../functions/calculate-sd-id';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorHandlerColumn'\r\n})\r\n@Injectable()\r\nexport class SdEditorHandlerColumnPipe implements PipeTransform {\r\n constructor(private zone: NgZone) { }\r\n #visible = (col: SdGridMaterialColumn, item: SdItem) => {\r\n if (col.type === 'children' || col.type === 'children-col') {\r\n return false;\r\n }\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (col.editor) {\r\n const isDisabled = typeof (col.editor.disabled) === 'function' ? col.editor.disabled(item) : col.editor.disabled;\r\n if (isDisabled) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n transform(value: any, item: SdItem, gridOption: SdGridMaterialOption) {\r\n const key = CalculateSdId(item);\r\n if (item.sdId === key && item.editorHandlerColumn) {\r\n return true;\r\n }\r\n item.editorHandlerColumn = item.editorHandlerColumn || {};\r\n const { columns } = gridOption;\r\n for (const col of columns) {\r\n if (col.type === 'children-col') {\r\n for (const childCol of col.children) {\r\n item.editorHandlerColumn[childCol.field] = {\r\n ...item.editorHandlerColumn[childCol.field],\r\n visible: this.#visible(childCol, item)\r\n }\r\n }\r\n } else {\r\n item.editorHandlerColumn[col.field] = {\r\n ...item.editorHandlerColumn[col.field],\r\n visible: this.#visible(col, item)\r\n }\r\n }\r\n }\r\n this.zone.run(() => {\r\n item.sdId = CalculateSdId(item);\r\n });\r\n item.sdId = key;\r\n return 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 EventEmitter,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport * as uuid from 'uuid';\r\nimport {\r\n SdGridMaterialFilterRequest\r\n} from './models/grid-filter.model';\r\nimport {\r\n SdGridMaterialOption\r\n} from './models/grid-option.model';\r\nimport {\r\n GRID_MATERIAL_CONFIG,\r\n DEFAULT_GRID_MATERIAL_CONFIG,\r\n ISdGridMaterialConfiguration\r\n} from './models/grid-configuration.model';\r\nimport { Subscription, isObservable, Observable, Subject, defer, from } from 'rxjs';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdGridMaterialColumn } from './models/grid-column.model';\r\nimport { SdMaterialCellDefDirective } from './directives/sd-material-cell-def.directive';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\nimport { SdGridFilter } from './components/grid-filter/grid-filter.component';\r\nimport { SdMaterialFilterDefDirective } from './directives/sd-material-filter-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-material-sub-information-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-material-footer-def.directive';\r\nimport { SdMaterialEmptyDataDefDirective } from './directives/sd-material-empty-data-def.directive';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SdExportColumn, SdExportFile, SdExportService } from '@sd-angular/core/export';\r\nimport { SdGridConfiguration, SdGridConfigurationResult } from './models/grid-config.model';\r\nimport { SdGridConfigurationService } from './services/grid-configuration.service';\r\nimport { SdGridMaterialExportColumn } from './models/grid-export.model';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdQuickAction } from '@sd-angular/core/quick-action';\r\nimport { SdGridMaterialItem, SdItem } from './models/grid.model';\r\nimport { SdColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { SdEditorHandlerColumnPipe } from './pipes/editor-handler-column.pipe';\r\nimport { SdScrollDirective } from '@sd-angular/core/common';\r\n\r\n@Component({\r\n selector: 'sd-grid-material',\r\n templateUrl: './grid-material.component.html',\r\n styleUrls: ['./grid-material.component.scss'],\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 SdGridMaterial<T = any> implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild(SdScrollDirective) sdScroll: SdScrollDirective;\r\n key = uuid.v4();\r\n gridConfigurationObserver: Observable<SdGridConfiguration>;\r\n gridFilter: SdGridFilter;\r\n @ViewChild(SdQuickAction) quickAction: SdQuickAction;\r\n @ViewChild(SdGridFilter) set _gridFilter(gridFilter: SdGridFilter) {\r\n if (gridFilter && this.gridFilter !== gridFilter) {\r\n this.gridFilter = gridFilter;\r\n this.#subscription.add(gridFilter.filterChange.pipe(\r\n map(() => {\r\n this.#paginator.pageIndex = 0;\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\r\n }\r\n }\r\n\r\n @Input() set option(option: SdGridMaterialOption) {\r\n if (option) {\r\n option = this.#initConfiguration(option);\r\n this.gridOption = option;\r\n this.#loadCompleted = false;\r\n this.#reload.next(true);\r\n option?.columns?.forEach(col => {\r\n if (col.filter?.default) {\r\n this.columnFilter[col.field] = col.filter.default;\r\n }\r\n });\r\n const configuration = this.gridConfigurationService.init(this.key, this.gridOption);\r\n this.gridConfigurationObserver = configuration.observer;\r\n configuration.load();\r\n }\r\n }\r\n\r\n gridOption: SdGridMaterialOption;\r\n #localItems: any[] = [];\r\n items: SdGridMaterialItem<T>[] = [];\r\n selectedItems: 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(paginator.page.pipe(\r\n map(() => {\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\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(sort.sortChange.pipe(\r\n map(() => {\r\n this.#reload.next(false);\r\n }),\r\n ).subscribe());\r\n }\r\n }\r\n\r\n // Export\r\n @ViewChild(SdPopupExport) sdPopupExport: SdPopupExport;\r\n\r\n // Sub Information\r\n @ContentChild(SdMaterialSubInformationDefDirective) sdSubInformation: SdMaterialSubInformationDefDirective;\r\n\r\n // Empty Data\r\n @ContentChild(SdMaterialEmptyDataDefDirective) sdEmptyData: SdMaterialEmptyDataDefDirective;\r\n\r\n // Cell Def\r\n @ContentChildren(SdMaterialCellDefDirective) sdCellDefs = new QueryList<SdMaterialCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdMaterialCellDefDirective\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(SdMaterialFilterDefDirective) sdFilterDefs = new QueryList<SdMaterialFilterDefDirective>();\r\n filterDefs: SdMaterialFilterDefDirective[] = [];\r\n\r\n // Filter\r\n columnFilter: {\r\n [key: string]: any\r\n } = {};\r\n // Subcription\r\n #subscription = new Subscription();\r\n #reload = new Subject<boolean>();\r\n isExporting = false;\r\n isSelectAll = false;\r\n exportTitle = 'Export';\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(GRID_MATERIAL_CONFIG) @Optional() public configuration: ISdGridMaterialConfiguration,\r\n private gridConfigurationService: SdGridConfigurationService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService,\r\n private columnValuesPipe: SdColumnValuesPipe,\r\n private editorHandlerColumnPipe: SdEditorHandlerColumnPipe) {\r\n }\r\n\r\n ngOnInit() {\r\n this.#initCellDef();\r\n }\r\n #loadCompleted = false;\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#reload.pipe(\r\n debounceTime(200),\r\n startWith(true),\r\n switchMap(async force => {\r\n const filterInfo = this.#getFilter();\r\n const result = await this.#load(filterInfo, !this.#loadCompleted || force);\r\n this.#loadCompleted = true;\r\n return result;\r\n })\r\n ).subscribe(this.#render));\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\r\n // this.#subscription.add(this.#optionChanges.pipe(\r\n // debounceTime(200),\r\n // startWith({}),\r\n // map(this.#getFilter),\r\n // switchMap(filterInfo => this.#load(filterInfo, true))\r\n // ).subscribe(this.#render));\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.sdMaterialCellDef) {\r\n this.cellDef[cellDef.sdMaterialCellDef] = 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 this.footerDef = {};\r\n this.hasFooter = false;\r\n for (const footerDef of this.sdFooterDefs) {\r\n if (footerDef.sdMaterialFooterDef) {\r\n this.hasFooter = true;\r\n this.footerDef[footerDef.sdMaterialFooterDef] = footerDef;\r\n }\r\n }\r\n }\r\n\r\n #filterExportInfo = (pageNumber: number, pageSize: number): SdGridMaterialFilterRequest => {\r\n return {\r\n rawColumnFilter: (this.gridOption?.filter?.inlineColumn ? this.columnFilter : this.gridFilter?.columnFilter) || {},\r\n rawExternalFilter: this.gridFilter?.externalFilter || {},\r\n rawFilterDef: this.gridFilter?.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: SdGridMaterialOption) => {\r\n option.paginate = {\r\n hidden: option?.paginate?.hidden,\r\n pageSize: option?.paginate?.pageSize ?? this.configuration?.paginate?.pageSize ?? DEFAULT_GRID_MATERIAL_CONFIG.paginate?.pageSize,\r\n pages: option?.paginate?.pages ?? this.configuration?.paginate?.pages ?? DEFAULT_GRID_MATERIAL_CONFIG.paginate?.pages,\r\n showFirstLastButtons: option?.paginate?.showFirstLastButtons ?? false\r\n };\r\n return option;\r\n }\r\n\r\n #filterLocal = (localItems: any[], filterInfo: SdGridMaterialFilterRequest) => {\r\n const { columns } = this.gridOption;\r\n const { rawColumnFilter, orderBy, orderDirection, pageSize, pageNumber } = filterInfo;\r\n const items = localItems.filter(item => {\r\n for (const column of columns) {\r\n const { field, type } = column;\r\n const filterValue: string = (rawColumnFilter[field] || '').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') {\r\n if (columnValue !== filterValue) {\r\n return false;\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 if (new Date(columnValue).getTime() < fromDate.getTime() || new Date(columnValue).getTime() >= toDate.getTime()) {\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((current, next) => {\r\n if (type === 'number') {\r\n return (current[field] || 0) - (next[field] || 0);\r\n }\r\n if (type === 'date' || type === 'datetime' || type === 'time') {\r\n const d1 = new Date(current[field] || '').getTime();\r\n const d2 = new Date(current[field] || '').getTime();\r\n return d1 - d2;\r\n }\r\n const s1 = (current[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\r\n && index < (pageNumber + 1) * pageSize;\r\n }),\r\n total: items.length\r\n };\r\n }\r\n\r\n #getFilter = (): SdGridMaterialFilterRequest => ({\r\n rawColumnFilter: (this.gridOption?.filter?.inlineColumn ? this.columnFilter : this.gridFilter?.columnFilter) || {},\r\n rawExternalFilter: this.gridFilter?.externalFilter || {},\r\n rawFilterDef: this.gridFilter?.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.gridOption?.paginate?.pageSize || 50\r\n })\r\n\r\n #load = async (filterReq: SdGridMaterialFilterRequest, force: boolean = true) => {\r\n this.isLoading = true;\r\n try {\r\n if (this.gridOption.type === 'server') {\r\n let result = this.gridOption.items(filterReq);\r\n if (isObservable(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n if (force) {\r\n const results = this.gridOption.items();\r\n if (results instanceof Promise) {\r\n this.#localItems = await results;\r\n } else {\r\n this.#localItems = results;\r\n }\r\n }\r\n return this.#filterLocal(this.#localItems, filterReq);\r\n }\r\n } catch (error) {\r\n this.notifyService.handle.error(error);\r\n } finally {\r\n this.isLoading = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n #render = async (args: { items: any[], total: number }) => {\r\n this.sdScroll?.scrollTop();\r\n this.items = args?.items || [];\r\n this.total = args?.total || 0;\r\n // this.isHiddenPaginator = this.filterInfo.pageNumber === 0 && this.total <= this.filterInfo.pageSize;\r\n this.items.forEach((item: SdItem) => {\r\n item.originItem = { ...item };\r\n });\r\n await this.gridOption?.reload?.onReload?.(this.items);\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n\r\n reload = async (force: boolean = true) => {\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.gridOption.export?.items) {\r\n // const exportedItems = this.gridOption.export?.items(this.#filterExportInfo(pageNumber, pageSize));\r\n let result = this.gridOption.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.gridOption.type === 'server') {\r\n let result = this.gridOption.items(filterInfo);\r\n if (isObservable(result)) {\r\n result = result.toPromise();\r\n }\r\n return await result;\r\n } else {\r\n let exportedItems: any[] = [];\r\n if (typeof (this.gridOption.items) === 'function') {\r\n const results = this.gridOption.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.gridOption.items;\r\n }\r\n return this.#filterLocal(exportedItems, filterInfo);\r\n }\r\n }\r\n }\r\n\r\n drop(event: CdkDragDrop<string[]>, columns: string[]) {\r\n moveItemInArray(columns, event.previousIndex, event.currentIndex);\r\n }\r\n\r\n #allColumns = (): SdGridMaterialColumn[] => {\r\n const columns: SdGridMaterialColumn[] = [];\r\n this.gridOption.columns.filter(e => !e.export?.disabled).forEach(column => {\r\n if (column.type === 'image') {\r\n return;\r\n }\r\n if (column.type === 'children') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\r\n columns.push(childColumn);\r\n });\r\n return;\r\n }\r\n if (column.type === 'children-col') {\r\n column.children?.filter(e => !e.export?.disabled).forEach(childColumn => {\r\n if (childColumn.type === 'image') {\r\n return;\r\n }\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 = (): SdGridMaterialExportColumn[] => {\r\n return this.gridOption.export?.columns?.filter(e => !e.export?.disabled) || [];\r\n }\r\n\r\n #onExport = async (args: { file: SdExportFile, columns: SdExportColumn[], isCSV: boolean, isRaw: boolean }) => {\r\n try {\r\n const { file, isCSV, isRaw } = args;\r\n let { columns } = args;\r\n const pageSize = this.gridOption?.export?.maxItemsPerRequest || 1000;\r\n const batch = this.gridOption?.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<any[] | {\r\n items: any[];\r\n total: number;\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.gridOption.export?.mapping) {\r\n const results = this.gridOption.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' || column.type === 'children-col') {\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 if (transform instanceof Promise) {\r\n obj[column.field] = await transform;\r\n } else {\r\n obj[column.field] = transform;\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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 const { transformDate } = column;\r\n if (transformDate) {\r\n date = transformDate(date, item);\r\n }\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') {\r\n // Nếu là values thì lấy giá trị của value được chọn\r\n obj[column.field] = await this.columnValuesPipe.transform(item[column.field], column);\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n };\r\n // this.gridOption.columns.forEach(handle);\r\n for (const exportColumn of columns) {\r\n await handle(exportColumn);\r\n }\r\n items.push(obj);\r\n }\r\n }\r\n while (pageNumber * pageSize < total) {\r\n promises.push(this.#exportedItems(pageNumber, pageSize));\r\n pageNumber++;\r\n if (promises.length < batch) {\r\n continue;\r\n }\r\n await handleData();\r\n }\r\n if (promises.length > 0) {\r\n await handleData();\r\n }\r\n if (!file?.filePath) {\r\n if (isCSV) {\r\n await this.exportService.exportCSV({\r\n columns,\r\n items,\r\n fileName: this.gridOption?.export?.fileName\r\n });\r\n return;\r\n }\r\n if (isRaw) {\r\n await this.exportService.exportExcelRaw({\r\n columns,\r\n items,\r\n fileName: this.gridOption?.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.gridOption?.export?.sheets)) {\r\n for (const sheet of this.gridOption.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.gridOption?.export?.fileName,\r\n sheets\r\n });\r\n return;\r\n }\r\n await this.exportService.exportByTemplate({\r\n filePath: file.filePath,\r\n fileName: file.fileName,\r\n columns,\r\n items\r\n });\r\n } finally {\r\n this.isExporting = false;\r\n this.exportTitle = `Export`;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onExport = async (args: { file: SdExportFile, columns: SdExportColumn[], isCSV: boolean, isRaw: boolean }) => {\r\n const { translate } = this.translateService;\r\n if (!args.isCSV && this.gridOption.export.max && this.total > this.gridOption.export.max) {\r\n args.isRaw = true;\r\n this.#onExport(args);\r\n // this.notifyService.confirm(translate(`Total rows reach limit, do you want to export CSV`)).then(() => {\r\n // args.isCSV = true;\r\n // this.#onExport(args);\r\n // });\r\n return;\r\n }\r\n this.#onExport(args);\r\n }\r\n\r\n onFilterChange = () => {\r\n this.#paginator.pageIndex = 0;\r\n this.reload(false);\r\n }\r\n\r\n onExpand = async (rowData: SdGridMaterialItem<T>) => {\r\n if (this.gridOption.subInformation?.always) {\r\n return;\r\n }\r\n if (rowData.isExpanding) {\r\n return;\r\n }\r\n if (rowData.isExpanded) {\r\n rowData.isExpanded = false;\r\n return;\r\n }\r\n const data = this.gridOption?.subInformation?.onExpand?.(rowData);\r\n if (!this.gridOption.subInformation?.multiple) {\r\n this.items.forEach(item => item.isExpanding = item.isExpanded = false);\r\n }\r\n if (data instanceof Promise) {\r\n rowData.isExpanding = true;\r\n data.then(res => {\r\n rowData.expandDetail = res;\r\n rowData.isExpanded = true;\r\n }).finally(() => rowData.isExpanding = false);\r\n } else {\r\n rowData.expandDetail = data;\r\n rowData.isExpanded = true;\r\n }\r\n }\r\n\r\n onSelect = (rowData: SdGridMaterialItem<T>) => {\r\n if (rowData?.sdGroup?.items?.length) {\r\n rowData?.sdGroup?.items.forEach(e => e.isSelected = rowData.isSelected);\r\n this.gridOption.selection?.onSelect?.(rowData, this.items.filter(e => e.isSelected));\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n } else {\r\n if (this.gridOption.selection?.single) {\r\n this.items.filter(e => e !== rowData).forEach(e => e.isSelected = false);\r\n this.#updateSelectedItems();\r\n return;\r\n }\r\n this.gridOption.selection?.onSelect?.(rowData, this.items.filter(e => e.isSelected));\r\n this.isSelectAll = this.items.every(e => e.isSelected);\r\n this.#updateSelectedItems();\r\n }\r\n }\r\n\r\n onSelectAll = () => {\r\n this.items?.forEach(e => {\r\n if (e.selectable && (!this.gridOption?.selection?.actions?.length || e.actions?.length)) {\r\n e.isSelected = this.isSelectAll;\r\n }\r\n });\r\n this.gridOption.selection?.onSelectAll?.(this.items.filter(e => e.isSelected));\r\n this.#updateSelectedItems();\r\n }\r\n\r\n onClearSelection = (items?: SdGridMaterialItem<T>[]) => {\r\n items = items || this.items;\r\n this.isSelectAll = false;\r\n items?.forEach(e => e.isSelected = false);\r\n this.#updateSelectedItems();\r\n }\r\n\r\n #updateSelectedItems = () => {\r\n this.selectedItems = this.items.filter(item => item.isSelected)\r\n .map(item => {\r\n const {\r\n isSelected,\r\n isExpanded,\r\n isExpanding,\r\n expandDetail,\r\n editorErrorMessage,\r\n editorHandlerColumn,\r\n editorHandlerRow,\r\n editorStatus,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n // Giữ lại các trường thông tin cho selectable (action, groupedAction, sdGroup, selectable)\r\n ...result\r\n } = item;\r\n return result;\r\n }) as T[];\r\n this.ref.detectChanges();\r\n }\r\n\r\n clearFilter = () => {\r\n this.gridFilter?.onClearFilter();\r\n }\r\n\r\n setFilter = (args: {\r\n columnFilter: any,\r\n externalFilter: any,\r\n filterDef: any\r\n }) => {\r\n this.gridFilter?.setFilter(args);\r\n }\r\n\r\n onCreate = () => {\r\n const { type, editor, columns } = this.gridOption;\r\n if (!editor?.addable) {\r\n return;\r\n }\r\n const item: SdGridMaterialItem = {};\r\n // Gán giá trị mặc định\r\n columns.forEach(column => {\r\n if (column.type === 'values') {\r\n item[column.field] = '';\r\n } else if (column.type === 'bool') {\r\n item[column.field] = true;\r\n } else if (column.type === 'number') {\r\n item[column.field] = null;\r\n }\r\n });\r\n if (type === 'local') {\r\n editor.onAdd?.(item, this.#localItems);\r\n } else {\r\n editor.onAdd?.(item, this.items);\r\n }\r\n // Đưa item lên dòng đầu tiên nếu type khác popup\r\n if (editor.type !== 'popup') {\r\n if (editor.addToLast) {\r\n if (type === 'local') {\r\n this.#localItems = [...this.#localItems, item];\r\n }\r\n this.items = [...this.items, item];\r\n } else {\r\n if (type === 'local') {\r\n this.#localItems = [item, ...this.#localItems];\r\n }\r\n this.items = [item, ...this.items];\r\n }\r\n }\r\n item.editorStatus = 'create';\r\n item.editorHandlerRow = {\r\n temporary: { ...item }\r\n };\r\n }\r\n onUpdate = (item: SdItem) => {\r\n const { editor } = this.gridOption;\r\n item.editorStatus = 'update';\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n temporary: { ...item }\r\n };\r\n // this.generateEditorHanlder(item);\r\n if (editor.type === 'popup') {\r\n // Xử lý case popup\r\n // this.sdGridPopupEditor.open(item, columns, isModified);\r\n }\r\n this.ref.detectChanges();\r\n }\r\n onSave = async (item: SdGridMaterialItem<T>) => {\r\n if (item.editorHandlerRow.saving) {\r\n return;\r\n }\r\n const { editor } = this.gridOption;\r\n try {\r\n item.editorHandlerRow.saving = true;\r\n if (editor.validate) {\r\n const result = editor.validate(item, this.items.indexOf(item));\r\n if (result instanceof Promise) {\r\n const message = await result;\r\n if (message) {\r\n throw message;\r\n }\r\n } else {\r\n if (result) {\r\n throw result;\r\n }\r\n }\r\n }\r\n if (editor.onSave) {\r\n const result = editor.onSave(item);\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n\r\n if (item.editorStatus === 'create' && editor.type === 'popup') {\r\n if (this.gridOption.type === 'local') {\r\n this.items.splice(0, 0, item);\r\n }\r\n // this.viewItems.splice(0, 0, item);\r\n }\r\n\r\n item.editorStatus = undefined;\r\n // this.generateEditorHanlder(item);\r\n } catch (err) {\r\n this.notifyService.notify.warning(err);\r\n } finally {\r\n item.editorHandlerRow.saving = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n onCancel = (item: SdGridMaterialItem<T>) => {\r\n const { editor } = this.gridOption;\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n if (this.gridOption.type === 'local') {\r\n editor?.onCancel?.(item, this.#localItems);\r\n } else {\r\n editor?.onCancel?.(item, this.items);\r\n }\r\n this.ref.detectChanges();\r\n return;\r\n }\r\n if (editor.type === 'focus') {\r\n if (item.editorStatus === 'create') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n } else {\r\n Object.assign(item, item.editorHandlerRow.temporary);\r\n }\r\n }\r\n item.editorStatus = undefined;\r\n this.ref.detectChanges();\r\n }\r\n onRemove = async (item: SdGridMaterialItem<T>) => {\r\n const { editor } = this.gridOption;\r\n if (editor?.beforeRemove) {\r\n const beforeRemove = editor?.beforeRemove(item);\r\n if (beforeRemove instanceof Promise) {\r\n const result = await beforeRemove;\r\n if (!result) {\r\n return;\r\n }\r\n } else {\r\n if (!beforeRemove) {\r\n return;\r\n }\r\n }\r\n }\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx2 = this.#localItems.indexOf(item);\r\n this.#localItems.splice(idx2, 1);\r\n this.#localItems = [...this.#localItems];\r\n }\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n this.items = [...this.items];\r\n if (this.gridOption.type === 'local') {\r\n editor?.onRemove?.(item, this.#localItems);\r\n } else {\r\n editor?.onRemove?.(item, this.items);\r\n }\r\n this.ref.detectChanges();\r\n return;\r\n }\r\n }\r\n\r\n add = (idx: number, item: T) => {\r\n if (this.items.length > idx) {\r\n this.items.splice(idx, 0, item);\r\n this.items = [...this.items];\r\n } else {\r\n this.items = [...this.items, item];\r\n }\r\n }\r\n\r\n update = (idx: number, item: T) => {\r\n if (this.items[idx]) {\r\n Object.assign(this.items[idx], item);\r\n this.items = [...this.items];\r\n }\r\n }\r\n\r\n remove = (idx: number) => {\r\n if (this.items[idx]) {\r\n this.items.splice(idx, 1);\r\n this.items = [...this.items];\r\n }\r\n }\r\n\r\n refreshItem = (idx: number) => {\r\n const item = this.items[idx];\r\n this.editorHandlerColumnPipe.transform(item.sdVersion, item, this.gridOption);\r\n }\r\n\r\n get editedItems(): (T & { editorErrorMessage: string })[] {\r\n return this.items.filter(item => {\r\n if (!item.originItem) {\r\n return true;\r\n }\r\n if (Object.keys(item.originItem).some(key => item.originItem[key] !== item[key])) {\r\n return true;\r\n }\r\n return false;\r\n }).map(item => {\r\n const {\r\n editorStatus,\r\n editorHandlerRow,\r\n editorHandlerColumn,\r\n editorErrorMessage,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n sdGroup,\r\n temporary,\r\n ...result } = item;\r\n return {\r\n ...result,\r\n editorErrorMessage\r\n } as any;\r\n });\r\n }\r\n\r\n get gridItems(): T[] {\r\n return this.items.map(item => {\r\n const {\r\n editorStatus,\r\n editorHandlerRow,\r\n editorHandlerColumn,\r\n expandDetail,\r\n isExpanded,\r\n isExpanding,\r\n isSelected,\r\n originItem,\r\n sdId,\r\n sdVersion,\r\n selectable,\r\n actions,\r\n groupedActions,\r\n sdGroup,\r\n temporary,\r\n ...result } = item;\r\n return result as T;\r\n });\r\n }\r\n detectChanges = () => this.ref.detectChanges();\r\n\r\n get isEditing() {\r\n return this.items.some(e => e.editorStatus !== undefined);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand, SdGridMaterialCommandNormal } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class SdCommandFilterPipe implements PipeTransform {\r\n async transform(item: any, commands: SdGridMaterialCommand[]): Promise<SdGridMaterialCommand[]> {\r\n const results: SdGridMaterialCommand[] = [];\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);\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: SdGridMaterialCommandNormal[] = [];\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);\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 { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandDisable'\r\n})\r\nexport class SdCommandDisablePipe implements PipeTransform {\r\n transform(item: any, command: SdGridMaterialCommand): boolean {\r\n if (!command?.disabled) {\r\n return false;\r\n }\r\n if (typeof (command.disabled) === 'boolean') {\r\n return command.disabled;\r\n }\r\n return command.disabled(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class SdCommandIconPipe implements PipeTransform {\r\n transform(command: SdGridMaterialCommand, item: any): string {\r\n if (!command?.icon) {\r\n return '';\r\n }\r\n if (typeof (command.icon) === 'string') {\r\n return command.icon;\r\n }\r\n return command.icon(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../models/grid-command.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class SdCommandTitlePipe implements PipeTransform {\r\n transform(command: SdGridMaterialCommand, item: any): string {\r\n if (!command?.title) {\r\n return '';\r\n }\r\n if (typeof (command.title) === 'string') {\r\n return command.title;\r\n }\r\n return command.title(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnHtmlTemplate'\r\n})\r\nexport class SdColumnHtmlTemplatePipe implements PipeTransform {\r\n private isMobileOrTablet = false;\r\n constructor(deviceService: DeviceDetectorService) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n transform(value: any, rowData: any, column: SdGridMaterialColumn): string {\r\n if (typeof (column?.htmlTemplate) !== 'function') {\r\n return value;\r\n }\r\n return column?.htmlTemplate(value, rowData, this.isMobileOrTablet);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.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() sdId: string;\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n @Input() gridOption: SdGridMaterialOption;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdColumnValuesPipe } from './column-values.pipe';\r\n@Pipe({\r\n name: 'columnTransform'\r\n})\r\nexport class SdColumnTransformPipe implements PipeTransform {\r\n constructor(private columnValuesPipe: SdColumnValuesPipe) { }\r\n async transform(value: any, rowData: any, column: SdGridMaterialColumn, key?: string): Promise<string> {\r\n if (column?.transform) {\r\n return column.transform(value, rowData);\r\n }\r\n if (column.type === 'values') {\r\n return await this.columnValuesPipe.transform(value, column);\r\n }\r\n if (column.type === 'number' && Number.isNumber(value)) {\r\n return Number.toVNCurrency(value); // this.decimalPipe.transform(value, '1.0-2');\r\n }\r\n if (column.type === 'bool') {\r\n return value === true ? (column.option?.displayOnTrue || 'True') : (column.option?.displayOnFalse || 'False');\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialExternalFilter } from '../models/grid-filter.model';\r\n@Pipe({\r\n name: 'sdFilterExternal'\r\n})\r\nexport class SdFilterExternalPipe implements PipeTransform {\r\n transform(externalFilters: SdGridMaterialExternalFilter[], field?: string): SdGridMaterialExternalFilter[] {\r\n const results: SdGridMaterialExternalFilter[] = [];\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 { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'sdFilterColumn'\r\n})\r\nexport class SdFilterColumnPipe implements PipeTransform {\r\n transform(columns: SdGridMaterialColumn[], field?: string): SdGridMaterialColumn[] {\r\n const results: SdGridMaterialColumn[] = [];\r\n if (!columns) {\r\n return results;\r\n }\r\n for (const column of columns) {\r\n if (column.type === 'image') {\r\n continue;\r\n }\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 { Component, Input } from '@angular/core';\r\nimport { SdGridMaterialColumnChildren } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-children-view',\r\n templateUrl: './desktop-cell-children-view.component.html',\r\n styleUrls: ['./desktop-cell-children-view.component.scss']\r\n})\r\nexport class SdDesktopCellChildrenView {\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumnChildren;\r\n @Input() item: any;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n\r\n@Pipe({\r\n name: 'columnChildrenFilter'\r\n})\r\nexport class SdColumnChildrenFilterPipe implements PipeTransform {\r\n #isMobileOrTablet = false;\r\n constructor(deviceService: DeviceDetectorService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n transform(columns: SdGridMaterialColumn[], item: any): SdGridMaterialColumn[] {\r\n return columns.filter(column => {\r\n const value = item?.[column.field];\r\n const transformValue = column.transform?.(item[column.field], item);\r\n const templateValue = column.htmlTemplate?.(item[column.field], item, this.#isMobileOrTablet);\r\n return (value !== undefined && value !== null && value !== '')\r\n || (transformValue !== undefined && transformValue !== null && transformValue !== '')\r\n || (templateValue !== undefined && templateValue !== null && templateValue !== '');\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialChildColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnTitle'\r\n})\r\nexport class SdColumnTitlePipe implements PipeTransform {\r\n async transform(item: any, column: SdGridMaterialChildColumn): Promise<string> {\r\n if (!column?.title) {\r\n return '';\r\n }\r\n const result = column?.dynamicTitle?.(item);\r\n if (result instanceof Promise) {\r\n return (await result) || column?.title;\r\n }\r\n return result || column?.title;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdGridMaterialCommand } from '../../models/grid-command.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: any;\r\n @Input() commands: SdGridMaterialCommand[] = [];\r\n constructor() {\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdBadgeColor } from '@sd-angular/core/badge';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\n@Pipe({\r\n name: 'columnBadge'\r\n})\r\nexport class SdColumnBadgePipe implements PipeTransform {\r\n constructor() { }\r\n transform(value: any, rowData: any, column: SdGridMaterialColumn): {\r\n type: 'round' | 'circle' | 'icon',\r\n color: SdBadgeColor,\r\n icon: string\r\n } {\r\n if (column.type === 'string' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n if (column.type === 'number' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n if (column.type === 'bool') {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: !!value ? 'success' : 'danger',\r\n icon: null\r\n };\r\n }\r\n if (column.type === 'values' && column?.badge) {\r\n return {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: column.badge(value, rowData),\r\n icon: column?.badgeIcon?.(value, rowData)\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdGridConfiguration, SdGridConfigurationResult } from '../models/grid-config.model';\r\nimport { SdGridConfigurationService } from '../services/grid-configuration.service';\r\nimport { SdMaterialSubInformationDefDirective } from '../directives/sd-material-sub-information-def.directive';\r\n\r\n@Pipe({\r\n name: 'sdGridConfigurationResult'\r\n})\r\nexport class SdGridConfigurationResultPipe implements PipeTransform {\r\n constructor(private gridConfigurationService: SdGridConfigurationService) { }\r\n transform(configuration: SdGridConfiguration, gridOption: SdGridMaterialOption, sdSubInformation: SdMaterialSubInformationDefDirective): SdGridConfigurationResult {\r\n return this.gridConfigurationService.generateConfigurationResult(configuration, gridOption, sdSubInformation);\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 { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdGridConfigurationResult, SdGridConfiguration, SdGridConfigurationCache, SdColumnConfiguration } from '../../models/grid-config.model';\r\nimport { SdGridConfigurationService } from '../../services/grid-configuration.service';\r\nimport * as uuid from 'uuid';\r\nimport { MatTable } from '@angular/material/table';\r\n// import { SdGridMaterialColumn } from '@sd-angular/core/grid-material';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-popup-grid-configuration',\r\n templateUrl: './popup-grid-configuration.component.html',\r\n styleUrls: ['./popup-grid-configuration.component.scss']\r\n})\r\nexport class SdPopupGridConfiguration implements OnInit {\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() key: string;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('table') table: MatTable<SdGridMaterialColumn>;\r\n readonly changes = new EventEmitter<SdGridConfigurationResult>();\r\n #cache: SdGridConfigurationCache;\r\n configuration: SdGridConfiguration;\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 translateService: SdTranslateService,\r\n private gridConfigurationService: SdGridConfigurationService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n @HostListener('window:mouseup', ['$event'])\r\n mouseUp(event) {\r\n this.disabledDrag = true;\r\n }\r\n open = async () => {\r\n this.#cache = this.gridConfigurationService.init(this.key, this.gridOption);\r\n this.configuration = await this.#cache.get();\r\n this.modal.open();\r\n }\r\n\r\n onSave = () => {\r\n this.#cache.set(this.configuration);\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n onReset = async () => {\r\n const { translate } = this.translateService;\r\n this.notifyService.confirm(translate('Reset grid configuration to default')).then(() => {\r\n this.#cache.remove();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n createColumn = async () => {\r\n this.selected = {};\r\n this.isCreatingColumn = true;\r\n }\r\n\r\n confirm = async () => {\r\n const generatedColumn: SdColumnConfiguration = {\r\n origin: {\r\n field: uuid.v4(),\r\n title: 'Generated',\r\n width: '300px'\r\n },\r\n fixed: false,\r\n invisible: false,\r\n title: 'Generated',\r\n width: '300px',\r\n isGeneratedColumn: true,\r\n generatedColumns: this.configuration.columns.filter(e => this.selected[e.origin?.field]).map(e => e.origin?.field)\r\n };\r\n this.configuration.columns.push(generatedColumn);\r\n this.configuration = this.#cache.set(this.configuration);\r\n this.isCreatingColumn = false;\r\n }\r\n\r\n dropTable(event: CdkDragDrop<SdGridMaterialColumn[]>) {\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 { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../models/grid-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: SdGridMaterialColumn): 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 { SdGridMaterialAction, SdGridMaterialActionNormal, SdGridMaterialActionSimple } from '../models/grid-action.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionActionFilter'\r\n})\r\nexport class SdSelectionActionFilterPipe implements PipeTransform {\r\n #convert = (action: SdGridMaterialAction): SdGridMaterialActionSimple => {\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: SdItem[], actions: SdGridMaterialAction[]): SdGridMaterialActionSimple[] => {\r\n const results: SdGridMaterialAction[] = [];\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: SdGridMaterialActionNormal[] = [];\r\n for (const childAction of action.children) {\r\n const key = hash(childAction);\r\n if (selectedItems.every(e => e.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.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 { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionDisable'\r\n})\r\nexport class SdSelectionDisablePipe implements PipeTransform {\r\n transform = (selectedItems: SdItem[], rowData: SdItem, selection: SdGridMaterialSelection): boolean => {\r\n const { disabled, actions } = selection;\r\n if (!actions?.length) {\r\n if (!disabled) {\r\n rowData.selectable = true;\r\n return false;\r\n }\r\n rowData.selectable = !disabled(rowData, selectedItems);\r\n return !rowData.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.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.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.actions.includes(hash(childAction))) {\r\n return false;\r\n }\r\n }\r\n } else {\r\n if(rowData.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 { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'selectionVisibleSelectAll'\r\n})\r\nexport class SdSelectionVisibleSelectAllPipe implements PipeTransform {\r\n transform = async (items: SdItem[], selection: SdGridMaterialSelection): 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.actions?.length);\r\n if (first) {\r\n for (const action of first.actions) {\r\n if (items.filter(t => t.actions?.length).every(e => e.actions.includes(action))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\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 { SdGridMaterialConfigOption } from '../../models/grid-config.model';\r\nimport { SdGeneratedColumn } from './generated-column.model';\r\nimport { SdSettingServer } from '@sd-angular/core/setting';\r\n\r\n@Injectable()\r\nexport class SdGeneratedColumnService {\r\n #cache: {\r\n [key: string]: SdSetting<SdGeneratedColumn[]> | SdSettingServer<SdGeneratedColumn[]>\r\n } = {};\r\n constructor(\r\n private settingService: SdSettingService) {\r\n }\r\n\r\n load = (configuration: SdGridMaterialConfigOption) => {\r\n if (!configuration?.key) {\r\n return null;\r\n }\r\n const key = hash({\r\n prefix: '260f5e94-5865-4425-8ced-b9c083c390dd',\r\n key: configuration.key\r\n });\r\n if(!this.#cache[key]) {\r\n if(configuration?.storage === 'server') {\r\n this.#cache[key] = this.settingService.createServer<SdGeneratedColumn[]>(key, {\r\n args: configuration?.args,\r\n default: []\r\n });\r\n } else {\r\n this.#cache[key] = this.settingService.create<SdGeneratedColumn[]>(key, {\r\n type: configuration?.storage,\r\n args: configuration?.args,\r\n default: []\r\n });\r\n }\r\n }\r\n return this.#cache[key];\r\n }\r\n\r\n loadSystem = (configuration: SdGridMaterialConfigOption) => {\r\n if (!configuration?.key) {\r\n return null;\r\n }\r\n if (!configuration?.systemColumn) {\r\n return null;\r\n }\r\n const key = hash({\r\n prefix: '8b8050ca-1f44-4860-bad3-20e646c0d68f',\r\n key: configuration.key\r\n });\r\n if(!this.#cache[key]) {\r\n if(configuration?.storage === 'server') {\r\n this.#cache[key] = this.settingService.createServer<SdGeneratedColumn[]>(key, {\r\n args: configuration?.systemColumn?.args,\r\n default: []\r\n });\r\n } else {\r\n this.#cache[key] = this.settingService.create<SdGeneratedColumn[]>(key, {\r\n type: configuration?.storage,\r\n args: configuration?.systemColumn?.args,\r\n default: []\r\n });\r\n }\r\n }\r\n return this.#cache[key];\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, ChangeDetectorRef, Input, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\nimport { SdGridConfigurationService } from '../../services/grid-configuration.service';\r\nimport * as uuid from 'uuid';\r\nimport { SdGeneratedColumnService } from '../../services/generated-column/generated-column.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdGeneratedColumn } from '../../services/generated-column/generated-column.model';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSideDrawer } from '@sd-angular/core/side-drawer';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-dynamic-column',\r\n templateUrl: './dynamic-column.component.html',\r\n styleUrls: ['./dynamic-column.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDynamicColumn implements OnInit, OnDestroy {\r\n @ViewChild(SdSideDrawer) sideDrawer: SdSideDrawer;\r\n @Input() gridOption: SdGridMaterialOption;\r\n systemColumns: SdGeneratedColumn[];\r\n columns: SdGeneratedColumn[];\r\n #subscription = new Subscription();\r\n columnTypes = ['string', 'number', 'bool', 'date', 'datetime', 'time', 'values', 'children', 'children-col'];\r\n form = new FormGroup({});\r\n isDetail = false;\r\n detail: SdGeneratedColumn;\r\n originColumns: SdGridMaterialColumn[] = [];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private generatedColumnService: SdGeneratedColumnService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService,\r\n private gridConfigurationService: SdGridConfigurationService) {\r\n }\r\n\r\n ngOnInit() {\r\n const systemSetting = this.generatedColumnService.loadSystem(this.gridOption.config);\r\n const setting = this.generatedColumnService.load(this.gridOption?.config);\r\n if (systemSetting) {\r\n this.#subscription?.add(systemSetting.observer.subscribe(columns => {\r\n this.systemColumns = columns;\r\n }));\r\n }\r\n if (setting) {\r\n this.#subscription?.add(setting.observer.subscribe(columns => {\r\n this.columns = columns;\r\n }));\r\n }\r\n this.originColumns = this.gridOption.columns.filter(e => e.type !== 'children' && e.type !== 'children-col');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onDetail = (column?: SdGeneratedColumn) => {\r\n this.detail = column || {\r\n field: uuid.v4(),\r\n title: '',\r\n type: 'string',\r\n isSystem: false,\r\n useTemplate: false\r\n };\r\n this.form.markAsUntouched();\r\n this.form.markAsPristine();\r\n this.isDetail = true;\r\n }\r\n\r\n onSave = () => {\r\n const systemSetting = this.generatedColumnService.loadSystem(this.gridOption.config);\r\n const setting = this.generatedColumnService.load(this.gridOption?.config);\r\n if (this.detail.isSystem) {\r\n if (!this.detail.id) {\r\n systemSetting.set([...this.systemColumns, {\r\n ...this.detail,\r\n id: uuid.v4()\r\n }]);\r\n } else {\r\n systemSetting.set([...this.systemColumns]);\r\n }\r\n } else {\r\n if (!this.detail.id) {\r\n setting.set([...this.columns, {\r\n ...this.detail,\r\n id: uuid.v4()\r\n }]);\r\n } else {\r\n setting.set([...this.columns]);\r\n }\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdMaterialCellDefDirective } from '../../directives/sd-material-cell-def.directive';\r\nimport { SdGridMaterialColumn } from '../../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.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() sdId: string;\r\n @Input() value: any;\r\n @Input() key: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() cellDef: {\r\n [column: string]: SdMaterialCellDefDirective\r\n } = {};\r\n @Input() idx: number;\r\n constructor(\r\n ) { }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn, SdGridMaterialColumnValues } from '../../models/grid-column.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-cell-editor',\r\n templateUrl: './desktop-cell-editor.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopCellEditor {\r\n @Input() sdId: string;\r\n @Input() column: SdGridMaterialColumn;\r\n @Input() item: any;\r\n constructor(\r\n ) { }\r\n\r\n onChange = (selected: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n this.column?.editor?.change?.(this.item, selected);\r\n }\r\n\r\n editorOnAdd = () => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.add?.(this.item);\r\n }\r\n }\r\n\r\n editorOnEdit = (option: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.edit?.(option, this.item);\r\n }\r\n }\r\n\r\n editorOnDelete = (option: any) => {\r\n if (this.column.type === 'children' || this.column.type === 'children-col') {\r\n return;\r\n }\r\n if (this.column.type === 'values') {\r\n this.column.editor?.delete?.(option, this.item);\r\n }\r\n }\r\n}\r\n","import { NgZone, Pipe, PipeTransform } from '@angular/core';\r\nimport { CalculateSdId } from '../functions/calculate-sd-id';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { EditorHandlerRow, SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorHandlerRow'\r\n})\r\nexport class SdEditorHandlerRowPipe implements PipeTransform {\r\n constructor(private zone: NgZone) { }\r\n #visible = (col: SdGridMaterialColumn, item: SdItem) => {\r\n if (col.type === 'children' || col.type === 'children-col') {\r\n return false;\r\n }\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (col.editor) {\r\n const isDisabled = typeof (col.editor.disabled) === 'function' ? col.editor.disabled(item) : col.editor.disabled;\r\n if (isDisabled) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n transform(status: 'create' | 'update', item: SdItem, gridOption: SdGridMaterialOption): EditorHandlerRow {\r\n const { editor } = gridOption;\r\n if (!editor) {\r\n return null;\r\n }\r\n let isDisabled = false;\r\n if (typeof (editor?.disabled) === 'function') {\r\n isDisabled = editor.disabled(item);\r\n } else {\r\n isDisabled = editor?.disabled;\r\n }\r\n if (editor.type === 'inline') {\r\n const removable = editor.removable;\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: !isDisabled,\r\n editable: false,\r\n removable: status !== 'create' && (typeof (removable) === 'function' ? removable(item) : removable),\r\n savable: false,\r\n cancelable: !isDisabled && status === 'create'\r\n }\r\n } else if (editor.type === 'focus') {\r\n if (isDisabled) {\r\n return null;\r\n }\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: !!status,\r\n editable: !status,\r\n removable: false,\r\n savable: !!status,\r\n cancelable: !!status\r\n }\r\n } else if (editor.type === 'popup') {\r\n if (isDisabled) {\r\n return null;\r\n }\r\n item.editorHandlerRow = {\r\n ...item.editorHandlerRow,\r\n visible: false,\r\n editable: !status,\r\n removable: false,\r\n savable: false,\r\n cancelable: false\r\n }\r\n }\r\n item.editorHandlerColumn = item.editorHandlerColumn || {};\r\n const { columns } = gridOption;\r\n for (const col of columns) {\r\n if (col.type === 'children-col') {\r\n for (const childCol of col.children) {\r\n item.editorHandlerColumn[childCol.field] = {\r\n ...item.editorHandlerColumn[childCol.field],\r\n visible: this.#visible(childCol, item)\r\n }\r\n }\r\n } else {\r\n item.editorHandlerColumn[col.field] = {\r\n ...item.editorHandlerColumn[col.field],\r\n visible: this.#visible(col, item)\r\n }\r\n }\r\n }\r\n this.zone.run(() => {\r\n item.sdId = CalculateSdId(item);\r\n });\r\n return item.editorHandlerRow;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdEditorValidate'\r\n})\r\nexport class SdEditorValidatePipe implements PipeTransform {\r\n #previous: Date;\r\n #delay = 200; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện validate\r\n async transform(sdId: string, item: SdItem, items: SdItem[], gridOption: SdGridMaterialOption): Promise<string> {\r\n const { editor } = gridOption;\r\n if (!editor.validate) {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n if(editor.type === 'popup') {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n if (editor.type === 'focus' && !item.editorStatus) {\r\n item.editorErrorMessage = null;\r\n return;\r\n }\r\n this.#previous = new Date();\r\n await new Promise(resolve => setTimeout(resolve, this.#delay));\r\n const now = new Date();\r\n const dif = now.getTime() - this.#previous.getTime();\r\n if (dif < this.#delay) {\r\n return;\r\n }\r\n const result = editor.validate(item, items?.indexOf(item));\r\n if (result instanceof Promise) {\r\n item.editorErrorMessage = await result;\r\n return;\r\n } else {\r\n item.editorErrorMessage = result;\r\n return;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\n@Pipe({\r\n name: 'sdStyleRowCss'\r\n})\r\nexport class SdStyleRowCss implements PipeTransform {\r\n transform(item: any, gridOption: SdGridMaterialOption) {\r\n return gridOption?.style?.rowCss?.(item) || {};\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\n\r\n@Component({\r\n selector: 'sd-desktop-editor-validation',\r\n templateUrl: './desktop-editor-validation.component.html',\r\n styleUrls: ['./desktop-editor-validation.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDesktopEditorValidation {\r\n @Input() sdId: string;\r\n @Input() item: any;\r\n @Input() items: any[];\r\n @Input() gridOption: SdGridMaterialOption;\r\n constructor(\r\n ) { }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, QueryList } from '@angular/core';\r\nimport { SdGridMaterialColumn } from '../../models/grid-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 @Input() value: any;\r\n @Input() columnFilter: {\r\n [key: string]: any\r\n } = {};\r\n @Input() column: SdGridMaterialColumn;\r\n @Output() filterChange = new EventEmitter();\r\n constructor(\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.column.type === 'date' || this.column.type === 'time' || this.column.type === 'datetime') {\r\n if (!this.column?.option?.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 onFilterChange = () => {\r\n this.filterChange.emit();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialSelection } from '../models/grid-selection.model';\r\nimport { SdItem } from '../models/grid.model';\r\n\r\n@Pipe({\r\n name: 'selectionVisible'\r\n})\r\nexport class SdSelectionVisiblePipe implements PipeTransform {\r\n transform = (rowData: SdItem, selection: SdGridMaterialSelection): boolean => {\r\n const { actions } = selection;\r\n const groupedActions: string[] = [];\r\n rowData.actions = rowData.actions || [];\r\n if (!actions?.length) {\r\n rowData.selectable = true;\r\n return rowData.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)) {\r\n flag = true;\r\n rowData.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.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.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)) {\r\n rowData.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n } else if (!hidden) {\r\n rowData.actions.push(key);\r\n if (isGrouped) {\r\n groupedActions.push(key);\r\n }\r\n }\r\n }\r\n }\r\n rowData.selectable = !!rowData.actions.length;\r\n if (!rowData.selectable || !groupedActions.length || rowData?.sdGroup?.items?.length) {\r\n return rowData.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.actions.some(action => !groupedActions.includes(action));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdGridMaterialOption } from '../../models/grid-option.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-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 SdGridQuickAction {\r\n @Input() gridOption: SdGridMaterialOption;\r\n @Input() selectedItems: any[];\r\n @Output() clear = new EventEmitter();\r\n constructor(\r\n ) { }\r\n onClear = () => {\r\n this.clear.emit();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdUtilityService } from '@sd-angular/core/utility';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdCellView } from '../models/grid-cell.model';\r\nimport { SdGridMaterialColumn } from '../models/grid-column.model';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdColumnValuesPipe } from './column-values.pipe';\r\n@Pipe({\r\n name: 'cellView'\r\n})\r\nexport class SdCellViewPipe implements PipeTransform {\r\n #maxSecond = 60;\r\n #maxMinute = this.#maxSecond * 60;\r\n #maxHour = this.#maxMinute * 24;\r\n #maxDay = this.#maxHour * 30;\r\n #maxMonth = this.#maxHour * 365;\r\n #isMobileOrTablet = false;\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private utilityService: SdUtilityService,\r\n private columnValuesPipe: SdColumnValuesPipe) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n async transform(\r\n value: any,\r\n rowData: any,\r\n column: SdGridMaterialColumn,\r\n gridOption: SdGridMaterialOption,\r\n key: string): Promise<SdCellView> {\r\n const { displayOnEmpty } = gridOption;\r\n const { align, click, tooltip, htmlTemplate, transform } = column;\r\n const result: SdCellView = {\r\n badge: null,\r\n tooltip: null,\r\n display: {\r\n align: align || (column.type === 'number' ? 'right' : 'left'),\r\n value\r\n },\r\n click: null\r\n };\r\n // Display\r\n if (typeof (htmlTemplate) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = htmlTemplate(value, rowData, this.#isMobileOrTablet);\r\n } else {\r\n if (column.type === 'datetime' || column.type === 'date' || column.type === 'time') {\r\n const { transformDate } = column;\r\n if (transformDate) {\r\n value = transformDate(value, rowData);\r\n }\r\n }\r\n if (typeof (transform) === 'function') {\r\n const val = transform(value, rowData);\r\n if (val instanceof Promise) {\r\n result.display.value = await val;\r\n } else {\r\n result.display.value = val;\r\n }\r\n } else {\r\n if (column.type === 'date' || column.type === 'datetime') {\r\n const { option } = column;\r\n const seconds = Math.round((new Date().getTime() - new Date(value).getTime()) / 1000);\r\n if (option?.timeDifferent === 'month' && seconds < this.#maxMonth) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'day' && seconds < this.#maxDay) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'hour' && seconds < this.#maxHour) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'minute' && seconds < this.#maxMinute) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else if (option?.timeDifferent === 'second' && seconds < this.#maxSecond) {\r\n result.display.value = this.utilityService.timeDifference(value);\r\n result.tooltip = Date.toFormat(value, column.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm');\r\n } else {\r\n const date = Date.toFormat(value, 'dd/MM/yyyy');\r\n const time = Date.toFormat(value, 'HH:mm');\r\n const dateTime = Date.toFormat(value, 'HH:mm');\r\n if (column.type === 'datetime' && time && time !== '00:00') {\r\n result.display.value = dateTime;\r\n result.display.hasHtml = true;\r\n result.display.html = `<span class=\"d-block T14R text-black400\">${Date.toFormat(value, 'HH:mm')}</span><span class=\"d-block T14R\">${Date.toFormat(value, 'dd/MM/yyyy')}</span>`;\r\n } else {\r\n result.display.value = date;\r\n }\r\n }\r\n }\r\n if (column.type === 'time') {\r\n result.display.value = Date.toFormat(value, 'HH:mm');\r\n }\r\n if (column.type === 'values') {\r\n result.display.value = await this.columnValuesPipe.transform(value, column);\r\n } else if (column.type === 'number' && Number.isNumber(value)) {\r\n result.display.value = 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 result.display.value = value === true ? (option?.displayOnTrue || 'True') : (option?.displayOnFalse || 'False');\r\n } else {\r\n result.display.value = null;\r\n }\r\n }\r\n }\r\n if (displayOnEmpty) {\r\n let values = [null, undefined, ''];\r\n if (typeof (displayOnEmpty) === 'object') {\r\n const { display, emptyValues } = displayOnEmpty;\r\n values = [null, undefined, '', ...emptyValues];\r\n if (values.includes(result.display.value)) {\r\n if (typeof (display) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = display(rowData, column);\r\n } else {\r\n result.display.hasHtml = true;\r\n result.display.html = `<div class=\"T16R text-black400\">--</div>`;\r\n }\r\n }\r\n } else {\r\n if (values.includes(result.display.value)) {\r\n if (typeof (displayOnEmpty) === 'function') {\r\n result.display.hasHtml = true;\r\n result.display.html = displayOnEmpty(rowData, column);\r\n } else {\r\n result.display.hasHtml = true;\r\n result.display.html = `<div class=\"T16R text-black400\">--</div>`;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Badge\r\n if ((column.type === 'string' || column.type === 'number' || column.type === 'values') && column.badge) {\r\n result.badge = {\r\n type: !column?.badgeType ? 'round' : 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 result.badge = {\r\n type: !column?.badgeType ? 'round' : column.badgeType,\r\n color: !!value ? 'success' : 'danger',\r\n icon: null\r\n };\r\n }\r\n // Tooltip\r\n if (typeof (tooltip) === 'function') {\r\n result.tooltip = tooltip(value, rowData);\r\n }\r\n // Clickable\r\n if (typeof (click) === 'function') {\r\n result.click = () => click(value, rowData);\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdGridMaterialOption } from '../models/grid-option.model';\r\nimport { SdGridMaterialItem } from '../models/grid.model';\r\n@Pipe({\r\n name: 'sdGroup'\r\n})\r\nexport class SdGroupPipe implements PipeTransform {\r\n transform(items: any[], gridOption: SdGridMaterialOption): SdGridMaterialItem[] {\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]: SdGridMaterialItem[]\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: SdGridMaterialItem[] = [];\r\n for (const key of Object.keys(groupItem)) {\r\n results.push({\r\n sdGroup: {\r\n items: groupItem[key],\r\n htmlTemplate: htmlTemplate(groupItem[key])\r\n }\r\n });\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 { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdGridMaterial } from './grid-material.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 { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSliderModule } from '@angular/material/slider';\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 { SdColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { SdColumnHtmlTemplatePipe } from './pipes/column-html-template.pipe';\r\nimport { SdDesktopCellView } from './components/desktop-cell-view/desktop-cell-view.component';\r\nimport { SdColumnTransformPipe } from './pipes/column-transform.pipe';\r\nimport { SdServiceModule } from '@sd-angular/core/service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { SdMaterialCellDefDirective } from './directives/sd-material-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 { SdGridFilter } from './components/grid-filter/grid-filter.component';\r\nimport { SdPopupFilter } from './components/popup-filter/popup-filter.component';\r\n\r\nimport { SdGridFilterService } from './services/grid-filter.service';\r\nimport { SdDesktopCellChildrenView } from './components/desktop-cell-children-view/desktop-cell-children-view.component';\r\nimport { SdColumnChildrenFilterPipe } from './pipes/column-children-filter.pipe';\r\nimport { SdColumnTitlePipe } from './pipes/column-title.pipe';\r\nimport { SdDesktopCommand } from './components/desktop-command/desktop-command.component';\r\nimport { SdMaterialFilterDefDirective } from './directives/sd-material-filter-def.directive';\r\nimport { SdMaterialFooterDefDirective } from './directives/sd-material-footer-def.directive';\r\nimport { SdMaterialSubInformationDefDirective } from './directives/sd-material-sub-information-def.directive';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { SdMaterialEmptyDataDefDirective } from './directives/sd-material-empty-data-def.directive';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { SdColumnBadgePipe } from './pipes/column-badge.pipe';\r\nimport { SdGridConfigurationResultPipe } from './pipes/grid-configuration-result.pipe';\r\nimport { SdPopupExport } from './components/popup-export/popup-export.component';\r\nimport { SdPopupGridConfiguration } from './components/popup-grid-configuration/popup-grid-configuration.component';\r\nimport { SdGridConfigurationService } from './services/grid-configuration.service';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatDividerModule } from '@angular/material/divider';\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 { SdDynamicColumn } from './components/dynamic-column/dynamic-column.component';\r\nimport { SdGeneratedColumnService } from './services/generated-column/generated-column.service';\r\nimport { SdDesktopCell } from './components/desktop-cell/desktop-cell.component';\r\nimport { SdDesktopCellEditor } from './components/desktop-cell-editor/desktop-cell-editor.component';\r\nimport { SdEditorHandlerRowPipe } from './pipes/editor-handler-row.pipe';\r\nimport { SdEditorHandlerColumnPipe } from './pipes/editor-handler-column.pipe';\r\nimport { SdEditorValidatePipe } from './pipes/editor-validate.pipe';\r\nimport { SdStyleRowCss } from './pipes/style-row-css.pipe';\r\nimport { SdDesktopEditorValidation } from './components/desktop-editor-validation/desktop-editor-validation.component';\r\nimport { SdColumnInlineFilter } from './components/column-inline-filter/column-inline-filter.component';\r\nimport { SdSelectionVisiblePipe } from './pipes/selection-visible.pipe';\r\nimport { SdGridQuickAction } from './components/quick-action/quick-action.component';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdCellViewPipe } from './pipes/cell-view.pipe';\r\nimport { SdGroupPipe } from './pipes/sd-group.pipe';\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 FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatFormFieldModule,\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 MatChipsModule,\r\n MatRadioModule,\r\n MatSlideToggleModule,\r\n MatCheckboxModule,\r\n MatListModule,\r\n MatDividerModule,\r\n CdkTableModule,\r\n DragDropModule,\r\n SdFormModule,\r\n SdServiceModule,\r\n MatSliderModule,\r\n ScrollingModule,\r\n SdCommonModule\r\n ],\r\n declarations: [\r\n SdGridQuickAction,\r\n SdDesktopCell,\r\n SdDesktopCellEditor,\r\n SdDesktopEditorValidation,\r\n SdDesktopCellView,\r\n SdDesktopCellChildrenView,\r\n SdDesktopCommand,\r\n SdColumnInlineFilter,\r\n SdGridMaterial,\r\n\r\n SdMaterialFooterDefDirective,\r\n SdMaterialCellDefDirective,\r\n SdMaterialFilterDefDirective,\r\n SdMaterialSubInformationDefDirective,\r\n SdMaterialEmptyDataDefDirective,\r\n SdPopupExport,\r\n SdPopupGridConfiguration,\r\n SdGridFilter,\r\n SdPopupFilter,\r\n SdDynamicColumn,\r\n\r\n // Pipes\r\n SdGridConfigurationResultPipe,\r\n SdColumnChildrenFilterPipe,\r\n SdColumnTitlePipe,\r\n SdCommandFilterPipe,\r\n SdCommandDisablePipe,\r\n SdCommandIconPipe,\r\n SdCommandTitlePipe,\r\n SdColumnValuesPipe,\r\n SdColumnHtmlTemplatePipe,\r\n SdColumnTransformPipe,\r\n SdColumnTooltipPipe,\r\n SdColumnBadgePipe,\r\n SdFilterColumnPipe,\r\n SdFilterExternalPipe,\r\n SdSelectionActionFilterPipe,\r\n SdSelectionVisiblePipe,\r\n SdSelectionDisablePipe,\r\n SdSelectionVisibleSelectAllPipe,\r\n SdEditorHandlerRowPipe,\r\n SdEditorHandlerColumnPipe,\r\n SdEditorValidatePipe,\r\n SdStyleRowCss,\r\n SdCellViewPipe,\r\n SdGroupPipe\r\n ],\r\n exports: [\r\n SdGridMaterial,\r\n SdMaterialFooterDefDirective,\r\n SdMaterialCellDefDirective,\r\n SdMaterialFilterDefDirective,\r\n SdMaterialEmptyDataDefDirective,\r\n SdMaterialSubInformationDefDirective\r\n ],\r\n providers: [\r\n DatePipe,\r\n DecimalPipe,\r\n CdkColumnDef,\r\n SdGridFilterService,\r\n SdGridConfigurationService,\r\n SdGeneratedColumnService,\r\n SdColumnValuesPipe,\r\n SdEditorHandlerColumnPipe,\r\n {\r\n provide: MatPaginatorIntl, useClass: MatPaginatorIntlCro\r\n }\r\n ]\r\n})\r\nexport class SdGridMaterialModule {\r\n}\r\n"]}
|