@sd-angular/core 1.3.29 → 1.3.30
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.umd.js +50 -187
- package/bundles/sd-angular-core-grid.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid.umd.min.js +1 -1
- package/bundles/sd-angular-core-grid.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
- package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
- package/bundles/sd-angular-core.umd.js +4 -4
- package/bundles/sd-angular-core.umd.min.js +1 -1
- package/bundles/sd-angular-core.umd.min.js.map +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.js +35 -27
- package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.js +1 -1
- package/esm2015/grid/src/lib/grid.component.js +11 -118
- package/esm2015/public-api.js +1 -3
- package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -1
- package/fesm2015/sd-angular-core-grid.js +43 -142
- package/fesm2015/sd-angular-core-grid.js.map +1 -1
- package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
- package/fesm2015/sd-angular-core.js +0 -1
- package/fesm2015/sd-angular-core.js.map +1 -1
- package/grid/sd-angular-core-grid.metadata.json +1 -1
- package/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.d.ts +12 -12
- package/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.d.ts +1 -2
- package/grid/src/lib/grid.component.d.ts +5 -6
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/{sd-angular-core-1.3.29.tgz → sd-angular-core-1.3.30.tgz} +0 -0
- package/upload-excel/sd-angular-core-upload-excel.metadata.json +1 -1
- package/bundles/sd-angular-core-excel.umd.js +0 -500
- package/bundles/sd-angular-core-excel.umd.js.map +0 -1
- package/bundles/sd-angular-core-excel.umd.min.js +0 -16
- package/bundles/sd-angular-core-excel.umd.min.js.map +0 -1
- package/esm2015/excel/index.js +0 -2
- package/esm2015/excel/sd-angular-core-excel.js +0 -5
- package/esm2015/excel/src/lib/excel.model.js +0 -3
- package/esm2015/excel/src/lib/excel.service.js +0 -91
- package/esm2015/excel/src/public-api.js +0 -6
- package/excel/index.d.ts +0 -1
- package/excel/package.json +0 -12
- package/excel/sd-angular-core-excel.d.ts +0 -4
- package/excel/sd-angular-core-excel.metadata.json +0 -1
- package/excel/src/lib/excel.model.d.ts +0 -65
- package/excel/src/lib/excel.service.d.ts +0 -26
- package/excel/src/public-api.d.ts +0 -2
- package/fesm2015/sd-angular-core-excel.js +0 -100
- package/fesm2015/sd-angular-core-excel.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/grid/src/lib/grid.model.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-handler.pipe.ts","../../../../projects/sd-core/grid/src/lib/models/grid-configuration.model.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-def.directive.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-footer-def.directive.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-editor-def.directive.ts","../../../../projects/sd-core/grid/src/lib/models/handler-local.ts","../../../../projects/sd-core/grid/src/lib/models/handler-dotnet.ts","../../../../projects/sd-core/grid/src/lib/grid.component.ts","../../../../projects/sd-core/grid/src/lib/pipes/dynamic-items.pipe.ts","../../../../projects/sd-core/grid/src/lib/components/grid-config/grid-config.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-edit/grid-desktop-column-edit.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-view/grid-desktop-column-view.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-inline-filter/grid-desktop-inline-filter.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-mobile-item-view/grid-mobile-item-view.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-editor/grid-popup-editor.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-filter/grid-popup-filter.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-sub-information/grid-sub-information.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-children-view/grid-desktop-column-children-view.component.ts","../../../../projects/sd-core/grid/src/lib/pipes/cell-desktop-class-name.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/cell-mobile-class-name.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-command-filter.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-html-template.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-title.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-values.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-disabled.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-hidden.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-dynamic-item.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-sub-information-handler.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-validate.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/filter-mobile.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/mobile-command-filter.ts","../../../../projects/sd-core/grid/src/lib/pipes/mobile-view-html-template.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/value-transform.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-popup-visible.pipe.ts","../../../../projects/sd-core/grid/src/lib/directives/sub-information-header-def.directive.ts","../../../../projects/sd-core/grid/src/lib/components/grid-import-excel/grid-import-excel.component.ts","../../../../projects/sd-core/grid/src/lib/grid.module.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-filter/grid-popup-filter.model.ts"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","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","this","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","defaultGridOption","type","undefined","items","filter","disabled","sortable","paginate","pageSize","pageCount","commands","columns","EditorHandlerPipe","transform","item","gridOption","visible","column","isDisabled","editor","_a","_b","editingStatus","_c","alwayDisplay","_d","editorHandler","_f","_g","field","Pipe","args","name","GRID_CONFIG","InjectionToken","templateRef","Directive","selector","TemplateRef","Input","datePipe","_this","localItems","filterInfo","filterValue","rawFilter","toString","trim","toLowerCase","columnValue","fValue","replace","cValue","date","fromDate","Date","toDate","setDate","getDate","getTime","orderBy","orderDirection","find","type_1","field_1","sort","current","s1","s2","reverse","total","Injectable","DatePipe","mapRequest","whereClause","pageNumber","externalFilter","customFilter","executeColumnNoChildren","_isGuid","startsWith","substring","endsWith","getFullYear","getMonth","forEach","columnChildren","flag","_h","children","_j","_k","_l","Number","isNaN","isDate","substr","executeColumnChildren","externalFilters","rawExternalFilter","from","to","addDays","_e","mapResponse","res","key","test","SdGrid","configuration","ref","deviceService","handlerLocal","handlerDotnet","translateService","loadingService","apiService","excelService","notifyService","editorVisiblePipe","isMobileOrTablet","displayKey","hiddenPaginate","inlineExternal","inlineColumn","quickFilters","pages","totalPage","isLoading","viewItems","fixedColumns","normalColumns","isCheckedAll","selectedItems","cellDefs","QueryList","cellDef","cellEditorDefs","cellEditorDef","cellFooterDefs","cellFooterDef","_numberOfFooterRows","footerRows","_paginator","selectedItem","_subscription","Subscription","rowHandler","click","onClickRow","dblClick","onDblClickRow","setOption","option","initConfiguration","initTranslate","command","hidden","sdGridConfig","initExternalFilter","resize","detectChanges","gridConfiguration","columnInline","quickFilterVisibility","translate","handler","handlerCustom","notify","warning","assign","title","childCommand","childColumn","reload","gridItems","currentPage","pageIndex","filter_1","getFilterInfo","method","queryString","keys","map","join","url","includes","response","_2","_z","post","_0","Array","isArray","results","_1","originItem","_setSelectedItems","onReloadCompleted","generateViewItems","generateEditorHandlers","$","gridBody","nativeElement","scrollTop","firstPage","handle","error_1","markForCheck","selectPage","updateFilter","param","isChecked","temporary","subInformation","blinker","onCheck","isCheckbox","checkable","columnSortable","clearFilter","initFilter","sdGridPopupFilter","onClearFilter","expandOrCollapse","gridItem","isOpened","lazyLoading","isLoaded","onLoad","subItems","alert","err_1","onCreate","addable","onAdd","splice","onUpdate","isModified","generateEditorHanlder","sdGridPopupEditor","open","onSave","saving","validate","message","err_2","onCancel","idx1","idx2","default","defaultFrom","defaultTo","onSearch","searchValue","onFilterConfigurationLoaded","selectedQuickFilter","quickFilter","code","f1","JSON","stringify","f2","parse","refreshExternalFilter","onSelectQuickFilter","updateConfiguration","getExportItems","filter_2","error_2","_3","_4","onExportByTemplate","params","start","exportItems","export","finally","stop","_m","mapping","excelConfig","_o","obj","trueValue","falseValue","data","values","text","valueField","displayField","generateExcelDataByTemplate","fullPath","excelColumns","bigExport","filePath","destination","latestRow","this_1","_p","_q","_r","_s","download","onEditorChange","onSelectPageSize","_y","_u","_t","_x","_w","_v","onCreateQuickFilter","ev","matSelect","close","onFilterPopup","onEditQuickFilter","onDeleteQuickFilter","isDesktop","defineProperty","paginator","add","page","subscribe","ngAfterViewInit","fixedHeaders","changes","pipe","startWith","setTimeout","toArray","left","outerWidth","css","merge","fixedBodies","fixedPerRow","sdCellDef","sdCellEditorDef","sdCellFooterDef","fill","ngOnDestroy","unsubscribe","reloadItem","id","blink","stopBlink","index","some","getItems","checkAll","height","style","window","innerHeight","top","getBoundingClientRect","bottom","hideFooter","setHeight","loadConfig","configResult","initDictionaryColumnValues","dictionary","icon","color","backgroundColor","trackById","errorMessage","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","Inject","Optional","ChangeDetectorRef","DeviceDetectorService","HandlerLocal","HandlerDotnet","SdTranslateService","SdLoadingService","SdApiService","SdExcelService","SdNotifyService","ViewChildren","ViewChild","static","ContentChildren","SdCellDefDirective","SdCellEditorDefDirective","SdCellFooterDevDirective","MatPaginator","SdDynamicItems","dynamicItems","SdGridConfig","settingService","sdChange","EventEmitter","_setting","_initDefault","storage","columnConfigs","originColumn","width","fixed","ngOnInit","init","emitOnChange","remove","modal","save","isSafeInteger","reset","moveColumnUp","temp","moveColumnDown","columnConfig","findIndex","emit","SdSettingService","Output","change","onAutocompleteChange","onSelectionChange","onUpdateFilter","check","SdGridPopupEditor","SdGridPopupExportExcel","prefix","newExcelConfig","extendColumns","excelConfigs","exportByTemplate","tabIndex","selectedExcelConfig","exportableColumns","selected","generateExcelColumns","columns_1","columns_1_1","e_2","description","initTemplate","fileName","sheets","exportOption","sheet","fields","generateExcelTemplate","initDefaultTemplate","generateTemplate","downloadTemplate","generateAndUploadTemplate","generateAndUploadExcelTemplate","fullKey","uploadTemplate","validator","removable","removeTemplate","confirm","idx","exportDefault","columns_2","columns_2_1","e_6","newTemplate","confirmWithInput","maxlength","onChangeRadio","matRadioChange","hash","loadConfiguration","getFiles","SdGridPopupFilter","keyPrefix","accept","clear","loadInlineFilter","newQuickFilter","maxQuickFilters","fixedColums","eFilter","_loadConfiguration","_6","selectedCode","onDetailQuickFilter","stopPropagation","preventDefault","popupQuickFilterDetail","onAcceptQuickFilter","onInlineChange","onAccept","filterOption","multiple","selectedField","onClear","selectedQuickFilterCode","encapsulation","ViewEncapsulation","None","SdGridPopupQuickFilterDetail","selectableFields","execute","group","onSelectField","onSelectFields","fromTitle","toTitle","externalFields","columnFields","SdGridSubInformation","CellDesktopClassNamePipe","rowData","isChildren","classNames","badge","CellMobileClassNamePipe","ColumnCommandFilterPipe","commands_1","commands_1_1","hiddenByItem","ColumnHtmlTemplatePipe","htmlTemplate","ColumnTitlePipe","dynamicTitle","ColumnValuesPipe","utilityService","hashKey","cache","arrayToObject","SdUtilityService","CommandDisabledPipe","CommandFilterPipe","e_1","CommandHidden","hiddenResult","childHidden","childHiddenByItem","CommandIconPipe","CommandTitlePipe","EditorDynamicItemPipe","previousResults","delay","dependOnField","previous","now","EditorSubInformationHandlerPipe","EditorValidatePipe","FilterMobilePipe","pure","MobileCommandFilterPipe","MobileViewHtmlTemplatePipe","ValueTransformPipe","decimalPipe","isNumber","DecimalPipe","EditorPopupVisiblePipe","SdGridImportExcel","control","gridColumns","ignoreImport","SdUploadExcel","NgModule","imports","CommonModule","FormsModule","ReactiveFormsModule","MatInputModule","MatFormFieldModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatChipsModule","MatRadioModule","MatSlideToggleModule","MatSelectModule","MatCheckboxModule","SdUploadExcelModule","SdFormModule","SdServiceModule","declarations","SdGridDesktopColumnEdit","SdGridDesktopColumnView","SdGridDesktopInlineFilter","SdGridMobileItemView","GridDesktopColumnChildrenViewComponent","SdSubHeaderDefDirective","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\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 { IHandlerServer } from './models/handler';\r\nimport { Observable } from 'rxjs';\r\nimport { SdGridFilterInfo } from './models/filter-info.model';\r\n\r\nexport declare type SdGridOption =\r\n GridLocalOption |\r\n GridDotnetOption |\r\n GridCustomOption;\r\n\r\nexport declare type SdGridCommand = GridCommandNoChildren | GridCommandWithChildren;\r\n\r\nexport declare type SdGridColumn =\r\n GridColumnText |\r\n GridColumnColor |\r\n GridColumnNumber |\r\n GridColumnBool |\r\n GridColumnDate |\r\n GridColumnDateTime |\r\n GridColumnTime |\r\n GridColumnValues |\r\n GridColumnRadio |\r\n GridColumnImage |\r\n GridColumnChildren;\r\n\r\nexport declare type SdGridExternalFilter =\r\n GridExternalFilterText |\r\n GridExternalFilterDate |\r\n GridExternalFilterDateRange |\r\n GridExternalFilterDateRangeFull |\r\n GridExternalFilterNumber |\r\n GridExternalFilterNumberRange |\r\n GridExternalFilterValues |\r\n GridExternalFilterRadio |\r\n GridExternalFilterBool |\r\n GridExternalFilterCustom;\r\n\r\nexport const defaultGridOption: SdGridOption = {\r\n type: undefined,\r\n items: [],\r\n filter: {\r\n type: 'inline',\r\n disabled: false\r\n },\r\n sortable: true,\r\n paginate: {\r\n pageSize: 50,\r\n pageCount: 5\r\n },\r\n commands: [],\r\n columns: []\r\n};\r\n\r\nexport interface SdGridBaseOption {\r\n height?: string;\r\n key?: string;\r\n filter?: GridBaseOptionFilter;\r\n checkable?: boolean;\r\n sortable?: boolean;\r\n numberable?: boolean;\r\n editor?: {\r\n type?: 'focus' | 'inline' | 'popup',\r\n addable?: boolean;\r\n editable?: boolean;\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n limit?: number;\r\n onAdd?: (rowData: any) => void,\r\n onEdit?: (rowData: any) => void,\r\n onSave?: (rowData: any) => void | Promise<void>,\r\n validate?: (rowData: any) => string | Promise<string>\r\n };\r\n paginate?: {\r\n pageSize?: number,\r\n pageCount?: number\r\n };\r\n export?: GridBaseOptionExport;\r\n translate?: boolean;\r\n hideFooter?: boolean;\r\n hideReload?: boolean;\r\n commands?: SdGridCommand[];\r\n columns: SdGridColumn[];\r\n subInformation?: SubOption;\r\n mobileOrTablet?: {\r\n useGridView?: boolean;\r\n htmlTemplate?: (rowData: any, columns?: SdGridColumn[]) => string;\r\n };\r\n // events\r\n onClickRow?: (rowData: any) => void;\r\n onDblClickRow?: (rowData: any) => void;\r\n onCheck?: (items: any[], rowData?: any) => void;\r\n onImportExcel?: (items: any[]) => void;\r\n onReloadCompleted?: (items: any[]) => Promise<void> | void;\r\n}\r\n\r\nexport interface GridBaseOptionExport {\r\n disabled?: boolean;\r\n fileName?: string;\r\n validator?: (fileName: string) => string;\r\n items?: (filterInfo: SdGridFilterInfo) => Promise<any[]>;\r\n mapping?: (items: any[], fileName?: string) => any[] | Promise<any[]>;\r\n columns?: SdGridColumn[];\r\n bigExport?: boolean;\r\n sheets?: {\r\n name: string,\r\n items: any[] | (() => Promise<any[]>),\r\n fields: string[]\r\n }[];\r\n}\r\n\r\nexport interface GridBaseOptionFilter {\r\n type?: 'inline' | 'popup';\r\n columnInline?: 'outside';\r\n disabled?: boolean;\r\n customFilter?: any | (() => any);\r\n externalFilters?: SdGridExternalFilter[];\r\n quickFilterVisibility?: 'inline' | 'popup' | 'none';\r\n multiple?: boolean;\r\n}\r\n\r\ninterface GridLocalOption extends SdGridBaseOption {\r\n type: 'local';\r\n items: any[] | (() => any[] | Promise<any[]>);\r\n}\r\n\r\ninterface GridDotnetOption extends SdGridBaseOption {\r\n type: 'dotnet';\r\n method?: 'POST' | 'GET';\r\n url: string;\r\n handler?: {\r\n beforeRequest: (filterInfo: SdGridFilterInfo) => Promise<SdGridFilterInfo>;\r\n afterResponse: (items: any[], total: number) => Promise<{ items: any[], total: number }>;\r\n };\r\n}\r\n\r\ninterface GridCustomOption extends SdGridBaseOption {\r\n type: 'custom';\r\n url: string;\r\n method?: 'POST' | 'GET';\r\n handlerCustom?: IHandlerServer;\r\n}\r\n\r\ninterface GridCommandBase {\r\n title?: string | ((rowData?: any) => string);\r\n translate?: boolean;\r\n disabled?: boolean | ((rowData?: any) => boolean);\r\n hidden?: boolean | (() => boolean);\r\n hiddenByItem?: ((rowData: any) => boolean) | ((rowData: any) => Promise<boolean>);\r\n}\r\n\r\nexport interface GridCommandNoChildren extends GridCommandBase {\r\n icon: string | ((rowData?: any) => string);\r\n fontSet?: 'material-icons' |\r\n 'material-icons-outlined' |\r\n 'material-icons-outlined' |\r\n 'material-icons-round' |\r\n 'material-icons-sharp';\r\n color?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\r\n click?: (rowData?: any) => void;\r\n}\r\n\r\nexport interface GridCommandWithChildren extends GridCommandBase {\r\n icon?: string | ((rowData?: any) => string);\r\n children?: GridCommandNoChildren[];\r\n}\r\n\r\ninterface GridBaseColumn {\r\n field: string;\r\n title: string;\r\n translate?: boolean;\r\n description?: string;\r\n width?: string;\r\n fixed?: boolean;\r\n format?: string;\r\n hidden?: boolean | (() => boolean);\r\n htmlTemplate?: (value: any, rowData?: any, isMobileOrTablet?: boolean) => string;\r\n transform?: (value: any, rowData?: any) => string;\r\n badge?: ((rowData?: any, value?: any) => 'PRIMARY' | 'SECONDARY' | 'INFO' | 'SUCCESS' | 'WARNING' | 'DANGER' | 'LIGHT' | 'DARK');\r\n click?: (value: any, rowData?: any) => void | Promise<void>;\r\n ignoreImport?: boolean;\r\n sortable?: boolean;\r\n align?: 'left' | 'center' | 'right';\r\n filter?: {\r\n disabled?: boolean;\r\n priority?: 'low';\r\n };\r\n}\r\n\r\nexport interface EditorHandler {\r\n [column: string]: {\r\n visible?: boolean | 'create' | 'update',\r\n items?: any[] | Observable<any[]>\r\n };\r\n}\r\n\r\nexport interface GridItem {\r\n blinker?: any;\r\n originItem?: any;\r\n temporary?: any;\r\n isChecked?: boolean;\r\n editingStatus?: 'create' | 'update';\r\n editorHandler?: EditorHandler & {\r\n disabled?: boolean;\r\n errorMessage?: string;\r\n saving?: boolean;\r\n };\r\n subInformation?: {\r\n isOpened?: boolean;\r\n isLoaded?: boolean;\r\n isLoading?: boolean;\r\n subItems?: any[];\r\n };\r\n [key: string]: any;\r\n}\r\n\r\nexport interface ColumnCommand {\r\n icon: string | ((rowData?: any) => string);\r\n title?: string | ((rowData?: any) => string);\r\n click: (rowData: GridItem) => void | Promise<void>;\r\n hiddenByItem?: ((rowData: any) => boolean) | ((rowData: any) => Promise<boolean>);\r\n}\r\n\r\ninterface GridColumnText extends GridBaseColumn {\r\n type: 'string';\r\n commands?: ColumnCommand[];\r\n editor?: {\r\n autocomplete?: boolean,\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any, value?: any, selected?: any | any[]) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n item?: DynamicEditorItem,\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string\r\n };\r\n}\r\n\r\ninterface GridColumnColor extends GridBaseColumn {\r\n type: 'color';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string\r\n };\r\n}\r\n\r\ninterface GridColumnNumber extends GridBaseColumn {\r\n type: 'number';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: number\r\n };\r\n}\r\n\r\ninterface GridColumnBool extends GridBaseColumn {\r\n type: 'bool';\r\n // properties for bool type\r\n trueValue?: string;\r\n falseValue?: string;\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: boolean\r\n };\r\n}\r\n\r\ninterface GridColumnDate extends GridBaseColumn {\r\n type: 'date';\r\n timeDifferent?: 'second' | 'minute' | 'hour';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnDateTime extends GridBaseColumn {\r\n type: 'datetime';\r\n timeDifferent?: 'second' | 'minute' | 'hour' | 'day' | 'month';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnTime extends GridBaseColumn {\r\n type: 'time';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnValues extends GridBaseColumn {\r\n type: 'values';\r\n values: {\r\n value: string,\r\n text: string,\r\n icon?: string,\r\n color?: string,\r\n backgroundColor?: string\r\n }[];\r\n dictionary?: {\r\n [value: string]: {\r\n text: string,\r\n icon?: string,\r\n color?: string,\r\n backgroundColor?: string\r\n }\r\n };\r\n editor?: {\r\n autocomplete?: boolean,\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any, value?: any, selected?: any | any[]) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n item?: DynamicEditorItem,\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | number\r\n };\r\n}\r\n\r\ninterface GridColumnRadio extends GridBaseColumn {\r\n type: 'radio';\r\n values?: any[];\r\n valueField: string;\r\n displayField: string;\r\n editor?: {\r\n required?: boolean;\r\n values?: {\r\n value: string,\r\n text: string,\r\n }[];\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | number\r\n };\r\n}\r\n\r\ninterface GridColumnImage extends GridBaseColumn {\r\n type: 'image';\r\n display: {\r\n height: number,\r\n width: number\r\n };\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean)\r\n };\r\n}\r\n\r\nexport type GridColumnChild = (Exclude<SdGridColumn, GridColumnChildren>\r\n & { dynamicTitle?: (rowData: any) => string | Promise<string>, colSpan: 1 | 2 });\r\n\r\nexport interface GridColumnChildren extends GridBaseColumn {\r\n type: 'children';\r\n children: GridColumnChild[];\r\n}\r\n\r\ninterface GridBaseExternalFilter {\r\n field: string;\r\n priority?: 'low';\r\n disabled?: boolean;\r\n}\r\n\r\ninterface GridExternalFilterText extends GridBaseExternalFilter {\r\n type: 'string';\r\n title: string;\r\n default?: string;\r\n}\r\n\r\ninterface GridExternalFilterDate extends GridBaseExternalFilter {\r\n type: 'date';\r\n title: string;\r\n default?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterDateRange extends GridBaseExternalFilter {\r\n type: 'daterange';\r\n title: string;\r\n fromTitle: string;\r\n toTitle: string;\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterDateRangeFull extends GridBaseExternalFilter {\r\n type: 'daterangefull';\r\n title: string;\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterNumber extends GridBaseExternalFilter {\r\n type: 'number';\r\n title: string;\r\n default?: number;\r\n}\r\n\r\ninterface GridExternalFilterNumberRange extends GridBaseExternalFilter {\r\n type: 'numberrange';\r\n title: string;\r\n fromTitle: string;\r\n toTitle: string;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterValues extends GridBaseExternalFilter {\r\n type: 'values';\r\n title: string;\r\n values: any[] | ((searchText?: string) => Promise<any[]>);\r\n valueField: string;\r\n displayField: string;\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n default?: string;\r\n}\r\n\r\ninterface GridExternalFilterRadio extends GridBaseExternalFilter {\r\n type: 'radio';\r\n title: string;\r\n values: any[];\r\n valueField: string;\r\n displayField: string;\r\n}\r\n\r\ninterface GridExternalFilterBool extends GridBaseExternalFilter {\r\n type: 'bool';\r\n title: string;\r\n trueValue?: string;\r\n falseValue?: string;\r\n}\r\n\r\ninterface GridExternalFilterCustom extends GridBaseExternalFilter {\r\n type: 'custom';\r\n title: string;\r\n onLoad?: (externalFilter: any, valueKey?: string, displayKey?: string) => { valueKey?: string, displayKey?: string };\r\n onClick: (externalFilter: any, valueKey?: string, displayKey?: string) => void;\r\n}\r\n\r\n// subInformation\r\nexport type SubOption = SubInformationDisabledLazyLoading | SubInformationEnabledLazyLoading;\r\ninterface BaseSubInformation {\r\n height?: string;\r\n commands?: SdGridCommand[];\r\n columns: (SdGridColumn & { title: string | ((rowData: any) => string) })[];\r\n}\r\ninterface SubInformationDisabledLazyLoading extends BaseSubInformation {\r\n lazyLoading: false;\r\n field: string;\r\n}\r\ninterface SubInformationEnabledLazyLoading extends BaseSubInformation {\r\n lazyLoading: true;\r\n onLoad: (rowData: any) => Promise<any[]>;\r\n}\r\n\r\nexport interface DynamicEditorItem {\r\n value: string;\r\n display: string;\r\n items: any[] | ((rowData?: any, value?: any) => any[] | Promise<any[]>);\r\n dependOnField?: string;\r\n}\r\n\r\n\r\nexport interface MobileConfiguration {\r\n htmlTemplate: (rowData?: any, columns?: SdGridColumn[]) => string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, SdGridOption, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorHandler'\r\n})\r\nexport class EditorHandlerPipe implements PipeTransform {\r\n transform(value: any, item: GridItem, gridOption: SdGridOption): boolean {\r\n const visible = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n let isDisabled = false;\r\n\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (column.editor) {\r\n isDisabled = typeof (column.editor.disabled) === 'function' ? column.editor.disabled(item) : column.editor.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n if (typeof (gridOption.editor?.disabled) === 'function') {\r\n isDisabled = gridOption.editor.disabled(item);\r\n } else {\r\n isDisabled = gridOption.editor?.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n // Hiển thị editor nếu dòng đó:\r\n // Đang được edit: editingStatus\r\n return item.editingStatus\r\n // Được thiết lập alwayDisplay\r\n || column.editor?.alwayDisplay\r\n // Editable có thuộc tính type inline\r\n || gridOption.editor?.type === 'inline';\r\n };\r\n item.editorHandler = item.editorHandler || {};\r\n for (const column of gridOption.columns) {\r\n item.editorHandler.disabled = false;\r\n item.editorHandler[column.field] = {};\r\n if (typeof (gridOption.editor) === 'object') {\r\n if (typeof (gridOption.editor.disabled) === 'function') {\r\n item.editorHandler.disabled = gridOption.editor.disabled(item);\r\n } else {\r\n item.editorHandler.disabled = gridOption.editor.disabled;\r\n }\r\n } else {\r\n item.editorHandler.disabled = false;\r\n }\r\n\r\n if (item.editorHandler.disabled) {\r\n item.editorHandler[column.field].visible = false;\r\n } else {\r\n item.editorHandler[column.field].visible = visible(column);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { IHandlerServer } from './handler';\r\n\r\nexport interface IGridConfiguration {\r\n filter?: {\r\n type?: 'inline' | 'popup',\r\n columnInline?: 'outside',\r\n quickFilterVisibility?: 'inline' | 'popup' | 'none'\r\n };\r\n style?: {\r\n bordered?: boolean;\r\n stripped?: boolean;\r\n };\r\n translate?: boolean;\r\n handlerCustom?: IHandlerServer;\r\n}\r\n\r\nexport const GRID_CONFIG = new InjectionToken<IGridConfiguration>('grid.configuration');\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdCellDef]'\r\n})\r\nexport class SdCellDefDirective {\r\n @Input() sdCellDef: 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: '[sdCellFooterDef]'\r\n})\r\nexport class SdCellFooterDevDirective {\r\n @Input() sdCellFooterDef: 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: '[sdCellEditorDef]'\r\n})\r\nexport class SdCellEditorDefDirective {\r\n @Input() sdCellEditorDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { SdGridFilterInfo } from '../models/filter-info.model';\r\nimport { IHandlerLocal } from './handler';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Injectable()\r\nexport class HandlerLocal implements IHandlerLocal {\r\n constructor(private datePipe: DatePipe) { }\r\n filter = (localItems: any[], filterInfo: SdGridFilterInfo) => {\r\n const items = localItems.filter(item => {\r\n for (const column of filterInfo.columns) {\r\n const filterValue: string = (filterInfo.rawFilter[column.field] || '').toString().trim().toLowerCase();\r\n const columnValue: string = (item[column.field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n if (column.type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (column.type === 'values' || column.type === 'radio') {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n } else if (column.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 (column.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 (column.type === 'date' || column.type === 'datetime') {\r\n const date = this.datePipe.transform(filterValue, 'yyyy/MM/dd');\r\n const fromDate = new Date(date);\r\n const toDate = new Date(date);\r\n toDate.setDate(toDate.getDate() + 1);\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 return true;\r\n });\r\n // Sort\r\n if (filterInfo.orderBy && filterInfo.orderDirection) {\r\n const column = filterInfo.columns.find(e => e.field === filterInfo.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 (filterInfo.orderDirection === 'DESC') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items,\r\n total: items.length\r\n };\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { SdGridFilterInfo } from '../models/filter-info.model';\r\nimport { IHandlerServer } from './handler';\r\nimport { SdGridColumn, GridColumnChildren } from '../grid.model';\r\n\r\n@Injectable()\r\nexport class HandlerDotnet implements IHandlerServer {\r\n mapRequest = (filterInfo: SdGridFilterInfo) => {\r\n const result = {\r\n whereClause: '1>0',\r\n pageSize: filterInfo.pageSize,\r\n pageNumber: filterInfo.pageNumber,\r\n orderBy: filterInfo.orderBy,\r\n orderDirection: filterInfo.orderDirection,\r\n filter: {},\r\n externalFilter: {}\r\n };\r\n if (filterInfo.customFilter) {\r\n // Nếu custom filter là string\r\n if (typeof (filterInfo.customFilter) === 'string') {\r\n result.whereClause += ` AND ${filterInfo.customFilter}`;\r\n } else if (typeof (filterInfo.customFilter) === 'function') {\r\n result.whereClause += ` AND ${filterInfo.customFilter()}`;\r\n }\r\n }\r\n const executeColumnNoChildren = (column: Exclude<SdGridColumn, GridColumnChildren>) => {\r\n if (!filterInfo.rawFilter[column.field] && filterInfo.rawFilter[column.field] !== 0) {\r\n return;\r\n }\r\n result.filter[column.field] = filterInfo.rawFilter[column.field];\r\n if (column.type === 'string') {\r\n const filterValue: string = (filterInfo.rawFilter[column.field] ?? '').toString();\r\n if (this.#isGuid(filterValue)) {\r\n result.whereClause += ` AND ${column.field} = GUID(\"${filterInfo.rawFilter[column.field]}\")`;\r\n } else if (filterValue.startsWith('!=')) {\r\n result.whereClause += ` AND ${column.field} != \"${filterValue.substring(2, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('=')) {\r\n result.whereClause += ` AND ${column.field} = \"${filterValue.substring(1, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('%')) {\r\n result.whereClause += ` AND ${column.field}.EndsWith(\"${filterValue.substring(1, filterValue.length)}\")`;\r\n } else if (filterValue.endsWith('%')) {\r\n result.whereClause += ` AND ${column.field}.StartsWith(\"${filterValue.substring(0, filterValue.length - 1)}\")`;\r\n } else {\r\n result.whereClause += ` AND ${column.field}.Contains(\"${filterValue}\")`;\r\n }\r\n } else if (column.type === 'number') {\r\n const value = +(filterInfo.rawFilter[column.field].replace('>=', '').replace('<=', '').replace('>', '').replace('<', '').trim());\r\n if (filterInfo.rawFilter[column.field].indexOf('>=') > -1) {\r\n result.whereClause += ` AND ${column.field} >= ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('<=') > -1) {\r\n result.whereClause += ` AND ${column.field} <= ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('>') > -1) {\r\n result.whereClause += ` AND ${column.field} > ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('<') > -1) {\r\n result.whereClause += ` AND ${column.field} < ${value}`;\r\n } else {\r\n result.whereClause += ` AND ${column.field} = ${value}`;\r\n }\r\n } else if (column.type === 'bool') {\r\n if (filterInfo.rawFilter[column.field] === '0' || filterInfo.rawFilter[column.field] === '1') {\r\n result.whereClause += ` AND ${column.field} = ${filterInfo.rawFilter[column.field] === '1' ? 'true' : 'false'}`;\r\n }\r\n } else if (column.type === 'values') {\r\n if (filterInfo.rawFilter[column.field]) {\r\n if (this.#isGuid(filterInfo.rawFilter[column.field])) {\r\n result.whereClause += ` AND ${column.field} = GUID(\"${filterInfo.rawFilter[column.field]}\")`;\r\n } else if (typeof (filterInfo.rawFilter[column.field]) === 'string') {\r\n result.whereClause += ` AND ${column.field} = \"${filterInfo.rawFilter[column.field]}\"`;\r\n } else {\r\n result.whereClause += ` AND ${column.field} = ${filterInfo.rawFilter[column.field]}`;\r\n }\r\n }\r\n } else if (column.type === 'radio') {\r\n if (filterInfo.rawFilter[column.field]) {\r\n result.whereClause += ` AND ${column.field} = \"${filterInfo.rawFilter[column.field]}\"`;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n // \"DateTime(yyyy,mm,dd,HH,mm,ss)\"\r\n // generate fromDate, toDate\r\n let date = new Date(filterInfo.rawFilter[column.field]);\r\n\r\n // From Date\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n result.whereClause += ` AND ${column.field} >= DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n\r\n // To Date\r\n date.setDate(date.getDate() + 1);\r\n result.whereClause += ` AND ${column.field} < DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n }\r\n };\r\n const executeColumnChildren = (columnChildren: GridColumnChildren) => {\r\n let flag = false;\r\n for (const column of columnChildren.children) {\r\n if (filterInfo.rawFilter[column.field] || filterInfo.rawFilter[column.field] === 0) {\r\n executeColumnNoChildren(column);\r\n flag = true;\r\n }\r\n }\r\n if (flag) {\r\n return;\r\n }\r\n if (!filterInfo.rawFilter[columnChildren.field]) {\r\n return;\r\n }\r\n result.filter[columnChildren.field] = filterInfo.rawFilter[columnChildren.field];\r\n let whereClause = '';\r\n const filterValue: string = (filterInfo.rawFilter[columnChildren.field] ?? '').toString().trim();\r\n for (const column of columnChildren.children) {\r\n if (column.type === 'string') {\r\n if (this.#isGuid(filterValue)) {\r\n whereClause += ` OR ${column.field} = GUID(\"${filterValue}\")`;\r\n } else if (filterValue.startsWith('!=')) {\r\n whereClause += ` OR ${column.field} != \"${filterValue.substring(2, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('=')) {\r\n whereClause += ` OR ${column.field} = \"${filterValue.substring(1, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('%')) {\r\n whereClause += ` OR ${column.field}.EndsWith(\"${filterValue.substring(1, filterValue.length)}\")`;\r\n } else if (filterValue.endsWith('%')) {\r\n whereClause += ` OR ${column.field}.StartsWith(\"${filterValue.substring(0, filterValue.length - 1)}\")`;\r\n } else {\r\n whereClause += ` OR ${column.field}.Contains(\"${filterValue}\")`;\r\n }\r\n } else if (column.type === 'number') {\r\n const value = +(filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '').trim());\r\n if (!Number.isNaN(value)) {\r\n if (filterValue.indexOf('>=') > -1) {\r\n whereClause += ` OR ${column.field} >= ${value}`;\r\n } else if (filterValue.indexOf('<=') > -1) {\r\n whereClause += ` OR ${column.field} <= ${value}`;\r\n } else if (filterValue.indexOf('>') > -1) {\r\n whereClause += ` OR ${column.field} > ${value}`;\r\n } else if (filterValue.indexOf('<') > -1) {\r\n whereClause += ` OR ${column.field} < ${value}`;\r\n } else {\r\n whereClause += ` OR ${column.field} = ${value}`;\r\n }\r\n }\r\n } else if (column.type === 'bool') {\r\n if (filterValue === '0' || filterValue === '1') {\r\n whereClause += ` OR ${column.field} = ${filterValue === '1' ? 'true' : 'false'}`;\r\n }\r\n } else if (column.type === 'values') {\r\n if (this.#isGuid(filterValue)) {\r\n whereClause += ` OR ${column.field} = GUID(\"${filterValue}\")`;\r\n } if (typeof (filterInfo.rawFilter[column.field]) === 'string') {\r\n whereClause += ` OR ${column.field} = \"${filterValue}\"`;\r\n } else {\r\n whereClause += ` OR ${column.field} = ${filterValue}`;\r\n }\r\n } else if (column.type === 'radio') {\r\n if (filterValue) {\r\n whereClause += ` OR ${column.field} = \"${filterValue}\"`;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n // \"DateTime(yyyy,mm,dd,HH,mm,ss)\"\r\n // generate fromDate, toDate\r\n if (Date.isDate(filterValue)) {\r\n let date = new Date(filterValue);\r\n\r\n // From Date\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n whereClause += ` OR (${column.field} >= DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n\r\n // To Date\r\n date.setDate(date.getDate() + 1);\r\n whereClause += ` AND ${column.field} < DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()}))`;\r\n }\r\n }\r\n }\r\n if (whereClause.trim().startsWith('OR')) {\r\n whereClause = whereClause.trim().substr(2).trim();\r\n result.whereClause += ` AND(${whereClause})`;\r\n }\r\n };\r\n filterInfo.columns.forEach(column => {\r\n if (column.type !== 'children') {\r\n executeColumnNoChildren(column);\r\n } else {\r\n executeColumnChildren(column);\r\n }\r\n });\r\n filterInfo.externalFilters?.forEach(externalFilter => {\r\n const { field, type } = externalFilter;\r\n if (type === 'daterangefull') {\r\n result.externalFilter[field] = filterInfo.rawExternalFilter?.[field];\r\n if (result.externalFilter[field]?.from && result.externalFilter[field]?.to) {\r\n const fromDate = new Date(result.externalFilter[field]?.from);\r\n const toDate = Date.addDays(result.externalFilter[field]?.to, 1);\r\n // tslint:disable-next-line: max-line-length\r\n result.whereClause += ` AND ${field} >= DateTime(${fromDate.getFullYear()},${fromDate.getMonth() + 1},${fromDate.getDate()})`;\r\n result.whereClause += ` AND ${field} < DateTime(${toDate.getFullYear()},${toDate.getMonth() + 1},${toDate.getDate()})`;\r\n }\r\n return;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n mapResponse = (res: any) => {\r\n const { items, total } = res;\r\n return {\r\n items,\r\n total\r\n };\r\n }\r\n\r\n #isGuid = (key: string): boolean => {\r\n const regex = /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/i;\r\n return regex.test(key);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n ElementRef,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n ViewChildren,\r\n QueryList,\r\n AfterViewInit,\r\n OnDestroy,\r\n Inject,\r\n Optional,\r\n ContentChildren\r\n} from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n SdApiService\r\n} from '@sd-angular/core/api';\r\n\r\nimport {\r\n SdExcelService,\r\n ExcelConfig,\r\n ExcelTempateColumn\r\n} from '@sd-angular/core/excel';\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\n\r\nimport { SdGridOption, defaultGridOption, GridItem, SdGridColumn, SdGridExternalFilter } from './grid.model';\r\n\r\nimport { ConfigResult } from './components/grid-config/grid-config.model';\r\nimport { SdGridConfig } from './components/grid-config/grid-config.component';\r\nimport { EditorHandlerPipe } from './pipes/editor-handler.pipe';\r\nimport { SdGridPopupEditor } from './components/grid-popup-editor/grid-popup-editor.component';\r\nimport { SdGridPopupFilter } from './components/grid-popup-filter/grid-popup-filter.component';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { SdGridPopupExportExcel } from './components/grid-popup-export-excel/grid-popup-export-excel.component';\r\nimport { QuickFilter, FilterConfiguration } from './components/grid-popup-filter/grid-popup-filter.model';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { SdGridFilterInfo } from './models/filter-info.model';\r\n\r\nimport { IGridConfiguration, GRID_CONFIG } from './models/grid-configuration.model';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { SdCellDefDirective } from './directives/cell-def.directive';\r\nimport { SdCellFooterDevDirective } from './directives/cell-footer-def.directive';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdCellEditorDefDirective } from './directives/cell-editor-def.directive';\r\nimport { IHandlerServer, IHandlerLocal } from './models/handler';\r\nimport { HandlerLocal } from './models/handler-local';\r\nimport { HandlerDotnet } from './models/handler-dotnet';\r\nimport { SdGridImportExcel } from './components/grid-import-excel/grid-import-excel.component';\r\n\r\n\r\n@Component({\r\n selector: 'sd-grid',\r\n templateUrl: './grid.component.html',\r\n styleUrls: ['./grid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGrid implements AfterViewInit, OnDestroy {\r\n private handler: IHandlerServer | IHandlerLocal;\r\n isMobileOrTablet = false;\r\n displayKey = 'SDCUSTOM';\r\n gridOption: SdGridOption;\r\n orderBy: string;\r\n orderDirection: 'ASC' | 'DESC';\r\n localItems: GridItem[] = [];\r\n items: GridItem[] = [];\r\n total: number;\r\n filter: {\r\n [key: string]: any\r\n } = {};\r\n externalFilter: {\r\n [key: string]: any\r\n } = {};\r\n hiddenPaginate = false;\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n quickFilters: QuickFilter[] = [];\r\n selectedQuickFilter: string;\r\n // Paginate\r\n pages = [1];\r\n pageCount = 5;\r\n totalPage = 1;\r\n\r\n // Loading\r\n isLoading = false;\r\n\r\n viewItems: GridItem[] = [];\r\n sumarize: string;\r\n\r\n fixedColumns: SdGridColumn[] = [];\r\n normalColumns: SdGridColumn[] = [];\r\n columns: SdGridColumn[] = [];\r\n\r\n isCheckedAll = false;\r\n selectedItems: any[] = [];\r\n\r\n @ViewChildren('fixedHeader') private fixedHeaders: QueryList<ElementRef>;\r\n @ViewChildren('fixedBody') private fixedBodies: QueryList<ElementRef>;\r\n\r\n @ViewChild('fixedGridContainer') fixedGridContainer: ElementRef;\r\n @ViewChild('gridFixedBody') gridFixedBody: ElementRef;\r\n\r\n @ViewChild('gridContainer') gridContainer: ElementRef;\r\n @ViewChild('gridHeader') gridHeader: ElementRef;\r\n @ViewChild('gridBody') gridBody: ElementRef;\r\n\r\n @ViewChild('sdGridConfig', { static: true }) sdGridConfig: SdGridConfig;\r\n @ViewChild('sdGridPopupEditor') sdGridPopupEditor: SdGridPopupEditor;\r\n\r\n @ViewChild('sdGridPopupFilter') sdGridPopupFilter: SdGridPopupFilter;\r\n @ViewChild('matSelect') matSelect: MatSelect;\r\n\r\n @ViewChild('sdGridPopupExportExcel') sdGridPopupExportExcel: SdGridPopupExportExcel;\r\n @ViewChild('sdGridImportExcel') sdGridImportExcel: SdGridImportExcel;\r\n\r\n @ContentChildren(SdCellDefDirective) cellDefs = new QueryList<SdCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdCellDefDirective\r\n } = {};\r\n\r\n @ContentChildren(SdCellEditorDefDirective) cellEditorDefs = new QueryList<SdCellEditorDefDirective>();\r\n cellEditorDef: {\r\n [column: string]: SdCellEditorDefDirective\r\n } = {};\r\n\r\n @ContentChildren(SdCellFooterDevDirective) cellFooterDefs = new QueryList<SdCellFooterDevDirective>();\r\n cellFooterDef: {\r\n [column: string]: SdCellFooterDevDirective[];\r\n } = {};\r\n #numberOfFooterRows = 0;\r\n footerRows: number[] = [];\r\n\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.subscribe(this.selectPage));\r\n }\r\n }\r\n\r\n @Input() set option(value: SdGridOption) {\r\n this.setOption(value);\r\n }\r\n selectedItem: any = null;\r\n #subscription = new Subscription();\r\n rowHandler = {\r\n click: (item: any) => {\r\n this.selectedItem = item;\r\n if (this.gridOption.onClickRow) {\r\n this.gridOption.onClickRow(item);\r\n }\r\n },\r\n dblClick: (item: any) => {\r\n this.selectedItem = item;\r\n if (this.gridOption.onDblClickRow) {\r\n this.gridOption.onDblClickRow(item);\r\n }\r\n }\r\n };\r\n\r\n private setOption = (option: SdGridOption) => {\r\n option = this.initConfiguration(option);\r\n option = this.initTranslate(option);\r\n delete this.gridOption;\r\n this.gridOption = option;\r\n // Loại bỏ những command bị ẩn\r\n this.gridOption.commands = this.gridOption.commands.filter(command => {\r\n const hidden = command.hidden;\r\n if (hidden !== undefined) {\r\n if (typeof (hidden) === 'boolean') {\r\n return !hidden;\r\n } else if (typeof (hidden) === 'function') {\r\n return !hidden();\r\n }\r\n } else {\r\n return true;\r\n }\r\n });\r\n this.sdGridConfig.setOption({\r\n key: option.key,\r\n pageSize: this.gridOption.paginate.pageSize,\r\n columns: this.gridOption.columns\r\n });\r\n this.initExternalFilter();\r\n this.resize();\r\n this.detectChanges();\r\n }\r\n\r\n private initConfiguration = (option: SdGridOption) => {\r\n const gridConfiguration = this.configuration;\r\n // Filter\r\n if (!option.filter?.type && gridConfiguration?.filter?.type) {\r\n if (!option.filter) {\r\n option.filter = {\r\n type: gridConfiguration.filter.type\r\n };\r\n } else {\r\n option.filter.type = gridConfiguration.filter.type;\r\n }\r\n }\r\n if (!option.filter?.columnInline && gridConfiguration?.filter?.columnInline) {\r\n if (!option.filter) {\r\n option.filter = {\r\n columnInline: gridConfiguration.filter.columnInline\r\n };\r\n } else {\r\n option.filter.columnInline = gridConfiguration.filter.columnInline;\r\n }\r\n }\r\n if (!option.filter?.quickFilterVisibility && gridConfiguration?.filter?.quickFilterVisibility) {\r\n if (!option.filter) {\r\n option.filter = {\r\n quickFilterVisibility: gridConfiguration.filter.quickFilterVisibility\r\n };\r\n } else {\r\n option.filter.quickFilterVisibility = gridConfiguration.filter.quickFilterVisibility;\r\n }\r\n }\r\n // Translate\r\n option.translate = option.translate ?? gridConfiguration?.translate;\r\n switch (option.type) {\r\n case 'local':\r\n this.handler = this.handlerLocal;\r\n break;\r\n case 'dotnet':\r\n this.handler = this.handlerDotnet;\r\n break;\r\n case 'custom':\r\n this.handler = option.handlerCustom || gridConfiguration?.handlerCustom;\r\n if (!this.handler) {\r\n this.notifyService.notify.warning(`Handler custom was not found`);\r\n return;\r\n }\r\n break;\r\n }\r\n return { ...defaultGridOption, ...option };\r\n }\r\n\r\n private initTranslate = (option: SdGridOption) => {\r\n const { translate } = this.translateService;\r\n option.commands?.forEach(command => {\r\n if (!option.translate) {\r\n return;\r\n }\r\n if (typeof (command.title) === 'string') {\r\n command.title = translate(command.title);\r\n }\r\n if ('children' in command) {\r\n command.children?.forEach(childCommand => {\r\n if (typeof (childCommand.title) === 'string') {\r\n childCommand.title = translate(childCommand.title);\r\n }\r\n });\r\n }\r\n });\r\n option.columns?.forEach(column => {\r\n if (column.translate === false) {\r\n return;\r\n }\r\n if (option.translate || column.translate) {\r\n column.title = translate(column.title);\r\n }\r\n if (column.type === 'children') {\r\n column?.children?.forEach(childColumn => {\r\n if (childColumn.translate === false) {\r\n return;\r\n }\r\n if (option.translate || childColumn.translate) {\r\n childColumn.title = translate(childColumn.title);\r\n }\r\n });\r\n }\r\n });\r\n option.filter?.externalFilters?.forEach(externalFilter => {\r\n if (option.translate) {\r\n externalFilter.title = translate(externalFilter.title);\r\n }\r\n });\r\n return option;\r\n }\r\n\r\n constructor(\r\n @Inject(GRID_CONFIG) @Optional() public configuration: IGridConfiguration,\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n private handlerLocal: HandlerLocal,\r\n private handlerDotnet: HandlerDotnet,\r\n private translateService: SdTranslateService,\r\n private datePipe: DatePipe,\r\n private loadingService: SdLoadingService,\r\n private apiService: SdApiService,\r\n private excelService: SdExcelService,\r\n private notifyService: SdNotifyService,\r\n private editorVisiblePipe: EditorHandlerPipe) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n // this.ref.detach();\r\n // setInterval(() => {\r\n // this.ref.markForCheck();\r\n // }, 1000);\r\n // ref.detach();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.fixedHeaders.changes.pipe(startWith([])).subscribe(() => {\r\n setTimeout(() => {\r\n const fixedHeaders = this.fixedHeaders.toArray();\r\n if (fixedHeaders.length > 0) {\r\n let left = $(fixedHeaders[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedHeaders.length; i++) {\r\n $(fixedHeaders[i].nativeElement).css({ left });\r\n left += $(fixedHeaders[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n }, 100);\r\n }));\r\n this.#subscription.add(merge(this.fixedBodies.changes, this.cellFooterDefs.changes).pipe(startWith({})).subscribe(() => {\r\n setTimeout(() => {\r\n const fixedBodies = this.fixedBodies.toArray();\r\n if (fixedBodies.length > 0) {\r\n const fixedPerRow = this.fixedBodies.length / (this.viewItems.length + this.#numberOfFooterRows);\r\n let left = $(fixedBodies[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedBodies.length; i++) {\r\n if (i % fixedPerRow === 0) {\r\n left = 0;\r\n }\r\n $(fixedBodies[i].nativeElement).css({ left });\r\n left += $(fixedBodies[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n const fixedHeaders = this.fixedHeaders.toArray();\r\n if (fixedHeaders.length > 0) {\r\n let left = $(fixedHeaders[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedHeaders.length; i++) {\r\n $(fixedHeaders[i].nativeElement).css({ left });\r\n left += $(fixedHeaders[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n }, 100);\r\n }));\r\n this.#subscription.add(this.cellDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellDef = {};\r\n for (const cellDef of this.cellDefs) {\r\n if (cellDef.sdCellDef) {\r\n this.cellDef[cellDef.sdCellDef] = cellDef;\r\n }\r\n }\r\n }));\r\n this.#subscription.add(this.cellEditorDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellEditorDef = {};\r\n for (const cellEditorDef of this.cellEditorDefs) {\r\n if (cellEditorDef.sdCellEditorDef) {\r\n this.cellEditorDef[cellEditorDef.sdCellEditorDef] = cellEditorDef;\r\n }\r\n }\r\n }));\r\n this.#subscription.add(this.cellFooterDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellFooterDef = {};\r\n this.#numberOfFooterRows = 0;\r\n for (const cellFooterDef of this.cellFooterDefs) {\r\n if (cellFooterDef.sdCellFooterDef) {\r\n if (!this.cellFooterDef[cellFooterDef.sdCellFooterDef]) {\r\n this.cellFooterDef[cellFooterDef.sdCellFooterDef] = [];\r\n }\r\n this.cellFooterDef[cellFooterDef.sdCellFooterDef].push(cellFooterDef);\r\n if (this.cellFooterDef[cellFooterDef.sdCellFooterDef].length > this.#numberOfFooterRows) {\r\n this.#numberOfFooterRows = this.cellFooterDef[cellFooterDef.sdCellFooterDef].length;\r\n }\r\n }\r\n }\r\n this.footerRows = Array(this.#numberOfFooterRows).fill(0).map((v, i) => i);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = async (gridItems?: any[]) => {\r\n if (this.isLoading) {\r\n return;\r\n }\r\n this.isLoading = true;\r\n const currentPage = (this.#paginator?.pageIndex || 0) + 1;\r\n const pageSize = this.#paginator?.pageSize || 50;\r\n try {\r\n if (this.gridOption.type !== 'local') {\r\n const handler = this.handler as IHandlerServer;\r\n const filter = handler.mapRequest(this.getFilterInfo(currentPage, pageSize));\r\n if (this.gridOption.method === 'GET') {\r\n const queryString = Object.keys(filter).filter(key => filter[key] !== null && filter[key] !== undefined)\r\n .map(key => key + '=' + filter[key]).join('&');\r\n const url = this.gridOption.url.includes('?') ? `${this.gridOption.url}&${queryString}` : `${this.gridOption.url}?${queryString}`;\r\n const response = await this.apiService.get(url);\r\n const { items, total } = handler.mapResponse(response);\r\n this.items = items;\r\n this.total = total;\r\n } else {\r\n const response = await this.apiService.post(this.gridOption.url, filter);\r\n const { items, total } = handler.mapResponse(response);\r\n this.items = items;\r\n this.total = total;\r\n }\r\n } else {\r\n const handler = this.handler as IHandlerLocal;\r\n if (typeof (this.gridOption.items) === 'function') {\r\n if (Array.isArray(gridItems)) {\r\n this.localItems = gridItems;\r\n } else {\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 } else {\r\n this.gridOption.items = gridItems || this.gridOption.items;\r\n this.localItems = this.gridOption.items;\r\n }\r\n const response = handler.filter(this.localItems, {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber: currentPage,\r\n pageSize\r\n });\r\n this.items = response.items;\r\n this.total = response.total;\r\n \r\n }\r\n this.items.forEach(item => item.originItem = { ...item });\r\n this.isCheckedAll = false;\r\n this.#setSelectedItems();\r\n await this.gridOption?.onReloadCompleted?.(this.items);\r\n this.generateViewItems();\r\n this.generateEditorHandlers();\r\n $(this.gridBody.nativeElement).scrollTop(0);\r\n if (currentPage > 1 && !this.viewItems?.length) {\r\n this.#paginator.firstPage();\r\n }\r\n this.detectChanges();\r\n } catch (error) {\r\n this.notifyService.handle.error(error);\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n reloadItem(data: { [id: string]: any }) {\r\n Object.keys(data).forEach(id => {\r\n const item = this.items.find(e => !!e.id && e.id === id);\r\n if (item) {\r\n this.gridOption.columns.forEach(column => {\r\n if (item[column.field] !== undefined && data[id][column.field] !== undefined && item[column.field] !== data[id][column.field]) {\r\n this.blink(item, column.field);\r\n }\r\n });\r\n Object.assign(item, data[id]);\r\n this.generateEditorHanlder(item);\r\n this.stopBlink();\r\n }\r\n });\r\n }\r\n\r\n private blink(item: GridItem, field: string) {\r\n item.blinker = item.blinker || {};\r\n item.blinker[field] = true;\r\n }\r\n private stopBlink() {\r\n setTimeout(() => {\r\n this.viewItems.forEach(item => {\r\n item.blinker = {};\r\n });\r\n }, 1500);\r\n }\r\n\r\n detectChanges = () => {\r\n this.ref.detectChanges();\r\n this.ref.markForCheck();\r\n }\r\n\r\n private generateViewItems() {\r\n const currentPage = (this.#paginator?.pageIndex || 0) + 1;\r\n const pageSize = this.#paginator?.pageSize || 50;\r\n delete this.viewItems;\r\n if (this.gridOption.type === 'local') {\r\n this.viewItems = this.items.filter((item, index) => {\r\n return index >= (currentPage - 1) * pageSize\r\n && index < currentPage * pageSize;\r\n });\r\n } else {\r\n this.viewItems = this.items;\r\n }\r\n this.viewItems.forEach(item => {\r\n item.blinker = item.blinker || {};\r\n item.subInformation = item.subInformation || {};\r\n });\r\n }\r\n\r\n get editedItems() {\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 { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...result } = item;\r\n return result;\r\n });\r\n }\r\n\r\n selectPage = () => {\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n\r\n updateFilter = (param?: { filter: any, externalFilter: any }) => {\r\n this.filter = param?.filter || this.filter;\r\n this.externalFilter = param?.externalFilter || this.externalFilter;\r\n this.#paginator.pageIndex = 0;\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n\r\n getItems() {\r\n return this.items;\r\n }\r\n\r\n //#region Checkable\r\n\r\n #setSelectedItems = () => {\r\n this.selectedItems = this.items.filter(item => item.isChecked)\r\n .map(item => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...result } = item;\r\n return result;\r\n });\r\n }\r\n\r\n onCheck = (item: GridItem, isCheckbox?: boolean) => {\r\n if (!this.gridOption.checkable) {\r\n return;\r\n }\r\n if (!isCheckbox) {\r\n item.isChecked = !item.isChecked;\r\n }\r\n this.isCheckedAll = this.items.length === this.items.filter(e => e.isChecked).length;\r\n this.gridOption.onCheck?.(this.items.filter(e => e.isChecked), item);\r\n this.#setSelectedItems();\r\n }\r\n\r\n checkAll(isCheckedAll: boolean) {\r\n this.isCheckedAll = isCheckedAll;\r\n this.items.forEach(item => item.isChecked = this.isCheckedAll);\r\n if (this.gridOption.onCheck) {\r\n this.gridOption.onCheck(this.items.filter(item => item.isChecked));\r\n }\r\n this.#setSelectedItems();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Sort\r\n sort = (column: SdGridColumn) => {\r\n if (column.type === 'children' || column.type === 'image') {\r\n return;\r\n }\r\n const sortable = this.gridOption.sortable ?? true;\r\n const columnSortable = column.sortable ?? true;\r\n if (!sortable || !columnSortable) {\r\n return;\r\n }\r\n if (this.orderBy === column.field) {\r\n this.orderDirection = this.orderDirection === 'ASC' ? 'DESC' : 'ASC';\r\n } else {\r\n this.orderBy = column.field;\r\n this.orderDirection = 'ASC';\r\n }\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n //#endregion\r\n\r\n // #region Resize Grid\r\n private resize() {\r\n this.detectChanges();\r\n if (this.gridOption.height) {\r\n this.gridBody.nativeElement.style.height = this.gridOption.height;\r\n } else {\r\n this.gridBody.nativeElement.style.height = `${window.innerHeight - 300}px`;\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 0);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 200);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 500);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 1000);\r\n }\r\n }\r\n\r\n setHeight(height?: string) {\r\n this.gridOption.height = height;\r\n this.resize();\r\n }\r\n\r\n // #endregion\r\n\r\n //#region Import, Export, Config\r\n\r\n loadConfig(configResult: ConfigResult) {\r\n this.gridOption.paginate.pageSize = configResult.pageSize;\r\n this.gridOption.columns = configResult.columns;\r\n this.fixedColumns = configResult.fixedColumns;\r\n this.normalColumns = configResult.normalColumns;\r\n this.columns = [...this.fixedColumns, ...this.normalColumns];\r\n this.initFilter();\r\n this.initDictionaryColumnValues();\r\n this.reload();\r\n }\r\n\r\n private initFilter() {\r\n this.gridOption.columns.forEach(column => {\r\n // Gán giá trị filter mặc định cho từng cột\r\n this.filter[column.field] = this.filter[column.field] ?? '';\r\n });\r\n }\r\n\r\n private initDictionaryColumnValues() {\r\n this.gridOption.columns.forEach(column => {\r\n if (column.type === 'values') {\r\n column.dictionary = {};\r\n if (column.values) {\r\n column.values.forEach(e => {\r\n column.dictionary[e.value.toString()] = {\r\n text: e.text,\r\n icon: e.icon,\r\n color: e.color,\r\n backgroundColor: e.backgroundColor\r\n };\r\n });\r\n }\r\n }\r\n if (column.type === 'children') {\r\n column.children.forEach(childColumn => {\r\n if (childColumn.type === 'values') {\r\n childColumn.dictionary = {};\r\n if (childColumn.values) {\r\n childColumn.values.forEach(e => {\r\n childColumn.dictionary[e.value.toString()] = {\r\n text: e.text,\r\n icon: e.icon,\r\n color: e.color,\r\n backgroundColor: e.backgroundColor\r\n };\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n private generateEditorHandlers() {\r\n this.viewItems.forEach(item => {\r\n this.generateEditorHanlder(item);\r\n });\r\n }\r\n\r\n private generateEditorHanlder(item: GridItem) {\r\n // item.editorHandler = item.editorHandler || {};\r\n this.editorVisiblePipe.transform(null, item, this.gridOption);\r\n }\r\n trackById(index, item) {\r\n return item.id;\r\n }\r\n\r\n get isFiltering() {\r\n return Object.values(this.filter).some(value => !!value);\r\n }\r\n\r\n onFilterPopup() {\r\n const f1 = JSON.stringify(this.filter);\r\n const f2 = JSON.stringify(this.externalFilter);\r\n const filter = JSON.parse(f1);\r\n const externalFilter = JSON.parse(f2);\r\n this.sdGridPopupFilter.open(this.fixedColumns, this.normalColumns, filter, externalFilter, this.gridOption.filter?.externalFilters);\r\n }\r\n\r\n clearFilter = () => {\r\n this.filter = {};\r\n this.externalFilter = {};\r\n this.initFilter();\r\n this.initExternalFilter();\r\n if (this.sdGridPopupFilter) {\r\n this.sdGridPopupFilter.filter = this.filter;\r\n this.sdGridPopupFilter.externalFilter = this.externalFilter;\r\n }\r\n }\r\n\r\n onClearFilter = () => {\r\n this.clearFilter();\r\n this.reload();\r\n }\r\n\r\n expandOrCollapse = async (gridItem: GridItem) => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n ...item } = gridItem;\r\n if (!this.gridOption.subInformation) {\r\n return;\r\n }\r\n if (gridItem.subInformation?.isOpened) {\r\n gridItem.subInformation.isOpened = false;\r\n return;\r\n }\r\n if (this.gridOption.subInformation.lazyLoading && !gridItem.subInformation?.isLoaded) {\r\n gridItem.subInformation.isLoading = true;\r\n try {\r\n gridItem.subInformation.subItems = await this.gridOption.subInformation.onLoad(item);\r\n if (!Array.isArray(gridItem.subInformation.subItems)) {\r\n this.notifyService.alert.warning(`Data is not an array`);\r\n gridItem.subInformation.subItems = [];\r\n }\r\n gridItem.subInformation.isLoading = false;\r\n gridItem.subInformation.isLoaded = true;\r\n gridItem.subInformation.isOpened = true;\r\n this.ref.detectChanges();\r\n } catch (err) {\r\n this.notifyService.handle.error(err);\r\n gridItem.subInformation.isLoading = false;\r\n this.ref.detectChanges();\r\n }\r\n return;\r\n }\r\n if (this.gridOption.subInformation.lazyLoading === false && !gridItem.subInformation.isLoaded) {\r\n gridItem.subInformation.subItems = gridItem[this.gridOption.subInformation.field];\r\n if (!Array.isArray(gridItem.subInformation.subItems)) {\r\n this.notifyService.alert.warning(`Data is not an array`);\r\n gridItem.subInformation.subItems = [];\r\n }\r\n gridItem.subInformation.isLoaded = true;\r\n gridItem.subInformation.isOpened = true;\r\n return;\r\n }\r\n gridItem.subInformation.isOpened = true;\r\n this.ref.detectChanges();\r\n }\r\n //#region Editable\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: GridItem = {};\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 editor.onAdd?.(item);\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 (type === 'local') {\r\n this.items.splice(0, 0, item);\r\n }\r\n this.viewItems.splice(0, 0, item);\r\n }\r\n this.onUpdate(item, false);\r\n }\r\n onUpdate = (item: GridItem, isModified?: boolean) => {\r\n const { editor, columns } = this.gridOption;\r\n item.editingStatus = isModified ? 'update' : 'create';\r\n item.temporary = { ...item };\r\n this.generateEditorHanlder(item);\r\n if (editor.type === 'popup') {\r\n this.sdGridPopupEditor.open(item, columns, isModified);\r\n }\r\n this.ref.detectChanges();\r\n }\r\n onSave = async (item: GridItem) => {\r\n const { editor } = this.gridOption;\r\n try {\r\n item.editorHandler.saving = true;\r\n if (editor.validate) {\r\n const result = editor.validate(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.editingStatus === '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.editingStatus = undefined;\r\n this.generateEditorHanlder(item);\r\n } catch (err) {\r\n this.notifyService.notify.warning(err);\r\n } finally {\r\n item.editorHandler.saving = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onCancel = (item: GridItem) => {\r\n const { editor } = this.gridOption;\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n }\r\n const idx2 = this.viewItems.indexOf(item);\r\n this.viewItems.splice(idx2, 1);\r\n return;\r\n }\r\n if (item.editingStatus === 'create') {\r\n if (editor.type !== 'popup') {\r\n if (this.gridOption.type === 'local') {\r\n this.items.splice(0, 1);\r\n }\r\n this.viewItems.splice(0, 1);\r\n }\r\n } else {\r\n Object.assign(item, item.temporary);\r\n item.editingStatus = undefined;\r\n this.generateEditorHanlder(item);\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n private initExternalFilter = () => {\r\n if (this.gridOption.filter?.externalFilters?.length) {\r\n this.gridOption.filter.externalFilters.forEach(externalFilter => {\r\n if (externalFilter.type === 'string') {\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? '';\r\n }\r\n return;\r\n }\r\n if (externalFilter.type === 'number') {\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? undefined;\r\n }\r\n return;\r\n }\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'numberrange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'daterangefull') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'values') { // andn1\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? '';\r\n }\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n onSearch = (searchValue: string, item: GridItem, column: SdGridColumn) => {\r\n item[column.field] = searchValue;\r\n }\r\n\r\n onFilterConfigurationLoaded = (param: FilterConfiguration) => {\r\n this.quickFilters = param.quickFilters || [];\r\n this.selectedQuickFilter = param.selectedQuickFilter || '';\r\n if (this.selectedQuickFilter) {\r\n const quickFilter = this.quickFilters.find(e => e.code === this.selectedQuickFilter);\r\n if (quickFilter) {\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.refreshExternalFilter(this.gridOption?.filter?.externalFilters, JSON.parse(f2));\r\n }\r\n }\r\n this.inlineExternal = param.inlineExternal || {};\r\n this.inlineColumn = param.inlineColumn || {};\r\n this.resize();\r\n }\r\n\r\n onSelectQuickFilter = (value: string) => {\r\n const quickFilter = this.quickFilters.find(e => e.code === value);\r\n if (quickFilter?.code) {\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.selectedQuickFilter = quickFilter?.code;\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.refreshExternalFilter(this.gridOption?.filter?.externalFilters, JSON.parse(f2));\r\n this.updateFilter();\r\n } else {\r\n this.selectedQuickFilter = '';\r\n this.onClearFilter();\r\n }\r\n this.sdGridPopupFilter?.updateConfiguration(this.selectedQuickFilter);\r\n }\r\n\r\n private getExportItems = async (pageNumber: number = 1, pageSize: number = 10000) => {\r\n if (this.isLoading) {\r\n return;\r\n }\r\n this.isLoading = true;\r\n try {\r\n if (this.gridOption.type !== 'local') {\r\n const handler = this.handler as IHandlerServer;\r\n const filter = handler.mapRequest(this.getFilterInfo(pageNumber, pageSize));\r\n if (this.gridOption.method === 'GET') {\r\n const queryString = Object.keys(filter).filter(key => filter[key] !== null && filter[key] !== undefined)\r\n .map(key => key + '=' + filter[key]).join('&');\r\n const url = this.gridOption.url.includes('?') ? `${this.gridOption.url}&${queryString}` : `${this.gridOption.url}?${queryString}`;\r\n const response = await this.apiService.get(url);\r\n return handler.mapResponse(response).items;\r\n } else {\r\n const response = await this.apiService.post(this.gridOption.url, filter);\r\n return handler.mapResponse(response).items;\r\n }\r\n } else {\r\n let localItems = [];\r\n const handler = this.handler as IHandlerLocal;\r\n if (typeof (this.gridOption.items) === 'function') {\r\n const results = this.gridOption.items();\r\n if (results instanceof Promise) {\r\n localItems = await results;\r\n } else {\r\n localItems = results;\r\n }\r\n } else {\r\n localItems = this.gridOption.items;\r\n }\r\n const response = handler.filter(localItems, {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber,\r\n pageSize\r\n });\r\n return response.items;\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 private getFilterInfo = (pageNumber: number, pageSize: number): SdGridFilterInfo => {\r\n for (const key of Object.keys(this.filter)) {\r\n if (typeof (this.filter[key]) === 'string') {\r\n this.filter[key] = this.filter[key].trim();\r\n }\r\n }\r\n for (const key of Object.keys(this.externalFilter)) {\r\n if (typeof (this.externalFilter[key]) === 'string') {\r\n this.externalFilter[key] = this.externalFilter[key].trim();\r\n }\r\n }\r\n return {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber,\r\n pageSize\r\n };\r\n }\r\n\r\n onExportByTemplate = async (params: { excelConfig: ExcelConfig, excelColumns: ExcelTempateColumn[] }) => {\r\n this.loadingService.start();\r\n let exportItems = [];\r\n if (this.gridOption.export?.items) {\r\n exportItems = await this.gridOption.export?.items(this.getFilterInfo(1, 10000)).finally(this.loadingService.stop);\r\n } else {\r\n exportItems = await this.getExportItems().finally(this.loadingService.stop);\r\n }\r\n if (this.gridOption.export?.mapping) {\r\n const results = this.gridOption.export.mapping(exportItems, params.excelConfig.name);\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 columns = [...this.gridOption.columns, ...(this.gridOption.export?.columns || [])];\r\n const items = exportItems.map(item => {\r\n const obj: any = {};\r\n const handle = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n column.children.forEach(handle);\r\n } else if (column.transform) {\r\n obj[column.field] = column.transform(item[column.field], item);\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' || column.type === 'color') {\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.trueValue || 'True';\r\n } else {\r\n obj[column.field] = column.falseValue || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n // Nếu là date thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy');\r\n } else if (column.type === 'datetime') {\r\n // Nếu là datetime thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n // Nếu là time thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'HH:mm:ss');\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 const data = column.values.find(e => e.value === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data.text;\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n } else if (column.type === 'radio') {\r\n const data = column.values.find(e => e[column.valueField] === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data[column.displayField];\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n }\r\n };\r\n columns.forEach(handle);\r\n return obj;\r\n });\r\n this.excelService.generateExcelDataByTemplate(params.excelConfig.fullPath, params.excelColumns, items, params.excelConfig.name);\r\n }\r\n\r\n bigExport = async () => {\r\n const pageSize = 1000;\r\n let pageNumber = 1;\r\n this.loadingService.start();\r\n try {\r\n let exportItems = [];\r\n let filePath: string = null;\r\n let destination: string = null;\r\n let latestRow = 0;\r\n while (true) {\r\n if (this.gridOption.export?.items) {\r\n exportItems = await this.gridOption.export?.items(this.getFilterInfo(pageNumber, pageSize)).finally(this.loadingService.stop);\r\n } else {\r\n exportItems = await this.getExportItems(pageNumber, pageSize).finally(this.loadingService.stop);\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 columns = [...this.gridOption.columns, ...(this.gridOption.export?.columns || [])];\r\n const items = exportItems.map(item => {\r\n const obj: any = {};\r\n const handle = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n column.children.forEach(handle);\r\n } else if (column.transform) {\r\n obj[column.field] = column.transform(item[column.field], item);\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' || column.type === 'color') {\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.trueValue || 'True';\r\n } else {\r\n obj[column.field] = column.falseValue || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n // Nếu là date thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy');\r\n } else if (column.type === 'datetime') {\r\n // Nếu là datetime thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n // Nếu là time thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'HH:mm:ss');\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 const data = column.values.find(e => e.value === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data.text;\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n } else if (column.type === 'radio') {\r\n const data = column.values.find(e => e[column.valueField] === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data[column.displayField];\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n }\r\n };\r\n columns.forEach(handle);\r\n return obj;\r\n });\r\n const result = await this.excelService.bigExport({\r\n columns,\r\n items,\r\n latestRow,\r\n filePath,\r\n destination\r\n });\r\n latestRow = result.latestRow;\r\n filePath = result.filePath;\r\n destination = result.destination;\r\n if ((pageNumber - 1) * pageSize + items.length >= this.total) {\r\n await this.excelService.download(filePath);\r\n break;\r\n }\r\n pageNumber++;\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n }\r\n\r\n get invalidItems() {\r\n return this.items.filter(e => e.editorHandler?.errorMessage).map(e => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...item } = e;\r\n return {\r\n item,\r\n message: e.editorHandler.errorMessage\r\n };\r\n });\r\n }\r\n\r\n get gridItems() {\r\n return this.items.map(e => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...item } = e;\r\n return item;\r\n });\r\n }\r\n\r\n onEditorChange = () => {\r\n this.ref.detectChanges();\r\n }\r\n onSelectPageSize = () => {\r\n this.reload();\r\n }\r\n private refreshExternalFilter = (externalFilters: SdGridExternalFilter[], externalFilter: any) => {\r\n externalFilter = externalFilter || {};\r\n externalFilters = externalFilters || [];\r\n externalFilters.forEach(e => {\r\n if (e.type === 'string') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? '';\r\n return;\r\n }\r\n if (e.type === 'number') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? undefined;\r\n return;\r\n }\r\n if (e.type === 'daterange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'numberrange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'daterangefull') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'values') { // andn1\r\n externalFilter[e.field] = (externalFilter[e.field] || e.default) ?? '';\r\n return;\r\n }\r\n });\r\n return externalFilter;\r\n }\r\n\r\n onCreateQuickFilter = (ev?: Event) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onCreateQuickFilter(ev);\r\n }\r\n\r\n onEditQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onEditQuickFilter(ev, quickFilter);\r\n }\r\n\r\n onDeleteQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onDeleteQuickFilter(ev, quickFilter);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n@Pipe({\r\n name: 'sdDynamicItems'\r\n})\r\nexport class SdDynamicItems implements PipeTransform {\r\n transform(value: any, dynamicItems: (value: any) => Promise<any[]>) {\r\n return dynamicItems;\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\nimport { ConfigOption, ConfigResult, ConfigStorage } from './grid-config.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\n\r\nimport {\r\n SdSetting,\r\n SdSettingService\r\n} from '@sd-angular/core/setting';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-config',\r\n templateUrl: './grid-config.component.html',\r\n styleUrls: ['./grid-config.component.scss']\r\n})\r\nexport class SdGridConfig implements OnInit {\r\n @ViewChild('modal') modal: SdModal;\r\n @Output() sdChange = new EventEmitter<ConfigResult>();\r\n\r\n option: ConfigOption;\r\n storage: ConfigStorage;\r\n #setting: SdSetting<ConfigStorage>;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private settingService: SdSettingService,\r\n private translateService: SdTranslateService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n async setOption(option: ConfigOption) {\r\n this.ref.detectChanges();\r\n this.option = option;\r\n if (this.option.key) {\r\n this.#setting = this.settingService.create<ConfigStorage>(this.option.key);\r\n } else {\r\n this.#setting = null;\r\n }\r\n await this.init();\r\n this.emitOnChange();\r\n }\r\n\r\n private async init() {\r\n if (this.#setting) {\r\n const storage: ConfigStorage = await this.#setting.get();\r\n try {\r\n if (!storage) {\r\n await this.#setting.remove();\r\n this.#initDefault();\r\n return;\r\n }\r\n this.storage = storage;\r\n\r\n // Loại bỏ những column đã bị xóa khỏi originColumns\r\n this.storage.columnConfigs = this.storage.columnConfigs\r\n .filter(column => this.option.columns.some(e => e.field === column.originColumn.field));\r\n\r\n // Thêm những column mới vào storage nếu có\r\n this.option.columns.forEach(column => {\r\n if (!this.storage.columnConfigs.some(e => e.originColumn.field === column.field)) {\r\n this.storage.columnConfigs.push({\r\n originColumn: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n fixed: column.fixed\r\n },\r\n hidden: false,\r\n fixed: column.fixed\r\n });\r\n }\r\n });\r\n\r\n // Cập nhật originColumn\r\n this.storage.columnConfigs.forEach(column => {\r\n const originColumn = this.option.columns.find(e => e.field === column.originColumn.field);\r\n if (originColumn) {\r\n Object.assign(column.originColumn, {\r\n title: originColumn.title,\r\n width: originColumn.width,\r\n fixed: originColumn.fixed\r\n });\r\n }\r\n });\r\n } catch (ex) {\r\n this.#setting.remove();\r\n this.#initDefault();\r\n }\r\n } else {\r\n this.#initDefault();\r\n }\r\n }\r\n\r\n #initDefault = () => {\r\n this.storage = {};\r\n this.storage.pageSize = this.option.pageSize;\r\n this.storage.columnConfigs = [];\r\n this.option.columns.forEach(column => {\r\n this.storage.columnConfigs.push({\r\n originColumn: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n fixed: column.fixed\r\n },\r\n hidden: false,\r\n fixed: column.fixed\r\n });\r\n });\r\n }\r\n\r\n open() {\r\n this.modal.open();\r\n }\r\n\r\n save() {\r\n if (!Number.isSafeInteger(+this.storage.pageSize)) {\r\n this.notifyService.notify.warning(this.translateService.translate('Page size must be an integer'));\r\n return;\r\n }\r\n if (this.storage.pageSize > 200) {\r\n this.notifyService.notify.warning(this.translateService.translate('Page size is too large'));\r\n return;\r\n }\r\n this.#setting?.set?.(this.storage);\r\n this.emitOnChange();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n reset() {\r\n this.#setting?.remove?.();\r\n this.#initDefault();\r\n this.emitOnChange();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n moveColumnUp(index: number) {\r\n const temp = this.storage.columnConfigs[index];\r\n this.storage.columnConfigs[index] = this.storage.columnConfigs[index - 1];\r\n this.storage.columnConfigs[index - 1] = temp;\r\n }\r\n\r\n moveColumnDown(index: number) {\r\n const temp = this.storage.columnConfigs[index];\r\n this.storage.columnConfigs[index] = this.storage.columnConfigs[index + 1];\r\n this.storage.columnConfigs[index + 1] = temp;\r\n }\r\n\r\n emitOnChange() {\r\n const pageSize = +this.storage.pageSize || this.option.pageSize;\r\n const columns = this.option.columns.filter(column => {\r\n // Hidden column theo config\r\n // Lấy các thuộc tính Title, Width, Fixed từ config\r\n const columnConfig = this.storage.columnConfigs.find(e => e.originColumn.field === column.field);\r\n if (columnConfig) {\r\n column.title = columnConfig.title || column.title;\r\n column.width = columnConfig.width || column.width;\r\n column.fixed = columnConfig.fixed;\r\n return !columnConfig.hidden;\r\n }\r\n return true;\r\n }).sort((current, next) => {\r\n // Sắp xếp theo config\r\n const currentIndex = this.storage.columnConfigs.findIndex(e => e.originColumn.field === current.field);\r\n const nextIndex = this.storage.columnConfigs.findIndex(e => e.originColumn.field === next.field);\r\n return currentIndex - nextIndex;\r\n }).filter(column => {\r\n // Hidden column theo option truyền vào\r\n if (column.hidden === undefined) {\r\n return true;\r\n }\r\n if (typeof (column.hidden) === 'boolean') {\r\n return !column.hidden;\r\n }\r\n if (typeof (column.hidden) === 'function') {\r\n return !column.hidden();\r\n }\r\n return false;\r\n });\r\n const result: ConfigResult = {\r\n pageSize,\r\n columns,\r\n fixedColumns: columns.filter(e => e.fixed),\r\n normalColumns: columns.filter(e => !e.fixed)\r\n };\r\n this.sdChange.emit(result);\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectorRef, EventEmitter, ChangeDetectionStrategy, Output } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-edit',\r\n templateUrl: './grid-desktop-column-edit.component.html',\r\n styleUrls: ['./grid-desktop-column-edit.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGridDesktopColumnEdit {\r\n @Input() column: SdGridColumn;\r\n @Input() item: GridItem;\r\n @Output() sdChange = new EventEmitter<{ column: SdGridColumn, item: GridItem, value: any }>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n ) { }\r\n\r\n onEditorChange = (column: SdGridColumn, item: GridItem, value: any) => {\r\n if (column.type !== 'children') {\r\n column.editor?.change?.(item, value);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n onAutocompleteChange = (item: any) => {\r\n if (this.column.type === 'string' || this.column.type === 'values') {\r\n this.column.editor?.change?.(this.item, this.item[this.column.field], item);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n onSelectionChange = (params: { value: any, item: any, items: any[] }) => {\r\n if (this.column.type === 'string' || this.column.type === 'values') {\r\n this.column.editor?.change?.(this.item, params?.value, params?.item || params?.items);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n dynamicItems = async (value: any) => {\r\n if ('editor' in this.column && 'item' in this.column.editor) {\r\n const items = this.column.editor.item.items || [];\r\n if (Array.isArray(items)) {\r\n return items;\r\n }\r\n const results = items(this.item, value);\r\n if (results instanceof Promise) {\r\n return await results;\r\n }\r\n return results;\r\n } else {\r\n return [];\r\n }\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-view',\r\n templateUrl: './grid-desktop-column-view.component.html',\r\n styleUrls: ['./grid-desktop-column-view.component.scss']\r\n})\r\nexport class SdGridDesktopColumnView {\r\n @Input() column: SdGridColumn;\r\n @Input() item: GridItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { SdGridColumn, GridBaseOptionFilter } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-inline-filter',\r\n templateUrl: './grid-desktop-inline-filter.component.html',\r\n styleUrls: ['./grid-desktop-inline-filter.component.scss']\r\n})\r\nexport class SdGridDesktopInlineFilter {\r\n @Input() columns: SdGridColumn[] = [];\r\n @Input() externalFilter: any = {};\r\n @Input() filter: any = {};\r\n @Input() filterOption: GridBaseOptionFilter;\r\n @Input() inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n @Input() inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n @Output() sdChange = new EventEmitter();\r\n isDesktop: boolean;\r\n displayKey = 'SDCUSTOM';\r\n constructor() { }\r\n\r\n onUpdateFilter = () => {\r\n this.sdChange.emit();\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { GridItem, SdGridOption } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-mobile-item-view',\r\n templateUrl: './grid-mobile-item-view.component.html',\r\n styleUrls: ['./grid-mobile-item-view.component.scss']\r\n})\r\nexport class SdGridMobileItemView {\r\n @Input() gridOption: SdGridOption;\r\n @Input() item: GridItem;\r\n @Output() check = new EventEmitter<GridItem>();\r\n constructor(\r\n ) { }\r\n\r\n onCheck = (item: GridItem) => {\r\n this.check.emit(item);\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, Output, EventEmitter } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdGridOption, SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-editor',\r\n templateUrl: './grid-popup-editor.component.html'\r\n})\r\nexport class SdGridPopupEditor implements OnInit {\r\n\r\n @ViewChild('modal') modal: SdModal;\r\n @Output() save = new EventEmitter<GridItem>();\r\n columns: SdGridColumn[] = [];\r\n gridOption: SdGridOption;\r\n item: GridItem;\r\n isModified: boolean;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n open = (item: GridItem, columns: SdGridColumn[], isModified?: boolean) => {\r\n this.item = item;\r\n this.isModified = isModified ?? false;\r\n this.columns = [];\r\n columns.forEach(column => {\r\n if (column.type !== 'image' && column.type !== 'children') {\r\n this.columns.push(column);\r\n }\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n if (childColumn.type !== 'image') {\r\n this.columns.push(childColumn);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n onCancel = () => {\r\n this.modal.close();\r\n }\r\n\r\n onSave = () => {\r\n this.modal.close();\r\n this.save.emit(this.item);\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { SdGridColumn, GridBaseOptionExport } from '../../grid.model';\r\n\r\nimport {\r\n SdExcelService,\r\n ExcelConfig,\r\n ExcelTempateColumn\r\n} from '@sd-angular/core/excel';\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 { MatRadioChange } from '@angular/material/radio';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-export-excel',\r\n templateUrl: './grid-popup-export-excel.component.html',\r\n styleUrls: ['./grid-popup-export-excel.component.scss']\r\n})\r\nexport class SdGridPopupExportExcel implements OnInit, AfterViewInit {\r\n private prefix = 'Popup Export Excel';\r\n newExcelConfig = 'fd8fb5db-a7ad-4398-93ac-cb3350261180';\r\n @ViewChild('modal') modal: SdModal;\r\n @Input() key = '';\r\n get fullKey() {\r\n if (!this.key) {\r\n return '';\r\n }\r\n return hash({\r\n prefix: this.prefix,\r\n key: this.key\r\n });\r\n }\r\n @Input() columns: SdGridColumn[] = [];\r\n @Input() extendColumns: SdGridColumn[] = [];\r\n @Input() fileName: string;\r\n @Input() validator: (fileName: string) => string;\r\n @Input() exportOption: GridBaseOptionExport;\r\n excelConfigs: ExcelConfig[] = [];\r\n @Output() exportByTemplate = new EventEmitter<{ excelConfig: ExcelConfig, excelColumns: ExcelTempateColumn[] }>();\r\n tabIndex = 0;\r\n selectedExcelConfig: ExcelConfig = {};\r\n exportableColumns: SdGridColumn[] = [];\r\n selected: {\r\n [key: string]: boolean\r\n } = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private loadingService: SdLoadingService,\r\n private excelService: SdExcelService,\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\r\n async open() {\r\n if (!this.fullKey) {\r\n await this.exportDefault();\r\n return;\r\n }\r\n await this.loadConfiguration();\r\n this.exportableColumns = [...this.columns, ...(this.extendColumns || [])].filter(e => e.type !== 'image');\r\n this.selected = {};\r\n if (!this.selectedExcelConfig?.name) {\r\n if (this.excelConfigs?.length > 0) {\r\n this.selectedExcelConfig = this.excelConfigs[0];\r\n } else {\r\n this.selectedExcelConfig = {\r\n name: this.newExcelConfig\r\n };\r\n }\r\n }\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n }\r\n\r\n private generateExcelColumns = (columns: SdGridColumn[]) => {\r\n const excelColumns: ExcelTempateColumn[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children) {\r\n if (childColumn.type !== 'image') {\r\n excelColumns.push({\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n description: childColumn.description,\r\n width: childColumn.width\r\n });\r\n }\r\n }\r\n } else if (column.type !== 'image') {\r\n excelColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width\r\n });\r\n }\r\n }\r\n return excelColumns;\r\n }\r\n\r\n private initTemplate = async (columns: SdGridColumn[], fileName?: string) => {\r\n columns = columns || [];\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.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.excelService.generateExcelTemplate({\r\n fileName: fileName || this.fileName,\r\n columns: this.generateExcelColumns(columns),\r\n sheets\r\n });\r\n }\r\n\r\n private initDefaultTemplate = async () => {\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n return await this.initTemplate(columns);\r\n }\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n const result = await this.initDefaultTemplate().finally(this.loadingService.stop);\r\n if (result?.filePath) {\r\n this.excelService.downloadTemplate(result.filePath, `${this.fileName}.xlsx`);\r\n }\r\n }\r\n\r\n generateAndUploadTemplate = async (columns: SdGridColumn[], 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.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.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.excelService.generateAndUploadExcelTemplate(this.fullKey, {\r\n fileName: fileName || this.fileName,\r\n columns: this.generateExcelColumns(columns),\r\n sheets\r\n });\r\n }\r\n\r\n onExportByTemplate = (excelConfig: ExcelConfig) => {\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n this.exportByTemplate.emit({\r\n excelConfig,\r\n excelColumns: this.generateExcelColumns(columns)\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n uploadTemplate = async () => {\r\n const excelConfig = await this.excelService.uploadTemplate(this.fullKey, this.validator);\r\n this.excelConfigs.push({\r\n name: excelConfig.name,\r\n fullPath: excelConfig.fullPath,\r\n removable: true\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n downloadTemplate = (excelConfig: ExcelConfig) => {\r\n this.excelService.downloadTemplate(excelConfig.fullPath, excelConfig.name);\r\n }\r\n\r\n removeTemplate = (excelConfig: ExcelConfig) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(async () => {\r\n this.loadingService.start();\r\n await this.excelService.remove(this.fullKey, excelConfig.name).finally(this.loadingService.stop);\r\n const idx = this.excelConfigs.indexOf(excelConfig);\r\n this.excelConfigs.splice(idx, 1);\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n async loadConfiguration() {\r\n this.excelConfigs = [];\r\n this.excelConfigs = await this.excelService.getFiles(this.fullKey);\r\n }\r\n\r\n exportDefault = async () => {\r\n this.loadingService.start();\r\n const result = await this.initDefaultTemplate().finally(this.loadingService.stop);\r\n const excelColumns: ExcelTempateColumn[] = [];\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children) {\r\n if (childColumn.type !== 'image') {\r\n excelColumns.push({\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n }\r\n }\r\n } else if (column.type !== 'image') {\r\n excelColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n }\r\n }\r\n this.exportByTemplate.emit({\r\n excelConfig: {\r\n fullPath: result.filePath,\r\n name: `[${this.fullKey}] Default.xlsx`\r\n },\r\n excelColumns\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n newTemplate = () => {\r\n this.notifyService.confirmWithInput(this.translateService.translate('Enter your template name'), {\r\n maxlength: 50\r\n }).then(async (fileName: string) => {\r\n this.loadingService.start();\r\n fileName = fileName + '.xlsx';\r\n try {\r\n if (this.validator?.(fileName)) {\r\n this.notifyService.notify.warning(this.validator(fileName));\r\n return;\r\n }\r\n let exportableColumns = this.exportableColumns.filter(column => this.selected[column.field]);\r\n if (!exportableColumns.length) {\r\n exportableColumns = this.exportableColumns;\r\n }\r\n const result = await this.generateAndUploadTemplate(exportableColumns, fileName);\r\n if (result?.filePath) {\r\n const excelConfig: ExcelConfig = {\r\n fullPath: result.filePath,\r\n name: result.fileName,\r\n removable: true\r\n };\r\n this.excelConfigs.push(excelConfig);\r\n this.onExportByTemplate(excelConfig);\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n });\r\n }\r\n\r\n onChangeRadio = (matRadioChange: MatRadioChange) => {\r\n const selectedExcelConfig = this.excelConfigs.find(e => e.name === matRadioChange.value);\r\n if (!selectedExcelConfig) {\r\n this.selectedExcelConfig = {\r\n name: this.newExcelConfig\r\n };\r\n } else {\r\n this.selectedExcelConfig = selectedExcelConfig;\r\n }\r\n this.exportableColumns = [...this.columns, ...(this.extendColumns || [])].filter(e => e.type !== 'image');\r\n this.selected = {};\r\n }\r\n}\r\n","// tslint:disable-next-line:max-line-length\r\nimport { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\r\nimport { SdGridColumn, SdGridExternalFilter, GridBaseOptionFilter } from '../../grid.model';\r\nimport { QuickFilter, FilterConfiguration } from './grid-popup-filter.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdSettingService\r\n} from '@sd-angular/core/setting';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridPopupQuickFilterDetail } from '../grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component';\r\nimport { MatSelect, MatSelectChange } from '@angular/material/select';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-filter',\r\n templateUrl: './grid-popup-filter.component.html',\r\n styleUrls: ['./grid-popup-filter.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SdGridPopupFilter implements OnInit, AfterViewInit {\r\n private keyPrefix = 'PopupFilter';\r\n displayKey = 'SDCUSTOM';\r\n isMobileOrTablet = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('popupQuickFilterDetail') popupQuickFilterDetail: SdGridPopupQuickFilterDetail;\r\n @ViewChild('matSelect') matSelect: MatSelect;\r\n @Input() key = '';\r\n @Input() filterOption: GridBaseOptionFilter;\r\n @Output() accept = new EventEmitter<{ filter: any, externalFilter: any }>();\r\n @Output() clear = new EventEmitter<void>();\r\n @Output() loadInlineFilter = new EventEmitter<FilterConfiguration>();\r\n selectedField: string;\r\n newQuickFilter = 'e1ef1d43-d689-424f-959e-e6cd154cfee7';\r\n filter: any = {};\r\n externalFilter: any = {};\r\n columns: SdGridColumn[] = [];\r\n externalFilters: SdGridExternalFilter[] = [];\r\n quickFilters: QuickFilter[] = [];\r\n selectedCode: string;\r\n maxQuickFilters = 5;\r\n @Input() inlineExternal: {\r\n [key: string]: boolean\r\n } = {};\r\n @Input() inlineColumn: {\r\n [key: string]: boolean\r\n } = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n private settingService: SdSettingService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n this.#loadConfiguration().then(() => {\r\n this.loadInlineFilter.emit({\r\n quickFilters: this.quickFilters || [],\r\n selectedQuickFilter: this.selectedCode || '',\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n open = (\r\n fixedColums: SdGridColumn[],\r\n normalColumns: SdGridColumn[],\r\n filter: any,\r\n externalFilter: any,\r\n externalFilters?: SdGridExternalFilter[]) => {\r\n this.init(fixedColums, normalColumns, filter, externalFilter, externalFilters);\r\n this.modal.open();\r\n }\r\n\r\n init = (\r\n fixedColums: SdGridColumn[],\r\n normalColumns: SdGridColumn[],\r\n filter: any,\r\n externalFilter: any,\r\n externalFilters?: SdGridExternalFilter[]) => {\r\n this.columns = [...fixedColums, ...normalColumns].filter(e => !e.filter?.disabled && e.type !== 'image');\r\n this.columns.forEach(column => {\r\n if (column.type === 'children') {\r\n column.children = column.children.filter(e => !e.filter?.disabled && e.type !== 'image');\r\n }\r\n });\r\n if (externalFilters) {\r\n this.externalFilters = externalFilters.filter(e => !e.disabled);\r\n } else {\r\n this.externalFilters = [];\r\n }\r\n this.filter = filter;\r\n this.externalFilter = this.initExternalFilter(externalFilters, externalFilter);\r\n for (const eFilter of this.externalFilters) {\r\n if (this.inlineExternal[eFilter.field] === undefined) {\r\n this.inlineExternal[eFilter.field] = true;\r\n }\r\n }\r\n for (const column of this.columns) {\r\n if (this.inlineColumn[column.field] === undefined) {\r\n this.inlineColumn[column.field] = true;\r\n }\r\n }\r\n }\r\n\r\n close = () => {\r\n this.modal.close();\r\n }\r\n\r\n onAccept() {\r\n if (this.filterOption?.multiple === false) {\r\n if (this.selectedField) {\r\n if (this.selectedField.startsWith('column')) {\r\n const field = this.selectedField.replace('column', '');\r\n this.accept.emit({\r\n filter: {\r\n [field]: this.filter[field]\r\n },\r\n externalFilter: {}\r\n });\r\n } else if (this.selectedField.startsWith('external')) {\r\n const field = this.selectedField.replace('external', '');\r\n this.accept.emit({\r\n filter: {},\r\n externalFilter: this.initExternalFilter(this.externalFilters, {\r\n [field]: this.externalFilter[field]\r\n })\r\n });\r\n }\r\n }\r\n } else {\r\n this.accept.emit({\r\n filter: this.filter,\r\n externalFilter: this.externalFilter\r\n });\r\n }\r\n this.modal.close();\r\n }\r\n\r\n onClear() {\r\n delete this.selectedCode;\r\n this.clear.emit();\r\n }\r\n\r\n #loadConfiguration = async () => {\r\n this.quickFilters = [];\r\n if (!this.key) {\r\n return;\r\n }\r\n const { get, has } = this.settingService.create<FilterConfiguration>({\r\n prefix: this.keyPrefix,\r\n key: this.key\r\n });\r\n if (!await has()) {\r\n return;\r\n }\r\n const configuration = await get();\r\n if (Array.isArray(configuration?.quickFilters)) {\r\n this.quickFilters = configuration.quickFilters;\r\n }\r\n this.selectedCode = configuration?.selectedQuickFilter || '';\r\n this.inlineExternal = configuration?.inlineExternal || {};\r\n this.inlineColumn = configuration?.inlineColumn || {};\r\n for (const externalFilter of this.externalFilters) {\r\n if (this.inlineExternal[externalFilter.field] === undefined) {\r\n this.inlineExternal[externalFilter.field] = true;\r\n }\r\n }\r\n for (const column of this.columns) {\r\n if (this.inlineColumn[column.field] === undefined) {\r\n this.inlineColumn[column.field] = true;\r\n }\r\n }\r\n }\r\n\r\n async updateConfiguration(selectedQuickFilterCode?: string) {\r\n if (!this.key) {\r\n return;\r\n }\r\n if (selectedQuickFilterCode !== undefined) {\r\n this.selectedCode = selectedQuickFilterCode;\r\n }\r\n const { set } = this.settingService.create<FilterConfiguration>({\r\n prefix: this.keyPrefix,\r\n key: this.key\r\n });\r\n await set({\r\n quickFilters: this.quickFilters,\r\n selectedQuickFilter: this.selectedCode,\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n this.loadInlineFilter.emit({\r\n quickFilters: this.quickFilters || [],\r\n selectedQuickFilter: this.selectedCode || '',\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n onSelectionChange = (change: MatSelectChange) => {\r\n const value = change?.value || '';\r\n if (value === this.newQuickFilter) {\r\n this.selectedCode = '';\r\n this.onCreateQuickFilter();\r\n this.ref.detectChanges();\r\n } else {\r\n const quickFilter = this.quickFilters.find(e => e.code === value);\r\n if (quickFilter) {\r\n this.onDetailQuickFilter(quickFilter);\r\n }\r\n }\r\n }\r\n\r\n onCreateQuickFilter = (ev?: Event) => {\r\n ev?.stopPropagation();\r\n ev?.preventDefault();\r\n this.matSelect?.close();\r\n this.popupQuickFilterDetail.open(this.columns, this.externalFilters);\r\n }\r\n\r\n onDetailQuickFilter = async (quickFilter?: QuickFilter) => {\r\n if (quickFilter) {\r\n this.selectedCode = quickFilter.code;\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.initExternalFilter(this.externalFilters, JSON.parse(f2));\r\n await this.updateConfiguration();\r\n }\r\n }\r\n\r\n onEditQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.matSelect?.close();\r\n if (quickFilter) {\r\n this.popupQuickFilterDetail.open(this.columns,\r\n this.externalFilters,\r\n quickFilter.filter,\r\n quickFilter.externalFilter,\r\n quickFilter.code);\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onDeleteQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.matSelect?.close();\r\n if (quickFilter) {\r\n this.notifyService.confirm(this.translateService.translate('Remove filter')).then(async () => {\r\n if (quickFilter.code === this.selectedCode) {\r\n this.selectedCode = '';\r\n }\r\n const idx = this.quickFilters.findIndex(e => e.code === quickFilter.code);\r\n this.quickFilters.splice(idx, 1);\r\n await this.updateConfiguration();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n onAcceptQuickFilter = async (args: { code: string, filter: any, externalFilter: any }) => {\r\n const quickFilter = this.quickFilters.find(e => e.code === args.code);\r\n if (!quickFilter) {\r\n this.quickFilters.push({\r\n code: args.code,\r\n filter: args.filter,\r\n externalFilter: this.initExternalFilter(this.externalFilters, args.externalFilter)\r\n });\r\n } else {\r\n quickFilter.filter = args.filter;\r\n quickFilter.externalFilter = this.initExternalFilter(this.externalFilters, args.externalFilter);\r\n }\r\n await this.updateConfiguration();\r\n }\r\n\r\n onInlineChange = () => {\r\n this.updateConfiguration();\r\n }\r\n\r\n private initExternalFilter = (externalFilters: SdGridExternalFilter[], externalFilter: any) => {\r\n externalFilter = externalFilter || {};\r\n externalFilters = externalFilters || [];\r\n externalFilters.forEach(e => {\r\n if (e.type === 'string') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? '';\r\n return;\r\n }\r\n if (e.type === 'number') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? undefined;\r\n return;\r\n }\r\n if (e.type === 'daterange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'numberrange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'daterangefull') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'values') { // andn1\r\n externalFilter[e.field] = (externalFilter[e.field] || e.default) ?? '';\r\n return;\r\n }\r\n });\r\n return externalFilter;\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input } from '@angular/core';\r\nimport { SdGridColumn, SdGridExternalFilter } from '../../grid.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { QuickFilter } from '../grid-popup-filter/grid-popup-filter.model';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-quick-filter-detail',\r\n templateUrl: './grid-popup-quick-filter-detail.component.html',\r\n styleUrls: ['./grid-popup-quick-filter-detail.component.scss']\r\n})\r\nexport class SdGridPopupQuickFilterDetail implements OnInit, AfterViewInit {\r\n displayKey = 'SDCUSTOM';\r\n isMobileOrTablet = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @Input() quickFilters: QuickFilter[];\r\n @Output() accept = new EventEmitter<any>();\r\n fields: Field[] = [];\r\n selectableFields: Field[] = [];\r\n columns: SdGridColumn[] = [];\r\n externalFilters: SdGridExternalFilter[] = [];\r\n filter: Filter = {};\r\n externalFilter: Filter = {};\r\n selectedField: {\r\n [key: string]: boolean;\r\n } = {};\r\n page: 1 | 2 = 1;\r\n code: string;\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n open(columns: SdGridColumn[], externalFilters: SdGridExternalFilter[], filter?: Filter, externalFilter?: Filter, code?: string) {\r\n this.fields = [];\r\n this.filter = {};\r\n this.externalFilter = {};\r\n this.columns = columns;\r\n this.externalFilters = externalFilters;\r\n this.code = code;\r\n if (filter) {\r\n Object.keys(filter).forEach(key => {\r\n if (filter[key] === undefined || filter[key] === null || filter[key] === '') {\r\n return;\r\n }\r\n const column = columns.find(e => e.field === key);\r\n if (!column) {\r\n return;\r\n }\r\n this.filter[key] = filter[key];\r\n this.fields.push({\r\n ...column,\r\n id: 'column' + column.field,\r\n group: 'column',\r\n type: column.type,\r\n code: column.field,\r\n title: column.title\r\n });\r\n });\r\n }\r\n if (externalFilter) {\r\n Object.keys(externalFilter).forEach(key => {\r\n if (externalFilter[key] === undefined || externalFilter[key] === null || externalFilter[key] === '') {\r\n return;\r\n }\r\n if (key.startsWith(this.displayKey)) {\r\n this.externalFilter[key] = externalFilter[key];\r\n return;\r\n }\r\n const item = externalFilters.find(e => e.field === key);\r\n if (!item) {\r\n return;\r\n }\r\n if (item.type === 'daterange' || item.type === 'numberrange') {\r\n this.externalFilter[key] = { ...externalFilter[key] };\r\n if (!externalFilter[key]?.from && !externalFilter[key]?.to) {\r\n return;\r\n }\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title,\r\n fromTitle: item.fromTitle,\r\n toTitle: item.toTitle,\r\n });\r\n } else if (item.type === 'daterangefull') {\r\n this.externalFilter[key] = { ...externalFilter[key] };\r\n if (!externalFilter[key]?.from && !externalFilter[key]?.to) {\r\n return;\r\n }\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title\r\n });\r\n } else {\r\n this.externalFilter[key] = externalFilter[key];\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title\r\n });\r\n }\r\n });\r\n }\r\n const externalFields: Field[] = externalFilters?.map(e => ({\r\n ...e,\r\n id: 'external' + e.field,\r\n group: 'external',\r\n code: e.field,\r\n type: e.type,\r\n title: e.title\r\n })) || [];\r\n const columnFields: Field[] = [];\r\n columns?.filter(e => e.type !== 'image').forEach(column => {\r\n if ('children' in column) {\r\n column.children?.filter(e => e.type !== 'image').forEach(e => {\r\n columnFields.push({\r\n ...e,\r\n id: 'column' + e.field,\r\n group: 'column',\r\n code: e.field,\r\n type: e.type,\r\n title: e.title\r\n });\r\n });\r\n } else {\r\n columnFields.push({\r\n ...column,\r\n id: 'column' + column.field,\r\n group: 'column',\r\n code: column.field,\r\n type: column.type,\r\n title: column.title\r\n });\r\n }\r\n });\r\n this.selectableFields = [...externalFields, ...columnFields];\r\n this.selectedField = {};\r\n this.fields.forEach(e => this.selectedField[e.id] = true);\r\n this.page = this.fields.length > 0 ? 2 : 1;\r\n this.modal.open();\r\n }\r\n\r\n onAccept = () => {\r\n const execute = () => {\r\n const filter = {};\r\n const externalFilter = {};\r\n Object.keys(this.filter).forEach(key => {\r\n if (this.filter[key] === undefined || this.filter[key] === null || this.filter[key] === '') {\r\n return;\r\n }\r\n if (!this.fields.some(e => e.group === 'column' && e.code === key)) {\r\n return;\r\n }\r\n filter[key] = this.filter[key];\r\n });\r\n Object.keys(this.externalFilter).forEach(key => {\r\n if (this.externalFilter[key] === undefined || this.externalFilter[key] === null || this.externalFilter[key] === '') {\r\n return;\r\n }\r\n externalFilter[key] = this.externalFilter[key];\r\n });\r\n this.accept.emit({\r\n code: this.code,\r\n filter,\r\n externalFilter\r\n });\r\n this.modal.close();\r\n };\r\n if (!this.code) {\r\n this.notifyService.confirmWithInput('Enter your quick filter name').then((value: string) => {\r\n if (value) {\r\n if (this.quickFilters?.some(e => e.code === value)) {\r\n this.notifyService.notify.warning(this.translateService.translate('Code is existed'));\r\n return;\r\n }\r\n this.code = value;\r\n execute();\r\n }\r\n });\r\n } else {\r\n execute();\r\n }\r\n }\r\n\r\n onCancel = () => {\r\n this.modal.close();\r\n }\r\n\r\n onSelectField = (values: string[]) => {\r\n this.fields = this.selectableFields.filter(e => values.some(v => e.code === v));\r\n for (const field of this.fields) {\r\n if (field.group === 'external' && field.type.includes('range')) {\r\n this.externalFilter[field.code] = this.externalFilter[field.code] || {};\r\n }\r\n }\r\n }\r\n\r\n onSelectFields = () => {\r\n this.fields = this.selectableFields.filter(e => this.selectedField[e.id]);\r\n for (const field of this.fields) {\r\n if (field.group === 'external' && field.type.includes('range')) {\r\n this.externalFilter[field.code] = this.externalFilter[field.code] || {};\r\n }\r\n }\r\n }\r\n}\r\n\r\ninterface Field {\r\n id: string;\r\n group: 'column' | 'external';\r\n type: string;\r\n code: string;\r\n title?: string;\r\n fromTitle?: string;\r\n toTitle?: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface Filter {\r\n [field: string]: any;\r\n}\r\n","import { Component, OnInit, AfterViewInit, Input, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { SubOption } from '../../grid.model';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\n@Component({\r\n selector: 'sd-grid-sub-information',\r\n templateUrl: './grid-sub-information.component.html',\r\n styleUrls: ['./grid-sub-information.component.scss']\r\n})\r\nexport class SdGridSubInformation implements OnInit, AfterViewInit {\r\n @Input() height = 'auto';\r\n @Input() option: SubOption;\r\n @Input() subItems: any[] = [];\r\n isMobileOrTablet: boolean;\r\n filter: any = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n updateFilter() {\r\n\r\n }\r\n trackById(index, item) {\r\n return item.id;\r\n }\r\n\r\n onEditorChange = () => {\r\n this.ref.detectChanges();\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { GridItem, GridColumnChildren } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-children-view',\r\n templateUrl: './grid-desktop-column-children-view.component.html',\r\n styleUrls: ['./grid-desktop-column-children-view.component.scss']\r\n})\r\nexport class GridDesktopColumnChildrenViewComponent {\r\n @Input() column: GridColumnChildren;\r\n @Input() item: GridItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n@Pipe({\r\n name: 'cellDesktopClassName'\r\n})\r\nexport class CellDesktopClassNamePipe implements PipeTransform {\r\n transform(value: any, rowData: GridItem, column: SdGridColumn, isChildren?: boolean): string {\r\n const classNames = [];\r\n if (column.click) {\r\n classNames.push('cursor-pointer');\r\n }\r\n if (isChildren) {\r\n classNames.push('c-children');\r\n }\r\n if (column.badge) {\r\n const badge = column.badge(rowData, value);\r\n if (badge) {\r\n classNames.push('c-badge');\r\n classNames.push('badge');\r\n if (badge === 'PRIMARY') {\r\n classNames.push('badge-primary');\r\n } else if (badge === 'SECONDARY') {\r\n classNames.push('badge-secondary');\r\n } else if (badge === 'WARNING') {\r\n classNames.push('badge-warning');\r\n } else if (badge === 'SUCCESS') {\r\n classNames.push('badge-success');\r\n } else if (badge === 'DANGER') {\r\n classNames.push('badge-danger');\r\n } else if (badge === 'LIGHT') {\r\n classNames.push('badge-light');\r\n } else if (badge === 'DARK') {\r\n classNames.push('badge-dark');\r\n }\r\n }\r\n }\r\n return classNames.join(' ');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'cellMobileClassName'\r\n})\r\nexport class CellMobileClassNamePipe implements PipeTransform {\r\n transform(value: any, rowData: GridItem, column: SdGridColumn): string {\r\n const classNames = [];\r\n if (column.click) {\r\n classNames.push('cursor-pointer');\r\n }\r\n if (column.badge) {\r\n const badge = column.badge(rowData, value);\r\n if (badge) {\r\n classNames.push('badge');\r\n classNames.push('c-badge');\r\n if (badge === 'PRIMARY') {\r\n classNames.push('badge-primary');\r\n } else if (badge === 'SECONDARY') {\r\n classNames.push('badge-secondary');\r\n } else if (badge === 'WARNING') {\r\n classNames.push('badge-warning');\r\n } else if (badge === 'SUCCESS') {\r\n classNames.push('badge-success');\r\n } else if (badge === 'DANGER') {\r\n classNames.push('badge-danger');\r\n } else if (badge === 'LIGHT') {\r\n classNames.push('badge-light');\r\n } else if (badge === 'DARK') {\r\n classNames.push('badge-dark');\r\n }\r\n }\r\n }\r\n return classNames.join(' ');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, ColumnCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'columnCommandFilter'\r\n})\r\nexport class ColumnCommandFilterPipe implements PipeTransform {\r\n async transform(commands: ColumnCommand[], item: GridItem): Promise<ColumnCommand[]> {\r\n const results: ColumnCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n@Pipe({\r\n name: 'columnHtmlTemplate'\r\n})\r\nexport class ColumnHtmlTemplatePipe 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: GridItem, htmlTemplate: (value: any, rowData?: any, isMobileOrTablet?: boolean) => string): string {\r\n if (typeof (htmlTemplate) !== 'function') {\r\n return value;\r\n }\r\n return htmlTemplate(value, rowData, this.isMobileOrTablet);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'columnTitle'\r\n})\r\nexport class ColumnTitlePipe implements PipeTransform {\r\n async transform(item: GridItem, title: string, dynamicTitle: ((rowData: any) => string | Promise<string>)): Promise<string> {\r\n if (!title) {\r\n return '';\r\n }\r\n if (dynamicTitle) {\r\n const result = dynamicTitle(item);\r\n if (result instanceof Promise) {\r\n return (await result) || title;\r\n }\r\n return result || title;\r\n }\r\n return title;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdUtilityService } from '@sd-angular/core/utility';\r\n@Pipe({\r\n name: 'columnValues'\r\n})\r\nexport class ColumnValuesPipe implements PipeTransform {\r\n private static cache: {\r\n [key: string]: {\r\n values: ValueData[],\r\n obj: {\r\n [key: string]: ValueData\r\n }\r\n }\r\n } = {};\r\n constructor(private utilityService: SdUtilityService) { }\r\n transform(value: any, values: ValueData[]): ValueData {\r\n const hashKey = hash(values);\r\n if (!ColumnValuesPipe.cache[hashKey]) {\r\n ColumnValuesPipe.cache[hashKey] = {\r\n values,\r\n obj: this.utilityService.arrayToObject(values, 'value')\r\n };\r\n }\r\n if (!ColumnValuesPipe.cache[hashKey].obj[value]) {\r\n return {\r\n value,\r\n text: value\r\n };\r\n }\r\n return ColumnValuesPipe.cache[hashKey].obj[value];\r\n\r\n }\r\n}\r\n\r\ninterface ValueData {\r\n value: string;\r\n text: string;\r\n icon?: string;\r\n color?: string;\r\n backgroundColor?: string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandDisabled'\r\n})\r\nexport class CommandDisabledPipe implements PipeTransform {\r\n transform(disabled: boolean | ((item?: any) => boolean), item: GridItem): boolean {\r\n if (!disabled) {\r\n return false;\r\n }\r\n if (typeof (disabled) === 'boolean') {\r\n return disabled;\r\n }\r\n return disabled(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand, GridCommandNoChildren } from '../grid.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class CommandFilterPipe implements PipeTransform {\r\n async transform(commands: SdGridCommand[], item: GridItem): Promise<SdGridCommand[]> {\r\n const results: SdGridCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n if ('children' in command) {\r\n let flag = true;\r\n const { hiddenByItem } = command;\r\n if (hiddenByItem) {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (await hidden) {\r\n flag = false;\r\n }\r\n } else {\r\n if (hidden) {\r\n flag = false;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n const children: GridCommandNoChildren[] = [];\r\n for (const childCommand of command.children) {\r\n if (!childCommand.hiddenByItem) {\r\n children.push(childCommand);\r\n } else {\r\n const hidden = childCommand.hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n if (!hidden) {\r\n children.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n if (children.length) {\r\n results.push({\r\n ...command,\r\n children\r\n });\r\n }\r\n }\r\n } else {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'commandHidden'\r\n})\r\nexport class CommandHidden implements PipeTransform {\r\n async transform(item: GridItem, command: SdGridCommand): Promise<boolean> {\r\n const { hidden, hiddenByItem } = command;\r\n if (hidden) {\r\n return true;\r\n }\r\n if (hiddenByItem) {\r\n const hiddenResult = hiddenByItem(item);\r\n if (hiddenResult instanceof Promise) {\r\n if (await hiddenResult) {\r\n return true;\r\n }\r\n } else {\r\n if (hiddenResult) {\r\n return true;\r\n }\r\n }\r\n }\r\n if ('children' in command) {\r\n const results = [];\r\n for (const childCommand of command.children) {\r\n const { hidden: childHidden, hiddenByItem: childHiddenByItem } = childCommand;\r\n if (!childHidden && !childHiddenByItem) {\r\n results.push(childCommand);\r\n } else {\r\n if (childHiddenByItem) {\r\n const hiddenResult = childHiddenByItem(item);\r\n if (hiddenResult instanceof Promise) {\r\n if (!await hiddenResult) {\r\n results.push(childCommand);\r\n }\r\n } else {\r\n if (!hiddenResult) {\r\n results.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (results.length === 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class CommandIconPipe implements PipeTransform {\r\n transform(icon: string | ((item?: any) => string), item: GridItem): string {\r\n if (!icon) {\r\n return '';\r\n }\r\n if (typeof (icon) === 'string') {\r\n return icon;\r\n }\r\n return icon(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class CommandTitlePipe implements PipeTransform {\r\n transform(title: string | ((item?: any) => string), item: GridItem): string {\r\n if (!title) {\r\n return '';\r\n }\r\n if (typeof (title) === 'string') {\r\n return title;\r\n }\r\n return title(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, DynamicEditorItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorDynamicItem'\r\n})\r\nexport class EditorDynamicItemPipe implements PipeTransform {\r\n private previous: Date;\r\n private previousResults: any[] = [];\r\n private 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 gọi hàm\r\n async transform(value: any, item: GridItem, editor: DynamicEditorItem) {\r\n if (!editor.dependOnField) {\r\n return editor.items || [];\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 this.previousResults;\r\n }\r\n const items = editor.items || [];\r\n if (typeof (items) === 'function') {\r\n const results = items(item, value);\r\n if (results instanceof Promise) {\r\n this.previousResults = await results;\r\n } else {\r\n this.previousResults = results;\r\n }\r\n } else {\r\n this.previousResults = items;\r\n }\r\n this.previousResults = this.previousResults || [];\r\n return this.previousResults;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorSubInformationHandler'\r\n})\r\nexport class EditorSubInformationHandlerPipe implements PipeTransform {\r\n transform(value: any, item: GridItem, columns: SdGridColumn[]): boolean {\r\n const visible = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n let isDisabled = false;\r\n\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (column.editor) {\r\n isDisabled = typeof (column.editor.disabled) === 'function' ? column.editor.disabled(item) : column.editor.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n // Hiển thị editor nếu dòng đó:\r\n // Đang được edit: editingStatus\r\n return item.editingStatus\r\n // Được thiết lập alwayDisplay\r\n || (column.editor && column.editor.alwayDisplay);\r\n };\r\n item.editorHandler = item.editorHandler || {};\r\n for (const column of columns) {\r\n item.editorHandler.disabled = false;\r\n item.editorHandler[column.field] = {};\r\n\r\n if (item.editorHandler.disabled) {\r\n item.editorHandler[column.field].visible = false;\r\n } else {\r\n item.editorHandler[column.field].visible = visible(column);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorValidate'\r\n})\r\nexport class EditorValidatePipe implements PipeTransform {\r\n private previous: Date;\r\n private delay = 1000; // 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(value: string, item: GridItem, validate: (item: GridItem) => string | Promise<string>): Promise<boolean> {\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 true;\r\n }\r\n item.editorHandler = item.editorHandler || {};\r\n if (!validate) {\r\n item.editorHandler.errorMessage = null;\r\n return true;\r\n }\r\n const result = validate(item);\r\n if (result instanceof Promise) {\r\n item.editorHandler.errorMessage = await result;\r\n return true;\r\n } else {\r\n item.editorHandler.errorMessage = result;\r\n return true;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'filterMobile',\r\n pure: false\r\n})\r\nexport class FilterMobilePipe implements PipeTransform {\r\n transform(columns: SdGridColumn[], item: GridItem): SdGridColumn[] {\r\n // Những giá trị undefined, null và rỗng sẽ bỏ qua khi hiển thị trên mobile\r\n return columns.filter(column => (item[column.field] !== undefined\r\n && item[column.field] !== null\r\n && item[column.field] !== '')\r\n || column.htmlTemplate\r\n || column.type === 'children'\r\n || (column.type === 'string' && column.commands?.length > 0));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'mobileCommandFilter'\r\n})\r\nexport class MobileCommandFilterPipe implements PipeTransform {\r\n async transform(commands: SdGridCommand[], item: GridItem): Promise<SdGridCommand[]> {\r\n const results: SdGridCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n if ('children' in command) {\r\n let flag = true;\r\n const { hiddenByItem } = command;\r\n if (hiddenByItem) {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (await hidden) {\r\n flag = false;\r\n }\r\n } else {\r\n if (hidden) {\r\n flag = false;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n for (const childCommand of command.children) {\r\n if (!childCommand.hiddenByItem) {\r\n results.push(childCommand);\r\n } else {\r\n const hidden = childCommand.hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(childCommand);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'mobileViewHtmlTempate'\r\n})\r\nexport class MobileViewHtmlTemplatePipe implements PipeTransform {\r\n transform(rowData: GridItem, columns: SdGridColumn[], htmlTemplate: (rowData: any, columns?: SdGridColumn[]) => string): string {\r\n return htmlTemplate(rowData, columns);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\nimport { DecimalPipe } from '@angular/common';\r\n@Pipe({\r\n name: 'valueTransform'\r\n})\r\nexport class ValueTransformPipe implements PipeTransform {\r\n constructor(private decimalPipe: DecimalPipe) {}\r\n transform(value: any, rowData: GridItem, column: SdGridColumn): string {\r\n if (column.transform) {\r\n return column.transform(value, rowData);\r\n } else if (column.type === 'number' && Number.isNumber(value)) {\r\n return this.decimalPipe.transform(value, '1.0-2');\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorPopupVisible'\r\n})\r\nexport class EditorPopupVisiblePipe implements PipeTransform {\r\n transform(column: SdGridColumn, item: GridItem): boolean {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n if (typeof (column.editor?.hidden) === 'boolean' && column.editor.hidden) {\r\n return false;\r\n }\r\n if (typeof (column.editor?.hidden) === 'function' && column.editor.hidden(item)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdSubHeaderDef]'\r\n})\r\nexport class SdSubHeaderDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Component, ViewChild, Input } from '@angular/core';\r\nimport { SdUploadExcel, SdUploadExcelColumn, SdUploadExcelOption } from '@sd-angular/core/upload-excel';\r\nimport { SdGridColumn } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-import-excel',\r\n templateUrl: './grid-import-excel.component.html'\r\n})\r\nexport class SdGridImportExcel {\r\n @Input() key: string;\r\n @Input() accept: (item: any[], successItems: any[], errorItems: any[], warningItems: []) => void | Promise<void>;\r\n @Input() set columns(gridColumns: SdGridColumn[]) {\r\n const columns: SdUploadExcelColumn[] = [];\r\n gridColumns.forEach(column => {\r\n if (column.ignoreImport) {\r\n return;\r\n }\r\n if (column.type === 'string' || column.type === 'color') {\r\n columns.push({\r\n type: 'string',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'bool') {\r\n columns.push({\r\n type: 'bool',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'datetime' || column.type === 'time') {\r\n columns.push({\r\n type: 'datetime',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'values') {\r\n columns.push({\r\n type: 'values',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n values: column.values.map(e => e.value),\r\n });\r\n } else if (column.type === 'radio') {\r\n columns.push({\r\n type: 'radio',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n values: column.values.map(e => e[column.valueField])\r\n });\r\n }\r\n if (column.type === 'children' && column.children?.length) {\r\n column.children.forEach(childColumn => {\r\n if (childColumn.ignoreImport) {\r\n return;\r\n }\r\n if (childColumn.type === 'string' || childColumn.type === 'color') {\r\n columns.push({\r\n type: 'string',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'bool') {\r\n columns.push({\r\n type: 'bool',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'datetime' || childColumn.type === 'time') {\r\n columns.push({\r\n type: 'datetime',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'values') {\r\n columns.push({\r\n type: 'values',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width,\r\n values: childColumn.values.map(e => e.value),\r\n });\r\n } else if (childColumn.type === 'radio') {\r\n columns.push({\r\n type: 'radio',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width,\r\n values: childColumn.values.map(e => e[childColumn.valueField])\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.option = {\r\n key: `GridImport${this.key}`,\r\n columns,\r\n onAccept: this.accept\r\n };\r\n }\r\n option: SdUploadExcelOption;\r\n @ViewChild(SdUploadExcel) control: SdUploadExcel;\r\n constructor() { }\r\n\r\n open = () => {\r\n this.control?.open();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } 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 { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\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 { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdGrid } from './grid.component';\r\nimport { SdDynamicItems } from './pipes/dynamic-items.pipe';\r\nimport { SdGridConfig } from './components/grid-config/grid-config.component';\r\nimport { SdGridDesktopColumnEdit } from './components/grid-desktop-column-edit/grid-desktop-column-edit.component';\r\nimport { SdGridDesktopColumnView } from './components/grid-desktop-column-view/grid-desktop-column-view.component';\r\nimport { SdGridDesktopInlineFilter } from './components/grid-desktop-inline-filter/grid-desktop-inline-filter.component';\r\nimport { SdGridMobileItemView } from './components/grid-mobile-item-view/grid-mobile-item-view.component';\r\nimport { SdGridPopupEditor } from './components/grid-popup-editor/grid-popup-editor.component';\r\nimport { SdGridPopupExportExcel } from './components/grid-popup-export-excel/grid-popup-export-excel.component';\r\nimport { SdGridPopupFilter } from './components/grid-popup-filter/grid-popup-filter.component';\r\nimport { SdGridPopupQuickFilterDetail } from './components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component';\r\nimport { SdGridSubInformation } from './components/grid-sub-information/grid-sub-information.component';\r\nimport { GridDesktopColumnChildrenViewComponent } from './components/grid-desktop-column-children-view/grid-desktop-column-children-view.component';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CellDesktopClassNamePipe } from './pipes/cell-desktop-class-name.pipe';\r\nimport { CellMobileClassNamePipe } from './pipes/cell-mobile-class-name.pipe';\r\nimport { ColumnCommandFilterPipe } from './pipes/column-command-filter.pipe';\r\nimport { ColumnHtmlTemplatePipe } from './pipes/column-html-template.pipe';\r\nimport { ColumnTitlePipe } from './pipes/column-title.pipe';\r\nimport { ColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { CommandDisabledPipe } from './pipes/command-disabled.pipe';\r\nimport { CommandFilterPipe } from './pipes/command-filter.pipe';\r\nimport { CommandHidden } from './pipes/command-hidden.pipe';\r\nimport { CommandIconPipe } from './pipes/command-icon.pipe';\r\nimport { CommandTitlePipe } from './pipes/command-title.pipe';\r\nimport { EditorDynamicItemPipe } from './pipes/editor-dynamic-item.pipe';\r\nimport { EditorHandlerPipe } from './pipes/editor-handler.pipe';\r\nimport { EditorSubInformationHandlerPipe } from './pipes/editor-sub-information-handler.pipe';\r\nimport { EditorValidatePipe } from './pipes/editor-validate.pipe';\r\nimport { FilterMobilePipe } from './pipes/filter-mobile.pipe';\r\nimport { MobileCommandFilterPipe } from './pipes/mobile-command-filter';\r\nimport { MobileViewHtmlTemplatePipe } from './pipes/mobile-view-html-template.pipe';\r\nimport { ValueTransformPipe } from './pipes/value-transform.pipe';\r\nimport { EditorPopupVisiblePipe } from './pipes/editor-popup-visible.pipe';\r\nimport { SdCellDefDirective } from './directives/cell-def.directive';\r\nimport { SdCellEditorDefDirective } from './directives/cell-editor-def.directive';\r\nimport { SdCellFooterDevDirective } from './directives/cell-footer-def.directive';\r\nimport { SdSubHeaderDefDirective } from './directives/sub-information-header-def.directive';\r\nimport { SdGridImportExcel } from './components/grid-import-excel/grid-import-excel.component';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { SdUploadExcelModule } from '@sd-angular/core/upload-excel';\r\nimport { HandlerLocal } from './models/handler-local';\r\nimport { HandlerDotnet } from './models/handler-dotnet';\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 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 MatSelectModule,\r\n MatCheckboxModule,\r\n SdUploadExcelModule,\r\n SdFormModule,\r\n SdServiceModule\r\n ],\r\n declarations: [\r\n SdGrid,\r\n SdGridConfig,\r\n SdGridDesktopColumnEdit,\r\n SdGridDesktopColumnView,\r\n SdGridDesktopInlineFilter,\r\n SdGridMobileItemView,\r\n SdGridPopupEditor,\r\n SdGridPopupExportExcel,\r\n SdGridPopupFilter,\r\n SdGridPopupQuickFilterDetail,\r\n SdGridSubInformation,\r\n SdGridImportExcel,\r\n\r\n GridDesktopColumnChildrenViewComponent,\r\n CellDesktopClassNamePipe,\r\n CellMobileClassNamePipe,\r\n ColumnCommandFilterPipe,\r\n ColumnHtmlTemplatePipe,\r\n ColumnTitlePipe,\r\n ColumnValuesPipe,\r\n CommandDisabledPipe,\r\n CommandFilterPipe,\r\n CommandHidden,\r\n CommandIconPipe,\r\n CommandTitlePipe,\r\n SdDynamicItems,\r\n EditorDynamicItemPipe,\r\n EditorHandlerPipe,\r\n EditorSubInformationHandlerPipe,\r\n EditorValidatePipe,\r\n FilterMobilePipe,\r\n MobileCommandFilterPipe,\r\n MobileViewHtmlTemplatePipe,\r\n ValueTransformPipe,\r\n EditorPopupVisiblePipe,\r\n\r\n SdCellDefDirective,\r\n SdCellEditorDefDirective,\r\n SdCellFooterDevDirective,\r\n SdSubHeaderDefDirective,\r\n ],\r\n exports: [\r\n SdGrid,\r\n SdCellDefDirective,\r\n SdCellEditorDefDirective,\r\n SdCellFooterDevDirective,\r\n SdSubHeaderDefDirective,\r\n ],\r\n providers: [\r\n HandlerLocal,\r\n HandlerDotnet,\r\n EditorHandlerPipe\r\n ]\r\n})\r\nexport class SdGridModule {\r\n}\r\n","export class QuickFilter {\r\n code: string;\r\n filter: {\r\n [field: string]: any\r\n };\r\n externalFilter: {\r\n [field: string]: any\r\n };\r\n}\r\n\r\nexport interface FilterConfiguration {\r\n selectedQuickFilter: string;\r\n quickFilters: QuickFilter[];\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n };\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/grid/src/lib/grid.model.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-handler.pipe.ts","../../../../projects/sd-core/grid/src/lib/models/grid-configuration.model.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-def.directive.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-footer-def.directive.ts","../../../../projects/sd-core/grid/src/lib/directives/cell-editor-def.directive.ts","../../../../projects/sd-core/grid/src/lib/models/handler-local.ts","../../../../projects/sd-core/grid/src/lib/models/handler-dotnet.ts","../../../../projects/sd-core/grid/src/lib/grid.component.ts","../../../../projects/sd-core/grid/src/lib/pipes/dynamic-items.pipe.ts","../../../../projects/sd-core/grid/src/lib/components/grid-config/grid-config.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-edit/grid-desktop-column-edit.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-view/grid-desktop-column-view.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-inline-filter/grid-desktop-inline-filter.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-mobile-item-view/grid-mobile-item-view.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-editor/grid-popup-editor.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-filter/grid-popup-filter.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-sub-information/grid-sub-information.component.ts","../../../../projects/sd-core/grid/src/lib/components/grid-desktop-column-children-view/grid-desktop-column-children-view.component.ts","../../../../projects/sd-core/grid/src/lib/pipes/cell-desktop-class-name.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/cell-mobile-class-name.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-command-filter.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-html-template.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-title.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/column-values.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-disabled.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-filter.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-hidden.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-icon.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/command-title.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-dynamic-item.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-sub-information-handler.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-validate.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/filter-mobile.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/mobile-command-filter.ts","../../../../projects/sd-core/grid/src/lib/pipes/mobile-view-html-template.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/value-transform.pipe.ts","../../../../projects/sd-core/grid/src/lib/pipes/editor-popup-visible.pipe.ts","../../../../projects/sd-core/grid/src/lib/directives/sub-information-header-def.directive.ts","../../../../projects/sd-core/grid/src/lib/components/grid-import-excel/grid-import-excel.component.ts","../../../../projects/sd-core/grid/src/lib/grid.module.ts","../../../../projects/sd-core/grid/src/lib/components/grid-popup-filter/grid-popup-filter.model.ts"],"names":["__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","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","this","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","defaultGridOption","type","undefined","items","filter","disabled","sortable","paginate","pageSize","pageCount","commands","columns","EditorHandlerPipe","transform","item","gridOption","visible","column","isDisabled","editor","_a","_b","editingStatus","_c","alwayDisplay","_d","editorHandler","_f","_g","field","Pipe","args","name","GRID_CONFIG","InjectionToken","templateRef","Directive","selector","TemplateRef","Input","datePipe","_this","localItems","filterInfo","filterValue","rawFilter","toString","trim","toLowerCase","columnValue","fValue","replace","cValue","date","fromDate","Date","toDate","setDate","getDate","getTime","orderBy","orderDirection","find","type_1","field_1","sort","current","s1","s2","reverse","total","Injectable","DatePipe","mapRequest","whereClause","pageNumber","externalFilter","customFilter","executeColumnNoChildren","_isGuid","startsWith","substring","endsWith","getFullYear","getMonth","forEach","columnChildren","flag","_h","children","_j","_k","_l","Number","isNaN","isDate","substr","executeColumnChildren","externalFilters","rawExternalFilter","from","to","addDays","_e","mapResponse","res","key","test","SdGrid","configuration","ref","deviceService","handlerLocal","handlerDotnet","translateService","loadingService","apiService","exportService","notifyService","editorVisiblePipe","isMobileOrTablet","displayKey","hiddenPaginate","inlineExternal","inlineColumn","quickFilters","pages","totalPage","isLoading","viewItems","fixedColumns","normalColumns","isCheckedAll","selectedItems","cellDefs","QueryList","cellDef","cellEditorDefs","cellEditorDef","cellFooterDefs","cellFooterDef","_numberOfFooterRows","footerRows","_paginator","selectedItem","_subscription","Subscription","rowHandler","click","onClickRow","dblClick","onDblClickRow","setOption","option","initConfiguration","initTranslate","command","hidden","sdGridConfig","initExternalFilter","resize","detectChanges","gridConfiguration","columnInline","quickFilterVisibility","translate","handler","handlerCustom","notify","warning","assign","title","childCommand","childColumn","reload","gridItems","currentPage","pageIndex","filter_1","getFilterInfo","method","queryString","keys","map","join","url","includes","response","_2","_z","post","_0","Array","isArray","results","_1","originItem","_setSelectedItems","onReloadCompleted","generateViewItems","generateEditorHandlers","$","gridBody","nativeElement","scrollTop","firstPage","handle","error_1","markForCheck","selectPage","updateFilter","param","isChecked","temporary","subInformation","blinker","onCheck","isCheckbox","checkable","columnSortable","clearFilter","initFilter","sdGridPopupFilter","onClearFilter","expandOrCollapse","gridItem","isOpened","lazyLoading","isLoaded","onLoad","subItems","alert","err_1","onCreate","addable","onAdd","splice","onUpdate","isModified","generateEditorHanlder","sdGridPopupEditor","open","onSave","saving","validate","message","err_2","onCancel","idx1","idx2","default","defaultFrom","defaultTo","onSearch","searchValue","onFilterConfigurationLoaded","selectedQuickFilter","quickFilter","code","f1","JSON","stringify","f2","parse","refreshExternalFilter","onSelectQuickFilter","updateConfiguration","getExportItems","filter_2","error_2","_3","_4","onExportByTemplate","params","start","exportItems","export","finally","stop","_m","mapping","excelConfig","_o","obj","trueValue","falseValue","data","values","text","valueField","displayField","exportByTemplate","filePath","fullPath","excelColumns","onEditorChange","onSelectPageSize","_y","_u","_t","_s","_x","_w","_v","_r","_q","_p","onCreateQuickFilter","ev","matSelect","close","onFilterPopup","onEditQuickFilter","onDeleteQuickFilter","isDesktop","defineProperty","paginator","add","page","subscribe","ngAfterViewInit","fixedHeaders","changes","pipe","startWith","setTimeout","toArray","left","outerWidth","css","merge","fixedBodies","fixedPerRow","sdCellDef","sdCellEditorDef","sdCellFooterDef","fill","ngOnDestroy","unsubscribe","reloadItem","id","blink","stopBlink","index","some","getItems","checkAll","height","style","window","innerHeight","top","getBoundingClientRect","bottom","hideFooter","setHeight","loadConfig","configResult","initDictionaryColumnValues","dictionary","icon","color","backgroundColor","trackById","errorMessage","Component","template","changeDetection","ChangeDetectionStrategy","OnPush","Inject","Optional","ChangeDetectorRef","DeviceDetectorService","HandlerLocal","HandlerDotnet","SdTranslateService","SdLoadingService","SdApiService","SdExportService","SdNotifyService","ViewChildren","ViewChild","static","ContentChildren","SdCellDefDirective","SdCellEditorDefDirective","SdCellFooterDevDirective","MatPaginator","SdDynamicItems","dynamicItems","SdGridConfig","settingService","sdChange","EventEmitter","_setting","_initDefault","storage","columnConfigs","originColumn","width","fixed","ngOnInit","init","emitOnChange","remove","modal","save","isSafeInteger","reset","moveColumnUp","temp","moveColumnDown","columnConfig","findIndex","emit","SdSettingService","Output","change","onAutocompleteChange","onSelectionChange","onUpdateFilter","check","SdGridPopupEditor","SdGridPopupExportExcel","prefix","newExcelConfig","extendColumns","excelConfigs","tabIndex","selectedExcelConfig","exportableColumns","selected","generateExcelColumns","columns_1","columns_1_1","e_2","description","initTemplate","fileName","sheets","exportOption","sheet","fields","generateTemplate","initDefaultTemplate","generateAndUploadTemplate","generateUploadTemplate","fullKey","uploadTemplate","validator","removable","downloadTemplate","download","removeTemplate","confirm","removeFile","idx","exportDefault","columns_2","columns_2_1","e_6","newTemplate","confirmWithInput","maxlength","onChangeRadio","matRadioChange","hash","loadConfiguration","filesInFolder","files","SdGridPopupFilter","keyPrefix","accept","clear","loadInlineFilter","newQuickFilter","maxQuickFilters","fixedColums","eFilter","_loadConfiguration","_6","selectedCode","onDetailQuickFilter","stopPropagation","preventDefault","popupQuickFilterDetail","onAcceptQuickFilter","onInlineChange","onAccept","filterOption","multiple","selectedField","onClear","selectedQuickFilterCode","encapsulation","ViewEncapsulation","None","SdGridPopupQuickFilterDetail","selectableFields","execute","group","onSelectField","onSelectFields","fromTitle","toTitle","externalFields","columnFields","SdGridSubInformation","CellDesktopClassNamePipe","rowData","isChildren","classNames","badge","CellMobileClassNamePipe","ColumnCommandFilterPipe","commands_1","commands_1_1","hiddenByItem","ColumnHtmlTemplatePipe","htmlTemplate","ColumnTitlePipe","dynamicTitle","ColumnValuesPipe","utilityService","hashKey","cache","arrayToObject","SdUtilityService","CommandDisabledPipe","CommandFilterPipe","e_1","CommandHidden","hiddenResult","childHidden","childHiddenByItem","CommandIconPipe","CommandTitlePipe","EditorDynamicItemPipe","previousResults","delay","dependOnField","previous","now","EditorSubInformationHandlerPipe","EditorValidatePipe","FilterMobilePipe","pure","MobileCommandFilterPipe","MobileViewHtmlTemplatePipe","ValueTransformPipe","decimalPipe","isNumber","DecimalPipe","EditorPopupVisiblePipe","SdGridImportExcel","control","gridColumns","ignoreImport","SdUploadExcel","NgModule","imports","CommonModule","FormsModule","ReactiveFormsModule","MatInputModule","MatFormFieldModule","MatPaginatorModule","MatTableModule","MatMenuModule","MatIconModule","MatButtonModule","MatTooltipModule","MatProgressSpinnerModule","MatChipsModule","MatRadioModule","MatSlideToggleModule","MatSelectModule","MatCheckboxModule","SdUploadExcelModule","SdFormModule","SdServiceModule","declarations","SdGridDesktopColumnEdit","SdGridDesktopColumnView","SdGridDesktopInlineFilter","SdGridMobileItemView","GridDesktopColumnChildrenViewComponent","SdSubHeaderDefDirective","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\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 { IHandlerServer } from './models/handler';\r\nimport { Observable } from 'rxjs';\r\nimport { SdGridFilterInfo } from './models/filter-info.model';\r\n\r\nexport declare type SdGridOption =\r\n GridLocalOption |\r\n GridDotnetOption |\r\n GridCustomOption;\r\n\r\nexport declare type SdGridCommand = GridCommandNoChildren | GridCommandWithChildren;\r\n\r\nexport declare type SdGridColumn =\r\n GridColumnText |\r\n GridColumnColor |\r\n GridColumnNumber |\r\n GridColumnBool |\r\n GridColumnDate |\r\n GridColumnDateTime |\r\n GridColumnTime |\r\n GridColumnValues |\r\n GridColumnRadio |\r\n GridColumnImage |\r\n GridColumnChildren;\r\n\r\nexport declare type SdGridExternalFilter =\r\n GridExternalFilterText |\r\n GridExternalFilterDate |\r\n GridExternalFilterDateRange |\r\n GridExternalFilterDateRangeFull |\r\n GridExternalFilterNumber |\r\n GridExternalFilterNumberRange |\r\n GridExternalFilterValues |\r\n GridExternalFilterRadio |\r\n GridExternalFilterBool |\r\n GridExternalFilterCustom;\r\n\r\nexport const defaultGridOption: SdGridOption = {\r\n type: undefined,\r\n items: [],\r\n filter: {\r\n type: 'inline',\r\n disabled: false\r\n },\r\n sortable: true,\r\n paginate: {\r\n pageSize: 50,\r\n pageCount: 5\r\n },\r\n commands: [],\r\n columns: []\r\n};\r\n\r\nexport interface SdGridBaseOption {\r\n height?: string;\r\n key?: string;\r\n filter?: GridBaseOptionFilter;\r\n checkable?: boolean;\r\n sortable?: boolean;\r\n numberable?: boolean;\r\n editor?: {\r\n type?: 'focus' | 'inline' | 'popup',\r\n addable?: boolean;\r\n editable?: boolean;\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n limit?: number;\r\n onAdd?: (rowData: any) => void,\r\n onEdit?: (rowData: any) => void,\r\n onSave?: (rowData: any) => void | Promise<void>,\r\n validate?: (rowData: any) => string | Promise<string>\r\n };\r\n paginate?: {\r\n pageSize?: number,\r\n pageCount?: number\r\n };\r\n export?: GridBaseOptionExport;\r\n translate?: boolean;\r\n hideFooter?: boolean;\r\n hideReload?: boolean;\r\n commands?: SdGridCommand[];\r\n columns: SdGridColumn[];\r\n subInformation?: SubOption;\r\n mobileOrTablet?: {\r\n useGridView?: boolean;\r\n htmlTemplate?: (rowData: any, columns?: SdGridColumn[]) => string;\r\n };\r\n // events\r\n onClickRow?: (rowData: any) => void;\r\n onDblClickRow?: (rowData: any) => void;\r\n onCheck?: (items: any[], rowData?: any) => void;\r\n onImportExcel?: (items: any[]) => void;\r\n onReloadCompleted?: (items: any[]) => Promise<void> | void;\r\n}\r\n\r\nexport interface GridBaseOptionExport {\r\n disabled?: boolean;\r\n fileName?: string;\r\n validator?: (fileName: string) => string;\r\n items?: (filterInfo: SdGridFilterInfo) => Promise<any[]>;\r\n mapping?: (items: any[], fileName?: string) => any[] | Promise<any[]>;\r\n columns?: SdGridColumn[];\r\n bigExport?: boolean;\r\n sheets?: {\r\n name: string,\r\n items: any[] | (() => Promise<any[]>),\r\n fields: string[]\r\n }[];\r\n}\r\n\r\nexport interface GridBaseOptionFilter {\r\n type?: 'inline' | 'popup';\r\n columnInline?: 'outside';\r\n disabled?: boolean;\r\n customFilter?: any | (() => any);\r\n externalFilters?: SdGridExternalFilter[];\r\n quickFilterVisibility?: 'inline' | 'popup' | 'none';\r\n multiple?: boolean;\r\n}\r\n\r\ninterface GridLocalOption extends SdGridBaseOption {\r\n type: 'local';\r\n items: any[] | (() => any[] | Promise<any[]>);\r\n}\r\n\r\ninterface GridDotnetOption extends SdGridBaseOption {\r\n type: 'dotnet';\r\n method?: 'POST' | 'GET';\r\n url: string;\r\n handler?: {\r\n beforeRequest: (filterInfo: SdGridFilterInfo) => Promise<SdGridFilterInfo>;\r\n afterResponse: (items: any[], total: number) => Promise<{ items: any[], total: number }>;\r\n };\r\n}\r\n\r\ninterface GridCustomOption extends SdGridBaseOption {\r\n type: 'custom';\r\n url: string;\r\n method?: 'POST' | 'GET';\r\n handlerCustom?: IHandlerServer;\r\n}\r\n\r\ninterface GridCommandBase {\r\n title?: string | ((rowData?: any) => string);\r\n translate?: boolean;\r\n disabled?: boolean | ((rowData?: any) => boolean);\r\n hidden?: boolean | (() => boolean);\r\n hiddenByItem?: ((rowData: any) => boolean) | ((rowData: any) => Promise<boolean>);\r\n}\r\n\r\nexport interface GridCommandNoChildren extends GridCommandBase {\r\n icon: string | ((rowData?: any) => string);\r\n fontSet?: 'material-icons' |\r\n 'material-icons-outlined' |\r\n 'material-icons-outlined' |\r\n 'material-icons-round' |\r\n 'material-icons-sharp';\r\n color?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning';\r\n click?: (rowData?: any) => void;\r\n}\r\n\r\nexport interface GridCommandWithChildren extends GridCommandBase {\r\n icon?: string | ((rowData?: any) => string);\r\n children?: GridCommandNoChildren[];\r\n}\r\n\r\ninterface GridBaseColumn {\r\n field: string;\r\n title: string;\r\n translate?: boolean;\r\n description?: string;\r\n width?: string;\r\n fixed?: boolean;\r\n format?: string;\r\n hidden?: boolean | (() => boolean);\r\n htmlTemplate?: (value: any, rowData?: any, isMobileOrTablet?: boolean) => string;\r\n transform?: (value: any, rowData?: any) => string;\r\n badge?: ((rowData?: any, value?: any) => 'PRIMARY' | 'SECONDARY' | 'INFO' | 'SUCCESS' | 'WARNING' | 'DANGER' | 'LIGHT' | 'DARK');\r\n click?: (value: any, rowData?: any) => void | Promise<void>;\r\n ignoreImport?: boolean;\r\n sortable?: boolean;\r\n align?: 'left' | 'center' | 'right';\r\n filter?: {\r\n disabled?: boolean;\r\n priority?: 'low';\r\n };\r\n}\r\n\r\nexport interface EditorHandler {\r\n [column: string]: {\r\n visible?: boolean | 'create' | 'update',\r\n items?: any[] | Observable<any[]>\r\n };\r\n}\r\n\r\nexport interface GridItem {\r\n blinker?: any;\r\n originItem?: any;\r\n temporary?: any;\r\n isChecked?: boolean;\r\n editingStatus?: 'create' | 'update';\r\n editorHandler?: EditorHandler & {\r\n disabled?: boolean;\r\n errorMessage?: string;\r\n saving?: boolean;\r\n };\r\n subInformation?: {\r\n isOpened?: boolean;\r\n isLoaded?: boolean;\r\n isLoading?: boolean;\r\n subItems?: any[];\r\n };\r\n [key: string]: any;\r\n}\r\n\r\nexport interface ColumnCommand {\r\n icon: string | ((rowData?: any) => string);\r\n title?: string | ((rowData?: any) => string);\r\n click: (rowData: GridItem) => void | Promise<void>;\r\n hiddenByItem?: ((rowData: any) => boolean) | ((rowData: any) => Promise<boolean>);\r\n}\r\n\r\ninterface GridColumnText extends GridBaseColumn {\r\n type: 'string';\r\n commands?: ColumnCommand[];\r\n editor?: {\r\n autocomplete?: boolean,\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any, value?: any, selected?: any | any[]) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n item?: DynamicEditorItem,\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string\r\n };\r\n}\r\n\r\ninterface GridColumnColor extends GridBaseColumn {\r\n type: 'color';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string\r\n };\r\n}\r\n\r\ninterface GridColumnNumber extends GridBaseColumn {\r\n type: 'number';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: number\r\n };\r\n}\r\n\r\ninterface GridColumnBool extends GridBaseColumn {\r\n type: 'bool';\r\n // properties for bool type\r\n trueValue?: string;\r\n falseValue?: string;\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n click?: (rowData: any) => void,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: boolean\r\n };\r\n}\r\n\r\ninterface GridColumnDate extends GridBaseColumn {\r\n type: 'date';\r\n timeDifferent?: 'second' | 'minute' | 'hour';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnDateTime extends GridBaseColumn {\r\n type: 'datetime';\r\n timeDifferent?: 'second' | 'minute' | 'hour' | 'day' | 'month';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnTime extends GridBaseColumn {\r\n type: 'time';\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n keyupEnter?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | Date\r\n };\r\n}\r\n\r\ninterface GridColumnValues extends GridBaseColumn {\r\n type: 'values';\r\n values: {\r\n value: string,\r\n text: string,\r\n icon?: string,\r\n color?: string,\r\n backgroundColor?: string\r\n }[];\r\n dictionary?: {\r\n [value: string]: {\r\n text: string,\r\n icon?: string,\r\n color?: string,\r\n backgroundColor?: string\r\n }\r\n };\r\n editor?: {\r\n autocomplete?: boolean,\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any, value?: any, selected?: any | any[]) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n item?: DynamicEditorItem,\r\n required?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | number\r\n };\r\n}\r\n\r\ninterface GridColumnRadio extends GridBaseColumn {\r\n type: 'radio';\r\n values?: any[];\r\n valueField: string;\r\n displayField: string;\r\n editor?: {\r\n required?: boolean;\r\n values?: {\r\n value: string,\r\n text: string,\r\n }[];\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean),\r\n defaultValue?: string | number\r\n };\r\n}\r\n\r\ninterface GridColumnImage extends GridBaseColumn {\r\n type: 'image';\r\n display: {\r\n height: number,\r\n width: number\r\n };\r\n editor?: {\r\n alwayDisplay?: boolean,\r\n change?: (rowData: any) => void,\r\n hidden?: boolean | ((rowData: any) => boolean),\r\n disabled?: boolean | ((rowData: any) => boolean)\r\n };\r\n}\r\n\r\nexport type GridColumnChild = (Exclude<SdGridColumn, GridColumnChildren>\r\n & { dynamicTitle?: (rowData: any) => string | Promise<string>, colSpan: 1 | 2 });\r\n\r\nexport interface GridColumnChildren extends GridBaseColumn {\r\n type: 'children';\r\n children: GridColumnChild[];\r\n}\r\n\r\ninterface GridBaseExternalFilter {\r\n field: string;\r\n priority?: 'low';\r\n disabled?: boolean;\r\n}\r\n\r\ninterface GridExternalFilterText extends GridBaseExternalFilter {\r\n type: 'string';\r\n title: string;\r\n default?: string;\r\n}\r\n\r\ninterface GridExternalFilterDate extends GridBaseExternalFilter {\r\n type: 'date';\r\n title: string;\r\n default?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterDateRange extends GridBaseExternalFilter {\r\n type: 'daterange';\r\n title: string;\r\n fromTitle: string;\r\n toTitle: string;\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterDateRangeFull extends GridBaseExternalFilter {\r\n type: 'daterangefull';\r\n title: string;\r\n enableTime?: boolean;\r\n minDate?: string | Date;\r\n maxDate?: string | Date;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterNumber extends GridBaseExternalFilter {\r\n type: 'number';\r\n title: string;\r\n default?: number;\r\n}\r\n\r\ninterface GridExternalFilterNumberRange extends GridBaseExternalFilter {\r\n type: 'numberrange';\r\n title: string;\r\n fromTitle: string;\r\n toTitle: string;\r\n defaultFrom?: Date | string;\r\n defaultTo?: Date | string;\r\n}\r\n\r\ninterface GridExternalFilterValues extends GridBaseExternalFilter {\r\n type: 'values';\r\n title: string;\r\n values: any[] | ((searchText?: string) => Promise<any[]>);\r\n valueField: string;\r\n displayField: string;\r\n selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';\r\n default?: string;\r\n}\r\n\r\ninterface GridExternalFilterRadio extends GridBaseExternalFilter {\r\n type: 'radio';\r\n title: string;\r\n values: any[];\r\n valueField: string;\r\n displayField: string;\r\n}\r\n\r\ninterface GridExternalFilterBool extends GridBaseExternalFilter {\r\n type: 'bool';\r\n title: string;\r\n trueValue?: string;\r\n falseValue?: string;\r\n}\r\n\r\ninterface GridExternalFilterCustom extends GridBaseExternalFilter {\r\n type: 'custom';\r\n title: string;\r\n onLoad?: (externalFilter: any, valueKey?: string, displayKey?: string) => { valueKey?: string, displayKey?: string };\r\n onClick: (externalFilter: any, valueKey?: string, displayKey?: string) => void;\r\n}\r\n\r\n// subInformation\r\nexport type SubOption = SubInformationDisabledLazyLoading | SubInformationEnabledLazyLoading;\r\ninterface BaseSubInformation {\r\n height?: string;\r\n commands?: SdGridCommand[];\r\n columns: (SdGridColumn & { title: string | ((rowData: any) => string) })[];\r\n}\r\ninterface SubInformationDisabledLazyLoading extends BaseSubInformation {\r\n lazyLoading: false;\r\n field: string;\r\n}\r\ninterface SubInformationEnabledLazyLoading extends BaseSubInformation {\r\n lazyLoading: true;\r\n onLoad: (rowData: any) => Promise<any[]>;\r\n}\r\n\r\nexport interface DynamicEditorItem {\r\n value: string;\r\n display: string;\r\n items: any[] | ((rowData?: any, value?: any) => any[] | Promise<any[]>);\r\n dependOnField?: string;\r\n}\r\n\r\n\r\nexport interface MobileConfiguration {\r\n htmlTemplate: (rowData?: any, columns?: SdGridColumn[]) => string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, SdGridOption, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorHandler'\r\n})\r\nexport class EditorHandlerPipe implements PipeTransform {\r\n transform(value: any, item: GridItem, gridOption: SdGridOption): boolean {\r\n const visible = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n let isDisabled = false;\r\n\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (column.editor) {\r\n isDisabled = typeof (column.editor.disabled) === 'function' ? column.editor.disabled(item) : column.editor.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n if (typeof (gridOption.editor?.disabled) === 'function') {\r\n isDisabled = gridOption.editor.disabled(item);\r\n } else {\r\n isDisabled = gridOption.editor?.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n // Hiển thị editor nếu dòng đó:\r\n // Đang được edit: editingStatus\r\n return item.editingStatus\r\n // Được thiết lập alwayDisplay\r\n || column.editor?.alwayDisplay\r\n // Editable có thuộc tính type inline\r\n || gridOption.editor?.type === 'inline';\r\n };\r\n item.editorHandler = item.editorHandler || {};\r\n for (const column of gridOption.columns) {\r\n item.editorHandler.disabled = false;\r\n item.editorHandler[column.field] = {};\r\n if (typeof (gridOption.editor) === 'object') {\r\n if (typeof (gridOption.editor.disabled) === 'function') {\r\n item.editorHandler.disabled = gridOption.editor.disabled(item);\r\n } else {\r\n item.editorHandler.disabled = gridOption.editor.disabled;\r\n }\r\n } else {\r\n item.editorHandler.disabled = false;\r\n }\r\n\r\n if (item.editorHandler.disabled) {\r\n item.editorHandler[column.field].visible = false;\r\n } else {\r\n item.editorHandler[column.field].visible = visible(column);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { IHandlerServer } from './handler';\r\n\r\nexport interface IGridConfiguration {\r\n filter?: {\r\n type?: 'inline' | 'popup',\r\n columnInline?: 'outside',\r\n quickFilterVisibility?: 'inline' | 'popup' | 'none'\r\n };\r\n style?: {\r\n bordered?: boolean;\r\n stripped?: boolean;\r\n };\r\n translate?: boolean;\r\n handlerCustom?: IHandlerServer;\r\n}\r\n\r\nexport const GRID_CONFIG = new InjectionToken<IGridConfiguration>('grid.configuration');\r\n","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdCellDef]'\r\n})\r\nexport class SdCellDefDirective {\r\n @Input() sdCellDef: 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: '[sdCellFooterDef]'\r\n})\r\nexport class SdCellFooterDevDirective {\r\n @Input() sdCellFooterDef: 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: '[sdCellEditorDef]'\r\n})\r\nexport class SdCellEditorDefDirective {\r\n @Input() sdCellEditorDef: string;\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { SdGridFilterInfo } from '../models/filter-info.model';\r\nimport { IHandlerLocal } from './handler';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Injectable()\r\nexport class HandlerLocal implements IHandlerLocal {\r\n constructor(private datePipe: DatePipe) { }\r\n filter = (localItems: any[], filterInfo: SdGridFilterInfo) => {\r\n const items = localItems.filter(item => {\r\n for (const column of filterInfo.columns) {\r\n const filterValue: string = (filterInfo.rawFilter[column.field] || '').toString().trim().toLowerCase();\r\n const columnValue: string = (item[column.field] || '').toString().trim().toLowerCase();\r\n if (filterValue) {\r\n if (!columnValue) {\r\n return false;\r\n }\r\n if (column.type === 'string') {\r\n if (columnValue.indexOf(filterValue) === -1) {\r\n return false;\r\n }\r\n } else if (column.type === 'values' || column.type === 'radio') {\r\n if (columnValue !== filterValue) {\r\n return false;\r\n }\r\n } else if (column.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 (column.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 (column.type === 'date' || column.type === 'datetime') {\r\n const date = this.datePipe.transform(filterValue, 'yyyy/MM/dd');\r\n const fromDate = new Date(date);\r\n const toDate = new Date(date);\r\n toDate.setDate(toDate.getDate() + 1);\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 return true;\r\n });\r\n // Sort\r\n if (filterInfo.orderBy && filterInfo.orderDirection) {\r\n const column = filterInfo.columns.find(e => e.field === filterInfo.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 (filterInfo.orderDirection === 'DESC') {\r\n items.reverse();\r\n }\r\n }\r\n }\r\n return {\r\n items,\r\n total: items.length\r\n };\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { SdGridFilterInfo } from '../models/filter-info.model';\r\nimport { IHandlerServer } from './handler';\r\nimport { SdGridColumn, GridColumnChildren } from '../grid.model';\r\n\r\n@Injectable()\r\nexport class HandlerDotnet implements IHandlerServer {\r\n mapRequest = (filterInfo: SdGridFilterInfo) => {\r\n const result = {\r\n whereClause: '1>0',\r\n pageSize: filterInfo.pageSize,\r\n pageNumber: filterInfo.pageNumber,\r\n orderBy: filterInfo.orderBy,\r\n orderDirection: filterInfo.orderDirection,\r\n filter: {},\r\n externalFilter: {}\r\n };\r\n if (filterInfo.customFilter) {\r\n // Nếu custom filter là string\r\n if (typeof (filterInfo.customFilter) === 'string') {\r\n result.whereClause += ` AND ${filterInfo.customFilter}`;\r\n } else if (typeof (filterInfo.customFilter) === 'function') {\r\n result.whereClause += ` AND ${filterInfo.customFilter()}`;\r\n }\r\n }\r\n const executeColumnNoChildren = (column: Exclude<SdGridColumn, GridColumnChildren>) => {\r\n if (!filterInfo.rawFilter[column.field] && filterInfo.rawFilter[column.field] !== 0) {\r\n return;\r\n }\r\n result.filter[column.field] = filterInfo.rawFilter[column.field];\r\n if (column.type === 'string') {\r\n const filterValue: string = (filterInfo.rawFilter[column.field] ?? '').toString();\r\n if (this.#isGuid(filterValue)) {\r\n result.whereClause += ` AND ${column.field} = GUID(\"${filterInfo.rawFilter[column.field]}\")`;\r\n } else if (filterValue.startsWith('!=')) {\r\n result.whereClause += ` AND ${column.field} != \"${filterValue.substring(2, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('=')) {\r\n result.whereClause += ` AND ${column.field} = \"${filterValue.substring(1, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('%')) {\r\n result.whereClause += ` AND ${column.field}.EndsWith(\"${filterValue.substring(1, filterValue.length)}\")`;\r\n } else if (filterValue.endsWith('%')) {\r\n result.whereClause += ` AND ${column.field}.StartsWith(\"${filterValue.substring(0, filterValue.length - 1)}\")`;\r\n } else {\r\n result.whereClause += ` AND ${column.field}.Contains(\"${filterValue}\")`;\r\n }\r\n } else if (column.type === 'number') {\r\n const value = +(filterInfo.rawFilter[column.field].replace('>=', '').replace('<=', '').replace('>', '').replace('<', '').trim());\r\n if (filterInfo.rawFilter[column.field].indexOf('>=') > -1) {\r\n result.whereClause += ` AND ${column.field} >= ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('<=') > -1) {\r\n result.whereClause += ` AND ${column.field} <= ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('>') > -1) {\r\n result.whereClause += ` AND ${column.field} > ${value}`;\r\n } else if (filterInfo.rawFilter[column.field].indexOf('<') > -1) {\r\n result.whereClause += ` AND ${column.field} < ${value}`;\r\n } else {\r\n result.whereClause += ` AND ${column.field} = ${value}`;\r\n }\r\n } else if (column.type === 'bool') {\r\n if (filterInfo.rawFilter[column.field] === '0' || filterInfo.rawFilter[column.field] === '1') {\r\n result.whereClause += ` AND ${column.field} = ${filterInfo.rawFilter[column.field] === '1' ? 'true' : 'false'}`;\r\n }\r\n } else if (column.type === 'values') {\r\n if (filterInfo.rawFilter[column.field]) {\r\n if (this.#isGuid(filterInfo.rawFilter[column.field])) {\r\n result.whereClause += ` AND ${column.field} = GUID(\"${filterInfo.rawFilter[column.field]}\")`;\r\n } else if (typeof (filterInfo.rawFilter[column.field]) === 'string') {\r\n result.whereClause += ` AND ${column.field} = \"${filterInfo.rawFilter[column.field]}\"`;\r\n } else {\r\n result.whereClause += ` AND ${column.field} = ${filterInfo.rawFilter[column.field]}`;\r\n }\r\n }\r\n } else if (column.type === 'radio') {\r\n if (filterInfo.rawFilter[column.field]) {\r\n result.whereClause += ` AND ${column.field} = \"${filterInfo.rawFilter[column.field]}\"`;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n // \"DateTime(yyyy,mm,dd,HH,mm,ss)\"\r\n // generate fromDate, toDate\r\n let date = new Date(filterInfo.rawFilter[column.field]);\r\n\r\n // From Date\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n result.whereClause += ` AND ${column.field} >= DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n\r\n // To Date\r\n date.setDate(date.getDate() + 1);\r\n result.whereClause += ` AND ${column.field} < DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n }\r\n };\r\n const executeColumnChildren = (columnChildren: GridColumnChildren) => {\r\n let flag = false;\r\n for (const column of columnChildren.children) {\r\n if (filterInfo.rawFilter[column.field] || filterInfo.rawFilter[column.field] === 0) {\r\n executeColumnNoChildren(column);\r\n flag = true;\r\n }\r\n }\r\n if (flag) {\r\n return;\r\n }\r\n if (!filterInfo.rawFilter[columnChildren.field]) {\r\n return;\r\n }\r\n result.filter[columnChildren.field] = filterInfo.rawFilter[columnChildren.field];\r\n let whereClause = '';\r\n const filterValue: string = (filterInfo.rawFilter[columnChildren.field] ?? '').toString().trim();\r\n for (const column of columnChildren.children) {\r\n if (column.type === 'string') {\r\n if (this.#isGuid(filterValue)) {\r\n whereClause += ` OR ${column.field} = GUID(\"${filterValue}\")`;\r\n } else if (filterValue.startsWith('!=')) {\r\n whereClause += ` OR ${column.field} != \"${filterValue.substring(2, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('=')) {\r\n whereClause += ` OR ${column.field} = \"${filterValue.substring(1, filterValue.length)}\"`;\r\n } else if (filterValue.startsWith('%')) {\r\n whereClause += ` OR ${column.field}.EndsWith(\"${filterValue.substring(1, filterValue.length)}\")`;\r\n } else if (filterValue.endsWith('%')) {\r\n whereClause += ` OR ${column.field}.StartsWith(\"${filterValue.substring(0, filterValue.length - 1)}\")`;\r\n } else {\r\n whereClause += ` OR ${column.field}.Contains(\"${filterValue}\")`;\r\n }\r\n } else if (column.type === 'number') {\r\n const value = +(filterValue.replace('>=', '').replace('<=', '').replace('>', '').replace('<', '').trim());\r\n if (!Number.isNaN(value)) {\r\n if (filterValue.indexOf('>=') > -1) {\r\n whereClause += ` OR ${column.field} >= ${value}`;\r\n } else if (filterValue.indexOf('<=') > -1) {\r\n whereClause += ` OR ${column.field} <= ${value}`;\r\n } else if (filterValue.indexOf('>') > -1) {\r\n whereClause += ` OR ${column.field} > ${value}`;\r\n } else if (filterValue.indexOf('<') > -1) {\r\n whereClause += ` OR ${column.field} < ${value}`;\r\n } else {\r\n whereClause += ` OR ${column.field} = ${value}`;\r\n }\r\n }\r\n } else if (column.type === 'bool') {\r\n if (filterValue === '0' || filterValue === '1') {\r\n whereClause += ` OR ${column.field} = ${filterValue === '1' ? 'true' : 'false'}`;\r\n }\r\n } else if (column.type === 'values') {\r\n if (this.#isGuid(filterValue)) {\r\n whereClause += ` OR ${column.field} = GUID(\"${filterValue}\")`;\r\n } if (typeof (filterInfo.rawFilter[column.field]) === 'string') {\r\n whereClause += ` OR ${column.field} = \"${filterValue}\"`;\r\n } else {\r\n whereClause += ` OR ${column.field} = ${filterValue}`;\r\n }\r\n } else if (column.type === 'radio') {\r\n if (filterValue) {\r\n whereClause += ` OR ${column.field} = \"${filterValue}\"`;\r\n }\r\n } else if (column.type === 'date' || column.type === 'datetime') {\r\n // \"DateTime(yyyy,mm,dd,HH,mm,ss)\"\r\n // generate fromDate, toDate\r\n if (Date.isDate(filterValue)) {\r\n let date = new Date(filterValue);\r\n\r\n // From Date\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n whereClause += ` OR (${column.field} >= DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()})`;\r\n\r\n // To Date\r\n date.setDate(date.getDate() + 1);\r\n whereClause += ` AND ${column.field} < DateTime(${date.getFullYear()},${date.getMonth() + 1},${date.getDate()}))`;\r\n }\r\n }\r\n }\r\n if (whereClause.trim().startsWith('OR')) {\r\n whereClause = whereClause.trim().substr(2).trim();\r\n result.whereClause += ` AND(${whereClause})`;\r\n }\r\n };\r\n filterInfo.columns.forEach(column => {\r\n if (column.type !== 'children') {\r\n executeColumnNoChildren(column);\r\n } else {\r\n executeColumnChildren(column);\r\n }\r\n });\r\n filterInfo.externalFilters?.forEach(externalFilter => {\r\n const { field, type } = externalFilter;\r\n if (type === 'daterangefull') {\r\n result.externalFilter[field] = filterInfo.rawExternalFilter?.[field];\r\n if (result.externalFilter[field]?.from && result.externalFilter[field]?.to) {\r\n const fromDate = new Date(result.externalFilter[field]?.from);\r\n const toDate = Date.addDays(result.externalFilter[field]?.to, 1);\r\n // tslint:disable-next-line: max-line-length\r\n result.whereClause += ` AND ${field} >= DateTime(${fromDate.getFullYear()},${fromDate.getMonth() + 1},${fromDate.getDate()})`;\r\n result.whereClause += ` AND ${field} < DateTime(${toDate.getFullYear()},${toDate.getMonth() + 1},${toDate.getDate()})`;\r\n }\r\n return;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n mapResponse = (res: any) => {\r\n const { items, total } = res;\r\n return {\r\n items,\r\n total\r\n };\r\n }\r\n\r\n #isGuid = (key: string): boolean => {\r\n const regex = /[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}/i;\r\n return regex.test(key);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n ElementRef,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n ViewChildren,\r\n QueryList,\r\n AfterViewInit,\r\n OnDestroy,\r\n Inject,\r\n Optional,\r\n ContentChildren\r\n} from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport $ from 'jquery';\r\n\r\nimport {\r\n SdApiService\r\n} from '@sd-angular/core/api';\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\n\r\nimport { SdGridOption, defaultGridOption, GridItem, SdGridColumn, SdGridExternalFilter } from './grid.model';\r\n\r\nimport { ConfigResult } from './components/grid-config/grid-config.model';\r\nimport { SdGridConfig } from './components/grid-config/grid-config.component';\r\nimport { EditorHandlerPipe } from './pipes/editor-handler.pipe';\r\nimport { SdGridPopupEditor } from './components/grid-popup-editor/grid-popup-editor.component';\r\nimport { SdGridPopupFilter } from './components/grid-popup-filter/grid-popup-filter.component';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { SdGridPopupExportExcel } from './components/grid-popup-export-excel/grid-popup-export-excel.component';\r\nimport { QuickFilter, FilterConfiguration } from './components/grid-popup-filter/grid-popup-filter.model';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { SdGridFilterInfo } from './models/filter-info.model';\r\n\r\nimport { IGridConfiguration, GRID_CONFIG } from './models/grid-configuration.model';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { SdCellDefDirective } from './directives/cell-def.directive';\r\nimport { SdCellFooterDevDirective } from './directives/cell-footer-def.directive';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdCellEditorDefDirective } from './directives/cell-editor-def.directive';\r\nimport { IHandlerServer, IHandlerLocal } from './models/handler';\r\nimport { HandlerLocal } from './models/handler-local';\r\nimport { HandlerDotnet } from './models/handler-dotnet';\r\nimport { SdGridImportExcel } from './components/grid-import-excel/grid-import-excel.component';\r\nimport { SdExportService } from '@sd-angular/core/export';\r\n\r\n\r\n@Component({\r\n selector: 'sd-grid',\r\n templateUrl: './grid.component.html',\r\n styleUrls: ['./grid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGrid implements AfterViewInit, OnDestroy {\r\n private handler: IHandlerServer | IHandlerLocal;\r\n isMobileOrTablet = false;\r\n displayKey = 'SDCUSTOM';\r\n gridOption: SdGridOption;\r\n orderBy: string;\r\n orderDirection: 'ASC' | 'DESC';\r\n localItems: GridItem[] = [];\r\n items: GridItem[] = [];\r\n total: number;\r\n filter: {\r\n [key: string]: any\r\n } = {};\r\n externalFilter: {\r\n [key: string]: any\r\n } = {};\r\n hiddenPaginate = false;\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n quickFilters: QuickFilter[] = [];\r\n selectedQuickFilter: string;\r\n // Paginate\r\n pages = [1];\r\n pageCount = 5;\r\n totalPage = 1;\r\n\r\n // Loading\r\n isLoading = false;\r\n\r\n viewItems: GridItem[] = [];\r\n sumarize: string;\r\n\r\n fixedColumns: SdGridColumn[] = [];\r\n normalColumns: SdGridColumn[] = [];\r\n columns: SdGridColumn[] = [];\r\n\r\n isCheckedAll = false;\r\n selectedItems: any[] = [];\r\n\r\n @ViewChildren('fixedHeader') private fixedHeaders: QueryList<ElementRef>;\r\n @ViewChildren('fixedBody') private fixedBodies: QueryList<ElementRef>;\r\n\r\n @ViewChild('fixedGridContainer') fixedGridContainer: ElementRef;\r\n @ViewChild('gridFixedBody') gridFixedBody: ElementRef;\r\n\r\n @ViewChild('gridContainer') gridContainer: ElementRef;\r\n @ViewChild('gridHeader') gridHeader: ElementRef;\r\n @ViewChild('gridBody') gridBody: ElementRef;\r\n\r\n @ViewChild('sdGridConfig', { static: true }) sdGridConfig: SdGridConfig;\r\n @ViewChild('sdGridPopupEditor') sdGridPopupEditor: SdGridPopupEditor;\r\n\r\n @ViewChild('sdGridPopupFilter') sdGridPopupFilter: SdGridPopupFilter;\r\n @ViewChild('matSelect') matSelect: MatSelect;\r\n\r\n @ViewChild('sdGridPopupExportExcel') sdGridPopupExportExcel: SdGridPopupExportExcel;\r\n @ViewChild('sdGridImportExcel') sdGridImportExcel: SdGridImportExcel;\r\n\r\n @ContentChildren(SdCellDefDirective) cellDefs = new QueryList<SdCellDefDirective>();\r\n cellDef: {\r\n [column: string]: SdCellDefDirective\r\n } = {};\r\n\r\n @ContentChildren(SdCellEditorDefDirective) cellEditorDefs = new QueryList<SdCellEditorDefDirective>();\r\n cellEditorDef: {\r\n [column: string]: SdCellEditorDefDirective\r\n } = {};\r\n\r\n @ContentChildren(SdCellFooterDevDirective) cellFooterDefs = new QueryList<SdCellFooterDevDirective>();\r\n cellFooterDef: {\r\n [column: string]: SdCellFooterDevDirective[];\r\n } = {};\r\n #numberOfFooterRows = 0;\r\n footerRows: number[] = [];\r\n\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.subscribe(this.selectPage));\r\n }\r\n }\r\n\r\n @Input() set option(value: SdGridOption) {\r\n this.setOption(value);\r\n }\r\n selectedItem: any = null;\r\n #subscription = new Subscription();\r\n rowHandler = {\r\n click: (item: any) => {\r\n this.selectedItem = item;\r\n if (this.gridOption.onClickRow) {\r\n this.gridOption.onClickRow(item);\r\n }\r\n },\r\n dblClick: (item: any) => {\r\n this.selectedItem = item;\r\n if (this.gridOption.onDblClickRow) {\r\n this.gridOption.onDblClickRow(item);\r\n }\r\n }\r\n };\r\n\r\n private setOption = (option: SdGridOption) => {\r\n option = this.initConfiguration(option);\r\n option = this.initTranslate(option);\r\n delete this.gridOption;\r\n this.gridOption = option;\r\n // Loại bỏ những command bị ẩn\r\n this.gridOption.commands = this.gridOption.commands.filter(command => {\r\n const hidden = command.hidden;\r\n if (hidden !== undefined) {\r\n if (typeof (hidden) === 'boolean') {\r\n return !hidden;\r\n } else if (typeof (hidden) === 'function') {\r\n return !hidden();\r\n }\r\n } else {\r\n return true;\r\n }\r\n });\r\n this.sdGridConfig.setOption({\r\n key: option.key,\r\n pageSize: this.gridOption.paginate.pageSize,\r\n columns: this.gridOption.columns\r\n });\r\n this.initExternalFilter();\r\n this.resize();\r\n this.detectChanges();\r\n }\r\n\r\n private initConfiguration = (option: SdGridOption) => {\r\n const gridConfiguration = this.configuration;\r\n // Filter\r\n if (!option.filter?.type && gridConfiguration?.filter?.type) {\r\n if (!option.filter) {\r\n option.filter = {\r\n type: gridConfiguration.filter.type\r\n };\r\n } else {\r\n option.filter.type = gridConfiguration.filter.type;\r\n }\r\n }\r\n if (!option.filter?.columnInline && gridConfiguration?.filter?.columnInline) {\r\n if (!option.filter) {\r\n option.filter = {\r\n columnInline: gridConfiguration.filter.columnInline\r\n };\r\n } else {\r\n option.filter.columnInline = gridConfiguration.filter.columnInline;\r\n }\r\n }\r\n if (!option.filter?.quickFilterVisibility && gridConfiguration?.filter?.quickFilterVisibility) {\r\n if (!option.filter) {\r\n option.filter = {\r\n quickFilterVisibility: gridConfiguration.filter.quickFilterVisibility\r\n };\r\n } else {\r\n option.filter.quickFilterVisibility = gridConfiguration.filter.quickFilterVisibility;\r\n }\r\n }\r\n // Translate\r\n option.translate = option.translate ?? gridConfiguration?.translate;\r\n switch (option.type) {\r\n case 'local':\r\n this.handler = this.handlerLocal;\r\n break;\r\n case 'dotnet':\r\n this.handler = this.handlerDotnet;\r\n break;\r\n case 'custom':\r\n this.handler = option.handlerCustom || gridConfiguration?.handlerCustom;\r\n if (!this.handler) {\r\n this.notifyService.notify.warning(`Handler custom was not found`);\r\n return;\r\n }\r\n break;\r\n }\r\n return { ...defaultGridOption, ...option };\r\n }\r\n\r\n private initTranslate = (option: SdGridOption) => {\r\n const { translate } = this.translateService;\r\n option.commands?.forEach(command => {\r\n if (!option.translate) {\r\n return;\r\n }\r\n if (typeof (command.title) === 'string') {\r\n command.title = translate(command.title);\r\n }\r\n if ('children' in command) {\r\n command.children?.forEach(childCommand => {\r\n if (typeof (childCommand.title) === 'string') {\r\n childCommand.title = translate(childCommand.title);\r\n }\r\n });\r\n }\r\n });\r\n option.columns?.forEach(column => {\r\n if (column.translate === false) {\r\n return;\r\n }\r\n if (option.translate || column.translate) {\r\n column.title = translate(column.title);\r\n }\r\n if (column.type === 'children') {\r\n column?.children?.forEach(childColumn => {\r\n if (childColumn.translate === false) {\r\n return;\r\n }\r\n if (option.translate || childColumn.translate) {\r\n childColumn.title = translate(childColumn.title);\r\n }\r\n });\r\n }\r\n });\r\n option.filter?.externalFilters?.forEach(externalFilter => {\r\n if (option.translate) {\r\n externalFilter.title = translate(externalFilter.title);\r\n }\r\n });\r\n return option;\r\n }\r\n\r\n constructor(\r\n @Inject(GRID_CONFIG) @Optional() public configuration: IGridConfiguration,\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n private handlerLocal: HandlerLocal,\r\n private handlerDotnet: HandlerDotnet,\r\n private translateService: SdTranslateService,\r\n private datePipe: DatePipe,\r\n private loadingService: SdLoadingService,\r\n private apiService: SdApiService,\r\n private exportService: SdExportService,\r\n private notifyService: SdNotifyService,\r\n private editorVisiblePipe: EditorHandlerPipe) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n // this.ref.detach();\r\n // setInterval(() => {\r\n // this.ref.markForCheck();\r\n // }, 1000);\r\n // ref.detach();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.fixedHeaders.changes.pipe(startWith([])).subscribe(() => {\r\n setTimeout(() => {\r\n const fixedHeaders = this.fixedHeaders.toArray();\r\n if (fixedHeaders.length > 0) {\r\n let left = $(fixedHeaders[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedHeaders.length; i++) {\r\n $(fixedHeaders[i].nativeElement).css({ left });\r\n left += $(fixedHeaders[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n }, 100);\r\n }));\r\n this.#subscription.add(merge(this.fixedBodies.changes, this.cellFooterDefs.changes).pipe(startWith({})).subscribe(() => {\r\n setTimeout(() => {\r\n const fixedBodies = this.fixedBodies.toArray();\r\n if (fixedBodies.length > 0) {\r\n const fixedPerRow = this.fixedBodies.length / (this.viewItems.length + this.#numberOfFooterRows);\r\n let left = $(fixedBodies[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedBodies.length; i++) {\r\n if (i % fixedPerRow === 0) {\r\n left = 0;\r\n }\r\n $(fixedBodies[i].nativeElement).css({ left });\r\n left += $(fixedBodies[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n const fixedHeaders = this.fixedHeaders.toArray();\r\n if (fixedHeaders.length > 0) {\r\n let left = $(fixedHeaders[0].nativeElement).outerWidth(true);\r\n for (let i = 1; i < fixedHeaders.length; i++) {\r\n $(fixedHeaders[i].nativeElement).css({ left });\r\n left += $(fixedHeaders[i].nativeElement).outerWidth(true);\r\n }\r\n }\r\n }, 100);\r\n }));\r\n this.#subscription.add(this.cellDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellDef = {};\r\n for (const cellDef of this.cellDefs) {\r\n if (cellDef.sdCellDef) {\r\n this.cellDef[cellDef.sdCellDef] = cellDef;\r\n }\r\n }\r\n }));\r\n this.#subscription.add(this.cellEditorDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellEditorDef = {};\r\n for (const cellEditorDef of this.cellEditorDefs) {\r\n if (cellEditorDef.sdCellEditorDef) {\r\n this.cellEditorDef[cellEditorDef.sdCellEditorDef] = cellEditorDef;\r\n }\r\n }\r\n }));\r\n this.#subscription.add(this.cellFooterDefs.changes.pipe(startWith([])).subscribe(() => {\r\n this.cellFooterDef = {};\r\n this.#numberOfFooterRows = 0;\r\n for (const cellFooterDef of this.cellFooterDefs) {\r\n if (cellFooterDef.sdCellFooterDef) {\r\n if (!this.cellFooterDef[cellFooterDef.sdCellFooterDef]) {\r\n this.cellFooterDef[cellFooterDef.sdCellFooterDef] = [];\r\n }\r\n this.cellFooterDef[cellFooterDef.sdCellFooterDef].push(cellFooterDef);\r\n if (this.cellFooterDef[cellFooterDef.sdCellFooterDef].length > this.#numberOfFooterRows) {\r\n this.#numberOfFooterRows = this.cellFooterDef[cellFooterDef.sdCellFooterDef].length;\r\n }\r\n }\r\n }\r\n this.footerRows = Array(this.#numberOfFooterRows).fill(0).map((v, i) => i);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = async (gridItems?: any[]) => {\r\n if (this.isLoading) {\r\n return;\r\n }\r\n this.isLoading = true;\r\n const currentPage = (this.#paginator?.pageIndex || 0) + 1;\r\n const pageSize = this.#paginator?.pageSize || 50;\r\n try {\r\n if (this.gridOption.type !== 'local') {\r\n const handler = this.handler as IHandlerServer;\r\n const filter = handler.mapRequest(this.getFilterInfo(currentPage, pageSize));\r\n if (this.gridOption.method === 'GET') {\r\n const queryString = Object.keys(filter).filter(key => filter[key] !== null && filter[key] !== undefined)\r\n .map(key => key + '=' + filter[key]).join('&');\r\n const url = this.gridOption.url.includes('?') ? `${this.gridOption.url}&${queryString}` : `${this.gridOption.url}?${queryString}`;\r\n const response = await this.apiService.get(url);\r\n const { items, total } = handler.mapResponse(response);\r\n this.items = items;\r\n this.total = total;\r\n } else {\r\n const response = await this.apiService.post(this.gridOption.url, filter);\r\n const { items, total } = handler.mapResponse(response);\r\n this.items = items;\r\n this.total = total;\r\n }\r\n } else {\r\n const handler = this.handler as IHandlerLocal;\r\n if (typeof (this.gridOption.items) === 'function') {\r\n if (Array.isArray(gridItems)) {\r\n this.localItems = gridItems;\r\n } else {\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 } else {\r\n this.gridOption.items = gridItems || this.gridOption.items;\r\n this.localItems = this.gridOption.items;\r\n }\r\n const response = handler.filter(this.localItems, {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber: currentPage,\r\n pageSize\r\n });\r\n this.items = response.items;\r\n this.total = response.total;\r\n \r\n }\r\n this.items.forEach(item => item.originItem = { ...item });\r\n this.isCheckedAll = false;\r\n this.#setSelectedItems();\r\n await this.gridOption?.onReloadCompleted?.(this.items);\r\n this.generateViewItems();\r\n this.generateEditorHandlers();\r\n $(this.gridBody.nativeElement).scrollTop(0);\r\n if (currentPage > 1 && !this.viewItems?.length) {\r\n this.#paginator.firstPage();\r\n }\r\n this.detectChanges();\r\n } catch (error) {\r\n this.notifyService.handle.error(error);\r\n } finally {\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n reloadItem(data: { [id: string]: any }) {\r\n Object.keys(data).forEach(id => {\r\n const item = this.items.find(e => !!e.id && e.id === id);\r\n if (item) {\r\n this.gridOption.columns.forEach(column => {\r\n if (item[column.field] !== undefined && data[id][column.field] !== undefined && item[column.field] !== data[id][column.field]) {\r\n this.blink(item, column.field);\r\n }\r\n });\r\n Object.assign(item, data[id]);\r\n this.generateEditorHanlder(item);\r\n this.stopBlink();\r\n }\r\n });\r\n }\r\n\r\n private blink(item: GridItem, field: string) {\r\n item.blinker = item.blinker || {};\r\n item.blinker[field] = true;\r\n }\r\n private stopBlink() {\r\n setTimeout(() => {\r\n this.viewItems.forEach(item => {\r\n item.blinker = {};\r\n });\r\n }, 1500);\r\n }\r\n\r\n detectChanges = () => {\r\n this.ref.detectChanges();\r\n this.ref.markForCheck();\r\n }\r\n\r\n private generateViewItems() {\r\n const currentPage = (this.#paginator?.pageIndex || 0) + 1;\r\n const pageSize = this.#paginator?.pageSize || 50;\r\n delete this.viewItems;\r\n if (this.gridOption.type === 'local') {\r\n this.viewItems = this.items.filter((item, index) => {\r\n return index >= (currentPage - 1) * pageSize\r\n && index < currentPage * pageSize;\r\n });\r\n } else {\r\n this.viewItems = this.items;\r\n }\r\n this.viewItems.forEach(item => {\r\n item.blinker = item.blinker || {};\r\n item.subInformation = item.subInformation || {};\r\n });\r\n }\r\n\r\n get editedItems() {\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 { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...result } = item;\r\n return result;\r\n });\r\n }\r\n\r\n selectPage = () => {\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n\r\n updateFilter = (param?: { filter: any, externalFilter: any }) => {\r\n this.filter = param?.filter || this.filter;\r\n this.externalFilter = param?.externalFilter || this.externalFilter;\r\n this.#paginator.pageIndex = 0;\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n\r\n getItems() {\r\n return this.items;\r\n }\r\n\r\n //#region Checkable\r\n\r\n #setSelectedItems = () => {\r\n this.selectedItems = this.items.filter(item => item.isChecked)\r\n .map(item => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...result } = item;\r\n return result;\r\n });\r\n }\r\n\r\n onCheck = (item: GridItem, isCheckbox?: boolean) => {\r\n if (!this.gridOption.checkable) {\r\n return;\r\n }\r\n if (!isCheckbox) {\r\n item.isChecked = !item.isChecked;\r\n }\r\n this.isCheckedAll = this.items.length === this.items.filter(e => e.isChecked).length;\r\n this.gridOption.onCheck?.(this.items.filter(e => e.isChecked), item);\r\n this.#setSelectedItems();\r\n }\r\n\r\n checkAll(isCheckedAll: boolean) {\r\n this.isCheckedAll = isCheckedAll;\r\n this.items.forEach(item => item.isChecked = this.isCheckedAll);\r\n if (this.gridOption.onCheck) {\r\n this.gridOption.onCheck(this.items.filter(item => item.isChecked));\r\n }\r\n this.#setSelectedItems();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Sort\r\n sort = (column: SdGridColumn) => {\r\n if (column.type === 'children' || column.type === 'image') {\r\n return;\r\n }\r\n const sortable = this.gridOption.sortable ?? true;\r\n const columnSortable = column.sortable ?? true;\r\n if (!sortable || !columnSortable) {\r\n return;\r\n }\r\n if (this.orderBy === column.field) {\r\n this.orderDirection = this.orderDirection === 'ASC' ? 'DESC' : 'ASC';\r\n } else {\r\n this.orderBy = column.field;\r\n this.orderDirection = 'ASC';\r\n }\r\n if (this.gridOption.type === 'local') {\r\n this.reload(this.localItems);\r\n } else {\r\n this.reload();\r\n }\r\n }\r\n //#endregion\r\n\r\n // #region Resize Grid\r\n private resize() {\r\n this.detectChanges();\r\n if (this.gridOption.height) {\r\n this.gridBody.nativeElement.style.height = this.gridOption.height;\r\n } else {\r\n this.gridBody.nativeElement.style.height = `${window.innerHeight - 300}px`;\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 0);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 200);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 500);\r\n setTimeout(() => {\r\n // Lấy offset top để điều chỉnh kích thước Grid vừa với màn hình\r\n const top = this.gridBody.nativeElement.getBoundingClientRect().top;\r\n // const top = $(this.gridBody.nativeElement).offset().top;\r\n const bottom = this.gridOption.hideFooter ? 0 : (this.isMobileOrTablet ? 45 : 55);\r\n const height = window.innerHeight - top - bottom;\r\n this.gridBody.nativeElement.style.height = `${height}px`;\r\n }, 1000);\r\n }\r\n }\r\n\r\n setHeight(height?: string) {\r\n this.gridOption.height = height;\r\n this.resize();\r\n }\r\n\r\n // #endregion\r\n\r\n //#region Import, Export, Config\r\n\r\n loadConfig(configResult: ConfigResult) {\r\n this.gridOption.paginate.pageSize = configResult.pageSize;\r\n this.gridOption.columns = configResult.columns;\r\n this.fixedColumns = configResult.fixedColumns;\r\n this.normalColumns = configResult.normalColumns;\r\n this.columns = [...this.fixedColumns, ...this.normalColumns];\r\n this.initFilter();\r\n this.initDictionaryColumnValues();\r\n this.reload();\r\n }\r\n\r\n private initFilter() {\r\n this.gridOption.columns.forEach(column => {\r\n // Gán giá trị filter mặc định cho từng cột\r\n this.filter[column.field] = this.filter[column.field] ?? '';\r\n });\r\n }\r\n\r\n private initDictionaryColumnValues() {\r\n this.gridOption.columns.forEach(column => {\r\n if (column.type === 'values') {\r\n column.dictionary = {};\r\n if (column.values) {\r\n column.values.forEach(e => {\r\n column.dictionary[e.value.toString()] = {\r\n text: e.text,\r\n icon: e.icon,\r\n color: e.color,\r\n backgroundColor: e.backgroundColor\r\n };\r\n });\r\n }\r\n }\r\n if (column.type === 'children') {\r\n column.children.forEach(childColumn => {\r\n if (childColumn.type === 'values') {\r\n childColumn.dictionary = {};\r\n if (childColumn.values) {\r\n childColumn.values.forEach(e => {\r\n childColumn.dictionary[e.value.toString()] = {\r\n text: e.text,\r\n icon: e.icon,\r\n color: e.color,\r\n backgroundColor: e.backgroundColor\r\n };\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n //#endregion\r\n\r\n private generateEditorHandlers() {\r\n this.viewItems.forEach(item => {\r\n this.generateEditorHanlder(item);\r\n });\r\n }\r\n\r\n private generateEditorHanlder(item: GridItem) {\r\n // item.editorHandler = item.editorHandler || {};\r\n this.editorVisiblePipe.transform(null, item, this.gridOption);\r\n }\r\n trackById(index, item) {\r\n return item.id;\r\n }\r\n\r\n get isFiltering() {\r\n return Object.values(this.filter).some(value => !!value);\r\n }\r\n\r\n onFilterPopup() {\r\n const f1 = JSON.stringify(this.filter);\r\n const f2 = JSON.stringify(this.externalFilter);\r\n const filter = JSON.parse(f1);\r\n const externalFilter = JSON.parse(f2);\r\n this.sdGridPopupFilter.open(this.fixedColumns, this.normalColumns, filter, externalFilter, this.gridOption.filter?.externalFilters);\r\n }\r\n\r\n clearFilter = () => {\r\n this.filter = {};\r\n this.externalFilter = {};\r\n this.initFilter();\r\n this.initExternalFilter();\r\n if (this.sdGridPopupFilter) {\r\n this.sdGridPopupFilter.filter = this.filter;\r\n this.sdGridPopupFilter.externalFilter = this.externalFilter;\r\n }\r\n }\r\n\r\n onClearFilter = () => {\r\n this.clearFilter();\r\n this.reload();\r\n }\r\n\r\n expandOrCollapse = async (gridItem: GridItem) => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n ...item } = gridItem;\r\n if (!this.gridOption.subInformation) {\r\n return;\r\n }\r\n if (gridItem.subInformation?.isOpened) {\r\n gridItem.subInformation.isOpened = false;\r\n return;\r\n }\r\n if (this.gridOption.subInformation.lazyLoading && !gridItem.subInformation?.isLoaded) {\r\n gridItem.subInformation.isLoading = true;\r\n try {\r\n gridItem.subInformation.subItems = await this.gridOption.subInformation.onLoad(item);\r\n if (!Array.isArray(gridItem.subInformation.subItems)) {\r\n this.notifyService.alert.warning(`Data is not an array`);\r\n gridItem.subInformation.subItems = [];\r\n }\r\n gridItem.subInformation.isLoading = false;\r\n gridItem.subInformation.isLoaded = true;\r\n gridItem.subInformation.isOpened = true;\r\n this.ref.detectChanges();\r\n } catch (err) {\r\n this.notifyService.handle.error(err);\r\n gridItem.subInformation.isLoading = false;\r\n this.ref.detectChanges();\r\n }\r\n return;\r\n }\r\n if (this.gridOption.subInformation.lazyLoading === false && !gridItem.subInformation.isLoaded) {\r\n gridItem.subInformation.subItems = gridItem[this.gridOption.subInformation.field];\r\n if (!Array.isArray(gridItem.subInformation.subItems)) {\r\n this.notifyService.alert.warning(`Data is not an array`);\r\n gridItem.subInformation.subItems = [];\r\n }\r\n gridItem.subInformation.isLoaded = true;\r\n gridItem.subInformation.isOpened = true;\r\n return;\r\n }\r\n gridItem.subInformation.isOpened = true;\r\n this.ref.detectChanges();\r\n }\r\n //#region Editable\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: GridItem = {};\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 editor.onAdd?.(item);\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 (type === 'local') {\r\n this.items.splice(0, 0, item);\r\n }\r\n this.viewItems.splice(0, 0, item);\r\n }\r\n this.onUpdate(item, false);\r\n }\r\n onUpdate = (item: GridItem, isModified?: boolean) => {\r\n const { editor, columns } = this.gridOption;\r\n item.editingStatus = isModified ? 'update' : 'create';\r\n item.temporary = { ...item };\r\n this.generateEditorHanlder(item);\r\n if (editor.type === 'popup') {\r\n this.sdGridPopupEditor.open(item, columns, isModified);\r\n }\r\n this.ref.detectChanges();\r\n }\r\n onSave = async (item: GridItem) => {\r\n const { editor } = this.gridOption;\r\n try {\r\n item.editorHandler.saving = true;\r\n if (editor.validate) {\r\n const result = editor.validate(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.editingStatus === '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.editingStatus = undefined;\r\n this.generateEditorHanlder(item);\r\n } catch (err) {\r\n this.notifyService.notify.warning(err);\r\n } finally {\r\n item.editorHandler.saving = false;\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onCancel = (item: GridItem) => {\r\n const { editor } = this.gridOption;\r\n if (editor.type === 'inline') {\r\n if (this.gridOption.type === 'local') {\r\n const idx1 = this.items.indexOf(item);\r\n this.items.splice(idx1, 1);\r\n }\r\n const idx2 = this.viewItems.indexOf(item);\r\n this.viewItems.splice(idx2, 1);\r\n return;\r\n }\r\n if (item.editingStatus === 'create') {\r\n if (editor.type !== 'popup') {\r\n if (this.gridOption.type === 'local') {\r\n this.items.splice(0, 1);\r\n }\r\n this.viewItems.splice(0, 1);\r\n }\r\n } else {\r\n Object.assign(item, item.temporary);\r\n item.editingStatus = undefined;\r\n this.generateEditorHanlder(item);\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n private initExternalFilter = () => {\r\n if (this.gridOption.filter?.externalFilters?.length) {\r\n this.gridOption.filter.externalFilters.forEach(externalFilter => {\r\n if (externalFilter.type === 'string') {\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? '';\r\n }\r\n return;\r\n }\r\n if (externalFilter.type === 'number') {\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? undefined;\r\n }\r\n return;\r\n }\r\n if (externalFilter.type === 'daterange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'numberrange') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'daterangefull') {\r\n this.externalFilter[externalFilter.field] = {\r\n from: externalFilter.defaultFrom ?? undefined,\r\n to: externalFilter.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (externalFilter.type === 'values') { // andn1\r\n if (externalFilter.default) {\r\n this.externalFilter[externalFilter.field] = externalFilter.default ?? '';\r\n }\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n onSearch = (searchValue: string, item: GridItem, column: SdGridColumn) => {\r\n item[column.field] = searchValue;\r\n }\r\n\r\n onFilterConfigurationLoaded = (param: FilterConfiguration) => {\r\n this.quickFilters = param.quickFilters || [];\r\n this.selectedQuickFilter = param.selectedQuickFilter || '';\r\n if (this.selectedQuickFilter) {\r\n const quickFilter = this.quickFilters.find(e => e.code === this.selectedQuickFilter);\r\n if (quickFilter) {\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.refreshExternalFilter(this.gridOption?.filter?.externalFilters, JSON.parse(f2));\r\n }\r\n }\r\n this.inlineExternal = param.inlineExternal || {};\r\n this.inlineColumn = param.inlineColumn || {};\r\n this.resize();\r\n }\r\n\r\n onSelectQuickFilter = (value: string) => {\r\n const quickFilter = this.quickFilters.find(e => e.code === value);\r\n if (quickFilter?.code) {\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.selectedQuickFilter = quickFilter?.code;\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.refreshExternalFilter(this.gridOption?.filter?.externalFilters, JSON.parse(f2));\r\n this.updateFilter();\r\n } else {\r\n this.selectedQuickFilter = '';\r\n this.onClearFilter();\r\n }\r\n this.sdGridPopupFilter?.updateConfiguration(this.selectedQuickFilter);\r\n }\r\n\r\n private getExportItems = async (pageNumber: number = 1, pageSize: number = 10000) => {\r\n if (this.isLoading) {\r\n return;\r\n }\r\n this.isLoading = true;\r\n try {\r\n if (this.gridOption.type !== 'local') {\r\n const handler = this.handler as IHandlerServer;\r\n const filter = handler.mapRequest(this.getFilterInfo(pageNumber, pageSize));\r\n if (this.gridOption.method === 'GET') {\r\n const queryString = Object.keys(filter).filter(key => filter[key] !== null && filter[key] !== undefined)\r\n .map(key => key + '=' + filter[key]).join('&');\r\n const url = this.gridOption.url.includes('?') ? `${this.gridOption.url}&${queryString}` : `${this.gridOption.url}?${queryString}`;\r\n const response = await this.apiService.get(url);\r\n return handler.mapResponse(response).items;\r\n } else {\r\n const response = await this.apiService.post(this.gridOption.url, filter);\r\n return handler.mapResponse(response).items;\r\n }\r\n } else {\r\n let localItems = [];\r\n const handler = this.handler as IHandlerLocal;\r\n if (typeof (this.gridOption.items) === 'function') {\r\n const results = this.gridOption.items();\r\n if (results instanceof Promise) {\r\n localItems = await results;\r\n } else {\r\n localItems = results;\r\n }\r\n } else {\r\n localItems = this.gridOption.items;\r\n }\r\n const response = handler.filter(localItems, {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber,\r\n pageSize\r\n });\r\n return response.items;\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 private getFilterInfo = (pageNumber: number, pageSize: number): SdGridFilterInfo => {\r\n for (const key of Object.keys(this.filter)) {\r\n if (typeof (this.filter[key]) === 'string') {\r\n this.filter[key] = this.filter[key].trim();\r\n }\r\n }\r\n for (const key of Object.keys(this.externalFilter)) {\r\n if (typeof (this.externalFilter[key]) === 'string') {\r\n this.externalFilter[key] = this.externalFilter[key].trim();\r\n }\r\n }\r\n return {\r\n customFilter: this.gridOption.filter.customFilter,\r\n rawFilter: this.filter,\r\n columns: this.gridOption.columns,\r\n rawExternalFilter: this.externalFilter,\r\n externalFilters: this.gridOption.filter?.externalFilters,\r\n orderBy: this.orderBy,\r\n orderDirection: this.orderDirection,\r\n pageNumber,\r\n pageSize\r\n };\r\n }\r\n\r\n onExportByTemplate = async (params: { excelConfig: any, excelColumns: any[] }) => {\r\n this.loadingService.start();\r\n let exportItems = [];\r\n if (this.gridOption.export?.items) {\r\n exportItems = await this.gridOption.export?.items(this.getFilterInfo(1, 10000)).finally(this.loadingService.stop);\r\n } else {\r\n exportItems = await this.getExportItems().finally(this.loadingService.stop);\r\n }\r\n if (this.gridOption.export?.mapping) {\r\n const results = this.gridOption.export.mapping(exportItems, params.excelConfig.name);\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 columns = [...this.gridOption.columns, ...(this.gridOption.export?.columns || [])];\r\n const items = exportItems.map(item => {\r\n const obj: any = {};\r\n const handle = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n column.children.forEach(handle);\r\n } else if (column.transform) {\r\n obj[column.field] = column.transform(item[column.field], item);\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' || column.type === 'color') {\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.trueValue || 'True';\r\n } else {\r\n obj[column.field] = column.falseValue || 'False';\r\n }\r\n } else if (column.type === 'date') {\r\n // Nếu là date thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy');\r\n } else if (column.type === 'datetime') {\r\n // Nếu là datetime thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'dd/MM/yyyy HH:mm:ss');\r\n } else if (column.type === 'time') {\r\n // Nếu là time thì convert theo đúng format\r\n const date = new Date(item[column.field]);\r\n obj[column.field] = this.datePipe.transform(date, 'HH:mm:ss');\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 const data = column.values.find(e => e.value === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data.text;\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n } else if (column.type === 'radio') {\r\n const data = column.values.find(e => e[column.valueField] === item[column.field]);\r\n if (data) {\r\n obj[column.field] = data[column.displayField];\r\n } else {\r\n obj[column.field] = item[column.field];\r\n }\r\n }\r\n };\r\n columns.forEach(handle);\r\n return obj;\r\n });\r\n this.exportService.exportByTemplate({\r\n filePath: params.excelConfig.fullPath,\r\n columns: params.excelColumns,\r\n items\r\n });\r\n }\r\n\r\n get invalidItems() {\r\n return this.items.filter(e => e.editorHandler?.errorMessage).map(e => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...item } = e;\r\n return {\r\n item,\r\n message: e.editorHandler.errorMessage\r\n };\r\n });\r\n }\r\n\r\n get gridItems() {\r\n return this.items.map(e => {\r\n const { temporary,\r\n originItem,\r\n editorHandler,\r\n editingStatus,\r\n isChecked,\r\n subInformation,\r\n blinker,\r\n ...item } = e;\r\n return item;\r\n });\r\n }\r\n\r\n onEditorChange = () => {\r\n this.ref.detectChanges();\r\n }\r\n onSelectPageSize = () => {\r\n this.reload();\r\n }\r\n private refreshExternalFilter = (externalFilters: SdGridExternalFilter[], externalFilter: any) => {\r\n externalFilter = externalFilter || {};\r\n externalFilters = externalFilters || [];\r\n externalFilters.forEach(e => {\r\n if (e.type === 'string') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? '';\r\n return;\r\n }\r\n if (e.type === 'number') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? undefined;\r\n return;\r\n }\r\n if (e.type === 'daterange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'numberrange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'daterangefull') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'values') { // andn1\r\n externalFilter[e.field] = (externalFilter[e.field] || e.default) ?? '';\r\n return;\r\n }\r\n });\r\n return externalFilter;\r\n }\r\n\r\n onCreateQuickFilter = (ev?: Event) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onCreateQuickFilter(ev);\r\n }\r\n\r\n onEditQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onEditQuickFilter(ev, quickFilter);\r\n }\r\n\r\n onDeleteQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n this.matSelect?.close();\r\n this.onFilterPopup();\r\n this.sdGridPopupFilter?.close();\r\n this.sdGridPopupFilter?.onDeleteQuickFilter(ev, quickFilter);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n@Pipe({\r\n name: 'sdDynamicItems'\r\n})\r\nexport class SdDynamicItems implements PipeTransform {\r\n transform(value: any, dynamicItems: (value: any) => Promise<any[]>) {\r\n return dynamicItems;\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\nimport { ConfigOption, ConfigResult, ConfigStorage } from './grid-config.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\n\r\nimport {\r\n SdSetting,\r\n SdSettingService\r\n} from '@sd-angular/core/setting';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-config',\r\n templateUrl: './grid-config.component.html',\r\n styleUrls: ['./grid-config.component.scss']\r\n})\r\nexport class SdGridConfig implements OnInit {\r\n @ViewChild('modal') modal: SdModal;\r\n @Output() sdChange = new EventEmitter<ConfigResult>();\r\n\r\n option: ConfigOption;\r\n storage: ConfigStorage;\r\n #setting: SdSetting<ConfigStorage>;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private settingService: SdSettingService,\r\n private translateService: SdTranslateService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n async setOption(option: ConfigOption) {\r\n this.ref.detectChanges();\r\n this.option = option;\r\n if (this.option.key) {\r\n this.#setting = this.settingService.create<ConfigStorage>(this.option.key);\r\n } else {\r\n this.#setting = null;\r\n }\r\n await this.init();\r\n this.emitOnChange();\r\n }\r\n\r\n private async init() {\r\n if (this.#setting) {\r\n const storage: ConfigStorage = await this.#setting.get();\r\n try {\r\n if (!storage) {\r\n await this.#setting.remove();\r\n this.#initDefault();\r\n return;\r\n }\r\n this.storage = storage;\r\n\r\n // Loại bỏ những column đã bị xóa khỏi originColumns\r\n this.storage.columnConfigs = this.storage.columnConfigs\r\n .filter(column => this.option.columns.some(e => e.field === column.originColumn.field));\r\n\r\n // Thêm những column mới vào storage nếu có\r\n this.option.columns.forEach(column => {\r\n if (!this.storage.columnConfigs.some(e => e.originColumn.field === column.field)) {\r\n this.storage.columnConfigs.push({\r\n originColumn: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n fixed: column.fixed\r\n },\r\n hidden: false,\r\n fixed: column.fixed\r\n });\r\n }\r\n });\r\n\r\n // Cập nhật originColumn\r\n this.storage.columnConfigs.forEach(column => {\r\n const originColumn = this.option.columns.find(e => e.field === column.originColumn.field);\r\n if (originColumn) {\r\n Object.assign(column.originColumn, {\r\n title: originColumn.title,\r\n width: originColumn.width,\r\n fixed: originColumn.fixed\r\n });\r\n }\r\n });\r\n } catch (ex) {\r\n this.#setting.remove();\r\n this.#initDefault();\r\n }\r\n } else {\r\n this.#initDefault();\r\n }\r\n }\r\n\r\n #initDefault = () => {\r\n this.storage = {};\r\n this.storage.pageSize = this.option.pageSize;\r\n this.storage.columnConfigs = [];\r\n this.option.columns.forEach(column => {\r\n this.storage.columnConfigs.push({\r\n originColumn: {\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n fixed: column.fixed\r\n },\r\n hidden: false,\r\n fixed: column.fixed\r\n });\r\n });\r\n }\r\n\r\n open() {\r\n this.modal.open();\r\n }\r\n\r\n save() {\r\n if (!Number.isSafeInteger(+this.storage.pageSize)) {\r\n this.notifyService.notify.warning(this.translateService.translate('Page size must be an integer'));\r\n return;\r\n }\r\n if (this.storage.pageSize > 200) {\r\n this.notifyService.notify.warning(this.translateService.translate('Page size is too large'));\r\n return;\r\n }\r\n this.#setting?.set?.(this.storage);\r\n this.emitOnChange();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n reset() {\r\n this.#setting?.remove?.();\r\n this.#initDefault();\r\n this.emitOnChange();\r\n this.modal.close();\r\n this.ref.detectChanges();\r\n }\r\n\r\n moveColumnUp(index: number) {\r\n const temp = this.storage.columnConfigs[index];\r\n this.storage.columnConfigs[index] = this.storage.columnConfigs[index - 1];\r\n this.storage.columnConfigs[index - 1] = temp;\r\n }\r\n\r\n moveColumnDown(index: number) {\r\n const temp = this.storage.columnConfigs[index];\r\n this.storage.columnConfigs[index] = this.storage.columnConfigs[index + 1];\r\n this.storage.columnConfigs[index + 1] = temp;\r\n }\r\n\r\n emitOnChange() {\r\n const pageSize = +this.storage.pageSize || this.option.pageSize;\r\n const columns = this.option.columns.filter(column => {\r\n // Hidden column theo config\r\n // Lấy các thuộc tính Title, Width, Fixed từ config\r\n const columnConfig = this.storage.columnConfigs.find(e => e.originColumn.field === column.field);\r\n if (columnConfig) {\r\n column.title = columnConfig.title || column.title;\r\n column.width = columnConfig.width || column.width;\r\n column.fixed = columnConfig.fixed;\r\n return !columnConfig.hidden;\r\n }\r\n return true;\r\n }).sort((current, next) => {\r\n // Sắp xếp theo config\r\n const currentIndex = this.storage.columnConfigs.findIndex(e => e.originColumn.field === current.field);\r\n const nextIndex = this.storage.columnConfigs.findIndex(e => e.originColumn.field === next.field);\r\n return currentIndex - nextIndex;\r\n }).filter(column => {\r\n // Hidden column theo option truyền vào\r\n if (column.hidden === undefined) {\r\n return true;\r\n }\r\n if (typeof (column.hidden) === 'boolean') {\r\n return !column.hidden;\r\n }\r\n if (typeof (column.hidden) === 'function') {\r\n return !column.hidden();\r\n }\r\n return false;\r\n });\r\n const result: ConfigResult = {\r\n pageSize,\r\n columns,\r\n fixedColumns: columns.filter(e => e.fixed),\r\n normalColumns: columns.filter(e => !e.fixed)\r\n };\r\n this.sdChange.emit(result);\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectorRef, EventEmitter, ChangeDetectionStrategy, Output } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-edit',\r\n templateUrl: './grid-desktop-column-edit.component.html',\r\n styleUrls: ['./grid-desktop-column-edit.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdGridDesktopColumnEdit {\r\n @Input() column: SdGridColumn;\r\n @Input() item: GridItem;\r\n @Output() sdChange = new EventEmitter<{ column: SdGridColumn, item: GridItem, value: any }>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n ) { }\r\n\r\n onEditorChange = (column: SdGridColumn, item: GridItem, value: any) => {\r\n if (column.type !== 'children') {\r\n column.editor?.change?.(item, value);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n onAutocompleteChange = (item: any) => {\r\n if (this.column.type === 'string' || this.column.type === 'values') {\r\n this.column.editor?.change?.(this.item, this.item[this.column.field], item);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n onSelectionChange = (params: { value: any, item: any, items: any[] }) => {\r\n if (this.column.type === 'string' || this.column.type === 'values') {\r\n this.column.editor?.change?.(this.item, params?.value, params?.item || params?.items);\r\n this.ref.detectChanges();\r\n this.sdChange.emit();\r\n }\r\n }\r\n\r\n dynamicItems = async (value: any) => {\r\n if ('editor' in this.column && 'item' in this.column.editor) {\r\n const items = this.column.editor.item.items || [];\r\n if (Array.isArray(items)) {\r\n return items;\r\n }\r\n const results = items(this.item, value);\r\n if (results instanceof Promise) {\r\n return await results;\r\n }\r\n return results;\r\n } else {\r\n return [];\r\n }\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-view',\r\n templateUrl: './grid-desktop-column-view.component.html',\r\n styleUrls: ['./grid-desktop-column-view.component.scss']\r\n})\r\nexport class SdGridDesktopColumnView {\r\n @Input() column: SdGridColumn;\r\n @Input() item: GridItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { SdGridColumn, GridBaseOptionFilter } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-inline-filter',\r\n templateUrl: './grid-desktop-inline-filter.component.html',\r\n styleUrls: ['./grid-desktop-inline-filter.component.scss']\r\n})\r\nexport class SdGridDesktopInlineFilter {\r\n @Input() columns: SdGridColumn[] = [];\r\n @Input() externalFilter: any = {};\r\n @Input() filter: any = {};\r\n @Input() filterOption: GridBaseOptionFilter;\r\n @Input() inlineExternal: {\r\n [key: string]: boolean;\r\n } = {};\r\n @Input() inlineColumn: {\r\n [key: string]: boolean;\r\n } = {};\r\n @Output() sdChange = new EventEmitter();\r\n isDesktop: boolean;\r\n displayKey = 'SDCUSTOM';\r\n constructor() { }\r\n\r\n onUpdateFilter = () => {\r\n this.sdChange.emit();\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { GridItem, SdGridOption } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-mobile-item-view',\r\n templateUrl: './grid-mobile-item-view.component.html',\r\n styleUrls: ['./grid-mobile-item-view.component.scss']\r\n})\r\nexport class SdGridMobileItemView {\r\n @Input() gridOption: SdGridOption;\r\n @Input() item: GridItem;\r\n @Output() check = new EventEmitter<GridItem>();\r\n constructor(\r\n ) { }\r\n\r\n onCheck = (item: GridItem) => {\r\n this.check.emit(item);\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, Output, EventEmitter } from '@angular/core';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdGridOption, SdGridColumn, GridItem } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-editor',\r\n templateUrl: './grid-popup-editor.component.html'\r\n})\r\nexport class SdGridPopupEditor implements OnInit {\r\n\r\n @ViewChild('modal') modal: SdModal;\r\n @Output() save = new EventEmitter<GridItem>();\r\n columns: SdGridColumn[] = [];\r\n gridOption: SdGridOption;\r\n item: GridItem;\r\n isModified: boolean;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n open = (item: GridItem, columns: SdGridColumn[], isModified?: boolean) => {\r\n this.item = item;\r\n this.isModified = isModified ?? false;\r\n this.columns = [];\r\n columns.forEach(column => {\r\n if (column.type !== 'image' && column.type !== 'children') {\r\n this.columns.push(column);\r\n }\r\n if (column.type === 'children') {\r\n column.children?.forEach(childColumn => {\r\n if (childColumn.type !== 'image') {\r\n this.columns.push(childColumn);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n onCancel = () => {\r\n this.modal.close();\r\n }\r\n\r\n onSave = () => {\r\n this.modal.close();\r\n this.save.emit(this.item);\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { SdGridColumn, GridBaseOptionExport } from '../../grid.model';\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 { MatRadioChange } from '@angular/material/radio';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\nimport { SdExportService } from '@sd-angular/core/export';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-export-excel',\r\n templateUrl: './grid-popup-export-excel.component.html',\r\n styleUrls: ['./grid-popup-export-excel.component.scss']\r\n})\r\nexport class SdGridPopupExportExcel implements OnInit, AfterViewInit {\r\n private prefix = 'Popup Export Excel';\r\n newExcelConfig = 'fd8fb5db-a7ad-4398-93ac-cb3350261180';\r\n @ViewChild('modal') modal: SdModal;\r\n @Input() key = '';\r\n get fullKey() {\r\n if (!this.key) {\r\n return '';\r\n }\r\n return hash({\r\n prefix: this.prefix,\r\n key: this.key\r\n });\r\n }\r\n @Input() columns: SdGridColumn[] = [];\r\n @Input() extendColumns: SdGridColumn[] = [];\r\n @Input() fileName: string;\r\n @Input() validator: (fileName: string) => string;\r\n @Input() exportOption: GridBaseOptionExport;\r\n excelConfigs: any[] = [];\r\n @Output() exportByTemplate = new EventEmitter<{ excelConfig: any, excelColumns: any[] }>();\r\n tabIndex = 0;\r\n selectedExcelConfig: any = {};\r\n exportableColumns: SdGridColumn[] = [];\r\n selected: {\r\n [key: string]: boolean\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\r\n async open() {\r\n if (!this.fullKey) {\r\n await this.exportDefault();\r\n return;\r\n }\r\n await this.loadConfiguration();\r\n this.exportableColumns = [...this.columns, ...(this.extendColumns || [])].filter(e => e.type !== 'image');\r\n this.selected = {};\r\n if (!this.selectedExcelConfig?.name) {\r\n if (this.excelConfigs?.length > 0) {\r\n this.selectedExcelConfig = this.excelConfigs[0];\r\n } else {\r\n this.selectedExcelConfig = {\r\n name: this.newExcelConfig\r\n };\r\n }\r\n }\r\n this.modal.open();\r\n this.ref.detectChanges();\r\n }\r\n\r\n private generateExcelColumns = (columns: SdGridColumn[]) => {\r\n const excelColumns: any[] = [];\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children) {\r\n if (childColumn.type !== 'image') {\r\n excelColumns.push({\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n description: childColumn.description,\r\n width: childColumn.width\r\n });\r\n }\r\n }\r\n } else if (column.type !== 'image') {\r\n excelColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n description: column.description,\r\n width: column.width\r\n });\r\n }\r\n }\r\n return excelColumns;\r\n }\r\n\r\n private initTemplate = async (columns: SdGridColumn[], fileName?: string) => {\r\n columns = columns || [];\r\n const sheets: {\r\n name: string,\r\n items: any[],\r\n fields: string[]\r\n }[] = [];\r\n if (Array.isArray(this.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.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.fileName,\r\n columns: this.generateExcelColumns(columns),\r\n sheets\r\n });\r\n }\r\n\r\n private initDefaultTemplate = async () => {\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n return await this.initTemplate(columns);\r\n }\r\n\r\n generateTemplate = async () => {\r\n this.loadingService.start();\r\n await this.initDefaultTemplate().finally(this.loadingService.stop);\r\n }\r\n\r\n generateAndUploadTemplate = async (columns: SdGridColumn[], 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.exportOption?.sheets)) {\r\n for (const sheet of this.exportOption.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.fullKey,\r\n template: {\r\n fileName: fileName || this.fileName,\r\n columns: this.generateExcelColumns(columns),\r\n sheets\r\n }\r\n });\r\n }\r\n\r\n onExportByTemplate = (excelConfig: any) => {\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n this.exportByTemplate.emit({\r\n excelConfig,\r\n excelColumns: this.generateExcelColumns(columns)\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n uploadTemplate = async () => {\r\n const excelConfig = await this.exportService.uploadTemplate({\r\n key: this.fullKey,\r\n validator: this.validator\r\n });\r\n this.excelConfigs.push({\r\n name: excelConfig.fileName,\r\n fullPath: excelConfig.filePath,\r\n removable: true\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n downloadTemplate = (excelConfig: any) => {\r\n this.exportService.download(excelConfig.fullPath, excelConfig.name);\r\n }\r\n\r\n removeTemplate = (excelConfig: any) => {\r\n this.notifyService.confirm(this.translateService.translate('Remove template')).then(async () => {\r\n this.loadingService.start();\r\n await this.exportService.removeFile({key: this.fullKey, fileName: excelConfig.name}).finally(this.loadingService.stop);\r\n const idx = this.excelConfigs.indexOf(excelConfig);\r\n this.excelConfigs.splice(idx, 1);\r\n this.ref.detectChanges();\r\n });\r\n }\r\n\r\n async loadConfiguration() {\r\n this.excelConfigs = [];\r\n const files = await this.exportService.filesInFolder({key: this.fullKey});\r\n this.excelConfigs = files.map(e=> ({\r\n fullPath: e.filePath,\r\n name: e.fileName,\r\n removable: true\r\n }));\r\n }\r\n\r\n exportDefault = async () => {\r\n this.loadingService.start();\r\n const result = await this.initDefaultTemplate().finally(this.loadingService.stop);\r\n const excelColumns: any[] = [];\r\n const extendColumns = this.extendColumns || [];\r\n const columns = [...this.columns, ...extendColumns];\r\n for (const column of columns) {\r\n if (column.type === 'children') {\r\n for (const childColumn of column.children) {\r\n if (childColumn.type !== 'image') {\r\n excelColumns.push({\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n }\r\n }\r\n } else if (column.type !== 'image') {\r\n excelColumns.push({\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n }\r\n }\r\n // this.exportByTemplate.emit({\r\n // excelConfig: {\r\n // fullPath: result.filePath,\r\n // name: `[${this.fullKey}] Default.xlsx`\r\n // },\r\n // excelColumns\r\n // });\r\n this.ref.detectChanges();\r\n }\r\n\r\n newTemplate = () => {\r\n this.notifyService.confirmWithInput(this.translateService.translate('Enter your template name'), {\r\n maxlength: 50\r\n }).then(async (fileName: string) => {\r\n this.loadingService.start();\r\n fileName = fileName + '.xlsx';\r\n try {\r\n if (this.validator?.(fileName)) {\r\n this.notifyService.notify.warning(this.validator(fileName));\r\n return;\r\n }\r\n let exportableColumns = this.exportableColumns.filter(column => this.selected[column.field]);\r\n if (!exportableColumns.length) {\r\n exportableColumns = this.exportableColumns;\r\n }\r\n const result = await this.generateAndUploadTemplate(exportableColumns, fileName);\r\n if (result?.filePath) {\r\n const excelConfig: any = {\r\n fullPath: result.filePath,\r\n name: result.fileName,\r\n removable: true\r\n };\r\n this.excelConfigs.push(excelConfig);\r\n this.onExportByTemplate(excelConfig);\r\n }\r\n } finally {\r\n this.loadingService.stop();\r\n }\r\n });\r\n }\r\n\r\n onChangeRadio = (matRadioChange: MatRadioChange) => {\r\n const selectedExcelConfig = this.excelConfigs.find(e => e.name === matRadioChange.value);\r\n if (!selectedExcelConfig) {\r\n this.selectedExcelConfig = {\r\n name: this.newExcelConfig\r\n };\r\n } else {\r\n this.selectedExcelConfig = selectedExcelConfig;\r\n }\r\n this.exportableColumns = [...this.columns, ...(this.extendColumns || [])].filter(e => e.type !== 'image');\r\n this.selected = {};\r\n }\r\n}\r\n","// tslint:disable-next-line:max-line-length\r\nimport { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\r\nimport { SdGridColumn, SdGridExternalFilter, GridBaseOptionFilter } from '../../grid.model';\r\nimport { QuickFilter, FilterConfiguration } from './grid-popup-filter.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\n\r\nimport {\r\n SdSettingService\r\n} from '@sd-angular/core/setting';\r\n\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { SdGridPopupQuickFilterDetail } from '../grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component';\r\nimport { MatSelect, MatSelectChange } from '@angular/material/select';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-filter',\r\n templateUrl: './grid-popup-filter.component.html',\r\n styleUrls: ['./grid-popup-filter.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SdGridPopupFilter implements OnInit, AfterViewInit {\r\n private keyPrefix = 'PopupFilter';\r\n displayKey = 'SDCUSTOM';\r\n isMobileOrTablet = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @ViewChild('popupQuickFilterDetail') popupQuickFilterDetail: SdGridPopupQuickFilterDetail;\r\n @ViewChild('matSelect') matSelect: MatSelect;\r\n @Input() key = '';\r\n @Input() filterOption: GridBaseOptionFilter;\r\n @Output() accept = new EventEmitter<{ filter: any, externalFilter: any }>();\r\n @Output() clear = new EventEmitter<void>();\r\n @Output() loadInlineFilter = new EventEmitter<FilterConfiguration>();\r\n selectedField: string;\r\n newQuickFilter = 'e1ef1d43-d689-424f-959e-e6cd154cfee7';\r\n filter: any = {};\r\n externalFilter: any = {};\r\n columns: SdGridColumn[] = [];\r\n externalFilters: SdGridExternalFilter[] = [];\r\n quickFilters: QuickFilter[] = [];\r\n selectedCode: string;\r\n maxQuickFilters = 5;\r\n @Input() inlineExternal: {\r\n [key: string]: boolean\r\n } = {};\r\n @Input() inlineColumn: {\r\n [key: string]: boolean\r\n } = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n private settingService: SdSettingService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n this.#loadConfiguration().then(() => {\r\n this.loadInlineFilter.emit({\r\n quickFilters: this.quickFilters || [],\r\n selectedQuickFilter: this.selectedCode || '',\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n open = (\r\n fixedColums: SdGridColumn[],\r\n normalColumns: SdGridColumn[],\r\n filter: any,\r\n externalFilter: any,\r\n externalFilters?: SdGridExternalFilter[]) => {\r\n this.init(fixedColums, normalColumns, filter, externalFilter, externalFilters);\r\n this.modal.open();\r\n }\r\n\r\n init = (\r\n fixedColums: SdGridColumn[],\r\n normalColumns: SdGridColumn[],\r\n filter: any,\r\n externalFilter: any,\r\n externalFilters?: SdGridExternalFilter[]) => {\r\n this.columns = [...fixedColums, ...normalColumns].filter(e => !e.filter?.disabled && e.type !== 'image');\r\n this.columns.forEach(column => {\r\n if (column.type === 'children') {\r\n column.children = column.children.filter(e => !e.filter?.disabled && e.type !== 'image');\r\n }\r\n });\r\n if (externalFilters) {\r\n this.externalFilters = externalFilters.filter(e => !e.disabled);\r\n } else {\r\n this.externalFilters = [];\r\n }\r\n this.filter = filter;\r\n this.externalFilter = this.initExternalFilter(externalFilters, externalFilter);\r\n for (const eFilter of this.externalFilters) {\r\n if (this.inlineExternal[eFilter.field] === undefined) {\r\n this.inlineExternal[eFilter.field] = true;\r\n }\r\n }\r\n for (const column of this.columns) {\r\n if (this.inlineColumn[column.field] === undefined) {\r\n this.inlineColumn[column.field] = true;\r\n }\r\n }\r\n }\r\n\r\n close = () => {\r\n this.modal.close();\r\n }\r\n\r\n onAccept() {\r\n if (this.filterOption?.multiple === false) {\r\n if (this.selectedField) {\r\n if (this.selectedField.startsWith('column')) {\r\n const field = this.selectedField.replace('column', '');\r\n this.accept.emit({\r\n filter: {\r\n [field]: this.filter[field]\r\n },\r\n externalFilter: {}\r\n });\r\n } else if (this.selectedField.startsWith('external')) {\r\n const field = this.selectedField.replace('external', '');\r\n this.accept.emit({\r\n filter: {},\r\n externalFilter: this.initExternalFilter(this.externalFilters, {\r\n [field]: this.externalFilter[field]\r\n })\r\n });\r\n }\r\n }\r\n } else {\r\n this.accept.emit({\r\n filter: this.filter,\r\n externalFilter: this.externalFilter\r\n });\r\n }\r\n this.modal.close();\r\n }\r\n\r\n onClear() {\r\n delete this.selectedCode;\r\n this.clear.emit();\r\n }\r\n\r\n #loadConfiguration = async () => {\r\n this.quickFilters = [];\r\n if (!this.key) {\r\n return;\r\n }\r\n const { get, has } = this.settingService.create<FilterConfiguration>({\r\n prefix: this.keyPrefix,\r\n key: this.key\r\n });\r\n if (!await has()) {\r\n return;\r\n }\r\n const configuration = await get();\r\n if (Array.isArray(configuration?.quickFilters)) {\r\n this.quickFilters = configuration.quickFilters;\r\n }\r\n this.selectedCode = configuration?.selectedQuickFilter || '';\r\n this.inlineExternal = configuration?.inlineExternal || {};\r\n this.inlineColumn = configuration?.inlineColumn || {};\r\n for (const externalFilter of this.externalFilters) {\r\n if (this.inlineExternal[externalFilter.field] === undefined) {\r\n this.inlineExternal[externalFilter.field] = true;\r\n }\r\n }\r\n for (const column of this.columns) {\r\n if (this.inlineColumn[column.field] === undefined) {\r\n this.inlineColumn[column.field] = true;\r\n }\r\n }\r\n }\r\n\r\n async updateConfiguration(selectedQuickFilterCode?: string) {\r\n if (!this.key) {\r\n return;\r\n }\r\n if (selectedQuickFilterCode !== undefined) {\r\n this.selectedCode = selectedQuickFilterCode;\r\n }\r\n const { set } = this.settingService.create<FilterConfiguration>({\r\n prefix: this.keyPrefix,\r\n key: this.key\r\n });\r\n await set({\r\n quickFilters: this.quickFilters,\r\n selectedQuickFilter: this.selectedCode,\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n this.loadInlineFilter.emit({\r\n quickFilters: this.quickFilters || [],\r\n selectedQuickFilter: this.selectedCode || '',\r\n inlineExternal: this.inlineExternal,\r\n inlineColumn: this.inlineColumn\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n onSelectionChange = (change: MatSelectChange) => {\r\n const value = change?.value || '';\r\n if (value === this.newQuickFilter) {\r\n this.selectedCode = '';\r\n this.onCreateQuickFilter();\r\n this.ref.detectChanges();\r\n } else {\r\n const quickFilter = this.quickFilters.find(e => e.code === value);\r\n if (quickFilter) {\r\n this.onDetailQuickFilter(quickFilter);\r\n }\r\n }\r\n }\r\n\r\n onCreateQuickFilter = (ev?: Event) => {\r\n ev?.stopPropagation();\r\n ev?.preventDefault();\r\n this.matSelect?.close();\r\n this.popupQuickFilterDetail.open(this.columns, this.externalFilters);\r\n }\r\n\r\n onDetailQuickFilter = async (quickFilter?: QuickFilter) => {\r\n if (quickFilter) {\r\n this.selectedCode = quickFilter.code;\r\n const f1 = JSON.stringify(quickFilter.filter);\r\n const f2 = JSON.stringify(quickFilter.externalFilter);\r\n this.filter = JSON.parse(f1);\r\n this.externalFilter = this.initExternalFilter(this.externalFilters, JSON.parse(f2));\r\n await this.updateConfiguration();\r\n }\r\n }\r\n\r\n onEditQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.matSelect?.close();\r\n if (quickFilter) {\r\n this.popupQuickFilterDetail.open(this.columns,\r\n this.externalFilters,\r\n quickFilter.filter,\r\n quickFilter.externalFilter,\r\n quickFilter.code);\r\n this.ref.detectChanges();\r\n }\r\n }\r\n\r\n onDeleteQuickFilter = (ev: Event, quickFilter?: QuickFilter) => {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.matSelect?.close();\r\n if (quickFilter) {\r\n this.notifyService.confirm(this.translateService.translate('Remove filter')).then(async () => {\r\n if (quickFilter.code === this.selectedCode) {\r\n this.selectedCode = '';\r\n }\r\n const idx = this.quickFilters.findIndex(e => e.code === quickFilter.code);\r\n this.quickFilters.splice(idx, 1);\r\n await this.updateConfiguration();\r\n this.ref.detectChanges();\r\n });\r\n }\r\n }\r\n\r\n onAcceptQuickFilter = async (args: { code: string, filter: any, externalFilter: any }) => {\r\n const quickFilter = this.quickFilters.find(e => e.code === args.code);\r\n if (!quickFilter) {\r\n this.quickFilters.push({\r\n code: args.code,\r\n filter: args.filter,\r\n externalFilter: this.initExternalFilter(this.externalFilters, args.externalFilter)\r\n });\r\n } else {\r\n quickFilter.filter = args.filter;\r\n quickFilter.externalFilter = this.initExternalFilter(this.externalFilters, args.externalFilter);\r\n }\r\n await this.updateConfiguration();\r\n }\r\n\r\n onInlineChange = () => {\r\n this.updateConfiguration();\r\n }\r\n\r\n private initExternalFilter = (externalFilters: SdGridExternalFilter[], externalFilter: any) => {\r\n externalFilter = externalFilter || {};\r\n externalFilters = externalFilters || [];\r\n externalFilters.forEach(e => {\r\n if (e.type === 'string') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? '';\r\n return;\r\n }\r\n if (e.type === 'number') {\r\n externalFilter[e.field] = externalFilter[e.field] ?? e.default ?? undefined;\r\n return;\r\n }\r\n if (e.type === 'daterange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'numberrange') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'daterangefull') {\r\n externalFilter[e.field] = {\r\n from: externalFilter[e.field]?.from ?? e.defaultFrom ?? undefined,\r\n to: externalFilter[e.field]?.to ?? e.defaultTo ?? undefined\r\n };\r\n return;\r\n }\r\n if (e.type === 'values') { // andn1\r\n externalFilter[e.field] = (externalFilter[e.field] || e.default) ?? '';\r\n return;\r\n }\r\n });\r\n return externalFilter;\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Output, EventEmitter, Input } from '@angular/core';\r\nimport { SdGridColumn, SdGridExternalFilter } from '../../grid.model';\r\n\r\nimport {\r\n SdNotifyService\r\n} from '@sd-angular/core/notify';\r\nimport {\r\n SdTranslateService\r\n} from '@sd-angular/core/translate';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { QuickFilter } from '../grid-popup-filter/grid-popup-filter.model';\r\nimport { SdModal } from '@sd-angular/core/modal';\r\n\r\n@Component({\r\n selector: 'sd-grid-popup-quick-filter-detail',\r\n templateUrl: './grid-popup-quick-filter-detail.component.html',\r\n styleUrls: ['./grid-popup-quick-filter-detail.component.scss']\r\n})\r\nexport class SdGridPopupQuickFilterDetail implements OnInit, AfterViewInit {\r\n displayKey = 'SDCUSTOM';\r\n isMobileOrTablet = false;\r\n @ViewChild('modal') modal: SdModal;\r\n @Input() quickFilters: QuickFilter[];\r\n @Output() accept = new EventEmitter<any>();\r\n fields: Field[] = [];\r\n selectableFields: Field[] = [];\r\n columns: SdGridColumn[] = [];\r\n externalFilters: SdGridExternalFilter[] = [];\r\n filter: Filter = {};\r\n externalFilter: Filter = {};\r\n selectedField: {\r\n [key: string]: boolean;\r\n } = {};\r\n page: 1 | 2 = 1;\r\n code: string;\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n open(columns: SdGridColumn[], externalFilters: SdGridExternalFilter[], filter?: Filter, externalFilter?: Filter, code?: string) {\r\n this.fields = [];\r\n this.filter = {};\r\n this.externalFilter = {};\r\n this.columns = columns;\r\n this.externalFilters = externalFilters;\r\n this.code = code;\r\n if (filter) {\r\n Object.keys(filter).forEach(key => {\r\n if (filter[key] === undefined || filter[key] === null || filter[key] === '') {\r\n return;\r\n }\r\n const column = columns.find(e => e.field === key);\r\n if (!column) {\r\n return;\r\n }\r\n this.filter[key] = filter[key];\r\n this.fields.push({\r\n ...column,\r\n id: 'column' + column.field,\r\n group: 'column',\r\n type: column.type,\r\n code: column.field,\r\n title: column.title\r\n });\r\n });\r\n }\r\n if (externalFilter) {\r\n Object.keys(externalFilter).forEach(key => {\r\n if (externalFilter[key] === undefined || externalFilter[key] === null || externalFilter[key] === '') {\r\n return;\r\n }\r\n if (key.startsWith(this.displayKey)) {\r\n this.externalFilter[key] = externalFilter[key];\r\n return;\r\n }\r\n const item = externalFilters.find(e => e.field === key);\r\n if (!item) {\r\n return;\r\n }\r\n if (item.type === 'daterange' || item.type === 'numberrange') {\r\n this.externalFilter[key] = { ...externalFilter[key] };\r\n if (!externalFilter[key]?.from && !externalFilter[key]?.to) {\r\n return;\r\n }\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title,\r\n fromTitle: item.fromTitle,\r\n toTitle: item.toTitle,\r\n });\r\n } else if (item.type === 'daterangefull') {\r\n this.externalFilter[key] = { ...externalFilter[key] };\r\n if (!externalFilter[key]?.from && !externalFilter[key]?.to) {\r\n return;\r\n }\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title\r\n });\r\n } else {\r\n this.externalFilter[key] = externalFilter[key];\r\n this.fields.push({\r\n ...item,\r\n id: 'external' + item.field,\r\n group: 'external',\r\n type: item.type,\r\n code: item.field,\r\n title: item.title\r\n });\r\n }\r\n });\r\n }\r\n const externalFields: Field[] = externalFilters?.map(e => ({\r\n ...e,\r\n id: 'external' + e.field,\r\n group: 'external',\r\n code: e.field,\r\n type: e.type,\r\n title: e.title\r\n })) || [];\r\n const columnFields: Field[] = [];\r\n columns?.filter(e => e.type !== 'image').forEach(column => {\r\n if ('children' in column) {\r\n column.children?.filter(e => e.type !== 'image').forEach(e => {\r\n columnFields.push({\r\n ...e,\r\n id: 'column' + e.field,\r\n group: 'column',\r\n code: e.field,\r\n type: e.type,\r\n title: e.title\r\n });\r\n });\r\n } else {\r\n columnFields.push({\r\n ...column,\r\n id: 'column' + column.field,\r\n group: 'column',\r\n code: column.field,\r\n type: column.type,\r\n title: column.title\r\n });\r\n }\r\n });\r\n this.selectableFields = [...externalFields, ...columnFields];\r\n this.selectedField = {};\r\n this.fields.forEach(e => this.selectedField[e.id] = true);\r\n this.page = this.fields.length > 0 ? 2 : 1;\r\n this.modal.open();\r\n }\r\n\r\n onAccept = () => {\r\n const execute = () => {\r\n const filter = {};\r\n const externalFilter = {};\r\n Object.keys(this.filter).forEach(key => {\r\n if (this.filter[key] === undefined || this.filter[key] === null || this.filter[key] === '') {\r\n return;\r\n }\r\n if (!this.fields.some(e => e.group === 'column' && e.code === key)) {\r\n return;\r\n }\r\n filter[key] = this.filter[key];\r\n });\r\n Object.keys(this.externalFilter).forEach(key => {\r\n if (this.externalFilter[key] === undefined || this.externalFilter[key] === null || this.externalFilter[key] === '') {\r\n return;\r\n }\r\n externalFilter[key] = this.externalFilter[key];\r\n });\r\n this.accept.emit({\r\n code: this.code,\r\n filter,\r\n externalFilter\r\n });\r\n this.modal.close();\r\n };\r\n if (!this.code) {\r\n this.notifyService.confirmWithInput('Enter your quick filter name').then((value: string) => {\r\n if (value) {\r\n if (this.quickFilters?.some(e => e.code === value)) {\r\n this.notifyService.notify.warning(this.translateService.translate('Code is existed'));\r\n return;\r\n }\r\n this.code = value;\r\n execute();\r\n }\r\n });\r\n } else {\r\n execute();\r\n }\r\n }\r\n\r\n onCancel = () => {\r\n this.modal.close();\r\n }\r\n\r\n onSelectField = (values: string[]) => {\r\n this.fields = this.selectableFields.filter(e => values.some(v => e.code === v));\r\n for (const field of this.fields) {\r\n if (field.group === 'external' && field.type.includes('range')) {\r\n this.externalFilter[field.code] = this.externalFilter[field.code] || {};\r\n }\r\n }\r\n }\r\n\r\n onSelectFields = () => {\r\n this.fields = this.selectableFields.filter(e => this.selectedField[e.id]);\r\n for (const field of this.fields) {\r\n if (field.group === 'external' && field.type.includes('range')) {\r\n this.externalFilter[field.code] = this.externalFilter[field.code] || {};\r\n }\r\n }\r\n }\r\n}\r\n\r\ninterface Field {\r\n id: string;\r\n group: 'column' | 'external';\r\n type: string;\r\n code: string;\r\n title?: string;\r\n fromTitle?: string;\r\n toTitle?: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface Filter {\r\n [field: string]: any;\r\n}\r\n","import { Component, OnInit, AfterViewInit, Input, ChangeDetectorRef } from '@angular/core';\r\n\r\nimport { SubOption } from '../../grid.model';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n\r\n@Component({\r\n selector: 'sd-grid-sub-information',\r\n templateUrl: './grid-sub-information.component.html',\r\n styleUrls: ['./grid-sub-information.component.scss']\r\n})\r\nexport class SdGridSubInformation implements OnInit, AfterViewInit {\r\n @Input() height = 'auto';\r\n @Input() option: SubOption;\r\n @Input() subItems: any[] = [];\r\n isMobileOrTablet: boolean;\r\n filter: any = {};\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n updateFilter() {\r\n\r\n }\r\n trackById(index, item) {\r\n return item.id;\r\n }\r\n\r\n onEditorChange = () => {\r\n this.ref.detectChanges();\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { GridItem, GridColumnChildren } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-desktop-column-children-view',\r\n templateUrl: './grid-desktop-column-children-view.component.html',\r\n styleUrls: ['./grid-desktop-column-children-view.component.scss']\r\n})\r\nexport class GridDesktopColumnChildrenViewComponent {\r\n @Input() column: GridColumnChildren;\r\n @Input() item: GridItem;\r\n constructor(\r\n ) { }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n@Pipe({\r\n name: 'cellDesktopClassName'\r\n})\r\nexport class CellDesktopClassNamePipe implements PipeTransform {\r\n transform(value: any, rowData: GridItem, column: SdGridColumn, isChildren?: boolean): string {\r\n const classNames = [];\r\n if (column.click) {\r\n classNames.push('cursor-pointer');\r\n }\r\n if (isChildren) {\r\n classNames.push('c-children');\r\n }\r\n if (column.badge) {\r\n const badge = column.badge(rowData, value);\r\n if (badge) {\r\n classNames.push('c-badge');\r\n classNames.push('badge');\r\n if (badge === 'PRIMARY') {\r\n classNames.push('badge-primary');\r\n } else if (badge === 'SECONDARY') {\r\n classNames.push('badge-secondary');\r\n } else if (badge === 'WARNING') {\r\n classNames.push('badge-warning');\r\n } else if (badge === 'SUCCESS') {\r\n classNames.push('badge-success');\r\n } else if (badge === 'DANGER') {\r\n classNames.push('badge-danger');\r\n } else if (badge === 'LIGHT') {\r\n classNames.push('badge-light');\r\n } else if (badge === 'DARK') {\r\n classNames.push('badge-dark');\r\n }\r\n }\r\n }\r\n return classNames.join(' ');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'cellMobileClassName'\r\n})\r\nexport class CellMobileClassNamePipe implements PipeTransform {\r\n transform(value: any, rowData: GridItem, column: SdGridColumn): string {\r\n const classNames = [];\r\n if (column.click) {\r\n classNames.push('cursor-pointer');\r\n }\r\n if (column.badge) {\r\n const badge = column.badge(rowData, value);\r\n if (badge) {\r\n classNames.push('badge');\r\n classNames.push('c-badge');\r\n if (badge === 'PRIMARY') {\r\n classNames.push('badge-primary');\r\n } else if (badge === 'SECONDARY') {\r\n classNames.push('badge-secondary');\r\n } else if (badge === 'WARNING') {\r\n classNames.push('badge-warning');\r\n } else if (badge === 'SUCCESS') {\r\n classNames.push('badge-success');\r\n } else if (badge === 'DANGER') {\r\n classNames.push('badge-danger');\r\n } else if (badge === 'LIGHT') {\r\n classNames.push('badge-light');\r\n } else if (badge === 'DARK') {\r\n classNames.push('badge-dark');\r\n }\r\n }\r\n }\r\n return classNames.join(' ');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, ColumnCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'columnCommandFilter'\r\n})\r\nexport class ColumnCommandFilterPipe implements PipeTransform {\r\n async transform(commands: ColumnCommand[], item: GridItem): Promise<ColumnCommand[]> {\r\n const results: ColumnCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\n@Pipe({\r\n name: 'columnHtmlTemplate'\r\n})\r\nexport class ColumnHtmlTemplatePipe 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: GridItem, htmlTemplate: (value: any, rowData?: any, isMobileOrTablet?: boolean) => string): string {\r\n if (typeof (htmlTemplate) !== 'function') {\r\n return value;\r\n }\r\n return htmlTemplate(value, rowData, this.isMobileOrTablet);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'columnTitle'\r\n})\r\nexport class ColumnTitlePipe implements PipeTransform {\r\n async transform(item: GridItem, title: string, dynamicTitle: ((rowData: any) => string | Promise<string>)): Promise<string> {\r\n if (!title) {\r\n return '';\r\n }\r\n if (dynamicTitle) {\r\n const result = dynamicTitle(item);\r\n if (result instanceof Promise) {\r\n return (await result) || title;\r\n }\r\n return result || title;\r\n }\r\n return title;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport hash from 'object-hash';\r\nimport { SdUtilityService } from '@sd-angular/core/utility';\r\n@Pipe({\r\n name: 'columnValues'\r\n})\r\nexport class ColumnValuesPipe implements PipeTransform {\r\n private static cache: {\r\n [key: string]: {\r\n values: ValueData[],\r\n obj: {\r\n [key: string]: ValueData\r\n }\r\n }\r\n } = {};\r\n constructor(private utilityService: SdUtilityService) { }\r\n transform(value: any, values: ValueData[]): ValueData {\r\n const hashKey = hash(values);\r\n if (!ColumnValuesPipe.cache[hashKey]) {\r\n ColumnValuesPipe.cache[hashKey] = {\r\n values,\r\n obj: this.utilityService.arrayToObject(values, 'value')\r\n };\r\n }\r\n if (!ColumnValuesPipe.cache[hashKey].obj[value]) {\r\n return {\r\n value,\r\n text: value\r\n };\r\n }\r\n return ColumnValuesPipe.cache[hashKey].obj[value];\r\n\r\n }\r\n}\r\n\r\ninterface ValueData {\r\n value: string;\r\n text: string;\r\n icon?: string;\r\n color?: string;\r\n backgroundColor?: string;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandDisabled'\r\n})\r\nexport class CommandDisabledPipe implements PipeTransform {\r\n transform(disabled: boolean | ((item?: any) => boolean), item: GridItem): boolean {\r\n if (!disabled) {\r\n return false;\r\n }\r\n if (typeof (disabled) === 'boolean') {\r\n return disabled;\r\n }\r\n return disabled(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand, GridCommandNoChildren } from '../grid.model';\r\n@Pipe({\r\n name: 'commandFilter'\r\n})\r\nexport class CommandFilterPipe implements PipeTransform {\r\n async transform(commands: SdGridCommand[], item: GridItem): Promise<SdGridCommand[]> {\r\n const results: SdGridCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n if ('children' in command) {\r\n let flag = true;\r\n const { hiddenByItem } = command;\r\n if (hiddenByItem) {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (await hidden) {\r\n flag = false;\r\n }\r\n } else {\r\n if (hidden) {\r\n flag = false;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n const children: GridCommandNoChildren[] = [];\r\n for (const childCommand of command.children) {\r\n if (!childCommand.hiddenByItem) {\r\n children.push(childCommand);\r\n } else {\r\n const hidden = childCommand.hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n children.push(childCommand);\r\n }\r\n } else {\r\n if (!hidden) {\r\n children.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n if (children.length) {\r\n results.push({\r\n ...command,\r\n children\r\n });\r\n }\r\n }\r\n } else {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'commandHidden'\r\n})\r\nexport class CommandHidden implements PipeTransform {\r\n async transform(item: GridItem, command: SdGridCommand): Promise<boolean> {\r\n const { hidden, hiddenByItem } = command;\r\n if (hidden) {\r\n return true;\r\n }\r\n if (hiddenByItem) {\r\n const hiddenResult = hiddenByItem(item);\r\n if (hiddenResult instanceof Promise) {\r\n if (await hiddenResult) {\r\n return true;\r\n }\r\n } else {\r\n if (hiddenResult) {\r\n return true;\r\n }\r\n }\r\n }\r\n if ('children' in command) {\r\n const results = [];\r\n for (const childCommand of command.children) {\r\n const { hidden: childHidden, hiddenByItem: childHiddenByItem } = childCommand;\r\n if (!childHidden && !childHiddenByItem) {\r\n results.push(childCommand);\r\n } else {\r\n if (childHiddenByItem) {\r\n const hiddenResult = childHiddenByItem(item);\r\n if (hiddenResult instanceof Promise) {\r\n if (!await hiddenResult) {\r\n results.push(childCommand);\r\n }\r\n } else {\r\n if (!hiddenResult) {\r\n results.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (results.length === 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandIcon'\r\n})\r\nexport class CommandIconPipe implements PipeTransform {\r\n transform(icon: string | ((item?: any) => string), item: GridItem): string {\r\n if (!icon) {\r\n return '';\r\n }\r\n if (typeof (icon) === 'string') {\r\n return icon;\r\n }\r\n return icon(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'commandTitle'\r\n})\r\nexport class CommandTitlePipe implements PipeTransform {\r\n transform(title: string | ((item?: any) => string), item: GridItem): string {\r\n if (!title) {\r\n return '';\r\n }\r\n if (typeof (title) === 'string') {\r\n return title;\r\n }\r\n return title(item);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, DynamicEditorItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorDynamicItem'\r\n})\r\nexport class EditorDynamicItemPipe implements PipeTransform {\r\n private previous: Date;\r\n private previousResults: any[] = [];\r\n private 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 gọi hàm\r\n async transform(value: any, item: GridItem, editor: DynamicEditorItem) {\r\n if (!editor.dependOnField) {\r\n return editor.items || [];\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 this.previousResults;\r\n }\r\n const items = editor.items || [];\r\n if (typeof (items) === 'function') {\r\n const results = items(item, value);\r\n if (results instanceof Promise) {\r\n this.previousResults = await results;\r\n } else {\r\n this.previousResults = results;\r\n }\r\n } else {\r\n this.previousResults = items;\r\n }\r\n this.previousResults = this.previousResults || [];\r\n return this.previousResults;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorSubInformationHandler'\r\n})\r\nexport class EditorSubInformationHandlerPipe implements PipeTransform {\r\n transform(value: any, item: GridItem, columns: SdGridColumn[]): boolean {\r\n const visible = (column: SdGridColumn) => {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n let isDisabled = false;\r\n\r\n // Kiểm tra xem có bị disabled hay không?\r\n if (column.editor) {\r\n isDisabled = typeof (column.editor.disabled) === 'function' ? column.editor.disabled(item) : column.editor.disabled;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n // Nếu bị disabled return false\r\n if (isDisabled) {\r\n return false;\r\n }\r\n\r\n // Hiển thị editor nếu dòng đó:\r\n // Đang được edit: editingStatus\r\n return item.editingStatus\r\n // Được thiết lập alwayDisplay\r\n || (column.editor && column.editor.alwayDisplay);\r\n };\r\n item.editorHandler = item.editorHandler || {};\r\n for (const column of columns) {\r\n item.editorHandler.disabled = false;\r\n item.editorHandler[column.field] = {};\r\n\r\n if (item.editorHandler.disabled) {\r\n item.editorHandler[column.field].visible = false;\r\n } else {\r\n item.editorHandler[column.field].visible = visible(column);\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorValidate'\r\n})\r\nexport class EditorValidatePipe implements PipeTransform {\r\n private previous: Date;\r\n private delay = 1000; // 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(value: string, item: GridItem, validate: (item: GridItem) => string | Promise<string>): Promise<boolean> {\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 true;\r\n }\r\n item.editorHandler = item.editorHandler || {};\r\n if (!validate) {\r\n item.editorHandler.errorMessage = null;\r\n return true;\r\n }\r\n const result = validate(item);\r\n if (result instanceof Promise) {\r\n item.editorHandler.errorMessage = await result;\r\n return true;\r\n } else {\r\n item.editorHandler.errorMessage = result;\r\n return true;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'filterMobile',\r\n pure: false\r\n})\r\nexport class FilterMobilePipe implements PipeTransform {\r\n transform(columns: SdGridColumn[], item: GridItem): SdGridColumn[] {\r\n // Những giá trị undefined, null và rỗng sẽ bỏ qua khi hiển thị trên mobile\r\n return columns.filter(column => (item[column.field] !== undefined\r\n && item[column.field] !== null\r\n && item[column.field] !== '')\r\n || column.htmlTemplate\r\n || column.type === 'children'\r\n || (column.type === 'string' && column.commands?.length > 0));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridCommand } from '../grid.model';\r\n@Pipe({\r\n name: 'mobileCommandFilter'\r\n})\r\nexport class MobileCommandFilterPipe implements PipeTransform {\r\n async transform(commands: SdGridCommand[], item: GridItem): Promise<SdGridCommand[]> {\r\n const results: SdGridCommand[] = [];\r\n if (!commands) {\r\n return results;\r\n }\r\n for (const command of commands) {\r\n if ('children' in command) {\r\n let flag = true;\r\n const { hiddenByItem } = command;\r\n if (hiddenByItem) {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (await hidden) {\r\n flag = false;\r\n }\r\n } else {\r\n if (hidden) {\r\n flag = false;\r\n }\r\n }\r\n }\r\n if (flag) {\r\n for (const childCommand of command.children) {\r\n if (!childCommand.hiddenByItem) {\r\n results.push(childCommand);\r\n } else {\r\n const hidden = childCommand.hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(childCommand);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(childCommand);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const { hiddenByItem } = command;\r\n if (!hiddenByItem) {\r\n results.push(command);\r\n } else {\r\n const hidden = hiddenByItem(item);\r\n if (hidden instanceof Promise) {\r\n if (!await hidden) {\r\n results.push(command);\r\n }\r\n } else {\r\n if (!hidden) {\r\n results.push(command);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return results;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\n\r\n@Pipe({\r\n name: 'mobileViewHtmlTempate'\r\n})\r\nexport class MobileViewHtmlTemplatePipe implements PipeTransform {\r\n transform(rowData: GridItem, columns: SdGridColumn[], htmlTemplate: (rowData: any, columns?: SdGridColumn[]) => string): string {\r\n return htmlTemplate(rowData, columns);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GridItem, SdGridColumn } from '../grid.model';\r\nimport { DecimalPipe } from '@angular/common';\r\n@Pipe({\r\n name: 'valueTransform'\r\n})\r\nexport class ValueTransformPipe implements PipeTransform {\r\n constructor(private decimalPipe: DecimalPipe) {}\r\n transform(value: any, rowData: GridItem, column: SdGridColumn): string {\r\n if (column.transform) {\r\n return column.transform(value, rowData);\r\n } else if (column.type === 'number' && Number.isNumber(value)) {\r\n return this.decimalPipe.transform(value, '1.0-2');\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdGridColumn, GridItem } from '../grid.model';\r\n@Pipe({\r\n name: 'editorPopupVisible'\r\n})\r\nexport class EditorPopupVisiblePipe implements PipeTransform {\r\n transform(column: SdGridColumn, item: GridItem): boolean {\r\n if (column.type === 'children') {\r\n return false;\r\n }\r\n if (typeof (column.editor?.hidden) === 'boolean' && column.editor.hidden) {\r\n return false;\r\n }\r\n if (typeof (column.editor?.hidden) === 'function' && column.editor.hidden(item)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdSubHeaderDef]'\r\n})\r\nexport class SdSubHeaderDefDirective {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import { Component, ViewChild, Input } from '@angular/core';\r\nimport { SdUploadExcel, SdUploadExcelColumn, SdUploadExcelOption } from '@sd-angular/core/upload-excel';\r\nimport { SdGridColumn } from '../../grid.model';\r\n\r\n@Component({\r\n selector: 'sd-grid-import-excel',\r\n templateUrl: './grid-import-excel.component.html'\r\n})\r\nexport class SdGridImportExcel {\r\n @Input() key: string;\r\n @Input() accept: (item: any[], successItems: any[], errorItems: any[], warningItems: []) => void | Promise<void>;\r\n @Input() set columns(gridColumns: SdGridColumn[]) {\r\n const columns: SdUploadExcelColumn[] = [];\r\n gridColumns.forEach(column => {\r\n if (column.ignoreImport) {\r\n return;\r\n }\r\n if (column.type === 'string' || column.type === 'color') {\r\n columns.push({\r\n type: 'string',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'bool') {\r\n columns.push({\r\n type: 'bool',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'datetime' || column.type === 'time') {\r\n columns.push({\r\n type: 'datetime',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width\r\n });\r\n } else if (column.type === 'values') {\r\n columns.push({\r\n type: 'values',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n values: column.values.map(e => e.value),\r\n });\r\n } else if (column.type === 'radio') {\r\n columns.push({\r\n type: 'radio',\r\n field: column.field,\r\n title: column.title,\r\n width: column.width,\r\n values: column.values.map(e => e[column.valueField])\r\n });\r\n }\r\n if (column.type === 'children' && column.children?.length) {\r\n column.children.forEach(childColumn => {\r\n if (childColumn.ignoreImport) {\r\n return;\r\n }\r\n if (childColumn.type === 'string' || childColumn.type === 'color') {\r\n columns.push({\r\n type: 'string',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'bool') {\r\n columns.push({\r\n type: 'bool',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'datetime' || childColumn.type === 'time') {\r\n columns.push({\r\n type: 'datetime',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width\r\n });\r\n } else if (childColumn.type === 'values') {\r\n columns.push({\r\n type: 'values',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width,\r\n values: childColumn.values.map(e => e.value),\r\n });\r\n } else if (childColumn.type === 'radio') {\r\n columns.push({\r\n type: 'radio',\r\n field: childColumn.field,\r\n title: childColumn.title,\r\n width: childColumn.width,\r\n values: childColumn.values.map(e => e[childColumn.valueField])\r\n });\r\n }\r\n });\r\n }\r\n });\r\n this.option = {\r\n key: `GridImport${this.key}`,\r\n columns,\r\n onAccept: this.accept\r\n };\r\n }\r\n option: SdUploadExcelOption;\r\n @ViewChild(SdUploadExcel) control: SdUploadExcel;\r\n constructor() { }\r\n\r\n open = () => {\r\n this.control?.open();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } 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 { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\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 { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { SdGrid } from './grid.component';\r\nimport { SdDynamicItems } from './pipes/dynamic-items.pipe';\r\nimport { SdGridConfig } from './components/grid-config/grid-config.component';\r\nimport { SdGridDesktopColumnEdit } from './components/grid-desktop-column-edit/grid-desktop-column-edit.component';\r\nimport { SdGridDesktopColumnView } from './components/grid-desktop-column-view/grid-desktop-column-view.component';\r\nimport { SdGridDesktopInlineFilter } from './components/grid-desktop-inline-filter/grid-desktop-inline-filter.component';\r\nimport { SdGridMobileItemView } from './components/grid-mobile-item-view/grid-mobile-item-view.component';\r\nimport { SdGridPopupEditor } from './components/grid-popup-editor/grid-popup-editor.component';\r\nimport { SdGridPopupExportExcel } from './components/grid-popup-export-excel/grid-popup-export-excel.component';\r\nimport { SdGridPopupFilter } from './components/grid-popup-filter/grid-popup-filter.component';\r\nimport { SdGridPopupQuickFilterDetail } from './components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component';\r\nimport { SdGridSubInformation } from './components/grid-sub-information/grid-sub-information.component';\r\nimport { GridDesktopColumnChildrenViewComponent } from './components/grid-desktop-column-children-view/grid-desktop-column-children-view.component';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CellDesktopClassNamePipe } from './pipes/cell-desktop-class-name.pipe';\r\nimport { CellMobileClassNamePipe } from './pipes/cell-mobile-class-name.pipe';\r\nimport { ColumnCommandFilterPipe } from './pipes/column-command-filter.pipe';\r\nimport { ColumnHtmlTemplatePipe } from './pipes/column-html-template.pipe';\r\nimport { ColumnTitlePipe } from './pipes/column-title.pipe';\r\nimport { ColumnValuesPipe } from './pipes/column-values.pipe';\r\nimport { CommandDisabledPipe } from './pipes/command-disabled.pipe';\r\nimport { CommandFilterPipe } from './pipes/command-filter.pipe';\r\nimport { CommandHidden } from './pipes/command-hidden.pipe';\r\nimport { CommandIconPipe } from './pipes/command-icon.pipe';\r\nimport { CommandTitlePipe } from './pipes/command-title.pipe';\r\nimport { EditorDynamicItemPipe } from './pipes/editor-dynamic-item.pipe';\r\nimport { EditorHandlerPipe } from './pipes/editor-handler.pipe';\r\nimport { EditorSubInformationHandlerPipe } from './pipes/editor-sub-information-handler.pipe';\r\nimport { EditorValidatePipe } from './pipes/editor-validate.pipe';\r\nimport { FilterMobilePipe } from './pipes/filter-mobile.pipe';\r\nimport { MobileCommandFilterPipe } from './pipes/mobile-command-filter';\r\nimport { MobileViewHtmlTemplatePipe } from './pipes/mobile-view-html-template.pipe';\r\nimport { ValueTransformPipe } from './pipes/value-transform.pipe';\r\nimport { EditorPopupVisiblePipe } from './pipes/editor-popup-visible.pipe';\r\nimport { SdCellDefDirective } from './directives/cell-def.directive';\r\nimport { SdCellEditorDefDirective } from './directives/cell-editor-def.directive';\r\nimport { SdCellFooterDevDirective } from './directives/cell-footer-def.directive';\r\nimport { SdSubHeaderDefDirective } from './directives/sub-information-header-def.directive';\r\nimport { SdGridImportExcel } from './components/grid-import-excel/grid-import-excel.component';\r\nimport { SdFormModule } from '@sd-angular/core/form';\r\nimport { SdUploadExcelModule } from '@sd-angular/core/upload-excel';\r\nimport { HandlerLocal } from './models/handler-local';\r\nimport { HandlerDotnet } from './models/handler-dotnet';\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 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 MatSelectModule,\r\n MatCheckboxModule,\r\n SdUploadExcelModule,\r\n SdFormModule,\r\n SdServiceModule\r\n ],\r\n declarations: [\r\n SdGrid,\r\n SdGridConfig,\r\n SdGridDesktopColumnEdit,\r\n SdGridDesktopColumnView,\r\n SdGridDesktopInlineFilter,\r\n SdGridMobileItemView,\r\n SdGridPopupEditor,\r\n SdGridPopupExportExcel,\r\n SdGridPopupFilter,\r\n SdGridPopupQuickFilterDetail,\r\n SdGridSubInformation,\r\n SdGridImportExcel,\r\n\r\n GridDesktopColumnChildrenViewComponent,\r\n CellDesktopClassNamePipe,\r\n CellMobileClassNamePipe,\r\n ColumnCommandFilterPipe,\r\n ColumnHtmlTemplatePipe,\r\n ColumnTitlePipe,\r\n ColumnValuesPipe,\r\n CommandDisabledPipe,\r\n CommandFilterPipe,\r\n CommandHidden,\r\n CommandIconPipe,\r\n CommandTitlePipe,\r\n SdDynamicItems,\r\n EditorDynamicItemPipe,\r\n EditorHandlerPipe,\r\n EditorSubInformationHandlerPipe,\r\n EditorValidatePipe,\r\n FilterMobilePipe,\r\n MobileCommandFilterPipe,\r\n MobileViewHtmlTemplatePipe,\r\n ValueTransformPipe,\r\n EditorPopupVisiblePipe,\r\n\r\n SdCellDefDirective,\r\n SdCellEditorDefDirective,\r\n SdCellFooterDevDirective,\r\n SdSubHeaderDefDirective,\r\n ],\r\n exports: [\r\n SdGrid,\r\n SdCellDefDirective,\r\n SdCellEditorDefDirective,\r\n SdCellFooterDevDirective,\r\n SdSubHeaderDefDirective,\r\n ],\r\n providers: [\r\n HandlerLocal,\r\n HandlerDotnet,\r\n EditorHandlerPipe\r\n ]\r\n})\r\nexport class SdGridModule {\r\n}\r\n","export class QuickFilter {\r\n code: string;\r\n filter: {\r\n [field: string]: any\r\n };\r\n externalFilter: {\r\n [field: string]: any\r\n };\r\n}\r\n\r\nexport interface FilterConfiguration {\r\n selectedQuickFilter: string;\r\n quickFilters: QuickFilter[];\r\n inlineExternal: {\r\n [key: string]: boolean;\r\n };\r\n inlineColumn: {\r\n [key: string]: boolean;\r\n };\r\n}\r\n"]}
|