@vendure/admin-ui 2.1.5 → 2.2.0-next.0

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.
@@ -12,9 +12,9 @@ export class LocalizationService {
12
12
  constructor(i18nService, dataService) {
13
13
  this.i18nService = i18nService;
14
14
  this.dataService = dataService;
15
- this.uiLanguageAndLocale$ = this.dataService.client
16
- ?.uiState()
17
- ?.stream$?.pipe(map(({ uiState }) => [uiState.language, uiState.locale ?? undefined]));
15
+ this.uiLanguageAndLocale$ = this.dataService.client?.uiState()?.stream$?.pipe(map(({ uiState }) => {
16
+ return [uiState.language, uiState.locale ?? undefined];
17
+ }));
18
18
  this.direction$ = this.uiLanguageAndLocale$?.pipe(map(([languageCode]) => {
19
19
  return this.i18nService.isRTL(languageCode) ? 'rtl' : 'ltr';
20
20
  }));
@@ -28,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
28
28
  providedIn: 'root',
29
29
  }]
30
30
  }], ctorParameters: function () { return [{ type: i1.I18nService }, { type: i2.DataService }]; } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3Byb3ZpZGVycy9sb2NhbGl6YXRpb24vbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBU3ZDOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQW9CLFdBQXdCLEVBQVUsV0FBd0I7UUFBMUQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUMxRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQy9DLEVBQUUsT0FBTyxFQUFFO1lBQ1gsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs4R0FkUSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZoQixNQUFNOzsyRkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGF0YS9wcm92aWRlcnMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvaTE4bi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZUNvZGUgfSBmcm9tICcuLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuXHJcbmV4cG9ydCB0eXBlIExvY2FsaXphdGlvbkRpcmVjdGlvblR5cGUgPSBPYnNlcnZhYmxlPCdsdHInIHwgJ3J0bCc+O1xyXG5leHBvcnQgdHlwZSBMb2NhbGl6YXRpb25MYW5ndWFnZUNvZGVUeXBlID0gT2JzZXJ2YWJsZTxbTGFuZ3VhZ2VDb2RlLCBzdHJpbmcgfCB1bmRlZmluZWRdPjtcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogUHJvdmlkZXMgbG9jYWxpemF0aW9uIGhlbHBlciBmdW5jdGlvbmFsaXR5LlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcbiAgICB1aUxhbmd1YWdlQW5kTG9jYWxlJDogTG9jYWxpemF0aW9uTGFuZ3VhZ2VDb2RlVHlwZTtcclxuICAgIGRpcmVjdGlvbiQ6IExvY2FsaXphdGlvbkRpcmVjdGlvblR5cGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy51aUxhbmd1YWdlQW5kTG9jYWxlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XHJcbiAgICAgICAgICAgID8udWlTdGF0ZSgpXHJcbiAgICAgICAgICAgID8uc3RyZWFtJD8ucGlwZShtYXAoKHsgdWlTdGF0ZSB9KSA9PiBbdWlTdGF0ZS5sYW5ndWFnZSwgdWlTdGF0ZS5sb2NhbGUgPz8gdW5kZWZpbmVkXSkpO1xyXG5cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiQgPSB0aGlzLnVpTGFuZ3VhZ2VBbmRMb2NhbGUkPy5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pMThuU2VydmljZS5pc1JUTChsYW5ndWFnZUNvZGUpID8gJ3J0bCcgOiAnbHRyJztcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3Byb3ZpZGVycy9sb2NhbGl6YXRpb24vbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBU3ZDOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQW9CLFdBQXdCLEVBQVUsV0FBd0I7UUFBMUQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUMxRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FDekUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOzhHQWhCUSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZoQixNQUFNOzsyRkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGF0YS9wcm92aWRlcnMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvaTE4bi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZUNvZGUgfSBmcm9tICcuLi8uLi9jb21tb24vZ2VuZXJhdGVkLXR5cGVzJztcclxuXHJcbmV4cG9ydCB0eXBlIExvY2FsaXphdGlvbkRpcmVjdGlvblR5cGUgPSBPYnNlcnZhYmxlPCdsdHInIHwgJ3J0bCc+O1xyXG5leHBvcnQgdHlwZSBMb2NhbGl6YXRpb25MYW5ndWFnZUNvZGVUeXBlID0gT2JzZXJ2YWJsZTxbTGFuZ3VhZ2VDb2RlLCBzdHJpbmcgfCB1bmRlZmluZWRdPjtcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogUHJvdmlkZXMgbG9jYWxpemF0aW9uIGhlbHBlciBmdW5jdGlvbmFsaXR5LlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcbiAgICB1aUxhbmd1YWdlQW5kTG9jYWxlJDogTG9jYWxpemF0aW9uTGFuZ3VhZ2VDb2RlVHlwZTtcclxuICAgIGRpcmVjdGlvbiQ6IExvY2FsaXphdGlvbkRpcmVjdGlvblR5cGU7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy51aUxhbmd1YWdlQW5kTG9jYWxlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50Py51aVN0YXRlKCk/LnN0cmVhbSQ/LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoeyB1aVN0YXRlIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbdWlTdGF0ZS5sYW5ndWFnZSwgdWlTdGF0ZS5sb2NhbGUgPz8gdW5kZWZpbmVkXTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24kID0gdGhpcy51aUxhbmd1YWdlQW5kTG9jYWxlJD8ucGlwZShcclxuICAgICAgICAgICAgbWFwKChbbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaTE4blNlcnZpY2UuaXNSVEwobGFuZ3VhZ2VDb2RlKSA/ICdydGwnIDogJ2x0cic7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -46,6 +46,66 @@ export function useQuery(query, variables) {
46
46
  const refetch = (variables) => firstValueFrom(runQuery(variables));
47
47
  return { data, loading, error, refetch };
48
48
  }
49
+ /**
50
+ * @description
51
+ * A React hook which allows you to execute a GraphQL query.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { useLazyQuery } from '\@vendure/admin-ui/react';
56
+ * import { gql } from 'graphql-tag';
57
+ *
58
+ * const GET_PRODUCT = gql`
59
+ * query GetProduct($id: ID!) {
60
+ * product(id: $id) {
61
+ * id
62
+ * name
63
+ * description
64
+ * }
65
+ * }`;
66
+ * type ProductResponse = {
67
+ * product: {
68
+ * name: string
69
+ * description: string
70
+ * }
71
+ * }
72
+ *
73
+ * export const MyComponent = () => {
74
+ * const [getProduct, { data, loading, error }] = useLazyQuery<ProductResponse>(GET_PRODUCT);
75
+ *
76
+ * const handleClick = () => {
77
+ * getProduct({
78
+ * id: '1',
79
+ * }).then(result => {
80
+ * // do something with the result
81
+ * });
82
+ * };
83
+ *
84
+ * if (loading) return <div>Loading...</div>;
85
+ * if (error) return <div>Error! { error }</div>;
86
+ *
87
+ * return (
88
+ * <div>
89
+ * <button onClick={handleClick}>Get product</button>
90
+ * {data && (
91
+ * <div>
92
+ * <h1>{data.product.name}</h1>
93
+ * <p>{data.product.description}</p>
94
+ * </div>)}
95
+ * </div>
96
+ * );
97
+ * };
98
+ * ```
99
+ *
100
+ * @since 2.2.0
101
+ * @docsCategory react-hooks
102
+ */
103
+ export function useLazyQuery(query) {
104
+ const { data, loading, error, runQuery } = useDataService((dataService, vars) => dataService.query(query, vars).stream$);
105
+ const rest = { data, loading, error };
106
+ const execute = (variables) => firstValueFrom(runQuery(variables));
107
+ return [execute, rest];
108
+ }
49
109
  /**
50
110
  * @description
51
111
  * A React hook which allows you to execute a GraphQL mutation.
@@ -121,4 +181,4 @@ export function useDataService(operation) {
121
181
  }, []);
122
182
  return { data, loading, error, runQuery };
123
183
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWFjdC9zcmMvcmVhY3QtaG9va3MvdXNlLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXRGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixLQUE2QyxFQUM3QyxTQUFhO0lBRWIsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FDckQsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQ2hFLENBQUM7SUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVcsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsUUFBZ0Q7SUFFaEQsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUN2RixXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FDMUMsQ0FBQztJQUNGLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0QyxNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFrQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUMxQixTQUFxRTtJQUVyRSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ3JFO0lBRUQsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUssQ0FBQztJQUN0QyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsRUFBVSxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLFNBQWEsRUFBRSxFQUFFO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUM7WUFDQSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNULFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1NBQ0osQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGVkRG9jdW1lbnROb2RlIH0gZnJvbSAnQGdyYXBocWwtdHlwZWQtZG9jdW1lbnQtbm9kZS9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlIH0gZnJvbSAnZ3JhcGhxbC9pbmRleCc7XHJcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEhvc3RlZENvbXBvbmVudENvbnRleHQgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlYWN0LWNvbXBvbmVudC1ob3N0LmRpcmVjdGl2ZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgUmVhY3QgaG9vayB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHJlc3VsdHMgb2YgYSBHcmFwaFFMIHF1ZXJ5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ1xcQHZlbmR1cmUvYWRtaW4tdWkvcmVhY3QnO1xyXG4gKiBpbXBvcnQgeyBncWwgfSBmcm9tICdncmFwaHFsLXRhZyc7XHJcbiAqXHJcbiAqIGNvbnN0IEdFVF9QUk9EVUNUID0gZ3FsYFxyXG4gKiAgICBxdWVyeSBHZXRQcm9kdWN0KCRpZDogSUQhKSB7XHJcbiAqICAgICAgcHJvZHVjdChpZDogJGlkKSB7XHJcbiAqICAgICAgICBpZFxyXG4gKiAgICAgICAgbmFtZVxyXG4gKiAgICAgICAgZGVzY3JpcHRpb25cclxuICogICAgICB9XHJcbiAqICAgIH1gO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgTXlDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgICBjb25zdCB7IGRhdGEsIGxvYWRpbmcsIGVycm9yIH0gPSB1c2VRdWVyeShHRVRfUFJPRFVDVCwgeyBpZDogJzEnIH0pO1xyXG4gKlxyXG4gKiAgICAgaWYgKGxvYWRpbmcpIHJldHVybiA8ZGl2PkxvYWRpbmcuLi48L2Rpdj47XHJcbiAqICAgICBpZiAoZXJyb3IpIHJldHVybiA8ZGl2PkVycm9yISB7IGVycm9yIH08L2Rpdj47XHJcbiAqICAgICByZXR1cm4gKFxyXG4gKiAgICAgICAgIDxkaXY+XHJcbiAqICAgICAgICAgICAgIDxoMT57ZGF0YS5wcm9kdWN0Lm5hbWV9PC9oMT5cclxuICogICAgICAgICAgICAgPHA+e2RhdGEucHJvZHVjdC5kZXNjcmlwdGlvbn08L3A+XHJcbiAqICAgICAgICAgPC9kaXY+XHJcbiAqICAgICApO1xyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1ob29rc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5PFQsIFYgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXHJcbiAgICBxdWVyeTogRG9jdW1lbnROb2RlIHwgVHlwZWREb2N1bWVudE5vZGU8VCwgVj4sXHJcbiAgICB2YXJpYWJsZXM/OiBWLFxyXG4pIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbG9hZGluZywgZXJyb3IsIHJ1blF1ZXJ5IH0gPSB1c2VEYXRhU2VydmljZTxULCBWPihcclxuICAgICAgICAoZGF0YVNlcnZpY2UsIHZhcnMpID0+IGRhdGFTZXJ2aWNlLnF1ZXJ5KHF1ZXJ5LCB2YXJzKS5zdHJlYW0kLFxyXG4gICAgKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gcnVuUXVlcnkodmFyaWFibGVzKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9LCBbcnVuUXVlcnldKTtcclxuXHJcbiAgICBjb25zdCByZWZldGNoID0gKHZhcmlhYmxlcz86IFYpID0+IGZpcnN0VmFsdWVGcm9tKHJ1blF1ZXJ5KHZhcmlhYmxlcykpO1xyXG4gICAgcmV0dXJuIHsgZGF0YSwgbG9hZGluZywgZXJyb3IsIHJlZmV0Y2ggfSBhcyBjb25zdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIFJlYWN0IGhvb2sgd2hpY2ggYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgR3JhcGhRTCBtdXRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgdXNlTXV0YXRpb24gfSBmcm9tICdcXEB2ZW5kdXJlL2FkbWluLXVpL3JlYWN0JztcclxuICogaW1wb3J0IHsgZ3FsIH0gZnJvbSAnZ3JhcGhxbC10YWcnO1xyXG4gKlxyXG4gKiBjb25zdCBVUERBVEVfUFJPRFVDVCA9IGdxbGBcclxuICogICBtdXRhdGlvbiBVcGRhdGVQcm9kdWN0KCRpbnB1dDogVXBkYXRlUHJvZHVjdElucHV0ISkge1xyXG4gKiAgICAgdXBkYXRlUHJvZHVjdChpbnB1dDogJGlucHV0KSB7XHJcbiAqICAgICBpZFxyXG4gKiAgICAgbmFtZVxyXG4gKiAgIH1cclxuICogfWA7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBNeUNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICAgIGNvbnN0IFt1cGRhdGVQcm9kdWN0LCB7IGRhdGEsIGxvYWRpbmcsIGVycm9yIH1dID0gdXNlTXV0YXRpb24oVVBEQVRFX1BST0RVQ1QpO1xyXG4gKlxyXG4gKiAgICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XHJcbiAqICAgICAgICAgdXBkYXRlUHJvZHVjdCh7XHJcbiAqICAgICAgICAgICAgIGlucHV0OiB7XHJcbiAqICAgICAgICAgICAgICAgICBpZDogJzEnLFxyXG4gKiAgICAgICAgICAgICAgICAgbmFtZTogJ05ldyBuYW1lJyxcclxuICogICAgICAgICAgICAgfSxcclxuICogICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAqICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcclxuICogICAgICAgICB9KTtcclxuICogICAgIH07XHJcbiAqXHJcbiAqICAgICBpZiAobG9hZGluZykgcmV0dXJuIDxkaXY+TG9hZGluZy4uLjwvZGl2PjtcclxuICogICAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+RXJyb3IhIHsgZXJyb3IgfTwvZGl2PjtcclxuICpcclxuICogICAgIHJldHVybiAoXHJcbiAqICAgICA8ZGl2PlxyXG4gKiAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlVwZGF0ZSBwcm9kdWN0PC9idXR0b24+XHJcbiAqICAgICAgICAge2RhdGEgJiYgPGRpdj5Qcm9kdWN0IHVwZGF0ZWQhPC9kaXY+fVxyXG4gKiAgICAgPC9kaXY+XHJcbiAqICAgICApO1xyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1ob29rc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZU11dGF0aW9uPFQsIFYgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXHJcbiAgICBtdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgVHlwZWREb2N1bWVudE5vZGU8VCwgVj4sXHJcbikge1xyXG4gICAgY29uc3QgeyBkYXRhLCBsb2FkaW5nLCBlcnJvciwgcnVuUXVlcnkgfSA9IHVzZURhdGFTZXJ2aWNlPFQsIFY+KChkYXRhU2VydmljZSwgdmFyaWFibGVzKSA9PlxyXG4gICAgICAgIGRhdGFTZXJ2aWNlLm11dGF0ZShtdXRhdGlvbiwgdmFyaWFibGVzKSxcclxuICAgICk7XHJcbiAgICBjb25zdCByZXN0ID0geyBkYXRhLCBsb2FkaW5nLCBlcnJvciB9O1xyXG4gICAgY29uc3QgZXhlY3V0ZSA9ICh2YXJpYWJsZXM/OiBWKSA9PiBmaXJzdFZhbHVlRnJvbShydW5RdWVyeSh2YXJpYWJsZXMpKTtcclxuICAgIHJldHVybiBbZXhlY3V0ZSwgcmVzdF0gYXMgW3R5cGVvZiBleGVjdXRlLCB0eXBlb2YgcmVzdF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRhU2VydmljZTxULCBWIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxyXG4gICAgb3BlcmF0aW9uOiAoZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCB2YXJpYWJsZXM/OiBWKSA9PiBPYnNlcnZhYmxlPFQ+LFxyXG4pIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEhvc3RlZENvbXBvbmVudENvbnRleHQpO1xyXG4gICAgY29uc3QgZGF0YVNlcnZpY2UgPSBjb250ZXh0Py5pbmplY3Rvci5nZXQoRGF0YVNlcnZpY2UpO1xyXG4gICAgaWYgKCFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gRGF0YVNlcnZpY2UgZm91bmQgaW4gSG9zdGVkQ29tcG9uZW50Q29udGV4dCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPFQ+KCk7XHJcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZz4oKTtcclxuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBydW5RdWVyeSA9IHVzZUNhbGxiYWNrKCh2YXJpYWJsZXM/OiBWKSA9PiB7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aW9uKGRhdGFTZXJ2aWNlLCB2YXJpYWJsZXMpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIHJldHVybiB7IGRhdGEsIGxvYWRpbmcsIGVycm9yLCBydW5RdWVyeSB9O1xyXG59XHJcbiJdfQ==
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWFjdC9zcmMvcmVhY3QtaG9va3MvdXNlLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXRGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixLQUE2QyxFQUM3QyxTQUFhO0lBRWIsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FDckQsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQ2hFLENBQUM7SUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVcsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcURHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDeEIsS0FBNkM7SUFFN0MsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FDckQsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQ2hFLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxTQUFhLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBa0MsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsUUFBZ0Q7SUFFaEQsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUN2RixXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FDMUMsQ0FBQztJQUNGLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0QyxNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFrQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUMxQixTQUFxRTtJQUVyRSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ3JFO0lBRUQsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUssQ0FBQztJQUN0QyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsRUFBVSxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLFNBQWEsRUFBRSxFQUFFO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUM7WUFDQSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNULFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1NBQ0osQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGVkRG9jdW1lbnROb2RlIH0gZnJvbSAnQGdyYXBocWwtdHlwZWQtZG9jdW1lbnQtbm9kZS9jb3JlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgRG9jdW1lbnROb2RlIH0gZnJvbSAnZ3JhcGhxbC9pbmRleCc7XHJcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEhvc3RlZENvbXBvbmVudENvbnRleHQgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlYWN0LWNvbXBvbmVudC1ob3N0LmRpcmVjdGl2ZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgUmVhY3QgaG9vayB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHJlc3VsdHMgb2YgYSBHcmFwaFFMIHF1ZXJ5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ1xcQHZlbmR1cmUvYWRtaW4tdWkvcmVhY3QnO1xyXG4gKiBpbXBvcnQgeyBncWwgfSBmcm9tICdncmFwaHFsLXRhZyc7XHJcbiAqXHJcbiAqIGNvbnN0IEdFVF9QUk9EVUNUID0gZ3FsYFxyXG4gKiAgICBxdWVyeSBHZXRQcm9kdWN0KCRpZDogSUQhKSB7XHJcbiAqICAgICAgcHJvZHVjdChpZDogJGlkKSB7XHJcbiAqICAgICAgICBpZFxyXG4gKiAgICAgICAgbmFtZVxyXG4gKiAgICAgICAgZGVzY3JpcHRpb25cclxuICogICAgICB9XHJcbiAqICAgIH1gO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgTXlDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgICBjb25zdCB7IGRhdGEsIGxvYWRpbmcsIGVycm9yIH0gPSB1c2VRdWVyeShHRVRfUFJPRFVDVCwgeyBpZDogJzEnIH0pO1xyXG4gKlxyXG4gKiAgICAgaWYgKGxvYWRpbmcpIHJldHVybiA8ZGl2PkxvYWRpbmcuLi48L2Rpdj47XHJcbiAqICAgICBpZiAoZXJyb3IpIHJldHVybiA8ZGl2PkVycm9yISB7IGVycm9yIH08L2Rpdj47XHJcbiAqICAgICByZXR1cm4gKFxyXG4gKiAgICAgICAgIDxkaXY+XHJcbiAqICAgICAgICAgICAgIDxoMT57ZGF0YS5wcm9kdWN0Lm5hbWV9PC9oMT5cclxuICogICAgICAgICAgICAgPHA+e2RhdGEucHJvZHVjdC5kZXNjcmlwdGlvbn08L3A+XHJcbiAqICAgICAgICAgPC9kaXY+XHJcbiAqICAgICApO1xyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1ob29rc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5PFQsIFYgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXHJcbiAgICBxdWVyeTogRG9jdW1lbnROb2RlIHwgVHlwZWREb2N1bWVudE5vZGU8VCwgVj4sXHJcbiAgICB2YXJpYWJsZXM/OiBWLFxyXG4pIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbG9hZGluZywgZXJyb3IsIHJ1blF1ZXJ5IH0gPSB1c2VEYXRhU2VydmljZTxULCBWPihcclxuICAgICAgICAoZGF0YVNlcnZpY2UsIHZhcnMpID0+IGRhdGFTZXJ2aWNlLnF1ZXJ5KHF1ZXJ5LCB2YXJzKS5zdHJlYW0kLFxyXG4gICAgKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gcnVuUXVlcnkodmFyaWFibGVzKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9LCBbcnVuUXVlcnldKTtcclxuXHJcbiAgICBjb25zdCByZWZldGNoID0gKHZhcmlhYmxlcz86IFYpID0+IGZpcnN0VmFsdWVGcm9tKHJ1blF1ZXJ5KHZhcmlhYmxlcykpO1xyXG4gICAgcmV0dXJuIHsgZGF0YSwgbG9hZGluZywgZXJyb3IsIHJlZmV0Y2ggfSBhcyBjb25zdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIFJlYWN0IGhvb2sgd2hpY2ggYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgR3JhcGhRTCBxdWVyeS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgdXNlTGF6eVF1ZXJ5IH0gZnJvbSAnXFxAdmVuZHVyZS9hZG1pbi11aS9yZWFjdCc7XHJcbiAqIGltcG9ydCB7IGdxbCB9IGZyb20gJ2dyYXBocWwtdGFnJztcclxuICpcclxuICogY29uc3QgR0VUX1BST0RVQ1QgPSBncWxgXHJcbiAqICAgIHF1ZXJ5IEdldFByb2R1Y3QoJGlkOiBJRCEpIHtcclxuICogICAgICBwcm9kdWN0KGlkOiAkaWQpIHtcclxuICogICAgICAgIGlkXHJcbiAqICAgICAgICBuYW1lXHJcbiAqICAgICAgICBkZXNjcmlwdGlvblxyXG4gKiAgICAgIH1cclxuICogICAgfWA7XHJcbiAqIHR5cGUgUHJvZHVjdFJlc3BvbnNlID0ge1xyXG4gKiAgICAgcHJvZHVjdDoge1xyXG4gKiAgICAgICAgIG5hbWU6IHN0cmluZ1xyXG4gKiAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmdcclxuICogICAgIH1cclxuICogfVxyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgTXlDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgICBjb25zdCBbZ2V0UHJvZHVjdCwgeyBkYXRhLCBsb2FkaW5nLCBlcnJvciB9XSA9IHVzZUxhenlRdWVyeTxQcm9kdWN0UmVzcG9uc2U+KEdFVF9QUk9EVUNUKTtcclxuICpcclxuICogICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XHJcbiAqICAgICAgICAgZ2V0UHJvZHVjdCh7XHJcbiAqICAgICAgICAgICAgICBpZDogJzEnLFxyXG4gKiAgICAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcclxuICogICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdFxyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgfTtcclxuICpcclxuICogICAgIGlmIChsb2FkaW5nKSByZXR1cm4gPGRpdj5Mb2FkaW5nLi4uPC9kaXY+O1xyXG4gKiAgICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5FcnJvciEgeyBlcnJvciB9PC9kaXY+O1xyXG4gKlxyXG4gKiAgICAgcmV0dXJuIChcclxuICogICAgIDxkaXY+XHJcbiAqICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVDbGlja30+R2V0IHByb2R1Y3Q8L2J1dHRvbj5cclxuICogICAgICAgICB7ZGF0YSAmJiAoXHJcbiAqICAgICAgICAgICAgICA8ZGl2PlxyXG4gKiAgICAgICAgICAgICAgICAgIDxoMT57ZGF0YS5wcm9kdWN0Lm5hbWV9PC9oMT5cclxuICogICAgICAgICAgICAgICAgICA8cD57ZGF0YS5wcm9kdWN0LmRlc2NyaXB0aW9ufTwvcD5cclxuICogICAgICAgICAgICAgIDwvZGl2Pil9XHJcbiAqICAgICA8L2Rpdj5cclxuICogICAgICk7XHJcbiAqIH07XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAc2luY2UgMi4yLjBcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1ob29rc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxhenlRdWVyeTxULCBWIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxyXG4gICAgcXVlcnk6IERvY3VtZW50Tm9kZSB8IFR5cGVkRG9jdW1lbnROb2RlPFQsIFY+LFxyXG4pIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgbG9hZGluZywgZXJyb3IsIHJ1blF1ZXJ5IH0gPSB1c2VEYXRhU2VydmljZTxULCBWPihcclxuICAgICAgICAoZGF0YVNlcnZpY2UsIHZhcnMpID0+IGRhdGFTZXJ2aWNlLnF1ZXJ5KHF1ZXJ5LCB2YXJzKS5zdHJlYW0kLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlc3QgPSB7IGRhdGEsIGxvYWRpbmcsIGVycm9yIH07XHJcbiAgICBjb25zdCBleGVjdXRlID0gKHZhcmlhYmxlcz86IFYpID0+IGZpcnN0VmFsdWVGcm9tKHJ1blF1ZXJ5KHZhcmlhYmxlcykpO1xyXG4gICAgcmV0dXJuIFtleGVjdXRlLCByZXN0XSBhcyBbdHlwZW9mIGV4ZWN1dGUsIHR5cGVvZiByZXN0XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIFJlYWN0IGhvb2sgd2hpY2ggYWxsb3dzIHlvdSB0byBleGVjdXRlIGEgR3JhcGhRTCBtdXRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgdXNlTXV0YXRpb24gfSBmcm9tICdcXEB2ZW5kdXJlL2FkbWluLXVpL3JlYWN0JztcclxuICogaW1wb3J0IHsgZ3FsIH0gZnJvbSAnZ3JhcGhxbC10YWcnO1xyXG4gKlxyXG4gKiBjb25zdCBVUERBVEVfUFJPRFVDVCA9IGdxbGBcclxuICogICBtdXRhdGlvbiBVcGRhdGVQcm9kdWN0KCRpbnB1dDogVXBkYXRlUHJvZHVjdElucHV0ISkge1xyXG4gKiAgICAgdXBkYXRlUHJvZHVjdChpbnB1dDogJGlucHV0KSB7XHJcbiAqICAgICBpZFxyXG4gKiAgICAgbmFtZVxyXG4gKiAgIH1cclxuICogfWA7XHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBNeUNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICAgIGNvbnN0IFt1cGRhdGVQcm9kdWN0LCB7IGRhdGEsIGxvYWRpbmcsIGVycm9yIH1dID0gdXNlTXV0YXRpb24oVVBEQVRFX1BST0RVQ1QpO1xyXG4gKlxyXG4gKiAgICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XHJcbiAqICAgICAgICAgdXBkYXRlUHJvZHVjdCh7XHJcbiAqICAgICAgICAgICAgIGlucHV0OiB7XHJcbiAqICAgICAgICAgICAgICAgICBpZDogJzEnLFxyXG4gKiAgICAgICAgICAgICAgICAgbmFtZTogJ05ldyBuYW1lJyxcclxuICogICAgICAgICAgICAgfSxcclxuICogICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7XHJcbiAqICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXN1bHRcclxuICogICAgICAgICB9KTtcclxuICogICAgIH07XHJcbiAqXHJcbiAqICAgICBpZiAobG9hZGluZykgcmV0dXJuIDxkaXY+TG9hZGluZy4uLjwvZGl2PjtcclxuICogICAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+RXJyb3IhIHsgZXJyb3IgfTwvZGl2PjtcclxuICpcclxuICogICAgIHJldHVybiAoXHJcbiAqICAgICA8ZGl2PlxyXG4gKiAgICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlQ2xpY2t9PlVwZGF0ZSBwcm9kdWN0PC9idXR0b24+XHJcbiAqICAgICAgICAge2RhdGEgJiYgPGRpdj5Qcm9kdWN0IHVwZGF0ZWQhPC9kaXY+fVxyXG4gKiAgICAgPC9kaXY+XHJcbiAqICAgICApO1xyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1ob29rc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZU11dGF0aW9uPFQsIFYgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXHJcbiAgICBtdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgVHlwZWREb2N1bWVudE5vZGU8VCwgVj4sXHJcbikge1xyXG4gICAgY29uc3QgeyBkYXRhLCBsb2FkaW5nLCBlcnJvciwgcnVuUXVlcnkgfSA9IHVzZURhdGFTZXJ2aWNlPFQsIFY+KChkYXRhU2VydmljZSwgdmFyaWFibGVzKSA9PlxyXG4gICAgICAgIGRhdGFTZXJ2aWNlLm11dGF0ZShtdXRhdGlvbiwgdmFyaWFibGVzKSxcclxuICAgICk7XHJcbiAgICBjb25zdCByZXN0ID0geyBkYXRhLCBsb2FkaW5nLCBlcnJvciB9O1xyXG4gICAgY29uc3QgZXhlY3V0ZSA9ICh2YXJpYWJsZXM/OiBWKSA9PiBmaXJzdFZhbHVlRnJvbShydW5RdWVyeSh2YXJpYWJsZXMpKTtcclxuICAgIHJldHVybiBbZXhlY3V0ZSwgcmVzdF0gYXMgW3R5cGVvZiBleGVjdXRlLCB0eXBlb2YgcmVzdF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VEYXRhU2VydmljZTxULCBWIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxyXG4gICAgb3BlcmF0aW9uOiAoZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCB2YXJpYWJsZXM/OiBWKSA9PiBPYnNlcnZhYmxlPFQ+LFxyXG4pIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEhvc3RlZENvbXBvbmVudENvbnRleHQpO1xyXG4gICAgY29uc3QgZGF0YVNlcnZpY2UgPSBjb250ZXh0Py5pbmplY3Rvci5nZXQoRGF0YVNlcnZpY2UpO1xyXG4gICAgaWYgKCFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gRGF0YVNlcnZpY2UgZm91bmQgaW4gSG9zdGVkQ29tcG9uZW50Q29udGV4dCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPFQ+KCk7XHJcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZz4oKTtcclxuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBydW5RdWVyeSA9IHVzZUNhbGxiYWNrKCh2YXJpYWJsZXM/OiBWKSA9PiB7XHJcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aW9uKGRhdGFTZXJ2aWNlLCB2YXJpYWJsZXMpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldERhdGEocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIHJldHVybiB7IGRhdGEsIGxvYWRpbmcsIGVycm9yLCBydW5RdWVyeSB9O1xyXG59XHJcbiJdfQ==
@@ -6,7 +6,7 @@ import { concatMap, bufferCount, map, filter, distinctUntilChanged, skip, takeUn
6
6
  import * as i1 from 'apollo-angular';
7
7
  import { gql, ApolloModule, APOLLO_OPTIONS } from 'apollo-angular';
8
8
  import { pick } from '@vendure/common/lib/pick';
9
- import { from, Subject, merge, lastValueFrom, BehaviorSubject, interval, combineLatest, isObservable, switchMap as switchMap$1, of, map as map$1, Observable, timer, EMPTY, concat, forkJoin, fromEvent } from 'rxjs';
9
+ import { from, Subject, merge, lastValueFrom, BehaviorSubject, interval, combineLatest, isObservable, switchMap as switchMap$1, of, map as map$1, take as take$1, takeUntil as takeUntil$1, finalize as finalize$1, Observable, timer, EMPTY, concat, forkJoin, fromEvent } from 'rxjs';
10
10
  import { simpleDeepClone } from '@vendure/common/lib/simple-deep-clone';
11
11
  import { NetworkStatus, ApolloLink, InMemoryCache } from '@apollo/client/core';
12
12
  import { notNullOrUndefined, getGraphQlInputName, assertNever } from '@vendure/common/lib/shared-utils';
@@ -6820,9 +6820,13 @@ class I18nService {
6820
6820
  get availableLanguages() {
6821
6821
  return [...this._availableLanguages];
6822
6822
  }
6823
+ get availableLocales() {
6824
+ return [...this._availableLocales];
6825
+ }
6823
6826
  constructor(ngxTranslate, document) {
6824
6827
  this.ngxTranslate = ngxTranslate;
6825
6828
  this.document = document;
6829
+ this._availableLocales = [];
6826
6830
  this._availableLanguages = [];
6827
6831
  }
6828
6832
  /**
@@ -6846,6 +6850,12 @@ class I18nService {
6846
6850
  setAvailableLanguages(languages) {
6847
6851
  this._availableLanguages = languages;
6848
6852
  }
6853
+ /**
6854
+ * Set the available UI locales
6855
+ */
6856
+ setAvailableLocales(locales) {
6857
+ this._availableLocales = locales;
6858
+ }
6849
6859
  /**
6850
6860
  * Translate the given key.
6851
6861
  */
@@ -6887,9 +6897,9 @@ class LocalizationService {
6887
6897
  constructor(i18nService, dataService) {
6888
6898
  this.i18nService = i18nService;
6889
6899
  this.dataService = dataService;
6890
- this.uiLanguageAndLocale$ = this.dataService.client
6891
- ?.uiState()
6892
- ?.stream$?.pipe(map$1(({ uiState }) => [uiState.language, uiState.locale ?? undefined]));
6900
+ this.uiLanguageAndLocale$ = this.dataService.client?.uiState()?.stream$?.pipe(map$1(({ uiState }) => {
6901
+ return [uiState.language, uiState.locale ?? undefined];
6902
+ }));
6893
6903
  this.direction$ = this.uiLanguageAndLocale$?.pipe(map$1(([languageCode]) => {
6894
6904
  return this.i18nService.isRTL(languageCode) ? 'rtl' : 'ltr';
6895
6905
  }));
@@ -7147,7 +7157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
7147
7157
  }], ctorParameters: function () { return [{ type: AlertsService }]; } });
7148
7158
 
7149
7159
  // Auto-generated by the set-version.js script.
7150
- const ADMIN_UI_VERSION = '2.1.5';
7160
+ const ADMIN_UI_VERSION = '2.2.0-next.0';
7151
7161
 
7152
7162
  /* eslint-disable @angular-eslint/directive-selector */
7153
7163
  class FormFieldControlDirective {
@@ -7754,267 +7764,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
7754
7764
  }] }]; } });
7755
7765
 
7756
7766
  class UiLanguageSwitcherDialogComponent {
7757
- constructor() {
7767
+ constructor(dataService, changeDetector) {
7768
+ this.dataService = dataService;
7769
+ this.changeDetector = changeDetector;
7770
+ this.isLoading = true;
7771
+ this.destroy$ = new Subject();
7758
7772
  this.availableLanguages = [];
7759
- this.availableLocales = [
7760
- 'AF',
7761
- 'AL',
7762
- 'DZ',
7763
- 'AS',
7764
- 'AD',
7765
- 'AO',
7766
- 'AI',
7767
- 'AQ',
7768
- 'AG',
7769
- 'AR',
7770
- 'AM',
7771
- 'AW',
7772
- 'AU',
7773
- 'AT',
7774
- 'AZ',
7775
- 'BS',
7776
- 'BH',
7777
- 'BD',
7778
- 'BB',
7779
- 'BY',
7780
- 'BE',
7781
- 'BZ',
7782
- 'BJ',
7783
- 'BM',
7784
- 'BT',
7785
- 'BO',
7786
- 'BQ',
7787
- 'BA',
7788
- 'BW',
7789
- 'BV',
7790
- 'BR',
7791
- 'IO',
7792
- 'BN',
7793
- 'BG',
7794
- 'BF',
7795
- 'BI',
7796
- 'CV',
7797
- 'KH',
7798
- 'CM',
7799
- 'CA',
7800
- 'KY',
7801
- 'CF',
7802
- 'TD',
7803
- 'CL',
7804
- 'CN',
7805
- 'CX',
7806
- 'CC',
7807
- 'CO',
7808
- 'KM',
7809
- 'CD',
7810
- 'CG',
7811
- 'CK',
7812
- 'CR',
7813
- 'HR',
7814
- 'CU',
7815
- 'CW',
7816
- 'CY',
7817
- 'CZ',
7818
- 'CI',
7819
- 'DK',
7820
- 'DJ',
7821
- 'DM',
7822
- 'DO',
7823
- 'EC',
7824
- 'EG',
7825
- 'SV',
7826
- 'GQ',
7827
- 'ER',
7828
- 'EE',
7829
- 'SZ',
7830
- 'ET',
7831
- 'FK',
7832
- 'FO',
7833
- 'FJ',
7834
- 'FI',
7835
- 'FR',
7836
- 'GF',
7837
- 'PF',
7838
- 'TF',
7839
- 'GA',
7840
- 'GM',
7841
- 'GE',
7842
- 'DE',
7843
- 'GH',
7844
- 'GI',
7845
- 'GR',
7846
- 'GL',
7847
- 'GD',
7848
- 'GP',
7849
- 'GU',
7850
- 'GT',
7851
- 'GG',
7852
- 'GN',
7853
- 'GW',
7854
- 'GY',
7855
- 'HT',
7856
- 'HM',
7857
- 'VA',
7858
- 'HN',
7859
- 'HK',
7860
- 'HU',
7861
- 'IS',
7862
- 'IN',
7863
- 'ID',
7864
- 'IR',
7865
- 'IQ',
7866
- 'IE',
7867
- 'IM',
7868
- 'IL',
7869
- 'IT',
7870
- 'JM',
7871
- 'JP',
7872
- 'JE',
7873
- 'JO',
7874
- 'KZ',
7875
- 'KE',
7876
- 'KI',
7877
- 'KP',
7878
- 'KR',
7879
- 'KW',
7880
- 'KG',
7881
- 'LA',
7882
- 'LV',
7883
- 'LB',
7884
- 'LS',
7885
- 'LR',
7886
- 'LY',
7887
- 'LI',
7888
- 'LT',
7889
- 'LU',
7890
- 'MO',
7891
- 'MG',
7892
- 'MW',
7893
- 'MY',
7894
- 'MV',
7895
- 'ML',
7896
- 'MT',
7897
- 'MH',
7898
- 'MQ',
7899
- 'MR',
7900
- 'MU',
7901
- 'YT',
7902
- 'MX',
7903
- 'FM',
7904
- 'MD',
7905
- 'MC',
7906
- 'MN',
7907
- 'ME',
7908
- 'MS',
7909
- 'MA',
7910
- 'MZ',
7911
- 'MM',
7912
- 'NA',
7913
- 'NR',
7914
- 'NP',
7915
- 'NL',
7916
- 'NC',
7917
- 'NZ',
7918
- 'NI',
7919
- 'NE',
7920
- 'NG',
7921
- 'NU',
7922
- 'NF',
7923
- 'MK',
7924
- 'MP',
7925
- 'NO',
7926
- 'OM',
7927
- 'PK',
7928
- 'PW',
7929
- 'PS',
7930
- 'PA',
7931
- 'PG',
7932
- 'PY',
7933
- 'PE',
7934
- 'PH',
7935
- 'PN',
7936
- 'PL',
7937
- 'PT',
7938
- 'PR',
7939
- 'QA',
7940
- 'RO',
7941
- 'RU',
7942
- 'RW',
7943
- 'RE',
7944
- 'BL',
7945
- 'SH',
7946
- 'KN',
7947
- 'LC',
7948
- 'MF',
7949
- 'PM',
7950
- 'VC',
7951
- 'WS',
7952
- 'SM',
7953
- 'ST',
7954
- 'SA',
7955
- 'SN',
7956
- 'RS',
7957
- 'SC',
7958
- 'SL',
7959
- 'SG',
7960
- 'SX',
7961
- 'SK',
7962
- 'SI',
7963
- 'SB',
7964
- 'SO',
7965
- 'ZA',
7966
- 'GS',
7967
- 'SS',
7968
- 'ES',
7969
- 'LK',
7970
- 'SD',
7971
- 'SR',
7972
- 'SJ',
7973
- 'SE',
7974
- 'CH',
7975
- 'SY',
7976
- 'TW',
7977
- 'TJ',
7978
- 'TZ',
7979
- 'TH',
7980
- 'TL',
7981
- 'TG',
7982
- 'TK',
7983
- 'TO',
7984
- 'TT',
7985
- 'TN',
7986
- 'TR',
7987
- 'TM',
7988
- 'TC',
7989
- 'TV',
7990
- 'UG',
7991
- 'UA',
7992
- 'AE',
7993
- 'GB',
7994
- 'UM',
7995
- 'US',
7996
- 'UY',
7997
- 'UZ',
7998
- 'VU',
7999
- 'VE',
8000
- 'VN',
8001
- 'VG',
8002
- 'VI',
8003
- 'WF',
8004
- 'EH',
8005
- 'YE',
8006
- 'ZM',
8007
- 'ZW',
8008
- 'AX',
8009
- ];
7773
+ this.availableLocales = [];
8010
7774
  this.availableCurrencyCodes = Object.values(CurrencyCode);
8011
- this.selectedCurrencyCode = 'USD';
8012
7775
  this.now = new Date().toISOString();
8013
7776
  const browserLanguage = navigator.language.split('-');
8014
7777
  this.browserDefaultLocale = browserLanguage.length === 1 ? undefined : browserLanguage[1];
8015
7778
  }
8016
7779
  ngOnInit() {
8017
7780
  this.updatePreviewLocale();
7781
+ this.dataService.settings
7782
+ .getActiveChannel()
7783
+ .mapStream(data => data.activeChannel.defaultCurrencyCode)
7784
+ .pipe(take$1(1), takeUntil$1(this.destroy$), finalize$1(() => {
7785
+ this.isLoading = false;
7786
+ this.changeDetector.markForCheck();
7787
+ }))
7788
+ .subscribe(x => {
7789
+ this.selectedCurrencyCode = x;
7790
+ });
7791
+ }
7792
+ ngOnDestroy() {
7793
+ this.destroy$.next();
7794
+ this.destroy$.complete();
8018
7795
  }
8019
7796
  updatePreviewLocale() {
8020
7797
  if (!this.currentLocale || this.currentLocale.length === 0 || this.currentLocale.length === 2) {
@@ -8033,13 +7810,13 @@ class UiLanguageSwitcherDialogComponent {
8033
7810
  }
8034
7811
  return [languageCode, region.toUpperCase()].join('-');
8035
7812
  }
8036
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: UiLanguageSwitcherDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8037
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: UiLanguageSwitcherDialogComponent, selector: "vdr-ui-language-switcher", ngImport: i0, template: "<ng-template vdrDialogTitle>{{ 'common.select-display-language' | translate }}</ng-template>\r\n<div class=\"clr-row\">\r\n <div class=\"flex pl-2 mb-2\">\r\n <vdr-form-field [label]=\"'common.language' | translate\" class=\"mr-2\">\r\n <select name=\"options\" [(ngModel)]=\"currentLanguage\" (ngModelChange)=\"updatePreviewLocale()\">\r\n <option *ngFor=\"let code of availableLanguages | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeLanguageName }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.locale' | translate\">\r\n <ng-select\r\n appendTo=\"body\"\r\n [items]=\"availableLocales\"\r\n [(ngModel)]=\"currentLocale\"\r\n (ngModelChange)=\"updatePreviewLocale()\"\r\n [placeholder]=\"'common.browser-default' | translate\"\r\n >\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n </div>\r\n</div>\r\n<div class=\"card\">\r\n <div class=\"card-header\">\r\n <span class=\"pr-1\">{{ 'common.sample-formatting' | translate }}:</span\r\n ><strong>{{ previewLocale | localeLanguageName : previewLocale }}</strong>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.medium-date' | translate\">\r\n {{ now | localeDate : 'medium' : previewLocale }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.short-date' | translate\">\r\n {{ now | localeDate : 'short' : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <select name=\"currency\" class=\"currency\" [(ngModel)]=\"selectedCurrencyCode\">\r\n <option *ngFor=\"let code of availableCurrencyCodes | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeCurrencyName : 'full' : previewLocale }})\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ 12345 | localeCurrency : selectedCurrencyCode : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"setLanguage()\" class=\"btn btn-primary\">\r\n {{ 'common.set-language' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: ["select.currency{max-width:200px}input.locale{text-transform:uppercase}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3$1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3$1.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "component", type: FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "directive", type: DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "component", type: LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { kind: "pipe", type: i2.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleCurrencyNamePipe, name: "localeCurrencyName" }, { kind: "pipe", type: SortPipe, name: "sort" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: LocaleCurrencyPipe, name: "localeCurrency" }, { kind: "pipe", type: LocaleLanguageNamePipe, name: "localeLanguageName" }, { kind: "pipe", type: LocaleRegionNamePipe, name: "localeRegionName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7813
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: UiLanguageSwitcherDialogComponent, deps: [{ token: DataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
7814
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: UiLanguageSwitcherDialogComponent, selector: "vdr-ui-language-switcher", ngImport: i0, template: "<ng-template vdrDialogTitle>{{ 'common.select-display-language' | translate }}</ng-template>\r\n\r\n<ng-container *ngIf=\"isLoading\">\r\n <div class=\"progress loop\"></div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"clr-row\">\r\n <div class=\"flex pl-2 mb-2\">\r\n <vdr-form-field [label]=\"'common.language' | translate\" class=\"mr-2\">\r\n <select name=\"options\" [(ngModel)]=\"currentLanguage\" (ngModelChange)=\"updatePreviewLocale()\">\r\n <option *ngFor=\"let code of availableLanguages | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeLanguageName }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.locale' | translate\">\r\n <ng-select appendTo=\"body\" [items]=\"availableLocales\" [(ngModel)]=\"currentLocale\"\r\n (ngModelChange)=\"updatePreviewLocale()\" [placeholder]=\"'common.browser-default' | translate\">\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n </div>\r\n </div>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <span class=\"pr-1\">{{ 'common.sample-formatting' | translate }}:</span><strong>{{ previewLocale |\r\n localeLanguageName : previewLocale }}</strong>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.medium-date' | translate\">\r\n {{ now | localeDate : 'medium' : previewLocale }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.short-date' | translate\">\r\n {{ now | localeDate : 'short' : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <select name=\"currency\" class=\"currency\" [(ngModel)]=\"selectedCurrencyCode\">\r\n <option *ngFor=\"let code of availableCurrencyCodes | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeCurrencyName : 'full' : previewLocale }})\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ 12345 | localeCurrency : selectedCurrencyCode : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"setLanguage()\" class=\"btn btn-primary\">\r\n {{ 'common.set-language' | translate }}\r\n </button>\r\n</ng-template>", styles: ["select.currency{max-width:200px}input.locale{text-transform:uppercase}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3$1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3$1.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "component", type: FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "directive", type: DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "component", type: LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { kind: "pipe", type: i2.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: LocaleCurrencyNamePipe, name: "localeCurrencyName" }, { kind: "pipe", type: SortPipe, name: "sort" }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: LocaleCurrencyPipe, name: "localeCurrency" }, { kind: "pipe", type: LocaleLanguageNamePipe, name: "localeLanguageName" }, { kind: "pipe", type: LocaleRegionNamePipe, name: "localeRegionName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8038
7815
  }
8039
7816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: UiLanguageSwitcherDialogComponent, decorators: [{
8040
7817
  type: Component,
8041
- args: [{ selector: 'vdr-ui-language-switcher', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>{{ 'common.select-display-language' | translate }}</ng-template>\r\n<div class=\"clr-row\">\r\n <div class=\"flex pl-2 mb-2\">\r\n <vdr-form-field [label]=\"'common.language' | translate\" class=\"mr-2\">\r\n <select name=\"options\" [(ngModel)]=\"currentLanguage\" (ngModelChange)=\"updatePreviewLocale()\">\r\n <option *ngFor=\"let code of availableLanguages | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeLanguageName }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.locale' | translate\">\r\n <ng-select\r\n appendTo=\"body\"\r\n [items]=\"availableLocales\"\r\n [(ngModel)]=\"currentLocale\"\r\n (ngModelChange)=\"updatePreviewLocale()\"\r\n [placeholder]=\"'common.browser-default' | translate\"\r\n >\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n </div>\r\n</div>\r\n<div class=\"card\">\r\n <div class=\"card-header\">\r\n <span class=\"pr-1\">{{ 'common.sample-formatting' | translate }}:</span\r\n ><strong>{{ previewLocale | localeLanguageName : previewLocale }}</strong>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.medium-date' | translate\">\r\n {{ now | localeDate : 'medium' : previewLocale }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.short-date' | translate\">\r\n {{ now | localeDate : 'short' : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <select name=\"currency\" class=\"currency\" [(ngModel)]=\"selectedCurrencyCode\">\r\n <option *ngFor=\"let code of availableCurrencyCodes | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeCurrencyName : 'full' : previewLocale }})\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ 12345 | localeCurrency : selectedCurrencyCode : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"setLanguage()\" class=\"btn btn-primary\">\r\n {{ 'common.set-language' | translate }}\r\n </button>\r\n</ng-template>\r\n", styles: ["select.currency{max-width:200px}input.locale{text-transform:uppercase}\n"] }]
8042
- }], ctorParameters: function () { return []; } });
7818
+ args: [{ selector: 'vdr-ui-language-switcher', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>{{ 'common.select-display-language' | translate }}</ng-template>\r\n\r\n<ng-container *ngIf=\"isLoading\">\r\n <div class=\"progress loop\"></div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"!isLoading\">\r\n <div class=\"clr-row\">\r\n <div class=\"flex pl-2 mb-2\">\r\n <vdr-form-field [label]=\"'common.language' | translate\" class=\"mr-2\">\r\n <select name=\"options\" [(ngModel)]=\"currentLanguage\" (ngModelChange)=\"updatePreviewLocale()\">\r\n <option *ngFor=\"let code of availableLanguages | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeLanguageName }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.locale' | translate\">\r\n <ng-select appendTo=\"body\" [items]=\"availableLocales\" [(ngModel)]=\"currentLocale\"\r\n (ngModelChange)=\"updatePreviewLocale()\" [placeholder]=\"'common.browser-default' | translate\">\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item }} ({{ item | localeRegionName }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n </div>\r\n </div>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <span class=\"pr-1\">{{ 'common.sample-formatting' | translate }}:</span><strong>{{ previewLocale |\r\n localeLanguageName : previewLocale }}</strong>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.medium-date' | translate\">\r\n {{ now | localeDate : 'medium' : previewLocale }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.short-date' | translate\">\r\n {{ now | localeDate : 'short' : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <select name=\"currency\" class=\"currency\" [(ngModel)]=\"selectedCurrencyCode\">\r\n <option *ngFor=\"let code of availableCurrencyCodes | sort\" [value]=\"code\">\r\n {{ code | uppercase }} ({{ code | localeCurrencyName : 'full' : previewLocale }})\r\n </option>\r\n </select>\r\n </div>\r\n <div class=\"clr-col-sm-4\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ 12345 | localeCurrency : selectedCurrencyCode : previewLocale }}\r\n </vdr-labeled-data>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"setLanguage()\" class=\"btn btn-primary\">\r\n {{ 'common.set-language' | translate }}\r\n </button>\r\n</ng-template>", styles: ["select.currency{max-width:200px}input.locale{text-transform:uppercase}\n"] }]
7819
+ }], ctorParameters: function () { return [{ type: DataService }, { type: i0.ChangeDetectorRef }]; } });
8043
7820
 
8044
7821
  /**
8045
7822
  * This service handles logic relating to authentication of the current user.
@@ -9449,6 +9226,7 @@ class AppShellComponent {
9449
9226
  this.localizationService = localizationService;
9450
9227
  this.version = ADMIN_UI_VERSION;
9451
9228
  this.availableLanguages = [];
9229
+ this.availableLocales = [];
9452
9230
  this.hideVendureBranding = getAppConfig().hideVendureBranding;
9453
9231
  this.devMode = isDevMode();
9454
9232
  }
@@ -9459,6 +9237,7 @@ class AppShellComponent {
9459
9237
  .userStatus()
9460
9238
  .single$.pipe(map(data => data.userStatus.username));
9461
9239
  this.availableLanguages = this.i18nService.availableLanguages;
9240
+ this.availableLocales = this.i18nService.availableLocales;
9462
9241
  this.pageTitle$ = this.breadcrumbService.breadcrumbs$.pipe(map(breadcrumbs => breadcrumbs[breadcrumbs.length - 1].label));
9463
9242
  this.mainNavExpanded$ = this.dataService.client
9464
9243
  .uiState()
@@ -9466,15 +9245,18 @@ class AppShellComponent {
9466
9245
  }
9467
9246
  selectUiLanguage() {
9468
9247
  this.uiLanguageAndLocale$
9469
- .pipe(take(1), switchMap(([currentLanguage, currentLocale]) => this.modalService.fromComponent(UiLanguageSwitcherDialogComponent, {
9470
- closable: true,
9471
- size: 'lg',
9472
- locals: {
9473
- availableLanguages: this.availableLanguages,
9474
- currentLanguage,
9475
- currentLocale,
9476
- },
9477
- })), switchMap(result => result ? this.dataService.client.setUiLanguage(result[0], result[1]) : EMPTY))
9248
+ .pipe(take(1), switchMap(([currentLanguage, currentLocale]) => {
9249
+ return this.modalService.fromComponent(UiLanguageSwitcherDialogComponent, {
9250
+ closable: true,
9251
+ size: 'lg',
9252
+ locals: {
9253
+ availableLocales: this.availableLocales,
9254
+ availableLanguages: this.availableLanguages,
9255
+ currentLanguage: currentLanguage,
9256
+ currentLocale: currentLocale,
9257
+ },
9258
+ });
9259
+ }), switchMap(result => result ? this.dataService.client.setUiLanguage(result[0], result[1]) : EMPTY))
9478
9260
  .subscribe(result => {
9479
9261
  if (result.setUiLanguage) {
9480
9262
  this.i18nService.setLanguage(result.setUiLanguage);
@@ -20028,24 +19810,32 @@ class CoreModule {
20028
19810
  this.alertsService = alertsService;
20029
19811
  this.dataService = dataService;
20030
19812
  this.notificationService = notificationService;
20031
- this.initUiLanguages();
19813
+ this.initUiLanguagesAndLocales();
20032
19814
  this.initUiTitle();
20033
19815
  this.initAlerts();
20034
19816
  }
20035
- initUiLanguages() {
19817
+ initUiLanguagesAndLocales() {
20036
19818
  const defaultLanguage = getDefaultUiLanguage();
19819
+ const defaultLocale = getDefaultUiLocale();
20037
19820
  const lastLanguage = this.localStorageService.get('uiLanguageCode');
20038
19821
  const availableLanguages = getAppConfig().availableLanguages;
20039
- if (!availableLanguages.includes(defaultLanguage)) {
19822
+ const availableLocales = getAppConfig().availableLocales;
19823
+ if (!!defaultLanguage && !availableLanguages.includes(defaultLanguage)) {
20040
19824
  throw new Error(`The defaultLanguage "${defaultLanguage}" must be one of the availableLanguages [${availableLanguages
20041
19825
  .map(l => `"${l}"`)
20042
19826
  .join(', ')}]`);
20043
19827
  }
19828
+ if (!!defaultLocale && !availableLocales.includes(defaultLocale)) {
19829
+ throw new Error(`The defaultLocale "${defaultLocale}" must be one of the availableLocales [${availableLocales
19830
+ .map(l => `"${l}"`)
19831
+ .join(', ')}]`);
19832
+ }
20044
19833
  const uiLanguage = lastLanguage && availableLanguages.includes(lastLanguage) ? lastLanguage : defaultLanguage;
20045
19834
  this.localStorageService.set('uiLanguageCode', uiLanguage);
20046
19835
  this.i18nService.setLanguage(uiLanguage);
20047
19836
  this.i18nService.setDefaultLanguage(defaultLanguage);
20048
19837
  this.i18nService.setAvailableLanguages(availableLanguages || [defaultLanguage]);
19838
+ this.i18nService.setAvailableLocales(availableLocales || [defaultLocale]);
20049
19839
  }
20050
19840
  initUiTitle() {
20051
19841
  const title = getAppConfig().brand || 'Vendure';