@acorex/core 7.1.0 → 7.1.1

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.
Files changed (123) hide show
  1. package/config/index.d.ts +5 -5
  2. package/config/public-api.d.ts +1 -1
  3. package/config/src/configs.d.ts +9 -9
  4. package/dateTime/index.d.ts +5 -5
  5. package/dateTime/public-api.d.ts +5 -5
  6. package/dateTime/src/datetime.class.d.ts +100 -100
  7. package/dateTime/src/datetime.module.d.ts +8 -8
  8. package/dateTime/src/datetime.pipe.d.ts +8 -8
  9. package/dateTime/src/georgian.calendar.d.ts +20 -20
  10. package/dateTime/src/jalali.calendar.d.ts +35 -35
  11. package/esm2022/acorex-core.mjs +4 -4
  12. package/esm2022/config/acorex-core-config.mjs +4 -4
  13. package/esm2022/config/public-api.mjs +1 -1
  14. package/esm2022/config/src/configs.mjs +25 -24
  15. package/esm2022/dateTime/acorex-core-dateTime.mjs +4 -4
  16. package/esm2022/dateTime/public-api.mjs +5 -5
  17. package/esm2022/dateTime/src/datetime.class.mjs +294 -294
  18. package/esm2022/dateTime/src/datetime.module.mjs +40 -39
  19. package/esm2022/dateTime/src/datetime.pipe.mjs +27 -26
  20. package/esm2022/dateTime/src/georgian.calendar.mjs +186 -186
  21. package/esm2022/dateTime/src/jalali.calendar.mjs +356 -356
  22. package/esm2022/events/acorex-core-events.mjs +4 -4
  23. package/esm2022/events/public-api.mjs +1 -1
  24. package/esm2022/events/src/event.service.mjs +35 -34
  25. package/esm2022/file/acorex-core-file.mjs +4 -4
  26. package/esm2022/file/public-api.mjs +4 -4
  27. package/esm2022/file/src/file-download-ref.class.mjs +12 -12
  28. package/esm2022/file/src/file-download-result.class.mjs +46 -46
  29. package/esm2022/file/src/file-upload-ref.class.mjs +12 -12
  30. package/esm2022/file/src/file.service.mjs +103 -102
  31. package/esm2022/http/acorex-core-http.mjs +4 -4
  32. package/esm2022/http/public-api.mjs +5 -5
  33. package/esm2022/http/src/http-error.class.mjs +1 -1
  34. package/esm2022/http/src/http-events.interceptor.mjs +2 -2
  35. package/esm2022/http/src/http-request.class.mjs +1 -1
  36. package/esm2022/http/src/http-result.class.mjs +24 -24
  37. package/esm2022/http/src/http.module.mjs +30 -29
  38. package/esm2022/http/src/http.service.mjs +152 -151
  39. package/esm2022/image/acorex-core-image.mjs +4 -4
  40. package/esm2022/image/public-api.mjs +1 -1
  41. package/esm2022/image/src/image.service.mjs +44 -43
  42. package/esm2022/pipes/acorex-core-pipes.mjs +4 -4
  43. package/esm2022/pipes/public-api.mjs +2 -2
  44. package/esm2022/pipes/src/pipes.module.mjs +20 -19
  45. package/esm2022/pipes/src/safe.pipe.mjs +32 -31
  46. package/esm2022/platform/acorex-core-platform.mjs +4 -4
  47. package/esm2022/platform/public-api.mjs +1 -1
  48. package/esm2022/platform/src/platform.service.mjs +152 -159
  49. package/esm2022/public-api.mjs +4 -4
  50. package/esm2022/translation/acorex-core-translation.mjs +4 -4
  51. package/esm2022/translation/public-api.mjs +3 -3
  52. package/esm2022/translation/src/translation.module.mjs +19 -18
  53. package/esm2022/translation/src/translator.mjs +44 -43
  54. package/esm2022/translation/src/translator.pipe.mjs +16 -15
  55. package/esm2022/utils/acorex-core-utils.mjs +4 -4
  56. package/esm2022/utils/public-api.mjs +5 -5
  57. package/esm2022/utils/src/color-util.mjs +114 -114
  58. package/esm2022/utils/src/drawing-util.mjs +29 -29
  59. package/esm2022/utils/src/html-util.mjs +15 -15
  60. package/esm2022/utils/src/object-util.mjs +38 -38
  61. package/esm2022/utils/src/string-util.mjs +18 -18
  62. package/events/index.d.ts +5 -5
  63. package/events/public-api.d.ts +1 -1
  64. package/events/src/event.service.d.ts +9 -9
  65. package/fesm2022/acorex-core-config.mjs +22 -22
  66. package/fesm2022/acorex-core-config.mjs.map +1 -1
  67. package/fesm2022/acorex-core-dateTime.mjs +882 -882
  68. package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
  69. package/fesm2022/acorex-core-events.mjs +32 -32
  70. package/fesm2022/acorex-core-events.mjs.map +1 -1
  71. package/fesm2022/acorex-core-file.mjs +162 -162
  72. package/fesm2022/acorex-core-file.mjs.map +1 -1
  73. package/fesm2022/acorex-core-http.mjs +190 -190
  74. package/fesm2022/acorex-core-http.mjs.map +1 -1
  75. package/fesm2022/acorex-core-image.mjs +41 -41
  76. package/fesm2022/acorex-core-image.mjs.map +1 -1
  77. package/fesm2022/acorex-core-pipes.mjs +41 -41
  78. package/fesm2022/acorex-core-pipes.mjs.map +1 -1
  79. package/fesm2022/acorex-core-platform.mjs +147 -155
  80. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  81. package/fesm2022/acorex-core-translation.mjs +63 -63
  82. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  83. package/fesm2022/acorex-core-utils.mjs +209 -209
  84. package/fesm2022/acorex-core.mjs +5 -5
  85. package/file/index.d.ts +5 -5
  86. package/file/public-api.d.ts +4 -4
  87. package/file/src/file-download-ref.class.d.ts +6 -6
  88. package/file/src/file-download-result.class.d.ts +8 -8
  89. package/file/src/file-upload-ref.class.d.ts +5 -5
  90. package/file/src/file.service.d.ts +18 -18
  91. package/http/index.d.ts +5 -5
  92. package/http/public-api.d.ts +5 -5
  93. package/http/src/http-error.class.d.ts +7 -7
  94. package/http/src/http-events.interceptor.d.ts +10 -10
  95. package/http/src/http-request.class.d.ts +14 -14
  96. package/http/src/http-result.class.d.ts +11 -11
  97. package/http/src/http.module.d.ts +8 -8
  98. package/http/src/http.service.d.ts +23 -23
  99. package/image/index.d.ts +5 -5
  100. package/image/public-api.d.ts +1 -1
  101. package/image/src/image.service.d.ts +12 -12
  102. package/index.d.ts +5 -5
  103. package/package.json +7 -7
  104. package/pipes/index.d.ts +5 -5
  105. package/pipes/public-api.d.ts +2 -2
  106. package/pipes/src/pipes.module.d.ts +8 -8
  107. package/pipes/src/safe.pipe.d.ts +10 -10
  108. package/platform/index.d.ts +5 -5
  109. package/platform/public-api.d.ts +1 -1
  110. package/platform/src/platform.service.d.ts +26 -26
  111. package/public-api.d.ts +1 -1
  112. package/translation/index.d.ts +5 -5
  113. package/translation/public-api.d.ts +3 -3
  114. package/translation/src/translation.module.d.ts +7 -7
  115. package/translation/src/translator.d.ts +11 -11
  116. package/translation/src/translator.pipe.d.ts +7 -7
  117. package/utils/index.d.ts +5 -5
  118. package/utils/public-api.d.ts +5 -5
  119. package/utils/src/color-util.d.ts +23 -23
  120. package/utils/src/drawing-util.d.ts +18 -18
  121. package/utils/src/html-util.d.ts +4 -4
  122. package/utils/src/object-util.d.ts +4 -4
  123. package/utils/src/string-util.d.ts +6 -6
@@ -3,176 +3,176 @@ import { Injectable } from '@angular/core';
3
3
  import { Observable } from 'rxjs';
4
4
  import * as i1 from '@angular/common/http';
5
5
 
6
- class AXFileDownloadRef extends Promise {
7
- abortMethod;
8
- constructor(executor) {
9
- super(executor);
10
- }
11
- //abort the operation
12
- abort() {
13
- if (this.abortMethod) {
14
- this.abortMethod();
15
- }
16
- }
6
+ class AXFileDownloadRef extends Promise {
7
+ abortMethod;
8
+ constructor(executor) {
9
+ super(executor);
10
+ }
11
+ //abort the operation
12
+ abort() {
13
+ if (this.abortMethod) {
14
+ this.abortMethod();
15
+ }
16
+ }
17
17
  }
18
18
 
19
- class AXFileDownloadResult {
20
- _response;
21
- constructor(response) {
22
- this._response = response;
23
- }
24
- save(filename) {
25
- this._defaultBrowserDownload(filename);
26
- return Promise.resolve();
27
- // else {
28
- // return new Promise((resolve, reject) => {
29
- // const button = document.createElement("button");
30
- // button.addEventListener('click', async () => {
31
- // button.remove();
32
- // const opts = {
33
- // types: [{
34
- // description: 'Save File',
35
- // suggestedName: filename
36
- // // accept: {'text/plain': ['.txt']},
37
- // }],
38
- // };
39
- // const result = await window['showSaveFilePicker'](opts);
40
- // console.log(result);
41
- // resolve();
42
- // });
43
- // button.click();
44
- // });
45
- // }
46
- }
47
- blob() {
48
- return this._response;
49
- }
50
- base64() {
51
- return new Promise((resolve, reject) => {
52
- var reader = new window.FileReader();
53
- reader.onloadend = () => resolve(reader.result);
54
- reader.onerror = e => reject(e);
55
- reader.readAsDataURL(this._response);
56
- });
57
- }
58
- _defaultBrowserDownload(filename = 'download') {
59
- const link = document.createElement('a');
60
- link.href = URL.createObjectURL(this._response);
61
- link.download = filename;
62
- link.click();
63
- }
19
+ class AXFileDownloadResult {
20
+ _response;
21
+ constructor(response) {
22
+ this._response = response;
23
+ }
24
+ save(filename) {
25
+ this._defaultBrowserDownload(filename);
26
+ return Promise.resolve();
27
+ // else {
28
+ // return new Promise((resolve, reject) => {
29
+ // const button = document.createElement("button");
30
+ // button.addEventListener('click', async () => {
31
+ // button.remove();
32
+ // const opts = {
33
+ // types: [{
34
+ // description: 'Save File',
35
+ // suggestedName: filename
36
+ // // accept: {'text/plain': ['.txt']},
37
+ // }],
38
+ // };
39
+ // const result = await window['showSaveFilePicker'](opts);
40
+ // console.log(result);
41
+ // resolve();
42
+ // });
43
+ // button.click();
44
+ // });
45
+ // }
46
+ }
47
+ blob() {
48
+ return this._response;
49
+ }
50
+ base64() {
51
+ return new Promise((resolve, reject) => {
52
+ var reader = new window.FileReader();
53
+ reader.onloadend = () => resolve(reader.result);
54
+ reader.onerror = e => reject(e);
55
+ reader.readAsDataURL(this._response);
56
+ });
57
+ }
58
+ _defaultBrowserDownload(filename = 'download') {
59
+ const link = document.createElement('a');
60
+ link.href = URL.createObjectURL(this._response);
61
+ link.download = filename;
62
+ link.click();
63
+ }
64
64
  }
65
65
 
66
- class AXFileUploadRef extends Promise {
67
- abortMethod;
68
- constructor(executor) {
69
- super(executor);
70
- }
71
- //abort the operation
72
- abort() {
73
- if (this.abortMethod) {
74
- this.abortMethod();
75
- }
76
- }
66
+ class AXFileUploadRef extends Promise {
67
+ abortMethod;
68
+ constructor(executor) {
69
+ super(executor);
70
+ }
71
+ //abort the operation
72
+ abort() {
73
+ if (this.abortMethod) {
74
+ this.abortMethod();
75
+ }
76
+ }
77
77
  }
78
78
 
79
- class AXFileService {
80
- _httpClient;
81
- constructor(_httpClient) {
82
- this._httpClient = _httpClient;
83
- }
84
- download(request) {
85
- let s;
86
- const promiseFunc = (resolve, reject) => {
87
- //TODO: add custome http request
88
- //const headers = new HttpHeaders().set('authorization','Bearer '+token);
89
- let b;
90
- if (typeof request === 'string') {
91
- b = this._httpClient.get(request, { responseType: 'blob' });
92
- }
93
- else if (b instanceof (Observable)) {
94
- b = request;
95
- }
96
- s = b?.subscribe({
97
- next: (v) => resolve(new AXFileDownloadResult(v)),
98
- error: (e) => reject(e)
99
- });
100
- };
101
- const a = new AXFileDownloadRef(promiseFunc);
102
- a.abort = () => {
103
- s?.unsubscribe();
104
- };
105
- return a;
106
- }
107
- upload(url, files) {
108
- let s;
109
- let formData = new FormData();
110
- files.forEach(f => {
111
- formData.append("files", f);
112
- });
113
- const promiseFunc = (resolve, reject) => {
114
- let b;
115
- b = this._httpClient.post(url, formData);
116
- s = b?.subscribe({
117
- next: (v) => resolve(v),
118
- error: (e) => reject(e)
119
- });
120
- };
121
- const a = new AXFileUploadRef(promiseFunc);
122
- a.abort = () => {
123
- s?.unsubscribe();
124
- };
125
- return a;
126
- }
127
- choose(options) {
128
- return new Promise((resolve, reject) => {
129
- options = Object.assign({ multiple: false }, options);
130
- const input = document.createElement("input");
131
- input.style.display = 'none';
132
- document.body.appendChild(input);
133
- input.type = 'file';
134
- input.accept = options.accept;
135
- input.multiple = options.multiple;
136
- //
137
- const onError = (e) => {
138
- reject(e);
139
- document.body.removeChild(input);
140
- input.remove();
141
- input.removeEventListener('change', onChange);
142
- input.removeEventListener('error', onError);
143
- };
144
- //
145
- const onChange = () => {
146
- resolve(Array.from(input.files));
147
- document.body.removeChild(input);
148
- input.remove();
149
- input.removeEventListener('change', onChange);
150
- input.removeEventListener('error', onError);
151
- };
152
- //
153
- input.addEventListener('change', onChange);
154
- input.addEventListener('error', onError);
155
- input.click();
156
- });
157
- }
158
- blobToBase64 = (blob) => new Promise((resolve, reject) => {
159
- const reader = new FileReader;
160
- reader.onerror = reject;
161
- reader.onload = () => {
162
- resolve(reader.result);
163
- };
164
- reader.readAsDataURL(blob);
165
- });
166
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
167
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, providedIn: 'root' });
168
- }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, decorators: [{
170
- type: Injectable,
171
- args: [{ providedIn: 'root' }]
79
+ class AXFileService {
80
+ _httpClient;
81
+ constructor(_httpClient) {
82
+ this._httpClient = _httpClient;
83
+ }
84
+ download(request) {
85
+ let s;
86
+ const promiseFunc = (resolve, reject) => {
87
+ //TODO: add custome http request
88
+ //const headers = new HttpHeaders().set('authorization','Bearer '+token);
89
+ let b;
90
+ if (typeof request === 'string') {
91
+ b = this._httpClient.get(request, { responseType: 'blob' });
92
+ }
93
+ else if (b instanceof (Observable)) {
94
+ b = request;
95
+ }
96
+ s = b?.subscribe({
97
+ next: (v) => resolve(new AXFileDownloadResult(v)),
98
+ error: (e) => reject(e)
99
+ });
100
+ };
101
+ const a = new AXFileDownloadRef(promiseFunc);
102
+ a.abort = () => {
103
+ s?.unsubscribe();
104
+ };
105
+ return a;
106
+ }
107
+ upload(url, files) {
108
+ let s;
109
+ let formData = new FormData();
110
+ files.forEach(f => {
111
+ formData.append("files", f);
112
+ });
113
+ const promiseFunc = (resolve, reject) => {
114
+ let b;
115
+ b = this._httpClient.post(url, formData);
116
+ s = b?.subscribe({
117
+ next: (v) => resolve(v),
118
+ error: (e) => reject(e)
119
+ });
120
+ };
121
+ const a = new AXFileUploadRef(promiseFunc);
122
+ a.abort = () => {
123
+ s?.unsubscribe();
124
+ };
125
+ return a;
126
+ }
127
+ choose(options) {
128
+ return new Promise((resolve, reject) => {
129
+ options = Object.assign({ multiple: false }, options);
130
+ const input = document.createElement("input");
131
+ input.style.display = 'none';
132
+ document.body.appendChild(input);
133
+ input.type = 'file';
134
+ input.accept = options.accept;
135
+ input.multiple = options.multiple;
136
+ //
137
+ const onError = (e) => {
138
+ reject(e);
139
+ document.body.removeChild(input);
140
+ input.remove();
141
+ input.removeEventListener('change', onChange);
142
+ input.removeEventListener('error', onError);
143
+ };
144
+ //
145
+ const onChange = () => {
146
+ resolve(Array.from(input.files));
147
+ document.body.removeChild(input);
148
+ input.remove();
149
+ input.removeEventListener('change', onChange);
150
+ input.removeEventListener('error', onError);
151
+ };
152
+ //
153
+ input.addEventListener('change', onChange);
154
+ input.addEventListener('error', onError);
155
+ input.click();
156
+ });
157
+ }
158
+ blobToBase64 = (blob) => new Promise((resolve, reject) => {
159
+ const reader = new FileReader;
160
+ reader.onerror = reject;
161
+ reader.onload = () => {
162
+ resolve(reader.result);
163
+ };
164
+ reader.readAsDataURL(blob);
165
+ });
166
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
167
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, providedIn: 'root' });
168
+ }
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXFileService, decorators: [{
170
+ type: Injectable,
171
+ args: [{ providedIn: 'root' }]
172
172
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
173
173
 
174
- /**
175
- * Generated bundle index. Do not edit.
174
+ /**
175
+ * Generated bundle index. Do not edit.
176
176
  */
177
177
 
178
178
  export { AXFileDownloadRef, AXFileDownloadResult, AXFileService, AXFileUploadRef };
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-file.mjs","sources":["../../../../projects/acorex/core/file/src/file-download-ref.class.ts","../../../../projects/acorex/core/file/src/file-download-result.class.ts","../../../../projects/acorex/core/file/src/file-upload-ref.class.ts","../../../../projects/acorex/core/file/src/file.service.ts","../../../../projects/acorex/core/file/acorex-core-file.ts"],"sourcesContent":["import { AXFileDownloadResult } from \"./file-download-result.class\";\r\n\r\nexport class AXFileDownloadRef extends Promise<AXFileDownloadResult>\r\n{\r\n public abortMethod: () => void;\r\n constructor(executor: (resolve: (value?: PromiseLike<AXFileDownloadResult>) => void, reject: (reason?: any) => void) => void) {\r\n super(executor);\r\n\r\n }\r\n //abort the operation\r\n public abort() {\r\n if (this.abortMethod) {\r\n this.abortMethod();\r\n }\r\n }\r\n}","export class AXFileDownloadResult {\r\n _response: Blob;\r\n\r\n constructor(response: Blob) {\r\n this._response = response;\r\n }\r\n\r\n save(filename?: string): Promise<void> {\r\n this._defaultBrowserDownload(filename);\r\n return Promise.resolve();\r\n // else {\r\n // return new Promise((resolve, reject) => {\r\n // const button = document.createElement(\"button\");\r\n // button.addEventListener('click', async () => {\r\n // button.remove();\r\n // const opts = {\r\n // types: [{\r\n // description: 'Save File',\r\n // suggestedName: filename\r\n // // accept: {'text/plain': ['.txt']},\r\n // }],\r\n // };\r\n // const result = await window['showSaveFilePicker'](opts);\r\n // console.log(result);\r\n\r\n // resolve();\r\n // });\r\n // button.click();\r\n // });\r\n\r\n // }\r\n }\r\n\r\n blob() {\r\n return this._response;\r\n }\r\n\r\n base64(): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n var reader = new window.FileReader();\r\n reader.onloadend = () => resolve(reader.result as string);\r\n reader.onerror = e => reject(e);\r\n reader.readAsDataURL(this._response);\r\n });\r\n }\r\n\r\n private _defaultBrowserDownload(filename: string = 'download') {\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(this._response);\r\n link.download = filename;\r\n link.click();\r\n }\r\n}\r\n","export class AXFileUploadRef<T = any> extends Promise<T>\r\n{\r\n public abortMethod: () => void;\r\n constructor(executor: (resolve: (value?: PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {\r\n super(executor);\r\n\r\n }\r\n //abort the operation\r\n public abort() {\r\n if (this.abortMethod) {\r\n this.abortMethod();\r\n }\r\n }\r\n}","import { HttpClient, HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { AXFileDownloadRef } from './file-download-ref.class';\r\nimport { AXFileDownloadResult } from './file-download-result.class';\r\nimport { AXFileUploadRef } from './file-upload-ref.class';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AXFileService {\r\n constructor(private _httpClient: HttpClient) { }\r\n\r\n public download(request: string | Observable<Blob>): AXFileDownloadRef {\r\n let s: Subscription;\r\n const promiseFunc = (resolve, reject) => {\r\n //TODO: add custome http request\r\n //const headers = new HttpHeaders().set('authorization','Bearer '+token);\r\n let b: Observable<Blob>;\r\n if (typeof request === 'string') {\r\n b = this._httpClient.get(request, { responseType: 'blob' });\r\n }\r\n else if (b instanceof Observable<Blob>) {\r\n b = request;\r\n }\r\n s = b?.subscribe({\r\n next: (v) => resolve(new AXFileDownloadResult(v)),\r\n error: (e) => reject(e)\r\n })\r\n };\r\n\r\n const a = new AXFileDownloadRef(promiseFunc);\r\n a.abort = () => {\r\n s?.unsubscribe();\r\n };\r\n\r\n return a;\r\n }\r\n\r\n public upload<T = any>(url: string, files: File[]): AXFileUploadRef<T> {\r\n let s: Subscription;\r\n let formData = new FormData();\r\n files.forEach(f => {\r\n formData.append(\"files\", f);\r\n })\r\n const promiseFunc = (resolve, reject) => {\r\n let b: Observable<T>;\r\n b = this._httpClient.post<T>(url, formData);\r\n\r\n s = b?.subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => reject(e)\r\n })\r\n };\r\n\r\n const a = new AXFileUploadRef(promiseFunc);\r\n a.abort = () => {\r\n s?.unsubscribe();\r\n };\r\n return a;\r\n }\r\n\r\n public choose(options?: { accept?: string, multiple?: boolean }): Promise<File[]> {\r\n return new Promise<File[]>((resolve, reject) => {\r\n options = Object.assign({ multiple: false }, options);\r\n const input = document.createElement(\"input\");\r\n input.style.display = 'none';\r\n document.body.appendChild(input);\r\n input.type = 'file';\r\n input.accept = options.accept;\r\n input.multiple = options.multiple;\r\n //\r\n const onError = (e) => {\r\n reject(e);\r\n document.body.removeChild(input)\r\n input.remove();\r\n input.removeEventListener('change', onChange);\r\n input.removeEventListener('error', onError);\r\n }\r\n //\r\n const onChange = () => {\r\n resolve(Array.from(input.files));\r\n document.body.removeChild(input)\r\n input.remove();\r\n input.removeEventListener('change', onChange);\r\n input.removeEventListener('error', onError);\r\n }\r\n //\r\n input.addEventListener('change', onChange);\r\n input.addEventListener('error', onError);\r\n input.click();\r\n });\r\n }\r\n\r\n blobToBase64 = (blob: Blob) => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader;\r\n reader.onerror = reject;\r\n reader.onload = () => {\r\n resolve(reader.result as string);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-file.mjs","sources":["../../../../projects/acorex/core/file/src/file-download-ref.class.ts","../../../../projects/acorex/core/file/src/file-download-result.class.ts","../../../../projects/acorex/core/file/src/file-upload-ref.class.ts","../../../../projects/acorex/core/file/src/file.service.ts","../../../../projects/acorex/core/file/acorex-core-file.ts"],"sourcesContent":["import { AXFileDownloadResult } from \"./file-download-result.class\";\r\n\r\nexport class AXFileDownloadRef extends Promise<AXFileDownloadResult>\r\n{\r\n public abortMethod: () => void;\r\n constructor(executor: (resolve: (value?: PromiseLike<AXFileDownloadResult>) => void, reject: (reason?: any) => void) => void) {\r\n super(executor);\r\n\r\n }\r\n //abort the operation\r\n public abort() {\r\n if (this.abortMethod) {\r\n this.abortMethod();\r\n }\r\n }\r\n}","export class AXFileDownloadResult {\r\n _response: Blob;\r\n\r\n constructor(response: Blob) {\r\n this._response = response;\r\n }\r\n\r\n save(filename?: string): Promise<void> {\r\n this._defaultBrowserDownload(filename);\r\n return Promise.resolve();\r\n // else {\r\n // return new Promise((resolve, reject) => {\r\n // const button = document.createElement(\"button\");\r\n // button.addEventListener('click', async () => {\r\n // button.remove();\r\n // const opts = {\r\n // types: [{\r\n // description: 'Save File',\r\n // suggestedName: filename\r\n // // accept: {'text/plain': ['.txt']},\r\n // }],\r\n // };\r\n // const result = await window['showSaveFilePicker'](opts);\r\n // console.log(result);\r\n\r\n // resolve();\r\n // });\r\n // button.click();\r\n // });\r\n\r\n // }\r\n }\r\n\r\n blob() {\r\n return this._response;\r\n }\r\n\r\n base64(): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n var reader = new window.FileReader();\r\n reader.onloadend = () => resolve(reader.result as string);\r\n reader.onerror = e => reject(e);\r\n reader.readAsDataURL(this._response);\r\n });\r\n }\r\n\r\n private _defaultBrowserDownload(filename: string = 'download') {\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(this._response);\r\n link.download = filename;\r\n link.click();\r\n }\r\n}\r\n","export class AXFileUploadRef<T = any> extends Promise<T>\r\n{\r\n public abortMethod: () => void;\r\n constructor(executor: (resolve: (value?: PromiseLike<T>) => void, reject: (reason?: any) => void) => void) {\r\n super(executor);\r\n\r\n }\r\n //abort the operation\r\n public abort() {\r\n if (this.abortMethod) {\r\n this.abortMethod();\r\n }\r\n }\r\n}","import { HttpClient, HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { AXFileDownloadRef } from './file-download-ref.class';\r\nimport { AXFileDownloadResult } from './file-download-result.class';\r\nimport { AXFileUploadRef } from './file-upload-ref.class';\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AXFileService {\r\n constructor(private _httpClient: HttpClient) { }\r\n\r\n public download(request: string | Observable<Blob>): AXFileDownloadRef {\r\n let s: Subscription;\r\n const promiseFunc = (resolve, reject) => {\r\n //TODO: add custome http request\r\n //const headers = new HttpHeaders().set('authorization','Bearer '+token);\r\n let b: Observable<Blob>;\r\n if (typeof request === 'string') {\r\n b = this._httpClient.get(request, { responseType: 'blob' });\r\n }\r\n else if (b instanceof Observable<Blob>) {\r\n b = request;\r\n }\r\n s = b?.subscribe({\r\n next: (v) => resolve(new AXFileDownloadResult(v)),\r\n error: (e) => reject(e)\r\n })\r\n };\r\n\r\n const a = new AXFileDownloadRef(promiseFunc);\r\n a.abort = () => {\r\n s?.unsubscribe();\r\n };\r\n\r\n return a;\r\n }\r\n\r\n public upload<T = any>(url: string, files: File[]): AXFileUploadRef<T> {\r\n let s: Subscription;\r\n let formData = new FormData();\r\n files.forEach(f => {\r\n formData.append(\"files\", f);\r\n })\r\n const promiseFunc = (resolve, reject) => {\r\n let b: Observable<T>;\r\n b = this._httpClient.post<T>(url, formData);\r\n\r\n s = b?.subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => reject(e)\r\n })\r\n };\r\n\r\n const a = new AXFileUploadRef(promiseFunc);\r\n a.abort = () => {\r\n s?.unsubscribe();\r\n };\r\n return a;\r\n }\r\n\r\n public choose(options?: { accept?: string, multiple?: boolean }): Promise<File[]> {\r\n return new Promise<File[]>((resolve, reject) => {\r\n options = Object.assign({ multiple: false }, options);\r\n const input = document.createElement(\"input\");\r\n input.style.display = 'none';\r\n document.body.appendChild(input);\r\n input.type = 'file';\r\n input.accept = options.accept;\r\n input.multiple = options.multiple;\r\n //\r\n const onError = (e) => {\r\n reject(e);\r\n document.body.removeChild(input)\r\n input.remove();\r\n input.removeEventListener('change', onChange);\r\n input.removeEventListener('error', onError);\r\n }\r\n //\r\n const onChange = () => {\r\n resolve(Array.from(input.files));\r\n document.body.removeChild(input)\r\n input.remove();\r\n input.removeEventListener('change', onChange);\r\n input.removeEventListener('error', onError);\r\n }\r\n //\r\n input.addEventListener('change', onChange);\r\n input.addEventListener('error', onError);\r\n input.click();\r\n });\r\n }\r\n\r\n blobToBase64 = (blob: Blob) => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader;\r\n reader.onerror = reject;\r\n reader.onload = () => {\r\n resolve(reader.result as string);\r\n };\r\n reader.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEM,MAAO,iBAAkB,SAAQ,OAA6B,CAAA;AAEzD,IAAA,WAAW,CAAa;AAC/B,IAAA,WAAA,CAAY,QAAgH,EAAA;QACxH,KAAK,CAAC,QAAQ,CAAC,CAAC;KAEnB;;IAEM,KAAK,GAAA;QACR,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,SAAA;KACJ;AACJ;;MCfY,oBAAoB,CAAA;AAC/B,IAAA,SAAS,CAAO;AAEhB,IAAA,WAAA,CAAY,QAAc,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;KAC3B;AAED,IAAA,IAAI,CAAC,QAAiB,EAAA;AACpB,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;KAsB1B;IAED,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,MAAM,GAAA;QACJ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AACrC,YAAA,MAAM,CAAC,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAEO,uBAAuB,CAAC,WAAmB,UAAU,EAAA;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;AACF;;ACpDK,MAAO,eAAyB,SAAQ,OAAU,CAAA;AAE7C,IAAA,WAAW,CAAa;AAC/B,IAAA,WAAA,CAAY,QAA6F,EAAA;QACrG,KAAK,CAAC,QAAQ,CAAC,CAAC;KAEnB;;IAEM,KAAK,GAAA;QACR,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,SAAA;KACJ;AACJ;;ACLD,MACa,aAAa,CAAA;AACF,IAAA,WAAA,CAAA;AAApB,IAAA,WAAA,CAAoB,WAAuB,EAAA;QAAvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;KAAK;AAEzC,IAAA,QAAQ,CAAC,OAAkC,EAAA;AAC9C,QAAA,IAAI,CAAe,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAI;;;AAGpC,YAAA,IAAI,CAAmB,CAAC;AACxB,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,gBAAA,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,aAAA;AACI,iBAAA,IAAI,CAAC,aAAY,UAAgB,CAAA,EAAE;gBACpC,CAAC,GAAG,OAAO,CAAC;AACf,aAAA;AACD,YAAA,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;AACb,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACjD,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC1B,aAAA,CAAC,CAAA;AACN,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAC7C,QAAA,CAAC,CAAC,KAAK,GAAG,MAAK;YACX,CAAC,EAAE,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,CAAC;KACZ;IAEM,MAAM,CAAU,GAAW,EAAE,KAAa,EAAA;AAC7C,QAAA,IAAI,CAAe,CAAC;AACpB,QAAA,IAAI,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC9B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACd,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAChC,SAAC,CAAC,CAAA;AACF,QAAA,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAI;AACpC,YAAA,IAAI,CAAgB,CAAC;YACrB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;AAE5C,YAAA,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC;gBACb,IAAI,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;gBACvB,KAAK,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAC1B,aAAA,CAAC,CAAA;AACN,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC,KAAK,GAAG,MAAK;YACX,CAAC,EAAE,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC;AACF,QAAA,OAAO,CAAC,CAAC;KACZ;AAEM,IAAA,MAAM,CAAC,OAAiD,EAAA;QAC3D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7B,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;AACpB,YAAA,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC9B,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAElC,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAI;gBAClB,MAAM,CAAC,CAAC,CAAC,CAAC;AACV,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;gBAChC,KAAK,CAAC,MAAM,EAAE,CAAC;AACf,gBAAA,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9C,gBAAA,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,aAAC,CAAA;;YAED,MAAM,QAAQ,GAAG,MAAK;gBAClB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;gBAChC,KAAK,CAAC,MAAM,EAAE,CAAC;AACf,gBAAA,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9C,gBAAA,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,aAAC,CAAA;;AAED,YAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC3C,YAAA,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzC,KAAK,CAAC,KAAK,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,YAAY,GAAG,CAAC,IAAU,KAAK,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AACnE,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;AAC9B,QAAA,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;AACxB,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACjB,YAAA,OAAO,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;AACrC,SAAC,CAAC;AACF,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,KAAC,CAAC,CAAC;uGA3FM,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACRlC;;AAEG;;;;"}