@sd-angular/core 1.3.247 → 1.3.249
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-date-full.umd.js +25 -2
- package/bundles/sd-angular-core-date-full.umd.js.map +1 -1
- package/bundles/sd-angular-core-date-full.umd.min.js +1 -1
- package/bundles/sd-angular-core-date-full.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-export.umd.js +2 -2
- package/bundles/sd-angular-core-export.umd.js.map +1 -1
- package/bundles/sd-angular-core-export.umd.min.js +1 -1
- package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-modal.umd.js +1 -1
- package/bundles/sd-angular-core-modal.umd.min.js +1 -1
- package/bundles/sd-angular-core-modal.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-month.umd.js +3 -3
- package/bundles/sd-angular-core-month.umd.js.map +1 -1
- package/bundles/sd-angular-core-month.umd.min.js +1 -1
- package/bundles/sd-angular-core-month.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-select.umd.js +1 -1
- package/bundles/sd-angular-core-select.umd.min.js +2 -2
- package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-table.umd.js +3 -6
- package/bundles/sd-angular-core-table.umd.js.map +1 -1
- package/bundles/sd-angular-core-table.umd.min.js +1 -1
- package/bundles/sd-angular-core-table.umd.min.js.map +1 -1
- package/date-full/sd-angular-core-date-full.metadata.json +1 -1
- package/date-full/src/lib/date-full.component.d.ts +6 -1
- package/esm2015/date-full/src/lib/date-full.component.js +14 -3
- package/esm2015/export/src/lib/export.model.js +1 -1
- package/esm2015/export/src/lib/export.service.js +3 -3
- package/esm2015/modal/src/lib/modal/modal-header/modal-header.component.js +1 -1
- package/esm2015/month/src/lib/month.component.js +4 -4
- package/esm2015/select/src/lib/select.component.js +1 -1
- package/esm2015/table/src/lib/table.component.js +4 -7
- package/export/src/lib/export.model.d.ts +0 -1
- package/fesm2015/sd-angular-core-date-full.js +13 -2
- package/fesm2015/sd-angular-core-date-full.js.map +1 -1
- package/fesm2015/sd-angular-core-export.js +2 -2
- package/fesm2015/sd-angular-core-export.js.map +1 -1
- package/fesm2015/sd-angular-core-modal.js +1 -1
- package/fesm2015/sd-angular-core-month.js +3 -3
- package/fesm2015/sd-angular-core-month.js.map +1 -1
- package/fesm2015/sd-angular-core-select.js +1 -1
- package/fesm2015/sd-angular-core-table.js +3 -6
- package/fesm2015/sd-angular-core-table.js.map +1 -1
- package/modal/sd-angular-core-modal.metadata.json +1 -1
- package/month/sd-angular-core-month.metadata.json +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.3.247.tgz → sd-angular-core-1.3.249.tgz} +0 -0
- package/select/sd-angular-core-select.metadata.json +1 -1
|
@@ -220,6 +220,15 @@ class SdDateFull {
|
|
|
220
220
|
label: val,
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
|
+
set _defaultHour(val) {
|
|
224
|
+
this.defaultHour = val;
|
|
225
|
+
}
|
|
226
|
+
set _defaultMinute(val) {
|
|
227
|
+
this.defaultMinute = val;
|
|
228
|
+
}
|
|
229
|
+
set _defaultSecond(val) {
|
|
230
|
+
this.defaultSecond = val;
|
|
231
|
+
}
|
|
223
232
|
set minDate(val) {
|
|
224
233
|
if (Date.isDate(val)) {
|
|
225
234
|
this.min = new Date(val);
|
|
@@ -276,7 +285,7 @@ _date = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _subscripti
|
|
|
276
285
|
SdDateFull.decorators = [
|
|
277
286
|
{ type: Component, args: [{
|
|
278
287
|
selector: 'sd-date-full',
|
|
279
|
-
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"required\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [required]=\"required\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [maxLength]=\"19\" />\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"> </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker\r\n #picker1\r\n [
|
|
288
|
+
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"required\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [required]=\"required\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [maxLength]=\"19\" />\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"> </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker\r\n #picker1\r\n [showSeconds]=\"true\"\r\n [touchUi]=\"isMobileOrTablet\"\r\n [showSpinners]=\"false\"\r\n (opened)=\"onFocus()\"\r\n (closed)=\"onBlur(); focusInputElement()\">\r\n </ngx-mat-datetime-picker>\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm:ss' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm:ss' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>\r\n",
|
|
280
289
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
281
290
|
providers: [{ provide: NGX_MAT_DATE_FORMATS, useValue: ɵ0 }],
|
|
282
291
|
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field input.mat-input-element:disabled{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}"]
|
|
@@ -300,7 +309,9 @@ SdDateFull.propDecorators = {
|
|
|
300
309
|
_inlineError: [{ type: Input, args: ['inlineError',] }],
|
|
301
310
|
_label: [{ type: Input, args: ['label',] }],
|
|
302
311
|
placeholder: [{ type: Input }],
|
|
303
|
-
|
|
312
|
+
_defaultHour: [{ type: Input, args: ['defaultHour',] }],
|
|
313
|
+
_defaultMinute: [{ type: Input, args: ['defaultMinute',] }],
|
|
314
|
+
_defaultSecond: [{ type: Input, args: ['defaultSecond',] }],
|
|
304
315
|
minDate: [{ type: Input }],
|
|
305
316
|
maxDate: [{ type: Input }],
|
|
306
317
|
validator: [{ type: Input }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-date-full.js","sources":["../../../../projects/sd-core/date-full/src/lib/date-full.component.ts","../../../../projects/sd-core/date-full/src/lib/date-full.module.ts","../../../../projects/sd-core/date-full/sd-angular-core-date-full.ts"],"sourcesContent":["import { NGX_MAT_DATE_FORMATS, NgxMatDatetimePicker } from '@angular-material-components/datetime-picker';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport moment, { Moment } from 'moment';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport hash from 'object-hash';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'sd-date-full',\r\n templateUrl: './date-full.component.html',\r\n styleUrls: ['./date-full.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS }],\r\n})\r\nexport class SdDateFull implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = val === '' || val;\r\n val = val === '' || val;\r\n }\r\n\r\n formControl = new SdFormControl();\r\n min: Date;\r\n\r\n @Input('min') set _min(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n max: Date;\r\n\r\n @Input('max') set _max(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = val === '' || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n\r\n inlineError: string;\r\n\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n // this.#updateValidator();\r\n if (this.inlineError) {\r\n this.formControl.setValidators([this.customInlineErrorValidator()]);\r\n this.formControl.updateValueAndValidity();\r\n } else {\r\n this.formControl.clearValidators();\r\n this.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n qcId: string;\r\n label: string;\r\n\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-full',\r\n label: val,\r\n });\r\n }\r\n\r\n @Input() placeholder: string;\r\n @Input() defaultTime: any;\r\n\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(NgxMatDatetimePicker) dateTimePicker: NgxMatDatetimePicker<Moment>;\r\n isFocused = false;\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n this.dateTimePicker?.open();\r\n }, 100);\r\n };\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n isValid: boolean;\r\n onKeyDown = (event: KeyboardEvent) => {\r\n const key = event.keyCode || event.charCode;\r\n let isShift = false;\r\n if (key === 16) {\r\n isShift = true;\r\n }\r\n\r\n // cho phép copy parse\r\n if (event.ctrlKey && (key === 67 || key === 86)) {\r\n console.log('action copy parse... datepicker');\r\n return true;\r\n }\r\n\r\n // Allow only Numeric Keys.\r\n if (\r\n ((key >= 48 && key <= 57) ||\r\n key === 8 ||\r\n key <= 37 ||\r\n key <= 39 ||\r\n (key >= 96 && key <= 105) ||\r\n key === 191 ||\r\n key === 186 ||\r\n key === 59) &&\r\n isShift === false\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n onKeyup = event => {\r\n const currentVal: string = event.target.value;\r\n const formControl: AbstractControl = this.formControl;\r\n let regex = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/g;\r\n\r\n if (currentVal && !regex.test(currentVal)) {\r\n setTimeout(() => {\r\n this.isValid = true;\r\n formControl.markAsDirty();\r\n formControl.markAsTouched();\r\n formControl.setErrors({ ...formControl.errors, date: `Sai định dạng` });\r\n }, 0);\r\n } else {\r\n setTimeout(() => {\r\n this.isValid = false;\r\n formControl.setErrors({ ...formControl.errors, date: null });\r\n this.formControl.updateValueAndValidity();\r\n }, 0);\r\n }\r\n };\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n if (!this.isValid) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n this.isValid = false;\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n}\r\n","import { NgxMatDatetimePickerModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\r\nimport { NgxMatMomentModule } from '@angular-material-components/moment-adapter';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdDateFull } from './date-full.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule,\r\n NgxMatMomentModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdButtonModule,\r\n ],\r\n declarations: [SdDateFull],\r\n exports: [SdCommonModule, SdDateFull],\r\n providers: [],\r\n})\r\nexport class SdDateFullModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-date-full.js","sources":["../../../../projects/sd-core/date-full/src/lib/date-full.component.ts","../../../../projects/sd-core/date-full/src/lib/date-full.module.ts","../../../../projects/sd-core/date-full/sd-angular-core-date-full.ts"],"sourcesContent":["import { NGX_MAT_DATE_FORMATS, NgxMatDatetimePicker } from '@angular-material-components/datetime-picker';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport moment, { Moment } from 'moment';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport hash from 'object-hash';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'sd-date-full',\r\n templateUrl: './date-full.component.html',\r\n styleUrls: ['./date-full.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS }],\r\n})\r\nexport class SdDateFull implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = val === '' || val;\r\n val = val === '' || val;\r\n }\r\n\r\n formControl = new SdFormControl();\r\n min: Date;\r\n\r\n @Input('min') set _min(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n max: Date;\r\n\r\n @Input('max') set _max(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = val === '' || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n\r\n inlineError: string;\r\n\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n // this.#updateValidator();\r\n if (this.inlineError) {\r\n this.formControl.setValidators([this.customInlineErrorValidator()]);\r\n this.formControl.updateValueAndValidity();\r\n } else {\r\n this.formControl.clearValidators();\r\n this.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n qcId: string;\r\n label: string;\r\n\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-full',\r\n label: val,\r\n });\r\n }\r\n\r\n @Input() placeholder: string;\r\n\r\n defaultHour: number;\r\n @Input('defaultHour') set _defaultHour(val: number) {\r\n this.defaultHour = val;\r\n }\r\n defaultMinute: number;\r\n @Input('defaultMinute') set _defaultMinute(val: number) {\r\n this.defaultMinute = val;\r\n }\r\n defaultSecond: number;\r\n @Input('defaultSecond') set _defaultSecond(val: number) {\r\n this.defaultSecond = val;\r\n }\r\n\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(NgxMatDatetimePicker) dateTimePicker: NgxMatDatetimePicker<Moment>;\r\n isFocused = false;\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n this.dateTimePicker?.open();\r\n }, 100);\r\n };\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n isValid: boolean;\r\n onKeyDown = (event: KeyboardEvent) => {\r\n const key = event.keyCode || event.charCode;\r\n let isShift = false;\r\n if (key === 16) {\r\n isShift = true;\r\n }\r\n\r\n // cho phép copy parse\r\n if (event.ctrlKey && (key === 67 || key === 86)) {\r\n console.log('action copy parse... datepicker');\r\n return true;\r\n }\r\n\r\n // Allow only Numeric Keys.\r\n if (\r\n ((key >= 48 && key <= 57) ||\r\n key === 8 ||\r\n key <= 37 ||\r\n key <= 39 ||\r\n (key >= 96 && key <= 105) ||\r\n key === 191 ||\r\n key === 186 ||\r\n key === 59) &&\r\n isShift === false\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n onKeyup = event => {\r\n const currentVal: string = event.target.value;\r\n const formControl: AbstractControl = this.formControl;\r\n let regex = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$/g;\r\n\r\n if (currentVal && !regex.test(currentVal)) {\r\n setTimeout(() => {\r\n this.isValid = true;\r\n formControl.markAsDirty();\r\n formControl.markAsTouched();\r\n formControl.setErrors({ ...formControl.errors, date: `Sai định dạng` });\r\n }, 0);\r\n } else {\r\n setTimeout(() => {\r\n this.isValid = false;\r\n formControl.setErrors({ ...formControl.errors, date: null });\r\n this.formControl.updateValueAndValidity();\r\n }, 0);\r\n }\r\n };\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n if (!this.isValid) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n this.isValid = false;\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n}\r\n","import { NgxMatDatetimePickerModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\r\nimport { NgxMatMomentModule } from '@angular-material-components/moment-adapter';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdButtonModule } from '@sd-angular/core/button';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdDateFull } from './date-full.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule,\r\n NgxMatMomentModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdButtonModule,\r\n ],\r\n declarations: [SdDateFull],\r\n exports: [SdCommonModule, SdDateFull],\r\n providers: [],\r\n})\r\nexport class SdDateFullModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -351,7 +351,7 @@ class SdExportService {
|
|
|
351
351
|
const fromRow = hasDescription ? 4 : 3;
|
|
352
352
|
items.forEach((e, idx1) => {
|
|
353
353
|
columns.forEach((column, idx2) => {
|
|
354
|
-
if (typeof e[column.field] === 'number'
|
|
354
|
+
if (typeof e[column.field] === 'number') {
|
|
355
355
|
// Format mặc định với kiểu số
|
|
356
356
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).value = +e[column.field];
|
|
357
357
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';
|
|
@@ -359,7 +359,7 @@ class SdExportService {
|
|
|
359
359
|
else {
|
|
360
360
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];
|
|
361
361
|
}
|
|
362
|
-
firstSheet.getCell(fromRow + idx1, 1 + idx2).style = Object.assign(
|
|
362
|
+
firstSheet.getCell(fromRow + idx1, 1 + idx2).style = Object.assign({}, __classPrivateFieldGet(this, _cellStyle));
|
|
363
363
|
});
|
|
364
364
|
});
|
|
365
365
|
const file = yield workbook.xlsx.writeBuffer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-export.js","sources":["../../../../projects/sd-core/export/src/lib/export.model.ts","../../../../projects/sd-core/export/src/lib/export.service.ts","../../../../projects/sd-core/export/sd-angular-core-export.ts"],"sourcesContent":["export * from './excel.model';\r\nexport interface SdExportTemplate {\r\n fileName?: string;\r\n columns: SdExportTemplateColumn[];\r\n sheets?: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[];\r\n}\r\nexport interface SdExportColumn {\r\n field: string;\r\n title: string;\r\n description?: string;\r\n width?: string;\r\n numFmt?: string; // Format trong trường hợp muốn sử dụng ví dụ với number, date ...\r\n}\r\n\r\nexport interface SdExportTemplateColumn extends SdExportColumn {\r\n required?: boolean;\r\n color?: string;\r\n fontColor?: string;\r\n fill?: string;\r\n}\r\nexport interface SdExportFile {\r\n fileName?: string;\r\n filePath?: string;\r\n}\r\n\r\n\r\nexport interface SdExportSheet<T = any> {\r\n name: string;\r\n items: T[];\r\n fields: Extract<keyof T, string>[];\r\n}\r\n\r\nexport interface SdExportOption<T = any> {\r\n columns: SdExportTemplateColumn[];\r\n items: T[];\r\n fileName?: string;\r\n sheets?: SdExportSheet[];\r\n}\r\n\r\nexport type GroupPermission = 'view' | 'add' | 'delete';\r\n\r\nexport const API = {\r\n uploadTemplate: '/excel/uploadTemplate',\r\n generateUploadTemplate: '/excel/generateUploadTemplate',\r\n filesInFolder: '/excel/filesInFolder',\r\n removeFile: '/excel/remove',\r\n sdExportByTemplate: '/excel/sd-export-by-template',\r\n sdMergePDF: '/excel/sd-merge-pdf',\r\n};\r\n","import { Optional } from '@angular/core';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { SdApiService } from '@sd-angular/core/api';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { ExportToCsv } from 'export-to-csv';\r\nimport { Workbook, Style } from 'exceljs';\r\nimport { SdExportTemplate, SdExportOption, API, SdExportFile, SdExportCustomOption } from './export.model';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { FIREBASE_CONFIG, IFirebaseConfiguration } from '@sd-angular/core/common';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdExportService {\r\n private get functionUrl() {\r\n return this.firebaseConfiguration?.functionUrl;\r\n }\r\n\r\n private get folder() {\r\n const { project, env } = this.firebaseConfiguration;\r\n return `${project}-${env}`;\r\n }\r\n\r\n private get userFolder() {\r\n const { folder } = this.firebaseConfiguration;\r\n if (!folder) {\r\n return;\r\n }\r\n if (typeof folder === 'string') {\r\n return folder;\r\n }\r\n return folder();\r\n }\r\n\r\n #fieldStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n bold: true,\r\n size: 11,\r\n color: { argb: '000000' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'FAFAFA',\r\n },\r\n },\r\n };\r\n #titleColor = 'FFFFFF';\r\n #titleFgColor = '143180';\r\n #titleStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n bold: true,\r\n size: 11,\r\n color: { argb: this.#titleColor },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: this.#titleFgColor,\r\n },\r\n },\r\n };\r\n\r\n #requiredStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n italic: true,\r\n size: 11,\r\n color: { argb: 'FFFFFF' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'FF1744',\r\n },\r\n },\r\n };\r\n\r\n #descriptionStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n wrapText: true,\r\n },\r\n font: {\r\n italic: true,\r\n size: 9,\r\n color: { argb: '000000' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'CFD8DC',\r\n },\r\n },\r\n };\r\n\r\n #cellStyle: Partial<Style> = {\r\n alignment: {\r\n vertical: 'middle',\r\n wrapText: true,\r\n },\r\n };\r\n\r\n constructor(\r\n private apiService: SdApiService,\r\n private notifyService: SdNotifyService,\r\n @Inject(FIREBASE_CONFIG) @Optional() private firebaseConfiguration: IFirebaseConfiguration\r\n ) {}\r\n\r\n #directory = (key: string, group: string) => {\r\n let hashedFolder = hash({\r\n folder: this.folder,\r\n userFolder: this.userFolder,\r\n });\r\n if (!group) {\r\n return `dir1=${this.folder}&dir2=U-${hashedFolder}&dir3=${key || ''}`;\r\n }\r\n hashedFolder = hash({\r\n folder: this.folder,\r\n group,\r\n });\r\n return `dir1=${this.folder}&dir2=G-${hashedFolder}&dir3=${key || ''}`;\r\n };\r\n\r\n generateTemplate = async (template: SdExportTemplate) => {\r\n const { fileName, columns, sheets } = template;\r\n if (!Array.isArray(columns)) {\r\n throw new Error('Excel template columns must be an array');\r\n }\r\n for (const [idx, column] of columns.entries()) {\r\n if (!column.field) {\r\n throw new Error(`Column ${idx + 1}: Field is required`);\r\n }\r\n if (!column.title) {\r\n throw new Error(`Column ${idx + 1}: Title is required`);\r\n }\r\n }\r\n const hasDescription = columns.some(column => column.description);\r\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\r\n const firstSheet = workbook.addWorksheet('template'); // Lấy ra sheet đầu tiên\r\n columns.forEach((column, index) => {\r\n const { required, fill, fontColor } = column;\r\n const cellField = firstSheet.getCell(1, index + 1);\r\n const cellTitle = firstSheet.getCell(2, index + 1);\r\n const cellDescription = firstSheet.getCell(3, index + 1);\r\n let width = 120;\r\n if (column.width && column.width.endsWith('px')) {\r\n width = +column.width.replace('px', '');\r\n }\r\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\r\n cellField.style = this.#fieldStyle;\r\n if (required) {\r\n cellField.style = this.#requiredStyle;\r\n } else {\r\n cellField.style = this.#fieldStyle;\r\n }\r\n cellTitle.style = {\r\n ...this.#titleStyle,\r\n font: {\r\n ...this.#titleStyle?.font,\r\n color: {\r\n ...this.#titleStyle?.font?.color,\r\n argb: fontColor || this.#titleStyle?.font?.color?.argb,\r\n },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: fill || this.#titleFgColor,\r\n },\r\n },\r\n };\r\n cellField.value = column.field;\r\n cellTitle.value = column.title;\r\n if (hasDescription) {\r\n cellDescription.style = this.#descriptionStyle;\r\n cellDescription.value = column.description || '';\r\n }\r\n });\r\n if (sheets?.length) {\r\n for (const sheet of sheets) {\r\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.fields)) {\r\n const newSheet = workbook.addWorksheet(sheet.name);\r\n sheet.fields.forEach((field, index) => {\r\n newSheet.getColumn(index + 1).width = 30;\r\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\r\n newSheet.getCell(1, index + 1).value = field;\r\n });\r\n sheet.items.forEach((item, idx1) => {\r\n sheet.fields.forEach((field, idx2) => {\r\n newSheet.getCell(2 + idx1, 1 + idx2).value = item[field];\r\n newSheet.getCell(2 + idx1, 1 + idx2).style = this.#cellStyle;\r\n });\r\n });\r\n }\r\n }\r\n }\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n uploadTemplate = async (args: { key: string; group?: string; validator?: (fileName: string) => string }): Promise<SdExportFile> => {\r\n const { key, group, validator } = args;\r\n const { uploadTemplate } = API;\r\n const url = `${this.functionUrl}${uploadTemplate}?${this.#directory(key, group)}`;\r\n const file = await SdUtility.upload({\r\n extensions: ['xlsx'],\r\n maxSizeInMb: 0.1,\r\n validator,\r\n });\r\n if (file) {\r\n const { filePath, fileName } = await this.apiService.upload(url, file).catch((err: Error) => {\r\n this.notifyService.notify.warning(err?.message);\r\n throw err;\r\n });\r\n return {\r\n filePath,\r\n fileName,\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n generateUploadTemplate = async (args: { key: string; template: SdExportTemplate; group?: string }) => {\r\n const { key, template, group } = args;\r\n const { generateUploadTemplate } = API;\r\n const url = `${this.functionUrl}${generateUploadTemplate}?${this.#directory(key, group)}`;\r\n const { filePath, fileName } = await this.apiService.post(url, template);\r\n return { filePath, fileName };\r\n };\r\n\r\n removeFile = async (args: { key: string; group?: string; fileName?: string }) => {\r\n const { key, group, fileName } = args;\r\n const { removeFile } = API;\r\n const url = `${this.functionUrl}${removeFile}?${this.#directory(key, group)}&name=${fileName}`;\r\n await this.apiService.post(url);\r\n };\r\n\r\n filesInFolder = async (args: { key: string; group?: string }): Promise<SdExportFile[]> => {\r\n interface FilesInFolderRes {\r\n directory: string;\r\n files: {\r\n publicUrl: string;\r\n fullPath: string;\r\n name: string;\r\n }[];\r\n }\r\n const { key, group } = args;\r\n const { filesInFolder } = API;\r\n const url = `${this.functionUrl}${filesInFolder}?${this.#directory(key, group)}`;\r\n const res = await this.apiService.get<FilesInFolderRes>(url);\r\n return (\r\n res.files?.map(e => ({\r\n filePath: e.publicUrl,\r\n fileName: e.name,\r\n })) || []\r\n );\r\n };\r\n\r\n download = (filePath: string, fileName?: string) => {\r\n const link: any = document.createElement('a');\r\n link.download = `${fileName || uuid.v4()}.xlsx`;\r\n link.href = filePath;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n };\r\n\r\n exportByTemplate = async (args: { filePath: string; columns: any[]; items: any[]; fileName?: string }) => {\r\n const { filePath, columns, items, fileName } = args;\r\n const { sdExportByTemplate } = API;\r\n const url = `${this.functionUrl}${sdExportByTemplate}`;\r\n const buffer = await this.apiService.post(\r\n url,\r\n {\r\n filePath,\r\n columns,\r\n items,\r\n fileName,\r\n },\r\n null,\r\n {\r\n responseType: 'arraybuffer',\r\n }\r\n );\r\n const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' });\r\n SdUtility.downloadBlob(blob, fileName);\r\n };\r\n\r\n exportCSV = async (option: SdExportOption) => {\r\n const { columns, items, fileName } = option;\r\n const headerCSV = {};\r\n for (const column of columns) {\r\n headerCSV[column.field] = column.title;\r\n }\r\n const csvExporter = new ExportToCsv({\r\n filename: `${fileName || 'CSV'}_${Date.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}`,\r\n fieldSeparator: ',',\r\n quoteStrings: '\"',\r\n decimalSeparator: '.',\r\n showLabels: true,\r\n showTitle: false,\r\n title: fileName || 'CSV',\r\n useBom: true,\r\n });\r\n csvExporter.generateCsv([headerCSV, ...items]);\r\n };\r\n\r\n export = async (option: SdExportOption) => {\r\n const { columns, items, fileName, sheets } = option;\r\n let hasDescription = false;\r\n for (const [idx, column] of columns.entries()) {\r\n if (!column.field) {\r\n throw new Error(`Column ${idx + 1}: Field is required`);\r\n }\r\n if (!column.title) {\r\n throw new Error(`Column ${idx + 1}: Title is required`);\r\n }\r\n if (column.description) {\r\n hasDescription = true;\r\n }\r\n }\r\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\r\n const firstSheet = workbook.addWorksheet('data'); // Lấy ra sheet đầu tiên\r\n columns.forEach((column, index) => {\r\n let width = 120;\r\n if (column.width && column.width.endsWith('px')) {\r\n width = +column.width.replace('px', '');\r\n }\r\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\r\n firstSheet.getCell(1, index + 1).style = this.#fieldStyle;\r\n if (column.required) {\r\n firstSheet.getCell(2, index + 1).style = this.#requiredStyle;\r\n } else {\r\n firstSheet.getCell(2, index + 1).style = this.#titleStyle;\r\n }\r\n firstSheet.getCell(1, index + 1).value = column.field;\r\n firstSheet.getCell(2, index + 1).value = column.title;\r\n if (hasDescription) {\r\n firstSheet.getCell(3, index + 1).style = this.#descriptionStyle;\r\n firstSheet.getCell(3, index + 1).value = column.description || '';\r\n }\r\n });\r\n if (sheets?.length) {\r\n for (const sheet of sheets) {\r\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.fields)) {\r\n const newSheet = workbook.addWorksheet(sheet.name);\r\n sheet.fields.forEach((field, index) => {\r\n newSheet.getColumn(index + 1).width = 30;\r\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\r\n newSheet.getCell(1, index + 1).value = field;\r\n });\r\n sheet.items.forEach((item, idx1) => {\r\n sheet.fields.forEach((field, idx2) => {\r\n newSheet.getCell(2 + idx1, 1 + idx2).value = item[field];\r\n newSheet.getCell(2 + idx1, 1 + idx2).style = this.#cellStyle;\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n const fromRow = hasDescription ? 4 : 3;\r\n items.forEach((e, idx1) => {\r\n columns.forEach((column, idx2) => {\r\n if (typeof e[column.field] === 'number' && !column.numFmt) {\r\n // Format mặc định với kiểu số\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = +e[column.field];\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';\r\n } else {\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];\r\n }\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).style = {\r\n ...this.#cellStyle,\r\n numFmt: column.numFmt\r\n };\r\n });\r\n });\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n exportCustom = async (option: SdExportCustomOption) => {\r\n const { fileName, sheets } = option;\r\n if (!sheets?.length) {\r\n this.notifyService.notify.warning('Phải có ít nhất 1 sheet');\r\n return;\r\n }\r\n const workbook = new Workbook();\r\n for (const [idx, sheet] of sheets.entries()) {\r\n const { name, columns, cells } = sheet;\r\n const worksheet = workbook.addWorksheet(name || `Sheet ${idx + 1}`);\r\n for (const column of columns || []) {\r\n worksheet.getColumn(column.index).style = column.style;\r\n worksheet.getColumn(column.index).width = column.width;\r\n }\r\n for (const cell of cells) {\r\n const { row, column, value, style } = cell;\r\n worksheet.getCell(row, column).style = style || worksheet.getColumn(column).style;\r\n worksheet.getCell(row, column).value = value;\r\n }\r\n }\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n mergePDF = async (urls: string[]) => {\r\n const { sdMergePDF } = API;\r\n const url = `${this.functionUrl}${sdMergePDF}`;\r\n const buffer = await this.apiService.post(\r\n url,\r\n {\r\n urls,\r\n },\r\n null,\r\n {\r\n responseType: 'arraybuffer',\r\n }\r\n );\r\n SdUtility.downloadBlob(new Blob([buffer], { type: 'application/pdf' }));\r\n };\r\n\r\n uploadXlsx = async (): Promise<{ items: any[]; file: File } | undefined> => {\r\n return await SdUtility.upload({\r\n extensions: ['xlsx'],\r\n maxSizeInMb: 10,\r\n }).then(file => {\r\n return this.parseXlsx(file);\r\n });\r\n };\r\n\r\n parseXlsx = async (file: File): Promise<{ items: any[]; file: File } | undefined> => {\r\n if (file) {\r\n return new Promise<{ items: any[]; file: File }>((resolve, reject) => {\r\n const wb = new Workbook();\r\n const reader: FileReader = new FileReader();\r\n reader.onload = () => {\r\n const buffer = reader.result as ArrayBuffer;\r\n if (!buffer) {\r\n reject('Có lỗi xảy ra khi đọc file');\r\n return;\r\n }\r\n wb.xlsx.load(buffer).then(workbook => {\r\n const sheet = workbook.worksheets[0];\r\n if (!sheet) {\r\n reject('Không tìm thấy dữ liệu');\r\n return;\r\n }\r\n const items: any[] = [];\r\n const headers = sheet.getRow(1).values;\r\n if (Array.isArray(headers)) {\r\n sheet.eachRow((row, rowIndex) => {\r\n const { hasValues, values } = row;\r\n // console.log(row, hasValues, values)\r\n if (hasValues && rowIndex > 1) {\r\n const item: any = {};\r\n headers.forEach((cellValue, index) => {\r\n if (cellValue) {\r\n const field = cellValue.toString();\r\n item[field] = values[index];\r\n if (typeof item[field] === 'string') {\r\n item[field] = item[field].trim();\r\n }\r\n if (item[field] === '' || item[field] === undefined) {\r\n item[field] = null;\r\n }\r\n }\r\n });\r\n items.push(item);\r\n }\r\n });\r\n resolve({\r\n items,\r\n file,\r\n });\r\n }\r\n });\r\n };\r\n reader.readAsArrayBuffer(file);\r\n });\r\n } else {\r\n return {\r\n items: [],\r\n file: null,\r\n };\r\n }\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-export.js","sources":["../../../../projects/sd-core/export/src/lib/export.model.ts","../../../../projects/sd-core/export/src/lib/export.service.ts","../../../../projects/sd-core/export/sd-angular-core-export.ts"],"sourcesContent":["export * from './excel.model';\r\nexport interface SdExportTemplate {\r\n fileName?: string;\r\n columns: SdExportTemplateColumn[];\r\n sheets?: {\r\n name: string;\r\n items: any[];\r\n fields: string[];\r\n }[];\r\n}\r\nexport interface SdExportColumn {\r\n field: string;\r\n title: string;\r\n description?: string;\r\n width?: string;\r\n}\r\n\r\nexport interface SdExportTemplateColumn extends SdExportColumn {\r\n required?: boolean;\r\n color?: string;\r\n fontColor?: string;\r\n fill?: string;\r\n}\r\nexport interface SdExportFile {\r\n fileName?: string;\r\n filePath?: string;\r\n}\r\n\r\n\r\nexport interface SdExportSheet<T = any> {\r\n name: string;\r\n items: T[];\r\n fields: Extract<keyof T, string>[];\r\n}\r\n\r\nexport interface SdExportOption<T = any> {\r\n columns: SdExportTemplateColumn[];\r\n items: T[];\r\n fileName?: string;\r\n sheets?: SdExportSheet[];\r\n}\r\n\r\nexport type GroupPermission = 'view' | 'add' | 'delete';\r\n\r\nexport const API = {\r\n uploadTemplate: '/excel/uploadTemplate',\r\n generateUploadTemplate: '/excel/generateUploadTemplate',\r\n filesInFolder: '/excel/filesInFolder',\r\n removeFile: '/excel/remove',\r\n sdExportByTemplate: '/excel/sd-export-by-template',\r\n sdMergePDF: '/excel/sd-merge-pdf',\r\n};\r\n","import { Optional } from '@angular/core';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { SdApiService } from '@sd-angular/core/api';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { ExportToCsv } from 'export-to-csv';\r\nimport { Workbook, Style } from 'exceljs';\r\nimport { SdExportTemplate, SdExportOption, API, SdExportFile, SdExportCustomOption } from './export.model';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { FIREBASE_CONFIG, IFirebaseConfiguration } from '@sd-angular/core/common';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdExportService {\r\n private get functionUrl() {\r\n return this.firebaseConfiguration?.functionUrl;\r\n }\r\n\r\n private get folder() {\r\n const { project, env } = this.firebaseConfiguration;\r\n return `${project}-${env}`;\r\n }\r\n\r\n private get userFolder() {\r\n const { folder } = this.firebaseConfiguration;\r\n if (!folder) {\r\n return;\r\n }\r\n if (typeof folder === 'string') {\r\n return folder;\r\n }\r\n return folder();\r\n }\r\n\r\n #fieldStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n bold: true,\r\n size: 11,\r\n color: { argb: '000000' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'FAFAFA',\r\n },\r\n },\r\n };\r\n #titleColor = 'FFFFFF';\r\n #titleFgColor = '143180';\r\n #titleStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n bold: true,\r\n size: 11,\r\n color: { argb: this.#titleColor },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: this.#titleFgColor,\r\n },\r\n },\r\n };\r\n\r\n #requiredStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n vertical: 'middle',\r\n horizontal: 'center',\r\n wrapText: true,\r\n },\r\n font: {\r\n italic: true,\r\n size: 11,\r\n color: { argb: 'FFFFFF' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'FF1744',\r\n },\r\n },\r\n };\r\n\r\n #descriptionStyle: Partial<Style> = {\r\n border: {\r\n bottom: { style: 'thin' },\r\n left: { style: 'thin' },\r\n right: { style: 'thin' },\r\n },\r\n alignment: {\r\n wrapText: true,\r\n },\r\n font: {\r\n italic: true,\r\n size: 9,\r\n color: { argb: '000000' },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: 'CFD8DC',\r\n },\r\n },\r\n };\r\n\r\n #cellStyle: Partial<Style> = {\r\n alignment: {\r\n vertical: 'middle',\r\n wrapText: true,\r\n },\r\n };\r\n\r\n constructor(\r\n private apiService: SdApiService,\r\n private notifyService: SdNotifyService,\r\n @Inject(FIREBASE_CONFIG) @Optional() private firebaseConfiguration: IFirebaseConfiguration\r\n ) {}\r\n\r\n #directory = (key: string, group: string) => {\r\n let hashedFolder = hash({\r\n folder: this.folder,\r\n userFolder: this.userFolder,\r\n });\r\n if (!group) {\r\n return `dir1=${this.folder}&dir2=U-${hashedFolder}&dir3=${key || ''}`;\r\n }\r\n hashedFolder = hash({\r\n folder: this.folder,\r\n group,\r\n });\r\n return `dir1=${this.folder}&dir2=G-${hashedFolder}&dir3=${key || ''}`;\r\n };\r\n\r\n generateTemplate = async (template: SdExportTemplate) => {\r\n const { fileName, columns, sheets } = template;\r\n if (!Array.isArray(columns)) {\r\n throw new Error('Excel template columns must be an array');\r\n }\r\n for (const [idx, column] of columns.entries()) {\r\n if (!column.field) {\r\n throw new Error(`Column ${idx + 1}: Field is required`);\r\n }\r\n if (!column.title) {\r\n throw new Error(`Column ${idx + 1}: Title is required`);\r\n }\r\n }\r\n const hasDescription = columns.some(column => column.description);\r\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\r\n const firstSheet = workbook.addWorksheet('template'); // Lấy ra sheet đầu tiên\r\n columns.forEach((column, index) => {\r\n const { required, fill, fontColor } = column;\r\n const cellField = firstSheet.getCell(1, index + 1);\r\n const cellTitle = firstSheet.getCell(2, index + 1);\r\n const cellDescription = firstSheet.getCell(3, index + 1);\r\n let width = 120;\r\n if (column.width && column.width.endsWith('px')) {\r\n width = +column.width.replace('px', '');\r\n }\r\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\r\n cellField.style = this.#fieldStyle;\r\n if (required) {\r\n cellField.style = this.#requiredStyle;\r\n } else {\r\n cellField.style = this.#fieldStyle;\r\n }\r\n cellTitle.style = {\r\n ...this.#titleStyle,\r\n font: {\r\n ...this.#titleStyle?.font,\r\n color: {\r\n ...this.#titleStyle?.font?.color,\r\n argb: fontColor || this.#titleStyle?.font?.color?.argb,\r\n },\r\n },\r\n fill: {\r\n type: 'pattern',\r\n pattern: 'solid',\r\n fgColor: {\r\n argb: fill || this.#titleFgColor,\r\n },\r\n },\r\n };\r\n cellField.value = column.field;\r\n cellTitle.value = column.title;\r\n if (hasDescription) {\r\n cellDescription.style = this.#descriptionStyle;\r\n cellDescription.value = column.description || '';\r\n }\r\n });\r\n if (sheets?.length) {\r\n for (const sheet of sheets) {\r\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.fields)) {\r\n const newSheet = workbook.addWorksheet(sheet.name);\r\n sheet.fields.forEach((field, index) => {\r\n newSheet.getColumn(index + 1).width = 30;\r\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\r\n newSheet.getCell(1, index + 1).value = field;\r\n });\r\n sheet.items.forEach((item, idx1) => {\r\n sheet.fields.forEach((field, idx2) => {\r\n newSheet.getCell(2 + idx1, 1 + idx2).value = item[field];\r\n newSheet.getCell(2 + idx1, 1 + idx2).style = this.#cellStyle;\r\n });\r\n });\r\n }\r\n }\r\n }\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n uploadTemplate = async (args: { key: string; group?: string; validator?: (fileName: string) => string }): Promise<SdExportFile> => {\r\n const { key, group, validator } = args;\r\n const { uploadTemplate } = API;\r\n const url = `${this.functionUrl}${uploadTemplate}?${this.#directory(key, group)}`;\r\n const file = await SdUtility.upload({\r\n extensions: ['xlsx'],\r\n maxSizeInMb: 0.1,\r\n validator,\r\n });\r\n if (file) {\r\n const { filePath, fileName } = await this.apiService.upload(url, file).catch((err: Error) => {\r\n this.notifyService.notify.warning(err?.message);\r\n throw err;\r\n });\r\n return {\r\n filePath,\r\n fileName,\r\n };\r\n }\r\n return null;\r\n };\r\n\r\n generateUploadTemplate = async (args: { key: string; template: SdExportTemplate; group?: string }) => {\r\n const { key, template, group } = args;\r\n const { generateUploadTemplate } = API;\r\n const url = `${this.functionUrl}${generateUploadTemplate}?${this.#directory(key, group)}`;\r\n const { filePath, fileName } = await this.apiService.post(url, template);\r\n return { filePath, fileName };\r\n };\r\n\r\n removeFile = async (args: { key: string; group?: string; fileName?: string }) => {\r\n const { key, group, fileName } = args;\r\n const { removeFile } = API;\r\n const url = `${this.functionUrl}${removeFile}?${this.#directory(key, group)}&name=${fileName}`;\r\n await this.apiService.post(url);\r\n };\r\n\r\n filesInFolder = async (args: { key: string; group?: string }): Promise<SdExportFile[]> => {\r\n interface FilesInFolderRes {\r\n directory: string;\r\n files: {\r\n publicUrl: string;\r\n fullPath: string;\r\n name: string;\r\n }[];\r\n }\r\n const { key, group } = args;\r\n const { filesInFolder } = API;\r\n const url = `${this.functionUrl}${filesInFolder}?${this.#directory(key, group)}`;\r\n const res = await this.apiService.get<FilesInFolderRes>(url);\r\n return (\r\n res.files?.map(e => ({\r\n filePath: e.publicUrl,\r\n fileName: e.name,\r\n })) || []\r\n );\r\n };\r\n\r\n download = (filePath: string, fileName?: string) => {\r\n const link: any = document.createElement('a');\r\n link.download = `${fileName || uuid.v4()}.xlsx`;\r\n link.href = filePath;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n };\r\n\r\n exportByTemplate = async (args: { filePath: string; columns: any[]; items: any[]; fileName?: string }) => {\r\n const { filePath, columns, items, fileName } = args;\r\n const { sdExportByTemplate } = API;\r\n const url = `${this.functionUrl}${sdExportByTemplate}`;\r\n const buffer = await this.apiService.post(\r\n url,\r\n {\r\n filePath,\r\n columns,\r\n items,\r\n fileName,\r\n },\r\n null,\r\n {\r\n responseType: 'arraybuffer',\r\n }\r\n );\r\n const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' });\r\n SdUtility.downloadBlob(blob, fileName);\r\n };\r\n\r\n exportCSV = async (option: SdExportOption) => {\r\n const { columns, items, fileName } = option;\r\n const headerCSV = {};\r\n for (const column of columns) {\r\n headerCSV[column.field] = column.title;\r\n }\r\n const csvExporter = new ExportToCsv({\r\n filename: `${fileName || 'CSV'}_${Date.toFormat(new Date(), 'yyyy-MM-dd-HH-mm-ss')}`,\r\n fieldSeparator: ',',\r\n quoteStrings: '\"',\r\n decimalSeparator: '.',\r\n showLabels: true,\r\n showTitle: false,\r\n title: fileName || 'CSV',\r\n useBom: true,\r\n });\r\n csvExporter.generateCsv([headerCSV, ...items]);\r\n };\r\n\r\n export = async (option: SdExportOption) => {\r\n const { columns, items, fileName, sheets } = option;\r\n let hasDescription = false;\r\n for (const [idx, column] of columns.entries()) {\r\n if (!column.field) {\r\n throw new Error(`Column ${idx + 1}: Field is required`);\r\n }\r\n if (!column.title) {\r\n throw new Error(`Column ${idx + 1}: Title is required`);\r\n }\r\n if (column.description) {\r\n hasDescription = true;\r\n }\r\n }\r\n const workbook = new Workbook(); //await XlsxPopulate.fromBlankAsync(); // Đọc file sau khi đã download\r\n const firstSheet = workbook.addWorksheet('data'); // Lấy ra sheet đầu tiên\r\n columns.forEach((column, index) => {\r\n let width = 120;\r\n if (column.width && column.width.endsWith('px')) {\r\n width = +column.width.replace('px', '');\r\n }\r\n firstSheet.getColumn(index + 1).width = width / 7 || 20;\r\n firstSheet.getCell(1, index + 1).style = this.#fieldStyle;\r\n if (column.required) {\r\n firstSheet.getCell(2, index + 1).style = this.#requiredStyle;\r\n } else {\r\n firstSheet.getCell(2, index + 1).style = this.#titleStyle;\r\n }\r\n firstSheet.getCell(1, index + 1).value = column.field;\r\n firstSheet.getCell(2, index + 1).value = column.title;\r\n if (hasDescription) {\r\n firstSheet.getCell(3, index + 1).style = this.#descriptionStyle;\r\n firstSheet.getCell(3, index + 1).value = column.description || '';\r\n }\r\n });\r\n if (sheets?.length) {\r\n for (const sheet of sheets) {\r\n if (sheet.name && Array.isArray(sheet.items) && Array.isArray(sheet.fields)) {\r\n const newSheet = workbook.addWorksheet(sheet.name);\r\n sheet.fields.forEach((field, index) => {\r\n newSheet.getColumn(index + 1).width = 30;\r\n newSheet.getCell(1, index + 1).style = this.#titleStyle;\r\n newSheet.getCell(1, index + 1).value = field;\r\n });\r\n sheet.items.forEach((item, idx1) => {\r\n sheet.fields.forEach((field, idx2) => {\r\n newSheet.getCell(2 + idx1, 1 + idx2).value = item[field];\r\n newSheet.getCell(2 + idx1, 1 + idx2).style = this.#cellStyle;\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n const fromRow = hasDescription ? 4 : 3;\r\n items.forEach((e, idx1) => {\r\n columns.forEach((column, idx2) => {\r\n if (typeof e[column.field] === 'number') {\r\n // Format mặc định với kiểu số\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = +e[column.field];\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';\r\n } else {\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];\r\n }\r\n firstSheet.getCell(fromRow + idx1, 1 + idx2).style = {\r\n ...this.#cellStyle,\r\n };\r\n });\r\n });\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n exportCustom = async (option: SdExportCustomOption) => {\r\n const { fileName, sheets } = option;\r\n if (!sheets?.length) {\r\n this.notifyService.notify.warning('Phải có ít nhất 1 sheet');\r\n return;\r\n }\r\n const workbook = new Workbook();\r\n for (const [idx, sheet] of sheets.entries()) {\r\n const { name, columns, cells } = sheet;\r\n const worksheet = workbook.addWorksheet(name || `Sheet ${idx + 1}`);\r\n for (const column of columns || []) {\r\n worksheet.getColumn(column.index).style = column.style;\r\n worksheet.getColumn(column.index).width = column.width;\r\n }\r\n for (const cell of cells) {\r\n const { row, column, value, style } = cell;\r\n worksheet.getCell(row, column).style = style || worksheet.getColumn(column).style;\r\n worksheet.getCell(row, column).value = value;\r\n }\r\n }\r\n const file = await workbook.xlsx.writeBuffer();\r\n SdUtility.downloadBlob(new Blob([file], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), fileName);\r\n };\r\n\r\n mergePDF = async (urls: string[]) => {\r\n const { sdMergePDF } = API;\r\n const url = `${this.functionUrl}${sdMergePDF}`;\r\n const buffer = await this.apiService.post(\r\n url,\r\n {\r\n urls,\r\n },\r\n null,\r\n {\r\n responseType: 'arraybuffer',\r\n }\r\n );\r\n SdUtility.downloadBlob(new Blob([buffer], { type: 'application/pdf' }));\r\n };\r\n\r\n uploadXlsx = async (): Promise<{ items: any[]; file: File } | undefined> => {\r\n return await SdUtility.upload({\r\n extensions: ['xlsx'],\r\n maxSizeInMb: 10,\r\n }).then(file => {\r\n return this.parseXlsx(file);\r\n });\r\n };\r\n\r\n parseXlsx = async (file: File): Promise<{ items: any[]; file: File } | undefined> => {\r\n if (file) {\r\n return new Promise<{ items: any[]; file: File }>((resolve, reject) => {\r\n const wb = new Workbook();\r\n const reader: FileReader = new FileReader();\r\n reader.onload = () => {\r\n const buffer = reader.result as ArrayBuffer;\r\n if (!buffer) {\r\n reject('Có lỗi xảy ra khi đọc file');\r\n return;\r\n }\r\n wb.xlsx.load(buffer).then(workbook => {\r\n const sheet = workbook.worksheets[0];\r\n if (!sheet) {\r\n reject('Không tìm thấy dữ liệu');\r\n return;\r\n }\r\n const items: any[] = [];\r\n const headers = sheet.getRow(1).values;\r\n if (Array.isArray(headers)) {\r\n sheet.eachRow((row, rowIndex) => {\r\n const { hasValues, values } = row;\r\n // console.log(row, hasValues, values)\r\n if (hasValues && rowIndex > 1) {\r\n const item: any = {};\r\n headers.forEach((cellValue, index) => {\r\n if (cellValue) {\r\n const field = cellValue.toString();\r\n item[field] = values[index];\r\n if (typeof item[field] === 'string') {\r\n item[field] = item[field].trim();\r\n }\r\n if (item[field] === '' || item[field] === undefined) {\r\n item[field] = null;\r\n }\r\n }\r\n });\r\n items.push(item);\r\n }\r\n });\r\n resolve({\r\n items,\r\n file,\r\n });\r\n }\r\n });\r\n };\r\n reader.readAsArrayBuffer(file);\r\n });\r\n } else {\r\n return {\r\n items: [],\r\n file: null,\r\n };\r\n }\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -118,7 +118,7 @@ SdModalHeader.decorators = [
|
|
|
118
118
|
selector: 'sd-modal-header',
|
|
119
119
|
template: "<h3 class=\"mb-0\" mat-dialog-title *ngIf=\"!isMobileOrTablet\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</h3>\r\n<sd-bottom-sheet-header *ngIf=\"isMobileOrTablet\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n</sd-bottom-sheet-header>\r\n<ng-template #content>\r\n <ng-content></ng-content>\r\n</ng-template>",
|
|
120
120
|
encapsulation: ViewEncapsulation.None,
|
|
121
|
-
styles: [".mat-dialog-title{align-items:center;display:flex;justify-content:space-between}button:focus{outline:none!important}"]
|
|
121
|
+
styles: [".mat-dialog-title{align-items:center;display:flex!important;justify-content:space-between}button:focus{outline:none!important}"]
|
|
122
122
|
},] }
|
|
123
123
|
];
|
|
124
124
|
SdModalHeader.ctorParameters = () => [
|
|
@@ -32,10 +32,10 @@ const CUSTOM_DATETIME_FORMATS = {
|
|
|
32
32
|
};
|
|
33
33
|
const CUSTOM_DATE_FORMATS = {
|
|
34
34
|
parse: {
|
|
35
|
-
dateInput: '
|
|
35
|
+
dateInput: 'MM/YYYY',
|
|
36
36
|
},
|
|
37
37
|
display: {
|
|
38
|
-
dateInput: '
|
|
38
|
+
dateInput: 'MM/YYYY',
|
|
39
39
|
monthYearLabel: 'MMM YYYY',
|
|
40
40
|
dateA11yLabel: 'LL',
|
|
41
41
|
monthYearA11yLabel: 'MMMM YYYY',
|
|
@@ -263,7 +263,7 @@ class SdMonth {
|
|
|
263
263
|
}
|
|
264
264
|
if (__classPrivateFieldGet(this, _date) !== val) {
|
|
265
265
|
__classPrivateFieldSet(this, _date, val);
|
|
266
|
-
const date = Date.isDate(__classPrivateFieldGet(this, _date)) ? moment(Date.toFormat(__classPrivateFieldGet(this, _date), 'MM/dd/yyyy
|
|
266
|
+
const date = Date.isDate(__classPrivateFieldGet(this, _date)) ? moment(Date.toFormat(__classPrivateFieldGet(this, _date), 'MM/dd/yyyy'), 'MM/DD/YYYY') : null;
|
|
267
267
|
this.formControl.setValue(date);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-month.js","sources":["../../../../projects/sd-core/month/src/lib/month.component.ts","../../../../projects/sd-core/month/src/lib/month.module.ts","../../../../projects/sd-core/month/sd-angular-core-month.ts"],"sourcesContent":["import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport moment, { Moment } from 'moment';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport hash from 'object-hash';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY',\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'sd-month',\r\n templateUrl: './month.component.html',\r\n styleUrls: ['./month.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS },\r\n ],\r\n})\r\nexport class SdMonth implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = val === '' || val;\r\n val = val === '' || val;\r\n }\r\n\r\n formControl = new SdFormControl();\r\n min: Date;\r\n\r\n @Input('min') set _min(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n max: Date;\r\n\r\n @Input('max') set _max(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = val === '' || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n\r\n inlineError: string;\r\n\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n if (this.inlineError) {\r\n this.formControl.setValidators([this.customInlineErrorValidator()]);\r\n this.formControl.updateValueAndValidity();\r\n } else {\r\n this.formControl.clearValidators();\r\n this.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n qcId: string;\r\n label: string;\r\n\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-month',\r\n label: val,\r\n });\r\n }\r\n\r\n @Input() placeholder: string;\r\n\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(MatDatepicker) datePicker: MatDatepicker<Moment>;\r\n isFocused = false;\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n this.datePicker?.open();\r\n //\r\n }, 100);\r\n };\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n isValid: boolean;\r\n onKeyDown = (event: KeyboardEvent) => {\r\n const key = event.keyCode || event.charCode;\r\n let isShift = false;\r\n if (key === 16) {\r\n isShift = true;\r\n }\r\n\r\n // cho phép copy parse\r\n if (event.ctrlKey && (key === 67 || key === 86)) {\r\n console.log('action copy parse... datepicker');\r\n return true;\r\n }\r\n\r\n // Allow only Numeric Keys.\r\n if (\r\n ((key >= 48 && key <= 57) ||\r\n key === 8 ||\r\n key <= 37 ||\r\n key <= 39 ||\r\n (key >= 96 && key <= 105) ||\r\n key === 191 ||\r\n key === 186 ||\r\n key === 59) &&\r\n isShift === false\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n onKeyup = event => {\r\n const currentVal: string = event.target.value;\r\n const formControl: AbstractControl = this.formControl;\r\n let regex = /^([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\r\n\r\n if (currentVal && !regex.test(currentVal)) {\r\n setTimeout(() => {\r\n this.isValid = true;\r\n formControl.markAsDirty();\r\n formControl.markAsTouched();\r\n formControl.setErrors({ ...formControl.errors, date: `Sai định dạng` });\r\n }, 0);\r\n } else {\r\n setTimeout(() => {\r\n this.isValid = false;\r\n formControl.setErrors({ ...formControl.errors, date: null });\r\n this.formControl.updateValueAndValidity();\r\n }, 0);\r\n }\r\n };\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n this.input?.nativeElement?.focus();\r\n if (!this.isValid) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n this.isValid = false;\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n onMonthSelected = (normalizedMonthAndYear: Moment) => {\r\n const ctrlValue = this.formControl.value || moment();\r\n ctrlValue.month(normalizedMonthAndYear.month());\r\n ctrlValue.year(normalizedMonthAndYear.year());\r\n this.formControl.setValue(ctrlValue);\r\n this.datePicker.close();\r\n this.modelChange.emit(ctrlValue);\r\n this.sdChange.emit(ctrlValue);\r\n };\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdButtonModule } from \"@sd-angular/core/button\";\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdMonth } from './month.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule,\r\n SdButtonModule\r\n ],\r\n declarations: [\r\n SdMonth\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdMonth\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdMonthModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-month.js","sources":["../../../../projects/sd-core/month/src/lib/month.component.ts","../../../../projects/sd-core/month/src/lib/month.module.ts","../../../../projects/sd-core/month/sd-angular-core-month.ts"],"sourcesContent":["import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport moment, { Moment } from 'moment';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport hash from 'object-hash';\r\nimport { Subscription } from 'rxjs';\r\nimport * as uuid from 'uuid';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'MM/YYYY',\r\n },\r\n display: {\r\n dateInput: 'MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'sd-month',\r\n templateUrl: './month.component.html',\r\n styleUrls: ['./month.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS },\r\n ],\r\n})\r\nexport class SdMonth implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = val === '' || val;\r\n val = val === '' || val;\r\n }\r\n\r\n formControl = new SdFormControl();\r\n min: Date;\r\n\r\n @Input('min') set _min(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n max: Date;\r\n\r\n @Input('max') set _max(val: string | Date | number) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = val === '' || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n\r\n inlineError: string;\r\n\r\n @Input('inlineError') set _inlineError(val: string) {\r\n this.inlineError = val;\r\n if (this.inlineError) {\r\n this.formControl.setValidators([this.customInlineErrorValidator()]);\r\n this.formControl.updateValueAndValidity();\r\n } else {\r\n this.formControl.clearValidators();\r\n this.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n qcId: string;\r\n label: string;\r\n\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-month',\r\n label: val,\r\n });\r\n }\r\n\r\n @Input() placeholder: string;\r\n\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n @Output() sdFocus = new EventEmitter<any>();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy'), 'MM/DD/YYYY') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(MatDatepicker) datePicker: MatDatepicker<Moment>;\r\n isFocused = false;\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration\r\n ) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(\r\n this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n // Hàm tạo Validators tùy chỉnh cho inlineError\r\n customInlineErrorValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n return { inlineError: true };\r\n };\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.sdFocus.emit();\r\n };\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n };\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n };\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n };\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n this.datePicker?.open();\r\n //\r\n }, 100);\r\n };\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n isValid: boolean;\r\n onKeyDown = (event: KeyboardEvent) => {\r\n const key = event.keyCode || event.charCode;\r\n let isShift = false;\r\n if (key === 16) {\r\n isShift = true;\r\n }\r\n\r\n // cho phép copy parse\r\n if (event.ctrlKey && (key === 67 || key === 86)) {\r\n console.log('action copy parse... datepicker');\r\n return true;\r\n }\r\n\r\n // Allow only Numeric Keys.\r\n if (\r\n ((key >= 48 && key <= 57) ||\r\n key === 8 ||\r\n key <= 37 ||\r\n key <= 39 ||\r\n (key >= 96 && key <= 105) ||\r\n key === 191 ||\r\n key === 186 ||\r\n key === 59) &&\r\n isShift === false\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n onKeyup = event => {\r\n const currentVal: string = event.target.value;\r\n const formControl: AbstractControl = this.formControl;\r\n let regex = /^([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\r\n\r\n if (currentVal && !regex.test(currentVal)) {\r\n setTimeout(() => {\r\n this.isValid = true;\r\n formControl.markAsDirty();\r\n formControl.markAsTouched();\r\n formControl.setErrors({ ...formControl.errors, date: `Sai định dạng` });\r\n }, 0);\r\n } else {\r\n setTimeout(() => {\r\n this.isValid = false;\r\n formControl.setErrors({ ...formControl.errors, date: null });\r\n this.formControl.updateValueAndValidity();\r\n }, 0);\r\n }\r\n };\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n this.input?.nativeElement?.focus();\r\n if (!this.isValid) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n this.isValid = false;\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n };\r\n\r\n onMonthSelected = (normalizedMonthAndYear: Moment) => {\r\n const ctrlValue = this.formControl.value || moment();\r\n ctrlValue.month(normalizedMonthAndYear.month());\r\n ctrlValue.year(normalizedMonthAndYear.year());\r\n this.formControl.setValue(ctrlValue);\r\n this.datePicker.close();\r\n this.modelChange.emit(ctrlValue);\r\n this.sdChange.emit(ctrlValue);\r\n };\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SdButtonModule } from \"@sd-angular/core/button\";\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { SdMonth } from './month.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule,\r\n SdButtonModule\r\n ],\r\n declarations: [\r\n SdMonth\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdMonth\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdMonthModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -502,7 +502,7 @@ SdSelect.decorators = [
|
|
|
502
502
|
selector: 'sd-select',
|
|
503
503
|
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"isRequired\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value, selectedItems: selectedItems | async }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <mat-select\r\n *ngIf=\"multiple\"\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n multiple\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n panelClass=\"sd-select-panel\"\r\n [class.sd-selected]=\"!isRequired && formControl?.value?.length\"\r\n [required]=\"isRequired\"\r\n (openedChange)=\"onOpenedChange($event)\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n matTooltipClass=\"sd-multiline-tooltip\"\r\n [matTooltipDisabled]=\"!formControl.disabled || !formControl?.value?.length\"\r\n [matTooltip]=\"tooltip\">\r\n <mat-select-trigger>\r\n {{ display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input\r\n aria-hidden=\"true\"\r\n #input\r\n placeholder=\"{{ 'Search' | sdTranslate }}\"\r\n matInput\r\n autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup)=\"searchTerm$.next($event.target.value)\" />\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"multiple && selectAll\">\r\n <mat-checkbox class=\"mat-option\" [(ngModel)]=\"allSelected\" [ngModelOptions]=\"{ standalone: true }\" (change)=\"onSelectAll()\">\r\n T\u1EA5t c\u1EA3</mat-checkbox\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-select\r\n *ngIf=\"!multiple\"\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n panelClass=\"sd-select-panel\"\r\n [class.sd-selected]=\"!isRequired && formControl?.value != null\"\r\n [required]=\"isRequired\"\r\n (openedChange)=\"onOpenedChange($event)\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\">\r\n <mat-select-trigger>\r\n {{ display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input\r\n aria-hidden=\"true\"\r\n #input\r\n placeholder=\"{{ 'Search' | sdTranslate }}\"\r\n matInput\r\n autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup)=\"searchTerm$.next($event.target.value)\" />\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <svg\r\n #copyTooltip=\"matTooltip\"\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value != null) && copyable\"\r\n matSuffix\r\n [matTooltip]=\"copied ? 'Copied' : 'Copy'\"\r\n class=\"icon-copy\"\r\n focusable=\"false\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\"\r\n (click)=\"onCopyText($event)\">\r\n <path\r\n d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"></path>\r\n </svg>\r\n \r\n <mat-icon\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value != null) && !isRequired && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #popoverValues=\"sdPopover\" width=\"auto\">\r\n <ng-container *ngIf=\"formControl?.value?.length\">\r\n <ng-container *sdLet=\"selectedItems | async as items\">\r\n <div *ngFor=\"let item of items\">\r\n <strong>{{ item[valueField] }}</strong> - {{ item[displayField] }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</sd-popover> -->\r\n",
|
|
504
504
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
505
|
-
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}:host ::ng-deep .mat-form-field:hover .icon-copy{opacity:1}:host ::ng-deep .mat-form-field .icon-copy{cursor:pointer;fill:rgba(0,0,0,.5);height:.9em;opacity:0;transition:opacity .2s linear;width:.9em}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input{background-color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:10}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline{width:100%}::ng-deep .sd-select-panel .mat-option.sd-filtered-input mat-pseudo-checkbox{display:none}::ng-deep .mat-select-panel .mat-option.sd-filtered-input{height:auto}::ng-deep .sd-select-panel .mat-option.sd-filtered-input input{color:#000}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field-prefix .mat-icon{margin-right:0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper{padding:10px 0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-outline{background-color:rgba(0,0,0,.04)}::ng-deep .sd-multiline-tooltip{white-space:pre-line}"]
|
|
505
|
+
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}:host ::ng-deep .mat-form-field:hover .icon-copy{opacity:1}:host ::ng-deep .mat-form-field .icon-copy{cursor:pointer;fill:rgba(0,0,0,.5);height:.9em;opacity:0;transition:opacity .2s linear;width:.9em}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input{background-color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:10}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline{width:100%}::ng-deep .sd-select-panel .mat-option.sd-filtered-input mat-pseudo-checkbox{display:none}::ng-deep .mat-select-panel .mat-option.sd-filtered-input{height:auto}::ng-deep .sd-select-panel .mat-option.sd-filtered-input input{color:#000}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field-prefix .mat-icon{margin-right:0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper{padding:10px 0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-outline{background-color:rgba(0,0,0,.04)}::ng-deep .sd-multiline-tooltip{white-space:pre-line}::ng-deep .mat-select-panel{overflow:auto!important}"]
|
|
506
506
|
},] }
|
|
507
507
|
];
|
|
508
508
|
SdSelect.ctorParameters = () => [
|
|
@@ -1520,15 +1520,13 @@ class SdTable {
|
|
|
1520
1520
|
}
|
|
1521
1521
|
else if (column.type === 'date') {
|
|
1522
1522
|
let date = item[column.field];
|
|
1523
|
-
// Nếu là date thì convert theo đúng format
|
|
1524
|
-
|
|
1525
|
-
obj[column.field] = Date.isDate(date) ? new Date(date) : undefined;
|
|
1523
|
+
// Nếu là date thì convert theo đúng format ISO
|
|
1524
|
+
obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy');
|
|
1526
1525
|
}
|
|
1527
1526
|
else if (column.type === 'datetime') {
|
|
1528
1527
|
let date = item[column.field];
|
|
1529
1528
|
// Nếu là datetime thì convert theo đúng format
|
|
1530
|
-
|
|
1531
|
-
obj[column.field] = Date.isDate(date) ? new Date(date) : undefined;
|
|
1529
|
+
obj[column.field] = Date.toFormat(date, 'MM/dd/yyyy HH:mm:ss');
|
|
1532
1530
|
}
|
|
1533
1531
|
else if (column.type === 'time') {
|
|
1534
1532
|
let date = item[column.field];
|
|
@@ -1642,7 +1640,6 @@ class SdTable {
|
|
|
1642
1640
|
title: column.title,
|
|
1643
1641
|
description: column.description,
|
|
1644
1642
|
width: column.width,
|
|
1645
|
-
numFmt: column.type === 'datetime' ? 'dd/mm/yyyy hh:mm:ss' : column.type === 'date' ? 'dd/mm/yyyy' : undefined
|
|
1646
1643
|
});
|
|
1647
1644
|
});
|
|
1648
1645
|
// Lấy columns từ configuration
|