@sd-angular/core 1.3.34 → 1.3.36

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.
Files changed (30) hide show
  1. package/bundles/sd-angular-core-export.umd.js +221 -77
  2. package/bundles/sd-angular-core-export.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-export.umd.min.js +1 -1
  4. package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-grid-material.umd.js +153 -181
  6. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
  10. package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
  11. package/esm2015/export/src/lib/export.model.js +1 -1
  12. package/esm2015/export/src/lib/export.service.js +186 -48
  13. package/esm2015/grid-material/src/lib/components/popup-export/popup-export.component.js +1 -8
  14. package/esm2015/grid-material/src/lib/grid-material.component.js +18 -36
  15. package/esm2015/grid-material/src/lib/models/grid-export.model.js +1 -1
  16. package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -1
  17. package/export/sd-angular-core-export.metadata.json +1 -1
  18. package/export/src/lib/export.model.d.ts +4 -4
  19. package/export/src/lib/export.service.d.ts +4 -6
  20. package/fesm2015/sd-angular-core-export.js +185 -47
  21. package/fesm2015/sd-angular-core-export.js.map +1 -1
  22. package/fesm2015/sd-angular-core-grid-material.js +17 -42
  23. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  24. package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
  25. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  26. package/grid-material/src/lib/components/popup-export/popup-export.component.d.ts +0 -2
  27. package/grid-material/src/lib/grid-material.component.d.ts +0 -1
  28. package/grid-material/src/lib/models/grid-export.model.d.ts +0 -1
  29. package/package.json +3 -2
  30. package/{sd-angular-core-1.3.34.tgz → sd-angular-core-1.3.36.tgz} +0 -0
@@ -897,13 +897,6 @@
897
897
  isCSV: true
898
898
  });
899
899
  };
900
- this.exportRaw = function () {
901
- _this.export.emit({
902
- file: null,
903
- columns: __classPrivateFieldGet(_this, _getExportColumns).call(_this),
904
- isRaw: true
905
- });
906
- };
907
900
  this.loadFiles = function (group) {
908
901
  if (group === void 0) { group = null; }
909
902
  return __awaiter(_this, void 0, void 0, function () {
@@ -1885,11 +1878,11 @@
1885
1878
  this.exportTitle = 'Export';
1886
1879
  _loadCompleted.set(this, false);
1887
1880
  _initCellDef.set(this, function () {
1888
- var e_1, _4;
1881
+ var e_1, _2;
1889
1882
  _this.cellDef = {};
1890
1883
  try {
1891
- for (var _5 = __values(_this.sdCellDefs), _6 = _5.next(); !_6.done; _6 = _5.next()) {
1892
- var cellDef = _6.value;
1884
+ for (var _3 = __values(_this.sdCellDefs), _4 = _3.next(); !_4.done; _4 = _3.next()) {
1885
+ var cellDef = _4.value;
1893
1886
  if (cellDef.sdMaterialCellDef) {
1894
1887
  _this.cellDef[cellDef.sdMaterialCellDef] = cellDef;
1895
1888
  }
@@ -1898,35 +1891,35 @@
1898
1891
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
1899
1892
  finally {
1900
1893
  try {
1901
- if (_6 && !_6.done && (_4 = _5.return)) _4.call(_5);
1894
+ if (_4 && !_4.done && (_2 = _3.return)) _2.call(_3);
1902
1895
  }
1903
1896
  finally { if (e_1) throw e_1.error; }
1904
1897
  }
1905
1898
  });
1906
1899
  _initFilterDef.set(this, function () {
1907
- var e_2, _4;
1900
+ var e_2, _2;
1908
1901
  _this.filterDefs = [];
1909
1902
  try {
1910
- for (var _5 = __values(_this.sdFilterDefs), _6 = _5.next(); !_6.done; _6 = _5.next()) {
1911
- var filterDef = _6.value;
1903
+ for (var _3 = __values(_this.sdFilterDefs), _4 = _3.next(); !_4.done; _4 = _3.next()) {
1904
+ var filterDef = _4.value;
1912
1905
  _this.filterDefs.push(filterDef);
1913
1906
  }
1914
1907
  }
1915
1908
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
1916
1909
  finally {
1917
1910
  try {
1918
- if (_6 && !_6.done && (_4 = _5.return)) _4.call(_5);
1911
+ if (_4 && !_4.done && (_2 = _3.return)) _2.call(_3);
1919
1912
  }
1920
1913
  finally { if (e_2) throw e_2.error; }
1921
1914
  }
1922
1915
  });
1923
1916
  _initFooterDef.set(this, function () {
1924
- var e_3, _4;
1917
+ var e_3, _2;
1925
1918
  _this.footerDef = {};
1926
1919
  _this.hasFooter = false;
1927
1920
  try {
1928
- for (var _5 = __values(_this.sdFooterDefs), _6 = _5.next(); !_6.done; _6 = _5.next()) {
1929
- var footerDef = _6.value;
1921
+ for (var _3 = __values(_this.sdFooterDefs), _4 = _3.next(); !_4.done; _4 = _3.next()) {
1922
+ var footerDef = _4.value;
1930
1923
  if (footerDef.sdMaterialFooterDef) {
1931
1924
  _this.hasFooter = true;
1932
1925
  _this.footerDef[footerDef.sdMaterialFooterDef] = footerDef;
@@ -1936,7 +1929,7 @@
1936
1929
  catch (e_3_1) { e_3 = { error: e_3_1 }; }
1937
1930
  finally {
1938
1931
  try {
1939
- if (_6 && !_6.done && (_4 = _5.return)) _4.call(_5);
1932
+ if (_4 && !_4.done && (_2 = _3.return)) _2.call(_3);
1940
1933
  }
1941
1934
  finally { if (e_3) throw e_3.error; }
1942
1935
  }
@@ -1968,7 +1961,7 @@
1968
1961
  var columns = _this.gridOption.columns;
1969
1962
  var rawColumnFilter = filterInfo.rawColumnFilter, orderBy = filterInfo.orderBy, orderDirection = filterInfo.orderDirection, pageSize = filterInfo.pageSize, pageNumber = filterInfo.pageNumber;
1970
1963
  var items = localItems.filter(function (item) {
1971
- var e_4, _4;
1964
+ var e_4, _2;
1972
1965
  var _a, _b, _c, _d;
1973
1966
  try {
1974
1967
  for (var columns_1 = __values(columns), columns_1_1 = columns_1.next(); !columns_1_1.done; columns_1_1 = columns_1.next()) {
@@ -2042,7 +2035,7 @@
2042
2035
  catch (e_4_1) { e_4 = { error: e_4_1 }; }
2043
2036
  finally {
2044
2037
  try {
2045
- if (columns_1_1 && !columns_1_1.done && (_4 = columns_1.return)) _4.call(columns_1);
2038
+ if (columns_1_1 && !columns_1_1.done && (_2 = columns_1.return)) _2.call(columns_1);
2046
2039
  }
2047
2040
  finally { if (e_4) throw e_4.error; }
2048
2041
  }
@@ -2100,14 +2093,14 @@
2100
2093
  _load$1.set(this, function (filterReq, force) {
2101
2094
  if (force === void 0) { force = true; }
2102
2095
  return __awaiter(_this, void 0, void 0, function () {
2103
- var result, data, results, _4, _5, error_1;
2104
- return __generator(this, function (_6) {
2105
- switch (_6.label) {
2096
+ var result, data, results, _2, _3, error_1;
2097
+ return __generator(this, function (_4) {
2098
+ switch (_4.label) {
2106
2099
  case 0:
2107
2100
  this.isLoading = true;
2108
- _6.label = 1;
2101
+ _4.label = 1;
2109
2102
  case 1:
2110
- _6.trys.push([1, 8, 9, 10]);
2103
+ _4.trys.push([1, 8, 9, 10]);
2111
2104
  if (!(this.gridOption.type === 'server')) return [3 /*break*/, 3];
2112
2105
  result = this.gridOption.items(filterReq);
2113
2106
  if (rxjs.isObservable(result)) {
@@ -2115,7 +2108,7 @@
2115
2108
  }
2116
2109
  return [4 /*yield*/, result];
2117
2110
  case 2:
2118
- data = _6.sent();
2111
+ data = _4.sent();
2119
2112
  return [2 /*return*/, {
2120
2113
  items: data.items || [],
2121
2114
  total: data.total || 0
@@ -2124,19 +2117,19 @@
2124
2117
  if (!force) return [3 /*break*/, 6];
2125
2118
  results = this.gridOption.items();
2126
2119
  if (!(results instanceof Promise)) return [3 /*break*/, 5];
2127
- _4 = __classPrivateFieldSet;
2128
- _5 = [this, _localItems];
2120
+ _2 = __classPrivateFieldSet;
2121
+ _3 = [this, _localItems];
2129
2122
  return [4 /*yield*/, results];
2130
2123
  case 4:
2131
- _4.apply(void 0, _5.concat([_6.sent()]));
2124
+ _2.apply(void 0, _3.concat([_4.sent()]));
2132
2125
  return [3 /*break*/, 6];
2133
2126
  case 5:
2134
2127
  __classPrivateFieldSet(this, _localItems, results);
2135
- _6.label = 6;
2128
+ _4.label = 6;
2136
2129
  case 6: return [2 /*return*/, __classPrivateFieldGet(this, _filterLocal).call(this, __classPrivateFieldGet(this, _localItems), filterReq)];
2137
2130
  case 7: return [3 /*break*/, 10];
2138
2131
  case 8:
2139
- error_1 = _6.sent();
2132
+ error_1 = _4.sent();
2140
2133
  this.notifyService.handle.error(error_1);
2141
2134
  return [3 /*break*/, 10];
2142
2135
  case 9:
@@ -2150,8 +2143,8 @@
2150
2143
  });
2151
2144
  _render.set(this, function (args) { return __awaiter(_this, void 0, void 0, function () {
2152
2145
  var _a, _b, _c, _d;
2153
- return __generator(this, function (_4) {
2154
- switch (_4.label) {
2146
+ return __generator(this, function (_2) {
2147
+ switch (_2.label) {
2155
2148
  case 0:
2156
2149
  (_a = this.sdScroll) === null || _a === void 0 ? void 0 : _a.scrollTop();
2157
2150
  this.items = (args === null || args === void 0 ? void 0 : args.items) || [];
@@ -2162,7 +2155,7 @@
2162
2155
  });
2163
2156
  return [4 /*yield*/, ((_d = (_c = (_b = this.gridOption) === null || _b === void 0 ? void 0 : _b.reload) === null || _c === void 0 ? void 0 : _c.onReload) === null || _d === void 0 ? void 0 : _d.call(_c, this.items))];
2164
2157
  case 1:
2165
- _4.sent();
2158
+ _2.sent();
2166
2159
  this.isSelectAll = this.items.every(function (e) { return e.isSelected; });
2167
2160
  __classPrivateFieldGet(this, _updateSelectedItems).call(this);
2168
2161
  return [2 /*return*/];
@@ -2173,11 +2166,11 @@
2173
2166
  if (force === void 0) { force = true; }
2174
2167
  return __awaiter(_this, void 0, void 0, function () {
2175
2168
  var data;
2176
- return __generator(this, function (_4) {
2177
- switch (_4.label) {
2169
+ return __generator(this, function (_2) {
2170
+ switch (_2.label) {
2178
2171
  case 0: return [4 /*yield*/, __classPrivateFieldGet(this, _load$1).call(this, __classPrivateFieldGet(this, _getFilter).call(this), force)];
2179
2172
  case 1:
2180
- data = _4.sent();
2173
+ data = _2.sent();
2181
2174
  __classPrivateFieldGet(this, _render).call(this, data);
2182
2175
  return [2 /*return*/];
2183
2176
  }
@@ -2189,8 +2182,8 @@
2189
2182
  if (pageSize === void 0) { pageSize = 10000; }
2190
2183
  return __awaiter(_this, void 0, void 0, function () {
2191
2184
  var _e, _f, result, filterInfo, result, exportedItems, results;
2192
- return __generator(this, function (_4) {
2193
- switch (_4.label) {
2185
+ return __generator(this, function (_2) {
2186
+ switch (_2.label) {
2194
2187
  case 0:
2195
2188
  if (!((_e = this.gridOption.export) === null || _e === void 0 ? void 0 : _e.items)) return [3 /*break*/, 2];
2196
2189
  result = (_f = this.gridOption.export) === null || _f === void 0 ? void 0 : _f.items(__classPrivateFieldGet(this, _filterExportInfo).call(this, pageNumber, pageSize));
@@ -2204,7 +2197,7 @@
2204
2197
  result = result.toPromise();
2205
2198
  }
2206
2199
  return [4 /*yield*/, result];
2207
- case 1: return [2 /*return*/, _4.sent()];
2200
+ case 1: return [2 /*return*/, _2.sent()];
2208
2201
  case 2:
2209
2202
  filterInfo = __classPrivateFieldGet(this, _filterExportInfo).call(this, pageNumber, pageSize);
2210
2203
  if (!(this.gridOption.type === 'server')) return [3 /*break*/, 4];
@@ -2213,7 +2206,7 @@
2213
2206
  result = result.toPromise();
2214
2207
  }
2215
2208
  return [4 /*yield*/, result];
2216
- case 3: return [2 /*return*/, _4.sent()];
2209
+ case 3: return [2 /*return*/, _2.sent()];
2217
2210
  case 4:
2218
2211
  exportedItems = [];
2219
2212
  if (!(typeof (this.gridOption.items) === 'function')) return [3 /*break*/, 8];
@@ -2221,15 +2214,15 @@
2221
2214
  if (!(results instanceof Promise)) return [3 /*break*/, 6];
2222
2215
  return [4 /*yield*/, results];
2223
2216
  case 5:
2224
- exportedItems = _4.sent();
2217
+ exportedItems = _2.sent();
2225
2218
  return [3 /*break*/, 7];
2226
2219
  case 6:
2227
2220
  exportedItems = results;
2228
- _4.label = 7;
2221
+ _2.label = 7;
2229
2222
  case 7: return [3 /*break*/, 9];
2230
2223
  case 8:
2231
2224
  exportedItems = this.gridOption.items;
2232
- _4.label = 9;
2225
+ _2.label = 9;
2233
2226
  case 9: return [2 /*return*/, __classPrivateFieldGet(this, _filterLocal).call(this, exportedItems, filterInfo)];
2234
2227
  }
2235
2228
  });
@@ -2269,14 +2262,14 @@
2269
2262
  return ((_b = (_a = _this.gridOption.export) === null || _a === void 0 ? void 0 : _a.columns) === null || _b === void 0 ? void 0 : _b.filter(function (e) { var _a; return !((_a = e.export) === null || _a === void 0 ? void 0 : _a.disabled); })) || [];
2270
2263
  });
2271
2264
  _onExport.set(this, function (args) { return __awaiter(_this, void 0, void 0, function () {
2272
- var _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, file, isCSV, isRaw, columns_2, pageSize_1, batch, total_1, pageNumber_1, exportItems_1, items_1, promises_1, handleData, sheets, _4, _5, sheet, _6, _7, _8, e_5_1;
2273
- var e_5, _9;
2265
+ var _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, file, isCSV, columns_2, pageSize_1, batch, total_1, pageNumber_1, exportItems_1, items_1, promises_1, handleData, sheets, _2, _3, sheet, _4, _5, _6, e_5_1;
2266
+ var e_5, _7;
2274
2267
  var _this = this;
2275
- return __generator(this, function (_10) {
2276
- switch (_10.label) {
2268
+ return __generator(this, function (_8) {
2269
+ switch (_8.label) {
2277
2270
  case 0:
2278
- _10.trys.push([0, , 22, 23]);
2279
- file = args.file, isCSV = args.isCSV, isRaw = args.isRaw;
2271
+ _8.trys.push([0, , 20, 21]);
2272
+ file = args.file, isCSV = args.isCSV;
2280
2273
  columns_2 = args.columns;
2281
2274
  pageSize_1 = ((_h = (_g = this.gridOption) === null || _g === void 0 ? void 0 : _g.export) === null || _h === void 0 ? void 0 : _h.maxItemsPerRequest) || 1000;
2282
2275
  batch = ((_k = (_j = this.gridOption) === null || _j === void 0 ? void 0 : _j.export) === null || _k === void 0 ? void 0 : _k.batch) || 1;
@@ -2287,14 +2280,14 @@
2287
2280
  items_1 = [];
2288
2281
  promises_1 = [];
2289
2282
  handleData = function () { return __awaiter(_this, void 0, void 0, function () {
2290
- var _u, results, results_1, results_1_1, result, results_2, totalPage, percent, allColumns, allExportedColumns, _loop_1, exportItems_2, exportItems_2_1, item, e_6_1;
2291
- var e_7, _4, e_6, _5;
2283
+ var _s, results, results_1, results_1_1, result, results_2, totalPage, percent, allColumns, allExportedColumns, _loop_1, exportItems_2, exportItems_2_1, item, e_6_1;
2284
+ var e_7, _2, e_6, _3;
2292
2285
  var _this = this;
2293
- return __generator(this, function (_6) {
2294
- switch (_6.label) {
2286
+ return __generator(this, function (_4) {
2287
+ switch (_4.label) {
2295
2288
  case 0: return [4 /*yield*/, Promise.all(promises_1)];
2296
2289
  case 1:
2297
- results = _6.sent();
2290
+ results = _4.sent();
2298
2291
  promises_1 = [];
2299
2292
  exportItems_1 = [];
2300
2293
  try {
@@ -2312,20 +2305,20 @@
2312
2305
  catch (e_7_1) { e_7 = { error: e_7_1 }; }
2313
2306
  finally {
2314
2307
  try {
2315
- if (results_1_1 && !results_1_1.done && (_4 = results_1.return)) _4.call(results_1);
2308
+ if (results_1_1 && !results_1_1.done && (_2 = results_1.return)) _2.call(results_1);
2316
2309
  }
2317
2310
  finally { if (e_7) throw e_7.error; }
2318
2311
  }
2319
- if (!((_u = this.gridOption.export) === null || _u === void 0 ? void 0 : _u.mapping)) return [3 /*break*/, 4];
2312
+ if (!((_s = this.gridOption.export) === null || _s === void 0 ? void 0 : _s.mapping)) return [3 /*break*/, 4];
2320
2313
  results_2 = this.gridOption.export.mapping(exportItems_1);
2321
2314
  if (!(results_2 instanceof Promise)) return [3 /*break*/, 3];
2322
2315
  return [4 /*yield*/, results_2];
2323
2316
  case 2:
2324
- exportItems_1 = _6.sent();
2317
+ exportItems_1 = _4.sent();
2325
2318
  return [3 /*break*/, 4];
2326
2319
  case 3:
2327
2320
  exportItems_1 = results_2;
2328
- _6.label = 4;
2321
+ _4.label = 4;
2329
2322
  case 4:
2330
2323
  totalPage = total_1 / pageSize_1;
2331
2324
  percent = Math.round((pageNumber_1 - 1) * 100.0 / totalPage);
@@ -2334,15 +2327,15 @@
2334
2327
  allExportedColumns = __classPrivateFieldGet(this, _allExportedColumns).call(this);
2335
2328
  _loop_1 = function (item) {
2336
2329
  var obj, handle, columns_3, columns_3_1, exportColumn, e_8_1;
2337
- var e_8, _4;
2338
- return __generator(this, function (_5) {
2339
- switch (_5.label) {
2330
+ var e_8, _2;
2331
+ return __generator(this, function (_3) {
2332
+ switch (_3.label) {
2340
2333
  case 0:
2341
2334
  obj = {};
2342
2335
  handle = function (exportColumn) { return __awaiter(_this, void 0, void 0, function () {
2343
- var _v, _w, column, exportedColumn, transform, _4, _5, date, transformDate, date, transformDate, date, transformDate, _6, _7;
2344
- return __generator(this, function (_8) {
2345
- switch (_8.label) {
2336
+ var _t, _u, column, exportedColumn, transform, _2, _3, date, transformDate, date, transformDate, date, transformDate, _4, _5;
2337
+ return __generator(this, function (_6) {
2338
+ switch (_6.label) {
2346
2339
  case 0:
2347
2340
  obj[exportColumn.field] = item[exportColumn.field];
2348
2341
  column = allColumns.find(function (e) { return e.field === exportColumn.field; });
@@ -2366,15 +2359,15 @@
2366
2359
  isExport: true
2367
2360
  });
2368
2361
  if (!(transform instanceof Promise)) return [3 /*break*/, 2];
2369
- _4 = obj;
2370
- _5 = column.field;
2362
+ _2 = obj;
2363
+ _3 = column.field;
2371
2364
  return [4 /*yield*/, transform];
2372
2365
  case 1:
2373
- _4[_5] = _8.sent();
2366
+ _2[_3] = _6.sent();
2374
2367
  return [3 /*break*/, 3];
2375
2368
  case 2:
2376
2369
  obj[column.field] = transform;
2377
- _8.label = 3;
2370
+ _6.label = 3;
2378
2371
  case 3: return [3 /*break*/, 13];
2379
2372
  case 4:
2380
2373
  if (!(item[column.field] === undefined || item[column.field] === null || item[column.field] === '')) return [3 /*break*/, 5];
@@ -2389,10 +2382,10 @@
2389
2382
  if (!(column.type === 'bool')) return [3 /*break*/, 7];
2390
2383
  // Nếu là bool thì gán bằng giá trị trueValue và falseValue (nếu có), mặc định là TRUE/FALSE
2391
2384
  if (item[column.field]) {
2392
- obj[column.field] = ((_v = column.option) === null || _v === void 0 ? void 0 : _v.displayOnTrue) || 'True';
2385
+ obj[column.field] = ((_t = column.option) === null || _t === void 0 ? void 0 : _t.displayOnTrue) || 'True';
2393
2386
  }
2394
2387
  else if (obj[column.field] !== undefined && obj[column.field] !== null) {
2395
- obj[column.field] = ((_w = column.option) === null || _w === void 0 ? void 0 : _w.displayOnFalse) || 'False';
2388
+ obj[column.field] = ((_u = column.option) === null || _u === void 0 ? void 0 : _u.displayOnFalse) || 'False';
2396
2389
  }
2397
2390
  return [3 /*break*/, 13];
2398
2391
  case 7:
@@ -2428,43 +2421,43 @@
2428
2421
  case 10:
2429
2422
  if (!(column.type === 'values')) return [3 /*break*/, 12];
2430
2423
  // Nếu là values thì lấy giá trị của value được chọn
2431
- _6 = obj;
2432
- _7 = column.field;
2424
+ _4 = obj;
2425
+ _5 = column.field;
2433
2426
  return [4 /*yield*/, this.columnValuesPipe.transform(item[column.field], column)];
2434
2427
  case 11:
2435
2428
  // Nếu là values thì lấy giá trị của value được chọn
2436
- _6[_7] = _8.sent();
2429
+ _4[_5] = _6.sent();
2437
2430
  return [3 /*break*/, 13];
2438
2431
  case 12:
2439
2432
  obj[column.field] = item[column.field];
2440
- _8.label = 13;
2433
+ _6.label = 13;
2441
2434
  case 13: return [2 /*return*/];
2442
2435
  }
2443
2436
  });
2444
2437
  }); };
2445
- _5.label = 1;
2438
+ _3.label = 1;
2446
2439
  case 1:
2447
- _5.trys.push([1, 6, 7, 8]);
2440
+ _3.trys.push([1, 6, 7, 8]);
2448
2441
  columns_3 = (e_8 = void 0, __values(columns_2)), columns_3_1 = columns_3.next();
2449
- _5.label = 2;
2442
+ _3.label = 2;
2450
2443
  case 2:
2451
2444
  if (!!columns_3_1.done) return [3 /*break*/, 5];
2452
2445
  exportColumn = columns_3_1.value;
2453
2446
  return [4 /*yield*/, handle(exportColumn)];
2454
2447
  case 3:
2455
- _5.sent();
2456
- _5.label = 4;
2448
+ _3.sent();
2449
+ _3.label = 4;
2457
2450
  case 4:
2458
2451
  columns_3_1 = columns_3.next();
2459
2452
  return [3 /*break*/, 2];
2460
2453
  case 5: return [3 /*break*/, 8];
2461
2454
  case 6:
2462
- e_8_1 = _5.sent();
2455
+ e_8_1 = _3.sent();
2463
2456
  e_8 = { error: e_8_1 };
2464
2457
  return [3 /*break*/, 8];
2465
2458
  case 7:
2466
2459
  try {
2467
- if (columns_3_1 && !columns_3_1.done && (_4 = columns_3.return)) _4.call(columns_3);
2460
+ if (columns_3_1 && !columns_3_1.done && (_2 = columns_3.return)) _2.call(columns_3);
2468
2461
  }
2469
2462
  finally { if (e_8) throw e_8.error; }
2470
2463
  return [7 /*endfinally*/];
@@ -2474,29 +2467,29 @@
2474
2467
  }
2475
2468
  });
2476
2469
  };
2477
- _6.label = 5;
2470
+ _4.label = 5;
2478
2471
  case 5:
2479
- _6.trys.push([5, 10, 11, 12]);
2472
+ _4.trys.push([5, 10, 11, 12]);
2480
2473
  exportItems_2 = __values(exportItems_1), exportItems_2_1 = exportItems_2.next();
2481
- _6.label = 6;
2474
+ _4.label = 6;
2482
2475
  case 6:
2483
2476
  if (!!exportItems_2_1.done) return [3 /*break*/, 9];
2484
2477
  item = exportItems_2_1.value;
2485
2478
  return [5 /*yield**/, _loop_1(item)];
2486
2479
  case 7:
2487
- _6.sent();
2488
- _6.label = 8;
2480
+ _4.sent();
2481
+ _4.label = 8;
2489
2482
  case 8:
2490
2483
  exportItems_2_1 = exportItems_2.next();
2491
2484
  return [3 /*break*/, 6];
2492
2485
  case 9: return [3 /*break*/, 12];
2493
2486
  case 10:
2494
- e_6_1 = _6.sent();
2487
+ e_6_1 = _4.sent();
2495
2488
  e_6 = { error: e_6_1 };
2496
2489
  return [3 /*break*/, 12];
2497
2490
  case 11:
2498
2491
  try {
2499
- if (exportItems_2_1 && !exportItems_2_1.done && (_5 = exportItems_2.return)) _5.call(exportItems_2);
2492
+ if (exportItems_2_1 && !exportItems_2_1.done && (_3 = exportItems_2.return)) _3.call(exportItems_2);
2500
2493
  }
2501
2494
  finally { if (e_6) throw e_6.error; }
2502
2495
  return [7 /*endfinally*/];
@@ -2504,7 +2497,7 @@
2504
2497
  }
2505
2498
  });
2506
2499
  }); };
2507
- _10.label = 1;
2500
+ _8.label = 1;
2508
2501
  case 1:
2509
2502
  if (!(pageNumber_1 * pageSize_1 < total_1)) return [3 /*break*/, 3];
2510
2503
  promises_1.push(__classPrivateFieldGet(this, _exportedItems).call(this, pageNumber_1, pageSize_1));
@@ -2514,16 +2507,16 @@
2514
2507
  }
2515
2508
  return [4 /*yield*/, handleData()];
2516
2509
  case 2:
2517
- _10.sent();
2510
+ _8.sent();
2518
2511
  return [3 /*break*/, 1];
2519
2512
  case 3:
2520
2513
  if (!(promises_1.length > 0)) return [3 /*break*/, 5];
2521
2514
  return [4 /*yield*/, handleData()];
2522
2515
  case 4:
2523
- _10.sent();
2524
- _10.label = 5;
2516
+ _8.sent();
2517
+ _8.label = 5;
2525
2518
  case 5:
2526
- if (!!(file === null || file === void 0 ? void 0 : file.filePath)) return [3 /*break*/, 20];
2519
+ if (!!(file === null || file === void 0 ? void 0 : file.filePath)) return [3 /*break*/, 18];
2527
2520
  if (!isCSV) return [3 /*break*/, 7];
2528
2521
  return [4 /*yield*/, this.exportService.exportCSV({
2529
2522
  columns: columns_2,
@@ -2531,102 +2524,81 @@
2531
2524
  fileName: (_m = (_l = this.gridOption) === null || _l === void 0 ? void 0 : _l.export) === null || _m === void 0 ? void 0 : _m.fileName
2532
2525
  })];
2533
2526
  case 6:
2534
- _10.sent();
2527
+ _8.sent();
2535
2528
  return [2 /*return*/];
2536
2529
  case 7:
2537
- if (!isRaw) return [3 /*break*/, 9];
2538
- return [4 /*yield*/, this.exportService.exportExcelRaw({
2539
- columns: columns_2,
2540
- items: items_1,
2541
- fileName: (_p = (_o = this.gridOption) === null || _o === void 0 ? void 0 : _o.export) === null || _p === void 0 ? void 0 : _p.fileName
2542
- })];
2530
+ sheets = [];
2531
+ if (!Array.isArray((_p = (_o = this.gridOption) === null || _o === void 0 ? void 0 : _o.export) === null || _p === void 0 ? void 0 : _p.sheets)) return [3 /*break*/, 16];
2532
+ _8.label = 8;
2543
2533
  case 8:
2544
- _10.sent();
2545
- return [2 /*return*/];
2534
+ _8.trys.push([8, 14, 15, 16]);
2535
+ _2 = __values(this.gridOption.export.sheets), _3 = _2.next();
2536
+ _8.label = 9;
2546
2537
  case 9:
2547
- sheets = [];
2548
- if (!Array.isArray((_r = (_q = this.gridOption) === null || _q === void 0 ? void 0 : _q.export) === null || _r === void 0 ? void 0 : _r.sheets)) return [3 /*break*/, 18];
2549
- _10.label = 10;
2550
- case 10:
2551
- _10.trys.push([10, 16, 17, 18]);
2552
- _4 = __values(this.gridOption.export.sheets), _5 = _4.next();
2553
- _10.label = 11;
2554
- case 11:
2555
- if (!!_5.done) return [3 /*break*/, 15];
2556
- sheet = _5.value;
2557
- if (!(sheet.name && sheet.items && sheet.fields)) return [3 /*break*/, 14];
2558
- if (!Array.isArray(sheet.items)) return [3 /*break*/, 12];
2538
+ if (!!_3.done) return [3 /*break*/, 13];
2539
+ sheet = _3.value;
2540
+ if (!(sheet.name && sheet.items && sheet.fields)) return [3 /*break*/, 12];
2541
+ if (!Array.isArray(sheet.items)) return [3 /*break*/, 10];
2559
2542
  sheets.push({
2560
2543
  name: sheet.name,
2561
2544
  items: sheet.items,
2562
2545
  fields: sheet.fields
2563
2546
  });
2564
- return [3 /*break*/, 14];
2565
- case 12:
2566
- _7 = (_6 = sheets).push;
2567
- _8 = {
2547
+ return [3 /*break*/, 12];
2548
+ case 10:
2549
+ _5 = (_4 = sheets).push;
2550
+ _6 = {
2568
2551
  name: sheet.name
2569
2552
  };
2570
2553
  return [4 /*yield*/, sheet.items()];
2571
- case 13:
2572
- _7.apply(_6, [(_8.items = _10.sent(),
2573
- _8.fields = sheet.fields,
2574
- _8)]);
2575
- _10.label = 14;
2554
+ case 11:
2555
+ _5.apply(_4, [(_6.items = _8.sent(),
2556
+ _6.fields = sheet.fields,
2557
+ _6)]);
2558
+ _8.label = 12;
2559
+ case 12:
2560
+ _3 = _2.next();
2561
+ return [3 /*break*/, 9];
2562
+ case 13: return [3 /*break*/, 16];
2576
2563
  case 14:
2577
- _5 = _4.next();
2578
- return [3 /*break*/, 11];
2579
- case 15: return [3 /*break*/, 18];
2580
- case 16:
2581
- e_5_1 = _10.sent();
2564
+ e_5_1 = _8.sent();
2582
2565
  e_5 = { error: e_5_1 };
2583
- return [3 /*break*/, 18];
2584
- case 17:
2566
+ return [3 /*break*/, 16];
2567
+ case 15:
2585
2568
  try {
2586
- if (_5 && !_5.done && (_9 = _4.return)) _9.call(_4);
2569
+ if (_3 && !_3.done && (_7 = _2.return)) _7.call(_2);
2587
2570
  }
2588
2571
  finally { if (e_5) throw e_5.error; }
2589
2572
  return [7 /*endfinally*/];
2590
- case 18: return [4 /*yield*/, this.exportService.export({
2573
+ case 16: return [4 /*yield*/, this.exportService.export({
2591
2574
  columns: columns_2,
2592
2575
  items: items_1,
2593
- fileName: (_t = (_s = this.gridOption) === null || _s === void 0 ? void 0 : _s.export) === null || _t === void 0 ? void 0 : _t.fileName,
2576
+ fileName: (_r = (_q = this.gridOption) === null || _q === void 0 ? void 0 : _q.export) === null || _r === void 0 ? void 0 : _r.fileName,
2594
2577
  sheets: sheets
2595
2578
  })];
2596
- case 19:
2597
- _10.sent();
2579
+ case 17:
2580
+ _8.sent();
2598
2581
  return [2 /*return*/];
2599
- case 20: return [4 /*yield*/, this.exportService.exportByTemplate({
2582
+ case 18: return [4 /*yield*/, this.exportService.exportByTemplate({
2600
2583
  filePath: file.filePath,
2601
2584
  fileName: file.fileName,
2602
2585
  columns: columns_2,
2603
2586
  items: items_1
2604
2587
  })];
2605
- case 21:
2606
- _10.sent();
2607
- return [3 /*break*/, 23];
2608
- case 22:
2588
+ case 19:
2589
+ _8.sent();
2590
+ return [3 /*break*/, 21];
2591
+ case 20:
2609
2592
  this.isExporting = false;
2610
2593
  this.exportTitle = "Export";
2611
2594
  this.ref.detectChanges();
2612
2595
  return [7 /*endfinally*/];
2613
- case 23: return [2 /*return*/];
2596
+ case 21: return [2 /*return*/];
2614
2597
  }
2615
2598
  });
2616
2599
  }); });
2617
2600
  this.onExport = function (args) { return __awaiter(_this, void 0, void 0, function () {
2618
- var translate;
2619
- return __generator(this, function (_4) {
2620
- translate = this.translateService.translate;
2621
- if (!args.isCSV && this.gridOption.export.max && this.total > this.gridOption.export.max) {
2622
- args.isRaw = true;
2623
- __classPrivateFieldGet(this, _onExport).call(this, args);
2624
- // this.notifyService.confirm(translate(`Total rows reach limit, do you want to export CSV`)).then(() => {
2625
- // args.isCSV = true;
2626
- // this.#onExport(args);
2627
- // });
2628
- return [2 /*return*/];
2629
- }
2601
+ return __generator(this, function (_2) {
2630
2602
  __classPrivateFieldGet(this, _onExport).call(this, args);
2631
2603
  return [2 /*return*/];
2632
2604
  });
@@ -2636,9 +2608,9 @@
2636
2608
  _this.reload(false);
2637
2609
  };
2638
2610
  this.onExpand = function (rowData) { return __awaiter(_this, void 0, void 0, function () {
2639
- var _x, _y, _z, _0, _1, data;
2640
- return __generator(this, function (_4) {
2641
- if ((_x = this.gridOption.subInformation) === null || _x === void 0 ? void 0 : _x.always) {
2611
+ var _v, _w, _x, _y, _z, data;
2612
+ return __generator(this, function (_2) {
2613
+ if ((_v = this.gridOption.subInformation) === null || _v === void 0 ? void 0 : _v.always) {
2642
2614
  return [2 /*return*/];
2643
2615
  }
2644
2616
  if (rowData.isExpanding) {
@@ -2648,8 +2620,8 @@
2648
2620
  rowData.isExpanded = false;
2649
2621
  return [2 /*return*/];
2650
2622
  }
2651
- data = (_0 = (_z = (_y = this.gridOption) === null || _y === void 0 ? void 0 : _y.subInformation) === null || _z === void 0 ? void 0 : _z.onExpand) === null || _0 === void 0 ? void 0 : _0.call(_z, rowData);
2652
- if (!((_1 = this.gridOption.subInformation) === null || _1 === void 0 ? void 0 : _1.multiple)) {
2623
+ data = (_y = (_x = (_w = this.gridOption) === null || _w === void 0 ? void 0 : _w.subInformation) === null || _x === void 0 ? void 0 : _x.onExpand) === null || _y === void 0 ? void 0 : _y.call(_x, rowData);
2624
+ if (!((_z = this.gridOption.subInformation) === null || _z === void 0 ? void 0 : _z.multiple)) {
2653
2625
  this.items.forEach(function (item) { return item.isExpanding = item.isExpanded = false; });
2654
2626
  }
2655
2627
  if (data instanceof Promise) {
@@ -2722,7 +2694,7 @@
2722
2694
  };
2723
2695
  this.onCreate = function () {
2724
2696
  var _a, _b;
2725
- var _4 = _this.gridOption, type = _4.type, editor = _4.editor, columns = _4.columns;
2697
+ var _2 = _this.gridOption, type = _2.type, editor = _2.editor, columns = _2.columns;
2726
2698
  if (!(editor === null || editor === void 0 ? void 0 : editor.addable)) {
2727
2699
  return;
2728
2700
  }
@@ -2778,23 +2750,23 @@
2778
2750
  };
2779
2751
  this.onSave = function (item) { return __awaiter(_this, void 0, void 0, function () {
2780
2752
  var editor, result, message, result, err_1;
2781
- return __generator(this, function (_4) {
2782
- switch (_4.label) {
2753
+ return __generator(this, function (_2) {
2754
+ switch (_2.label) {
2783
2755
  case 0:
2784
2756
  if (item.editorHandlerRow.saving) {
2785
2757
  return [2 /*return*/];
2786
2758
  }
2787
2759
  editor = this.gridOption.editor;
2788
- _4.label = 1;
2760
+ _2.label = 1;
2789
2761
  case 1:
2790
- _4.trys.push([1, 7, 8, 9]);
2762
+ _2.trys.push([1, 7, 8, 9]);
2791
2763
  item.editorHandlerRow.saving = true;
2792
2764
  if (!editor.validate) return [3 /*break*/, 4];
2793
2765
  result = editor.validate(item, this.items.indexOf(item));
2794
2766
  if (!(result instanceof Promise)) return [3 /*break*/, 3];
2795
2767
  return [4 /*yield*/, result];
2796
2768
  case 2:
2797
- message = _4.sent();
2769
+ message = _2.sent();
2798
2770
  if (message) {
2799
2771
  throw message;
2800
2772
  }
@@ -2803,15 +2775,15 @@
2803
2775
  if (result) {
2804
2776
  throw result;
2805
2777
  }
2806
- _4.label = 4;
2778
+ _2.label = 4;
2807
2779
  case 4:
2808
2780
  if (!editor.onSave) return [3 /*break*/, 6];
2809
2781
  result = editor.onSave(item);
2810
2782
  if (!(result instanceof Promise)) return [3 /*break*/, 6];
2811
2783
  return [4 /*yield*/, result];
2812
2784
  case 5:
2813
- _4.sent();
2814
- _4.label = 6;
2785
+ _2.sent();
2786
+ _2.label = 6;
2815
2787
  case 6:
2816
2788
  if (item.editorStatus === 'create' && editor.type === 'popup') {
2817
2789
  if (this.gridOption.type === 'local') {
@@ -2822,7 +2794,7 @@
2822
2794
  item.editorStatus = undefined;
2823
2795
  return [3 /*break*/, 9];
2824
2796
  case 7:
2825
- err_1 = _4.sent();
2797
+ err_1 = _2.sent();
2826
2798
  this.notifyService.notify.warning(err_1);
2827
2799
  return [3 /*break*/, 9];
2828
2800
  case 8:
@@ -2873,9 +2845,9 @@
2873
2845
  _this.ref.detectChanges();
2874
2846
  };
2875
2847
  this.onRemove = function (item) { return __awaiter(_this, void 0, void 0, function () {
2876
- var _2, _3, editor, beforeRemove, result, idx2, idx1;
2877
- return __generator(this, function (_4) {
2878
- switch (_4.label) {
2848
+ var _0, _1, editor, beforeRemove, result, idx2, idx1;
2849
+ return __generator(this, function (_2) {
2850
+ switch (_2.label) {
2879
2851
  case 0:
2880
2852
  editor = this.gridOption.editor;
2881
2853
  if (!(editor === null || editor === void 0 ? void 0 : editor.beforeRemove)) return [3 /*break*/, 3];
@@ -2883,7 +2855,7 @@
2883
2855
  if (!(beforeRemove instanceof Promise)) return [3 /*break*/, 2];
2884
2856
  return [4 /*yield*/, beforeRemove];
2885
2857
  case 1:
2886
- result = _4.sent();
2858
+ result = _2.sent();
2887
2859
  if (!result) {
2888
2860
  return [2 /*return*/];
2889
2861
  }
@@ -2892,7 +2864,7 @@
2892
2864
  if (!beforeRemove) {
2893
2865
  return [2 /*return*/];
2894
2866
  }
2895
- _4.label = 3;
2867
+ _2.label = 3;
2896
2868
  case 3:
2897
2869
  if (editor.type === 'inline') {
2898
2870
  if (this.gridOption.type === 'local') {
@@ -2904,10 +2876,10 @@
2904
2876
  this.items.splice(idx1, 1);
2905
2877
  this.items = __spread(this.items);
2906
2878
  if (this.gridOption.type === 'local') {
2907
- (_2 = editor === null || editor === void 0 ? void 0 : editor.onRemove) === null || _2 === void 0 ? void 0 : _2.call(editor, item, __classPrivateFieldGet(this, _localItems));
2879
+ (_0 = editor === null || editor === void 0 ? void 0 : editor.onRemove) === null || _0 === void 0 ? void 0 : _0.call(editor, item, __classPrivateFieldGet(this, _localItems));
2908
2880
  }
2909
2881
  else {
2910
- (_3 = editor === null || editor === void 0 ? void 0 : editor.onRemove) === null || _3 === void 0 ? void 0 : _3.call(editor, item, this.items);
2882
+ (_1 = editor === null || editor === void 0 ? void 0 : editor.onRemove) === null || _1 === void 0 ? void 0 : _1.call(editor, item, this.items);
2911
2883
  }
2912
2884
  this.ref.detectChanges();
2913
2885
  return [2 /*return*/];
@@ -3034,13 +3006,13 @@
3034
3006
  return data.source === 'INITIALIZE';
3035
3007
  }), operators.switchMap(function (data) { return __awaiter(_this, void 0, void 0, function () {
3036
3008
  var filterInfo, result;
3037
- return __generator(this, function (_4) {
3038
- switch (_4.label) {
3009
+ return __generator(this, function (_2) {
3010
+ switch (_2.label) {
3039
3011
  case 0:
3040
3012
  filterInfo = __classPrivateFieldGet(this, _getFilter).call(this);
3041
3013
  return [4 /*yield*/, __classPrivateFieldGet(this, _load$1).call(this, filterInfo, !__classPrivateFieldGet(this, _loadCompleted) || data.force)];
3042
3014
  case 1:
3043
- result = _4.sent();
3015
+ result = _2.sent();
3044
3016
  __classPrivateFieldSet(this, _loadCompleted, true);
3045
3017
  return [2 /*return*/, result];
3046
3018
  }
@@ -3121,7 +3093,7 @@
3121
3093
  SdGridMaterial.decorators = [
3122
3094
  { type: core.Component, args: [{
3123
3095
  selector: 'sd-grid-material',
3124
- template: "<ng-container *ngIf=\"gridConfigurationObserver | async as gridConfiguration\">\r\n <ng-container *ngIf=\"\r\n gridConfiguration\r\n | sdGridConfigurationResult\r\n : gridOption\r\n : sdSubInformation as configuration\r\n \">\r\n <sd-grid-filter *ngIf=\"!gridOption.filter?.disabled\" [filter]=\"gridOption?.filter\"\r\n [columns]=\"configuration.firstColumns\" [filterDefs]=\"filterDefs\">\r\n </sd-grid-filter>\r\n <ng-container *ngIf=\"items | sdGroup:gridOption; $implicit as groupedItems\">\r\n <div class=\"c-container {{ gridOption?.style?.grid }}\" [ngClass]=\"{ 'mat-elevation-z2': gridOption?.shadow }\">\r\n <div class=\"c-loading\" *ngIf=\"isLoading\">\r\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\r\n </div>\r\n <ng-container>\r\n <div class=\"c-table\" sdScroll [ngStyle]=\"{\r\n 'max-height': gridOption?.maxHeight,\r\n 'min-height': gridOption?.minHeight\r\n }\">\r\n <table *ngIf=\"items?.length; else elseEmpty\" mat-table [dataSource]=\"groupedItems\" matSort\r\n [matSortDisabled]=\"!gridOption.sortable\" cdkDropList cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"!gridOption.dropDragColumnEnable\"\r\n (cdkDropListDropped)=\"drop($event, configuration.displayedColumns)\" multiTemplateDataRows>\r\n\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"gridOption?.subInformation?.always;else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdSubInformation.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdSubInformation.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button *ngIf=\"!element.isExpanding && !gridOption?.subInformation?.always\" mat-icon-button\r\n aria-label=\"Expand & Collapse\" (click)=\"onExpand(element)\">\r\n <mat-icon *ngIf=\"!element.isExpanded\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"element.isExpanded\">expand_less</mat-icon>\r\n </button>\r\n <div *ngIf=\"element.isExpanding\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"text-center px-15\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <ng-container *ngIf=\"items | selectionVisibleSelectAll: gridOption?.selection | async\">\r\n <mat-checkbox *ngIf=\"!gridOption.selection?.single\" class=\"c-selection\" color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\" (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n </ng-container>\r\n\r\n </th>\r\n <td class=\"text-center px-15\" mat-cell *matCellDef=\"let item\" style=\"min-width: 50px; max-width: 50px\">\r\n <ng-container *ngIf=\"item | selectionVisible:gridOption?.selection\">\r\n <mat-checkbox class=\"c-selection\" color=\"primary\" [(ngModel)]=\"item.isSelected\"\r\n (change)=\"onSelect(item)\" [disabled]=\"\r\n selectedItems | selectionDisable: item:gridOption?.selection\r\n \">\r\n </mat-checkbox>\r\n </ng-container>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditorValidation\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 2px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0 position-relative\" mat-cell *matCellDef=\"let item; index as idx\">\r\n <sd-desktop-editor-validation [sdId]=\"item.sdId\" [item]=\"item\" [items]=\"items\"\r\n [gridOption]=\"gridOption\">\r\n </sd-desktop-editor-validation>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditor\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <button class=\"c-btn-add\"\r\n *ngIf=\"gridOption.editor?.addable && (!gridOption.editor.limit || gridOption.editor.limit > items.length)\"\r\n (click)=\"onCreate()\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon-add\">add</mat-icon>\r\n </button>\r\n </th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item; index as idx\">\r\n <ng-container *sdLet=\"item.editorStatus | sdEditorHandlerRow:item:gridOption as editorHandler\">\r\n <div *ngIf=\"editorHandler\" class=\"d-flex align-items-center justify-content-center\">\r\n <button *ngIf=\"editorHandler.editable\" class=\"mx-2\" (click)=\"onUpdate(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">edit</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.removable\" class=\"mx-2\" (click)=\"onRemove(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">delete</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.savable\" class=\"mx-2\" (click)=\"onSave(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">save</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.cancelable\" class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command [commands]=\"gridOption.commands\" [item]=\"item\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\"\r\n [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | safeHtml\">\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns; let i = index\"\r\n [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef cdkDrag class=\"px-8 py-8 c-th\"\r\n [ngStyle]=\"{ 'min-width': configuration.firstColumns[i].width }\" [attr.rowspan]=\"\r\n configuration.multipleHeader && column.type !== 'children-col'\r\n ? 2\r\n : 1\r\n \" [attr.colspan]=\"\r\n column.type === 'children-col' ? column.children?.length : 1\r\n \">\r\n <div>\r\n <div aria-hidden=\"false\" role=\"presentation\" mat-sort-header [disabled]=\"\r\n !column.sortable || column.type === 'children-col'\r\n \" [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"configuration.firstColumns[i].titleHtml || configuration.firstColumns[i].title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell class=\"d-block px-8\" *ngIf=\"!item?.sdGroup\" [sdId]=\"item.sdId\" [key]=\"key\"\r\n [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [idx]=\"i\" [cellDef]=\"cellDef\"\r\n [gridOption]=\"gridOption\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n footerDef[column.field].templateRef;\r\n context: { items: items, column: column }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns; let i = index\"\r\n [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"c-th px-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell class=\"d-block px-8\" [sdId]=\"item.sdId\" [key]=\"key\" [value]=\"item[column.field]\"\r\n [column]=\"column\" [item]=\"item\" [idx]=\"i\" [cellDef]=\"cellDef\" [gridOption]=\"gridOption\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n footerDef[column.field].templateRef;\r\n context: { items: items, column: column }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\">\r\n </tr>\r\n <ng-container *ngIf=\"configuration.secondHeaders?.length\">\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\">\r\n </tr>\r\n </ng-container>\r\n <tr mat-row *matRowDef=\"let row; columns: configuration.displayedColumns\" matRipple class=\"c-row\"\r\n [class.selected]=\"row.isSelected\" [style]=\"row | sdStyleRowCss:gridOption\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n <ng-container *ngIf=\"hasFooter && configuration.displayedFooters?.length\">\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n </ng-container>\r\n </table>\r\n <ng-template #elseEmpty>\r\n <table mat-table [dataSource]=\"[{}]\">\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"px-15\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditorValidation\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 4px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\">\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditor\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <button class=\"c-btn-add\"\r\n *ngIf=\"gridOption.editor?.addable && (!gridOption.editor.limit || gridOption.editor.limit > items.length)\"\r\n (click)=\"onCreate()\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon-add\">add</mat-icon>\r\n </button>\r\n </th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th class=\"px-8\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEmpty\">\r\n <td class=\"c-empty\" mat-cell *matCellDef=\"let item\"\r\n [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdEmptyData?.templateRef; else sdEmptyDataNoRef\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdEmptyData.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #sdEmptyDataNoRef>\r\n <mat-icon fontSet=\"material-icons-outlined\">leaderboard</mat-icon>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\">\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.columns\" [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns; let i = index\"\r\n [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': configuration.firstColumns[i].width }\" [attr.rowspan]=\"\r\n configuration.multipleHeader &&\r\n column.type !== 'children-col'\r\n ? 2\r\n : 1\r\n \" [attr.colspan]=\"\r\n column.type === 'children-col' ? column.children?.length : 1\r\n \">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"configuration.firstColumns[i].titleHtml || configuration.firstColumns[i].title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\"></sd-column-inline-filter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns\" [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\"></sd-column-inline-filter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\">\r\n </tr>\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\">\r\n </tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdEmpty']\"></tr>\r\n </table>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <sd-button *ngIf=\"\r\n !gridOption.filter?.disabled && !gridOption.filter?.inlineColumn\r\n \" class=\"mr-10\" [title]=\"'Filter' | sdTranslate\" icon=\"filter_alt\" size=\"sm\" (action)=\"gridFilter.open()\"\r\n type=\"link\">\r\n </sd-button>\r\n <sd-button *ngIf=\"gridOption.reload?.visible\" class=\"mr-10\" [title]=\"'Reload' | sdTranslate\" icon=\"refresh\"\r\n size=\"sm\" (action)=\"reload()\" [disabled]=\"!items?.length\" type=\"link\">\r\n </sd-button>\r\n <ng-container *ngIf=\"gridOption.export?.visible && items?.length\">\r\n <ng-container *ngIf=\"isExporting; else unExporting\">\r\n <sd-button class=\"mr-10\" [loading]=\"isExporting\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\"\r\n size=\"sm\" type=\"link\">\r\n </sd-button>\r\n </ng-container>\r\n <ng-template #unExporting>\r\n <sd-button class=\"mr-10\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\"\r\n [matMenuTriggerFor]=\"menu\" type=\"link\">\r\n </sd-button>\r\n </ng-template>\r\n\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngIf=\"gridOption.export?.visibleExcel !== false\" mat-menu-item\r\n (click)=\"sdPopupExport.exportDefault()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> {{ \"Export excel\" | sdTranslate }}</span>\r\n </button>\r\n <button *ngIf=\"gridOption.export?.visibleExcelRaw !== false\" mat-menu-item\r\n (click)=\"sdPopupExport.exportRaw()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> {{ \"Export excel raw\" | sdTranslate }}</span>\r\n </button>\r\n <button *ngIf=\"gridOption.export?.visibleCSV !== false\" mat-menu-item\r\n (click)=\"sdPopupExport.exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> {{ \"Export CSV\" | sdTranslate }}</span>\r\n </button>\r\n <button *ngIf=\"gridOption.export?.key\" mat-menu-item (click)=\"sdPopupExport.open()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">settings</mat-icon>\r\n <span> {{ \"Configure\" | sdTranslate }}</span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <sd-button *ngIf=\"gridOption.config?.visible\" class=\"mr-10\" [title]=\"'Configure' | sdTranslate\"\r\n icon=\"settings\" size=\"sm\" (action)=\"popupGridConfiguration.open()\" type=\"link\">\r\n </sd-button>\r\n </div>\r\n <mat-paginator [class.d-none]=\"gridOption.paginate?.hidden\" [length]=\"total\"\r\n [pageSize]=\"gridOption.paginate?.pageSize\" [pageSizeOptions]=\"gridOption.paginate?.pages\"\r\n [showFirstLastButtons]=\"gridOption.paginate?.showFirstLastButtons\"></mat-paginator>\r\n </div>\r\n </div>\r\n <sd-grid-quick-action [gridOption]=\"gridOption\" [selectedItems]=\"selectedItems\"\r\n (clear)=\"onClearSelection(groupedItems)\">\r\n </sd-grid-quick-action>\r\n <sd-popup-export *ngIf=\"gridOption.export?.visible\" [configuration]=\"configuration\" [gridOption]=\"gridOption\"\r\n (export)=\"onExport($event)\" #sdPopupExport>\r\n </sd-popup-export>\r\n <sd-popup-grid-configuration [gridOption]=\"gridOption\" [key]=\"key\" #popupGridConfiguration>\r\n </sd-popup-grid-configuration>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>",
3096
+ template: "<ng-container *ngIf=\"gridConfigurationObserver | async as gridConfiguration\">\r\n <ng-container *ngIf=\"\r\n gridConfiguration\r\n | sdGridConfigurationResult\r\n : gridOption\r\n : sdSubInformation as configuration\r\n \">\r\n <sd-grid-filter *ngIf=\"!gridOption.filter?.disabled\" [filter]=\"gridOption?.filter\"\r\n [columns]=\"configuration.firstColumns\" [filterDefs]=\"filterDefs\">\r\n </sd-grid-filter>\r\n <ng-container *ngIf=\"items | sdGroup:gridOption; $implicit as groupedItems\">\r\n <div class=\"c-container {{ gridOption?.style?.grid }}\" [ngClass]=\"{ 'mat-elevation-z2': gridOption?.shadow }\">\r\n <div class=\"c-loading\" *ngIf=\"isLoading\">\r\n <mat-spinner *ngIf=\"isLoading\"></mat-spinner>\r\n </div>\r\n <ng-container>\r\n <div class=\"c-table\" sdScroll [ngStyle]=\"{\r\n 'max-height': gridOption?.maxHeight,\r\n 'min-height': gridOption?.minHeight\r\n }\">\r\n <table *ngIf=\"items?.length; else elseEmpty\" mat-table [dataSource]=\"groupedItems\" matSort\r\n [matSortDisabled]=\"!gridOption.sortable\" cdkDropList cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"!gridOption.dropDragColumnEnable\"\r\n (cdkDropListDropped)=\"drop($event, configuration.displayedColumns)\" multiTemplateDataRows>\r\n\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"gridOption?.subInformation?.always;else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdSubInformation.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdSubInformation.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button *ngIf=\"!element.isExpanding && !gridOption?.subInformation?.always\" mat-icon-button\r\n aria-label=\"Expand & Collapse\" (click)=\"onExpand(element)\">\r\n <mat-icon *ngIf=\"!element.isExpanded\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"element.isExpanded\">expand_less</mat-icon>\r\n </button>\r\n <div *ngIf=\"element.isExpanding\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"text-center px-15\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <ng-container *ngIf=\"items | selectionVisibleSelectAll: gridOption?.selection | async\">\r\n <mat-checkbox *ngIf=\"!gridOption.selection?.single\" class=\"c-selection\" color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\" (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n </ng-container>\r\n\r\n </th>\r\n <td class=\"text-center px-15\" mat-cell *matCellDef=\"let item\" style=\"min-width: 50px; max-width: 50px\">\r\n <ng-container *ngIf=\"item | selectionVisible:gridOption?.selection\">\r\n <mat-checkbox class=\"c-selection\" color=\"primary\" [(ngModel)]=\"item.isSelected\"\r\n (change)=\"onSelect(item)\" [disabled]=\"\r\n selectedItems | selectionDisable: item:gridOption?.selection\r\n \">\r\n </mat-checkbox>\r\n </ng-container>\r\n\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditorValidation\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 2px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0 position-relative\" mat-cell *matCellDef=\"let item; index as idx\">\r\n <sd-desktop-editor-validation [sdId]=\"item.sdId\" [item]=\"item\" [items]=\"items\"\r\n [gridOption]=\"gridOption\">\r\n </sd-desktop-editor-validation>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditor\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <button class=\"c-btn-add\"\r\n *ngIf=\"gridOption.editor?.addable && (!gridOption.editor.limit || gridOption.editor.limit > items.length)\"\r\n (click)=\"onCreate()\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon-add\">add</mat-icon>\r\n </button>\r\n </th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item; index as idx\">\r\n <ng-container *sdLet=\"item.editorStatus | sdEditorHandlerRow:item:gridOption as editorHandler\">\r\n <div *ngIf=\"editorHandler\" class=\"d-flex align-items-center justify-content-center\">\r\n <button *ngIf=\"editorHandler.editable\" class=\"mx-2\" (click)=\"onUpdate(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">edit</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.removable\" class=\"mx-2\" (click)=\"onRemove(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">delete</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.savable\" class=\"mx-2\" (click)=\"onSave(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">save</mat-icon>\r\n </button>\r\n <button *ngIf=\"editorHandler.cancelable\" class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command [commands]=\"gridOption.commands\" [item]=\"item\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\"\r\n [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | safeHtml\">\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns; let i = index\"\r\n [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef cdkDrag class=\"px-8 py-8 c-th\"\r\n [ngStyle]=\"{ 'min-width': configuration.firstColumns[i].width }\" [attr.rowspan]=\"\r\n configuration.multipleHeader && column.type !== 'children-col'\r\n ? 2\r\n : 1\r\n \" [attr.colspan]=\"\r\n column.type === 'children-col' ? column.children?.length : 1\r\n \">\r\n <div>\r\n <div aria-hidden=\"false\" role=\"presentation\" mat-sort-header [disabled]=\"\r\n !column.sortable || column.type === 'children-col'\r\n \" [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"configuration.firstColumns[i].titleHtml || configuration.firstColumns[i].title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell class=\"d-block px-8\" *ngIf=\"!item?.sdGroup\" [sdId]=\"item.sdId\" [key]=\"key\"\r\n [value]=\"item[column.field]\" [column]=\"column\" [item]=\"item\" [idx]=\"i\" [cellDef]=\"cellDef\"\r\n [gridOption]=\"gridOption\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n footerDef[column.field].templateRef;\r\n context: { items: items, column: column }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns; let i = index\"\r\n [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"c-th px-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell class=\"d-block px-8\" [sdId]=\"item.sdId\" [key]=\"key\" [value]=\"item[column.field]\"\r\n [column]=\"column\" [item]=\"item\" [idx]=\"i\" [cellDef]=\"cellDef\" [gridOption]=\"gridOption\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n footerDef[column.field].templateRef;\r\n context: { items: items, column: column }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\">\r\n </tr>\r\n <ng-container *ngIf=\"configuration.secondHeaders?.length\">\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\">\r\n </tr>\r\n </ng-container>\r\n <tr mat-row *matRowDef=\"let row; columns: configuration.displayedColumns\" matRipple class=\"c-row\"\r\n [class.selected]=\"row.isSelected\" [style]=\"row | sdStyleRowCss:gridOption\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n <ng-container *ngIf=\"hasFooter && configuration.displayedFooters?.length\">\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n </ng-container>\r\n </table>\r\n <ng-template #elseEmpty>\r\n <table mat-table [dataSource]=\"[{}]\">\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th class=\"px-15\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditorValidation\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 4px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\">\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEditor\">\r\n <th class=\"px-8 py-8\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <button class=\"c-btn-add\"\r\n *ngIf=\"gridOption.editor?.addable && (!gridOption.editor.limit || gridOption.editor.limit > items.length)\"\r\n (click)=\"onCreate()\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon-add\">add</mat-icon>\r\n </button>\r\n </th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th class=\"px-8\" mat-header-cell *matHeaderCellDef style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\">\r\n <th class=\"p-0\" mat-header-cell *matHeaderCellDef style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdEmpty\">\r\n <td class=\"c-empty\" mat-cell *matCellDef=\"let item\"\r\n [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdEmptyData?.templateRef; else sdEmptyDataNoRef\">\r\n <ng-container *ngTemplateOutlet=\"\r\n sdEmptyData.templateRef;\r\n context: { item: item }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #sdEmptyDataNoRef>\r\n <mat-icon fontSet=\"material-icons-outlined\">leaderboard</mat-icon>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n </th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\">\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.columns\" [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns; let i = index\"\r\n [matColumnDef]=\"column.field\" [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': configuration.firstColumns[i].width }\" [attr.rowspan]=\"\r\n configuration.multipleHeader &&\r\n column.type !== 'children-col'\r\n ? 2\r\n : 1\r\n \" [attr.colspan]=\"\r\n column.type === 'children-col' ? column.children?.length : 1\r\n \">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"configuration.firstColumns[i].titleHtml || configuration.firstColumns[i].title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\"></sd-column-inline-filter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns\" [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\"\r\n [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\" [innerHTML]=\"column.titleHtml || column.title\">\r\n </div>\r\n <sd-column-inline-filter *ngIf=\"gridOption.filter?.inlineColumn\"\r\n [value]=\"columnFilter[column.field]\" [columnFilter]=\"columnFilter\" [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\"></sd-column-inline-filter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\">\r\n </tr>\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\">\r\n </tr>\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdEmpty']\"></tr>\r\n </table>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <sd-button *ngIf=\"\r\n !gridOption.filter?.disabled && !gridOption.filter?.inlineColumn\r\n \" class=\"mr-10\" [title]=\"'Filter' | sdTranslate\" icon=\"filter_alt\" size=\"sm\" (action)=\"gridFilter.open()\"\r\n type=\"link\">\r\n </sd-button>\r\n <sd-button *ngIf=\"gridOption.reload?.visible\" class=\"mr-10\" [title]=\"'Reload' | sdTranslate\" icon=\"refresh\"\r\n size=\"sm\" (action)=\"reload()\" [disabled]=\"!items?.length\" type=\"link\">\r\n </sd-button>\r\n <ng-container *ngIf=\"gridOption.export?.visible && items?.length\">\r\n <ng-container *ngIf=\"isExporting; else unExporting\">\r\n <sd-button class=\"mr-10\" [loading]=\"isExporting\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\"\r\n size=\"sm\" type=\"link\">\r\n </sd-button>\r\n </ng-container>\r\n <ng-template #unExporting>\r\n <sd-button class=\"mr-10\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\"\r\n [matMenuTriggerFor]=\"menu\" type=\"link\">\r\n </sd-button>\r\n </ng-template>\r\n\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngIf=\"gridOption.export?.visibleExcel !== false\" mat-menu-item\r\n (click)=\"sdPopupExport.exportDefault()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> {{ \"Export excel\" | sdTranslate }}</span>\r\n </button>\r\n <button *ngIf=\"gridOption.export?.visibleCSV !== false\" mat-menu-item\r\n (click)=\"sdPopupExport.exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> {{ \"Export CSV\" | sdTranslate }}</span>\r\n </button>\r\n <button *ngIf=\"gridOption.export?.key\" mat-menu-item (click)=\"sdPopupExport.open()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">settings</mat-icon>\r\n <span> {{ \"Configure\" | sdTranslate }}</span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <sd-button *ngIf=\"gridOption.config?.visible\" class=\"mr-10\" [title]=\"'Configure' | sdTranslate\"\r\n icon=\"settings\" size=\"sm\" (action)=\"popupGridConfiguration.open()\" type=\"link\">\r\n </sd-button>\r\n </div>\r\n <mat-paginator [class.d-none]=\"gridOption.paginate?.hidden\" [length]=\"total\"\r\n [pageSize]=\"gridOption.paginate?.pageSize\" [pageSizeOptions]=\"gridOption.paginate?.pages\"\r\n [showFirstLastButtons]=\"gridOption.paginate?.showFirstLastButtons\"></mat-paginator>\r\n </div>\r\n </div>\r\n <sd-grid-quick-action [gridOption]=\"gridOption\" [selectedItems]=\"selectedItems\"\r\n (clear)=\"onClearSelection(groupedItems)\">\r\n </sd-grid-quick-action>\r\n <sd-popup-export *ngIf=\"gridOption.export?.visible\" [configuration]=\"configuration\" [gridOption]=\"gridOption\"\r\n (export)=\"onExport($event)\" #sdPopupExport>\r\n </sd-popup-export>\r\n <sd-popup-grid-configuration [gridOption]=\"gridOption\" [key]=\"key\" #popupGridConfiguration>\r\n </sd-popup-grid-configuration>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>",
3125
3097
  animations: [
3126
3098
  animations.trigger('detailExpand', [
3127
3099
  animations.state('collapsed', animations.style({ height: '0', minHeight: '0', visibility: 'hidden' })),