@sd-angular/core 1.1.49 → 1.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sd-angular-core-grid-material.umd.js +20 -14
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-notify.umd.js +19 -8
- package/bundles/sd-angular-core-notify.umd.js.map +1 -1
- package/bundles/sd-angular-core-notify.umd.min.js +2 -2
- package/bundles/sd-angular-core-notify.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-tab-router.umd.js +1 -1
- package/bundles/sd-angular-core-tab-router.umd.js.map +1 -1
- package/bundles/sd-angular-core-tab-router.umd.min.js +1 -1
- package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +2 -2
- package/esm2015/grid-material/src/lib/grid-material.component.js +4 -3
- package/esm2015/grid-material/src/lib/pipes/cell-view.pipe.js +7 -2
- package/esm2015/grid-material/src/lib/pipes/selection-visible-select-all.pipe.js +3 -3
- package/esm2015/notify/src/lib/notify.service.js +20 -9
- package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +2 -2
- package/fesm2015/sd-angular-core-grid-material.js +12 -6
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/fesm2015/sd-angular-core-notify.js +19 -8
- package/fesm2015/sd-angular-core-notify.js.map +1 -1
- package/fesm2015/sd-angular-core-tab-router.js +1 -1
- package/fesm2015/sd-angular-core-tab-router.js.map +1 -1
- package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.1.49.tgz → sd-angular-core-1.1.52.tgz} +0 -0
- package/tab-router/sd-angular-core-tab-router.metadata.json +1 -1
|
@@ -117,11 +117,21 @@ class SdNotifyService {
|
|
|
117
117
|
}
|
|
118
118
|
};
|
|
119
119
|
timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
|
|
120
|
-
__classPrivateFieldGet(this,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
const messages = __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.messages.union(null);
|
|
121
|
+
if (messages.length === 1) {
|
|
122
|
+
__classPrivateFieldGet(this, _notifyWarning).call(this, {
|
|
123
|
+
title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.title,
|
|
124
|
+
message: messages[0],
|
|
125
|
+
delay
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
__classPrivateFieldGet(this, _notifyWarning).call(this, {
|
|
130
|
+
title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _warningKey)].data.title,
|
|
131
|
+
message: messages,
|
|
132
|
+
delay
|
|
133
|
+
});
|
|
134
|
+
}
|
|
125
135
|
});
|
|
126
136
|
}
|
|
127
137
|
if (Array.isArray(message)) {
|
|
@@ -141,17 +151,18 @@ class SdNotifyService {
|
|
|
141
151
|
}
|
|
142
152
|
};
|
|
143
153
|
timer(__classPrivateFieldGet(this, _delayDuration)).pipe(take(1)).subscribe(() => {
|
|
144
|
-
|
|
154
|
+
const messages = __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.messages.union(null);
|
|
155
|
+
if (messages.length === 1) {
|
|
145
156
|
__classPrivateFieldGet(this, _notifyError).call(this, {
|
|
146
157
|
title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.title,
|
|
147
|
-
message:
|
|
158
|
+
message: messages[0],
|
|
148
159
|
delay
|
|
149
160
|
});
|
|
150
161
|
}
|
|
151
162
|
else {
|
|
152
163
|
__classPrivateFieldGet(this, _notifyError).call(this, {
|
|
153
164
|
title: __classPrivateFieldGet(this, _cache)[__classPrivateFieldGet(this, _errorKey)].data.title,
|
|
154
|
-
message:
|
|
165
|
+
message: messages,
|
|
155
166
|
delay
|
|
156
167
|
});
|
|
157
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-notify.js","sources":["../../../../projects/sd-core/notify/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../../projects/sd-core/notify/src/lib/notify.service.ts","../../../../projects/sd-core/notify/src/lib/notify.module.ts","../../../../projects/sd-core/notify/src/public-api.ts","../../../../projects/sd-core/notify/sd-angular-core-notify.ts"],"sourcesContent":["import { Component, Inject } from \"@angular/core\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\n\r\nexport interface DialogData {\r\n icon?: string;\r\n title?: string;\r\n message?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n input?: {\r\n placeholder?: string;\r\n minlength?: number;\r\n maxlength?: number;\r\n required?: boolean;\r\n defaultValue?: string;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: \"sd-dialog-confirm\",\r\n templateUrl: \"dialog-confirm.component.html\",\r\n styleUrls: [\"./dialog-confirm.component.css\"],\r\n})\r\nexport class DialogConfirmComponent {\r\n value: string;\r\n isString = false;\r\n constructor(\r\n public dialogRef: MatDialogRef<DialogConfirmComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData\r\n ) {\r\n this.isString = typeof this.data?.message === \"string\";\r\n this.value = data?.input?.defaultValue ?? '';\r\n }\r\n}\r\n","import \"@sd-angular/core/common\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { DialogConfirmComponent } from \"./components/dialog-confirm/dialog-confirm.component\";\r\nimport { ActiveToast, ToastrService } from \"ngx-toastr\";\r\nimport { SdTranslateService } from \"@sd-angular/core/translate\";\r\nimport { debounceTime, take, takeUntil } from \"rxjs/operators\";\r\nimport { Subject, timer } from \"rxjs\";\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable()\r\nexport class SdNotifyService {\r\n #delayDuration = 500; // Các error/warning message sẽ tự động gộp sau khoảng thời gian trên\r\n #warningKey = uuid.v4();\r\n #errorKey = uuid.v4();\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n data?: {\r\n title: string,\r\n messages: string[]\r\n }\r\n }\r\n } = {};\r\n constructor(\r\n private dialog: MatDialog,\r\n private toastr: ToastrService,\r\n private translateService: SdTranslateService\r\n ) { }\r\n\r\n alert = {\r\n info: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"info\",\r\n title: title || this.translate(\"Notice\"),\r\n message: message || \"Done!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n success: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"done\",\r\n title: title || this.translate(\"Success\"),\r\n message: message || \"Done!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n warning: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"warning\",\r\n title: title || this.translate(\"Warning\"),\r\n message: message || \"Something went wrong!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n error: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"error\",\r\n title: title || this.translate(\"Error\"),\r\n message: message || \"Something went wrong!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n };\r\n\r\n notify = {\r\n success: (message?: string, delay?: number, title?: string) => {\r\n // tslint:disable-next-line: max-line-length\r\n // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #4F8A10; background-color: #DFF2BF`;\r\n // tslint:disable-next-line: max-line-length\r\n // const html = `<div id=\"${this.notifyId}\" style=\"${style}\"><i class=\"fa fa-check\"></i> ${message || this.translate('Success')}</div>`;\r\n // this.showNotify(html, delay);\r\n const content = message || this.translate(\"Success\");\r\n this.toastr.success(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n },\r\n warning: (message?: string | string[], delay?: number, title?: string) => {\r\n if (!this.#cache[this.#warningKey] || Date.addMiliseconds(this.#cache[this.#warningKey].createdDate, this.#delayDuration) < new Date()) {\r\n this.#cache[this.#warningKey] = {\r\n createdDate: new Date(),\r\n data: {\r\n title: title,\r\n messages: [],\r\n }\r\n };\r\n timer(this.#delayDuration).pipe(take(1)).subscribe(() => {\r\n this.#notifyWarning({\r\n title: this.#cache[this.#warningKey].data.title,\r\n message: this.#cache[this.#warningKey].data.messages,\r\n delay: delay\r\n })\r\n });\r\n }\r\n if (Array.isArray(message)) {\r\n this.#cache[this.#warningKey].data.messages = [...this.#cache[this.#warningKey].data.messages, ...message];\r\n } else {\r\n this.#cache[this.#warningKey].data.messages.push(message);\r\n }\r\n },\r\n error: (message?: string | string[], delay?: number, title?: string) => {\r\n if (!this.#cache[this.#errorKey] || Date.addMiliseconds(this.#cache[this.#errorKey].createdDate, this.#delayDuration) < new Date()) {\r\n this.#cache[this.#errorKey] = {\r\n createdDate: new Date(),\r\n data: {\r\n title,\r\n messages: [],\r\n }\r\n };\r\n timer(this.#delayDuration).pipe(take(1)).subscribe(() => {\r\n if (this.#cache[this.#errorKey].data.messages.length === 1) {\r\n this.#notifyError({\r\n title: this.#cache[this.#errorKey].data.title,\r\n message: this.#cache[this.#errorKey].data.messages[0],\r\n delay\r\n });\r\n } else {\r\n this.#notifyError({\r\n title: this.#cache[this.#errorKey].data.title,\r\n message: this.#cache[this.#errorKey].data.messages,\r\n delay\r\n });\r\n }\r\n });\r\n }\r\n if (Array.isArray(message)) {\r\n this.#cache[this.#errorKey].data.messages = [...this.#cache[this.#errorKey].data.messages, ...message];\r\n } else {\r\n this.#cache[this.#errorKey].data.messages.push(message);\r\n }\r\n },\r\n };\r\n\r\n #notifyWarning = (args: {\r\n message?: string | string[],\r\n delay?: number,\r\n title?: string\r\n }) => {\r\n const { message, delay, title } = args;\r\n if (Array.isArray(message)) {\r\n this.#buildToastMultiMesssage('warning', message, delay, title);\r\n }\r\n else {\r\n const content = message || this.translate('Warning');\r\n this.toastr.warning(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n }\r\n }\r\n\r\n #notifyError = (args: {\r\n message?: string | string[],\r\n delay?: number,\r\n title?: string\r\n }) => {\r\n const { message, delay, title } = args;\r\n if (Array.isArray(message)) {\r\n this.#buildToastMultiMesssage('error', message, delay, title);\r\n }\r\n else {\r\n const content = message || this.translate('Error');\r\n this.toastr.error(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n }\r\n }\r\n\r\n #buildToastMultiMesssage = (type: 'warning' | 'error', messages: string[], delay?: number, title?: string) => {\r\n /** số lượng item hiển thị mặc định */\r\n const showNum = 2;\r\n const id = `sd-notify-ckb-${uuid.v4()}`;\r\n const messageLength = messages.length;\r\n const messageRests = messages.splice(showNum);\r\n const messageContainer = `<ul class=\"sd-notify__list\">{0}{1}</ul>`;\r\n const messageTemp = `<li class=\"sd-notify__item\">- {0}</li>`;\r\n let contentRest = '';\r\n if (messageRests?.length) {\r\n contentRest = `<input id=\"${id}\" class=\"cdk-visually-hidden sd-notify__checkbox\" type=\"checkbox\" />\r\n <label class=\"sd-notify__text sd-notify__text--show\" for=\"${id}\">${this.translate('Show more')}</label>\r\n <div class=\"sd-notify__item--rest\">\r\n ${messageRests.map(m => String.format(messageTemp, m)).join('')}\r\n </div>\r\n <label class=\"sd-notify__text sd-notify__text--less\" for=\"${id}\">${this.translate('Show less')}</label>`;\r\n }\r\n const content = String.format(messageContainer, messages.map(m => String.format(messageTemp, m)).join(''), contentRest);\r\n let toast: ActiveToast<any>;\r\n // khi truyền message html sẽ bị sanitize nên phải truyền innerHTML khi toast hiện lên\r\n // @see https://github.com/scttcper/ngx-toastr/blob/v12.1.0/src/lib/toastr/toastr.service.ts#L271\r\n switch (type) {\r\n case 'error':\r\n toast = this.toastr.error(content, `${title || this.translate('Error')} (${messageLength})`, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n messageClass: `toast-message toast-message-${id}`,\r\n closeButton: true,\r\n tapToDismiss: false\r\n });\r\n break;\r\n case 'warning':\r\n toast = this.toastr.warning(content, `${title || this.translate('Warning')} (${messageLength})`, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n messageClass: `toast-message toast-message-${id}`,\r\n closeButton: true,\r\n tapToDismiss: false\r\n });\r\n break;\r\n }\r\n\r\n if (toast) {\r\n toast.onShown\r\n .pipe(\r\n takeUntil(toast.onHidden)\r\n )\r\n .subscribe(() => {\r\n const messageEle: HTMLDivElement = document.querySelector(`.toast-message-${id}`);\r\n messageEle.innerHTML = content;\r\n })\r\n }\r\n }\r\n\r\n handle = {\r\n error: (err: any) => {\r\n if (typeof err === \"string\") {\r\n this.notify.warning(err);\r\n } else if (typeof err === \"object\") {\r\n let message =\r\n err?.error ||\r\n err?.message ||\r\n err?.ExceptionMessage ||\r\n err?.Message ||\r\n \"Unknown error\";\r\n if (typeof err.json === \"function\") {\r\n err = err.json();\r\n if (err) {\r\n message =\r\n err?.error ||\r\n err?.message ||\r\n err?.ExceptionMessage ||\r\n err?.Message ||\r\n \"Unknown error\";\r\n }\r\n }\r\n this.notify.warning(message);\r\n } else {\r\n this.notify.warning(\"Unknown error\");\r\n }\r\n },\r\n };\r\n\r\n confirm = (\r\n message: string,\r\n option: {\r\n title?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n } = {}\r\n ) => {\r\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n title: option?.title || this.translate(\"Confirm\"),\r\n message,\r\n yesTitle: option?.yesTitle || this.translate(\"Yes\"),\r\n noTitle: option?.noTitle || this.translate(\"No\"),\r\n noButtonColor: option?.noButtonColor || \"secondary\",\r\n yesButtonColor: option?.yesButtonColor || \"primary\",\r\n },\r\n });\r\n return new Promise((resolve, reject) => {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n if (result === \"ACCEPT\") {\r\n resolve(null);\r\n } else if (result === \"CANCEL\") {\r\n reject(result);\r\n } else {\r\n resolve(null);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n confirmDelete = () => this.confirm(this.translate(\"Delete record(s)\"));\r\n\r\n confirmApprove = () => this.confirm(this.translate(\"Approve record(s)\"));\r\n\r\n confirmWithInput = (\r\n title: string,\r\n option: {\r\n message?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n required?: boolean;\r\n maxlength?: number;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n defaultValue?: string;\r\n } = {}\r\n ): Promise<string> => {\r\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n title: title || this.translate(\"Confirm\"),\r\n message: option?.message,\r\n yesTitle: option?.yesTitle || this.translate(\"Yes\"),\r\n noTitle: option?.noTitle || this.translate(\"No\"),\r\n noButtonColor: option?.noButtonColor || \"secondary\",\r\n yesButtonColor: option?.yesButtonColor || \"primary\",\r\n input: {\r\n maxlength: option?.maxlength || 255,\r\n required: option?.required,\r\n defaultValue: option?.defaultValue || ''\r\n },\r\n },\r\n });\r\n return new Promise((resolve, reject) => {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n if (result === \"ACCEPT\") {\r\n resolve(result);\r\n } else if (result === \"CANCEL\") {\r\n reject(result);\r\n } else {\r\n resolve(result);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n private translate = (value: string): string => {\r\n return this.translateService.translate(value);\r\n };\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { ToastrService, ToastrModule } from \"ngx-toastr\";\r\nimport { SdButtonModule } from \"@sd-angular/core/button\";\r\n\r\nimport { SdNotifyService } from \"./notify.service\";\r\nimport { DialogConfirmComponent } from \"./components/dialog-confirm/dialog-confirm.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n ToastrModule.forRoot(),\r\n\r\n SdButtonModule,\r\n ],\r\n declarations: [DialogConfirmComponent],\r\n entryComponents: [DialogConfirmComponent],\r\n exports: [],\r\n providers: [SdNotifyService],\r\n})\r\nexport class SdNotifyModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport { SdNotifyModule } from './lib/notify.module';\r\nexport * from './lib/notify.service';\r\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":";;;;;;;;;;;;;;;;;MAyBa,sBAAsB;IAGjC,YACS,SAA+C,EACtB,IAAgB;;QADzC,cAAS,GAAT,SAAS,CAAsC;QACtB,SAAI,GAAJ,IAAI,CAAY;QAHlD,aAAQ,GAAG,KAAK,CAAC;QAKf,IAAI,CAAC,QAAQ,GAAG,cAAO,IAAI,CAAC,IAAI,0CAAE,OAAO,CAAA,KAAK,QAAQ,CAAC;QACvD,IAAI,CAAC,KAAK,eAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,0CAAE,YAAY,mCAAI,EAAE,CAAC;KAC9C;;;YAdF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,m+CAA4C;;aAE7C;;;YAvBQ,YAAY;4CA6BhB,MAAM,SAAC,eAAe;;;;MCnBd,eAAe;IAa1B,YACU,MAAiB,EACjB,MAAqB,EACrB,gBAAoC;QAFpC,WAAM,GAAN,MAAM,CAAW;QACjB,WAAM,GAAN,MAAM,CAAe;QACrB,qBAAgB,GAAhB,gBAAgB,CAAoB;QAf9C,yBAAiB,GAAG,EAAC;QACrB,sBAAcA,EAAO,EAAE,EAAC;QACxB,oBAAYA,EAAO,EAAE,EAAC;QACtB,iBAQI,EAAE,EAAC;QAOP,UAAK,GAAG;YACN,IAAI,EAAE,CACJ,OAAgB,EAChB,KAAc,EACd,QAAiB,EACjB,IAAa;gBAEb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACvC,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,IAAI,MAAM;wBACpB,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;wBACxC,OAAO,EAAE,OAAO,IAAI,OAAO;wBAC3B,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3C;iBACF,CAAC,CAAC;aACJ;YACD,OAAO,EAAE,CACP,OAAgB,EAChB,KAAc,EACd,QAAiB,EACjB,IAAa;gBAEb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACvC,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,IAAI,MAAM;wBACpB,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;wBACzC,OAAO,EAAE,OAAO,IAAI,OAAO;wBAC3B,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3C;iBACF,CAAC,CAAC;aACJ;YACD,OAAO,EAAE,CACP,OAAgB,EAChB,KAAc,EACd,QAAiB,EACjB,IAAa;gBAEb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACvC,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,IAAI,SAAS;wBACvB,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;wBACzC,OAAO,EAAE,OAAO,IAAI,uBAAuB;wBAC3C,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3C;iBACF,CAAC,CAAC;aACJ;YACD,KAAK,EAAE,CACL,OAAgB,EAChB,KAAc,EACd,QAAiB,EACjB,IAAa;gBAEb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;oBACvC,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE;wBACJ,IAAI,EAAE,IAAI,IAAI,OAAO;wBACrB,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;wBACvC,OAAO,EAAE,OAAO,IAAI,uBAAuB;wBAC3C,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3C;iBACF,CAAC,CAAC;aACJ;SACF,CAAC;QAEF,WAAM,GAAG;YACP,OAAO,EAAE,CAAC,OAAgB,EAAE,KAAc,EAAE,KAAc;;;;;;gBAMxD,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE;oBAClC,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,KAAK,IAAI,IAAI;oBACtB,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;aACJ;YACD,OAAO,EAAE,CAAC,OAA2B,EAAE,KAAc,EAAE,KAAc;gBACnE,IAAI,CAAC,+EAA6B,IAAI,IAAI,CAAC,cAAc,CAAC,+EAA6B,CAAC,WAAW,+CAAsB,GAAG,IAAI,IAAI,EAAE,EAAE;oBACtI,+EAA6B,GAAG;wBAC9B,WAAW,EAAE,IAAI,IAAI,EAAE;wBACvB,IAAI,EAAE;4BACJ,KAAK,EAAE,KAAK;4BACZ,QAAQ,EAAE,EAAE;yBACb;qBACF,CAAC;oBACF,KAAK,8CAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACjD,kDAAA,IAAI,EAAgB;4BAClB,KAAK,EAAE,+EAA6B,CAAC,IAAI,CAAC,KAAK;4BAC/C,OAAO,EAAE,+EAA6B,CAAC,IAAI,CAAC,QAAQ;4BACpD,KAAK,EAAE,KAAK;yBACb,CAAC,CAAA;qBACH,CAAC,CAAC;iBACJ;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC1B,+EAA6B,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,+EAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;iBAC5G;qBAAM;oBACL,+EAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC3D;aACF;YACD,KAAK,EAAE,CAAC,OAA2B,EAAE,KAAc,EAAE,KAAc;gBACjE,IAAI,CAAC,6EAA2B,IAAI,IAAI,CAAC,cAAc,CAAC,6EAA2B,CAAC,WAAW,+CAAsB,GAAG,IAAI,IAAI,EAAE,EAAE;oBAClI,6EAA2B,GAAG;wBAC5B,WAAW,EAAE,IAAI,IAAI,EAAE;wBACvB,IAAI,EAAE;4BACJ,KAAK;4BACL,QAAQ,EAAE,EAAE;yBACb;qBACF,CAAC;oBACF,KAAK,8CAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACjD,IAAI,6EAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;4BAC1D,gDAAA,IAAI,EAAc;gCAChB,KAAK,EAAE,6EAA2B,CAAC,IAAI,CAAC,KAAK;gCAC7C,OAAO,EAAE,6EAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gCACrD,KAAK;6BACN,CAAC,CAAC;yBACJ;6BAAM;4BACL,gDAAA,IAAI,EAAc;gCAChB,KAAK,EAAE,6EAA2B,CAAC,IAAI,CAAC,KAAK;gCAC7C,OAAO,EAAE,6EAA2B,CAAC,IAAI,CAAC,QAAQ;gCAClD,KAAK;6BACN,CAAC,CAAC;yBACJ;qBACF,CAAC,CAAC;iBACJ;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC1B,6EAA2B,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,6EAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;iBACxG;qBAAM;oBACL,6EAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACzD;aACF;SACF,CAAC;QAEF,yBAAiB,CAAC,IAIjB;YACC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,4DAAA,IAAI,EAA0B,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACjE;iBACI;gBACH,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE;oBAClC,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,KAAK,IAAI,IAAI;oBACtB,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;aACJ;SACF,EAAA;QAED,uBAAe,CAAC,IAIf;YACC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,4DAAA,IAAI,EAA0B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aAC/D;iBACI;gBACH,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE;oBAChC,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,KAAK,IAAI,IAAI;oBACtB,WAAW,EAAE,IAAI;iBAClB,CAAC,CAAC;aACJ;SACF,EAAA;QAED,mCAA2B,CAAC,IAAyB,EAAE,QAAkB,EAAE,KAAc,EAAE,KAAc;;YAEvG,MAAM,OAAO,GAAG,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,iBAAiBA,EAAO,EAAE,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;YACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;YACnE,MAAM,WAAW,GAAG,wCAAwC,CAAC;YAC7D,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAAE;gBACxB,WAAW,GAAG,cAAc,EAAE;kEAC8B,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;UAE1F,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;kEAEL,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC;aAC1G;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;YACxH,IAAI,KAAuB,CAAC;;;YAG5B,QAAQ,IAAI;gBACV,KAAK,OAAO;oBACV,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,aAAa,GAAG,EAAE;wBAC3F,UAAU,EAAE,IAAI;wBAChB,OAAO,EAAE,KAAK,IAAI,IAAI;wBACtB,YAAY,EAAE,+BAA+B,EAAE,EAAE;wBACjD,WAAW,EAAE,IAAI;wBACjB,YAAY,EAAE,KAAK;qBACpB,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,SAAS;oBACZ,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,aAAa,GAAG,EAAE;wBAC/F,UAAU,EAAE,IAAI;wBAChB,OAAO,EAAE,KAAK,IAAI,IAAI;wBACtB,YAAY,EAAE,+BAA+B,EAAE,EAAE;wBACjD,WAAW,EAAE,IAAI;wBACjB,YAAY,EAAE,KAAK;qBACpB,CAAC,CAAC;oBACH,MAAM;aACT;YAED,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,OAAO;qBACV,IAAI,CACH,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC1B;qBACA,SAAS,CAAC;oBACT,MAAM,UAAU,GAAmB,QAAQ,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;oBAClF,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC;iBAChC,CAAC,CAAA;aACL;SACF,EAAA;QAED,WAAM,GAAG;YACP,KAAK,EAAE,CAAC,GAAQ;gBACd,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;iBAC1B;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAClC,IAAI,OAAO,GACT,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,MACV,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA,KACZ,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,CAAA,KACrB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA;wBACZ,eAAe,CAAC;oBAClB,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;wBAClC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;wBACjB,IAAI,GAAG,EAAE;4BACP,OAAO;gCACL,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,MACV,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA,KACZ,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,CAAA,KACrB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAA;oCACZ,eAAe,CAAC;yBACnB;qBACF;oBACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC9B;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;QAEF,YAAO,GAAG,CACR,OAAe,EACf,SAMI,EAAE;YAEN,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBACzD,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE;oBACJ,KAAK,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,KAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;oBACjD,OAAO;oBACP,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,KAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBACnD,OAAO,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,KAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAChD,aAAa,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,KAAI,WAAW;oBACnD,cAAc,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,SAAS;iBACpD;aACF,CAAC,CAAC;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM;oBACvC,IAAI,MAAM,EAAE;wBACV,IAAI,MAAM,KAAK,QAAQ,EAAE;4BACvB,OAAO,CAAC,IAAI,CAAC,CAAC;yBACf;6BAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;4BAC9B,MAAM,CAAC,MAAM,CAAC,CAAC;yBAChB;6BAAM;4BACL,OAAO,CAAC,IAAI,CAAC,CAAC;yBACf;qBACF;iBACF,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ,CAAC;QAEF,kBAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEvE,mBAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAEzE,qBAAgB,GAAG,CACjB,KAAa,EACb,SASI,EAAE;YAEN,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBACzD,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;oBACzC,OAAO,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO;oBACxB,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,KAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oBACnD,OAAO,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,KAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAChD,aAAa,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,KAAI,WAAW;oBACnD,cAAc,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,SAAS;oBACnD,KAAK,EAAE;wBACL,SAAS,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,GAAG;wBACnC,QAAQ,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ;wBAC1B,YAAY,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,KAAI,EAAE;qBACzC;iBACF;aACF,CAAC,CAAC;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM;oBACvC,IAAI,MAAM,EAAE;wBACV,IAAI,MAAM,KAAK,QAAQ,EAAE;4BACvB,OAAO,CAAC,MAAM,CAAC,CAAC;yBACjB;6BAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;4BAC9B,MAAM,CAAC,MAAM,CAAC,CAAC;yBAChB;6BAAM;4BACL,OAAO,CAAC,MAAM,CAAC,CAAC;yBACjB;qBACF;iBACF,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ,CAAC;QAEM,cAAS,GAAG,CAAC,KAAa;YAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC/C,CAAC;KA1VG;;;;YAlBN,UAAU;;;YARF,SAAS;YAEI,aAAa;YAC1B,kBAAkB;;;MC2Bd,cAAc;;;YAlB1B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,kBAAkB;oBAClB,cAAc;oBACd,aAAa;oBACb,eAAe;oBACf,eAAe;oBACf,YAAY,CAAC,OAAO,EAAE;oBAEtB,cAAc;iBACf;gBACD,YAAY,EAAE,CAAC,sBAAsB,CAAC;gBACtC,eAAe,EAAE,CAAC,sBAAsB,CAAC;gBACzC,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,CAAC,eAAe,CAAC;aAC7B;;;AC/BD;;;;ACAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-notify.js","sources":["../../../../projects/sd-core/notify/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../../projects/sd-core/notify/src/lib/notify.service.ts","../../../../projects/sd-core/notify/src/lib/notify.module.ts","../../../../projects/sd-core/notify/src/public-api.ts","../../../../projects/sd-core/notify/sd-angular-core-notify.ts"],"sourcesContent":["import { Component, Inject } from \"@angular/core\";\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\r\n\r\nexport interface DialogData {\r\n icon?: string;\r\n title?: string;\r\n message?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n input?: {\r\n placeholder?: string;\r\n minlength?: number;\r\n maxlength?: number;\r\n required?: boolean;\r\n defaultValue?: string;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: \"sd-dialog-confirm\",\r\n templateUrl: \"dialog-confirm.component.html\",\r\n styleUrls: [\"./dialog-confirm.component.css\"],\r\n})\r\nexport class DialogConfirmComponent {\r\n value: string;\r\n isString = false;\r\n constructor(\r\n public dialogRef: MatDialogRef<DialogConfirmComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData\r\n ) {\r\n this.isString = typeof this.data?.message === \"string\";\r\n this.value = data?.input?.defaultValue ?? '';\r\n }\r\n}\r\n","import \"@sd-angular/core/common\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { DialogConfirmComponent } from \"./components/dialog-confirm/dialog-confirm.component\";\r\nimport { ActiveToast, ToastrService } from \"ngx-toastr\";\r\nimport { SdTranslateService } from \"@sd-angular/core/translate\";\r\nimport { debounceTime, take, takeUntil } from \"rxjs/operators\";\r\nimport { Subject, timer } from \"rxjs\";\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable()\r\nexport class SdNotifyService {\r\n #delayDuration = 500; // Các error/warning message sẽ tự động gộp sau khoảng thời gian trên\r\n #warningKey = uuid.v4();\r\n #errorKey = uuid.v4();\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n data?: {\r\n title: string,\r\n messages: string[]\r\n }\r\n }\r\n } = {};\r\n constructor(\r\n private dialog: MatDialog,\r\n private toastr: ToastrService,\r\n private translateService: SdTranslateService\r\n ) { }\r\n\r\n alert = {\r\n info: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"info\",\r\n title: title || this.translate(\"Notice\"),\r\n message: message || \"Done!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n success: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"done\",\r\n title: title || this.translate(\"Success\"),\r\n message: message || \"Done!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n warning: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"warning\",\r\n title: title || this.translate(\"Warning\"),\r\n message: message || \"Something went wrong!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n error: (\r\n message?: string,\r\n title?: string,\r\n yesTitle?: string,\r\n icon?: string\r\n ) => {\r\n this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n icon: icon || \"error\",\r\n title: title || this.translate(\"Error\"),\r\n message: message || \"Something went wrong!\",\r\n yesTitle: yesTitle || this.translate(\"Ok\"),\r\n },\r\n });\r\n },\r\n };\r\n\r\n notify = {\r\n success: (message?: string, delay?: number, title?: string) => {\r\n // tslint:disable-next-line: max-line-length\r\n // const style = `border-radius: 5px; margin: 0; padding: 12px; z-index: 99999; top: 5px; right: 5px; display: none; position: fixed;color: #4F8A10; background-color: #DFF2BF`;\r\n // tslint:disable-next-line: max-line-length\r\n // const html = `<div id=\"${this.notifyId}\" style=\"${style}\"><i class=\"fa fa-check\"></i> ${message || this.translate('Success')}</div>`;\r\n // this.showNotify(html, delay);\r\n const content = message || this.translate(\"Success\");\r\n this.toastr.success(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n },\r\n warning: (message?: string | string[], delay?: number, title?: string) => {\r\n if (!this.#cache[this.#warningKey] || Date.addMiliseconds(this.#cache[this.#warningKey].createdDate, this.#delayDuration) < new Date()) {\r\n this.#cache[this.#warningKey] = {\r\n createdDate: new Date(),\r\n data: {\r\n title: title,\r\n messages: [],\r\n }\r\n };\r\n timer(this.#delayDuration).pipe(take(1)).subscribe(() => {\r\n const messages = this.#cache[this.#warningKey].data.messages.union(null);\r\n if (messages.length === 1) {\r\n this.#notifyWarning({\r\n title: this.#cache[this.#warningKey].data.title,\r\n message: messages[0],\r\n delay\r\n });\r\n } else {\r\n this.#notifyWarning({\r\n title: this.#cache[this.#warningKey].data.title,\r\n message: messages,\r\n delay\r\n });\r\n }\r\n });\r\n }\r\n if (Array.isArray(message)) {\r\n this.#cache[this.#warningKey].data.messages = [...this.#cache[this.#warningKey].data.messages, ...message];\r\n } else {\r\n this.#cache[this.#warningKey].data.messages.push(message);\r\n }\r\n },\r\n error: (message?: string | string[], delay?: number, title?: string) => {\r\n if (!this.#cache[this.#errorKey] || Date.addMiliseconds(this.#cache[this.#errorKey].createdDate, this.#delayDuration) < new Date()) {\r\n this.#cache[this.#errorKey] = {\r\n createdDate: new Date(),\r\n data: {\r\n title,\r\n messages: [],\r\n }\r\n };\r\n timer(this.#delayDuration).pipe(take(1)).subscribe(() => {\r\n const messages = this.#cache[this.#errorKey].data.messages.union(null);\r\n if (messages.length === 1) {\r\n this.#notifyError({\r\n title: this.#cache[this.#errorKey].data.title,\r\n message: messages[0],\r\n delay\r\n });\r\n } else {\r\n this.#notifyError({\r\n title: this.#cache[this.#errorKey].data.title,\r\n message: messages,\r\n delay\r\n });\r\n }\r\n });\r\n }\r\n if (Array.isArray(message)) {\r\n this.#cache[this.#errorKey].data.messages = [...this.#cache[this.#errorKey].data.messages, ...message];\r\n } else {\r\n this.#cache[this.#errorKey].data.messages.push(message);\r\n }\r\n },\r\n };\r\n\r\n #notifyWarning = (args: {\r\n message?: string | string[],\r\n delay?: number,\r\n title?: string\r\n }) => {\r\n const { message, delay, title } = args;\r\n if (Array.isArray(message)) {\r\n this.#buildToastMultiMesssage('warning', message, delay, title);\r\n }\r\n else {\r\n const content = message || this.translate('Warning');\r\n this.toastr.warning(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n }\r\n }\r\n\r\n #notifyError = (args: {\r\n message?: string | string[],\r\n delay?: number,\r\n title?: string\r\n }) => {\r\n const { message, delay, title } = args;\r\n if (Array.isArray(message)) {\r\n this.#buildToastMultiMesssage('error', message, delay, title);\r\n }\r\n else {\r\n const content = message || this.translate('Error');\r\n this.toastr.error(content, title, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n closeButton: true,\r\n });\r\n }\r\n }\r\n\r\n #buildToastMultiMesssage = (type: 'warning' | 'error', messages: string[], delay?: number, title?: string) => {\r\n /** số lượng item hiển thị mặc định */\r\n const showNum = 2;\r\n const id = `sd-notify-ckb-${uuid.v4()}`;\r\n const messageLength = messages.length;\r\n const messageRests = messages.splice(showNum);\r\n const messageContainer = `<ul class=\"sd-notify__list\">{0}{1}</ul>`;\r\n const messageTemp = `<li class=\"sd-notify__item\">- {0}</li>`;\r\n let contentRest = '';\r\n if (messageRests?.length) {\r\n contentRest = `<input id=\"${id}\" class=\"cdk-visually-hidden sd-notify__checkbox\" type=\"checkbox\" />\r\n <label class=\"sd-notify__text sd-notify__text--show\" for=\"${id}\">${this.translate('Show more')}</label>\r\n <div class=\"sd-notify__item--rest\">\r\n ${messageRests.map(m => String.format(messageTemp, m)).join('')}\r\n </div>\r\n <label class=\"sd-notify__text sd-notify__text--less\" for=\"${id}\">${this.translate('Show less')}</label>`;\r\n }\r\n const content = String.format(messageContainer, messages.map(m => String.format(messageTemp, m)).join(''), contentRest);\r\n let toast: ActiveToast<any>;\r\n // khi truyền message html sẽ bị sanitize nên phải truyền innerHTML khi toast hiện lên\r\n // @see https://github.com/scttcper/ngx-toastr/blob/v12.1.0/src/lib/toastr/toastr.service.ts#L271\r\n switch (type) {\r\n case 'error':\r\n toast = this.toastr.error(content, `${title || this.translate('Error')} (${messageLength})`, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n messageClass: `toast-message toast-message-${id}`,\r\n closeButton: true,\r\n tapToDismiss: false\r\n });\r\n break;\r\n case 'warning':\r\n toast = this.toastr.warning(content, `${title || this.translate('Warning')} (${messageLength})`, {\r\n enableHtml: true,\r\n timeOut: delay || 3000,\r\n messageClass: `toast-message toast-message-${id}`,\r\n closeButton: true,\r\n tapToDismiss: false\r\n });\r\n break;\r\n }\r\n\r\n if (toast) {\r\n toast.onShown\r\n .pipe(\r\n takeUntil(toast.onHidden)\r\n )\r\n .subscribe(() => {\r\n const messageEle: HTMLDivElement = document.querySelector(`.toast-message-${id}`);\r\n messageEle.innerHTML = content;\r\n })\r\n }\r\n }\r\n\r\n handle = {\r\n error: (err: any) => {\r\n if (typeof err === \"string\") {\r\n this.notify.warning(err);\r\n } else if (typeof err === \"object\") {\r\n let message =\r\n err?.error ||\r\n err?.message ||\r\n err?.ExceptionMessage ||\r\n err?.Message ||\r\n \"Unknown error\";\r\n if (typeof err.json === \"function\") {\r\n err = err.json();\r\n if (err) {\r\n message =\r\n err?.error ||\r\n err?.message ||\r\n err?.ExceptionMessage ||\r\n err?.Message ||\r\n \"Unknown error\";\r\n }\r\n }\r\n this.notify.warning(message);\r\n } else {\r\n this.notify.warning(\"Unknown error\");\r\n }\r\n },\r\n };\r\n\r\n confirm = (\r\n message: string,\r\n option: {\r\n title?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n } = {}\r\n ) => {\r\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n title: option?.title || this.translate(\"Confirm\"),\r\n message,\r\n yesTitle: option?.yesTitle || this.translate(\"Yes\"),\r\n noTitle: option?.noTitle || this.translate(\"No\"),\r\n noButtonColor: option?.noButtonColor || \"secondary\",\r\n yesButtonColor: option?.yesButtonColor || \"primary\",\r\n },\r\n });\r\n return new Promise((resolve, reject) => {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n if (result === \"ACCEPT\") {\r\n resolve(null);\r\n } else if (result === \"CANCEL\") {\r\n reject(result);\r\n } else {\r\n resolve(null);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n confirmDelete = () => this.confirm(this.translate(\"Delete record(s)\"));\r\n\r\n confirmApprove = () => this.confirm(this.translate(\"Approve record(s)\"));\r\n\r\n confirmWithInput = (\r\n title: string,\r\n option: {\r\n message?: string;\r\n yesTitle?: string;\r\n noTitle?: string;\r\n required?: boolean;\r\n maxlength?: number;\r\n yesButtonColor?: string;\r\n noButtonColor?: string;\r\n defaultValue?: string;\r\n } = {}\r\n ): Promise<string> => {\r\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\r\n width: \"400px\",\r\n data: {\r\n title: title || this.translate(\"Confirm\"),\r\n message: option?.message,\r\n yesTitle: option?.yesTitle || this.translate(\"Yes\"),\r\n noTitle: option?.noTitle || this.translate(\"No\"),\r\n noButtonColor: option?.noButtonColor || \"secondary\",\r\n yesButtonColor: option?.yesButtonColor || \"primary\",\r\n input: {\r\n maxlength: option?.maxlength || 255,\r\n required: option?.required,\r\n defaultValue: option?.defaultValue || ''\r\n },\r\n },\r\n });\r\n return new Promise((resolve, reject) => {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n if (result === \"ACCEPT\") {\r\n resolve(result);\r\n } else if (result === \"CANCEL\") {\r\n reject(result);\r\n } else {\r\n resolve(result);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n private translate = (value: string): string => {\r\n return this.translateService.translate(value);\r\n };\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { ToastrService, ToastrModule } from \"ngx-toastr\";\r\nimport { SdButtonModule } from \"@sd-angular/core/button\";\r\n\r\nimport { SdNotifyService } from \"./notify.service\";\r\nimport { DialogConfirmComponent } from \"./components/dialog-confirm/dialog-confirm.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n ToastrModule.forRoot(),\r\n\r\n SdButtonModule,\r\n ],\r\n declarations: [DialogConfirmComponent],\r\n entryComponents: [DialogConfirmComponent],\r\n exports: [],\r\n providers: [SdNotifyService],\r\n})\r\nexport class SdNotifyModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport { SdNotifyModule } from './lib/notify.module';\r\nexport * from './lib/notify.service';\r\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -152,7 +152,7 @@ class SdTabRouterItemComponent {
|
|
|
152
152
|
SdTabRouterItemComponent.decorators = [
|
|
153
153
|
{ type: Component, args: [{
|
|
154
154
|
selector: 'sd-tab-router-item',
|
|
155
|
-
template: "<a [routerLink]=\"[tab.url]\" [queryParams]=\"tab.queryParams\" [state]=\"{ switchTab: true }\"\r\n class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive\r\n }\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\" [matTooltip]=\"tabInfo.tooltip ||
|
|
155
|
+
template: "<a [routerLink]=\"[tab.url]\" [queryParams]=\"tab.queryParams\" [state]=\"{ switchTab: true }\"\r\n class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive\r\n }\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\" [matTooltip]=\"tabInfo.tooltip || tabInfo.name\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n {{ tabInfo.initialName || 'SD' }}\r\n </div>\r\n <div class=\"flex-1\">\r\n <div class=\"tab-router__name\" [matTooltip]=\"tabInfo.tooltip || tabInfo.name\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">{{ tabInfo.name }}</div>\r\n </div>\r\n <button type=\"button\" class=\"\r\n tab-router__close\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n ml-4\r\n \" (click)=\"close($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n</a>\r\n",
|
|
156
156
|
styles: [":host{flex:1 1 auto;max-width:240px;position:relative}:host:after{background:#dde0e5;bottom:0;content:\"\";height:16px;margin:auto;position:absolute;right:0;top:0;width:1px}:host:last-child:after{content:none}.flex-1{flex:1}.tab-router__icon{background-color:#5c6bc0;border-radius:2px;color:#fff;font-size:10px;height:16px;line-height:1;text-transform:uppercase;width:16px}.tab-router__icon .mat-icon{font-size:10px;height:10px;width:10px}.tab-router__close{background:none;border:0;border-radius:50%;color:#757575;height:16px;outline:none;width:16px}.tab-router__close:hover{background-color:rgba(0,0,0,.12)}.tab-router__close .mat-icon{font-size:12px;height:12px;width:12px}.tab-router__item{background:#f2f3f4;color:inherit;font-size:12px;line-height:16px;padding:16px 16px 8px;text-decoration:none}.tab-router__item:hover{background-color:#fff}.tab-router__name{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.tab-router__item--active{background-color:#fff;border-radius:8px 8px 0 0}"]
|
|
157
157
|
},] }
|
|
158
158
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { filter, take, takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n isDetail?: boolean;\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport * as hash from 'object-hash';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(\r\n router.events\r\n .pipe(\r\n filter(\r\n (event) =>\r\n event instanceof RoutesRecognized ||\r\n event instanceof NavigationEnd\r\n )\r\n )\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(\r\n this.activatedRoute.snapshot\r\n );\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(\r\n tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n const { isActive, key: activeKey } = tab;\r\n\r\n if (isActive) {\r\n const activeIndex = this.tabs.findIndex(({ key }) => key === activeKey);\r\n const nextTab = this.tabs[activeIndex + 1] || this.tabs[activeIndex - 1];\r\n if (nextTab) {\r\n const { url: nextUrl } = nextTab;\r\n const nextQueryParams = {\r\n ...(nextTab.queryParams || {}),\r\n };\r\n\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigate([nextUrl], {\r\n queryParams: nextQueryParams,\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n };\r\n\r\n #activeRoute = async (\r\n fullUrl: string,\r\n route: ActivatedRouteSnapshot | null\r\n ) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n const [url] = fullUrl.split('?');\r\n const key = hash({ url, queryParams });\r\n\r\n let existedIndex = -1;\r\n let activatedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === key) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n activatedIndex = index;\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (\r\n activatedIndex >= 0 &&\r\n currentNavigation?.extras?.state?.replaceTab\r\n ) {\r\n this.tabs.splice(activatedIndex, 1);\r\n }\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n };\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n while (activatedRouteSnapshot.firstChild) {\r\n activatedRouteSnapshot = activatedRouteSnapshot.firstChild;\r\n }\r\n return activatedRouteSnapshot;\r\n };\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n while (activatedRoute.firstChild) {\r\n activatedRoute = activatedRoute.firstChild;\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n tab.tabInfo = {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n return tab.tabInfo;\r\n }\r\n tab.tabInfo = {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n return tab.tabInfo;\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\nexport * from './lib/services/tab-decorator.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵa} from './src/lib/pipes/tab-info.pipe';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { filter, take, takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n isDetail?: boolean;\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport * as hash from 'object-hash';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(\r\n router.events\r\n .pipe(\r\n filter(\r\n (event) =>\r\n event instanceof RoutesRecognized ||\r\n event instanceof NavigationEnd\r\n )\r\n )\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(\r\n this.activatedRoute.snapshot\r\n );\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(\r\n tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n const { isActive, key: activeKey } = tab;\r\n\r\n if (isActive) {\r\n const activeIndex = this.tabs.findIndex(({ key }) => key === activeKey);\r\n const nextTab = this.tabs[activeIndex + 1] || this.tabs[activeIndex - 1];\r\n if (nextTab) {\r\n const { url: nextUrl } = nextTab;\r\n const nextQueryParams = {\r\n ...(nextTab.queryParams || {}),\r\n };\r\n\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigate([nextUrl], {\r\n queryParams: nextQueryParams,\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n };\r\n\r\n #activeRoute = async (\r\n fullUrl: string,\r\n route: ActivatedRouteSnapshot | null\r\n ) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n const [url] = fullUrl.split('?');\r\n const key = hash({ url, queryParams });\r\n\r\n let existedIndex = -1;\r\n let activatedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === key) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n activatedIndex = index;\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (\r\n activatedIndex >= 0 &&\r\n currentNavigation?.extras?.state?.replaceTab\r\n ) {\r\n this.tabs.splice(activatedIndex, 1);\r\n }\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n };\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n while (activatedRouteSnapshot.firstChild) {\r\n activatedRouteSnapshot = activatedRouteSnapshot.firstChild;\r\n }\r\n return activatedRouteSnapshot;\r\n };\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n while (activatedRoute.firstChild) {\r\n activatedRoute = activatedRoute.firstChild;\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n tab.tabInfo = {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n return tab.tabInfo;\r\n }\r\n tab.tabInfo = {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n return tab.tabInfo;\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\nexport * from './lib/services/tab-decorator.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵa} from './src/lib/pipes/tab-info.pipe';"],"names":[],"mappings":"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"}
|