@sd-angular/core 1.3.231 → 1.3.233
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/api/src/lib/api.service.d.ts +3 -0
- package/bundles/sd-angular-core-api.umd.js +12 -8
- package/bundles/sd-angular-core-api.umd.js.map +1 -1
- package/bundles/sd-angular-core-api.umd.min.js +1 -1
- package/bundles/sd-angular-core-api.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-chip.umd.js +1 -1
- package/bundles/sd-angular-core-chip.umd.js.map +1 -1
- package/bundles/sd-angular-core-chip.umd.min.js +1 -1
- package/bundles/sd-angular-core-chip.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-select.umd.js +25 -15
- package/bundles/sd-angular-core-select.umd.js.map +1 -1
- package/bundles/sd-angular-core-select.umd.min.js +1 -1
- package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
- package/chip/sd-angular-core-chip.metadata.json +1 -1
- package/esm2015/api/src/lib/api.service.js +11 -7
- package/esm2015/chip/src/lib/chip.component.js +2 -2
- package/esm2015/select/src/lib/select.component.js +26 -16
- package/fesm2015/sd-angular-core-api.js +10 -6
- package/fesm2015/sd-angular-core-api.js.map +1 -1
- package/fesm2015/sd-angular-core-chip.js +1 -1
- package/fesm2015/sd-angular-core-chip.js.map +1 -1
- package/fesm2015/sd-angular-core-select.js +25 -15
- package/fesm2015/sd-angular-core-select.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.3.231.tgz → sd-angular-core-1.3.233.tgz} +0 -0
|
@@ -156,6 +156,7 @@ class SdApiService {
|
|
|
156
156
|
body,
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
|
+
const apiTimeout = (options === null || options === void 0 ? void 0 : options.timeout) || __classPrivateFieldGet(this, _timeout);
|
|
159
160
|
if (!__classPrivateFieldGet(this, _cache)[hashKey] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[hashKey].createdDate, __classPrivateFieldGet(this, _cacheDuration)) < new Date()) {
|
|
160
161
|
__classPrivateFieldGet(this, _cache)[hashKey] = {
|
|
161
162
|
createdDate: new Date(),
|
|
@@ -168,7 +169,7 @@ class SdApiService {
|
|
|
168
169
|
headers,
|
|
169
170
|
responseType: options === null || options === void 0 ? void 0 : options.responseType,
|
|
170
171
|
})
|
|
171
|
-
.pipe(timeout(
|
|
172
|
+
.pipe(timeout(apiTimeout))
|
|
172
173
|
.subscribe(res => {
|
|
173
174
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
174
175
|
status: 'success',
|
|
@@ -189,7 +190,7 @@ class SdApiService {
|
|
|
189
190
|
observe: 'response',
|
|
190
191
|
headers,
|
|
191
192
|
})
|
|
192
|
-
.pipe(timeout(
|
|
193
|
+
.pipe(timeout(apiTimeout))
|
|
193
194
|
.subscribe(res => {
|
|
194
195
|
if (res.ok) {
|
|
195
196
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
@@ -236,7 +237,9 @@ class SdApiService {
|
|
|
236
237
|
hours: options === null || options === void 0 ? void 0 : options.cacheHours,
|
|
237
238
|
});
|
|
238
239
|
if (!has()) {
|
|
239
|
-
const result = yield this.post(url, body, options === null || options === void 0 ? void 0 : options.headers
|
|
240
|
+
const result = yield this.post(url, body, options === null || options === void 0 ? void 0 : options.headers, {
|
|
241
|
+
timeout: 5000,
|
|
242
|
+
});
|
|
240
243
|
set(result);
|
|
241
244
|
return result;
|
|
242
245
|
}
|
|
@@ -300,6 +303,7 @@ class SdApiService {
|
|
|
300
303
|
encodedUrl,
|
|
301
304
|
headers,
|
|
302
305
|
});
|
|
306
|
+
const apiTimeout = (options === null || options === void 0 ? void 0 : options.timeout) || __classPrivateFieldGet(this, _timeout);
|
|
303
307
|
if (!__classPrivateFieldGet(this, _cache)[hashKey] || Date.addMiliseconds(__classPrivateFieldGet(this, _cache)[hashKey].createdDate, __classPrivateFieldGet(this, _cacheDuration)) < new Date()) {
|
|
304
308
|
__classPrivateFieldGet(this, _cache)[hashKey] = {
|
|
305
309
|
createdDate: new Date(),
|
|
@@ -308,7 +312,7 @@ class SdApiService {
|
|
|
308
312
|
if ((options === null || options === void 0 ? void 0 : options.responseType) && options.responseType !== 'json') {
|
|
309
313
|
this.httpClient
|
|
310
314
|
.get(encodedUrl, { observe: 'body', headers, responseType: options === null || options === void 0 ? void 0 : options.responseType })
|
|
311
|
-
.pipe(timeout(
|
|
315
|
+
.pipe(timeout(apiTimeout))
|
|
312
316
|
.subscribe(res => {
|
|
313
317
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
314
318
|
status: 'success',
|
|
@@ -326,7 +330,7 @@ class SdApiService {
|
|
|
326
330
|
else {
|
|
327
331
|
this.httpClient
|
|
328
332
|
.get(encodedUrl, { observe: 'response', headers })
|
|
329
|
-
.pipe(timeout(
|
|
333
|
+
.pipe(timeout(apiTimeout))
|
|
330
334
|
.subscribe(res => {
|
|
331
335
|
if (res.ok) {
|
|
332
336
|
__classPrivateFieldGet(this, _cache)[hashKey].response = {
|
|
@@ -373,7 +377,7 @@ class SdApiService {
|
|
|
373
377
|
hours: options === null || options === void 0 ? void 0 : options.cacheHours,
|
|
374
378
|
});
|
|
375
379
|
if (!has() || (options === null || options === void 0 ? void 0 : options.reload)) {
|
|
376
|
-
const result = yield this.get(encodedUrl, options === null || options === void 0 ? void 0 : options.headers, { encodeURI: false });
|
|
380
|
+
const result = yield this.get(encodedUrl, options === null || options === void 0 ? void 0 : options.headers, { encodeURI: false, timeout: 5000 });
|
|
377
381
|
set(result);
|
|
378
382
|
return result;
|
|
379
383
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-api.js","sources":["../../../../projects/sd-core/api/src/lib/api.model.ts","../../../../projects/sd-core/api/src/lib/token.service.ts","../../../../projects/sd-core/api/src/lib/http.interceptor.ts","../../../../projects/sd-core/api/src/lib/api.module.ts","../../../../projects/sd-core/api/src/lib/api.service.ts","../../../../projects/sd-core/api/src/lib/http.service.ts","../../../../projects/sd-core/api/src/public-api.ts","../../../../projects/sd-core/api/sd-angular-core-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport hash from 'object-hash';\r\n\r\nexport interface IApiConfiguration {\r\n host?: string;\r\n tokenHeader?: string;\r\n customHeaders?: (args?: { url?: string }) => HttpHeaders;\r\n beforeRemote?: (request: HttpRequest<any>) => void | Promise<void>;\r\n afterRemote?: (response: HttpResponse<any> | HttpErrorResponse) => void | Promise<void>;\r\n translate?: (value: string) => string;\r\n}\r\n\r\nexport const API_CONFIG = new InjectionToken<IApiConfiguration>('api.configuration');\r\n\r\nexport const TOKEN = hash({\r\n origin: location.origin,\r\n key: 'ed4a2ffc-af43-41fb-9ac9-970f43d99571'\r\n});","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { IApiConfiguration, API_CONFIG, TOKEN } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTokenService {\r\n\r\n get token() {\r\n const { get } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n return get();\r\n }\r\n\r\n set = (token: string) => {\r\n const { set } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n set(token);\r\n }\r\n\r\n clear = () => {\r\n const { remove } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n remove();\r\n }\r\n\r\n customHeaders = (args?: { url?: string }) => {\r\n return this.configuration?.customHeaders?.(args) || null;\r\n }\r\n\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService) {\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { from, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { API_CONFIG, IApiConfiguration } from './api.model';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable()\r\nexport class SdHttpInterceptor implements HttpInterceptor {\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private tokenService: SdTokenService\r\n ) { }\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.configuration?.tokenHeader && this.tokenService.token) {\r\n request = request.clone({ headers: request.headers.set(this.configuration.tokenHeader, this.tokenService.token) });\r\n }\r\n\r\n if (!request.url.startsWith('http')) {\r\n request = request.clone({\r\n url: (this.configuration?.host || location.host) + request.url\r\n });\r\n }\r\n if (request.body instanceof FormData) {\r\n request = request.clone({\r\n headers: request.headers.delete('Content-Type')\r\n });\r\n }\r\n const beforeRemote = this.configuration?.beforeRemote?.(request);\r\n if (beforeRemote instanceof Promise) {\r\n return from(beforeRemote).pipe(\r\n switchMap(() => next.handle(request)),\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n return next.handle(request).pipe(\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { SdHttpInterceptor } from './http.interceptor';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule,\r\n ],\r\n exports: [\r\n HttpClientModule\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: SdHttpInterceptor, multi: true }\r\n ],\r\n})\r\nexport class SdApiModule { }\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { take, timeout } from 'rxjs/operators';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\nimport { SdTokenService } from './token.service';\r\nimport { Subject } from 'rxjs';\r\nimport hash from 'object-hash';\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdApiService {\r\n private uploadId = 'U118fefb1-3085-4641-8cb8-f7fe5c28f509';\r\n\r\n #timeout = 120000; // 120s\r\n\r\n #cacheDuration = 2000; // 2s\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n subject: Subject<any>;\r\n response?: {\r\n status?: 'success' | 'error';\r\n result: any;\r\n };\r\n };\r\n } = {};\r\n\r\n private translate = (value: string): string => {\r\n return this.configuration?.translate(value) || value;\r\n };\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService,\r\n private tokenService: SdTokenService\r\n ) {}\r\n\r\n get http() {\r\n return this.httpClient;\r\n }\r\n\r\n post = async <T = any>(\r\n url: string,\r\n body?: any,\r\n headers?: HttpHeaders,\r\n options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }\r\n ): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n let hashKey = uuid.v4();\r\n if (!(body instanceof FormData)) {\r\n hashKey = hash({\r\n url,\r\n headers,\r\n body,\r\n });\r\n }\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient\r\n .post(encodeURI(url), body, {\r\n observe: 'body',\r\n headers,\r\n responseType: options?.responseType as any,\r\n })\r\n .pipe(timeout(this.#timeout))\r\n .subscribe(\r\n res => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res,\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n } else {\r\n this.httpClient\r\n .post(encodeURI(url), body, {\r\n observe: 'response',\r\n headers,\r\n })\r\n .pipe(timeout(this.#timeout))\r\n .subscribe(\r\n res => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n };\r\n\r\n postCache = async <T = any>(\r\n url: string,\r\n body?: any,\r\n options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }\r\n ): Promise<T> => {\r\n const headers =\r\n options?.headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const { get, set, has } = this.cacheService.create(\r\n {\r\n url,\r\n headers,\r\n body,\r\n },\r\n {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours,\r\n }\r\n );\r\n if (!has()) {\r\n const result = await this.post(url, body, options?.headers);\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n };\r\n\r\n put = async <T = any>(url: string, body?: any, headers?: HttpHeaders): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n return await new Promise<any>((resolve, reject) => {\r\n this.httpClient\r\n .put(encodeURI(url), body, {\r\n observe: 'response',\r\n headers,\r\n })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise()\r\n .then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n })\r\n .catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n };\r\n\r\n #defineParams = (request: any) => {\r\n const rq = [];\r\n for (const [key, value] of Object.entries(request)) {\r\n if (value !== null && value !== undefined && value !== '' && value?.toString() !== '') {\r\n rq.push(`${encodeURIComponent(key as string)}=${encodeURIComponent(value as string)}`);\r\n }\r\n }\r\n return `?${rq?.join('&')}`;\r\n };\r\n\r\n getWithParams = async <T = any>(\r\n url: string,\r\n params: any,\r\n options?: {\r\n headers?: HttpHeaders;\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }\r\n ): Promise<T> => {\r\n return await this.get(`${url}${this.#defineParams(params)}`, options?.headers, { ...options, encodeURI: false });\r\n };\r\n\r\n getCacheWithParams = async <T = any>(\r\n url: string,\r\n params: any,\r\n headers?: HttpHeaders,\r\n options?: {\r\n reload?: boolean;\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }\r\n ): Promise<T> => {\r\n return await this.getCache(`${url}${this.#defineParams(params)}`, { ...options, headers, encodeURI: false });\r\n };\r\n\r\n get = async <T = any>(\r\n url: string,\r\n headers?: HttpHeaders,\r\n options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n encodeURI?: boolean;\r\n }\r\n ): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n // const hashKey = hash({\r\n // encodedUrl,\r\n // headers\r\n // });\r\n const hashKey = hash({\r\n encodedUrl,\r\n headers,\r\n });\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient\r\n .get(encodedUrl, { observe: 'body', headers, responseType: options?.responseType as any })\r\n .pipe(timeout(this.#timeout))\r\n .subscribe(\r\n res => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res,\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n } else {\r\n this.httpClient\r\n .get(encodedUrl, { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout))\r\n .subscribe(\r\n res => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n };\r\n\r\n getCache = async <T = any>(\r\n url: string,\r\n options?: {\r\n reload?: boolean;\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n encodeURI?: boolean;\r\n }\r\n ): Promise<T> => {\r\n const headers =\r\n options?.headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n const { get, set, has } = this.cacheService.create(\r\n {\r\n encodedUrl,\r\n headers,\r\n },\r\n {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours,\r\n }\r\n );\r\n if (!has() || options?.reload) {\r\n const result = await this.get(encodedUrl, options?.headers, { encodeURI: false });\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n };\r\n\r\n delete = async <T = any>(url: string, headers?: HttpHeaders): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n return await new Promise<any>((resolve, reject) => {\r\n this.httpClient\r\n .delete(encodeURI(url), { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise()\r\n .then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n })\r\n .catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n };\r\n\r\n uploadSingle = (\r\n url: string,\r\n option?: {\r\n extensions?: string[];\r\n maxSizeInMb?: number;\r\n validator?: (fileName: string) => string;\r\n }\r\n ): Promise<any> => {\r\n return SdUtility.upload(option).then(file => this.upload(url, file));\r\n };\r\n\r\n upload = async (url: string, file: File) => {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n const message = this.translate(`Invalid file extension`);\r\n throw new Error(message);\r\n }\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n return await this.post(url, formData);\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdHttpService {\r\n constructor(\r\n private httpClient: HttpClient,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n get =<T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.get<T>(url, option);\r\n }\r\n\r\n post = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.post<T>(url, body, option);\r\n }\r\n\r\n put = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.put<T>(url, body, option);\r\n }\r\n\r\n delete = <T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.delete<T>(url, option);\r\n }\r\n\r\n request = <T = any>(method: string, url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.request<T>(method, url, option);\r\n }\r\n}\r\n\r\ninterface ObservableOption {\r\n body?: any;\r\n headers?: HttpHeaders | {\r\n [header: string]: string | string[];\r\n };\r\n observe?: 'body';\r\n params?: HttpParams | {\r\n [param: string]: string | string[];\r\n };\r\n reportProgress?: boolean;\r\n responseType?: 'json';\r\n withCredentials?: boolean;\r\n}","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/api.module';\r\nexport * from './lib/token.service';\r\nexport * from './lib/api.model';\r\nexport * from './lib/api.service';\r\nexport * from './lib/http.service';\r\nexport * from './lib/http.interceptor';","/**\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-api.js","sources":["../../../../projects/sd-core/api/src/lib/api.model.ts","../../../../projects/sd-core/api/src/lib/token.service.ts","../../../../projects/sd-core/api/src/lib/http.interceptor.ts","../../../../projects/sd-core/api/src/lib/api.module.ts","../../../../projects/sd-core/api/src/lib/api.service.ts","../../../../projects/sd-core/api/src/lib/http.service.ts","../../../../projects/sd-core/api/src/public-api.ts","../../../../projects/sd-core/api/sd-angular-core-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport hash from 'object-hash';\r\n\r\nexport interface IApiConfiguration {\r\n host?: string;\r\n tokenHeader?: string;\r\n customHeaders?: (args?: { url?: string }) => HttpHeaders;\r\n beforeRemote?: (request: HttpRequest<any>) => void | Promise<void>;\r\n afterRemote?: (response: HttpResponse<any> | HttpErrorResponse) => void | Promise<void>;\r\n translate?: (value: string) => string;\r\n}\r\n\r\nexport const API_CONFIG = new InjectionToken<IApiConfiguration>('api.configuration');\r\n\r\nexport const TOKEN = hash({\r\n origin: location.origin,\r\n key: 'ed4a2ffc-af43-41fb-9ac9-970f43d99571'\r\n});","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { IApiConfiguration, API_CONFIG, TOKEN } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTokenService {\r\n\r\n get token() {\r\n const { get } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n return get();\r\n }\r\n\r\n set = (token: string) => {\r\n const { set } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n set(token);\r\n }\r\n\r\n clear = () => {\r\n const { remove } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n remove();\r\n }\r\n\r\n customHeaders = (args?: { url?: string }) => {\r\n return this.configuration?.customHeaders?.(args) || null;\r\n }\r\n\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService) {\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { from, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { API_CONFIG, IApiConfiguration } from './api.model';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable()\r\nexport class SdHttpInterceptor implements HttpInterceptor {\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private tokenService: SdTokenService\r\n ) { }\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.configuration?.tokenHeader && this.tokenService.token) {\r\n request = request.clone({ headers: request.headers.set(this.configuration.tokenHeader, this.tokenService.token) });\r\n }\r\n\r\n if (!request.url.startsWith('http')) {\r\n request = request.clone({\r\n url: (this.configuration?.host || location.host) + request.url\r\n });\r\n }\r\n if (request.body instanceof FormData) {\r\n request = request.clone({\r\n headers: request.headers.delete('Content-Type')\r\n });\r\n }\r\n const beforeRemote = this.configuration?.beforeRemote?.(request);\r\n if (beforeRemote instanceof Promise) {\r\n return from(beforeRemote).pipe(\r\n switchMap(() => next.handle(request)),\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n return next.handle(request).pipe(\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { SdHttpInterceptor } from './http.interceptor';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule,\r\n ],\r\n exports: [\r\n HttpClientModule\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: SdHttpInterceptor, multi: true }\r\n ],\r\n})\r\nexport class SdApiModule { }\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { take, timeout } from 'rxjs/operators';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\nimport { SdTokenService } from './token.service';\r\nimport { Subject } from 'rxjs';\r\nimport hash from 'object-hash';\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdApiService {\r\n private uploadId = 'U118fefb1-3085-4641-8cb8-f7fe5c28f509';\r\n\r\n #timeout = 120000; // 120s\r\n\r\n #cacheDuration = 2000; // 2s\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n subject: Subject<any>;\r\n response?: {\r\n status?: 'success' | 'error';\r\n result: any;\r\n };\r\n };\r\n } = {};\r\n\r\n private translate = (value: string): string => {\r\n return this.configuration?.translate(value) || value;\r\n };\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService,\r\n private tokenService: SdTokenService\r\n ) {}\r\n\r\n get http() {\r\n return this.httpClient;\r\n }\r\n\r\n post = async <T = any>(\r\n url: string,\r\n body?: any,\r\n headers?: HttpHeaders,\r\n options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n timeout?: number;\r\n }\r\n ): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n let hashKey = uuid.v4();\r\n if (!(body instanceof FormData)) {\r\n hashKey = hash({\r\n url,\r\n headers,\r\n body,\r\n });\r\n }\r\n const apiTimeout = options?.timeout || this.#timeout;\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient\r\n .post(encodeURI(url), body, {\r\n observe: 'body',\r\n headers,\r\n responseType: options?.responseType as any,\r\n })\r\n .pipe(timeout(apiTimeout))\r\n .subscribe(\r\n res => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res,\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n } else {\r\n this.httpClient\r\n .post(encodeURI(url), body, {\r\n observe: 'response',\r\n headers,\r\n })\r\n .pipe(timeout(apiTimeout))\r\n .subscribe(\r\n res => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n };\r\n\r\n postCache = async <T = any>(\r\n url: string,\r\n body?: any,\r\n options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }\r\n ): Promise<T> => {\r\n const headers =\r\n options?.headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const { get, set, has } = this.cacheService.create(\r\n {\r\n url,\r\n headers,\r\n body,\r\n },\r\n {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours,\r\n }\r\n );\r\n if (!has()) {\r\n const result = await this.post(url, body, options?.headers, {\r\n timeout: 5000, // 5s\r\n });\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n };\r\n\r\n put = async <T = any>(url: string, body?: any, headers?: HttpHeaders): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n return await new Promise<any>((resolve, reject) => {\r\n this.httpClient\r\n .put(encodeURI(url), body, {\r\n observe: 'response',\r\n headers,\r\n })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise()\r\n .then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n })\r\n .catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n };\r\n\r\n #defineParams = (request: any) => {\r\n const rq = [];\r\n for (const [key, value] of Object.entries(request)) {\r\n if (value !== null && value !== undefined && value !== '' && value?.toString() !== '') {\r\n rq.push(`${encodeURIComponent(key as string)}=${encodeURIComponent(value as string)}`);\r\n }\r\n }\r\n return `?${rq?.join('&')}`;\r\n };\r\n\r\n getWithParams = async <T = any>(\r\n url: string,\r\n params: any,\r\n options?: {\r\n headers?: HttpHeaders;\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }\r\n ): Promise<T> => {\r\n return await this.get(`${url}${this.#defineParams(params)}`, options?.headers, { ...options, encodeURI: false });\r\n };\r\n\r\n getCacheWithParams = async <T = any>(\r\n url: string,\r\n params: any,\r\n headers?: HttpHeaders,\r\n options?: {\r\n reload?: boolean;\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }\r\n ): Promise<T> => {\r\n return await this.getCache(`${url}${this.#defineParams(params)}`, { ...options, headers, encodeURI: false });\r\n };\r\n\r\n get = async <T = any>(\r\n url: string,\r\n headers?: HttpHeaders,\r\n options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n encodeURI?: boolean;\r\n timeout?: number;\r\n }\r\n ): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n // const hashKey = hash({\r\n // encodedUrl,\r\n // headers\r\n // });\r\n const hashKey = hash({\r\n encodedUrl,\r\n headers,\r\n });\r\n const apiTimeout = options?.timeout || this.#timeout;\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient\r\n .get(encodedUrl, { observe: 'body', headers, responseType: options?.responseType as any })\r\n .pipe(timeout(apiTimeout))\r\n .subscribe(\r\n res => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res,\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n } else {\r\n this.httpClient\r\n .get(encodedUrl, { observe: 'response', headers })\r\n .pipe(timeout(apiTimeout))\r\n .subscribe(\r\n res => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body,\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n },\r\n err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err,\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n }\r\n );\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n };\r\n\r\n getCache = async <T = any>(\r\n url: string,\r\n options?: {\r\n reload?: boolean;\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n encodeURI?: boolean;\r\n }\r\n ): Promise<T> => {\r\n const headers =\r\n options?.headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n const { get, set, has } = this.cacheService.create(\r\n {\r\n encodedUrl,\r\n headers,\r\n },\r\n {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours,\r\n }\r\n );\r\n if (!has() || options?.reload) {\r\n const result = await this.get(encodedUrl, options?.headers, { encodeURI: false, timeout: 5000 });\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n };\r\n\r\n delete = async <T = any>(url: string, headers?: HttpHeaders): Promise<T> => {\r\n headers =\r\n headers ||\r\n this.tokenService.customHeaders({\r\n url,\r\n });\r\n return await new Promise<any>((resolve, reject) => {\r\n this.httpClient\r\n .delete(encodeURI(url), { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise()\r\n .then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n })\r\n .catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n };\r\n\r\n uploadSingle = (\r\n url: string,\r\n option?: {\r\n extensions?: string[];\r\n maxSizeInMb?: number;\r\n validator?: (fileName: string) => string;\r\n }\r\n ): Promise<any> => {\r\n return SdUtility.upload(option).then(file => this.upload(url, file));\r\n };\r\n\r\n upload = async (url: string, file: File) => {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n const message = this.translate(`Invalid file extension`);\r\n throw new Error(message);\r\n }\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n return await this.post(url, formData);\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdHttpService {\r\n constructor(\r\n private httpClient: HttpClient,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n get =<T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.get<T>(url, option);\r\n }\r\n\r\n post = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.post<T>(url, body, option);\r\n }\r\n\r\n put = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.put<T>(url, body, option);\r\n }\r\n\r\n delete = <T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.delete<T>(url, option);\r\n }\r\n\r\n request = <T = any>(method: string, url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders({\r\n url\r\n })\r\n }\r\n return this.httpClient.request<T>(method, url, option);\r\n }\r\n}\r\n\r\ninterface ObservableOption {\r\n body?: any;\r\n headers?: HttpHeaders | {\r\n [header: string]: string | string[];\r\n };\r\n observe?: 'body';\r\n params?: HttpParams | {\r\n [param: string]: string | string[];\r\n };\r\n reportProgress?: boolean;\r\n responseType?: 'json';\r\n withCredentials?: boolean;\r\n}","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/api.module';\r\nexport * from './lib/token.service';\r\nexport * from './lib/api.model';\r\nexport * from './lib/api.service';\r\nexport * from './lib/http.service';\r\nexport * from './lib/http.interceptor';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -533,7 +533,7 @@ _name = new WeakMap(), _form = new WeakMap(), _addable = new WeakMap(), _allItem
|
|
|
533
533
|
SdChip.decorators = [
|
|
534
534
|
{ type: Component, args: [{
|
|
535
535
|
selector: 'sd-chip',
|
|
536
|
-
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !autocompleteTrigger?.panelOpen && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field class=\"c-md\" [ngClass]=\"{'c-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-chip-list [formControl]=\"formControl\" #chipList>\r\n <ng-container *ngFor=\"let item of selectedItems | async\">\r\n <mat-chip *ngIf=\"item\" [selectable]=\"selectable\" [removable]=\"removable\" (removed)=\"onRemove(item)\"\r\n [selected]=\"item.isSelected\" (selectionChange)=\"select(item)\" [disabled]=\"inputControl.disabled\"\r\n (click)=\"onClickChip($event, item)\">\r\n <span>{{item[displayField] || item[valueField] || item}}</span>\r\n <mat-icon *ngIf=\"!inputControl.disabled && item | sdRemovableChip:removable\" matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n <input #autocompleteTrigger [formControl]=\"inputControl\" [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"onAdd($event)\" autocomplete=\"off\" [errorStateMatcher]=\"matcher\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [required]=\"required\" matInput #input>\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelect($event)\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"displayField ? item[displayField] : item\">\r\n <ng-container *ngIf=\"sdChipDisplay?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdChipDisplay.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!sdChipDisplay?.templateRef\">\r\n {{ displayField ? item[displayField] : item }}\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\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
|
|
536
|
+
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !autocompleteTrigger?.panelOpen && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field class=\"c-md\" [ngClass]=\"{'c-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-chip-list [formControl]=\"formControl\" #chipList>\r\n <ng-container *ngFor=\"let item of selectedItems | async\">\r\n <mat-chip *ngIf=\"item\" [selectable]=\"selectable\" [removable]=\"removable\" (removed)=\"onRemove(item)\"\r\n [selected]=\"item.isSelected\" (selectionChange)=\"select(item)\" [disabled]=\"inputControl.disabled\"\r\n (click)=\"onClickChip($event, item)\">\r\n <span>{{item[displayField] || item[valueField] || item}}</span>\r\n <mat-icon *ngIf=\"!inputControl.disabled && item | sdRemovableChip:removable\" matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n <input #autocompleteTrigger [formControl]=\"inputControl\" [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"onAdd($event)\" autocomplete=\"off\" [errorStateMatcher]=\"matcher\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [required]=\"required\" matInput #input>\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelect($event)\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"displayField ? item[displayField] : item\">\r\n <ng-container *ngIf=\"sdChipDisplay?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdChipDisplay.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!sdChipDisplay?.templateRef\">\r\n {{ displayField ? item[displayField] : item }}\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\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?.minlength\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Min length' | sdTranslate}} {{min}}\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\" formControl?.errors?.maxlength\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{'Max length' | sdTranslate}} {{max}}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>",
|
|
537
537
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
538
538
|
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.c-md .mat-form-field-infix{min-height:43.5px;padding:2px 0}:host ::ng-deep mat-form-field.c-md .mat-standard-chip{min-height:26px;padding:7px 10px}:host ::ng-deep mat-form-field.c-md .mat-standard-chip.mat-chip-with-trailing-icon{padding:7px 7px 7px 10px}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}"]
|
|
539
539
|
},] }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-chip.js","sources":["../../../../projects/sd-core/chip/src/lib/directives/sd-chip-display-def.directive.ts","../../../../projects/sd-core/chip/src/lib/chip.component.ts","../../../../projects/sd-core/chip/src/lib/pipes/removable-chip.pipe.ts","../../../../projects/sd-core/chip/src/lib/chip.module.ts","../../../../projects/sd-core/chip/src/public-api.ts","../../../../projects/sd-core/chip/sd-angular-core-chip.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdChipDisplayDef]'\r\n})\r\nexport class SdChipDisplayDef {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnInit, OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n ElementRef,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\n\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { NgForm, FormControl, FormGroup, ValidatorFn, AsyncValidatorFn, Validators, FormGroupDirective } from '@angular/forms';\r\nimport { Observable, Subscription, BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { MatChipInputEvent, MatChipList } from '@angular/material/chips';\r\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { SdChipUpdate } from './chip.model';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { SdChipDisplayDef } from './directives/sd-chip-display-def.directive';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\nclass SdChipErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) { }\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'sd-chip',\r\n templateUrl: './chip.component.html',\r\n styleUrls: ['./chip.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdChip implements OnInit, OnDestroy, AfterViewInit {\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 @Input() appearance: MatFormFieldAppearance;\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n selectable = true;\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 #addable: boolean;\r\n @Input() set addable(val: '' | boolean) {\r\n this.#addable = (val === '') || val;\r\n }\r\n @Input() label: string;\r\n @Input() valueField: string;\r\n @Input() displayField: string;\r\n @Input() placeholder: string;\r\n removable: boolean | ((item: any) => boolean) = true;\r\n @Input('removable') set _removable(val: '' | boolean | ((item: any) => boolean)) {\r\n this.removable = (val === '') || val;\r\n }\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n }\r\n // Server search\r\n loading = false;\r\n #allItems: Observable<any[]>;\r\n #allItem: {\r\n [key: string]: any\r\n } = {};\r\n #cache: {\r\n [key: string]: any[]\r\n } = {};\r\n #delay = 200; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm\r\n #itemsChanges = new BehaviorSubject<any[] | SearchFunc>([]);\r\n @Input() set items(items: undefined | any[] | SearchFunc) {\r\n this.#delay = 0;\r\n if (!items) {\r\n this.#itemsChanges.next([]);\r\n } else if (Array.isArray(items)) {\r\n this.#itemsChanges.next(items.filter(e => e !== null && e !== undefined));\r\n } else {\r\n this.#delay = 500;\r\n this.#itemsChanges.next(items);\r\n }\r\n this.formControl.updateValueAndValidity();\r\n }\r\n @Input() limit = 50;\r\n selectedItems: Observable<any[]>;\r\n #selectedItems: any[] = [];\r\n filteredItems: Observable<any[]>;\r\n #filteredItems: any[];\r\n @Input() cacheChecksum: any;\r\n ipt: any;\r\n\r\n // model\r\n @Input() set model(values: undefined | (string | number)[]) {\r\n if (!Array.isArray(values)) {\r\n values = [];\r\n }\r\n this.formControl.setValue(values);\r\n }\r\n // Validator\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n min: number;\r\n @Input('min') set pMin(val: number | string) {\r\n this.min = +val || 0;\r\n this.#updateValidator();\r\n }\r\n max: number;\r\n @Input('max') set pMax(val: number | string) {\r\n this.max = +val || 0;\r\n this.#updateValidator();\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n\r\n // Optional\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n this.inputControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n this.inputControl.enable();\r\n }\r\n }\r\n\r\n @Output() sdChange = new EventEmitter<any[]>();\r\n @Output() sdUpdate = new EventEmitter<SdChipUpdate>();\r\n @Output() chipSelected = new EventEmitter<any>();\r\n\r\n @ViewChild('input') input: ElementRef<HTMLInputElement>;\r\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\r\n @ViewChild('chipList', { static: true }) chipList: MatChipList;\r\n @ViewChild(MatAutocompleteTrigger, { read: MatAutocompleteTrigger }) autocompleteTrigger: MatAutocompleteTrigger;\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdChipDisplayDef) sdChipDisplay: SdChipDisplayDef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n isBluring = false;\r\n isFocused = false;\r\n inputControl = new FormControl();\r\n formControl = new SdFormControl();\r\n matcher = new SdChipErrotStateMatcher(this.formControl);\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#allItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.inputControl.valueChanges.pipe(startWith(''), debounceTime(this.#delay)),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))]).pipe(\r\n switchMap(async ([items]) => {\r\n const val = this.inputControl.value;\r\n const values = this.formControl.value || [];\r\n if (typeof (items) === 'function') {\r\n return await this.#loadItems(val, items);\r\n }\r\n this.#allItem = items.toObject(this.valueField);\r\n const hasFields = !!this.valueField && !!this.displayField;\r\n this.#filteredItems = items.filter(item => {\r\n const value = hasFields ? item[this.valueField] : item;\r\n const display = hasFields ? item[this.displayField] : item;\r\n if (String.aliasIncludes(value, val) || String.aliasIncludes(display, val)) {\r\n return true;\r\n }\r\n return values.some(e => e === value);\r\n });\r\n return this.#filteredItems;\r\n }));\r\n this.selectedItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))])\r\n .pipe(\r\n switchMap(async ([items, val]) => {\r\n // Vì một số lý do chưa xác định mà khi sử dụng sdViewDef thì khi chuyển sang dạng view sẽ trigger val = null\r\n // Nhưng formControl.value vẫn có giá trị đúng nên thực hiện gán val = this.formControl.value;\r\n val = this.formControl.value;\r\n if (!this.valueField) {\r\n this.#selectedItems = this.formControl.value;\r\n return this.#selectedItems;\r\n }\r\n if (typeof (items) === 'function') {\r\n this.#selectedItems = await this.#loadSelectedItems(val, items);\r\n return this.#selectedItems;\r\n }\r\n this.#selectedItems = (this.formControl.value || [])?.map(value => {\r\n return items?.find(item => item[this.valueField] === value) || {\r\n [this.valueField]: value,\r\n [this.displayField]: value\r\n };\r\n });\r\n return this.#selectedItems;\r\n })\r\n );\r\n this.filteredItems = this.#allItems.pipe(map(allItems => allItems.filter(item => {\r\n const values = this.formControl.value || [];\r\n if (this.valueField) {\r\n return !values.includes(item?.[this.valueField]);\r\n }\r\n return !values.includes(item);\r\n }).paging(this.limit)));\r\n // this.display = this.selectedItems.pipe(\r\n // map(selectedItems => selectedItems?.map(item => this.displayField ? item[this.displayField] : item)?.join(', ')));\r\n // this.#subscription.add(this.formControl.valueChanges.subscribe(() => {\r\n // const values: (string | number)[] = this.formControl.value || [];\r\n // this.selectedItems = this.#items.filter(item => values.findIndex(value => value === item?.[this.valueField]) !== -1);\r\n // this.modelChange.emit(values);\r\n // this.sdChange.emit(values);\r\n // setTimeout(() => {\r\n // this.#form?.markAsDirty();\r\n // }, 0);\r\n // }));\r\n // this.#subscription.add(this.#itemChanges.pipe(startWith(this.#items)).subscribe(() => {\r\n // const values: (string | number)[] = this.formControl.value || [];\r\n // this.selectedItems = [];\r\n // for (const value of values) {\r\n // const item = this.#items.find(e => e?.[this.valueField] === value) || {};\r\n // this.selectedItems.push({\r\n // ...item,\r\n // [this.valueField]: value\r\n // });\r\n // }\r\n // }));\r\n this.#form?.addControl(this.#name, this.formControl);\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 #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.min > 0) {\r\n validators.push(Validators.minLength(this.min));\r\n }\r\n if (this.max > 0) {\r\n validators.push(Validators.maxLength(this.max));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n #loadItems = async (searchText: string, items: SearchFunc) => {\r\n searchText = searchText?.toString() || '';\r\n const key = hash({\r\n checksum: this.cacheChecksum || null,\r\n searchText\r\n })\r\n if (this.#cache[key] === undefined) {\r\n this.loading = true;\r\n const results = await items(searchText).catch(() => []).finally(() => this.loading = false);\r\n const objItem = Array.toObject(results, this.valueField);\r\n this.#allItem = {\r\n ...this.#allItem,\r\n ...objItem\r\n };\r\n this.#cache[key] = results.union(this.valueField);\r\n }\r\n // if (!this.multiple) {\r\n // return this.#cache[searchText];\r\n // }\r\n const selectedItems = await this.#loadSelectedItems(this.formControl.value, items);\r\n // Đưa những selectedItems lên đầu nếu không mat-select-trigger sẽ không work\r\n return [...selectedItems, ...this.#cache[key]].union(this.valueField);\r\n }\r\n\r\n #loadSelectedItems = async (value: string | string[], items: SearchFunc) => {\r\n if (!value?.toString()) {\r\n return [];\r\n }\r\n const values = Array.isArray(value) ? value : [value];\r\n if (!this.valueField && !this.displayField) {\r\n return values;\r\n }\r\n this.loading = true;\r\n if (values.some(val => this.#allItem[val] === undefined)) {\r\n const results = await items(value, true).catch(() => []).finally(() => this.loading = false);\r\n const objItem = Array.toObject(results, this.valueField);\r\n const objValue = Array.toObject(\r\n values.map(val => ({ [val?.toString()]: { [this.valueField]: val, [this.displayField]: val } })), this.valueField);\r\n this.#allItem = {\r\n ...objValue,\r\n ...this.#allItem,\r\n ...objItem\r\n };\r\n }\r\n return values.map(val => this.#allItem[val?.toString()] ?? { [this.valueField]: val, [this.displayField]: val });\r\n }\r\n\r\n onAdd = (event: MatChipInputEvent): void => {\r\n // Add item only when MatAutocomplete is not open\r\n // To make sure this does not conflict with OptionSelected Event\r\n // if (!this.matAutocomplete.isOpen) {\r\n // const value = (event.value ?? '').toString().trim();\r\n // if (value) {\r\n // if (this.valueField && this.displayField) {\r\n // const item = this.#filteredItems.find(e => e[this.displayField] === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item[this.valueField]);\r\n // this.formControl.setValue(values);\r\n // } else if (this.#addable) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(value);\r\n // this.formControl.setValue(values);\r\n // }\r\n // } else {\r\n // console.log(value);\r\n // console.log(this.#filteredItems);\r\n // const item = this.#filteredItems.find(item => item === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item);\r\n // this.formControl.setValue(values);\r\n // } else if (this.#addable) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(value);\r\n // this.formControl.setValue(values);\r\n // }\r\n // }\r\n // }\r\n // this.inputControl.setValue('');\r\n // }\r\n const value = (event.value ?? '').toString().trim();\r\n if (value) {\r\n if (this.valueField && this.displayField) {\r\n const item = this.#filteredItems.find(e => e[this.displayField] === value);\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(item[this.valueField]);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.#addable) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(value);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n } else {\r\n const item = this.#filteredItems.find(item => item === value);\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(item);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.#addable) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(value);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n }\r\n }\r\n this.input.nativeElement.value = '';\r\n this.inputControl.setValue('');\r\n }\r\n\r\n // andn1 viết để xử lý tạm us B2B1D-18289 ở S69\r\n onAdd2 = (event: MatChipInputEvent): void => {\r\n\r\n const value = (event.value ?? '').toString().toLowerCase().trim();\r\n if (value) {\r\n const item = this.#filteredItems.find(e => e[this.valueField]\r\n && e[this.valueField].toString().toLowerCase().trim() === value);\r\n\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (!values.includes(item[this.valueField])) {\r\n values.push(item[this.valueField]);\r\n }\r\n this.formControl.setValue(values);\r\n }\r\n }\r\n this.inputControl.setValue('');\r\n }\r\n\r\n onClickChip = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event.stopImmediatePropagation();\r\n if (!this.formControl.disabled) {\r\n item.isSelected = !item.isSelected;\r\n this.focus();\r\n }\r\n }\r\n\r\n onRemove = (item: any): void => {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n this.formControl.setValue(values.filter(value => item !== value));\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.valueField) {\r\n this.formControl.setValue(values.filter(value => item?.[this.valueField] !== value));\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n this.inputControl.setValue('');\r\n this.focus();\r\n }\r\n\r\n select = (item: any): void => {\r\n this.chipSelected.emit(item);\r\n this.focus();\r\n }\r\n\r\n // onSelect = (event: MatAutocompleteSelectedEvent) => {\r\n // const value = (event.option.value?.[this.valueField] ?? '').toString().trim();\r\n // if (value) {\r\n // const item = this.#items.find(e => e[this.valueField]\r\n // && e[this.valueField].toString().trim() === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item[this.valueField]);\r\n // this.formControl.setValue(values);\r\n // this.input.nativeElement.value = '';\r\n // this.inputControl.setValue('');\r\n // setTimeout(() => {\r\n // this.autocompleteTrigger?.openPanel();\r\n // }, 0);\r\n // }\r\n // }\r\n // }\r\n\r\n onSelect = (event: MatAutocompleteSelectedEvent) => {\r\n const item = event.option.value;\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (item) {\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n if (!values.includes(item)) {\r\n values.push(item);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n }, 0);\r\n }\r\n } else if (this.valueField) {\r\n const val = item?.[this.valueField] || null;\r\n if (!values.includes(val)) {\r\n values.push(val);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n }, 0);\r\n }\r\n }\r\n this.input.nativeElement.value = '';\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }\r\n\r\n // displayFn = (value: string | { [key: string]: string }): string | undefined => {\r\n // if (typeof value === 'string') {\r\n // if (!this.#items) {\r\n // return undefined;\r\n // }\r\n // const selectedItem = this.#items.find(item => item[this.valueField] === value);\r\n // if (selectedItem) {\r\n // return selectedItem[this.displayField];\r\n // }\r\n // if (this.#items.some(item => item[this.displayField].toLowerCase().indexOf(value.toLowerCase()) !== -1)) {\r\n // return value;\r\n // } else {\r\n // return undefined;\r\n // }\r\n // } else {\r\n // return value ? value[this.displayField] : undefined;\r\n // }\r\n // }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.isBluring = false;\r\n this.inputControl.setValue('');\r\n // this.inputControl.updateValueAndValidity();\r\n }\r\n\r\n onBlur = () => {\r\n this.isBluring = true;\r\n setTimeout(() => {\r\n if(this.isBluring) {\r\n this.isFocused = false;\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }, 100);\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 focus = () => {\r\n this.isFocused = true;\r\n this.isBluring = false;\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n this.input?.nativeElement?.focus();\r\n }, 100);\r\n }\r\n\r\n onClear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n this.inputControl.setValue('');\r\n this.formControl.setValue([]);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n this.autocompleteTrigger?.openPanel();\r\n this.ref.detectChanges();\r\n }\r\n\r\n getSelectedItems = () => this.#selectedItems;\r\n}\r\n\r\ntype SearchFunc = (searchText?: string | string[], isFormValue?: boolean) => Promise<any[]>;","import { Pipe, PipeTransform } from '@angular/core';\r\n@Pipe({\r\n name: 'sdRemovableChip'\r\n})\r\nexport class SdRemovableChipPipe implements PipeTransform {\r\n constructor() { }\r\n transform(item: any, removable: boolean | ((item: any) => boolean)): boolean {\r\n if(typeof(removable) === 'boolean') {\r\n return removable;\r\n }\r\n return removable(item);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdChip } from './chip.component';\r\nimport { SdChipDisplayDef } from './directives/sd-chip-display-def.directive';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { SdRemovableChipPipe } from './pipes/removable-chip.pipe';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatAutocompleteModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatChipsModule,\r\n SdTranslateModule,\r\n SdCommonModule\r\n ],\r\n declarations: [\r\n SdChip,\r\n SdChipDisplayDef,\r\n SdRemovableChipPipe\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdChip,\r\n SdChipDisplayDef,\r\n ]\r\n})\r\nexport class SdChipModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/chip.module';\r\nexport * from './lib/chip.component';\r\nexport * from './lib/chip.model';\r\nexport * from './lib/directives/sd-chip-display-def.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdRemovableChipPipe as ɵa} from './src/lib/pipes/removable-chip.pipe';"],"names":["uuid.v4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-chip.js","sources":["../../../../projects/sd-core/chip/src/lib/directives/sd-chip-display-def.directive.ts","../../../../projects/sd-core/chip/src/lib/chip.component.ts","../../../../projects/sd-core/chip/src/lib/pipes/removable-chip.pipe.ts","../../../../projects/sd-core/chip/src/lib/chip.module.ts","../../../../projects/sd-core/chip/src/public-api.ts","../../../../projects/sd-core/chip/sd-angular-core-chip.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sdChipDisplayDef]'\r\n})\r\nexport class SdChipDisplayDef {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ViewChild,\r\n Output,\r\n EventEmitter,\r\n OnInit, OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n ElementRef,\r\n ContentChild,\r\n ChangeDetectionStrategy,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators';\r\n\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { NgForm, FormControl, FormGroup, ValidatorFn, AsyncValidatorFn, Validators, FormGroupDirective } from '@angular/forms';\r\nimport { Observable, Subscription, BehaviorSubject, combineLatest } from 'rxjs';\r\nimport { MatChipInputEvent, MatChipList } from '@angular/material/chips';\r\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { SdChipUpdate } from './chip.model';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { SdChipDisplayDef } from './directives/sd-chip-display-def.directive';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\nclass SdChipErrotStateMatcher implements ErrorStateMatcher {\r\n constructor(private formControl: FormControl) { }\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return !!(this.formControl?.invalid && (this.formControl?.dirty || this.formControl?.touched || isSubmitted));\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'sd-chip',\r\n templateUrl: './chip.component.html',\r\n styleUrls: ['./chip.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdChip implements OnInit, OnDestroy, AfterViewInit {\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 @Input() appearance: MatFormFieldAppearance;\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n selectable = true;\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 #addable: boolean;\r\n @Input() set addable(val: '' | boolean) {\r\n this.#addable = (val === '') || val;\r\n }\r\n @Input() label: string;\r\n @Input() valueField: string;\r\n @Input() displayField: string;\r\n @Input() placeholder: string;\r\n removable: boolean | ((item: any) => boolean) = true;\r\n @Input('removable') set _removable(val: '' | boolean | ((item: any) => boolean)) {\r\n this.removable = (val === '') || val;\r\n }\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n }\r\n // Server search\r\n loading = false;\r\n #allItems: Observable<any[]>;\r\n #allItem: {\r\n [key: string]: any\r\n } = {};\r\n #cache: {\r\n [key: string]: any[]\r\n } = {};\r\n #delay = 200; // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm\r\n #itemsChanges = new BehaviorSubject<any[] | SearchFunc>([]);\r\n @Input() set items(items: undefined | any[] | SearchFunc) {\r\n this.#delay = 0;\r\n if (!items) {\r\n this.#itemsChanges.next([]);\r\n } else if (Array.isArray(items)) {\r\n this.#itemsChanges.next(items.filter(e => e !== null && e !== undefined));\r\n } else {\r\n this.#delay = 500;\r\n this.#itemsChanges.next(items);\r\n }\r\n this.formControl.updateValueAndValidity();\r\n }\r\n @Input() limit = 50;\r\n selectedItems: Observable<any[]>;\r\n #selectedItems: any[] = [];\r\n filteredItems: Observable<any[]>;\r\n #filteredItems: any[];\r\n @Input() cacheChecksum: any;\r\n ipt: any;\r\n\r\n // model\r\n @Input() set model(values: undefined | (string | number)[]) {\r\n if (!Array.isArray(values)) {\r\n values = [];\r\n }\r\n this.formControl.setValue(values);\r\n }\r\n // Validator\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n min: number;\r\n @Input('min') set pMin(val: number | string) {\r\n this.min = +val || 0;\r\n this.#updateValidator();\r\n }\r\n max: number;\r\n @Input('max') set pMax(val: number | string) {\r\n this.max = +val || 0;\r\n this.#updateValidator();\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n\r\n // Optional\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n this.inputControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n this.inputControl.enable();\r\n }\r\n }\r\n\r\n @Output() sdChange = new EventEmitter<any[]>();\r\n @Output() sdUpdate = new EventEmitter<SdChipUpdate>();\r\n @Output() chipSelected = new EventEmitter<any>();\r\n\r\n @ViewChild('input') input: ElementRef<HTMLInputElement>;\r\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\r\n @ViewChild('chipList', { static: true }) chipList: MatChipList;\r\n @ViewChild(MatAutocompleteTrigger, { read: MatAutocompleteTrigger }) autocompleteTrigger: MatAutocompleteTrigger;\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ContentChild(SdChipDisplayDef) sdChipDisplay: SdChipDisplayDef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n isBluring = false;\r\n isFocused = false;\r\n inputControl = new FormControl();\r\n formControl = new SdFormControl();\r\n matcher = new SdChipErrotStateMatcher(this.formControl);\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n this.ref.markForCheck();\r\n }));\r\n this.#allItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.inputControl.valueChanges.pipe(startWith(''), debounceTime(this.#delay)),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))]).pipe(\r\n switchMap(async ([items]) => {\r\n const val = this.inputControl.value;\r\n const values = this.formControl.value || [];\r\n if (typeof (items) === 'function') {\r\n return await this.#loadItems(val, items);\r\n }\r\n this.#allItem = items.toObject(this.valueField);\r\n const hasFields = !!this.valueField && !!this.displayField;\r\n this.#filteredItems = items.filter(item => {\r\n const value = hasFields ? item[this.valueField] : item;\r\n const display = hasFields ? item[this.displayField] : item;\r\n if (String.aliasIncludes(value, val) || String.aliasIncludes(display, val)) {\r\n return true;\r\n }\r\n return values.some(e => e === value);\r\n });\r\n return this.#filteredItems;\r\n }));\r\n this.selectedItems = combineLatest([\r\n this.#itemsChanges.asObservable(),\r\n this.formControl.valueChanges.pipe(startWith(this.formControl.value))])\r\n .pipe(\r\n switchMap(async ([items, val]) => {\r\n // Vì một số lý do chưa xác định mà khi sử dụng sdViewDef thì khi chuyển sang dạng view sẽ trigger val = null\r\n // Nhưng formControl.value vẫn có giá trị đúng nên thực hiện gán val = this.formControl.value;\r\n val = this.formControl.value;\r\n if (!this.valueField) {\r\n this.#selectedItems = this.formControl.value;\r\n return this.#selectedItems;\r\n }\r\n if (typeof (items) === 'function') {\r\n this.#selectedItems = await this.#loadSelectedItems(val, items);\r\n return this.#selectedItems;\r\n }\r\n this.#selectedItems = (this.formControl.value || [])?.map(value => {\r\n return items?.find(item => item[this.valueField] === value) || {\r\n [this.valueField]: value,\r\n [this.displayField]: value\r\n };\r\n });\r\n return this.#selectedItems;\r\n })\r\n );\r\n this.filteredItems = this.#allItems.pipe(map(allItems => allItems.filter(item => {\r\n const values = this.formControl.value || [];\r\n if (this.valueField) {\r\n return !values.includes(item?.[this.valueField]);\r\n }\r\n return !values.includes(item);\r\n }).paging(this.limit)));\r\n // this.display = this.selectedItems.pipe(\r\n // map(selectedItems => selectedItems?.map(item => this.displayField ? item[this.displayField] : item)?.join(', ')));\r\n // this.#subscription.add(this.formControl.valueChanges.subscribe(() => {\r\n // const values: (string | number)[] = this.formControl.value || [];\r\n // this.selectedItems = this.#items.filter(item => values.findIndex(value => value === item?.[this.valueField]) !== -1);\r\n // this.modelChange.emit(values);\r\n // this.sdChange.emit(values);\r\n // setTimeout(() => {\r\n // this.#form?.markAsDirty();\r\n // }, 0);\r\n // }));\r\n // this.#subscription.add(this.#itemChanges.pipe(startWith(this.#items)).subscribe(() => {\r\n // const values: (string | number)[] = this.formControl.value || [];\r\n // this.selectedItems = [];\r\n // for (const value of values) {\r\n // const item = this.#items.find(e => e?.[this.valueField] === value) || {};\r\n // this.selectedItems.push({\r\n // ...item,\r\n // [this.valueField]: value\r\n // });\r\n // }\r\n // }));\r\n this.#form?.addControl(this.#name, this.formControl);\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 #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.min > 0) {\r\n validators.push(Validators.minLength(this.min));\r\n }\r\n if (this.max > 0) {\r\n validators.push(Validators.maxLength(this.max));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.setAsyncValidators(asyncValidators);\r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n #loadItems = async (searchText: string, items: SearchFunc) => {\r\n searchText = searchText?.toString() || '';\r\n const key = hash({\r\n checksum: this.cacheChecksum || null,\r\n searchText\r\n })\r\n if (this.#cache[key] === undefined) {\r\n this.loading = true;\r\n const results = await items(searchText).catch(() => []).finally(() => this.loading = false);\r\n const objItem = Array.toObject(results, this.valueField);\r\n this.#allItem = {\r\n ...this.#allItem,\r\n ...objItem\r\n };\r\n this.#cache[key] = results.union(this.valueField);\r\n }\r\n // if (!this.multiple) {\r\n // return this.#cache[searchText];\r\n // }\r\n const selectedItems = await this.#loadSelectedItems(this.formControl.value, items);\r\n // Đưa những selectedItems lên đầu nếu không mat-select-trigger sẽ không work\r\n return [...selectedItems, ...this.#cache[key]].union(this.valueField);\r\n }\r\n\r\n #loadSelectedItems = async (value: string | string[], items: SearchFunc) => {\r\n if (!value?.toString()) {\r\n return [];\r\n }\r\n const values = Array.isArray(value) ? value : [value];\r\n if (!this.valueField && !this.displayField) {\r\n return values;\r\n }\r\n this.loading = true;\r\n if (values.some(val => this.#allItem[val] === undefined)) {\r\n const results = await items(value, true).catch(() => []).finally(() => this.loading = false);\r\n const objItem = Array.toObject(results, this.valueField);\r\n const objValue = Array.toObject(\r\n values.map(val => ({ [val?.toString()]: { [this.valueField]: val, [this.displayField]: val } })), this.valueField);\r\n this.#allItem = {\r\n ...objValue,\r\n ...this.#allItem,\r\n ...objItem\r\n };\r\n }\r\n return values.map(val => this.#allItem[val?.toString()] ?? { [this.valueField]: val, [this.displayField]: val });\r\n }\r\n\r\n onAdd = (event: MatChipInputEvent): void => {\r\n // Add item only when MatAutocomplete is not open\r\n // To make sure this does not conflict with OptionSelected Event\r\n // if (!this.matAutocomplete.isOpen) {\r\n // const value = (event.value ?? '').toString().trim();\r\n // if (value) {\r\n // if (this.valueField && this.displayField) {\r\n // const item = this.#filteredItems.find(e => e[this.displayField] === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item[this.valueField]);\r\n // this.formControl.setValue(values);\r\n // } else if (this.#addable) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(value);\r\n // this.formControl.setValue(values);\r\n // }\r\n // } else {\r\n // console.log(value);\r\n // console.log(this.#filteredItems);\r\n // const item = this.#filteredItems.find(item => item === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item);\r\n // this.formControl.setValue(values);\r\n // } else if (this.#addable) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(value);\r\n // this.formControl.setValue(values);\r\n // }\r\n // }\r\n // }\r\n // this.inputControl.setValue('');\r\n // }\r\n const value = (event.value ?? '').toString().trim();\r\n if (value) {\r\n if (this.valueField && this.displayField) {\r\n const item = this.#filteredItems.find(e => e[this.displayField] === value);\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(item[this.valueField]);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.#addable) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(value);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n } else {\r\n const item = this.#filteredItems.find(item => item === value);\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(item);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.#addable) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n values.push(value);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n }\r\n }\r\n this.input.nativeElement.value = '';\r\n this.inputControl.setValue('');\r\n }\r\n\r\n // andn1 viết để xử lý tạm us B2B1D-18289 ở S69\r\n onAdd2 = (event: MatChipInputEvent): void => {\r\n\r\n const value = (event.value ?? '').toString().toLowerCase().trim();\r\n if (value) {\r\n const item = this.#filteredItems.find(e => e[this.valueField]\r\n && e[this.valueField].toString().toLowerCase().trim() === value);\r\n\r\n if (item) {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (!values.includes(item[this.valueField])) {\r\n values.push(item[this.valueField]);\r\n }\r\n this.formControl.setValue(values);\r\n }\r\n }\r\n this.inputControl.setValue('');\r\n }\r\n\r\n onClickChip = ($event: Event, item: any) => {\r\n $event.stopPropagation();\r\n $event.stopImmediatePropagation();\r\n if (!this.formControl.disabled) {\r\n item.isSelected = !item.isSelected;\r\n this.focus();\r\n }\r\n }\r\n\r\n onRemove = (item: any): void => {\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n this.formControl.setValue(values.filter(value => item !== value));\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n } else if (this.valueField) {\r\n this.formControl.setValue(values.filter(value => item?.[this.valueField] !== value));\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n this.inputControl.setValue('');\r\n this.focus();\r\n }\r\n\r\n select = (item: any): void => {\r\n this.chipSelected.emit(item);\r\n this.focus();\r\n }\r\n\r\n // onSelect = (event: MatAutocompleteSelectedEvent) => {\r\n // const value = (event.option.value?.[this.valueField] ?? '').toString().trim();\r\n // if (value) {\r\n // const item = this.#items.find(e => e[this.valueField]\r\n // && e[this.valueField].toString().trim() === value);\r\n // if (item) {\r\n // const values: (string | number)[] = this.formControl.value ?? [];\r\n // values.push(item[this.valueField]);\r\n // this.formControl.setValue(values);\r\n // this.input.nativeElement.value = '';\r\n // this.inputControl.setValue('');\r\n // setTimeout(() => {\r\n // this.autocompleteTrigger?.openPanel();\r\n // }, 0);\r\n // }\r\n // }\r\n // }\r\n\r\n onSelect = (event: MatAutocompleteSelectedEvent) => {\r\n const item = event.option.value;\r\n const values: (string | number)[] = this.formControl.value ?? [];\r\n if (item) {\r\n if (typeof (item) === 'string' || typeof (item) === 'number') {\r\n if (!values.includes(item)) {\r\n values.push(item);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n }, 0);\r\n }\r\n } else if (this.valueField) {\r\n const val = item?.[this.valueField] || null;\r\n if (!values.includes(val)) {\r\n values.push(val);\r\n this.formControl.setValue(values);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n }, 0);\r\n }\r\n }\r\n this.input.nativeElement.value = '';\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }\r\n\r\n // displayFn = (value: string | { [key: string]: string }): string | undefined => {\r\n // if (typeof value === 'string') {\r\n // if (!this.#items) {\r\n // return undefined;\r\n // }\r\n // const selectedItem = this.#items.find(item => item[this.valueField] === value);\r\n // if (selectedItem) {\r\n // return selectedItem[this.displayField];\r\n // }\r\n // if (this.#items.some(item => item[this.displayField].toLowerCase().indexOf(value.toLowerCase()) !== -1)) {\r\n // return value;\r\n // } else {\r\n // return undefined;\r\n // }\r\n // } else {\r\n // return value ? value[this.displayField] : undefined;\r\n // }\r\n // }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n this.isBluring = false;\r\n this.inputControl.setValue('');\r\n // this.inputControl.updateValueAndValidity();\r\n }\r\n\r\n onBlur = () => {\r\n this.isBluring = true;\r\n setTimeout(() => {\r\n if(this.isBluring) {\r\n this.isFocused = false;\r\n this.inputControl.setValue('', {\r\n emitEvent: false\r\n });\r\n }\r\n }, 100);\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 focus = () => {\r\n this.isFocused = true;\r\n this.isBluring = false;\r\n setTimeout(() => {\r\n this.autocompleteTrigger?.openPanel();\r\n this.input?.nativeElement?.focus();\r\n }, 100);\r\n }\r\n\r\n onClear = ($event?: any) => {\r\n $event?.stopPropagation();\r\n this.inputControl.setValue('');\r\n this.formControl.setValue([]);\r\n this.modelChange.emit(this.formControl.value);\r\n this.sdChange.emit(this.formControl.value);\r\n this.autocompleteTrigger?.openPanel();\r\n this.ref.detectChanges();\r\n }\r\n\r\n getSelectedItems = () => this.#selectedItems;\r\n}\r\n\r\ntype SearchFunc = (searchText?: string | string[], isFormValue?: boolean) => Promise<any[]>;","import { Pipe, PipeTransform } from '@angular/core';\r\n@Pipe({\r\n name: 'sdRemovableChip'\r\n})\r\nexport class SdRemovableChipPipe implements PipeTransform {\r\n constructor() { }\r\n transform(item: any, removable: boolean | ((item: any) => boolean)): boolean {\r\n if(typeof(removable) === 'boolean') {\r\n return removable;\r\n }\r\n return removable(item);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { SdChip } from './chip.component';\r\nimport { SdChipDisplayDef } from './directives/sd-chip-display-def.directive';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { SdRemovableChipPipe } from './pipes/removable-chip.pipe';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatAutocompleteModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatChipsModule,\r\n SdTranslateModule,\r\n SdCommonModule\r\n ],\r\n declarations: [\r\n SdChip,\r\n SdChipDisplayDef,\r\n SdRemovableChipPipe\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdChip,\r\n SdChipDisplayDef,\r\n ]\r\n})\r\nexport class SdChipModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/chip.module';\r\nexport * from './lib/chip.component';\r\nexport * from './lib/chip.model';\r\nexport * from './lib/directives/sd-chip-display-def.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdRemovableChipPipe as ɵa} from './src/lib/pipes/removable-chip.pipe';"],"names":["uuid.v4"],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ SdSelectDisplayDefDirective.ctorParameters = () => [
|
|
|
31
31
|
{ type: TemplateRef }
|
|
32
32
|
];
|
|
33
33
|
|
|
34
|
-
var _input, _name, _form, _itemsChanges, _delay, _validator, _subscription, _allItems, _allItem, _cache, _updateValidator, _loadSelectedItems, _loadItems, _onChange, _customValidator, _getCopyText;
|
|
34
|
+
var _input, _name, _form, _itemsChanges, _delay, _validator, _subscription, _allItems, _allItem, _cache, _updateValidator, _loadSelectedItems, _loadItems, _onChange, _customValidator, _hashedValue, _getCopyText;
|
|
35
35
|
class SdSelect {
|
|
36
36
|
constructor(ref, formConfig) {
|
|
37
37
|
this.ref = ref;
|
|
@@ -217,6 +217,7 @@ class SdSelect {
|
|
|
217
217
|
return null;
|
|
218
218
|
});
|
|
219
219
|
});
|
|
220
|
+
_hashedValue.set(this, void 0);
|
|
220
221
|
this.onOpenedChange = (isOpened) => {
|
|
221
222
|
var _a, _b;
|
|
222
223
|
if (isOpened) {
|
|
@@ -224,24 +225,33 @@ class SdSelect {
|
|
|
224
225
|
if (__classPrivateFieldGet(this, _input)) {
|
|
225
226
|
__classPrivateFieldGet(this, _input).value = null;
|
|
226
227
|
}
|
|
228
|
+
__classPrivateFieldSet(this, _hashedValue, hash({
|
|
229
|
+
value: this.formControl.value,
|
|
230
|
+
}));
|
|
227
231
|
this.searchTerm$.next('');
|
|
228
232
|
}
|
|
229
233
|
else {
|
|
230
234
|
this.isFocused = false;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
235
|
+
const hashedValue = hash({
|
|
236
|
+
value: this.formControl.value,
|
|
237
|
+
});
|
|
238
|
+
// Khi panel close, bắn event sdChange, sdSelection nếu có thay đổi giá trị
|
|
239
|
+
if (__classPrivateFieldGet(this, _hashedValue) !== hashedValue) {
|
|
240
|
+
this.sdChange.emit(this.formControl.value);
|
|
241
|
+
if (this.multiple) {
|
|
242
|
+
this.sdSelection.emit({
|
|
243
|
+
value: this.formControl.value,
|
|
244
|
+
items: ((_a = this.formControl.value) === null || _a === void 0 ? void 0 : _a.map(val => __classPrivateFieldGet(this, _allItem)[val === null || val === void 0 ? void 0 : val.toString()])) || [],
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.sdSelection.emit({
|
|
249
|
+
value: this.formControl.value,
|
|
250
|
+
item: __classPrivateFieldGet(this, _allItem)[(_b = this.formControl.value) === null || _b === void 0 ? void 0 : _b.toString()],
|
|
251
|
+
});
|
|
252
|
+
}
|
|
244
253
|
}
|
|
254
|
+
__classPrivateFieldSet(this, _hashedValue, undefined);
|
|
245
255
|
}
|
|
246
256
|
};
|
|
247
257
|
this.onOptionChange = (tooltip) => {
|
|
@@ -486,7 +496,7 @@ class SdSelect {
|
|
|
486
496
|
__classPrivateFieldGet(this, _onChange).call(this, this.formControl.value);
|
|
487
497
|
}
|
|
488
498
|
}
|
|
489
|
-
_input = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _itemsChanges = new WeakMap(), _delay = new WeakMap(), _validator = new WeakMap(), _subscription = new WeakMap(), _allItems = new WeakMap(), _allItem = new WeakMap(), _cache = new WeakMap(), _updateValidator = new WeakMap(), _loadSelectedItems = new WeakMap(), _loadItems = new WeakMap(), _onChange = new WeakMap(), _customValidator = new WeakMap(), _getCopyText = new WeakMap();
|
|
499
|
+
_input = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _itemsChanges = new WeakMap(), _delay = new WeakMap(), _validator = new WeakMap(), _subscription = new WeakMap(), _allItems = new WeakMap(), _allItem = new WeakMap(), _cache = new WeakMap(), _updateValidator = new WeakMap(), _loadSelectedItems = new WeakMap(), _loadItems = new WeakMap(), _onChange = new WeakMap(), _customValidator = new WeakMap(), _hashedValue = new WeakMap(), _getCopyText = new WeakMap();
|
|
490
500
|
SdSelect.decorators = [
|
|
491
501
|
{ type: Component, args: [{
|
|
492
502
|
selector: 'sd-select',
|