coer-elements 1.0.2 → 1.0.4
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/Signals/index.ts +7 -0
- package/Tools/Files.class.ts +18 -1
- package/Tools/Screen.class.ts +50 -0
- package/Tools/index.ts +87 -9
- package/index.ts +2 -1
- package/interfaces/index.ts +6 -0
- package/package.json +14 -2
package/Signals/index.ts
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
import { signal } from "@angular/core";
|
2
|
+
import { Screen } from './../Tools/Screen.class';
|
3
|
+
|
4
|
+
export const breakpoint_signal = signal<'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl'>(Screen?.BREAKPOINT || 'xs');
|
5
|
+
export const isReady_signal = signal<boolean>(false);
|
6
|
+
export const isLoading_signal = signal<boolean>(false);
|
7
|
+
export const isModalOpen_signal = signal<boolean>(false);
|
package/Tools/Files.class.ts
CHANGED
@@ -2,7 +2,7 @@ import { Tools } from ".";
|
|
2
2
|
import * as XLSX from 'xlsx';
|
3
3
|
|
4
4
|
export class Files {
|
5
|
-
|
5
|
+
public static readonly EXCEL_EXTENSIONS: string[] = ['xls', 'xlsx', 'csv'];
|
6
6
|
|
7
7
|
/** Get Extension File */
|
8
8
|
public static GetExtension(file: File): string | null {
|
@@ -99,4 +99,21 @@ export class Files {
|
|
99
99
|
XLSX.utils.book_append_sheet(WORK_BOOK, WORK_SHEET, 'Sheet1');
|
100
100
|
XLSX.writeFile(WORK_BOOK, fileName);
|
101
101
|
}
|
102
|
+
|
103
|
+
|
104
|
+
/** Convert file to string base64 */
|
105
|
+
public static ConvertToBase64(file: File) {
|
106
|
+
return new Promise<string>(Resolve => {
|
107
|
+
const reader = new FileReader();
|
108
|
+
reader.readAsDataURL(file);
|
109
|
+
|
110
|
+
reader.onload = () => {
|
111
|
+
Resolve(reader.result?.toString() || '');
|
112
|
+
}
|
113
|
+
|
114
|
+
reader.onerror = () => {
|
115
|
+
Resolve('');
|
116
|
+
}
|
117
|
+
});
|
118
|
+
}
|
102
119
|
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import { IScreenSize } from "interfaces";
|
2
|
+
import { Observable } from "rxjs";
|
3
|
+
|
4
|
+
export class Screen {
|
5
|
+
|
6
|
+
public static get WINDOW_WIDTH(): number {
|
7
|
+
return window.innerWidth;
|
8
|
+
}
|
9
|
+
|
10
|
+
|
11
|
+
public static get WINDOW_HEIGHT(): number {
|
12
|
+
return window.innerHeight;
|
13
|
+
}
|
14
|
+
|
15
|
+
|
16
|
+
public static get DEVICE_WIDTH(): number {
|
17
|
+
return window.screen.width;
|
18
|
+
}
|
19
|
+
|
20
|
+
|
21
|
+
public static get DEVICE_HEIGHT(): number {
|
22
|
+
return window.screen.height;
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
public static get BREAKPOINT(): 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' {
|
27
|
+
if (window.innerWidth < 576) return 'xs';
|
28
|
+
else if (window.innerWidth >= 576 && window.innerWidth < 768) return 'sm';
|
29
|
+
else if (window.innerWidth >= 768 && window.innerWidth < 992) return 'md';
|
30
|
+
else if (window.innerWidth >= 992 && window.innerWidth < 1200) return 'lg';
|
31
|
+
else if (window.innerWidth >= 1200 && window.innerWidth < 1400) return 'xl';
|
32
|
+
else return 'xxl';
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
/** */
|
37
|
+
public static Resize = new Observable<IScreenSize>(subscriber => {
|
38
|
+
window.addEventListener("load", () => {
|
39
|
+
window.dispatchEvent(new Event('resize'));
|
40
|
+
});
|
41
|
+
|
42
|
+
window.onresize = () => {
|
43
|
+
subscriber.next({
|
44
|
+
width: window.innerWidth,
|
45
|
+
height: window.innerHeight,
|
46
|
+
breakpoin: this.BREAKPOINT
|
47
|
+
});
|
48
|
+
}
|
49
|
+
});
|
50
|
+
}
|
package/Tools/index.ts
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
import { Guid } from "guid-typescript";
|
2
|
+
import { signal } from "@angular/core";
|
3
|
+
const reference_signal = signal<any>({});
|
2
4
|
|
3
5
|
export const Tools = {
|
4
6
|
/** Generate a Guid */
|
@@ -6,6 +8,7 @@ export const Tools = {
|
|
6
8
|
return `${seed}-${Guid.create().toString()}`;
|
7
9
|
},
|
8
10
|
|
11
|
+
|
9
12
|
/** Returns true if the value is null or undefined, false otherwise */
|
10
13
|
IsNull: (value: any): boolean => {
|
11
14
|
if (value === undefined) return true;
|
@@ -22,6 +25,15 @@ export const Tools = {
|
|
22
25
|
},
|
23
26
|
|
24
27
|
|
28
|
+
/** Returns true if the value is null or undefined or contains only whitespace, false otherwise */
|
29
|
+
IsOnlyWhiteSpace: (value: any): boolean => {
|
30
|
+
if (value === undefined) return true;
|
31
|
+
if (value === null) return true;
|
32
|
+
if((value as string).toString().trim() === '') return true;
|
33
|
+
return false;
|
34
|
+
},
|
35
|
+
|
36
|
+
|
25
37
|
/** Break reference of a object or array */
|
26
38
|
BreakReference: <T>(object: T): T => {
|
27
39
|
if (object === undefined) return undefined as T;
|
@@ -91,14 +103,11 @@ export const Tools = {
|
|
91
103
|
},
|
92
104
|
|
93
105
|
|
94
|
-
/**
|
95
|
-
* Sort an array in ascending order by property
|
96
|
-
* @returns A new array
|
97
|
-
* */
|
106
|
+
/** Sort an array in ascending order by property */
|
98
107
|
SortBy: <T>(array: T[], property: string, propertyType: 'string' | 'number' = 'string'): T[] => {
|
99
108
|
switch (propertyType) {
|
100
109
|
case 'string': {
|
101
|
-
return
|
110
|
+
return array.sort((x: any, y: any) => {
|
102
111
|
if (String(x[property]).toUpperCase().trim() < String(y[property]).toUpperCase().trim()) return -1;
|
103
112
|
else if (String(x[property]).toUpperCase().trim() > String(y[property]).toUpperCase().trim()) return 1;
|
104
113
|
else return 0;
|
@@ -112,10 +121,7 @@ export const Tools = {
|
|
112
121
|
},
|
113
122
|
|
114
123
|
|
115
|
-
/**
|
116
|
-
* Sort an array in descending order by property
|
117
|
-
* @returns A new array
|
118
|
-
* */
|
124
|
+
/** Sort an array in descending order by property */
|
119
125
|
SortByDesc: <T>(array: T[], property: string, propertyType: 'string' | 'number' = 'string'): T[] => {
|
120
126
|
switch (propertyType) {
|
121
127
|
case 'string': {
|
@@ -130,5 +136,77 @@ export const Tools = {
|
|
130
136
|
return array.sort((x: any, y: any) => Number(Number(y[property])) - x[property]);
|
131
137
|
}
|
132
138
|
}
|
139
|
+
},
|
140
|
+
|
141
|
+
|
142
|
+
/** Return a string with forman numeric */
|
143
|
+
GetNumericFormat: (value: string | number | null | undefined, decimals: number = 0): string => {
|
144
|
+
if (value == undefined
|
145
|
+
|| value == null
|
146
|
+
|| value.toString().trim() == ''
|
147
|
+
|| isNaN(Number(value))) {
|
148
|
+
return '0';
|
149
|
+
}
|
150
|
+
|
151
|
+
let valueInteger = '';
|
152
|
+
let valueDecimal = '';
|
153
|
+
value = value.toString().replaceAll(' ', '');
|
154
|
+
|
155
|
+
if (value.includes('.') || (decimals > 0)) {
|
156
|
+
valueInteger = value.includes('.') ? value.split('.')[0] : value;
|
157
|
+
|
158
|
+
if (decimals > 0) {
|
159
|
+
const PADDING = decimals - valueDecimal.length;
|
160
|
+
valueDecimal = value.includes('.') ? value.split('.')[1] : '';
|
161
|
+
for(let i = 0; i < PADDING; i++) valueDecimal += '0';
|
162
|
+
valueDecimal = valueDecimal.substring(0, decimals);
|
163
|
+
valueDecimal = `.${valueDecimal}`;
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
167
|
+
else {
|
168
|
+
valueInteger = value;
|
169
|
+
}
|
170
|
+
|
171
|
+
let counter = 0;
|
172
|
+
const VALUE_INTEGER_ARRAY: string[] = [];
|
173
|
+
for(const char of valueInteger.split('').reverse()) {
|
174
|
+
if (counter == 3) {
|
175
|
+
VALUE_INTEGER_ARRAY.push(',');
|
176
|
+
counter = 0;
|
177
|
+
}
|
178
|
+
|
179
|
+
VALUE_INTEGER_ARRAY.push(char);
|
180
|
+
++counter;
|
181
|
+
}
|
182
|
+
|
183
|
+
valueInteger = VALUE_INTEGER_ARRAY.reverse().join('');
|
184
|
+
return `${valueInteger}${valueDecimal}`;
|
185
|
+
},
|
186
|
+
|
187
|
+
|
188
|
+
/** Wait the time indicated */
|
189
|
+
Sleep: (milliseconds: number = 0, reference: string | null = null) => {
|
190
|
+
if (Tools.IsNull(reference)) {
|
191
|
+
return new Promise(Resolve => setTimeout(Resolve, milliseconds));
|
192
|
+
}
|
193
|
+
|
194
|
+
else return new Promise<void>(Resolve => {
|
195
|
+
reference = reference!.replaceAll(' ', '_').toLowerCase();
|
196
|
+
|
197
|
+
if (reference_signal().hasOwnProperty(reference)) {
|
198
|
+
clearInterval(reference_signal()[reference!]);
|
199
|
+
}
|
200
|
+
|
201
|
+
reference_signal.set(Object.assign(reference_signal(), {
|
202
|
+
[reference!]: setTimeout(() => {
|
203
|
+
Resolve();
|
204
|
+
clearInterval(reference_signal()[reference!]);
|
205
|
+
const _reference = { ...reference_signal() };
|
206
|
+
delete _reference[reference!];
|
207
|
+
reference_signal.set({ ..._reference });
|
208
|
+
}, milliseconds)
|
209
|
+
}));
|
210
|
+
});
|
133
211
|
}
|
134
212
|
};
|
package/index.ts
CHANGED
package/interfaces/index.ts
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "coer-elements",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.4",
|
4
4
|
"author": "Christian Omar Escamilla Rodríguez",
|
5
5
|
"keywords": [
|
6
6
|
"coer",
|
@@ -19,14 +19,26 @@
|
|
19
19
|
"build-browser": "tsc index.ts --outDir dist_browser --module ES6",
|
20
20
|
"build-node": "tsc index.ts --outDir dist_node",
|
21
21
|
"build": "npm run build-browser & npm run build-node",
|
22
|
-
"
|
22
|
+
"push": "npm publish --access public"
|
23
23
|
},
|
24
24
|
"dependencies": {
|
25
|
+
"@angular/animations": "^17.3.0",
|
26
|
+
"@angular/cdk": "^17.3.3",
|
27
|
+
"@angular/common": "^17.3.0",
|
28
|
+
"@angular/compiler": "^17.3.0",
|
29
|
+
"@angular/core": "^17.3.0",
|
30
|
+
"@angular/forms": "^17.3.0",
|
31
|
+
"@angular/material": "^17.3.3",
|
32
|
+
"@angular/platform-browser": "^17.3.0",
|
33
|
+
"@angular/platform-browser-dynamic": "^17.3.0",
|
34
|
+
"@angular/router": "^17.3.0",
|
25
35
|
"guid-typescript": "^1.0.9",
|
26
36
|
"moment": "^2.30.1",
|
37
|
+
"rxjs": "^7.8.1",
|
27
38
|
"xlsx": "^0.18.5"
|
28
39
|
},
|
29
40
|
"devDependencies": {
|
41
|
+
"@types/xlsx": "^0.0.36",
|
30
42
|
"typescript": "^5.5.4"
|
31
43
|
}
|
32
44
|
}
|