@sumaris-net/ngx-components 18.2.5 → 18.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/doc/changelog.md +10 -0
  2. package/esm2022/public_api.mjs +2 -1
  3. package/esm2022/src/app/admin/services/person.service.mjs +11 -8
  4. package/esm2022/src/app/core/form/properties/properties.form.mjs +1 -1
  5. package/esm2022/src/app/core/services/base-entity-service.class.mjs +12 -12
  6. package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
  7. package/esm2022/src/app/core/table/testing/table2.testing.mjs +1 -1
  8. package/esm2022/src/app/shared/form/field.component.mjs +1 -1
  9. package/esm2022/src/app/shared/functions.mjs +19 -13
  10. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +25 -9
  11. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +4 -4
  12. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
  13. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +20 -18
  14. package/esm2022/src/app/shared/regexps.mjs +96 -0
  15. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +4 -3
  16. package/esm2022/src/app/shared/services.mjs +16 -13
  17. package/fesm2022/sumaris-net.ngx-components.mjs +202 -78
  18. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  19. package/package.json +1 -1
  20. package/public_api.d.ts +1 -0
  21. package/src/app/core/services/base-entity-service.class.d.ts +8 -2
  22. package/src/app/shared/functions.d.ts +7 -4
  23. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +3 -1
  24. package/src/app/shared/regexps.d.ts +32 -0
  25. package/src/assets/manifest.json +1 -1
  26. package/src/theme/_material.scss +11 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sumaris-net/ngx-components",
3
3
  "description": "SUMARiS Angular components",
4
- "version": "18.2.5",
4
+ "version": "18.2.6",
5
5
  "author": "contact@e-is.pro",
6
6
  "license": "AGPL-3.0",
7
7
  "readmeFilename": "README.md",
package/public_api.d.ts CHANGED
@@ -108,6 +108,7 @@ export * from './src/app/shared/debug/debug-service.class';
108
108
  export * from './src/app/shared/types';
109
109
  export * from './src/app/shared/dates';
110
110
  export * from './src/app/shared/functions';
111
+ export * from './src/app/shared/regexps';
111
112
  export * from './src/app/shared/services';
112
113
  export * from './src/app/shared/forms';
113
114
  export * from './src/app/shared/observables';
@@ -101,7 +101,10 @@ export declare abstract class BaseEntityService<T extends Entity<T, ID>, F exten
101
101
  delete(entity: T, opts?: EntitySaveOptions | any): Promise<any>;
102
102
  listenChanges(id: ID, opts?: EntityServiceListenChangesOptions<T>): Observable<T>;
103
103
  copyIdAndUpdateDate(source: T, target: T): void;
104
- fromObject(source: any, toEntity?: boolean | ((source: any, opts?: any) => T), opts?: any): T;
104
+ fromObject(source: any, opts?: {
105
+ toEntity?: boolean | ((source: any, opts?: any) => T);
106
+ [key: string]: any;
107
+ }): T;
105
108
  asFilter(source: any): F;
106
109
  equals(d1: T, d2: T): boolean;
107
110
  isNew(data: T): boolean;
@@ -116,7 +119,10 @@ export declare abstract class BaseEntityService<T extends Entity<T, ID>, F exten
116
119
  isNewFn(data: T): boolean;
117
120
  protected ngOnStart(): Promise<void>;
118
121
  protected fillDefaultProperties(source: T): void;
119
- protected fromObjects(sources: any[], toEntity?: boolean | ((source: any, opts?: any) => T), opts?: any): T[];
122
+ protected fromObjects(sources: any[], opts?: {
123
+ toEntity?: boolean | ((source: any, opts?: any) => T);
124
+ [key: string]: any;
125
+ }): T[];
120
126
  protected asObject(source: T, opts?: EntityAsObjectOptions): any;
121
127
  protected getRefetchQueriesForMutation(opts?: EntitySaveOptions): ((result: FetchResult<{
122
128
  data: any;
@@ -1,4 +1,5 @@
1
1
  import { KeysEnum, KeyValueType } from './types';
2
+ import { RegExpUtils } from './regexps';
2
3
  export declare function isNil<T>(obj: T | null | undefined): boolean;
3
4
  export declare function isNilOrBlank<T>(obj: T | null | undefined): boolean;
4
5
  export declare function isNotNil<T>(obj: T | null | undefined): boolean;
@@ -36,7 +37,10 @@ export declare function toInt(obj: string | null | undefined, defaultValue?: num
36
37
  export declare function toNotNil<T = any>(obj: T, defaultValue?: T): any | null;
37
38
  export declare function removeDuplicatesFromArray<T>(obj: T[] | null | undefined, property?: string): T[] | null | undefined;
38
39
  export declare function startsWithUpperCase(input: string, search: string): boolean;
39
- export declare function matchUpperCase(input: string, regexp: string): boolean;
40
+ /**
41
+ * @deprecated Use Regexps.matchUpperCase instead
42
+ */
43
+ export declare const matchUpperCase: typeof RegExpUtils.matchUpperCase;
40
44
  /**
41
45
  * Remove trailing slash if any. Examples :
42
46
  * - '/test/' -> '/test'
@@ -59,9 +63,8 @@ export declare function changeCaseToUnderscore(value: string): string;
59
63
  */
60
64
  export declare function underscoreToChangeCase(value: string): string;
61
65
  export declare function removeDiacritics(text: string): string;
62
- export declare function suggestFromStringArray(values: string[], value: any, options?: {
63
- searchAttribute?: string;
64
- searchAttributes?: string[];
66
+ export declare function suggestFromStringArray(values: string[], searchText: any, opts?: {
67
+ anySearch?: boolean;
65
68
  }): string[];
66
69
  export declare function joinPropertiesPath<T = any>(obj: T, properties: string[], separator?: string): string | undefined;
67
70
  export declare function joinProperties<T = any, K extends keyof T = any>(obj: T, keys: K[], separator?: string): string | undefined;
@@ -83,6 +83,7 @@ export declare class MatAutocompleteField implements OnInit, AfterViewInit, OnDe
83
83
  trimSearchText: boolean;
84
84
  splitSearchText: boolean;
85
85
  selectInputContentOnFocus: boolean;
86
+ selectInputContentOnFocusDelay: number;
86
87
  /**
87
88
  * @deprecated Use panelClass instead
88
89
  */
@@ -159,7 +160,7 @@ export declare class MatAutocompleteField implements OnInit, AfterViewInit, OnDe
159
160
  */
160
161
  private _fixSearchbarOverlay;
161
162
  static ɵfac: i0.ɵɵFactoryDeclaration<MatAutocompleteField, [null, null, null, null, null, { optional: true; }]>;
162
- static ɵcmp: i0.ɵɵComponentDeclaration<MatAutocompleteField, "mat-autocomplete-field", never, { "equals": { "alias": "equals"; "required": false; }; "logPrefix": { "alias": "logPrefix"; "required": false; }; "formControl": { "alias": "formControl"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "suggestFn": { "alias": "suggestFn"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hideRequiredMarker": { "alias": "hideRequiredMarker"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "debounceTime": { "alias": "debounceTime"; "required": false; }; "displaySeparator": { "alias": "displaySeparator"; "required": false; }; "displayWith": { "alias": "displayWith"; "required": false; }; "displayAttributes": { "alias": "displayAttributes"; "required": false; }; "displayColumnSizes": { "alias": "displayColumnSizes"; "required": false; }; "displayColumnNames": { "alias": "displayColumnNames"; "required": false; }; "highlightAccent": { "alias": "highlightAccent"; "required": false; }; "showAllOnFocus": { "alias": "showAllOnFocus"; "required": false; }; "showPanelOnFocus": { "alias": "showPanelOnFocus"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "config": { "alias": "config"; "required": false; }; "i18nPrefix": { "alias": "i18nPrefix"; "required": false; }; "noResultMessage": { "alias": "noResultMessage"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "disableRipple": { "alias": "disableRipple"; "required": false; }; "matAutocompletePosition": { "alias": "matAutocompletePosition"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "fetchMoreThreshold": { "alias": "fetchMoreThreshold"; "required": false; }; "suggestLengthThreshold": { "alias": "suggestLengthThreshold"; "required": false; }; "showLoadingSpinner": { "alias": "showLoadingSpinner"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "showSearchBar": { "alias": "showSearchBar"; "required": false; }; "stickySearchBar": { "alias": "stickySearchBar"; "required": false; }; "applyImplicitValue": { "alias": "applyImplicitValue"; "required": false; }; "dropButtonTitle": { "alias": "dropButtonTitle"; "required": false; }; "clearButtonTitle": { "alias": "clearButtonTitle"; "required": false; }; "trimSearchText": { "alias": "trimSearchText"; "required": false; }; "splitSearchText": { "alias": "splitSearchText"; "required": false; }; "selectInputContentOnFocus": { "alias": "selectInputContentOnFocus"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "items": { "alias": "items"; "required": false; }; }, { "clicked": "click"; "blurred": "blur"; "focused": "focus"; "dropButtonClick": "dropButtonClick"; "keydownEscape": "keydown.escape"; "keyupEnter": "keyup.enter"; "selectionChange": "selectionChange"; }, never, ["[matAfter]", "[matPrefix]", "[matSuffix]", "mat-error,[matError]", "mat-hint:not([align='end']),[matHint]", "mat-hint[align='end']"], false, never>;
163
+ static ɵcmp: i0.ɵɵComponentDeclaration<MatAutocompleteField, "mat-autocomplete-field", never, { "equals": { "alias": "equals"; "required": false; }; "logPrefix": { "alias": "logPrefix"; "required": false; }; "formControl": { "alias": "formControl"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "suggestFn": { "alias": "suggestFn"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hideRequiredMarker": { "alias": "hideRequiredMarker"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "debounceTime": { "alias": "debounceTime"; "required": false; }; "displaySeparator": { "alias": "displaySeparator"; "required": false; }; "displayWith": { "alias": "displayWith"; "required": false; }; "displayAttributes": { "alias": "displayAttributes"; "required": false; }; "displayColumnSizes": { "alias": "displayColumnSizes"; "required": false; }; "displayColumnNames": { "alias": "displayColumnNames"; "required": false; }; "highlightAccent": { "alias": "highlightAccent"; "required": false; }; "showAllOnFocus": { "alias": "showAllOnFocus"; "required": false; }; "showPanelOnFocus": { "alias": "showPanelOnFocus"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "config": { "alias": "config"; "required": false; }; "i18nPrefix": { "alias": "i18nPrefix"; "required": false; }; "noResultMessage": { "alias": "noResultMessage"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "disableRipple": { "alias": "disableRipple"; "required": false; }; "matAutocompletePosition": { "alias": "matAutocompletePosition"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "fetchMoreThreshold": { "alias": "fetchMoreThreshold"; "required": false; }; "suggestLengthThreshold": { "alias": "suggestLengthThreshold"; "required": false; }; "showLoadingSpinner": { "alias": "showLoadingSpinner"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "showSearchBar": { "alias": "showSearchBar"; "required": false; }; "stickySearchBar": { "alias": "stickySearchBar"; "required": false; }; "applyImplicitValue": { "alias": "applyImplicitValue"; "required": false; }; "dropButtonTitle": { "alias": "dropButtonTitle"; "required": false; }; "clearButtonTitle": { "alias": "clearButtonTitle"; "required": false; }; "trimSearchText": { "alias": "trimSearchText"; "required": false; }; "splitSearchText": { "alias": "splitSearchText"; "required": false; }; "selectInputContentOnFocus": { "alias": "selectInputContentOnFocus"; "required": false; }; "selectInputContentOnFocusDelay": { "alias": "selectInputContentOnFocusDelay"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "items": { "alias": "items"; "required": false; }; }, { "clicked": "click"; "blurred": "blur"; "focused": "focus"; "dropButtonClick": "dropButtonClick"; "keydownEscape": "keydown.escape"; "keyupEnter": "keyup.enter"; "selectionChange": "selectionChange"; }, never, ["[matAfter]", "[matPrefix]", "[matSuffix]", "mat-error,[matError]", "mat-hint:not([align='end']),[matHint]", "mat-hint[align='end']"], false, never>;
163
164
  static ngAcceptInputType_required: unknown;
164
165
  static ngAcceptInputType_hideRequiredMarker: unknown;
165
166
  static ngAcceptInputType_mobile: unknown;
@@ -179,5 +180,6 @@ export declare class MatAutocompleteField implements OnInit, AfterViewInit, OnDe
179
180
  static ngAcceptInputType_trimSearchText: unknown;
180
181
  static ngAcceptInputType_splitSearchText: unknown;
181
182
  static ngAcceptInputType_selectInputContentOnFocus: unknown;
183
+ static ngAcceptInputType_selectInputContentOnFocusDelay: unknown;
182
184
  static ngAcceptInputType_readonly: unknown;
183
185
  }
@@ -0,0 +1,32 @@
1
+ export declare abstract class RegExpUtils {
2
+ private static _cachedSearchRegexps;
3
+ private static _cachedSearchTexts;
4
+ private static MAX_CACHE_SIZE;
5
+ private static SPECIAL_CHARACTERS_REGEXP;
6
+ private static SPECIAL_CHARACTERS_REPLACEMENT_MAP;
7
+ /**
8
+ * Cleans the provided search text by trimming whitespace and removing or condensing
9
+ * wildcard characters based on the specified options.
10
+ * (e.g. 'a**' becomes 'a', '*' becomes '', etc.)
11
+ *
12
+ * @param {string} searchText - The search text to be cleaned.
13
+ * @param {Object} [opts] - Optional settings for cleaning the search text.
14
+ * @param {boolean} [opts.anySearch] - If true, the search text is cleaned for any match. If false, search as a prefix
15
+ * @return {string} - The cleaned search text.
16
+ */
17
+ static cleanSearchText(searchText: string, opts?: {
18
+ trim?: boolean;
19
+ }): string;
20
+ /**
21
+ * Compiles a regular expression from the provided search text, using a static cache to store
22
+ * previously compiled regular expressions for faster retrieval.
23
+ *
24
+ * @param {string} searchText - The text to compile into a regular expression.
25
+ * @param flags
26
+ * @return {RegExp} - The compiled regular expression.
27
+ */
28
+ static compileSearchRegexp(searchText: string, flags?: string): RegExp;
29
+ static match(input: string, regexp: string | RegExp): boolean;
30
+ static matchUpperCase(input: string, regexp: string | RegExp): boolean;
31
+ static hasWildcardCharacter(input: string): boolean;
32
+ }
@@ -2,7 +2,7 @@
2
2
  "name": "ngx-sumaris-components",
3
3
  "short_name": "ngx-sumaris-components",
4
4
  "manifest_version": 1,
5
- "version": "18.2.5",
5
+ "version": "18.2.6",
6
6
  "default_locale": "fr",
7
7
  "description": "Angular components for building beautiful and responsive Apps",
8
8
  "icons": [{
@@ -30,10 +30,20 @@
30
30
  .mat-mdc-tab-header {
31
31
  --mat-tab-header-label-text-tracking: 0.0178571429em;
32
32
  }
33
+
34
+ // Drop down arrow of the mat-select (e.g. used in autocomplete - mobile)
33
35
  .mat-form-field-appearance-fill .mat-mdc-select-arrow-wrapper {
34
- transform: translateY(0px) !important;
36
+ // FIXME: should be removed - not need anymore to fix arrow position ?
37
+ //transform: translateY(0px) !important;
38
+ }
39
+
40
+ // Allow to hidden the down arrow of the mat-select (e.g. used in autocomplete - desktop + multiple )
41
+ .mat-mdc-select.mat-mdc-select-arrow-hidden .mat-mdc-select-arrow-wrapper {
42
+ display: none;
43
+ visibility: hidden;
35
44
  }
36
45
 
46
+
37
47
  // Icon, Button
38
48
  .mat-button.mat-primary,
39
49
  .mat-icon.mat-primary,