@sd-angular/core 0.0.920 → 0.0.924
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sd-angular-core-grid-material.umd.js +10 -9
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell/desktop-cell.component.js +2 -2
- package/esm2015/grid-material/src/lib/grid-material.component.js +5 -5
- package/esm2015/grid-material/src/lib/pipes/editor-handler-column.pipe.js +2 -1
- package/esm2015/grid-material/src/lib/services/grid-configuration.service.js +5 -5
- package/fesm2015/sd-angular-core-grid-material.js +10 -9
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-0.0.920.tgz → sd-angular-core-0.0.924.tgz} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
2
|
export class SdEditorHandlerColumnPipe {
|
|
3
3
|
transform(value, item, column, gridOption) {
|
|
4
|
+
console.log(item);
|
|
4
5
|
if (column.type === 'children' || column.type === 'children-col') {
|
|
5
6
|
return true;
|
|
6
7
|
}
|
|
@@ -36,4 +37,4 @@ SdEditorHandlerColumnPipe.decorators = [
|
|
|
36
37
|
name: 'sdEditorHandlerColumn'
|
|
37
38
|
},] }
|
|
38
39
|
];
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhhbmRsZXItY29sdW1uLnBpcGUuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9waXBlcy9lZGl0b3ItaGFuZGxlci1jb2x1bW4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU9wRCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFNBQVMsQ0FBQyxLQUFVLEVBQUUsSUFBWSxFQUFFLE1BQTRCLEVBQUUsVUFBZ0M7UUFDaEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBeUIsRUFBRSxFQUFFOztZQUM1QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO2dCQUMxRCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBRXZCLHlDQUF5QztZQUN6QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQzVHO1lBQ0QsK0JBQStCO1lBQy9CLElBQUksVUFBVSxFQUFFO2dCQUNkLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUM1QixPQUFPLENBQUMsUUFBQyxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE1BQU0sQ0FBQSxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztRQUMxRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtDQUFDLE1BQU0sQ0FBQyxNQUFNLDBDQUFFLGNBQWMsMENBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUMsQ0FBQyxFQUFFO1lBQ2xHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1DQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUN0QyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUN0QixDQUFBO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQXJDRixJQUFJLFNBQUM7Z0JBQ0osSUFBSSxFQUFFLHVCQUF1QjthQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9ncmlkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkSXRlbSB9IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdzZEVkaXRvckhhbmRsZXJDb2x1bW4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEVkaXRvckhhbmRsZXJDb2x1bW5QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGl0ZW06IFNkSXRlbSwgY29sdW1uOiBTZEdyaWRNYXRlcmlhbENvbHVtbiwgZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pOiBib29sZWFuIHtcclxuICAgIGNvbnNvbGUubG9nKGl0ZW0pO1xyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nIHx8IGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4tY29sJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZWRpdG9yIH0gPSBncmlkT3B0aW9uO1xyXG4gICAgY29uc3QgdmlzaWJsZSA9IChjb2w6IFNkR3JpZE1hdGVyaWFsQ29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2NoaWxkcmVuJyB8fCBjb2wudHlwZSA9PT0gJ2NoaWxkcmVuLWNvbCcpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIEtp4buDbSB0cmEgeGVtIGPDsyBi4buLIGRpc2FibGVkIGhheSBraMO0bmc/XHJcbiAgICAgIGlmIChjb2wuZWRpdG9yKSB7XHJcbiAgICAgICAgaXNEaXNhYmxlZCA9IHR5cGVvZiAoY29sLmVkaXRvci5kaXNhYmxlZCkgPT09ICdmdW5jdGlvbicgPyBjb2wuZWRpdG9yLmRpc2FibGVkKGl0ZW0pIDogY29sLmVkaXRvci5kaXNhYmxlZDtcclxuICAgICAgfVxyXG4gICAgICAvLyBO4bq/dSBi4buLIGRpc2FibGVkIHJldHVybiBmYWxzZVxyXG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWRpdG9yLnR5cGUgIT09ICdpbmxpbmUnKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXRlbS5lZGl0b3JIYW5kbGVyUm93Py5zdGF0dXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgaXRlbS5lZGl0b3JIYW5kbGVyQ29sdW1uID0gaXRlbS5lZGl0b3JIYW5kbGVyQ29sdW1uIHx8IHt9O1xyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgZ3JpZE9wdGlvbi5jb2x1bW5zLmZpbHRlcihlID0+IGNvbHVtbi5lZGl0b3I/LnJlbGF0ZWRDb2x1bW5zPy5pbmNsdWRlcyhlLmZpZWxkKSkpIHtcclxuICAgICAgaXRlbS5lZGl0b3JIYW5kbGVyQ29sdW1uW2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgLi4uaXRlbS5lZGl0b3JIYW5kbGVyQ29sdW1uW2NvbC5maWVsZF0sXHJcbiAgICAgICAgdmlzaWJsZTogdmlzaWJsZShjb2wpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -255,14 +255,14 @@ export class SdGridConfigurationService {
|
|
|
255
255
|
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).SELECTION);
|
|
256
256
|
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).SELECTION);
|
|
257
257
|
}
|
|
258
|
+
if ((editor === null || editor === void 0 ? void 0 : editor.addable) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'inline' && (editor === null || editor === void 0 ? void 0 : editor.removable)) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'focus' && (editor === null || editor === void 0 ? void 0 : editor.editable)) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'popup' && (editor === null || editor === void 0 ? void 0 : editor.editable))) {
|
|
259
|
+
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
260
|
+
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
261
|
+
}
|
|
258
262
|
if (commands === null || commands === void 0 ? void 0 : commands.length) {
|
|
259
263
|
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).COMMAND);
|
|
260
264
|
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).COMMAND);
|
|
261
265
|
}
|
|
262
|
-
if (editor.addable || (editor.type === 'inline' && editor.removable) || (editor.type !== 'inline' && editor.editable)) {
|
|
263
|
-
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
264
|
-
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
265
|
-
}
|
|
266
266
|
(_a = configuration === null || configuration === void 0 ? void 0 : configuration.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.invisible).forEach(col => {
|
|
267
267
|
var _a;
|
|
268
268
|
if (col.isGeneratedColumn) {
|
|
@@ -342,4 +342,4 @@ SdGridConfigurationService.ctorParameters = () => [
|
|
|
342
342
|
{ type: SdSettingService },
|
|
343
343
|
{ type: undefined, decorators: [{ type: Inject, args: [GRID_MATERIAL_CONFIG,] }, { type: Optional }] }
|
|
344
344
|
];
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXJ2aWNlcy9ncmlkLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsb0JBQW9CLEVBQWdDLE1BQU0sb0NBQW9DLENBQUM7QUFHeEcsTUFBTSxPQUFPLDBCQUEwQjtJQVVyQyxZQUNVLGNBQWdDLEVBQ1MseUJBQXVEO1FBRGhHLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNTLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBOEI7UUFYMUcsbUJBQVc7WUFDVCxNQUFNLEVBQUUsVUFBVTtZQUNsQixjQUFjLEVBQUUsd0JBQXdCO1lBQ3hDLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFNBQVMsRUFBRSxhQUFhO1NBQ3pCLEVBQUM7UUFDRixpQkFFSSxFQUFFLEVBQUM7UUFNUCxTQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsVUFBZ0MsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxxQ0FBWSxHQUFHLENBQUMsRUFBRTtnQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7Z0JBQ25ELHFDQUFZLEdBQUcsQ0FBQyxHQUFHO29CQUNqQixJQUFJLEVBQUUseUNBQUEsSUFBSSxFQUFPLFVBQVUsRUFBRSxPQUFP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QkFDaEQ7aUJBQ0Y7WUFDSCxDQUFDLEVBQUU7WUFDSCxJQUFJLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLFdBQVcsRUFBRTtnQkFDakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsdUNBQWMsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsdUNBQWMsY0FBYyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN4RCxxQ0FBcUM7WUFDckMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssdUNBQWMsY0FBYyxDQUFDLENBQUM7WUFDdEcsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFBO0lBL1JELENBQUM7Ozs7WUFkRixVQUFVOzs7WUFSRixnQkFBZ0I7NENBcUJwQixNQUFNLFNBQUMsb0JBQW9CLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBTZFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9zZXR0aW5nJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxPcHRpb24gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZENvbHVtbkNvbmZpZ3VyYXRpb24sIFNkR3JpZENvbmZpZ3VyYXRpb24sIFNkR3JpZENvbmZpZ3VyYXRpb25DYWNoZSwgU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtc3ViLWluZm9ybWF0aW9uLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgR1JJRF9NQVRFUklBTF9DT05GSUcsIElTZEdyaWRNYXRlcmlhbENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNkR3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcclxuICAjQ09MVU1OUyA9IHtcclxuICAgIEVESVRPUjogJ3NkRWRpdG9yJyxcclxuICAgIFNVQklORk9STUFUSU9OOiAnc2RTdWJJbmZvcm1hdGlvbkFjdGlvbicsXHJcbiAgICBDT01NQU5EOiAnc2RDb21tYW5kJyxcclxuICAgIFNFTEVDVElPTjogJ3NkU2VsZWN0aW9uJ1xyXG4gIH07XHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBTZEdyaWRDb25maWd1cmF0aW9uQ2FjaGVcclxuICB9ID0ge307XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNldHRpbmdTZXJ2aWNlOiBTZFNldHRpbmdTZXJ2aWNlLFxyXG4gICAgQEluamVjdChHUklEX01BVEVSSUFMX0NPTkZJRykgQE9wdGlvbmFsKCkgcHVibGljIGdyaWRNYXRlcmlhbENvbmZpZ3VyYXRpb246IElTZEdyaWRNYXRlcmlhbENvbmZpZ3VyYXRpb24pIHtcclxuICB9XHJcblxyXG4gIGluaXQgPSAoa2V5OiBzdHJpbmcsIGdyaWRPcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuI2NhY2hlW2tleV0pIHtcclxuICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PFNkR3JpZENvbmZpZ3VyYXRpb24+KCk7XHJcbiAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgbG9hZDogdGhpcy4jbG9hZChncmlkT3B0aW9uLCBzdWJqZWN0KSxcclxuICAgICAgICBnZXQ6IHRoaXMuI2dldChncmlkT3B0aW9uKSxcclxuICAgICAgICBzZXQ6IChjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uID0gdGhpcy4jc2V0KGdyaWRPcHRpb24sIGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgc3ViamVjdC5uZXh0KHsgLi4uY29uZmlndXJhdGlvbiB9KTtcclxuICAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiNyZW1vdmUoZ3JpZE9wdGlvbikoKTtcclxuICAgICAgICAgIHN1YmplY3QubmV4dCh0aGlzLiNkZWZhdWx0KGdyaWRPcHRpb24pKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9ic2VydmVyOiBzdWJqZWN0XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVba2V5XTtcclxuICB9XHJcblxyXG4gICNnZXRLZXkgPSAoZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHByZWZpeCA9ICdjOWU5NDgzNi02YWNlLTRhZWItYjE0OC00ZjBiZTYzNTg5ZWUnO1xyXG4gICAgaWYgKCFncmlkT3B0aW9uPy5jb25maWc/LmtleSAmJiAhZ3JpZE9wdGlvbj8ua2V5KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2goe1xyXG4gICAgICBwcmVmaXgsXHJcbiAgICAgIGtleTogZ3JpZE9wdGlvbj8uY29uZmlnPy5rZXkgfHwgIWdyaWRPcHRpb24/LmtleVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAjZGVmYXVsdCA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbik6IFNkR3JpZENvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uc3QgY29sdW1uczogU2RDb2x1bW5Db25maWd1cmF0aW9uW10gPSBncmlkT3B0aW9uPy5jb2x1bW5zPy5maWx0ZXIoZSA9PiAhZS5oaWRkZW4pLm1hcChlID0+ICh7XHJcbiAgICAgIG9yaWdpbjoge1xyXG4gICAgICAgIGZpZWxkOiBlLmZpZWxkLFxyXG4gICAgICAgIHRpdGxlOiBlLnRpdGxlLFxyXG4gICAgICAgIHdpZHRoOiBlLndpZHRoLFxyXG4gICAgICAgIGludmlzaWJsZTogZS5pbnZpc2libGVcclxuICAgICAgfSxcclxuICAgICAgaW52aXNpYmxlOiBlLmludmlzaWJsZSxcclxuICAgICAgZml4ZWQ6IGZhbHNlXHJcbiAgICB9KSkgfHwgW107XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb2x1bW5zXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2xvYWQgPSAoZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24sIHN1YmplY3Q6IFN1YmplY3Q8U2RHcmlkQ29uZmlndXJhdGlvbj4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGdldCA9IHRoaXMuI2dldChncmlkT3B0aW9uKTtcclxuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGdldCgpO1xyXG4gICAgICBzdWJqZWN0Lm5leHQoeyAuLi5jb25maWd1cmF0aW9uIH0pO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXQgPSAoZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuI2dldEtleShncmlkT3B0aW9uKTtcclxuICAgICAgaWYgKCFrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jZGVmYXVsdChncmlkT3B0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGNvbmZpZyB9ID0gZ3JpZE9wdGlvbjtcclxuICAgICAgY29uc3QgeyBnZXQsIHJlbW92ZSB9ID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkQ29uZmlndXJhdGlvbj4oa2V5LCB7XHJcbiAgICAgICAgdHlwZTogY29uZmlnPy5zdG9yYWdlLFxyXG4gICAgICAgIGFyZ3M6IGNvbmZpZz8uYXJnc1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvbiA9IGF3YWl0IGdldCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgIGlmICghY29uZmlndXJhdGlvbj8uY29sdW1ucykge1xyXG4gICAgICAgIHJlbW92ZSgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNkZWZhdWx0KGdyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbmZpZ3VyYXRpb24uY29sdW1ucyA9IGNvbmZpZ3VyYXRpb24uY29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pc0dlbmVyYXRlZENvbHVtbiB8fCBjb2x1bW5zLnNvbWUoZSA9PiAhZS5oaWRkZW4gJiYgZS5maWVsZCA9PT0gY29sdW1uLm9yaWdpbi5maWVsZCkpO1xyXG4gICAgICAvLyBUaMOqbSBuaOG7r25nIGNvbHVtbiBt4bubaSB2w6BvIHN0b3JhZ2UgbuG6v3UgY8OzXHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IGNvbmZpZ3VyYXRpb24uY29sdW1ucy5maW5kKGUgPT4gZS5vcmlnaW4/LmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xyXG4gICAgICAgIGlmICghY29sKSB7XHJcbiAgICAgICAgICBjb25maWd1cmF0aW9uLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAgIG9yaWdpbjoge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gICAgICAgICAgICAgIGludmlzaWJsZTogY29sdW1uLmludmlzaWJsZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaW52aXNpYmxlOiBjb2x1bW4uaW52aXNpYmxlLFxyXG4gICAgICAgICAgICBmaXhlZDogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2wub3JpZ2luID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gICAgICAgICAgICBpbnZpc2libGU6IGNvbHVtbi5pbnZpc2libGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI3NldCA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbiwgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvbikgPT4ge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy4jZ2V0S2V5KGdyaWRPcHRpb24pO1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBjb25zdCB7IHNldCB9ID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkQ29uZmlndXJhdGlvbj4oa2V5LCB7XHJcbiAgICAgICAgdHlwZTogZ3JpZE9wdGlvbj8uY29uZmlnPy5zdG9yYWdlLFxyXG4gICAgICAgIGFyZ3M6IGdyaWRPcHRpb24/LmNvbmZpZz8uYXJnc1xyXG4gICAgICB9KTtcclxuICAgICAgc2V0KGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbikpO1xyXG4gIH1cclxuXHJcbiAgI3JlbW92ZSA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy4jZ2V0S2V5KGdyaWRPcHRpb24pO1xyXG4gICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgY29uc3QgeyByZW1vdmUgfSA9IHRoaXMuc2V0dGluZ1NlcnZpY2UuY3JlYXRlPFNkR3JpZENvbmZpZ3VyYXRpb24+KGtleSwge1xyXG4gICAgICAgICAgdHlwZTogZ3JpZE9wdGlvbj8uY29uZmlnPy5zdG9yYWdlLFxyXG4gICAgICAgICAgYXJnczogZ3JpZE9wdGlvbj8uY29uZmlnPy5hcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgPSBhc3luYyAoZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pOiBQcm9taXNlPFNkR3JpZENvbmZpZ3VyYXRpb24+ID0+IHtcclxuICAvLyAgIGlmICghZ3JpZE9wdGlvbj8ua2V5KSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLiNnZXREZWZhdWx0Q29uZmlndXJhdGlvbihncmlkT3B0aW9uKTtcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IHsga2V5LCBjb2x1bW5zIH0gPSBncmlkT3B0aW9uO1xyXG4gIC8vICAgY29uc3QgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvbiA9IGF3YWl0IHRoaXMuc2V0dGluZ1NlcnZpY2UuZ2V0KHRoaXMuI2dldEtleShrZXkpKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gIC8vICAgaWYgKCFjb25maWd1cmF0aW9uPy5jb2x1bW5zKSB7XHJcbiAgLy8gICAgIHRoaXMuc2V0dGluZ1NlcnZpY2UucmVtb3ZlKHRoaXMuI2dldEtleShrZXkpKS5jYXRjaChjb25zb2xlLmVycm9yKTtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMuI2dldERlZmF1bHRDb25maWd1cmF0aW9uKGdyaWRPcHRpb24pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY29uZmlndXJhdGlvbi5jb2x1bW5zID0gY29uZmlndXJhdGlvbi5jb2x1bW5zXHJcbiAgLy8gICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbnMuc29tZShlID0+ICFlLmhpZGRlbiAmJiBlLmZpZWxkID09PSBjb2x1bW4ub3JpZ2luLmZpZWxkKSk7XHJcbiAgLy8gICAvLyBUaMOqbSBuaOG7r25nIGNvbHVtbiBt4bubaSB2w6BvIHN0b3JhZ2UgbuG6v3UgY8OzXHJcbiAgLy8gICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAvLyAgICAgY29uc3QgY29sID0gY29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoZSA9PiBlLm9yaWdpbj8uZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XHJcbiAgLy8gICAgIGlmICghY29sKSB7XHJcbiAgLy8gICAgICAgY29uZmlndXJhdGlvbi5jb2x1bW5zLnB1c2goe1xyXG4gIC8vICAgICAgICAgb3JpZ2luOiB7XHJcbiAgLy8gICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgLy8gICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXHJcbiAgLy8gICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgLy8gICAgICAgICAgIGludmlzaWJsZTogY29sdW1uLmludmlzaWJsZSxcclxuICAvLyAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICBpbnZpc2libGU6IGNvbHVtbi5pbnZpc2libGUsXHJcbiAgLy8gICAgICAgICBmaXhlZDogZmFsc2VcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICBjb2wub3JpZ2luID0ge1xyXG4gIC8vICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAvLyAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXHJcbiAgLy8gICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gIC8vICAgICAgICAgaW52aXNpYmxlOiBjb2x1bW4uaW52aXNpYmxlXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICByZXR1cm4gY29uZmlndXJhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNldCA9IGFzeW5jIChrZXk6IHN0cmluZywgY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvbik6IFByb21pc2U8U2RHcmlkQ29uZmlndXJhdGlvbj4gPT4ge1xyXG4gIC8vICAgaWYgKGtleSkge1xyXG4gIC8vICAgICB0aGlzLnNldHRpbmdTZXJ2aWNlLnNldCh0aGlzLiNnZXRLZXkoa2V5KSwgY29uZmlndXJhdGlvbik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gY29uZmlndXJhdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIC8vIHJlbW92ZSA9IChrZXk6IHN0cmluZykgPT4ge1xyXG4gIC8vICAgaWYgKGtleSkge1xyXG4gIC8vICAgICB0aGlzLnNldHRpbmdTZXJ2aWNlLnJlbW92ZSh0aGlzLiNnZXRLZXkoa2V5KSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBnZW5lcmF0ZUNvbmZpZ3VyYXRpb25SZXN1bHQgPSAoXHJcbiAgICBjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uLFxyXG4gICAgZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24sXHJcbiAgICBzZFN1YkluZm9ybWF0aW9uOiBTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUpID0+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdCA9IHtcclxuICAgICAgY29sdW1uOiB7fSxcclxuICAgICAgZml4ZWRDb2x1bW46IHt9LFxyXG4gICAgICBmaXJzdENvbHVtbnM6IFtdLFxyXG4gICAgICBzZWNvbmRDb2x1bW5zOiBbXSxcclxuICAgICAgZmlyc3RIZWFkZXJzOiBbXSxcclxuICAgICAgc2Vjb25kSGVhZGVyczogW10sXHJcbiAgICAgIGRpc3BsYXllZENvbHVtbnM6IFtdLFxyXG4gICAgICBkaXNwbGF5ZWRGb290ZXJzOiBbXSxcclxuICAgICAgbXVsdGlwbGVIZWFkZXI6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBzZWxlY3Rpb24sIGNvbW1hbmRzLCBlZGl0b3IgfSA9IGdyaWRPcHRpb24gfHwge307XHJcbiAgICBpZiAoc2VsZWN0aW9uPy52aXNpYmxlKSB7XHJcbiAgICAgIHJlc3VsdC5maXJzdEhlYWRlcnMucHVzaCh0aGlzLiNDT0xVTU5TLlNFTEVDVElPTik7XHJcbiAgICAgIHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLnB1c2godGhpcy4jQ09MVU1OUy5TRUxFQ1RJT04pO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbW1hbmRzPy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0LmZpcnN0SGVhZGVycy5wdXNoKHRoaXMuI0NPTFVNTlMuQ09NTUFORCk7XHJcbiAgICAgIHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLnB1c2godGhpcy4jQ09MVU1OUy5DT01NQU5EKTtcclxuICAgIH1cclxuICAgIGlmIChlZGl0b3IuYWRkYWJsZSB8fCAoZWRpdG9yLnR5cGUgPT09ICdpbmxpbmUnICYmIGVkaXRvci5yZW1vdmFibGUpIHx8IChlZGl0b3IudHlwZSAhPT0gJ2lubGluZScgJiYgZWRpdG9yLmVkaXRhYmxlKSkge1xyXG4gICAgICByZXN1bHQuZmlyc3RIZWFkZXJzLnB1c2godGhpcy4jQ09MVU1OUy5FRElUT1IpO1xyXG4gICAgICByZXN1bHQuZGlzcGxheWVkQ29sdW1ucy5wdXNoKHRoaXMuI0NPTFVNTlMuRURJVE9SKTtcclxuICAgIH1cclxuICAgIGNvbmZpZ3VyYXRpb24/LmNvbHVtbnM/LmZpbHRlcihjb2wgPT4gIWNvbC5pbnZpc2libGUpLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbC5pc0dlbmVyYXRlZENvbHVtbikge1xyXG4gICAgICAgIHJlc3VsdC5jb2x1bW5bY29sLm9yaWdpbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlIHx8IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICB3aWR0aDogY29sLndpZHRoIHx8IGNvbC5vcmlnaW4ud2lkdGgsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29sLmZpeGVkKSB7XHJcbiAgICAgICAgICByZXN1bHQuZml4ZWRDb2x1bW5bY29sLm9yaWdpbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgfHwgY29sLm9yaWdpbi50aXRsZSxcclxuICAgICAgICAgICAgd2lkdGg6IGNvbC53aWR0aCB8fCBjb2wub3JpZ2luLndpZHRoLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1uOiBTZEdyaWRNYXRlcmlhbENvbHVtbiA9IHtcclxuICAgICAgICAgIHR5cGU6ICdjaGlsZHJlbicsXHJcbiAgICAgICAgICBmaWVsZDogY29sLm9yaWdpbi5maWVsZCxcclxuICAgICAgICAgIHRpdGxlOiBjb2wub3JpZ2luLnRpdGxlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbHVtbiBvZiBncmlkT3B0aW9uPy5jb2x1bW5zLmZpbHRlcihlMSA9PiBjb2wuZ2VuZXJhdGVkQ29sdW1ucy5pbmNsdWRlcyhlMS5maWVsZCkpKSB7XHJcbiAgICAgICAgICBpZiAoc3ViQ29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicgfHwgc3ViQ29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbi1jb2wnKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2Ygc3ViQ29sdW1uLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRDb2x1bW4sXHJcbiAgICAgICAgICAgICAgICBjb2xTcGFuOiAyXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlZENvbHVtbi5jaGlsZHJlbi5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5zdWJDb2x1bW4sXHJcbiAgICAgICAgICAgICAgY29sU3BhbjogMlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5maXJzdENvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAuLi5nZW5lcmF0ZWRDb2x1bW4sXHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlIHx8IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICB3aWR0aDogY29sLndpZHRoIHx8IGNvbC5vcmlnaW4ud2lkdGhcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXN1bHQuZmlyc3RIZWFkZXJzLnB1c2goY29sLm9yaWdpbi5maWVsZCk7XHJcbiAgICAgICAgcmVzdWx0LmRpc3BsYXllZENvbHVtbnMucHVzaChjb2wub3JpZ2luLmZpZWxkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29sdW1uID0gZ3JpZE9wdGlvbj8uY29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gY29sLm9yaWdpbi5maWVsZCk7XHJcbiAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICByZXN1bHQuY29sdW1uW2NvbC5vcmlnaW4uZmllbGRdID0ge1xyXG4gICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSB8fCBjb2wub3JpZ2luLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGg6IGNvbC53aWR0aCB8fCBjb2wub3JpZ2luLndpZHRoLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbC5maXhlZCkge1xyXG4gICAgICAgICAgcmVzdWx0LmZpeGVkQ29sdW1uW2NvbC5vcmlnaW4uZmllbGRdID0ge1xyXG4gICAgICAgICAgICB0aXRsZTogY29sLnRpdGxlIHx8IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBjb2wud2lkdGggfHwgY29sLm9yaWdpbi53aWR0aCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5maXJzdENvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlIHx8IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICB3aWR0aDogY29sLndpZHRoIHx8IGNvbC5vcmlnaW4ud2lkdGhcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXN1bHQuZmlyc3RIZWFkZXJzLnB1c2goY29sLm9yaWdpbi5maWVsZCk7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4tY29sJykge1xyXG4gICAgICAgICAgY29sdW1uLmNoaWxkcmVuPy5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LnNlY29uZENvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zZWNvbmRIZWFkZXJzLnB1c2goY2hpbGRDb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgICByZXN1bHQuZGlzcGxheWVkQ29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXN1bHQuZGlzcGxheWVkQ29sdW1ucy5wdXNoKGNvbC5vcmlnaW4uZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoc2RTdWJJbmZvcm1hdGlvbj8udGVtcGxhdGVSZWYpIHtcclxuICAgICAgcmVzdWx0LmZpcnN0SGVhZGVycy5wdXNoKHRoaXMuI0NPTFVNTlMuU1VCSU5GT1JNQVRJT04pO1xyXG4gICAgICByZXN1bHQuZGlzcGxheWVkQ29sdW1ucy5wdXNoKHRoaXMuI0NPTFVNTlMuU1VCSU5GT1JNQVRJT04pO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0Lm11bHRpcGxlSGVhZGVyID0gcmVzdWx0LnNlY29uZEhlYWRlcnMubGVuZ3RoID4gMDtcclxuICAgIC8vIFN1YiBpbmZvbWF0aW9uIGtow7RuZyB0aOG7gyBjw7MgZm9vdGVyXHJcbiAgICByZXN1bHQuZGlzcGxheWVkRm9vdGVycyA9IHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLmZpbHRlcih2YWwgPT4gdmFsICE9PSB0aGlzLiNDT0xVTU5TLlNVQklORk9STUFUSU9OKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1L0Rlc2t0b3AvV29ya2luZy8xTUcvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXJ2aWNlcy9ncmlkLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsb0JBQW9CLEVBQWdDLE1BQU0sb0NBQW9DLENBQUM7QUFHeEcsTUFBTSxPQUFPLDBCQUEwQjtJQVVyQyxZQUNVLGNBQWdDLEVBQ1MseUJBQXVEO1FBRGhHLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNTLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBOEI7UUFYMUcsbUJBQVc7WUFDVCxNQUFNLEVBQUUsVUFBVTtZQUNsQixjQUFjLEVBQUUsd0JBQXdCO1lBQ3hDLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFNBQVMsRUFBRSxhQUFhO1NBQ3pCLEVBQUM7UUFDRixpQkFFSSxFQUFFLEVBQUM7UUFNUCxTQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsVUFBZ0MsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxxQ0FBWSxHQUFHLENBQUMsRUFBRTtnQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7Z0JBQ25ELHFDQUFZLEdBQUcsQ0FBQyxHQUFHO29CQUNqQixJQUFJLEVBQUUseUNBQUEsSUFBSSxFQUFPLFVBQVUsRUFBRSxPQUFP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QVcsQ0FBQyxDQUFDOzRCQUN2QyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzdDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsRCxDQUFDLEVBQUU7cUJBQ0o7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNoRDtpQkFDRjtZQUNILENBQUMsRUFBRTtZQUNILElBQUksZ0JBQWdCLGFBQWhCLGdCQUFnQix1QkFBaEIsZ0JBQWdCLENBQUUsV0FBVyxFQUFFO2dCQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx1Q0FBYyxjQUFjLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyx1Q0FBYyxjQUFjLENBQUMsQ0FBQzthQUM1RDtZQUNELE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELHFDQUFxQztZQUNyQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyx1Q0FBYyxjQUFjLENBQUMsQ0FBQztZQUN0RyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUE7SUEvUkQsQ0FBQzs7OztZQWRGLFVBQVU7OztZQVJGLGdCQUFnQjs0Q0FxQnBCLE1BQU0sU0FBQyxvQkFBb0IsY0FBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IFNkU2V0dGluZ1NlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3NldHRpbmcnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9ncmlkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkQ29sdW1uQ29uZmlndXJhdGlvbiwgU2RHcmlkQ29uZmlndXJhdGlvbiwgU2RHcmlkQ29uZmlndXJhdGlvbkNhY2hlLCBTZEdyaWRDb25maWd1cmF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1zdWItaW5mb3JtYXRpb24tZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBHUklEX01BVEVSSUFMX0NPTkZJRywgSVNkR3JpZE1hdGVyaWFsQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9ncmlkLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkQ29uZmlndXJhdGlvblNlcnZpY2Uge1xyXG4gICNDT0xVTU5TID0ge1xyXG4gICAgRURJVE9SOiAnc2RFZGl0b3InLFxyXG4gICAgU1VCSU5GT1JNQVRJT046ICdzZFN1YkluZm9ybWF0aW9uQWN0aW9uJyxcclxuICAgIENPTU1BTkQ6ICdzZENvbW1hbmQnLFxyXG4gICAgU0VMRUNUSU9OOiAnc2RTZWxlY3Rpb24nXHJcbiAgfTtcclxuICAjY2FjaGU6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFNkR3JpZENvbmZpZ3VyYXRpb25DYWNoZVxyXG4gIH0gPSB7fTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2V0dGluZ1NlcnZpY2U6IFNkU2V0dGluZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KEdSSURfTUFURVJJQUxfQ09ORklHKSBAT3B0aW9uYWwoKSBwdWJsaWMgZ3JpZE1hdGVyaWFsQ29uZmlndXJhdGlvbjogSVNkR3JpZE1hdGVyaWFsQ29uZmlndXJhdGlvbikge1xyXG4gIH1cclxuXHJcbiAgaW5pdCA9IChrZXk6IHN0cmluZywgZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pID0+IHtcclxuICAgIGlmICghdGhpcy4jY2FjaGVba2V5XSkge1xyXG4gICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8U2RHcmlkQ29uZmlndXJhdGlvbj4oKTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBsb2FkOiB0aGlzLiNsb2FkKGdyaWRPcHRpb24sIHN1YmplY3QpLFxyXG4gICAgICAgIGdldDogdGhpcy4jZ2V0KGdyaWRPcHRpb24pLFxyXG4gICAgICAgIHNldDogKGNvbmZpZ3VyYXRpb246IFNkR3JpZENvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSB0aGlzLiNzZXQoZ3JpZE9wdGlvbiwgY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICBzdWJqZWN0Lm5leHQoeyAuLi5jb25maWd1cmF0aW9uIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuI3JlbW92ZShncmlkT3B0aW9uKSgpO1xyXG4gICAgICAgICAgc3ViamVjdC5uZXh0KHRoaXMuI2RlZmF1bHQoZ3JpZE9wdGlvbikpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb2JzZXJ2ZXI6IHN1YmplY3RcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLiNjYWNoZVtrZXldO1xyXG4gIH1cclxuXHJcbiAgI2dldEtleSA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgcHJlZml4ID0gJ2M5ZTk0ODM2LTZhY2UtNGFlYi1iMTQ4LTRmMGJlNjM1ODllZSc7XHJcbiAgICBpZiAoIWdyaWRPcHRpb24/LmNvbmZpZz8ua2V5ICYmICFncmlkT3B0aW9uPy5rZXkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGFzaCh7XHJcbiAgICAgIHByZWZpeCxcclxuICAgICAga2V5OiBncmlkT3B0aW9uPy5jb25maWc/LmtleSB8fCAhZ3JpZE9wdGlvbj8ua2V5XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gICNkZWZhdWx0ID0gKGdyaWRPcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uKTogU2RHcmlkQ29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW5zOiBTZENvbHVtbkNvbmZpZ3VyYXRpb25bXSA9IGdyaWRPcHRpb24/LmNvbHVtbnM/LmZpbHRlcihlID0+ICFlLmhpZGRlbikubWFwKGUgPT4gKHtcclxuICAgICAgb3JpZ2luOiB7XHJcbiAgICAgICAgZmllbGQ6IGUuZmllbGQsXHJcbiAgICAgICAgdGl0bGU6IGUudGl0bGUsXHJcbiAgICAgICAgd2lkdGg6IGUud2lkdGgsXHJcbiAgICAgICAgaW52aXNpYmxlOiBlLmludmlzaWJsZVxyXG4gICAgICB9LFxyXG4gICAgICBpbnZpc2libGU6IGUuaW52aXNpYmxlLFxyXG4gICAgICBmaXhlZDogZmFsc2VcclxuICAgIH0pKSB8fCBbXTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbnNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAjbG9hZCA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbiwgc3ViamVjdDogU3ViamVjdDxTZEdyaWRDb25maWd1cmF0aW9uPikgPT4ge1xyXG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3QgZ2V0ID0gdGhpcy4jZ2V0KGdyaWRPcHRpb24pO1xyXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgZ2V0KCk7XHJcbiAgICAgIHN1YmplY3QubmV4dCh7IC4uLmNvbmZpZ3VyYXRpb24gfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2dldCA9IChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy4jZ2V0S2V5KGdyaWRPcHRpb24pO1xyXG4gICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNkZWZhdWx0KGdyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHsgY29sdW1ucywgY29uZmlnIH0gPSBncmlkT3B0aW9uO1xyXG4gICAgICBjb25zdCB7IGdldCwgcmVtb3ZlIH0gPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmNyZWF0ZTxTZEdyaWRDb25maWd1cmF0aW9uPihrZXksIHtcclxuICAgICAgICB0eXBlOiBjb25maWc/LnN0b3JhZ2UsXHJcbiAgICAgICAgYXJnczogY29uZmlnPy5hcmdzXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uID0gYXdhaXQgZ2V0KCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgaWYgKCFjb25maWd1cmF0aW9uPy5jb2x1bW5zKSB7XHJcbiAgICAgICAgcmVtb3ZlKCkuY2F0Y2goY29uc29sZS5lcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RlZmF1bHQoZ3JpZE9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgICAgY29uZmlndXJhdGlvbi5jb2x1bW5zID0gY29uZmlndXJhdGlvbi5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmlzR2VuZXJhdGVkQ29sdW1uIHx8IGNvbHVtbnMuc29tZShlID0+ICFlLmhpZGRlbiAmJiBlLmZpZWxkID09PSBjb2x1bW4ub3JpZ2luLmZpZWxkKSk7XHJcbiAgICAgIC8vIFRow6ptIG5o4buvbmcgY29sdW1uIG3hu5tpIHbDoG8gc3RvcmFnZSBu4bq/dSBjw7NcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sID0gY29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoZSA9PiBlLm9yaWdpbj8uZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgaWYgKCFjb2wpIHtcclxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24uY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgICAgb3JpZ2luOiB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICAgICAgaW52aXNpYmxlOiBjb2x1bW4uaW52aXNpYmxlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpbnZpc2libGU6IGNvbHVtbi5pbnZpc2libGUsXHJcbiAgICAgICAgICAgIGZpeGVkOiBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbC5vcmlnaW4gPSB7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICAgIGludmlzaWJsZTogY29sdW1uLmludmlzaWJsZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAjc2V0ID0gKGdyaWRPcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uLCBjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uKSA9PiB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLiNnZXRLZXkoZ3JpZE9wdGlvbik7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIGNvbnN0IHsgc2V0IH0gPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmNyZWF0ZTxTZEdyaWRDb25maWd1cmF0aW9uPihrZXksIHtcclxuICAgICAgICB0eXBlOiBncmlkT3B0aW9uPy5jb25maWc/LnN0b3JhZ2UsXHJcbiAgICAgICAgYXJnczogZ3JpZE9wdGlvbj8uY29uZmlnPy5hcmdzXHJcbiAgICAgIH0pO1xyXG4gICAgICBzZXQoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb25maWd1cmF0aW9uKSk7XHJcbiAgfVxyXG5cclxuICAjcmVtb3ZlID0gKGdyaWRPcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLiNnZXRLZXkoZ3JpZE9wdGlvbik7XHJcbiAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICBjb25zdCB7IHJlbW92ZSB9ID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkQ29uZmlndXJhdGlvbj4oa2V5LCB7XHJcbiAgICAgICAgICB0eXBlOiBncmlkT3B0aW9uPy5jb25maWc/LnN0b3JhZ2UsXHJcbiAgICAgICAgICBhcmdzOiBncmlkT3B0aW9uPy5jb25maWc/LmFyZ3NcclxuICAgICAgICB9KTtcclxuICAgICAgICByZW1vdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIGdldCA9IGFzeW5jIChncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbik6IFByb21pc2U8U2RHcmlkQ29uZmlndXJhdGlvbj4gPT4ge1xyXG4gIC8vICAgaWYgKCFncmlkT3B0aW9uPy5rZXkpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMuI2dldERlZmF1bHRDb25maWd1cmF0aW9uKGdyaWRPcHRpb24pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY29uc3QgeyBrZXksIGNvbHVtbnMgfSA9IGdyaWRPcHRpb247XHJcbiAgLy8gICBjb25zdCBjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uID0gYXdhaXQgdGhpcy5zZXR0aW5nU2VydmljZS5nZXQodGhpcy4jZ2V0S2V5KGtleSkpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgLy8gICBpZiAoIWNvbmZpZ3VyYXRpb24/LmNvbHVtbnMpIHtcclxuICAvLyAgICAgdGhpcy5zZXR0aW5nU2VydmljZS5yZW1vdmUodGhpcy4jZ2V0S2V5KGtleSkpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy4jZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oZ3JpZE9wdGlvbik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjb25maWd1cmF0aW9uLmNvbHVtbnMgPSBjb25maWd1cmF0aW9uLmNvbHVtbnNcclxuICAvLyAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1ucy5zb21lKGUgPT4gIWUuaGlkZGVuICYmIGUuZmllbGQgPT09IGNvbHVtbi5vcmlnaW4uZmllbGQpKTtcclxuICAvLyAgIC8vIFRow6ptIG5o4buvbmcgY29sdW1uIG3hu5tpIHbDoG8gc3RvcmFnZSBu4bq/dSBjw7NcclxuICAvLyAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gIC8vICAgICBjb25zdCBjb2wgPSBjb25maWd1cmF0aW9uLmNvbHVtbnMuZmluZChlID0+IGUub3JpZ2luPy5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcclxuICAvLyAgICAgaWYgKCFjb2wpIHtcclxuICAvLyAgICAgICBjb25maWd1cmF0aW9uLmNvbHVtbnMucHVzaCh7XHJcbiAgLy8gICAgICAgICBvcmlnaW46IHtcclxuICAvLyAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAvLyAgICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAvLyAgICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAvLyAgICAgICAgICAgaW52aXNpYmxlOiBjb2x1bW4uaW52aXNpYmxlLFxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICAgIGludmlzaWJsZTogY29sdW1uLmludmlzaWJsZSxcclxuICAvLyAgICAgICAgIGZpeGVkOiBmYWxzZVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIGNvbC5vcmlnaW4gPSB7XHJcbiAgLy8gICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gIC8vICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAvLyAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgLy8gICAgICAgICBpbnZpc2libGU6IGNvbHVtbi5pbnZpc2libGVcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHJldHVybiBjb25maWd1cmF0aW9uO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0ID0gYXN5bmMgKGtleTogc3RyaW5nLCBjb25maWd1cmF0aW9uOiBTZEdyaWRDb25maWd1cmF0aW9uKTogUHJvbWlzZTxTZEdyaWRDb25maWd1cmF0aW9uPiA9PiB7XHJcbiAgLy8gICBpZiAoa2V5KSB7XHJcbiAgLy8gICAgIHRoaXMuc2V0dGluZ1NlcnZpY2Uuc2V0KHRoaXMuI2dldEtleShrZXkpLCBjb25maWd1cmF0aW9uKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBjb25maWd1cmF0aW9uO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVtb3ZlID0gKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgLy8gICBpZiAoa2V5KSB7XHJcbiAgLy8gICAgIHRoaXMuc2V0dGluZ1NlcnZpY2UucmVtb3ZlKHRoaXMuI2dldEtleShrZXkpKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdlbmVyYXRlQ29uZmlndXJhdGlvblJlc3VsdCA9IChcclxuICAgIGNvbmZpZ3VyYXRpb246IFNkR3JpZENvbmZpZ3VyYXRpb24sXHJcbiAgICBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbixcclxuICAgIHNkU3ViSW5mb3JtYXRpb246IFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZSkgPT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBTZEdyaWRDb25maWd1cmF0aW9uUmVzdWx0ID0ge1xyXG4gICAgICBjb2x1bW46IHt9LFxyXG4gICAgICBmaXhlZENvbHVtbjoge30sXHJcbiAgICAgIGZpcnN0Q29sdW1uczogW10sXHJcbiAgICAgIHNlY29uZENvbHVtbnM6IFtdLFxyXG4gICAgICBmaXJzdEhlYWRlcnM6IFtdLFxyXG4gICAgICBzZWNvbmRIZWFkZXJzOiBbXSxcclxuICAgICAgZGlzcGxheWVkQ29sdW1uczogW10sXHJcbiAgICAgIGRpc3BsYXllZEZvb3RlcnM6IFtdLFxyXG4gICAgICBtdWx0aXBsZUhlYWRlcjogZmFsc2VcclxuICAgIH07XHJcbiAgICBjb25zdCB7IHNlbGVjdGlvbiwgY29tbWFuZHMsIGVkaXRvciB9ID0gZ3JpZE9wdGlvbiB8fCB7fTtcclxuICAgIGlmIChzZWxlY3Rpb24/LnZpc2libGUpIHtcclxuICAgICAgcmVzdWx0LmZpcnN0SGVhZGVycy5wdXNoKHRoaXMuI0NPTFVNTlMuU0VMRUNUSU9OKTtcclxuICAgICAgcmVzdWx0LmRpc3BsYXllZENvbHVtbnMucHVzaCh0aGlzLiNDT0xVTU5TLlNFTEVDVElPTik7XHJcbiAgICB9XHJcbiAgICBpZiAoZWRpdG9yPy5hZGRhYmxlIHx8IChlZGl0b3I/LnR5cGUgPT09ICdpbmxpbmUnICYmIGVkaXRvcj8ucmVtb3ZhYmxlKSB8fCAoZWRpdG9yPy50eXBlID09PSAnZm9jdXMnICYmIGVkaXRvcj8uZWRpdGFibGUpIHx8IChlZGl0b3I/LnR5cGUgPT09ICdwb3B1cCcgJiYgZWRpdG9yPy5lZGl0YWJsZSkpIHtcclxuICAgICAgcmVzdWx0LmZpcnN0SGVhZGVycy5wdXNoKHRoaXMuI0NPTFVNTlMuRURJVE9SKTtcclxuICAgICAgcmVzdWx0LmRpc3BsYXllZENvbHVtbnMucHVzaCh0aGlzLiNDT0xVTU5TLkVESVRPUik7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tbWFuZHM/Lmxlbmd0aCkge1xyXG4gICAgICByZXN1bHQuZmlyc3RIZWFkZXJzLnB1c2godGhpcy4jQ09MVU1OUy5DT01NQU5EKTtcclxuICAgICAgcmVzdWx0LmRpc3BsYXllZENvbHVtbnMucHVzaCh0aGlzLiNDT0xVTU5TLkNPTU1BTkQpO1xyXG4gICAgfVxyXG4gICAgY29uZmlndXJhdGlvbj8uY29sdW1ucz8uZmlsdGVyKGNvbCA9PiAhY29sLmludmlzaWJsZSkuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBpZiAoY29sLmlzR2VuZXJhdGVkQ29sdW1uKSB7XHJcbiAgICAgICAgcmVzdWx0LmNvbHVtbltjb2wub3JpZ2luLmZpZWxkXSA9IHtcclxuICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgfHwgY29sLm9yaWdpbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2wud2lkdGggfHwgY29sLm9yaWdpbi53aWR0aCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb2wuZml4ZWQpIHtcclxuICAgICAgICAgIHJlc3VsdC5maXhlZENvbHVtbltjb2wub3JpZ2luLmZpZWxkXSA9IHtcclxuICAgICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSB8fCBjb2wub3JpZ2luLnRpdGxlLFxyXG4gICAgICAgICAgICB3aWR0aDogY29sLndpZHRoIHx8IGNvbC5vcmlnaW4ud2lkdGgsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW46IFNkR3JpZE1hdGVyaWFsQ29sdW1uID0ge1xyXG4gICAgICAgICAgdHlwZTogJ2NoaWxkcmVuJyxcclxuICAgICAgICAgIGZpZWxkOiBjb2wub3JpZ2luLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAoY29uc3Qgc3ViQ29sdW1uIG9mIGdyaWRPcHRpb24/LmNvbHVtbnMuZmlsdGVyKGUxID0+IGNvbC5nZW5lcmF0ZWRDb2x1bW5zLmluY2x1ZGVzKGUxLmZpZWxkKSkpIHtcclxuICAgICAgICAgIGlmIChzdWJDb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJyB8fCBzdWJDb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuLWNvbCcpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBzdWJDb2x1bW4uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW4uY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAuLi5jaGlsZENvbHVtbixcclxuICAgICAgICAgICAgICAgIGNvbFNwYW46IDJcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICAgIC4uLnN1YkNvbHVtbixcclxuICAgICAgICAgICAgICBjb2xTcGFuOiAyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmZpcnN0Q29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgIC4uLmdlbmVyYXRlZENvbHVtbixcclxuICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgfHwgY29sLm9yaWdpbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2wud2lkdGggfHwgY29sLm9yaWdpbi53aWR0aFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5maXJzdEhlYWRlcnMucHVzaChjb2wub3JpZ2luLmZpZWxkKTtcclxuICAgICAgICByZXN1bHQuZGlzcGxheWVkQ29sdW1ucy5wdXNoKGNvbC5vcmlnaW4uZmllbGQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb2x1bW4gPSBncmlkT3B0aW9uPy5jb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBjb2wub3JpZ2luLmZpZWxkKTtcclxuICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgIHJlc3VsdC5jb2x1bW5bY29sLm9yaWdpbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlIHx8IGNvbC5vcmlnaW4udGl0bGUsXHJcbiAgICAgICAgICB3aWR0aDogY29sLndpZHRoIHx8IGNvbC5vcmlnaW4ud2lkdGgsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29sLmZpeGVkKSB7XHJcbiAgICAgICAgICByZXN1bHQuZml4ZWRDb2x1bW5bY29sLm9yaWdpbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgfHwgY29sLm9yaWdpbi50aXRsZSxcclxuICAgICAgICAgICAgd2lkdGg6IGNvbC53aWR0aCB8fCBjb2wub3JpZ2luLndpZHRoLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmZpcnN0Q29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgIC4uLmNvbHVtbixcclxuICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgfHwgY29sLm9yaWdpbi50aXRsZSxcclxuICAgICAgICAgIHdpZHRoOiBjb2wud2lkdGggfHwgY29sLm9yaWdpbi53aWR0aFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5maXJzdEhlYWRlcnMucHVzaChjb2wub3JpZ2luLmZpZWxkKTtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbi1jb2wnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW4/LmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc2Vjb25kQ29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICAgICAgcmVzdWx0LnNlY29uZEhlYWRlcnMucHVzaChjaGlsZENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goY29sLm9yaWdpbi5maWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChzZFN1YkluZm9ybWF0aW9uPy50ZW1wbGF0ZVJlZikge1xyXG4gICAgICByZXN1bHQuZmlyc3RIZWFkZXJzLnB1c2godGhpcy4jQ09MVU1OUy5TVUJJTkZPUk1BVElPTik7XHJcbiAgICAgIHJlc3VsdC5kaXNwbGF5ZWRDb2x1bW5zLnB1c2godGhpcy4jQ09MVU1OUy5TVUJJTkZPUk1BVElPTik7XHJcbiAgICB9XHJcbiAgICByZXN1bHQubXVsdGlwbGVIZWFkZXIgPSByZXN1bHQuc2Vjb25kSGVhZGVycy5sZW5ndGggPiAwO1xyXG4gICAgLy8gU3ViIGluZm9tYXRpb24ga2jDtG5nIHRo4buDIGPDsyBmb290ZXJcclxuICAgIHJlc3VsdC5kaXNwbGF5ZWRGb290ZXJzID0gcmVzdWx0LmRpc3BsYXllZENvbHVtbnMuZmlsdGVyKHZhbCA9PiB2YWwgIT09IHRoaXMuI0NPTFVNTlMuU1VCSU5GT1JNQVRJT04pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -974,14 +974,14 @@ class SdGridConfigurationService {
|
|
|
974
974
|
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).SELECTION);
|
|
975
975
|
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).SELECTION);
|
|
976
976
|
}
|
|
977
|
+
if ((editor === null || editor === void 0 ? void 0 : editor.addable) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'inline' && (editor === null || editor === void 0 ? void 0 : editor.removable)) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'focus' && (editor === null || editor === void 0 ? void 0 : editor.editable)) || ((editor === null || editor === void 0 ? void 0 : editor.type) === 'popup' && (editor === null || editor === void 0 ? void 0 : editor.editable))) {
|
|
978
|
+
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
979
|
+
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
980
|
+
}
|
|
977
981
|
if (commands === null || commands === void 0 ? void 0 : commands.length) {
|
|
978
982
|
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).COMMAND);
|
|
979
983
|
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).COMMAND);
|
|
980
984
|
}
|
|
981
|
-
if (editor.addable || (editor.type === 'inline' && editor.removable) || (editor.type !== 'inline' && editor.editable)) {
|
|
982
|
-
result.firstHeaders.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
983
|
-
result.displayedColumns.push(__classPrivateFieldGet(this, _COLUMNS).EDITOR);
|
|
984
|
-
}
|
|
985
985
|
(_a = configuration === null || configuration === void 0 ? void 0 : configuration.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.invisible).forEach(col => {
|
|
986
986
|
var _a;
|
|
987
987
|
if (col.isGeneratedColumn) {
|
|
@@ -1699,7 +1699,8 @@ class SdGridMaterial {
|
|
|
1699
1699
|
// Đưa item lên dòng đầu tiên nếu type khác popup
|
|
1700
1700
|
if (editor.type !== 'popup') {
|
|
1701
1701
|
if (type === 'local') {
|
|
1702
|
-
this.items
|
|
1702
|
+
this.items = [item, ...this.items];
|
|
1703
|
+
// this.items.splice(0, 0, item);
|
|
1703
1704
|
}
|
|
1704
1705
|
// this.viewItems.splice(0, 0, item);
|
|
1705
1706
|
}
|
|
@@ -1707,8 +1708,7 @@ class SdGridMaterial {
|
|
|
1707
1708
|
};
|
|
1708
1709
|
this.onUpdate = (item, isModified) => {
|
|
1709
1710
|
const { editor, columns } = this.gridOption;
|
|
1710
|
-
item.editorHandlerRow.status
|
|
1711
|
-
item.editorHandlerRow.temporary = Object.assign({}, item);
|
|
1711
|
+
item.editorHandlerRow = Object.assign(Object.assign({}, item.editorHandlerRow), { status: isModified ? 'update' : 'create', temporary: Object.assign({}, item) });
|
|
1712
1712
|
// this.generateEditorHanlder(item);
|
|
1713
1713
|
if (editor.type === 'popup') {
|
|
1714
1714
|
// Xử lý case popup
|
|
@@ -1843,7 +1843,7 @@ _paginator = new WeakMap(), _sort = new WeakMap(), _subscription$1 = new WeakMap
|
|
|
1843
1843
|
SdGridMaterial.decorators = [
|
|
1844
1844
|
{ type: Component, args: [{
|
|
1845
1845
|
selector: 'sd-grid-material',
|
|
1846
|
-
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 <ng-container *ngIf=\"!gridOption.filter?.disabled\">\r\n <sd-grid-filter [filter]=\"gridOption?.filter\" [columns]=\"configuration.firstColumns\" [filterDefs]=\"filterDefs\">\r\n </sd-grid-filter>\r\n </ng-container>\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\" [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]=\"items\" matSort\r\n [matSortDisabled]=\"!gridOption.sortable\" cdkDropList cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"!gridOption.dropDragColumnEnable\"\r\n (cdkDropListDropped)=\"drop($event, configuration.displayedColumns)\" multiTemplateDataRows>\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 <div *ngIf=\"sdSubInformation?.templateRef\" [@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 </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\" mat-icon-button aria-label=\"Expand & Collapse\"\r\n (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 <mat-checkbox *ngIf=\"!gridOption.selection?.single\" class=\"c-selection\" color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\" (change)=\"onSelectAll()\" [disabled]=\"\r\n items | selectionDisableSelectAll: gridOption?.selection\r\n \">\r\n </mat-checkbox>\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 <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 </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\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</mat-icon>\r\n </button>\r\n </th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *sdLet=\"item | sdEditorHandlerRow:gridOption as editorHandler\">\r\n <ng-container *ngIf=\"editorHandler.visible\">\r\n <ng-container *ngIf=\"editorHandler.isInline;else notInline\">\r\n <button *ngIf=\"editorHandler.removable\" class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">delete</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-template #notInline>\r\n <ng-container *ngIf=\"!editorHandler.status\">\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 </ng-container>\r\n <ng-container *ngIf=\"editorHandler.status\">\r\n <button class=\"mx-2\" (click)=\"onSave(item)\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon\">save</mat-icon>\r\n </button>\r\n <button class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon\">close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n </ng-template>\r\n </ng-container>\r\n\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 *ngFor=\"let column of configuration.firstColumns; let i = index\" [matColumnDef]=\"column.field\"\r\n [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': column.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 \" [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *ngIf=\"cellDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n cellDef[column.field].templateRef;\r\n context: { item: item, column: column, idx: i }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <sd-desktop-cell *ngIf=\"!cellDef[column.field]\" [key]=\"key\" [column]=\"column\" [item]=\"item\"\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 [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *ngIf=\"cellDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n cellDef[column.field].templateRef;\r\n context: { item: item, column: column, idx: i }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <sd-desktop-cell *ngIf=\"!cellDef[column.field]\" [key]=\"key\" [column]=\"column\" [item]=\"item\"\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 <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></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\"></tr>\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=\"sdEditor\">\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\">\r\n <button\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</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 *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\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns\" [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\" [ngStyle]=\"{ 'min-width': column.width }\"\r\n [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 [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\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\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\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.exportDefault(true)\" 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-popup-export *ngIf=\"gridOption.export?.visible\" [gridOption]=\"gridOption\" (export)=\"onExport($event)\"\r\n #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-template #inlineColumn let-column=\"column\">\r\n <ng-container *ngIf=\"\r\n column.type === 'string' ||\r\n column.type === 'number' ||\r\n column.type === 'bool' ||\r\n column.type === 'values' ||\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time';\r\n else noFilter\r\n \">\r\n <sd-input *ngIf=\"column.type === 'string'\" size=\"sm\" type=\"text\" [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\" [disabled]=\"column.filter?.disabled\">\r\n </sd-input>\r\n <sd-input *ngIf=\"column.type === 'number'\" size=\"sm\" type=\"number\" [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\" [disabled]=\"column.filter?.disabled\">\r\n </sd-input>\r\n <sd-select *ngIf=\"column.type === 'bool'\" size=\"sm\" [items]=\"[\r\n { value: '1', display: column.option?.displayOnTrue || 'True' },\r\n { value: '0', display: column.option?.displayOnFalse || 'False' }\r\n ]\" valueField=\"value\" displayField=\"display\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-select>\r\n <sd-select *ngIf=\"\r\n column.type === 'values' && column?.option?.selection !== 'AUTOCOMPLETE'\r\n \" size=\"sm\" [items]=\"column.option.items\" [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\" [multiple]=\"\r\n column?.option?.selection === 'MULTIPLE' ||\r\n column?.option?.selection === 'MULTIPLEAUTOCOMPLETE'\r\n \" [filtered]=\"column?.option?.selection === 'MULTIPLEAUTOCOMPLETE'\">\r\n </sd-select>\r\n <sd-autocomplete *ngIf=\"\r\n column.type === 'values' && column?.option?.selection === 'AUTOCOMPLETE'\r\n \" size=\"sm\" [items]=\"column.option.items\" [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-autocomplete>\r\n <sd-date-time *ngIf=\"\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time'\r\n \" size=\"sm\" [(model)]=\"columnFilter[column.field]\" [type]=\"column.type\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-date-time>\r\n </ng-container>\r\n <ng-template #noFilter>\r\n <sd-input type=\"text\" disabled> </sd-input>\r\n </ng-template>\r\n</ng-template>\r\n\r\n<sd-quick-action *ngIf=\"\r\n selectedItems\r\n | selectionActionFilter: gridOption?.selection?.actions as actions\r\n \" [isOpened]=\"actions?.length\">\r\n <div sdMessage>\r\n <strong class=\"text-info\">{{ selectedItems.length }}</strong>\r\n {{ gridOption?.selection?.message || (\"selected rows\" | sdTranslate) }}\r\n </div>\r\n <div class=\"d-flex align-items-center\" sdAction>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <sd-button *ngIf=\"action.click\" class=\"ml-5\" [tooltip]=\"action.tooltip\" [icon]=\"action.icon\"\r\n [color]=\"action.color || 'secondary'\" [type]=\"action.type || 'light'\" [fontSet]=\"action.fontSet\"\r\n [title]=\"action.title\" size=\"sm\" (action)=\"action.click(selectedItems)\"></sd-button>\r\n <ng-container *ngIf=\"action.children?.length\">\r\n <sd-button class=\"ml-5\" [tooltip]=\"action.tooltip\" [icon]=\"action.icon || 'more_vert'\"\r\n [color]=\"action.color || 'secondary'\" [type]=\"action.type || 'light'\" [fontSet]=\"action.fontSet\"\r\n [title]=\"action.title\" size=\"sm\" [matMenuTriggerFor]=\"menu\">\r\n </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <span>\r\n <button *ngFor=\"let childAction of action.children\" mat-menu-item (click)=\"childAction.click(selectedItems)\"\r\n [disabled]=\"childAction.disabled\">\r\n <mat-icon [fontSet]=\"childAction.fontSet\" class=\"c-icon\">{{ childAction.icon }}\r\n </mat-icon>\r\n <span> {{ childAction.title }}</span>\r\n </button>\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</sd-quick-action>",
|
|
1846
|
+
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 <ng-container *ngIf=\"!gridOption.filter?.disabled\">\r\n <sd-grid-filter [filter]=\"gridOption?.filter\" [columns]=\"configuration.firstColumns\" [filterDefs]=\"filterDefs\">\r\n </sd-grid-filter>\r\n </ng-container>\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\" [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]=\"items\" matSort\r\n [matSortDisabled]=\"!gridOption.sortable\" cdkDropList cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListDisabled]=\"!gridOption.dropDragColumnEnable\"\r\n (cdkDropListDropped)=\"drop($event, configuration.displayedColumns)\" multiTemplateDataRows>\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 <div *ngIf=\"sdSubInformation?.templateRef\" [@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 </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\" mat-icon-button aria-label=\"Expand & Collapse\"\r\n (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 <mat-checkbox *ngIf=\"!gridOption.selection?.single\" class=\"c-selection\" color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\" (change)=\"onSelectAll()\" [disabled]=\"\r\n items | selectionDisableSelectAll: gridOption?.selection\r\n \">\r\n </mat-checkbox>\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 <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 </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\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</mat-icon>\r\n </button>\r\n </th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *sdLet=\"item | sdEditorHandlerRow:gridOption as editorHandler\">\r\n <ng-container *ngIf=\"editorHandler.visible\">\r\n <ng-container *ngIf=\"editorHandler.isInline;else notInline\">\r\n <button *ngIf=\"editorHandler.removable\" class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">delete</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-template #notInline>\r\n <ng-container *ngIf=\"!item.editorHandlerRow.status\">\r\n <button *ngIf=\"item.editorHandlerRow.editable\" class=\"mx-2\" (click)=\"onUpdate(item, true)\" aria-hidden=\"true\"\r\n mat-icon-button>\r\n <mat-icon class=\"c-icon\">edit</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"item.editorHandlerRow.status\">\r\n <button class=\"mx-2\" (click)=\"onSave(item)\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon\">save</mat-icon>\r\n </button>\r\n <button class=\"mx-2\" (click)=\"onCancel(item)\" aria-hidden=\"true\" mat-icon-button>\r\n <mat-icon class=\"c-icon\">close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n </ng-template>\r\n </ng-container>\r\n\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 *ngFor=\"let column of configuration.firstColumns; let i = index\" [matColumnDef]=\"column.field\"\r\n [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': column.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 \" [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *ngIf=\"cellDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n cellDef[column.field].templateRef;\r\n context: { item: item, column: column, idx: i }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <sd-desktop-cell *ngIf=\"!cellDef[column.field]\" [key]=\"key\" [column]=\"column\" [item]=\"item\"\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 [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-8\" mat-cell *matCellDef=\"let item\">\r\n <ng-container *ngIf=\"cellDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"\r\n cellDef[column.field].templateRef;\r\n context: { item: item, column: column, idx: i }\r\n \">\r\n </ng-container>\r\n </ng-container>\r\n <sd-desktop-cell *ngIf=\"!cellDef[column.field]\" [key]=\"key\" [column]=\"column\" [item]=\"item\"\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 <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></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\"></tr>\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=\"sdEditor\">\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\">\r\n <button\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</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 *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\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n </th>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.firstColumns\" [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th mat-header-cell *matHeaderCellDef class=\"c-th px-8 py-8\" [ngStyle]=\"{ 'min-width': column.width }\"\r\n [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 [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\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\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <div class=\"c-inline-column\" *ngIf=\"gridOption.filter?.inlineColumn\">\r\n <ng-container *ngTemplateOutlet=\"\r\n inlineColumn;\r\n context: { column: column }\r\n \"></ng-container>\r\n </div>\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.exportDefault(true)\" 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-popup-export *ngIf=\"gridOption.export?.visible\" [gridOption]=\"gridOption\" (export)=\"onExport($event)\"\r\n #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-template #inlineColumn let-column=\"column\">\r\n <ng-container *ngIf=\"\r\n column.type === 'string' ||\r\n column.type === 'number' ||\r\n column.type === 'bool' ||\r\n column.type === 'values' ||\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time';\r\n else noFilter\r\n \">\r\n <sd-input *ngIf=\"column.type === 'string'\" size=\"sm\" type=\"text\" [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\" [disabled]=\"column.filter?.disabled\">\r\n </sd-input>\r\n <sd-input *ngIf=\"column.type === 'number'\" size=\"sm\" type=\"number\" [(model)]=\"columnFilter[column.field]\"\r\n (keyupEnter)=\"onFilterChange()\" [disabled]=\"column.filter?.disabled\">\r\n </sd-input>\r\n <sd-select *ngIf=\"column.type === 'bool'\" size=\"sm\" [items]=\"[\r\n { value: '1', display: column.option?.displayOnTrue || 'True' },\r\n { value: '0', display: column.option?.displayOnFalse || 'False' }\r\n ]\" valueField=\"value\" displayField=\"display\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-select>\r\n <sd-select *ngIf=\"\r\n column.type === 'values' && column?.option?.selection !== 'AUTOCOMPLETE'\r\n \" size=\"sm\" [items]=\"column.option.items\" [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\" [multiple]=\"\r\n column?.option?.selection === 'MULTIPLE' ||\r\n column?.option?.selection === 'MULTIPLEAUTOCOMPLETE'\r\n \" [filtered]=\"column?.option?.selection === 'MULTIPLEAUTOCOMPLETE'\">\r\n </sd-select>\r\n <sd-autocomplete *ngIf=\"\r\n column.type === 'values' && column?.option?.selection === 'AUTOCOMPLETE'\r\n \" size=\"sm\" [items]=\"column.option.items\" [valueField]=\"column.option.valueField\"\r\n [displayField]=\"column.option.displayField\" [(model)]=\"columnFilter[column.field]\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-autocomplete>\r\n <sd-date-time *ngIf=\"\r\n column.type === 'date' ||\r\n column.type === 'datetime' ||\r\n column.type === 'time'\r\n \" size=\"sm\" [(model)]=\"columnFilter[column.field]\" [type]=\"column.type\" (sdChange)=\"onFilterChange()\"\r\n [disabled]=\"column.filter?.disabled\">\r\n </sd-date-time>\r\n </ng-container>\r\n <ng-template #noFilter>\r\n <sd-input type=\"text\" disabled> </sd-input>\r\n </ng-template>\r\n</ng-template>\r\n\r\n<sd-quick-action *ngIf=\"\r\n selectedItems\r\n | selectionActionFilter: gridOption?.selection?.actions as actions\r\n \" [isOpened]=\"actions?.length\">\r\n <div sdMessage>\r\n <strong class=\"text-info\">{{ selectedItems.length }}</strong>\r\n {{ gridOption?.selection?.message || (\"selected rows\" | sdTranslate) }}\r\n </div>\r\n <div class=\"d-flex align-items-center\" sdAction>\r\n <ng-container *ngFor=\"let action of actions\">\r\n <sd-button *ngIf=\"action.click\" class=\"ml-5\" [tooltip]=\"action.tooltip\" [icon]=\"action.icon\"\r\n [color]=\"action.color || 'secondary'\" [type]=\"action.type || 'light'\" [fontSet]=\"action.fontSet\"\r\n [title]=\"action.title\" size=\"sm\" (action)=\"action.click(selectedItems)\"></sd-button>\r\n <ng-container *ngIf=\"action.children?.length\">\r\n <sd-button class=\"ml-5\" [tooltip]=\"action.tooltip\" [icon]=\"action.icon || 'more_vert'\"\r\n [color]=\"action.color || 'secondary'\" [type]=\"action.type || 'light'\" [fontSet]=\"action.fontSet\"\r\n [title]=\"action.title\" size=\"sm\" [matMenuTriggerFor]=\"menu\">\r\n </sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <span>\r\n <button *ngFor=\"let childAction of action.children\" mat-menu-item (click)=\"childAction.click(selectedItems)\"\r\n [disabled]=\"childAction.disabled\">\r\n <mat-icon [fontSet]=\"childAction.fontSet\" class=\"c-icon\">{{ childAction.icon }}\r\n </mat-icon>\r\n <span> {{ childAction.title }}</span>\r\n </button>\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</sd-quick-action>",
|
|
1847
1847
|
animations: [
|
|
1848
1848
|
trigger('detailExpand', [
|
|
1849
1849
|
state('collapsed', style({ height: '0', minHeight: '0', visibility: 'hidden' })),
|
|
@@ -2675,7 +2675,7 @@ class SdDesktopCell {
|
|
|
2675
2675
|
SdDesktopCell.decorators = [
|
|
2676
2676
|
{ type: Component, args: [{
|
|
2677
2677
|
selector: 'sd-desktop-cell',
|
|
2678
|
-
template: "<ng-container *ngIf=\"column && item\">\r\n <ng-container *ngIf=\"item.editorHandlerRow?.visible;else useView\">\r\n <ng-container *sdLet=\"item[column.field] | sdEditorHandlerColumn:item:column:gridOption\">\r\n <ng-container *ngIf=\"item.editorHandlerColumn[column.field]?.visible;else useView\">\r\n <sd-desktop-cell-editor [column]=\"column\" [item]=\"item\"></sd-desktop-cell-editor>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #useView>\r\n <sd-desktop-cell-view [key]=\"key\" [column]=\"column\" [item]=\"item\"></sd-desktop-cell-view>\r\n </ng-template>\r\n</ng-container>",
|
|
2678
|
+
template: "<ng-container *ngIf=\"column && item\">\r\n {{item.editorHandlerRow | json}}\r\n <ng-container *ngIf=\"item.editorHandlerRow?.visible;else useView\">\r\n <ng-container *sdLet=\"item[column.field] | sdEditorHandlerColumn:item:column:gridOption\">\r\n <ng-container *ngIf=\"item.editorHandlerColumn[column.field]?.visible;else useView\">\r\n <sd-desktop-cell-editor [column]=\"column\" [item]=\"item\"></sd-desktop-cell-editor>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #useView>\r\n <sd-desktop-cell-view [key]=\"key\" [column]=\"column\" [item]=\"item\"></sd-desktop-cell-view>\r\n </ng-template>\r\n</ng-container>",
|
|
2679
2679
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2680
2680
|
styles: [".c-color-success{color:#4caf50}.c-color-danger{color:#f82c13}.c-img{font-size:30px;opacity:.5}.c-img.pointer:hover{opacity:.9}.c-badge{border-radius:20px;display:inline-block;margin-bottom:4px;padding:2px 12px;text-align:center}.c-badge.c-warning{background:#fff3e0;color:#ff9600}.c-badge.c-info{background:#e7e9ff;color:#2962ff}.c-badge.c-success{background:#e8f5e9;color:#4caf50}.c-badge.c-danger{background:#fee8e7;color:#f82c13}.c-badge.c-normal{background:rgba(0,0,0,.12);color:#000}.wes-status .c-material-icon{font-size:12px;height:12px;width:12px}.wes-status.text-secondary .c-material-icon{color:rgba(0,0,0,.5)}.c-badge-circle .c-material-icon{font-size:12px;height:12px;width:12px}.c-badge-circle.c-unknown{color:#212121}.c-badge-circle.c-unknown .c-material-icon{color:rgba(0,0,0,.5)}.c-badge-circle.c-secondary{color:#212121}.c-badge-circle.c-info{color:#2962ff}.c-badge-circle.c-success{color:#4caf50}.c-badge-circle.c-danger{color:#f82c13}.c-badge-circle.c-warning{color:#ff9600}"]
|
|
2681
2681
|
},] }
|
|
@@ -2754,6 +2754,7 @@ SdEditorHandlerRowPipe.decorators = [
|
|
|
2754
2754
|
|
|
2755
2755
|
class SdEditorHandlerColumnPipe {
|
|
2756
2756
|
transform(value, item, column, gridOption) {
|
|
2757
|
+
console.log(item);
|
|
2757
2758
|
if (column.type === 'children' || column.type === 'children-col') {
|
|
2758
2759
|
return true;
|
|
2759
2760
|
}
|