coer-elements 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/Tools/index.d.ts +8 -0
- package/Tools/src/Breadcrumbs.class.d.ts +18 -0
- package/Tools/src/ControlValue.d.ts +23 -0
- package/Tools/src/DateTime.class.d.ts +11 -0
- package/Tools/src/Files.class.d.ts +16 -0
- package/Tools/src/Page.class.d.ts +66 -0
- package/Tools/src/Screen.class.d.ts +11 -0
- package/Tools/src/Source.class.d.ts +20 -0
- package/Tools/src/Tools.d.ts +33 -0
- package/components/index.d.ts +2 -0
- package/components/src/coer-alert/coer-alert.component.d.ts +23 -0
- package/components/src/components.module.d.ts +10 -0
- package/esm2022/Tools/index.mjs +9 -0
- package/esm2022/Tools/src/Breadcrumbs.class.mjs +63 -0
- package/esm2022/Tools/src/ControlValue.mjs +44 -0
- package/esm2022/Tools/src/DateTime.class.mjs +22 -0
- package/esm2022/Tools/src/Files.class.mjs +93 -0
- package/esm2022/Tools/src/Page.class.mjs +160 -0
- package/esm2022/Tools/src/Screen.class.mjs +43 -0
- package/esm2022/Tools/src/Source.class.mjs +79 -0
- package/esm2022/Tools/src/Tools.mjs +200 -0
- package/esm2022/components/index.mjs +3 -0
- package/esm2022/components/src/coer-alert/coer-alert.component.mjs +227 -0
- package/esm2022/components/src/components.module.mjs +92 -0
- package/esm2022/index.mjs +2 -2
- package/esm2022/interfaces/index.mjs +7 -0
- package/esm2022/interfaces/src/IAppSource.interface.mjs +2 -0
- package/esm2022/interfaces/src/IBreadcrumb.interface.mjs +2 -0
- package/esm2022/interfaces/src/ICoerRef.interface.mjs +2 -0
- package/esm2022/interfaces/src/IGoBack.interface.mjs +2 -0
- package/esm2022/interfaces/src/IPatch.interface.mjs +2 -0
- package/esm2022/interfaces/src/IScreenSize.interface.mjs +2 -0
- package/fesm2022/coer-elements.mjs +1000 -0
- package/fesm2022/coer-elements.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/interfaces/index.d.ts +6 -0
- package/interfaces/src/IAppSource.interface.d.ts +4 -0
- package/interfaces/src/IBreadcrumb.interface.d.ts +6 -0
- package/interfaces/src/ICoerRef.interface.d.ts +10 -0
- package/interfaces/src/IGoBack.interface.d.ts +6 -0
- package/interfaces/src/IPatch.interface.d.ts +5 -0
- package/interfaces/src/IScreenSize.interface.d.ts +5 -0
- package/package.json +14 -1
package/Tools/index.d.ts
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
export * from './src/Breadcrumbs.class';
|
2
|
+
export * from './src/ControlValue';
|
3
|
+
export * from './src/DateTime.class';
|
4
|
+
export * from './src/Files.class';
|
5
|
+
export * from './src/Page.class';
|
6
|
+
export * from './src/Screen.class';
|
7
|
+
export * from './src/Source.class';
|
8
|
+
export * from './src/Tools';
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { IAppSource } from "../../interfaces";
|
2
|
+
export declare class Breadcrumbs {
|
3
|
+
private static readonly storage;
|
4
|
+
/** */
|
5
|
+
static Add(page: string, path: string): void;
|
6
|
+
/** */
|
7
|
+
static Get(): IAppSource[];
|
8
|
+
/** Source */
|
9
|
+
static GetFirst(): IAppSource | null;
|
10
|
+
/** */
|
11
|
+
static Save(breadcrumbs: IAppSource[]): void;
|
12
|
+
/** */
|
13
|
+
static Remove(path: string): void;
|
14
|
+
/** */
|
15
|
+
static SetLast(page: string, path: string): void;
|
16
|
+
/** */
|
17
|
+
static RemoveLast(): void;
|
18
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { ControlValueAccessor } from "@angular/forms";
|
2
|
+
export declare const CONTROL_VALUE: <T>(component: T) => {
|
3
|
+
provide: import("@angular/core").InjectionToken<readonly ControlValueAccessor[]>;
|
4
|
+
useExisting: import("@angular/core").Type<any>;
|
5
|
+
multi: boolean;
|
6
|
+
};
|
7
|
+
export declare class ControlValue implements ControlValueAccessor {
|
8
|
+
protected _value: any;
|
9
|
+
private _isTouched;
|
10
|
+
protected _UpdateValue: Function;
|
11
|
+
private _IsTouched;
|
12
|
+
get isTouched(): boolean;
|
13
|
+
/** */
|
14
|
+
protected SetValue(value: any): void;
|
15
|
+
/** */
|
16
|
+
SetTouched(isTouched: boolean): void;
|
17
|
+
/** */
|
18
|
+
writeValue(value: any): void;
|
19
|
+
/** */
|
20
|
+
registerOnChange(callback: Function): void;
|
21
|
+
/** */
|
22
|
+
registerOnTouched(callback: Function): void;
|
23
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import moment from "moment";
|
2
|
+
export declare class DateTime {
|
3
|
+
/** Get UTC Offset */
|
4
|
+
static GetUTCOffset(): number;
|
5
|
+
/** Convert UTC Date to Local Zone */
|
6
|
+
static ToLocalZone(utcDate: string | Date | moment.Moment): string;
|
7
|
+
/** Convert Local Zone Date to UTC */
|
8
|
+
static ToUTC(utcDate: string | Date | moment.Moment): string;
|
9
|
+
/** DD MMM YYYY */
|
10
|
+
static GetDateFormat(date: string | Date | moment.Moment): string;
|
11
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
export declare class Files {
|
2
|
+
static readonly EXCEL_EXTENSIONS: string[];
|
3
|
+
/** Get Extension File */
|
4
|
+
static GetExtension(file: File): string | null;
|
5
|
+
/** Is Excel File */
|
6
|
+
static IsExcel(file: File): boolean;
|
7
|
+
/** Read excel file */
|
8
|
+
static ReadExcel<T>(file: File): Promise<{
|
9
|
+
columns: string[];
|
10
|
+
rows: T[];
|
11
|
+
}>;
|
12
|
+
/** Export to excel file */
|
13
|
+
static ExportExcel<T>(data: T[], fileName?: string, sheetName?: string): void;
|
14
|
+
/** Convert file to string base64 */
|
15
|
+
static ConvertToBase64(file: File): Promise<string>;
|
16
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import { Router } from '@angular/router';
|
2
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
3
|
+
import { IBreadcrumb, IGoBack } from '../../interfaces';
|
4
|
+
import { CoerAlert } from '../../components';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
export declare class Page implements AfterViewInit, OnDestroy {
|
7
|
+
protected readonly alert: CoerAlert;
|
8
|
+
protected readonly router: Router;
|
9
|
+
private readonly activatedRoute;
|
10
|
+
/** */
|
11
|
+
protected isUpdate: boolean;
|
12
|
+
/** */
|
13
|
+
protected isLoading: boolean;
|
14
|
+
/** */
|
15
|
+
protected isReady: boolean;
|
16
|
+
/** */
|
17
|
+
protected enableAnimations: boolean;
|
18
|
+
/** */
|
19
|
+
protected routeParams: any;
|
20
|
+
/** */
|
21
|
+
protected queryParams: any;
|
22
|
+
/** */
|
23
|
+
protected breadcrumbs: IBreadcrumb[];
|
24
|
+
/** */
|
25
|
+
protected pageResponse: any;
|
26
|
+
/** */
|
27
|
+
protected goBack: IGoBack;
|
28
|
+
private _page;
|
29
|
+
private _source;
|
30
|
+
private _preventDestroy;
|
31
|
+
constructor(page: string);
|
32
|
+
ngAfterViewInit(): void;
|
33
|
+
ngOnDestroy(): void;
|
34
|
+
/** Main method. Starts after ngAfterViewInit() */
|
35
|
+
protected RunPage(): void;
|
36
|
+
/** Rename the last breadcrumb and update the url id */
|
37
|
+
protected SetPageName(name: string, id?: string | number | null): void;
|
38
|
+
/** */
|
39
|
+
private SetSource;
|
40
|
+
/** */
|
41
|
+
private GetSource;
|
42
|
+
/** */
|
43
|
+
protected GetPageResponse(): void;
|
44
|
+
/** */
|
45
|
+
private GetNavigation;
|
46
|
+
/** */
|
47
|
+
private SetGoBack;
|
48
|
+
/** */
|
49
|
+
private GoBack;
|
50
|
+
/** Navigate to previous page */
|
51
|
+
protected GoToSource<T>(pageResponse?: T | null): void;
|
52
|
+
/** */
|
53
|
+
protected SetPageResponse<T>(pageResponse?: T | null): void;
|
54
|
+
/** */
|
55
|
+
protected ReloadPage(): void;
|
56
|
+
/** */
|
57
|
+
protected Log(value: any, log?: string | null): void;
|
58
|
+
/** Returns true if the value is null or undefined, false otherwise */
|
59
|
+
protected IsNotNull: <T>(value: T | null | undefined) => boolean;
|
60
|
+
/** Returns true if the value is null or undefined, false otherwise */
|
61
|
+
protected IsNull: <T>(value: T | null | undefined) => boolean;
|
62
|
+
/** Returns true if the value is null or undefined or contains only whitespace, false otherwise */
|
63
|
+
protected IsOnlyWhiteSpace: <T>(value: T | null | undefined) => boolean;
|
64
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Page, never>;
|
65
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<Page, "ng-component", never, {}, {}, never, never, false, never>;
|
66
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { IScreenSize } from "../../interfaces";
|
2
|
+
import { Observable } from "rxjs";
|
3
|
+
export declare class Screen {
|
4
|
+
static get WINDOW_WIDTH(): number;
|
5
|
+
static get WINDOW_HEIGHT(): number;
|
6
|
+
static get DEVICE_WIDTH(): number;
|
7
|
+
static get DEVICE_HEIGHT(): number;
|
8
|
+
static get BREAKPOINT(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
9
|
+
/** */
|
10
|
+
static Resize: Observable<IScreenSize>;
|
11
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { IAppSource } from '../../interfaces';
|
2
|
+
export declare class Source {
|
3
|
+
private static readonly storage;
|
4
|
+
/** */
|
5
|
+
static Set(page: string): void;
|
6
|
+
/** */
|
7
|
+
private static Save;
|
8
|
+
/** */
|
9
|
+
static Get(): IAppSource | null;
|
10
|
+
/** */
|
11
|
+
static GetRoot(): IAppSource | null;
|
12
|
+
/** */
|
13
|
+
static SetPageResponse<T>(pageResponse: T): void;
|
14
|
+
/** */
|
15
|
+
static GetPageResponse<T>(): T | null;
|
16
|
+
/** */
|
17
|
+
static ClearPageResponse(): void;
|
18
|
+
/** Clear Source */
|
19
|
+
static Reset(): void;
|
20
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
export declare const Tools: {
|
2
|
+
/** Generate a Guid */
|
3
|
+
GetGuid: (seed?: string) => string;
|
4
|
+
/** Returns true if the value is null or undefined, false otherwise */
|
5
|
+
IsNull: <T>(value: T | null | undefined) => boolean;
|
6
|
+
/** Returns true if the value is not null or undefined, false otherwise */
|
7
|
+
IsNotNull: <T_1>(value: T_1 | null | undefined) => boolean;
|
8
|
+
/** Returns true if the value is null or undefined or contains only whitespace, false otherwise */
|
9
|
+
IsOnlyWhiteSpace: <T_2>(value: T_2 | null | undefined) => boolean;
|
10
|
+
/** Break reference of a object or array */
|
11
|
+
BreakReference: <T_3>(object: T_3) => T_3;
|
12
|
+
/** Clean extra whitespaces */
|
13
|
+
CleanUpBlanks: (text: string | number) => string;
|
14
|
+
/** Get properties of an object */
|
15
|
+
GetObjectProperties: <T_4>(obj: T_4 | null | undefined) => string[];
|
16
|
+
/**
|
17
|
+
* Set an index and merge more arrays of the same type
|
18
|
+
* @returns A new array
|
19
|
+
* */
|
20
|
+
SetIndex: <T_5>(array: T_5[], ...args: T_5[][]) => T_5[];
|
21
|
+
/** Set First Char To Lower */
|
22
|
+
FirstCharToLower: (text: string | null | undefined) => string;
|
23
|
+
/** Set First Char To Upper */
|
24
|
+
FirstCharToUpper: (text: string | null | undefined) => string;
|
25
|
+
/** Sort an array in ascending order by property */
|
26
|
+
SortBy: <T_6>(array: T_6[], property: string, propertyType?: 'string' | 'number') => T_6[];
|
27
|
+
/** Sort an array in descending order by property */
|
28
|
+
SortByDesc: <T_7>(array: T_7[], property: string, propertyType?: 'string' | 'number') => T_7[];
|
29
|
+
/** Return a string with forman numeric */
|
30
|
+
GetNumericFormat: (value: string | number | null | undefined, decimals?: number) => string;
|
31
|
+
/** Wait the time indicated */
|
32
|
+
Sleep: (milliseconds?: number, reference?: string | null) => Promise<unknown>;
|
33
|
+
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import * as i0 from "@angular/core";
|
2
|
+
export declare class CoerAlert {
|
3
|
+
/** */
|
4
|
+
Success(message?: string | null, title?: string | null, icon?: string | null, autohide?: number | null): void;
|
5
|
+
/** */
|
6
|
+
Error(message?: string | null, title?: string | null, icon?: string | null, autohide?: number | null): void;
|
7
|
+
/** */
|
8
|
+
Info(message?: string | null, title?: string | null, icon?: string | null, autohide?: number | null): void;
|
9
|
+
/** */
|
10
|
+
Warning(message?: string | null, title?: string | null, icon?: string | null, autohide?: number | null): void;
|
11
|
+
/** */
|
12
|
+
protected Close(alert: 'alert-success' | 'alert-error' | 'alert-info' | 'alert-warning'): Promise<void>;
|
13
|
+
/** */
|
14
|
+
Confirm(message?: string, alertType?: 'warning' | 'danger' | 'success' | 'info', icon?: string | null): Promise<boolean>;
|
15
|
+
/** */
|
16
|
+
private SetIcon;
|
17
|
+
/** */
|
18
|
+
private SetAutoHide;
|
19
|
+
/** */
|
20
|
+
private GetIcon;
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CoerAlert, never>;
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CoerAlert, "coer-alert", never, {}, {}, never, never, false, never>;
|
23
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import * as i0 from "@angular/core";
|
2
|
+
import * as i1 from "./coer-alert/coer-alert.component";
|
3
|
+
import * as i2 from "@angular/common";
|
4
|
+
import * as i3 from "@angular/router";
|
5
|
+
import * as i4 from "@angular/forms";
|
6
|
+
export declare class ComponentsModule {
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ComponentsModule, never>;
|
8
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ComponentsModule, [typeof i1.CoerAlert], [typeof i2.CommonModule, typeof i3.RouterModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule], [typeof i1.CoerAlert]>;
|
9
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<ComponentsModule>;
|
10
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export * from './src/Breadcrumbs.class';
|
2
|
+
export * from './src/ControlValue';
|
3
|
+
export * from './src/DateTime.class';
|
4
|
+
export * from './src/Files.class';
|
5
|
+
export * from './src/Page.class';
|
6
|
+
export * from './src/Screen.class';
|
7
|
+
export * from './src/Source.class';
|
8
|
+
export * from './src/Tools';
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL1Rvb2xzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9CcmVhZGNydW1icy5jbGFzcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NvbnRyb2xWYWx1ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0RhdGVUaW1lLmNsYXNzJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvRmlsZXMuY2xhc3MnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QYWdlLmNsYXNzJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvU2NyZWVuLmNsYXNzJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvU291cmNlLmNsYXNzJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvVG9vbHMnOyJdfQ==
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { Tools } from '../';
|
2
|
+
export class Breadcrumbs {
|
3
|
+
static { this.storage = 'COER-System'; }
|
4
|
+
/** */
|
5
|
+
static Add(page, path) {
|
6
|
+
const breadcrumbs = this.Get();
|
7
|
+
const paths = breadcrumbs.map(item => item.path);
|
8
|
+
if (!paths.includes(path)) {
|
9
|
+
breadcrumbs.push({ page, path });
|
10
|
+
this.Save(breadcrumbs);
|
11
|
+
}
|
12
|
+
}
|
13
|
+
/** */
|
14
|
+
static Get() {
|
15
|
+
let storage = sessionStorage.getItem(this.storage);
|
16
|
+
if (storage) {
|
17
|
+
storage = JSON.parse(storage);
|
18
|
+
if (storage.hasOwnProperty('breadcrumbs')) {
|
19
|
+
return Tools.BreakReference(storage.breadcrumbs);
|
20
|
+
}
|
21
|
+
}
|
22
|
+
return [];
|
23
|
+
}
|
24
|
+
/** Source */
|
25
|
+
static GetFirst() {
|
26
|
+
const breadcrumbs = this.Get();
|
27
|
+
return (breadcrumbs.length > 0) ? breadcrumbs.shift() : null;
|
28
|
+
}
|
29
|
+
/** */
|
30
|
+
static Save(breadcrumbs) {
|
31
|
+
let storage = sessionStorage.getItem(this.storage);
|
32
|
+
if (storage)
|
33
|
+
storage = JSON.parse(storage);
|
34
|
+
storage = Object.assign({}, storage, { breadcrumbs });
|
35
|
+
sessionStorage.setItem(this.storage, JSON.stringify(storage));
|
36
|
+
}
|
37
|
+
/** */
|
38
|
+
static Remove(path) {
|
39
|
+
let breadcrumbs = this.Get();
|
40
|
+
const index = breadcrumbs.findIndex(x => x.path.toLowerCase().trim() === path.toLowerCase().trim());
|
41
|
+
if (index >= 0) {
|
42
|
+
breadcrumbs = Tools.BreakReference(breadcrumbs).splice(0, index + 1);
|
43
|
+
this.Save(breadcrumbs);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
/** */
|
47
|
+
static SetLast(page, path) {
|
48
|
+
const breadcrumbs = this.Get();
|
49
|
+
if (breadcrumbs.length > 0) {
|
50
|
+
breadcrumbs[breadcrumbs.length - 1] = { page, path };
|
51
|
+
this.Save(breadcrumbs);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
/** */
|
55
|
+
static RemoveLast() {
|
56
|
+
const breadcrumbs = this.Get();
|
57
|
+
if (breadcrumbs.length > 0) {
|
58
|
+
breadcrumbs.pop();
|
59
|
+
this.Save(breadcrumbs);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJlYWRjcnVtYnMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL1Rvb2xzL3NyYy9CcmVhZGNydW1icy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRTVCLE1BQU0sT0FBTyxXQUFXO2FBRUksWUFBTyxHQUFHLGFBQWEsQ0FBQztJQUVoRCxNQUFNO0lBQ0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBR0QsTUFBTTtJQUNDLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFRLENBQUM7UUFFMUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlCLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBR0QsYUFBYTtJQUNOLE1BQU0sQ0FBQyxRQUFRO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUdELE1BQU07SUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQXlCO1FBQ3hDLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBUSxDQUFDO1FBQzFELElBQUksT0FBTztZQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUdELE1BQU07SUFDQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQVk7UUFDN0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBHLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2IsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUdELE1BQU07SUFDQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUvQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUdELE1BQU07SUFDQyxNQUFNLENBQUMsVUFBVTtRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFL0IsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUFwcFNvdXJjZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1icyB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc3RvcmFnZSA9ICdDT0VSLVN5c3RlbSc7XHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEFkZChwYWdlOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gdGhpcy5HZXQoKTtcclxuICAgICAgICBjb25zdCBwYXRocyA9IGJyZWFkY3J1bWJzLm1hcChpdGVtID0+IGl0ZW0ucGF0aCk7XHJcblxyXG4gICAgICAgIGlmICghcGF0aHMuaW5jbHVkZXMocGF0aCkpIHtcclxuICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7IHBhZ2UsIHBhdGggfSk7XHJcbiAgICAgICAgICAgIHRoaXMuU2F2ZShicmVhZGNydW1icyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0KCk6IElBcHBTb3VyY2VbXSB7XHJcbiAgICAgICAgbGV0IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZSkgYXMgYW55O1xyXG5cclxuICAgICAgICBpZiAoc3RvcmFnZSkge1xyXG4gICAgICAgICAgICBzdG9yYWdlID0gSlNPTi5wYXJzZShzdG9yYWdlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlLmhhc093blByb3BlcnR5KCdicmVhZGNydW1icycpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVG9vbHMuQnJlYWtSZWZlcmVuY2Uoc3RvcmFnZS5icmVhZGNydW1icyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIFNvdXJjZSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXRGaXJzdCgpOiBJQXBwU291cmNlIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSB0aGlzLkdldCgpO1xyXG4gICAgICAgIHJldHVybiAoYnJlYWRjcnVtYnMubGVuZ3RoID4gMCkgPyBicmVhZGNydW1icy5zaGlmdCgpISA6IG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBTYXZlKGJyZWFkY3J1bWJzOiBJQXBwU291cmNlW10pOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKHN0b3JhZ2UpIHN0b3JhZ2UgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xyXG4gICAgICAgIHN0b3JhZ2UgPSBPYmplY3QuYXNzaWduKHt9LCBzdG9yYWdlLCB7IGJyZWFkY3J1bWJzIH0pO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlLCBKU09OLnN0cmluZ2lmeShzdG9yYWdlKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZW1vdmUocGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGJyZWFkY3J1bWJzID0gdGhpcy5HZXQoKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGJyZWFkY3J1bWJzLmZpbmRJbmRleCh4ID0+IHgucGF0aC50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gcGF0aC50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGJyZWFkY3J1bWJzID0gVG9vbHMuQnJlYWtSZWZlcmVuY2UoYnJlYWRjcnVtYnMpLnNwbGljZSgwLCBpbmRleCArIDEpO1xyXG4gICAgICAgICAgICB0aGlzLlNhdmUoYnJlYWRjcnVtYnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFNldExhc3QocGFnZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuR2V0KCk7XHJcblxyXG4gICAgICAgIGlmIChicmVhZGNydW1icy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGJyZWFkY3J1bWJzW2JyZWFkY3J1bWJzLmxlbmd0aCAtIDFdID0geyBwYWdlLCBwYXRoIH07XHJcbiAgICAgICAgICAgIHRoaXMuU2F2ZShicmVhZGNydW1icyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgUmVtb3ZlTGFzdCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuR2V0KCk7XHJcblxyXG4gICAgICAgIGlmIChicmVhZGNydW1icy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGJyZWFkY3J1bWJzLnBvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLlNhdmUoYnJlYWRjcnVtYnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
2
|
+
import { forwardRef } from "@angular/core";
|
3
|
+
export const CONTROL_VALUE = (component) => {
|
4
|
+
return {
|
5
|
+
provide: NG_VALUE_ACCESSOR,
|
6
|
+
useExisting: forwardRef(() => component),
|
7
|
+
multi: true
|
8
|
+
};
|
9
|
+
};
|
10
|
+
export class ControlValue {
|
11
|
+
constructor() {
|
12
|
+
this._isTouched = false;
|
13
|
+
}
|
14
|
+
get isTouched() {
|
15
|
+
return this._isTouched;
|
16
|
+
}
|
17
|
+
/** */
|
18
|
+
SetValue(value) {
|
19
|
+
if (typeof this._UpdateValue === 'function') {
|
20
|
+
this._UpdateValue(value);
|
21
|
+
}
|
22
|
+
this._value = value;
|
23
|
+
}
|
24
|
+
/** */
|
25
|
+
SetTouched(isTouched) {
|
26
|
+
if (typeof this._IsTouched === 'function') {
|
27
|
+
this._IsTouched(isTouched);
|
28
|
+
}
|
29
|
+
this._isTouched = isTouched;
|
30
|
+
}
|
31
|
+
/** */
|
32
|
+
writeValue(value) {
|
33
|
+
this._value = value;
|
34
|
+
}
|
35
|
+
/** */
|
36
|
+
registerOnChange(callback) {
|
37
|
+
this._UpdateValue = callback;
|
38
|
+
}
|
39
|
+
/** */
|
40
|
+
registerOnTouched(callback) {
|
41
|
+
this._IsTouched = callback;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbFZhbHVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29lci1lbGVtZW50cy9Ub29scy9zcmMvQ29udHJvbFZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFJLFNBQVksRUFBRSxFQUFFO0lBQzdDLE9BQU87UUFDSCxPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3hDLEtBQUssRUFBRSxJQUFJO0tBQ2QsQ0FBQTtBQUNMLENBQUMsQ0FBQTtBQUdELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBSVksZUFBVSxHQUFZLEtBQUssQ0FBQztJQThDeEMsQ0FBQztJQXpDRyxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFHRCxNQUFNO0lBQ0ksUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBRyxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUdELE1BQU07SUFDQyxVQUFVLENBQUMsU0FBa0I7UUFDaEMsSUFBRyxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUdELE1BQU07SUFDQyxVQUFVLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBR0QsTUFBTTtJQUNDLGdCQUFnQixDQUFDLFFBQWtCO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxNQUFNO0lBQ0MsaUJBQWlCLENBQUMsUUFBa0I7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGZvcndhcmRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTlRST0xfVkFMVUUgPSA8VD4oY29tcG9uZW50OiBUKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IGNvbXBvbmVudCksXHJcbiAgICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sVmFsdWUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLy9WYXJpYWJsZXNcclxuICAgIHByb3RlY3RlZCBfdmFsdWU6IGFueTtcclxuICAgIHByaXZhdGUgX2lzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIF9VcGRhdGVWYWx1ZSE6IEZ1bmN0aW9uO1xyXG4gICAgcHJpdmF0ZSBfSXNUb3VjaGVkITogRnVuY3Rpb247XHJcblxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNUb3VjaGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1RvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHJvdGVjdGVkIFNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZih0eXBlb2YgdGhpcy5fVXBkYXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fVXBkYXRlVmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqICovXHJcbiAgICBwdWJsaWMgU2V0VG91Y2hlZChpc1RvdWNoZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZih0eXBlb2YgdGhpcy5fSXNUb3VjaGVkID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX0lzVG91Y2hlZChpc1RvdWNoZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNUb3VjaGVkID0gaXNUb3VjaGVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX1VwZGF0ZVZhbHVlID0gY2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX0lzVG91Y2hlZCA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG59Il19
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import moment from "moment";
|
2
|
+
export class DateTime {
|
3
|
+
/** Get UTC Offset */
|
4
|
+
static GetUTCOffset() {
|
5
|
+
return moment().utcOffset();
|
6
|
+
}
|
7
|
+
/** Convert UTC Date to Local Zone */
|
8
|
+
static ToLocalZone(utcDate) {
|
9
|
+
return moment(utcDate).add(DateTime.GetUTCOffset(), 'minutes').format('YYYY-MM-DD HH:mm:ss');
|
10
|
+
}
|
11
|
+
/** Convert Local Zone Date to UTC */
|
12
|
+
static ToUTC(utcDate) {
|
13
|
+
return moment(utcDate).subtract(DateTime.GetUTCOffset(), 'minutes').format('YYYY-MM-DD HH:mm:ss');
|
14
|
+
}
|
15
|
+
/** DD MMM YYYY */
|
16
|
+
static GetDateFormat(date) {
|
17
|
+
if ((typeof date === 'string'))
|
18
|
+
date = date.replaceAll('/', '-');
|
19
|
+
return moment(date).parseZone().local(true).format('DD MMM YYYY');
|
20
|
+
}
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL1Rvb2xzL3NyYy9EYXRlVGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxPQUFPLFFBQVE7SUFDakIscUJBQXFCO0lBQ2QsTUFBTSxDQUFDLFlBQVk7UUFDdEIsT0FBTyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBR0QscUNBQXFDO0lBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBc0M7UUFDNUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBR0QscUNBQXFDO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBc0M7UUFDdEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBR0Qsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFtQztRQUMzRCxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWUge1xyXG4gICAgLyoqIEdldCBVVEMgT2Zmc2V0ICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldFVUQ09mZnNldCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQoKS51dGNPZmZzZXQoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIENvbnZlcnQgVVRDIERhdGUgdG8gTG9jYWwgWm9uZSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBUb0xvY2FsWm9uZSh1dGNEYXRlOiBzdHJpbmcgfCBEYXRlIHwgbW9tZW50Lk1vbWVudCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCh1dGNEYXRlKS5hZGQoRGF0ZVRpbWUuR2V0VVRDT2Zmc2V0KCksICdtaW51dGVzJykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBDb252ZXJ0IExvY2FsIFpvbmUgRGF0ZSB0byBVVEMgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgVG9VVEModXRjRGF0ZTogc3RyaW5nIHwgRGF0ZSB8IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQodXRjRGF0ZSkuc3VidHJhY3QoRGF0ZVRpbWUuR2V0VVRDT2Zmc2V0KCksICdtaW51dGVzJykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBERCBNTU0gWVlZWSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHZXREYXRlRm9ybWF0KGRhdGU6IHN0cmluZyB8IERhdGUgfCBtb21lbnQuTW9tZW50KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykpIGRhdGUgPSBkYXRlLnJlcGxhY2VBbGwoJy8nLCAnLScpO1xyXG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkucGFyc2Vab25lKCkubG9jYWwodHJ1ZSkuZm9ybWF0KCdERCBNTU0gWVlZWScpO1xyXG4gICAgfVxyXG59Il19
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import { Tools } from "../";
|
2
|
+
import * as XLSX from 'xlsx';
|
3
|
+
export class Files {
|
4
|
+
static { this.EXCEL_EXTENSIONS = ['xls', 'xlsx', 'csv']; }
|
5
|
+
/** Get Extension File */
|
6
|
+
static GetExtension(file) {
|
7
|
+
const fileName = file.name;
|
8
|
+
if (fileName.includes('.')) {
|
9
|
+
let worlds = fileName.split('.');
|
10
|
+
if (worlds.length > 0) {
|
11
|
+
let extension = worlds.pop();
|
12
|
+
extension = extension.trim().toLowerCase();
|
13
|
+
if (extension.length > 0)
|
14
|
+
return extension;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
return null;
|
18
|
+
}
|
19
|
+
/** Is Excel File */
|
20
|
+
static IsExcel(file) {
|
21
|
+
const EXTENSION = Files.GetExtension(file);
|
22
|
+
return Tools.IsNotNull(EXTENSION)
|
23
|
+
? this.EXCEL_EXTENSIONS.includes(EXTENSION)
|
24
|
+
: false;
|
25
|
+
}
|
26
|
+
/** Read excel file */
|
27
|
+
static ReadExcel(file) {
|
28
|
+
return new Promise(Resolve => {
|
29
|
+
let columns = [];
|
30
|
+
let rows = [];
|
31
|
+
const reader = new FileReader();
|
32
|
+
reader.readAsArrayBuffer(file);
|
33
|
+
reader.onload = () => {
|
34
|
+
const dataBytes = new Uint8Array(reader.result);
|
35
|
+
if (dataBytes) {
|
36
|
+
const workbook = XLSX.read(dataBytes, {});
|
37
|
+
const sheet = workbook.Sheets[workbook.SheetNames[0]];
|
38
|
+
let dataSheet = XLSX.utils.sheet_to_json(sheet, {
|
39
|
+
header: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
|
40
|
+
});
|
41
|
+
//Get Headers
|
42
|
+
for (const column in dataSheet[0]) {
|
43
|
+
columns.push(Tools.FirstCharToLower(String(dataSheet[0][column]).replaceAll(' ', '')));
|
44
|
+
}
|
45
|
+
//Get Rows
|
46
|
+
rows = XLSX.utils.sheet_to_json(sheet, { header: columns });
|
47
|
+
rows.shift();
|
48
|
+
rows = rows.map(row => {
|
49
|
+
const item = Tools.BreakReference(row);
|
50
|
+
delete item['__rowNum__'];
|
51
|
+
return item;
|
52
|
+
});
|
53
|
+
}
|
54
|
+
Resolve({ columns, rows });
|
55
|
+
};
|
56
|
+
reader.onerror = () => { Resolve({ columns, rows }); };
|
57
|
+
});
|
58
|
+
}
|
59
|
+
/** Export to excel file */
|
60
|
+
static ExportExcel(data, fileName = 'coer_report', sheetName = 'Sheet1') {
|
61
|
+
sheetName = Tools.CleanUpBlanks(sheetName);
|
62
|
+
fileName = Tools.CleanUpBlanks(fileName);
|
63
|
+
if (fileName.endsWith('.xls') || fileName.endsWith('.xlsx') || fileName.endsWith('.csv')) {
|
64
|
+
if (fileName.includes('.xls')) {
|
65
|
+
fileName = fileName.replaceAll('.xls', '.xlsx');
|
66
|
+
}
|
67
|
+
if (fileName.includes('.csv')) {
|
68
|
+
fileName = fileName.replaceAll('.csv', '.xlsx');
|
69
|
+
}
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
fileName += '.xlsx';
|
73
|
+
}
|
74
|
+
const WORK_SHEET = XLSX.utils.json_to_sheet(data);
|
75
|
+
const WORK_BOOK = XLSX.utils.book_new();
|
76
|
+
XLSX.utils.book_append_sheet(WORK_BOOK, WORK_SHEET, 'Sheet1');
|
77
|
+
XLSX.writeFile(WORK_BOOK, fileName);
|
78
|
+
}
|
79
|
+
/** Convert file to string base64 */
|
80
|
+
static ConvertToBase64(file) {
|
81
|
+
return new Promise(Resolve => {
|
82
|
+
const reader = new FileReader();
|
83
|
+
reader.readAsDataURL(file);
|
84
|
+
reader.onload = () => {
|
85
|
+
Resolve(reader.result?.toString() || '');
|
86
|
+
};
|
87
|
+
reader.onerror = () => {
|
88
|
+
Resolve('');
|
89
|
+
};
|
90
|
+
});
|
91
|
+
}
|
92
|
+
}
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZXMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2VyLWVsZW1lbnRzL1Rvb2xzL3NyYy9GaWxlcy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxLQUFLO2FBQ1MscUJBQWdCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNFLHlCQUF5QjtJQUNsQixNQUFNLENBQUMsWUFBWSxDQUFDLElBQVU7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUUzQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBYSxDQUFDO1lBRTdDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRyxDQUFDO2dCQUM5QixTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUMvQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRCxvQkFBb0I7SUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLElBQVU7UUFDNUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lB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QUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNqQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUE7WUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xzIH0gZnJvbSBcIi4uL1wiO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVzIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVhDRUxfRVhURU5TSU9OUzogc3RyaW5nW10gPSBbJ3hscycsICd4bHN4JywgJ2NzdiddO1xyXG5cclxuICAgIC8qKiBHZXQgRXh0ZW5zaW9uIEZpbGUgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0RXh0ZW5zaW9uKGZpbGU6IEZpbGUpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgICAgICAgbGV0IHdvcmxkcyA9IGZpbGVOYW1lLnNwbGl0KCcuJykgYXMgc3RyaW5nW107XHJcblxyXG4gICAgICAgICAgICBpZiAod29ybGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBleHRlbnNpb24gPSB3b3JsZHMucG9wKCkhO1xyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbi5sZW5ndGggPiAwKSByZXR1cm4gZXh0ZW5zaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIElzIEV4Y2VsIEZpbGUgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNFeGNlbChmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgRVhURU5TSU9OID0gRmlsZXMuR2V0RXh0ZW5zaW9uKGZpbGUpO1xyXG5cclxuICAgICAgICByZXR1cm4gVG9vbHMuSXNOb3ROdWxsKEVYVEVOU0lPTilcclxuICAgICAgICAgICAgPyB0aGlzLkVYQ0VMX0VYVEVOU0lPTlMuaW5jbHVkZXMoRVhURU5TSU9OISlcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIFJlYWQgZXhjZWwgZmlsZSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSZWFkRXhjZWw8VD4oZmlsZTogRmlsZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx7IGNvbHVtbnM6IHN0cmluZ1tdOyByb3dzOiBUW107IH0+KFJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgbGV0IHJvd3M6IFRbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFCeXRlcyA9IG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQgYXMgYW55KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUJ5dGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2Jvb2sgPSBYTFNYLnJlYWQoZGF0YUJ5dGVzLCB7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hlZXQgPSB3b3JrYm9vay5TaGVldHNbd29ya2Jvb2suU2hlZXROYW1lc1swXV07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFTaGVldDogYW55W10gPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBbJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWiddXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vR2V0IEhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29sdW1uIGluIGRhdGFTaGVldFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goVG9vbHMuRmlyc3RDaGFyVG9Mb3dlcihTdHJpbmcoZGF0YVNoZWV0WzBdW2NvbHVtbl0pLnJlcGxhY2VBbGwoJyAnLCAnJykpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vR2V0IFJvd3NcclxuICAgICAgICAgICAgICAgICAgICByb3dzID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7IGhlYWRlcjogY29sdW1ucyB9KTtcclxuICAgICAgICAgICAgICAgICAgICByb3dzLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJvd3MgPSByb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gVG9vbHMuQnJlYWtSZWZlcmVuY2U8YW55Pihyb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbVsnX19yb3dOdW1fXyddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBSZXNvbHZlKHsgY29sdW1ucywgcm93cyB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7IFJlc29sdmUoeyBjb2x1bW5zLCByb3dzIH0pIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIEV4cG9ydCB0byBleGNlbCBmaWxlICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEV4cG9ydEV4Y2VsPFQ+KGRhdGE6IFRbXSwgZmlsZU5hbWU6IHN0cmluZyA9ICdjb2VyX3JlcG9ydCcsIHNoZWV0TmFtZTogc3RyaW5nID0gJ1NoZWV0MScpIHtcclxuICAgICAgICBzaGVldE5hbWUgPSBUb29scy5DbGVhblVwQmxhbmtzKHNoZWV0TmFtZSk7XHJcbiAgICAgICAgZmlsZU5hbWUgPSBUb29scy5DbGVhblVwQmxhbmtzKGZpbGVOYW1lKTtcclxuXHJcbiAgICAgICAgaWYoZmlsZU5hbWUuZW5kc1dpdGgoJy54bHMnKSB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLnhsc3gnKSB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLmNzdicpKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcygnLnhscycpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2VBbGwoJy54bHMnLCAnLnhsc3gnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKCcuY3N2JykpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZUFsbCgnLmNzdicsICcueGxzeCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZmlsZU5hbWUgKz0gJy54bHN4JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IFdPUktfU0hFRVQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoZGF0YSk7XHJcbiAgICAgICAgY29uc3QgV09SS19CT09LID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgICAgIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQoV09SS19CT09LLCBXT1JLX1NIRUVULCAnU2hlZXQxJyk7XHJcbiAgICAgICAgWExTWC53cml0ZUZpbGUoV09SS19CT09LLCBmaWxlTmFtZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBDb252ZXJ0IGZpbGUgdG8gc3RyaW5nIGJhc2U2NCAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDb252ZXJ0VG9CYXNlNjQoZmlsZTogRmlsZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KFJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuXHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBSZXNvbHZlKHJlYWRlci5yZXN1bHQ/LnRvU3RyaW5nKCkgfHwgJycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFJlc29sdmUoJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
|