@sumaris-net/ngx-components 1.20.26 → 1.20.29

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 (39) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +120 -113
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/doc/changelog.md +7 -0
  6. package/esm2015/public_api.js +3 -1
  7. package/esm2015/src/app/core/form/form-buttons-bar.component.js +2 -2
  8. package/esm2015/src/app/shared/functions.js +1 -60
  9. package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +4 -3
  10. package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +3 -2
  11. package/esm2015/src/app/shared/material/boolean/material.boolean.js +3 -2
  12. package/esm2015/src/app/shared/material/chips/material.chips.js +4 -3
  13. package/esm2015/src/app/shared/material/chips/testing/chips.test.js +3 -2
  14. package/esm2015/src/app/shared/material/datetime/material.date.js +3 -2
  15. package/esm2015/src/app/shared/material/datetime/material.dateshort.js +3 -2
  16. package/esm2015/src/app/shared/material/datetime/material.datetime.js +4 -3
  17. package/esm2015/src/app/shared/material/duration/material.duration.js +3 -2
  18. package/esm2015/src/app/shared/material/latlong/material.latlong.js +3 -2
  19. package/esm2015/src/app/shared/pipes/arrays.pipe.js +1 -1
  20. package/esm2015/src/app/shared/pipes/form.pipes.js +2 -4
  21. package/esm2015/src/app/shared/pipes/highlight.pipe.js +4 -4
  22. package/esm2015/src/app/shared/pipes/string.pipes.js +7 -18
  23. package/esm2015/src/app/shared/services/memory-entity-service.class.js +12 -1
  24. package/esm2015/src/app/shared/services.js +61 -0
  25. package/fesm2015/sumaris-net.ngx-components.js +95 -89
  26. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  27. package/package.json +1 -1
  28. package/public_api.d.ts +2 -0
  29. package/src/app/shared/functions.d.ts +0 -9
  30. package/src/app/shared/material/boolean/material.boolean.d.ts +2 -1
  31. package/src/app/shared/material/datetime/material.date.d.ts +2 -1
  32. package/src/app/shared/material/datetime/material.dateshort.d.ts +2 -1
  33. package/src/app/shared/material/datetime/material.datetime.d.ts +2 -1
  34. package/src/app/shared/material/duration/material.duration.d.ts +6 -5
  35. package/src/app/shared/material/latlong/material.latlong.d.ts +2 -1
  36. package/src/app/shared/pipes/form.pipes.d.ts +1 -2
  37. package/src/app/shared/services/memory-entity-service.class.d.ts +7 -0
  38. package/src/app/shared/services.d.ts +9 -0
  39. package/sumaris-net.ngx-components.metadata.json +1 -1
@@ -0,0 +1,61 @@
1
+ import { __awaiter } from "tslib";
2
+ import { getPropertyByPathAsString, isNotEmptyArray, isNotNil, isNotNilOrBlank, matchUpperCase, propertiesPathComparator, startsWithUpperCase } from './functions';
3
+ export function suggestFromArray(items, value, opts) {
4
+ if (isNotNil(value) && typeof value === 'object')
5
+ return { data: [value] };
6
+ value = (typeof value === 'string' && value !== '*') && value.toUpperCase() || undefined;
7
+ const keys = opts && (opts.searchAttribute && [opts.searchAttribute] || opts.searchAttributes) || ['label'];
8
+ if (!items) {
9
+ return { data: [], total: 0 };
10
+ }
11
+ // Filter items
12
+ let filteredItems = items;
13
+ if (isNotNilOrBlank(value)) {
14
+ // If wildcard, search using regexp
15
+ if (value.indexOf('*') !== -1) {
16
+ value = value.replace(/[*]+/g, '.*');
17
+ filteredItems = filteredItems.filter(v => keys.findIndex(key => matchUpperCase(getPropertyByPathAsString(v, key), value)) !== -1);
18
+ }
19
+ // Else (no wildcard), search using startsWith
20
+ else {
21
+ filteredItems = filteredItems.filter(v => keys.findIndex(key => startsWithUpperCase(getPropertyByPathAsString(v, key), value)) !== -1);
22
+ }
23
+ }
24
+ // Exclude ids
25
+ if (isNotEmptyArray(opts === null || opts === void 0 ? void 0 : opts.excludedIds)) {
26
+ filteredItems = filteredItems.filter(v => !opts.excludedIds.includes(+v['id']));
27
+ }
28
+ // Sort
29
+ if (!opts || opts.skipSort !== true) {
30
+ // Make to copy input items, before sorting (if not yet already done)
31
+ if (filteredItems === items)
32
+ filteredItems = filteredItems.slice();
33
+ // Sort by keys
34
+ filteredItems.sort(propertiesPathComparator(keys));
35
+ }
36
+ const total = filteredItems.length || 0;
37
+ // Pagination (truncate if need)
38
+ let pageData = filteredItems;
39
+ if (opts) {
40
+ if ((opts.offset || 0) > 0) {
41
+ pageData = pageData.slice(opts.offset);
42
+ }
43
+ if (isNotNil(opts.size) && pageData.length > opts.size) {
44
+ pageData = pageData.slice(0, opts.size);
45
+ }
46
+ }
47
+ const result = {
48
+ data: pageData,
49
+ total
50
+ };
51
+ // Add fetch more capability, if total was fetched
52
+ const nextOffset = (opts && opts.offset || 0) + pageData.length;
53
+ if (nextOffset < total) {
54
+ result.fetchMore = (_) => __awaiter(this, void 0, void 0, function* () {
55
+ return suggestFromArray(filteredItems, undefined /*OPTIMISATION: already applied*/, Object.assign(Object.assign({}, opts), { offset: nextOffset, skipSort: true, excludedIds: undefined // OPTIMISATION: already filtered
56
+ }));
57
+ });
58
+ }
59
+ return result;
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsUUFBUSxFQUNSLGVBQWUsRUFDZixjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLFVBQVUsZ0JBQWdCLENBQVUsS0FBVSxFQUFFLEtBQVUsRUFBRSxJQU9qRTtJQUNDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztJQUV6RSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUM7SUFFekYsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUM7S0FDN0I7SUFFRCxlQUFlO0lBQ2YsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBRTFCLG1DQUFtQztRQUNuQyxJQUFLLEtBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLEtBQUssR0FBSSxLQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkk7UUFDRCw4Q0FBOEM7YUFDekM7WUFDSCxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hJO0tBQ0Y7SUFFRCxjQUFjO0lBQ2QsSUFBSSxlQUFlLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQ3RDLGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakY7SUFFRCxPQUFPO0lBQ1AsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtRQUVuQyxxRUFBcUU7UUFDckUsSUFBSSxhQUFhLEtBQUssS0FBSztZQUFFLGFBQWEsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbkUsZUFBZTtRQUNmLGFBQWEsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNwRDtJQUVELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBRXhDLGdDQUFnQztJQUNoQyxJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUM7SUFDN0IsSUFBSSxJQUFJLEVBQUU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0RCxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0tBQ0Y7SUFFRCxNQUFNLE1BQU0sR0FBa0I7UUFDNUIsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLO0tBQ04sQ0FBQztJQUVGLGtEQUFrRDtJQUNsRCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEUsSUFBSSxVQUFVLEdBQUcsS0FBSyxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBTyxDQUFDLEVBQUUsRUFBRTtZQUFDLE9BQUEsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxpQ0FBaUMsa0NBRXBHLElBQUksS0FDUCxNQUFNLEVBQUUsVUFBVSxFQUNsQixRQUFRLEVBQUUsSUFBSSxFQUNkLFdBQVcsRUFBRSxTQUFTLENBQUMsaUNBQWlDO2dCQUN4RCxDQUFBO1VBQUEsQ0FBQztLQUNOO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge1xuICBnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nLFxuICBpc05vdEVtcHR5QXJyYXksXG4gIGlzTm90TmlsLFxuICBpc05vdE5pbE9yQmxhbmssXG4gIG1hdGNoVXBwZXJDYXNlLFxuICBwcm9wZXJ0aWVzUGF0aENvbXBhcmF0b3IsXG4gIHN0YXJ0c1dpdGhVcHBlckNhc2Vcbn0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VnZ2VzdEZyb21BcnJheTxUID0gYW55PihpdGVtczogVFtdLCB2YWx1ZTogYW55LCBvcHRzPzoge1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIHNpemU/OiBudW1iZXI7XG4gIHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZztcbiAgc2VhcmNoQXR0cmlidXRlcz86IHN0cmluZ1tdO1xuICBleGNsdWRlZElkcz86IG51bWJlcltdO1xuICBza2lwU29ydD86IGJvb2xlYW47XG59KTogTG9hZFJlc3VsdDxUPiB7XG4gIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIHtkYXRhOiBbdmFsdWVdfTtcblxuICB2YWx1ZSA9ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnKicpICYmIHZhbHVlLnRvVXBwZXJDYXNlKCkgfHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGtleXMgPSBvcHRzICYmIChvcHRzLnNlYXJjaEF0dHJpYnV0ZSAmJiBbb3B0cy5zZWFyY2hBdHRyaWJ1dGVdIHx8IG9wdHMuc2VhcmNoQXR0cmlidXRlcykgfHwgWydsYWJlbCddO1xuXG4gIGlmICghaXRlbXMpIHtcbiAgICByZXR1cm4ge2RhdGE6IFtdLCB0b3RhbDogMH07XG4gIH1cblxuICAvLyBGaWx0ZXIgaXRlbXNcbiAgbGV0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcztcbiAgaWYgKGlzTm90TmlsT3JCbGFuayh2YWx1ZSkpIHtcblxuICAgIC8vIElmIHdpbGRjYXJkLCBzZWFyY2ggdXNpbmcgcmVnZXhwXG4gICAgaWYgKCh2YWx1ZSBhcyBzdHJpbmcpLmluZGV4T2YoJyonKSAhPT0gLTEpIHtcbiAgICAgIHZhbHVlID0gKHZhbHVlIGFzIHN0cmluZykucmVwbGFjZSgvWypdKy9nLCAnLionKTtcbiAgICAgIGZpbHRlcmVkSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zLmZpbHRlcih2ID0+IGtleXMuZmluZEluZGV4KGtleSA9PiBtYXRjaFVwcGVyQ2FzZShnZXRQcm9wZXJ0eUJ5UGF0aEFzU3RyaW5nKHYsIGtleSksIHZhbHVlKSkgIT09IC0xKTtcbiAgICB9XG4gICAgLy8gRWxzZSAobm8gd2lsZGNhcmQpLCBzZWFyY2ggdXNpbmcgc3RhcnRzV2l0aFxuICAgIGVsc2Uge1xuICAgICAgZmlsdGVyZWRJdGVtcyA9IGZpbHRlcmVkSXRlbXMuZmlsdGVyKHYgPT4ga2V5cy5maW5kSW5kZXgoa2V5ID0+IHN0YXJ0c1dpdGhVcHBlckNhc2UoZ2V0UHJvcGVydHlCeVBhdGhBc1N0cmluZyh2LCBrZXkpLCB2YWx1ZSkpICE9PSAtMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRXhjbHVkZSBpZHNcbiAgaWYgKGlzTm90RW1wdHlBcnJheShvcHRzPy5leGNsdWRlZElkcykpIHtcbiAgICBmaWx0ZXJlZEl0ZW1zID0gZmlsdGVyZWRJdGVtcy5maWx0ZXIodiA9PiAhb3B0cy5leGNsdWRlZElkcy5pbmNsdWRlcygrdlsnaWQnXSkpO1xuICB9XG5cbiAgLy8gU29ydFxuICBpZiAoIW9wdHMgfHwgb3B0cy5za2lwU29ydCAhPT0gdHJ1ZSkge1xuXG4gICAgLy8gTWFrZSB0byBjb3B5IGlucHV0IGl0ZW1zLCBiZWZvcmUgc29ydGluZyAoaWYgbm90IHlldCBhbHJlYWR5IGRvbmUpXG4gICAgaWYgKGZpbHRlcmVkSXRlbXMgPT09IGl0ZW1zKSBmaWx0ZXJlZEl0ZW1zID0gZmlsdGVyZWRJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gU29ydCBieSBrZXlzXG4gICAgZmlsdGVyZWRJdGVtcy5zb3J0KHByb3BlcnRpZXNQYXRoQ29tcGFyYXRvcihrZXlzKSk7XG4gIH1cblxuICBjb25zdCB0b3RhbCA9IGZpbHRlcmVkSXRlbXMubGVuZ3RoIHx8IDA7XG5cbiAgLy8gUGFnaW5hdGlvbiAodHJ1bmNhdGUgaWYgbmVlZClcbiAgbGV0IHBhZ2VEYXRhID0gZmlsdGVyZWRJdGVtcztcbiAgaWYgKG9wdHMpIHtcbiAgICBpZiAoKG9wdHMub2Zmc2V0IHx8IDApID4gMCkge1xuICAgICAgcGFnZURhdGEgPSBwYWdlRGF0YS5zbGljZShvcHRzLm9mZnNldCk7XG4gICAgfVxuICAgIGlmIChpc05vdE5pbChvcHRzLnNpemUpICYmIHBhZ2VEYXRhLmxlbmd0aCA+IG9wdHMuc2l6ZSkge1xuICAgICAgcGFnZURhdGEgPSBwYWdlRGF0YS5zbGljZSgwLCBvcHRzLnNpemUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogTG9hZFJlc3VsdDxUPiA9IHtcbiAgICBkYXRhOiBwYWdlRGF0YSxcbiAgICB0b3RhbFxuICB9O1xuXG4gIC8vIEFkZCBmZXRjaCBtb3JlIGNhcGFiaWxpdHksIGlmIHRvdGFsIHdhcyBmZXRjaGVkXG4gIGNvbnN0IG5leHRPZmZzZXQgPSAob3B0cyAmJiBvcHRzLm9mZnNldCB8fCAwKSArIHBhZ2VEYXRhLmxlbmd0aDtcbiAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgIHJlc3VsdC5mZXRjaE1vcmUgPSBhc3luYyAoXykgPT4gc3VnZ2VzdEZyb21BcnJheShmaWx0ZXJlZEl0ZW1zLCB1bmRlZmluZWQgLypPUFRJTUlTQVRJT046IGFscmVhZHkgYXBwbGllZCovLFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvZmZzZXQ6IG5leHRPZmZzZXQsXG4gICAgICAgIHNraXBTb3J0OiB0cnVlLCAvLyBPUFRJTUlTQVRJT046IGFscmVhZHkgc29ydGVkXG4gICAgICAgIGV4Y2x1ZGVkSWRzOiB1bmRlZmluZWQgLy8gT1BUSU1JU0FUSU9OOiBhbHJlYWR5IGZpbHRlcmVkXG4gICAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=