tnx-shared 5.3.342 → 5.3.344
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/tnx-shared.umd.js +76 -5
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-component-base.d.ts +1 -0
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/constants.d.ts +2 -0
- package/classes/constants.d.ts.map +1 -1
- package/esm2015/classes/base/list-component-base.js +43 -2
- package/esm2015/classes/constants.js +3 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/services/base.service.js +12 -1
- package/esm2015/services/workflow-permission-detail.service.js +7 -5
- package/fesm2015/tnx-shared.js +62 -6
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/base.service.d.ts +1 -0
- package/services/base.service.d.ts.map +1 -1
- package/services/workflow-permission-detail.service.d.ts +1 -0
- package/services/workflow-permission-detail.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -207,5 +207,7 @@ export const MaActionBatDauQuyTrinh = '_START_';
|
|
|
207
207
|
export const ActionThuHoiBase = '__THU_HOI';
|
|
208
208
|
export const ActionChoYKienBase = '__CHO_Y_KIEN';
|
|
209
209
|
export const ActionUpdateModel = '__UPDATE_MODEL';
|
|
210
|
+
export const ActionChuyenXuLyBase = '__CHUYEN_XU_LY';
|
|
211
|
+
export const TextActionChuyenXuLyBase = 'Chuyển xử lý';
|
|
210
212
|
export const FieldDefineHasTask = '__idTask';
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQyxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHVDQUFPLENBQUE7SUFDUCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDdkIscURBQVEsQ0FBQTtJQUNSLDJEQUFXLENBQUE7QUFDZixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFHRCxNQUFNLENBQU4sSUFBWSxzQkFFWDtBQUZELFdBQVksc0JBQXNCO0lBQzlCLGlEQUF1QixDQUFBLENBQUMsd0JBQXdCO0FBQ3BELENBQUMsRUFGVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRWpDO0FBR0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQiw4R0FBOEYsQ0FBQTtJQUM5RixrSEFBa0csQ0FBQTtBQUN0RyxDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLG9DQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDZixnRkFBd0UsQ0FBQTtBQUM1RSxDQUFDLEVBRlcsT0FBTyxLQUFQLE9BQU8sUUFFbEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLGdCQUFnQixFQUFFLGdC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TUFBTSxPQUFPLFNBQVM7Q0FTckI7QUFDRCxNQUFNLE9BQU8sUUFBUTtDQWdCcEI7QUFDRCxNQUFNLE9BQU8sMEJBQTBCO0NBWXRDO0FBQ0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGVudW0gRm9ybVN0YXRlIHtcbiAgICBBREQgPSAwLFxuICAgIFZJRVcgPSAxLFxuICAgIEVESVQgPSAyXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlcyB7XG4gICAgUEFHRSA9IDEsXG4gICAgQ09OVFJPTCA9IDJcbn1cblxuXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25PYmplY3RUeXBlIHtcbiAgICBDQVRFR09SWV9VUERBVEVEID0gJy0xJyAvLyBD4bqtcCBuaOG6rXQgbeG7m2kgZGFuaCBt4bulY1xufVxuXG5cbmV4cG9ydCBlbnVtIFRlbXBsYXRlVHlwZSB7XG4gICAgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JyxcbiAgICBET0NfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudDtjaGFyc2V0PVVURi04J1xufVxuXG5leHBvcnQgZW51bSBFeHRlbnNpb24ge1xuICAgIEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCcsXG4gICAgRE9DX0VYVEVOU0lPTiA9ICcuZG9jeCdcbn1cblxuZXhwb3J0IGVudW0gUGF0dGVybiB7XG4gICAgZGF0ZXRpbWUgPSAnXihbMC0yXVswLTldfCgzKVswLTFdKShcXC8pKCgoMClbMC05XSl8KCgxKVswLTJdKSkoXFwvKVxcZHs0fSQnXG59XG5cbi8qKlxuICogMDAuMDAuMDAwLnh4eDRcbiAqIHgxOiBDaMawYSBwaMOibiBsb+G6oWlcbiAqIHgyOiAgQ2jGsGEgcGjDom4gbG/huqFpXG4gKiB4MzogIENoxrBhIHBow6JuIGxv4bqhaVxuICogeDQ6IE3DoyBjb21wb25lbnRcbiAqXG4gKiAwMSAtIFMgPSBUTiBTaGFyZSAtIEThu4tjaCB24bulIGNoaWEgc+G6uyBjaHVuZ1xuICovXG5leHBvcnQgY29uc3QgU0hBUkVfQ09NUE9ORU5UX0lEID0ge1xuICAgIFNfQURWQU5DRV9TRUFSQ0g6ICcwMC4wMC4wMDAuMDAwMSdcbn07XG5cbmV4cG9ydCBjb25zdCBTSEFSRV9FVkVOVCA9IHtcbiAgICBGT1JDRV9NQVJLX0RJUlRZX0ZPUk06ICdGT1JDRV9NQVJLX0RJUlRZX0ZPUk0nXG59O1xuXG5leHBvcnQgY29uc3Qga2V5VXNlclN1cnZleUxvY2FsID0gJ19pbmZvVXNlckRvU3VydmV5JztcbmV4cG9ydCBjb25zdCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlID0gJ2N1cnJlbnRTdGF0ZUNvZGUnO1xuXG5leHBvcnQgY29uc3QgVHlwZURhbmhNdWNBUEkgPSB7XG4gICAgRE9DX0xBUDogMSxcbiAgICBQSFVfVEhVT0M6IDJcbn07XG5cbmV4cG9ydCBjb25zdCBUcmFuZ1RoYWlzID0ge1xuICAgIEluQWN0aXZlOiBmYWxzZSxcbiAgICBBY3RpdmU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBTb3J0RGlycyA9IHtcbiAgICBEZXNjOiAtMSxcbiAgICBBc2M6IDFcbn07XG5cbmV4cG9ydCBjb25zdCBTZXNzaW9uVHlwZXMgPSB7XG4gICAgTW9ybmluZzogMSxcbiAgICBBZnRlcm5vb246IDIsXG4gICAgRXZlbmluZzogM1xufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPUkVSX1RZUEVTID0ge1xuICAgIEZJTEU6IDAsXG4gICAgRk9MREVSOiAxXG59O1xuXG5leHBvcnQgY29uc3QgRklMRV9UWVBFUyA9IHtcbiAgICBJTUFHRTogJ2ltYWdlJyxcbiAgICBWSURFTzogJ3ZpZGVvJyxcbiAgICBBVURJTzogJ2F1ZGlvJyxcbiAgICBURVhUOiAndGV4dCcsXG4gICAgU1BSRUFEU0hFRVQ6ICdzcHJlYWRzaGVldCcsXG4gICAgUFJFU0VOVEFUSU9OOiAncHJlc2VudGF0aW9uJyxcbiAgICBPVEhFUjogJ290aGVyJyxcbiAgICBQREY6ICdwZGYnXG59O1xuXG5leHBvcnQgZW51bSBTaGFyZWRGb2xkZXJUeXBlIHtcbiAgICBaaXBwZWRGaWxlID0gMSxcbiAgICBBdmF0YXIgPSAyLFxuICAgIFRlbXB0ID0gMyxcbiAgICBUZW1wbGF0ZSA9IDQsXG4gICAgSW50ZXJuYWwgPSA1LFxuICAgIFNjYW5uZWRGaWxlID0gNixcbn1cblxuZXhwb3J0IGVudW0gR2VuZGVyIHtcbiAgICBGZW1hbGUgPSAwLFxuICAgIE1hbGUgPSAxLFxufVxuXG5leHBvcnQgZW51bSBFeHBvcnRJdGVtVHlwZSB7XG4gICAgRm9sZGVyID0gMSxcbiAgICBFeGNlbEZpbGUgPSAyLFxuICAgIEV4Y2VsU2hlZXQgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEVudW1Db250cm9sUGlja2VyVHlwZSB7XG4gICAgVVNFUiA9IDAsXG4gICAgU1RVREVOVCA9IDEsXG4gICAgVEVBQ0hFUiA9IDIsXG4gICAgUk9PTSA9IDMsXG4gICAgQ0xBU1MgPSA0LFxuICAgIFNVQkpFQ1QgPSA1LFxuICAgIE5HVU9JX1RIVUUgPSA2LFxuICAgIERPTl9WSSA9IDcsXG4gICAgS0hPID0gOCxcbiAgICBOR0FOSCA9IDksXG4gICAgVEhJRVRCSSA9IDEwLFxuICAgIEhPQ1BIQU5fUkFOR0JVT0MgPSAxMSxcbiAgICBPUkdBTklaQVRJT04gPSAxMixcbiAgICBIT1BET05HID0gMTMsXG4gICAgVEVBQ0hFUlBMVVMgPSAxNCxcbiAgICBERV9UQUkgPSAxNSxcbiAgICBCSUVVX01BVSA9IDE2LFxuICAgIFRFQUNIRVJGVUxMID0gMTcsXG4gICAgQ0FOQk8gPSAxNyxcbiAgICBET0lUQUMgPSAxOFxufVxuXG5leHBvcnQgZW51bSBFbnVtR2V0UmVmVHlwZSB7XG4gICAgTE9DQUwgPSAxLFxuICAgIFNFUlZFUiA9IDJcbn1cblxuZXhwb3J0IGNvbnN0IEtleUZsYXNoU2hvdyA9ICdfZmxhc2hTaG93JztcbmV4cG9ydCBjb25zdCBLZXlGaWVsZEdldFJlZlR5cGUgPSAnX3R5cGVHZXRSZWYnO1xuXG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dDb3JlQ29kZVNldHRpbmdLZXkge1xuICAgIE1BQ19ESU5IID0gJ3dvcmtmbG93Q29yZVRyaW5oS3knLFxuICAgIFBIRV9EVVlFVF8yX0JVT0MgPSAnd29ya2Zsb3dDb3JlVHJpbmhLeTJCdW9jJyxcbiAgICBQSEVfRFVZRVRfM19CVU9DID0gJ3dvcmtmbG93Q29yZVRyaW5oS3kzQnVvYydcbn1cblxuZXhwb3J0IGNvbnN0IFJFTE9BRF9GSUxFX0xJU1QgPSAnUkVMT0FEX0ZJTEVfTElTVCc7XG5cbmV4cG9ydCBlbnVtIEJ1dHRvblRleHRBY3Rpb25Db25nVmllYyB7XG4gICAgWEVNX0xJQ0hfU1UgPSAnWGVtIGzhu4tjaCBz4butJ1xufVxuXG5leHBvcnQgY29uc3QgZGF0YVNvdXJjZUljb24gPSBbXG4gICAgeyBpZDogJ3JlcGxheScsIHRlbjogJ3BpIHBpLXJlcGxheScgfSxcbiAgICB7IGlkOiAnc2hhcmUnLCB0ZW46ICdwaSBwaS1zZW5kJyB9LFxuICAgIHsgaWQ6ICdjaGVjaycsIHRlbjogJ3BpIHBpLWNoZWNrJyB9LFxuICAgIHsgaWQ6ICd0aW1lcycsIHRlbjogJ3BpIHBpLXRpbWVzJyB9LFxuICAgIHsgaWQ6ICdiYW4nLCB0ZW46ICdwaSBwaS1iYW4nIH0sXG4gICAgeyBpZDogJ2ZvcndhcmQnLCB0ZW46ICdwaSBwaS1mb3J3YXJkJyB9LFxuICAgIHsgaWQ6ICdsaW5rJywgdGVuOiAncGkgcGktbGluaycgfSxcbiAgICB7IGlkOiAnY29tbWVudCcsIHRlbjogJ3BpIHBpLWNvbW1lbnRzJyB9XG5dO1xuXG5leHBvcnQgZW51bSBFbnVtU3RhdGVUeXBlIHtcbiAgICBTVEFSVCA9IDEsXG4gICAgTk9STUFMID0gMixcbiAgICBDVVJSRU5UID0gMyxcbiAgICBESVNBQkxFID0gNCxcbiAgICBTVE9QID0gNVxufVxuZXhwb3J0IGVudW0gRW51bVRhcmdldFR5cGUge1xuICAgIFVTRVIgPSAxLFxuICAgIERFUEFSVE1FTlQgPSAyLFxuICAgIEdST1VQID0gM1xufVxuZXhwb3J0IGVudW0gRW51bVVzZXJSdWxlIHtcbiAgICBDQVBfVFJFTiA9IDIsXG4gICAgTkdVT0lfQ1VPSV9DVU5HID0gMyxcbiAgICBOR1VPSV9USEFNX0dJQV9RVVlfVFJJTkggPSA0LFxuICAgIE5HVU9JX05IQU4gPSA3LFxuICAgIE5HVU9JX1RIRU9fRE9JID0gOCxcbiAgICBOR1VPSV9USEFPX1RBQyA9IDlcbn1cbmV4cG9ydCBlbnVtIEVudW1Xb3JrZmxvd0hpc3RvcnlTdGF0dXMge1xuICAgIElOX01BSU5fVEhSRUFEID0gMCxcbiAgICBOT1RfSU5fTUFJTl9USFJFQUQgPSAxLFxuICAgIFJFQ0FMTEVEID0gMlxufVxuZXhwb3J0IGVudW0gRW51bVBlcm1pc3Npb25UeXBlIHtcbiAgICBNQUlOID0gMCxcbiAgICBTSEFSRSA9IDFcbn1cbmV4cG9ydCBlbnVtIEVudW1Xb3JrZmxvd0NoZWNrYm94T3B0aW9uIHtcbiAgICBUQU9fQ09OR19WSUVDID0gMSxcbiAgICBBVVRPX05FWFRfU1RFUCA9IDIsXG4gICAgQVVUT19TVEFSVF9UQVNLID0gM1xufVxuZXhwb3J0IGVudW0gRW51bVByb2Nlc3NXb3JrZmxvd1R5cGUge1xuICAgIEVESVQgPSAxLFxuICAgIFZJRVcgPSAyXG59XG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNOb2RlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBXZkl0ZW0ge1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBkYXRhOiBXZlNjaGVtYTtcbiAgICB0aXRsZTogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIFdmU2NoZW1hIHtcbiAgICBtYWNoaW5lczogV2ZNYWNoaW5lW107XG4gICAgY29ubmVjdGlvbnM6IFdmQWN0aW9uW107XG4gICAgYWN0aW9ucz86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogV2ZBY3Rpb25bXTtcbiAgICB9O1xufVxuZXhwb3J0IGNsYXNzIFdmTWFjaGluZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IEVudW1TdGF0ZVR5cGU7XG4gICAgbG9jYXRpb246IG51bWJlcltdO1xuICAgIGVkaXRpbmc6IGJvb2xlYW47XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBkYXRhOiBhbnk7XG59XG5leHBvcnQgY2xhc3MgV2ZBY3Rpb24ge1xuICAgIHNvVGh1VHU6IG51bWJlcjtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgZGF0YTogYW55O1xuICAgIGVkaXRpbmc6IGJvb2xlYW47XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcGVuUG9wdXA6IGJvb2xlYW47XG4gICAgb3Blbk5ld1RhYjogYm9vbGVhbjtcbiAgICBkb21haW5OZXdUYWI6IHN0cmluZztcbiAgICBsaW5rTmV3VGFiOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgc291cmNlQW5jaG9yOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgdGFyZ2V0QW5jaG9yOiBzdHJpbmc7XG4gICAgdGFyZ2V0c0FsbG93TW9kaWZ5OiBudW1iZXJbXTtcbn1cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1RhcmdldERlZmF1bHRWYWx1ZSB7XG4gICAgbHN0VXNlcklkOiBzdHJpbmdbXTtcbiAgICBsc3RVc2VyVmlld0lkOiBzdHJpbmdbXTtcbiAgICBsc3REb25WaUlkOiBzdHJpbmdbXTtcbiAgICBsc3REb25WaVZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0R3JvdXBJZDogc3RyaW5nW107XG4gICAgbHN0R3JvdXBWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdFJvbGVJZDogc3RyaW5nW107XG4gICAgbHN0Um9sZVZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0VXNlcklkSW5Xb3JrZmxvdzogc3RyaW5nW107XG4gICAgbHN0RG9uVmlJZEluV29ya2Zsb3c6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwSWRJbldvcmtmbG93OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBjb25zdCBEdW1teVdvcmtmbG93Q29kZSA9ICdEdW1teVdvcmtmbG93Q29kZSc7XG5leHBvcnQgY29uc3QgTWFBY3Rpb25CYXREYXVRdXlUcmluaCA9ICdfU1RBUlRfJztcbmV4cG9ydCBjb25zdCBBY3Rpb25UaHVIb2lCYXNlID0gJ19fVEhVX0hPSSc7XG5leHBvcnQgY29uc3QgQWN0aW9uQ2hvWUtpZW5CYXNlID0gJ19fQ0hPX1lfS0lFTic7XG5leHBvcnQgY29uc3QgQWN0aW9uVXBkYXRlTW9kZWwgPSAnX19VUERBVEVfTU9ERUwnO1xuZXhwb3J0IGNvbnN0IEZpZWxkRGVmaW5lSGFzVGFzayA9ICdfX2lkVGFzayc7XG4iXX0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQyxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHVDQUFPLENBQUE7SUFDUCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDdkIscURBQVEsQ0FBQTtJQUNSLDJEQUFXLENBQUE7QUFDZixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFHRCxNQUFNLENBQU4sSUFBWSxzQkFFWDtBQUZELFdBQVksc0JBQXNCO0lBQzlCLGlEQUF1QixDQUFBLENBQUMsd0JBQXdCO0FBQ3BELENBQUMsRUFGVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRWpDO0FBR0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQiw4R0FBOEYsQ0FBQTtJQUM5RixrSEFBa0csQ0FBQTtBQUN0RyxDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLG9DQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDZixnRkFBd0UsQ0FBQTtBQUM1RSxDQUFDLEVBRlcsT0FBTyxLQUFQLE9BQU8sUUFFbEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLGdCQUFnQixFQUFFLGdC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TUFBTSxPQUFPLFNBQVM7Q0FTckI7QUFDRCxNQUFNLE9BQU8sUUFBUTtDQWdCcEI7QUFDRCxNQUFNLE9BQU8sMEJBQTBCO0NBWXRDO0FBQ0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBlbnVtIEZvcm1TdGF0ZSB7XG4gICAgQUREID0gMCxcbiAgICBWSUVXID0gMSxcbiAgICBFRElUID0gMlxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uVHlwZXMge1xuICAgIFBBR0UgPSAxLFxuICAgIENPTlRST0wgPSAyXG59XG5cblxuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uT2JqZWN0VHlwZSB7XG4gICAgQ0FURUdPUllfVVBEQVRFRCA9ICctMScgLy8gQ+G6rXAgbmjhuq10IG3hu5tpIGRhbmggbeG7pWNcbn1cblxuXG5leHBvcnQgZW51bSBUZW1wbGF0ZVR5cGUge1xuICAgIEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCcsXG4gICAgRE9DX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQ7Y2hhcnNldD1VVEYtOCdcbn1cblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uIHtcbiAgICBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnLFxuICAgIERPQ19FWFRFTlNJT04gPSAnLmRvY3gnXG59XG5cbmV4cG9ydCBlbnVtIFBhdHRlcm4ge1xuICAgIGRhdGV0aW1lID0gJ14oWzAtMl1bMC05XXwoMylbMC0xXSkoXFwvKSgoKDApWzAtOV0pfCgoMSlbMC0yXSkpKFxcLylcXGR7NH0kJ1xufVxuXG4vKipcbiAqIDAwLjAwLjAwMC54eHg0XG4gKiB4MTogQ2jGsGEgcGjDom4gbG/huqFpXG4gKiB4MjogIENoxrBhIHBow6JuIGxv4bqhaVxuICogeDM6ICBDaMawYSBwaMOibiBsb+G6oWlcbiAqIHg0OiBNw6MgY29tcG9uZW50XG4gKlxuICogMDEgLSBTID0gVE4gU2hhcmUgLSBE4buLY2ggduG7pSBjaGlhIHPhursgY2h1bmdcbiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJFX0NPTVBPTkVOVF9JRCA9IHtcbiAgICBTX0FEVkFOQ0VfU0VBUkNIOiAnMDAuMDAuMDAwLjAwMDEnXG59O1xuXG5leHBvcnQgY29uc3QgU0hBUkVfRVZFTlQgPSB7XG4gICAgRk9SQ0VfTUFSS19ESVJUWV9GT1JNOiAnRk9SQ0VfTUFSS19ESVJUWV9GT1JNJ1xufTtcblxuZXhwb3J0IGNvbnN0IGtleVVzZXJTdXJ2ZXlMb2NhbCA9ICdfaW5mb1VzZXJEb1N1cnZleSc7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSA9ICdjdXJyZW50U3RhdGVDb2RlJztcblxuZXhwb3J0IGNvbnN0IFR5cGVEYW5oTXVjQVBJID0ge1xuICAgIERPQ19MQVA6IDEsXG4gICAgUEhVX1RIVU9DOiAyXG59O1xuXG5leHBvcnQgY29uc3QgVHJhbmdUaGFpcyA9IHtcbiAgICBJbkFjdGl2ZTogZmFsc2UsXG4gICAgQWN0aXZlOiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgU29ydERpcnMgPSB7XG4gICAgRGVzYzogLTEsXG4gICAgQXNjOiAxXG59O1xuXG5leHBvcnQgY29uc3QgU2Vzc2lvblR5cGVzID0ge1xuICAgIE1vcm5pbmc6IDEsXG4gICAgQWZ0ZXJub29uOiAyLFxuICAgIEV2ZW5pbmc6IDNcbn07XG5cbmV4cG9ydCBjb25zdCBFWFBMT1JFUl9UWVBFUyA9IHtcbiAgICBGSUxFOiAwLFxuICAgIEZPTERFUjogMVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEVfVFlQRVMgPSB7XG4gICAgSU1BR0U6ICdpbWFnZScsXG4gICAgVklERU86ICd2aWRlbycsXG4gICAgQVVESU86ICdhdWRpbycsXG4gICAgVEVYVDogJ3RleHQnLFxuICAgIFNQUkVBRFNIRUVUOiAnc3ByZWFkc2hlZXQnLFxuICAgIFBSRVNFTlRBVElPTjogJ3ByZXNlbnRhdGlvbicsXG4gICAgT1RIRVI6ICdvdGhlcicsXG4gICAgUERGOiAncGRmJ1xufTtcblxuZXhwb3J0IGVudW0gU2hhcmVkRm9sZGVyVHlwZSB7XG4gICAgWmlwcGVkRmlsZSA9IDEsXG4gICAgQXZhdGFyID0gMixcbiAgICBUZW1wdCA9IDMsXG4gICAgVGVtcGxhdGUgPSA0LFxuICAgIEludGVybmFsID0gNSxcbiAgICBTY2FubmVkRmlsZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIEdlbmRlciB7XG4gICAgRmVtYWxlID0gMCxcbiAgICBNYWxlID0gMSxcbn1cblxuZXhwb3J0IGVudW0gRXhwb3J0SXRlbVR5cGUge1xuICAgIEZvbGRlciA9IDEsXG4gICAgRXhjZWxGaWxlID0gMixcbiAgICBFeGNlbFNoZWV0ID0gM1xufVxuXG5leHBvcnQgZW51bSBFbnVtQ29udHJvbFBpY2tlclR5cGUge1xuICAgIFVTRVIgPSAwLFxuICAgIFNUVURFTlQgPSAxLFxuICAgIFRFQUNIRVIgPSAyLFxuICAgIFJPT00gPSAzLFxuICAgIENMQVNTID0gNCxcbiAgICBTVUJKRUNUID0gNSxcbiAgICBOR1VPSV9USFVFID0gNixcbiAgICBET05fVkkgPSA3LFxuICAgIEtITyA9IDgsXG4gICAgTkdBTkggPSA5LFxuICAgIFRISUVUQkkgPSAxMCxcbiAgICBIT0NQSEFOX1JBTkdCVU9DID0gMTEsXG4gICAgT1JHQU5JWkFUSU9OID0gMTIsXG4gICAgSE9QRE9ORyA9IDEzLFxuICAgIFRFQUNIRVJQTFVTID0gMTQsXG4gICAgREVfVEFJID0gMTUsXG4gICAgQklFVV9NQVUgPSAxNixcbiAgICBURUFDSEVSRlVMTCA9IDE3LFxuICAgIENBTkJPID0gMTcsXG4gICAgRE9JVEFDID0gMThcbn1cblxuZXhwb3J0IGVudW0gRW51bUdldFJlZlR5cGUge1xuICAgIExPQ0FMID0gMSxcbiAgICBTRVJWRVIgPSAyXG59XG5cbmV4cG9ydCBjb25zdCBLZXlGbGFzaFNob3cgPSAnX2ZsYXNoU2hvdyc7XG5leHBvcnQgY29uc3QgS2V5RmllbGRHZXRSZWZUeXBlID0gJ190eXBlR2V0UmVmJztcblxuZXhwb3J0IGVudW0gRW51bVdvcmtmbG93Q29yZUNvZGVTZXR0aW5nS2V5IHtcbiAgICBNQUNfRElOSCA9ICd3b3JrZmxvd0NvcmVUcmluaEt5JyxcbiAgICBQSEVfRFVZRVRfMl9CVU9DID0gJ3dvcmtmbG93Q29yZVRyaW5oS3kyQnVvYycsXG4gICAgUEhFX0RVWUVUXzNfQlVPQyA9ICd3b3JrZmxvd0NvcmVUcmluaEt5M0J1b2MnXG59XG5cbmV4cG9ydCBjb25zdCBSRUxPQURfRklMRV9MSVNUID0gJ1JFTE9BRF9GSUxFX0xJU1QnO1xuXG5leHBvcnQgZW51bSBCdXR0b25UZXh0QWN0aW9uQ29uZ1ZpZWMge1xuICAgIFhFTV9MSUNIX1NVID0gJ1hlbSBs4buLY2ggc+G7rSdcbn1cblxuZXhwb3J0IGNvbnN0IGRhdGFTb3VyY2VJY29uID0gW1xuICAgIHsgaWQ6ICdyZXBsYXknLCB0ZW46ICdwaSBwaS1yZXBsYXknIH0sXG4gICAgeyBpZDogJ3NoYXJlJywgdGVuOiAncGkgcGktc2VuZCcgfSxcbiAgICB7IGlkOiAnY2hlY2snLCB0ZW46ICdwaSBwaS1jaGVjaycgfSxcbiAgICB7IGlkOiAndGltZXMnLCB0ZW46ICdwaSBwaS10aW1lcycgfSxcbiAgICB7IGlkOiAnYmFuJywgdGVuOiAncGkgcGktYmFuJyB9LFxuICAgIHsgaWQ6ICdmb3J3YXJkJywgdGVuOiAncGkgcGktZm9yd2FyZCcgfSxcbiAgICB7IGlkOiAnbGluaycsIHRlbjogJ3BpIHBpLWxpbmsnIH0sXG4gICAgeyBpZDogJ2NvbW1lbnQnLCB0ZW46ICdwaSBwaS1jb21tZW50cycgfVxuXTtcblxuZXhwb3J0IGVudW0gRW51bVN0YXRlVHlwZSB7XG4gICAgU1RBUlQgPSAxLFxuICAgIE5PUk1BTCA9IDIsXG4gICAgQ1VSUkVOVCA9IDMsXG4gICAgRElTQUJMRSA9IDQsXG4gICAgU1RPUCA9IDVcbn1cbmV4cG9ydCBlbnVtIEVudW1UYXJnZXRUeXBlIHtcbiAgICBVU0VSID0gMSxcbiAgICBERVBBUlRNRU5UID0gMixcbiAgICBHUk9VUCA9IDNcbn1cbmV4cG9ydCBlbnVtIEVudW1Vc2VyUnVsZSB7XG4gICAgQ0FQX1RSRU4gPSAyLFxuICAgIE5HVU9JX0NVT0lfQ1VORyA9IDMsXG4gICAgTkdVT0lfVEhBTV9HSUFfUVVZX1RSSU5IID0gNCxcbiAgICBOR1VPSV9OSEFOID0gNyxcbiAgICBOR1VPSV9USEVPX0RPSSA9IDgsXG4gICAgTkdVT0lfVEhBT19UQUMgPSA5XG59XG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dIaXN0b3J5U3RhdHVzIHtcbiAgICBJTl9NQUlOX1RIUkVBRCA9IDAsXG4gICAgTk9UX0lOX01BSU5fVEhSRUFEID0gMSxcbiAgICBSRUNBTExFRCA9IDJcbn1cbmV4cG9ydCBlbnVtIEVudW1QZXJtaXNzaW9uVHlwZSB7XG4gICAgTUFJTiA9IDAsXG4gICAgU0hBUkUgPSAxXG59XG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dDaGVja2JveE9wdGlvbiB7XG4gICAgVEFPX0NPTkdfVklFQyA9IDEsXG4gICAgQVVUT19ORVhUX1NURVAgPSAyLFxuICAgIEFVVE9fU1RBUlRfVEFTSyA9IDNcbn1cbmV4cG9ydCBlbnVtIEVudW1Qcm9jZXNzV29ya2Zsb3dUeXBlIHtcbiAgICBFRElUID0gMSxcbiAgICBWSUVXID0gMlxufVxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljTm9kZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgV2ZJdGVtIHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgZGF0YTogV2ZTY2hlbWE7XG4gICAgdGl0bGU6IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBXZlNjaGVtYSB7XG4gICAgbWFjaGluZXM6IFdmTWFjaGluZVtdO1xuICAgIGNvbm5lY3Rpb25zOiBXZkFjdGlvbltdO1xuICAgIGFjdGlvbnM/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IFdmQWN0aW9uW107XG4gICAgfTtcbn1cbmV4cG9ydCBjbGFzcyBXZk1hY2hpbmUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBFbnVtU3RhdGVUeXBlO1xuICAgIGxvY2F0aW9uOiBudW1iZXJbXTtcbiAgICBlZGl0aW5nOiBib29sZWFuO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZGF0YTogYW55O1xufVxuZXhwb3J0IGNsYXNzIFdmQWN0aW9uIHtcbiAgICBzb1RodVR1OiBudW1iZXI7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIGRhdGE6IGFueTtcbiAgICBlZGl0aW5nOiBib29sZWFuO1xuICAgIGljb246IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgb3BlblBvcHVwOiBib29sZWFuO1xuICAgIG9wZW5OZXdUYWI6IGJvb2xlYW47XG4gICAgZG9tYWluTmV3VGFiOiBzdHJpbmc7XG4gICAgbGlua05ld1RhYjogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHNvdXJjZUFuY2hvcjogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xuICAgIHRhcmdldEFuY2hvcjogc3RyaW5nO1xuICAgIHRhcmdldHNBbGxvd01vZGlmeTogbnVtYmVyW107XG59XG5leHBvcnQgY2xhc3MgV29ya2Zsb3dUYXJnZXREZWZhdWx0VmFsdWUge1xuICAgIGxzdFVzZXJJZDogc3RyaW5nW107XG4gICAgbHN0VXNlclZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0RG9uVmlJZDogc3RyaW5nW107XG4gICAgbHN0RG9uVmlWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwSWQ6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwVmlld0lkOiBzdHJpbmdbXTtcbiAgICBsc3RSb2xlSWQ6IHN0cmluZ1tdO1xuICAgIGxzdFJvbGVWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdFVzZXJJZEluV29ya2Zsb3c6IHN0cmluZ1tdO1xuICAgIGxzdERvblZpSWRJbldvcmtmbG93OiBzdHJpbmdbXTtcbiAgICBsc3RHcm91cElkSW5Xb3JrZmxvdzogc3RyaW5nW107XG59XG5leHBvcnQgY29uc3QgRHVtbXlXb3JrZmxvd0NvZGUgPSAnRHVtbXlXb3JrZmxvd0NvZGUnO1xuZXhwb3J0IGNvbnN0IE1hQWN0aW9uQmF0RGF1UXV5VHJpbmggPSAnX1NUQVJUXyc7XG5leHBvcnQgY29uc3QgQWN0aW9uVGh1SG9pQmFzZSA9ICdfX1RIVV9IT0knO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkNob1lLaWVuQmFzZSA9ICdfX0NIT19ZX0tJRU4nO1xuZXhwb3J0IGNvbnN0IEFjdGlvblVwZGF0ZU1vZGVsID0gJ19fVVBEQVRFX01PREVMJztcbmV4cG9ydCBjb25zdCBBY3Rpb25DaHV5ZW5YdUx5QmFzZSA9ICdfX0NIVVlFTl9YVV9MWSc7XG5leHBvcnQgY29uc3QgVGV4dEFjdGlvbkNodXllblh1THlCYXNlID0gJ0NodXnhu4NuIHjhu60gbMO9JztcbmV4cG9ydCBjb25zdCBGaWVsZERlZmluZUhhc1Rhc2sgPSAnX19pZFRhc2snO1xuIl19
|
|
@@ -135,7 +135,7 @@ CrudListComponent.decorators = [
|
|
|
135
135
|
{ type: Component, args: [{
|
|
136
136
|
// tslint:disable-next-line: component-selector
|
|
137
137
|
selector: 'crud-list',
|
|
138
|
-
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\n [ngStyle]=\"_style\">\n <div class=\"ui-helper-clearfix crud-list-header-area\">\n <div *ngIf=\"!setting.hiddenSearch\">\n <div *ngIf=\"hasTemplate('searchCustom') && !setting.hiddenSearchCustom\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container *ngIf=\"!setting.useCommonSearch\">\n <ng-container *ngTemplateOutlet=\"getTemplate('searchCustom'); context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"setting.useCommonSearch && !hasTemplate('searchCustom')\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <div style=\"width: 100%;\">\n <common-search-form #commonSearch [parentSetting]=\"setting\" [parentModel]=\"model\"\n [templateFilter]=\"templateFilter\" [parentContext]=\"context\"\n [searchBoxTooltip]=\"setting.toolTipSearhBoxCommon\"\n (onClickSearch)=\"handleSearch($event)\"></common-search-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{\n crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\n <ng-container *ngIf=\"!paginationTemplate\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </ng-container>\n <ng-container *ngIf=\"paginationTemplate\">\n <ng-container [ngTemplateOutlet]=\"paginationTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"fit-content crud-list-body-area\">\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\n <ng-container>\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\n <ng-container *ngIf=\"hasTemplate('defaultToolbar')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('defaultToolbar')\"\n [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isBtnReady\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('toolbar')\" [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete}\">\n </ng-container>\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar\">\n <ng-container *ngIf=\"isBtnReady\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <button type=\"button\" pButton label=\"\u0110\u00E1nh STT\" class=\"p-button-text\"\n style=\"display: none\" (click)=\"danhSoThuTuGroupLastest()\"></button>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"buttonExportAll\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\"\n [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenReorder\" [ngTemplateOutlet]=\"buttonReorder\">\n </ng-container>\n <button *ngIf=\"!setting.disableShare && model.selectedItems.length > 0\"\n label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\n [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\" tooltipPosition=\"top\"\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\n (click)=\"createShareLinkMultiple()\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n <div *ngIf=\"!setting.hiddenAdvanceSearch && !setting.useCommonSearch\"\n class=\"p-col-12 advance-search-container\"\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\n <div class=\"container-table-inner\">\n <ng-container *ngIf=\"!_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"table-border-line --top\"></div>\n <div class=\"table-border-line --right\"></div>\n <div class=\"table-border-line --bottom\"></div>\n <div class=\"table-border-line --left\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\n (onDelete)=\"onDeleteSettings()\" (onCancel)=\"_showSettings = false\">\n</settings>\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\n (onCancel)=\"_showSettingsRowColor = false\">\n</settings-row>\n<!-- <workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\">\n</workflow-setting-dialog> -->\n<div #workflowSettingDialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\"></div>\n<tn-dialog #dialogWfSettingNew [visible]=\"workflowSettingModel.showEditForm\"\n [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\" [popupSize]=\"workflowSettingModel.popupSize\"\n (onHide)=\"workflowSettingModel.showEditForm = false\">\n <!-- <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new> -->\n <div #workflowsettingnew></div>\n</tn-dialog>\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\n (onCancel)=\"_showSettingsPermission = false\">\n</entity-permission>\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [styleClass]=\"'allow-selected'\" [model]=\"buttonContexts\">\n</p-contextMenu>\n<tn-dialog #dialogProcessWorkflowForm [visible]=\"processWorkflowModel.showEditForm\"\n [header]=\"processWorkflowModel.header | translate\" [popupSize]=\"processWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"processWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%; padding: 1rem\">\n <!-- <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.setting\" [item]=\"currentItem\"\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\n </process-workflow-form> -->\n <div #processWorkflowForm></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogChoYKienForm [visible]=\"choYKienModel.showEditForm\" [header]=\"choYKienModel.header | translate\"\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"choYKienModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <cho-y-kien-form #formBase [bussinessSetting]=\"choYKienModel.data.setting\"\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\n (onCancel)=\"choYKienModel.showEditForm = false\">\n </cho-y-kien-form> -->\n <div #choYKienForm></div>\n </div>\n</tn-dialog>\n<tn-dialog *ngIf=\"buttonAuthorizeModel.showEditForm\" #dialog [header]=\"buttonAuthorizeModel.header | translate\"\n [popupSize]=\"buttonAuthorizeModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"handleCloseAuthorizeButtonForm()\">\n <settings-authorize-button [authorizeButtonKey]=\"authorizeButtonKey\"\n [dataSource]=\"buttonAuthorizeModel.data.dataSource\"></settings-authorize-button>\n</tn-dialog>\n\n<tn-dialog [visible]=\"workflowHistoryModel.showEditForm\" [header]=\"workflowHistoryModel.header | translate\"\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-history-new #formBase [businessSetting]=\"workflowHistoryModel.data.setting\"\n [tableName]=\"workflowHistoryModel.data.tableName\" [item]=\"currentItem\"\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\n </workflow-history-new> -->\n <div #workflowHistoryNew></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogDetailTask [visible]=\"detailTaskModel.showEditForm\" [header]=\"detailTaskModel.header | translate\"\n [popupSize]=\"detailTaskModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"detailTaskModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [model]=\"detailTaskModel.data.taskFormModel\" [forceOnlyView]=\"true\"\n (onCancel)=\"detailTaskModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #detailTask></div>\n</tn-dialog>\n\n<tn-dialog #dialogPermissionSharing [visible]=\"permissionSharingModel.showEditForm\"\n [header]=\"permissionSharingModel.header | translate\" [popupSize]=\"permissionSharingModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"permissionSharingModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\n </permission-sharing> -->\n <div #permissionSharing></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogWorkflowPermission [visible]=\"permissionListModel.showEditForm\"\n [header]=\"permissionListModel.header | translate\" [popupSize]=\"permissionListModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"permissionListModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"\n (onCancel)=\"permissionListModel.showEditForm = false\">\n </workflow-permission> -->\n <div #workflowPermission></div>\n </div>\n</tn-dialog>\n<!-- <workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\n</workflow-history-dialog> -->\n<div #workflowPermission *ngIf=\"showHistoryWorkflow\"></div>\n<tn-dialog #dialogstartWorkflow [visible]=\"startWorkflowModel.showEditForm\"\n [header]=\"startWorkflowModel.header | translate\" [popupSize]=\"startWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"startWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\n </start-workflow> -->\n <div #startWorkflow></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViecForm [visible]=\"congViecModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\n (onHide)=\"congViecModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #baseCongViecForm></div>\n</tn-dialog>\n<tn-dialog #dialog *ngIf=\"shareLinkModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"shareLinkModel.showEditForm = false\">\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </share-link-by-permission>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViec [visible]=\"attachedTaskModel.showEditForm\"\n [header]=\"attachedTaskModel.header | translate\" [popupSize]=\"attachedTaskModel.popupSize\"\n [useDefaultScrollBar]=\"true\" (onHide)=\"attachedTaskModel.showEditForm = false\">\n <!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"\n [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec> -->\n <div #baseCongViec></div>\n</tn-dialog>\n<ng-template #tableGetGroupFieldFalse>\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\n [expandedRowKeys]=\"model.expandedRowKeys\" [(selection)]=\"model.selectedItems\"\n (onRowReorder)=\"handleRowOrdered($event)\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"rowExpansion; context: {$implicit: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n<ng-template #tableGetGroupFieldTrue>\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\n (onChange)=\"handleCheckRowGroup(rowData)\">\n </p-checkbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!rowGroup\">\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\n <div class=\"container-row-group\">\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\n [class.sticky]=\"setting.stickyColumn\">\n <i style=\"margin-right:5px\"\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n <div class=\"content-row-group\">\n <ng-container *ngIf=\"!contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n </div>\n </a>\n </div>\n </td>\n </ng-container>\n <ng-container *ngIf=\"rowGroup\">\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\n </ng-container>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n <after-view-checked></after-view-checked>\n</ng-template>\n<ng-template #baseColgroup let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" [style.width]=\"widthCheckbox\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" />\n <col *ngIf=\"rowExpansion\" style=\"width: 2.5rem\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"enableReorderRow\" style=\"width: 30px\" />\n <col *ngIf=\"!setting.hiddenFunctionColumn\" [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n</ng-template>\n<ng-template #buttonAdd>\n <button #buttonBase appAuthorize type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\n class=\"p-button-text\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" [disabled]=\"!model.baseReady\"\n (click)=\"add()\"></button>\n</ng-template>\n<ng-template #buttonExportAll>\n <button *ngIf=\"setting.showExportAll\" #buttonBase appAuthorize type=\"button\" pButton pRipple label=\"Xu\u1EA5t t\u1EA5t c\u1EA3\"\n icon=\"fas fa-file-excel\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"exportAllData()\"></button>\n</ng-template>\n<ng-template #buttonExport>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-excel\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"xuatCacMucDaChon()\"></button>\n</ng-template>\n<ng-template #buttonAuthorize>\n <button *ngIf=\"!setting.hiddenAuthorizeButton && authorizeButtonKey\" type=\"button\" pButton pRipple\n label=\"Ph\u00E2n quy\u1EC1n n\u00FAt\" icon=\"fas fa-tools\" class=\"p-button-text\" (click)=\"onShowFormSettingButton()\"></button>\n</ng-template>\n\n<ng-template #buttonExportWord>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-word\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"printByReadingHtml()\"></button>\n</ng-template>\n<ng-template #buttonDelete>\n <button #buttonBase *ngIf=\"(!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete())\"\n appAuthorize type=\"button\" pButton pRipple label=\"X\u00F3a c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #buttonReorder>\n <button #buttonBase\n *ngIf=\"showSaveReorder && enableReorderRow && (_sortField == setting.columnSetting.sortField || _sortDir == 0)\"\n appAuthorize type=\"button\" pButton pRipple label=\"L\u01B0u s\u1EAFp x\u1EBFp\" icon=\"pi pi-save\"\n class=\"p-button-text p-button-success\" (click)=\"saveReorder()\"></button>\n</ng-template>\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"title-row\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\n <th class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!hasTemplate('headerCheckbox') && !setting.useCommonSearch\" type=\"button\" pButton pRipple\n icon=\"pi pi-refresh\" class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"reload()\"></button>\n <p-triStateCheckbox *ngIf=\"setting.useCommonSearch\" [(ngModel)]=\"checkedAll\" binary=\"true\"\n (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\" [class.sticky]=\"setting.stickyColumn\"\n (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\n [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngIf=\"hasTemplate('trHeaderBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\" [pTooltip]=\"col.fullLabel\"\n tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\n [className]=\"col.isPinned && col.width ? col.class : ''\" [class.first-th]=\"i==0\" [escape]=\"false\"\n tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\" [tnSortableColumnDisabled]=\"!col.sort\">\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\n <ng-container *ngIf=\"col.sort || col.sortClient\">\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\n </ng-container>\n </th>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('trHeaderAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\n </ng-container>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [className]=\"col.isPinned && col.width ? col.class + ' cell-header-filter center': 'cell-header-filter center'\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'intWithoutMask'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </tr>\n</ng-template>\n<ng-template #buttonBaseSetting>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <th class=\"center setting-cell column-function\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew(dialogWfSettingNew)\"></button>\n <div *ngIf=\"setting.hiddenSetting && setting.hiddenSettingPermission && setting.hiddenSettingWorkflow\"\n class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n\n</ng-template>\n<ng-template #colFunctionHeader>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <ng-container *ngIf=\"setting.hiddenFilterRow\">\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!setting.hiddenFilterRow\">\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\">\n <div class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTh let-col>\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\n {{col.label}}\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n</ng-template>\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\n <tr *ngIf=\"!rowData.template\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\" [ngClass]=\"rowData.objStyleClass\"\n [class.ui-state-highlight]=\"rowData._checked\" [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\"\n [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\" (click)=\"eventSelectRow($event, rowData)\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox && !rowData.hidden[fieldCheckbox]\">\n <td class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldCheckbox]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldCheckbox]\">\n <ng-container *ngIf=\"!rowData.hiddenCheckBox\">\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\n </p-checkbox>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n <td *ngIf=\"!setting.hiddenOrderColumn && !rowData.hidden[fieldOrder]\" class=\"stt\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\n <span class=\"row-card\" [ngStyle]=\"rowData.bookmarkStyle\"></span>\n {{rowData[fieldOrder]}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <td *ngIf=\"rowExpansion && !rowData.hidden[fieldColExpand]\" class=\"no-padding center row-expansion-toggle\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColExpand]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColExpand]\">\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!hasTemplate('dynamicColBodys')\">\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodys')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodys')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"enableReorderRow && !rowData.hidden[fieldColReorder]\" class=\"no-padding center\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColReorder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColReorder]\">\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn && !rowData.hidden[fieldFunction]\">\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldFunction]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldFunction]\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\n class=\"p-button-rounded p-button-text p-button-success link-or-action\"\n pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\" tooltipPosition=\"top\"\n (click)=\"showListVersion(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenEdit\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableEdit(rowData)\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n pTooltip=\"S\u1EEDa\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\n (click)=\"edit(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenDelete\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\n (click)=\"delete(rowData)\"></button>\n <ng-container *ngIf=\"!hiddenBtnFunction\">\n <button *ngIf=\"showMenuButtons && menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\" [disabled]=\"rowData.disableFunctionRow\"\n (click)=\"showContextMenu($event, rowData)\"></button>\n </ng-container>\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n </tr>\n <ng-container *ngIf=\"rowData.template\">\n <ng-container *ngTemplateOutlet=\"rowData.template; context: {\n $implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: eventSelectRow, eventChecked: eventChecked\n }\"></ng-container>\n </ng-container>\n</ng-template>\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && !rowData.hidden[col.field]\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <span *ngIf=\"col.pipe\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\" class=\"contentTd\" [ngClass]=\"{'limit-line': setting.isLimitNumberOfLine}\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <ng-container *ngIf=\"col.click\">\n <a href=\"javascript:;\" (click)=\"col.click(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"!col.click\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\" class=\"\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'timespan'\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'intWithoutMask'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'currency'\">\n {{rowData[field] | currency:\"VND\"}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'fileUpload'\">\n <ng-container\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fileManager'\">\n <ng-container\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n </a>\n</ng-template>\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\n (click)=\"handleToggleRow(rowData, $event)\"></button>\n</ng-template>\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\n </ng-container>\n <span *ngIf=\"setting.columnSetting.showGroupSize\">\n ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\n</ng-template>\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\n <div class=\"container-text-workflow\">\n <button *ngIf=\"!rowData.__workflowCode && !rowData.hiddenWorkflowAction && !rowData.hiddenStartWorkflow\" pButton\n class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\" style=\"border: 1px solid #7ca9cd;\"\n pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\n [disabled]=\"rowData.__startingWorkflow && !rowData.__notReadyForStart\"\n (click)=\"showFormStartWorkflow(rowData, dialogstartWorkflow)\"></button>\n <ng-container *ngIf=\"rowData.__workflowCode\">\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\n [disabled]=\"showingActionWorkflow\"\n (click)=\"showActionWorkflow($event, rowData, dialogProcessWorkflowForm, dialogDetailTask, dialogChoYKienForm)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #viewHistory let-rowData=\"rowData\">\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflow(setting, rowData)\"></button>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #sortIcon let-field=\"field\">\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onChanged)=\"prepareSearch(col)\" (onHideSmartEvent)=\"onSearch()\"\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHide)=\"onHideFilterDropdownPanel($event)\"\n (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" [placeholder]=\"col.placeholder\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\" let-control=\"control\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"control\" (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton *ngIf=\"!col.minimizeFilter\"\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n <ng-container *ngIf=\"col.minimizeFilter\">\n <button *ngIf=\"!filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter-slash\"\n class=\"btn-filter-boolean\" (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n <button *ngIf=\"filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter\"\n class=\"btn-filter-boolean p-button-primary\"\n (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\n <file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingFileInstanceId\"\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </file-upload>\n\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [(ngModel)]=\"rowData.field\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </service-file-upload>\n</ng-template>\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [maxFileSize]=\"fileSetting.control.maxFileSize\"\n [inTaiLieu]=\"fileSetting.control.inTaiLieu\" [(value)]=\"rowData[field]\" [disabled]=\"fileSetting.control.disabled\"\n [noFileMessage]=\"fileSetting.control.noFileMessage\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\"\n (uploaded)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.UPLOADED)\">\n </file-manager>\n</ng-template>",
|
|
138
|
+
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\n [ngStyle]=\"_style\">\n <div class=\"ui-helper-clearfix crud-list-header-area\">\n <div *ngIf=\"!setting.hiddenSearch\">\n <div *ngIf=\"hasTemplate('searchCustom') && !setting.hiddenSearchCustom\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container *ngIf=\"!setting.useCommonSearch\">\n <ng-container *ngTemplateOutlet=\"getTemplate('searchCustom'); context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"setting.useCommonSearch && !hasTemplate('searchCustom')\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <div style=\"width: 100%;\">\n <common-search-form #commonSearch [parentSetting]=\"setting\" [parentModel]=\"model\"\n [templateFilter]=\"templateFilter\" [parentContext]=\"context\"\n [searchBoxTooltip]=\"setting.toolTipSearhBoxCommon\"\n (onClickSearch)=\"handleSearch($event)\"></common-search-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{\n crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\n <ng-container *ngIf=\"!paginationTemplate\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </ng-container>\n <ng-container *ngIf=\"paginationTemplate\">\n <ng-container [ngTemplateOutlet]=\"paginationTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"fit-content crud-list-body-area\">\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\n <ng-container>\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\n <ng-container *ngIf=\"hasTemplate('defaultToolbar')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('defaultToolbar')\"\n [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isBtnReady\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('toolbar')\" [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete}\">\n </ng-container>\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar\">\n <ng-container *ngIf=\"isBtnReady\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <button type=\"button\" pButton label=\"\u0110\u00E1nh STT\" class=\"p-button-text\"\n style=\"display: none\" (click)=\"danhSoThuTuGroupLastest()\"></button>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"buttonExportAll\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\"\n [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenReorder\" [ngTemplateOutlet]=\"buttonReorder\">\n </ng-container>\n <button *ngIf=\"!setting.disableShare && model.selectedItems.length > 0\"\n label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\n [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\" tooltipPosition=\"top\"\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\n (click)=\"createShareLinkMultiple()\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n <div *ngIf=\"!setting.hiddenAdvanceSearch && !setting.useCommonSearch\"\n class=\"p-col-12 advance-search-container\"\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\n <div class=\"container-table-inner\">\n <ng-container *ngIf=\"!_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"table-border-line --top\"></div>\n <div class=\"table-border-line --right\"></div>\n <div class=\"table-border-line --bottom\"></div>\n <div class=\"table-border-line --left\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\n (onDelete)=\"onDeleteSettings()\" (onCancel)=\"_showSettings = false\">\n</settings>\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\n (onCancel)=\"_showSettingsRowColor = false\">\n</settings-row>\n<!-- <workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\">\n</workflow-setting-dialog> -->\n<div #workflowSettingDialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\"></div>\n<tn-dialog #dialogWfSettingNew [visible]=\"workflowSettingModel.showEditForm\"\n [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\" [popupSize]=\"workflowSettingModel.popupSize\"\n (onHide)=\"workflowSettingModel.showEditForm = false\">\n <!-- <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new> -->\n <div #workflowsettingnew></div>\n</tn-dialog>\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\n (onCancel)=\"_showSettingsPermission = false\">\n</entity-permission>\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [styleClass]=\"'allow-selected'\" [model]=\"buttonContexts\">\n</p-contextMenu>\n<tn-dialog #dialogProcessWorkflowForm [visible]=\"processWorkflowModel.showEditForm\"\n [header]=\"processWorkflowModel.header | translate\" [popupSize]=\"processWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"processWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%; padding: 1rem\">\n <!-- <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.setting\" [item]=\"currentItem\"\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\n </process-workflow-form> -->\n <div #processWorkflowForm></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogChoYKienForm [visible]=\"choYKienModel.showEditForm\" [header]=\"choYKienModel.header | translate\"\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"choYKienModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <cho-y-kien-form #formBase [bussinessSetting]=\"choYKienModel.data.setting\"\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\n (onCancel)=\"choYKienModel.showEditForm = false\">\n </cho-y-kien-form> -->\n <div #choYKienForm></div>\n </div>\n</tn-dialog>\n<tn-dialog *ngIf=\"buttonAuthorizeModel.showEditForm\" #dialog [header]=\"buttonAuthorizeModel.header | translate\"\n [popupSize]=\"buttonAuthorizeModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"handleCloseAuthorizeButtonForm()\">\n <settings-authorize-button [authorizeButtonKey]=\"authorizeButtonKey\"\n [dataSource]=\"buttonAuthorizeModel.data.dataSource\"></settings-authorize-button>\n</tn-dialog>\n\n<tn-dialog [visible]=\"workflowHistoryModel.showEditForm\" [header]=\"workflowHistoryModel.header | translate\"\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-history-new #formBase [businessSetting]=\"workflowHistoryModel.data.setting\"\n [tableName]=\"workflowHistoryModel.data.tableName\" [item]=\"currentItem\"\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\n </workflow-history-new> -->\n <div #workflowHistoryNew></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogDetailTask [visible]=\"detailTaskModel.showEditForm\" [header]=\"detailTaskModel.header | translate\"\n [popupSize]=\"detailTaskModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"detailTaskModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [model]=\"detailTaskModel.data.taskFormModel\" [forceOnlyView]=\"true\"\n (onCancel)=\"detailTaskModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #detailTask></div>\n</tn-dialog>\n\n<tn-dialog #dialogPermissionSharing [visible]=\"permissionSharingModel.showEditForm\"\n [header]=\"permissionSharingModel.header | translate\" [popupSize]=\"permissionSharingModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"permissionSharingModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\n </permission-sharing> -->\n <div #permissionSharing></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogWorkflowPermission [visible]=\"permissionListModel.showEditForm\"\n [header]=\"permissionListModel.header | translate\" [popupSize]=\"permissionListModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"permissionListModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"\n (onCancel)=\"permissionListModel.showEditForm = false\">\n </workflow-permission> -->\n <div #workflowPermission></div>\n </div>\n</tn-dialog>\n<!-- <workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\n</workflow-history-dialog> -->\n<div #workflowPermission *ngIf=\"showHistoryWorkflow\"></div>\n<tn-dialog #dialogstartWorkflow [visible]=\"startWorkflowModel.showEditForm\"\n [header]=\"startWorkflowModel.header | translate\" [popupSize]=\"startWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"startWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\n </start-workflow> -->\n <div #startWorkflow></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViecForm [visible]=\"congViecModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\n (onHide)=\"congViecModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #baseCongViecForm></div>\n</tn-dialog>\n<tn-dialog #dialog *ngIf=\"shareLinkModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"shareLinkModel.showEditForm = false\">\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </share-link-by-permission>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViec [visible]=\"attachedTaskModel.showEditForm\"\n [header]=\"attachedTaskModel.header | translate\" [popupSize]=\"attachedTaskModel.popupSize\"\n [useDefaultScrollBar]=\"true\" (onHide)=\"attachedTaskModel.showEditForm = false\">\n <!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"\n [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec> -->\n <div #baseCongViec></div>\n</tn-dialog>\n<ng-template #tableGetGroupFieldFalse>\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\n [expandedRowKeys]=\"model.expandedRowKeys\" [(selection)]=\"model.selectedItems\"\n (onRowReorder)=\"handleRowOrdered($event)\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"rowExpansion; context: {$implicit: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n<ng-template #tableGetGroupFieldTrue>\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\n (onChange)=\"handleCheckRowGroup(rowData)\">\n </p-checkbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!rowGroup\">\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\n <div class=\"container-row-group\">\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\n [class.sticky]=\"setting.stickyColumn\">\n <i style=\"margin-right:5px\"\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n <div class=\"content-row-group\">\n <ng-container *ngIf=\"!contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n </div>\n </a>\n </div>\n </td>\n </ng-container>\n <ng-container *ngIf=\"rowGroup\">\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\n </ng-container>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n <after-view-checked></after-view-checked>\n</ng-template>\n<ng-template #baseColgroup let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" [style.width]=\"widthCheckbox\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" />\n <col *ngIf=\"rowExpansion\" style=\"width: 2.5rem\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"enableReorderRow\" style=\"width: 30px\" />\n <col *ngIf=\"!setting.hiddenFunctionColumn\" [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n</ng-template>\n<ng-template #buttonAdd>\n <button #buttonBase appAuthorize type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\n class=\"p-button-text\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" [disabled]=\"!model.baseReady\"\n (click)=\"add()\"></button>\n</ng-template>\n<ng-template #buttonExportAll>\n <button *ngIf=\"setting.showExportAll\" #buttonBase appAuthorize type=\"button\" pButton pRipple label=\"Xu\u1EA5t t\u1EA5t c\u1EA3\"\n icon=\"fas fa-file-excel\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"exportAllData()\"></button>\n</ng-template>\n<ng-template #buttonExport>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-excel\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"xuatCacMucDaChon()\"></button>\n</ng-template>\n<ng-template #buttonAuthorize>\n <button *ngIf=\"!setting.hiddenAuthorizeButton && authorizeButtonKey\" type=\"button\" pButton pRipple\n label=\"Ph\u00E2n quy\u1EC1n n\u00FAt\" icon=\"fas fa-tools\" class=\"p-button-text\" (click)=\"onShowFormSettingButton()\"></button>\n</ng-template>\n\n<ng-template #buttonExportWord>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-word\" class=\"p-button-text p-button-success\"\n [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\" (click)=\"printByReadingHtml()\"></button>\n</ng-template>\n<ng-template #buttonDelete>\n <button #buttonBase *ngIf=\"(!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete())\"\n appAuthorize type=\"button\" pButton pRipple label=\"X\u00F3a c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #buttonReorder>\n <button #buttonBase\n *ngIf=\"showSaveReorder && enableReorderRow && (_sortField == setting.columnSetting.sortField || _sortDir == 0)\"\n appAuthorize type=\"button\" pButton pRipple label=\"L\u01B0u s\u1EAFp x\u1EBFp\" icon=\"pi pi-save\"\n class=\"p-button-text p-button-success\" (click)=\"saveReorder()\"></button>\n</ng-template>\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"title-row\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\n <th class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!hasTemplate('headerCheckbox') && !setting.useCommonSearch\" type=\"button\" pButton pRipple\n icon=\"pi pi-refresh\" class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"reload()\"></button>\n <p-triStateCheckbox *ngIf=\"setting.useCommonSearch\" [(ngModel)]=\"checkedAll\" binary=\"true\"\n (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\" [class.sticky]=\"setting.stickyColumn\"\n (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\n [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngIf=\"hasTemplate('trHeaderBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\" [pTooltip]=\"col.fullLabel\"\n tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\n [className]=\"col.isPinned && col.width ? col.class : ''\" [class.first-th]=\"i==0\" [escape]=\"false\"\n tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\" [tnSortableColumnDisabled]=\"!col.sort\">\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\n <ng-container *ngIf=\"col.sort || col.sortClient\">\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\n </ng-container>\n </th>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('trHeaderAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\n </ng-container>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [className]=\"col.isPinned && col.width ? col.class + ' cell-header-filter center': 'cell-header-filter center'\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'intWithoutMask'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </tr>\n</ng-template>\n<ng-template #buttonBaseSetting>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <th class=\"center setting-cell column-function\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew(dialogWfSettingNew)\"></button>\n <div *ngIf=\"setting.hiddenSetting && setting.hiddenSettingPermission && setting.hiddenSettingWorkflow && setting.hiddenFilterRow\"\n class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n\n</ng-template>\n<ng-template #colFunctionHeader>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <ng-container *ngIf=\"setting.hiddenFilterRow\">\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!setting.hiddenFilterRow\">\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\">\n <div class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTh let-col>\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\n {{col.label}}\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n</ng-template>\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\n <tr *ngIf=\"!rowData.template\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\" [ngClass]=\"rowData.objStyleClass\"\n [class.ui-state-highlight]=\"rowData._checked\" [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\"\n [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\" (click)=\"eventSelectRow($event, rowData)\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox && !rowData.hidden[fieldCheckbox]\">\n <td class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldCheckbox]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldCheckbox]\">\n <ng-container *ngIf=\"!rowData.hiddenCheckBox\">\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\n </p-checkbox>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n <td *ngIf=\"!setting.hiddenOrderColumn && !rowData.hidden[fieldOrder]\" class=\"stt\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\n <span class=\"row-card\" [ngStyle]=\"rowData.bookmarkStyle\"></span>\n {{rowData[fieldOrder]}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <td *ngIf=\"rowExpansion && !rowData.hidden[fieldColExpand]\" class=\"no-padding center row-expansion-toggle\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColExpand]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColExpand]\">\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!hasTemplate('dynamicColBodys')\">\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodys')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodys')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"enableReorderRow && !rowData.hidden[fieldColReorder]\" class=\"no-padding center\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColReorder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColReorder]\">\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn && !rowData.hidden[fieldFunction]\">\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldFunction]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldFunction]\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\n class=\"p-button-rounded p-button-text p-button-success link-or-action\"\n pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\" tooltipPosition=\"top\"\n (click)=\"showListVersion(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenEdit\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableEdit(rowData)\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n pTooltip=\"S\u1EEDa\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\n (click)=\"edit(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenDelete\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [suffixAuthorizeCode]=\"setting.suffixAuthorizeCode\"\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\n (click)=\"delete(rowData)\"></button>\n <ng-container *ngIf=\"!hiddenBtnFunction\">\n <button *ngIf=\"showMenuButtons && menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\" [disabled]=\"rowData.disableFunctionRow\"\n (click)=\"showContextMenu($event, rowData)\"></button>\n </ng-container>\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n </tr>\n <ng-container *ngIf=\"rowData.template\">\n <ng-container *ngTemplateOutlet=\"rowData.template; context: {\n $implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: eventSelectRow, eventChecked: eventChecked\n }\"></ng-container>\n </ng-container>\n</ng-template>\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && !rowData.hidden[col.field]\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <span *ngIf=\"col.pipe\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\" class=\"contentTd\" [ngClass]=\"{'limit-line': setting.isLimitNumberOfLine}\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <ng-container *ngIf=\"col.click\">\n <a href=\"javascript:;\" (click)=\"col.click(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"!col.click\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\" class=\"\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'timespan'\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'intWithoutMask'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'currency'\">\n {{rowData[field] | currency:\"VND\"}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'fileUpload'\">\n <ng-container\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fileManager'\">\n <ng-container\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n </a>\n</ng-template>\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\n (click)=\"handleToggleRow(rowData, $event)\"></button>\n</ng-template>\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\n </ng-container>\n <span *ngIf=\"setting.columnSetting.showGroupSize\">\n ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\n</ng-template>\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\n <div class=\"container-text-workflow\">\n <button *ngIf=\"!rowData.__workflowCode && !rowData.hiddenWorkflowAction && !rowData.hiddenStartWorkflow\" pButton\n class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\" style=\"border: 1px solid #7ca9cd;\"\n pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\n [disabled]=\"rowData.__startingWorkflow && !rowData.__notReadyForStart\"\n (click)=\"showFormStartWorkflow(rowData, dialogstartWorkflow)\"></button>\n <ng-container *ngIf=\"rowData.__workflowCode\">\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\n [disabled]=\"showingActionWorkflow\"\n (click)=\"showActionWorkflow($event, rowData, dialogProcessWorkflowForm, dialogDetailTask, dialogChoYKienForm)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #viewHistory let-rowData=\"rowData\">\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflow(setting, rowData)\"></button>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #sortIcon let-field=\"field\">\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onChanged)=\"prepareSearch(col)\" (onHideSmartEvent)=\"onSearch()\"\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHide)=\"onHideFilterDropdownPanel($event)\"\n (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" [placeholder]=\"col.placeholder\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\" let-control=\"control\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"control\" (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton *ngIf=\"!col.minimizeFilter\"\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n <ng-container *ngIf=\"col.minimizeFilter\">\n <button *ngIf=\"!filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter-slash\"\n class=\"btn-filter-boolean\" (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n <button *ngIf=\"filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter\"\n class=\"btn-filter-boolean p-button-primary\"\n (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\n <file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingFileInstanceId\"\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </file-upload>\n\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [(ngModel)]=\"rowData.field\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </service-file-upload>\n</ng-template>\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [maxFileSize]=\"fileSetting.control.maxFileSize\"\n [inTaiLieu]=\"fileSetting.control.inTaiLieu\" [(value)]=\"rowData[field]\" [disabled]=\"fileSetting.control.disabled\"\n [noFileMessage]=\"fileSetting.control.noFileMessage\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\"\n (uploaded)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.UPLOADED)\">\n </file-manager>\n</ng-template>",
|
|
139
139
|
providers: [DecimalPipe, DatePipe],
|
|
140
140
|
styles: [".container-table{display:flex;overflow:hidden;flex-direction:column}.container-table .container-table-inner{display:flex;position:relative;height:auto;max-height:100%;min-height:60px}.container-table-inner>tn-custom-scrollbar{width:100%}.cell-checkbox{text-align:center}.pick-color-row{top:0;left:0;right:0;bottom:0;margin:auto;position:absolute;display:flex;flex-wrap:wrap;width:1.4em;height:1.4em;border:1px solid #d1d1d1;border-radius:2px;cursor:pointer}.pick-color-row>div{flex:0 0 50%;background:#84d140;border:1px solid #fff}.pick-color-row>div:nth-child(2){background:#fc6868}.pick-color-row>div:nth-child(3){background:#fbc02d}.pick-color-row>div:nth-child(4){background:#7dc5ff}.cell-header-function{display:flex;align-items:center}.cell-header-function>span{text-align:center;flex:1 1}.cell-header-function button{width:24px;height:24px;padding:0;margin:0}.group-icon{font-weight:400;color:#256aa2}.group-icon i{font-size:.8em;margin-right:5px}.center{text-align:center!important}.row-card{position:absolute;left:0;top:0;width:5px;height:100%}.column-function{min-width:100px;padding:0}.custom-search-area{margin:-.5em -1em .5em;padding-left:.5em;padding-right:.5em;background-color:#f2f2f2}.main-title>h1{font-size:1.2em}.filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.container-text-workflow{display:flex;align-items:center;justify-content:center}.container-text-workflow .link-or-action{color:#2196f3;cursor:pointer}.container-text-workflow .content{flex:1 1}.btnReload{height:2rem!important;width:2rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.toggle-showfull{color:#00f;cursor:pointer;font-size:.8rem;white-space:nowrap;font-weight:700}.col-share-permission>div:not(:last-child){margin-bottom:5px}.advance-search-container{display:flex;justify-content:flex-end}.btn-filter-boolean{width:26px;height:26px}.btn-filter-boolean:not(.p-button-primary),.btn-filter-boolean:not(.p-button-primary):hover{background:#f5f6f8;color:#6c757d;border-color:#ced4da}::ng-deep crud-list advance-search{display:block;flex:1;max-width:400px}::ng-deep crud-list .ps__rail-x,::ng-deep crud-list .ps__rail-y{z-index:5}::ng-deep crud-list .main-title>*>h1{font-size:1.2em}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep crud-list .check-all-custom{position:absolute;width:0;height:0}::ng-deep crud-list .cell-header-filter{position:relative}::ng-deep crud-list .cell-header-filter .tn-dropdown{height:32px}::ng-deep crud-list .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep crud-list .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep crud-list .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep crud-list .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep crud-list .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep crud-list .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep crud-list .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep crud-list .cell-header-filter.focus-within,::ng-deep crud-list .cell-header-filter:focus-within{z-index:10!important}::ng-deep crud-list .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep crud-list .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep crud-list .cell-header-filter.focus-within .filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep crud-list .cell-header-filter:last-child .filter-box{right:3px}::ng-deep crud-list .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep crud-list .table-border-line.--left,::ng-deep crud-list .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep crud-list .table-border-line.--bottom,::ng-deep crud-list .table-border-line.--top{left:0;right:0;height:1px}::ng-deep crud-list .table-border-line.--left{left:0}::ng-deep crud-list .table-border-line.--right{right:0}::ng-deep crud-list .table-border-line.--top{top:0}::ng-deep crud-list .table-border-line.--bottom{bottom:0}::ng-deep crud-list .filter-boolean-box{text-align:center}::ng-deep crud-list .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep crud-list .custom-search-area crud-form{width:100%}::ng-deep crud-list .custom-search-area .main-container-search-inner .container-control{overflow:hidden;padding-bottom:0}::ng-deep crud-list>p-contextmenu{display:none}::ng-deep crud-list .contentTd.limit-line{overflow:hidden;display:-webkit-box;-webkit-line-clamp:7;-webkit-box-orient:vertical}@media (max-width:640px){::ng-deep crud-list .--table-responsive .p-datatable-wrapper{padding:1px}}"]
|
|
141
141
|
},] }
|
|
@@ -146,4 +146,4 @@ CrudListComponent.ctorParameters = () => [
|
|
|
146
146
|
CrudListComponent.propDecorators = {
|
|
147
147
|
commonSearch: [{ type: ViewChild, args: ['commonSearch',] }]
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFVbEcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUlwRCxZQUNXLFNBQW1CO1FBRTFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUg5QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBcUV0QiwyQkFBc0IsR0FBRyxDQUFPLE9BQTBCLEVBQUUsS0FBTSxFQUFFLE9BQVEsRUFBRSxJQUFLLEVBQUUsRUFBRTtZQUNuRixNQUFNLFNBQVMsR0FBRztnQkFDZCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsSUFBSTthQUNQLENBQUM7WUFFRixRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNuQixJQUFJOzRCQUNBLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdEM7d0JBQ0QsV0FBTTt5QkFDTDtx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SyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDekMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztvQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNWO2lCQUNJO2dCQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2FBQ3BDO1FBQ0wsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7O1lBNUVKLFNBQVMsU0FBQztnQkFDUCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxXQUFXO2dCQUNyQix1Z3dFQUF5QztnQkFFekMsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQzs7YUFDckM7OztZQWRtQixRQUFROzs7MkJBZ0J2QixTQUFTLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9pLWxpc3QtY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2xpc3QtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ3J1ZExpc3RTZXR0aW5nLCBFdmVudFR5cGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbW1vblNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24tc2VhcmNoLWZvcm0vY29tbW9uLXNlYXJjaC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkU2V0dGluZyB9IGZyb20gJy4uLy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2ZpbGUtc2V0dGluZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnY3J1ZC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jcnVkLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZSwgRGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENydWRMaXN0Q29tcG9uZW50IGV4dGVuZHMgTGlzdENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBJTGlzdENvbXBvbmVudCwgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjb21tb25TZWFyY2gnKSBjb21tb25TZWFyY2g6IENvbW1vblNlYXJjaEZvcm1Db21wb25lbnQ7XG4gICAgZXZlbnRUeXBlID0gRXZlbnRUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3RvciwgZmFsc2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zID09IGRlZmF1bHRTZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICYmIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zID0gdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YT8uY3VycmVudEFwcE1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2V0dGluZztcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0U2V0dGluZ1trZXldID09IHRoaXMuc2V0dGluZ1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBzZXR0aW5nW2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSBzZXR0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1trZXldID0gc2V0dGluZ1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcgfHwgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYmxlLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLW92ZXJsYXknKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5jbG9zZXN0KCdwLXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlU2Nyb2xsQmFyQ29udGVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVTY3JvbGxCYXJDb250ZW50LmNsYXNzTGlzdC5jb250YWlucygncHMtY29udGVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbm9kZVNjcm9sbEJhckNvbnRlbnQucGFyZW50Tm9kZS5wcmVwZW5kKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUaCA9IGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdwLXRhYmxlIHRoZWFkIHRyOmZpcnN0LWNoaWxkID4gdGgnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUaFNpemUgPSBmaXJzdFRoLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nSWNvbiA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGF0YXRhYmxlLWxvYWRpbmctaWNvbicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShsb2FkaW5nSWNvbikuZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSAoZmlyc3RUaFNpemUuaGVpZ2h0IC0gZm9udFNpemUpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IChmaXJzdFRoU2l6ZS53aWR0aCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uLnN0eWxlLm1hcmdpblRvcCA9IGAke3RvcH1weGA7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDIwKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlID0gYXN5bmMgKGNvbnRyb2w6IEZpbGVVcGxvYWRTZXR0aW5nLCBldmVudD8sIHJvd0RhdGE/LCB0eXBlPykgPT4ge1xuICAgICAgICBjb25zdCBldmVudERhdGEgPSB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5DSEFOR0U6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25DaGFuZ2VkKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuSU5JVDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uSW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vbkluaXQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5ERUxFVEVEOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25SZW1vdmUoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5TRUxFQ1Q6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uU2VsZWN0ZWQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5VUExPQURFRDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uVXBsb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25VcGxvYWRlZChldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFVbEcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUlwRCxZQUNXLFNBQW1CO1FBRTFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUg5QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBcUV0QiwyQkFBc0IsR0FBRyxDQUFPLE9BQTBCLEVBQUUsS0FBTSxFQUFFLE9BQVEsRUFBRSxJQUFLLEVBQUUsRUFBRTtZQUNuRixNQUFNLFNBQVMsR0FBRztnQkFDZCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsSUFBSTthQUNQLENBQUM7WUFFRixRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNuQixJQUFJOzRCQUNBLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdEM7d0JBQ0QsV0FBTTt5QkFDTDtx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SyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEQsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDekMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztvQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNWO2lCQUNJO2dCQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2FBQ3BDO1FBQ0wsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7O1lBNUVKLFNBQVMsU0FBQztnQkFDUCwrQ0FBK0M7Z0JBQy9DLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixraXdFQUF5QztnQkFFekMsU0FBUyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQzs7YUFDckM7OztZQWRtQixRQUFROzs7MkJBZ0J2QixTQUFTLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9pLWxpc3QtY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2xpc3QtY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ3J1ZExpc3RTZXR0aW5nLCBFdmVudFR5cGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvbW1vblNlYXJjaEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24tc2VhcmNoLWZvcm0vY29tbW9uLXNlYXJjaC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkU2V0dGluZyB9IGZyb20gJy4uLy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2ZpbGUtc2V0dGluZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnY3J1ZC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jcnVkLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtEZWNpbWFsUGlwZSwgRGF0ZVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENydWRMaXN0Q29tcG9uZW50IGV4dGVuZHMgTGlzdENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBJTGlzdENvbXBvbmVudCwgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjb21tb25TZWFyY2gnKSBjb21tb25TZWFyY2g6IENvbW1vblNlYXJjaEZvcm1Db21wb25lbnQ7XG4gICAgZXZlbnRUeXBlID0gRXZlbnRUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3RvciwgZmFsc2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zID09IGRlZmF1bHRTZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICYmIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zID0gdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YT8uY3VycmVudEFwcE1ldGFkYXRhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5zZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2V0dGluZztcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0U2V0dGluZ1trZXldID09IHRoaXMuc2V0dGluZ1trZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBzZXR0aW5nW2tleV0gIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmdba2V5XSAhPSBzZXR0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1trZXldID0gc2V0dGluZ1trZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcgfHwgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYmxlLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLW92ZXJsYXknKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5jbG9zZXN0KCdwLXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlU2Nyb2xsQmFyQ29udGVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGVTY3JvbGxCYXJDb250ZW50LmNsYXNzTGlzdC5jb250YWlucygncHMtY29udGVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbm9kZVNjcm9sbEJhckNvbnRlbnQucGFyZW50Tm9kZS5wcmVwZW5kKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUaCA9IGVsZW1lbnQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCdwLXRhYmxlIHRoZWFkIHRyOmZpcnN0LWNoaWxkID4gdGgnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUaFNpemUgPSBmaXJzdFRoLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nSWNvbiA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGF0YXRhYmxlLWxvYWRpbmctaWNvbicpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShsb2FkaW5nSWNvbikuZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSAoZmlyc3RUaFNpemUuaGVpZ2h0IC0gZm9udFNpemUpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IChmaXJzdFRoU2l6ZS53aWR0aCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uLnN0eWxlLm1hcmdpblRvcCA9IGAke3RvcH1weGA7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdJY29uLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDIwKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlID0gYXN5bmMgKGNvbnRyb2w6IEZpbGVVcGxvYWRTZXR0aW5nLCBldmVudD8sIHJvd0RhdGE/LCB0eXBlPykgPT4ge1xuICAgICAgICBjb25zdCBldmVudERhdGEgPSB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5DSEFOR0U6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25DaGFuZ2VkKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuSU5JVDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uSW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vbkluaXQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5ERUxFVEVEOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25SZW1vdmUoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5TRUxFQ1Q6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uU2VsZWN0ZWQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5VUExPQURFRDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uVXBsb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25VcGxvYWRlZChldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
|