@sumaris-net/ngx-components 1.23.1-rc3 → 1.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,32 +5,47 @@ import { isNotNil } from './functions';
5
5
  export function filterNotNil(obs) {
6
6
  return obs.pipe(filter(isNotNil));
7
7
  }
8
- export function firstNotNil(obs) {
9
- return obs.pipe(first(isNotNil));
10
- }
11
8
  export function filterTrue(obs) {
12
9
  return obs.pipe(filter((v) => v === true));
13
10
  }
14
- export function filterFalse(obs) {
11
+ export function filterFalse(obs, opts) {
15
12
  return obs.pipe(filter((v) => v === false));
16
13
  }
17
- export function firstTruePromise(obs, opts) {
18
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
19
- return obs.pipe(first((v) => v === true), takeUntil(timer(opts.timeout))).toPromise();
14
+ function decorateForFirst(obs, opts) {
15
+ // Set take until notifier
16
+ const takeUntil$ = (opts === null || opts === void 0 ? void 0 : opts.stop) || ((opts === null || opts === void 0 ? void 0 : opts.timeout) && timer(opts.timeout));
17
+ if (takeUntil$) {
18
+ // When stop, throw an error (useful when used with a toPromise())
19
+ if (opts.stopError) {
20
+ return merge(obs.pipe(takeUntil(takeUntil$)), takeUntil$
21
+ .pipe(map(() => {
22
+ throw new Error(opts.timeout ? `Timeout ${opts.timeout}ms` : `Stop`);
23
+ })));
24
+ }
25
+ // Add a takeUntil
26
+ return obs.pipe(takeUntil(takeUntil$));
20
27
  }
21
- return obs.pipe(first((v) => v === true)).toPromise();
28
+ return obs;
29
+ }
30
+ export function firstNotNil(obs, opts) {
31
+ return decorateForFirst(obs, opts).pipe(first(isNotNil));
32
+ }
33
+ export function firstTrue(obs, opts) {
34
+ return decorateForFirst(obs, opts).pipe(first((v) => v === true), map(_ => { }) // Convert to void
35
+ );
36
+ }
37
+ export function firstFalse(obs, opts) {
38
+ return decorateForFirst(obs, opts).pipe(first((v) => v === false), map(_ => { }) // Convert to void
39
+ );
40
+ }
41
+ export function firstTruePromise(obs, opts) {
42
+ return firstTrue(obs, Object.assign({ stopError: true }, opts)).toPromise();
22
43
  }
23
44
  export function firstFalsePromise(obs, opts) {
24
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
25
- return obs.pipe(first((v) => v === false), takeUntil(timer(opts.timeout))).toPromise();
26
- }
27
- return obs.pipe(first((v) => v === false)).toPromise();
45
+ return firstFalse(obs, Object.assign({ stopError: true }, opts)).toPromise();
28
46
  }
29
47
  export function firstNotNilPromise(obs, opts) {
30
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
31
- return firstNotNil(obs).pipe(takeUntil(timer(opts.timeout))).toPromise();
32
- }
33
- return firstNotNil(obs).toPromise();
48
+ return firstNotNil(obs, Object.assign({ stopError: true }, opts)).toPromise();
34
49
  }
35
50
  export function chainPromises(defers) {
36
51
  return (defers || []).reduce((previous, defer) => {
@@ -47,14 +62,6 @@ export function chainPromises(defers) {
47
62
  .then(jobRes => finalResult.concat(jobRes)));
48
63
  }, null);
49
64
  }
50
- export function firstTrue(obs) {
51
- return obs.pipe(first(value => value === true), map(_ => { }) // Convert to void
52
- );
53
- }
54
- export function firstFalse(obs) {
55
- return obs.pipe(first(value => value === false), map(_ => { }) // Convert to void
56
- );
57
- }
58
65
  /**
59
66
  * Wait form a predicate return true. This need to implement AppFormUtils.waitWhilePending(), AppFormUtils.waitIdle()
60
67
  * @param predicate
@@ -71,43 +78,22 @@ export function waitFor(predicate, opts) {
71
78
  // For DEBUG :
72
79
  //tap(() => console.debug("Waiting form idle...", form)),
73
80
  filter(_ => predicate()), map(_ => true));
74
- // Add timeout
75
- if (opts && opts.timeout) {
76
- const $timeout = timer(opts.timeout);
77
- wait$ = merge(wait$.pipe(takeUntil($timeout)), $timeout
78
- .pipe(map(() => {
79
- throw new Error(`Timeout waitIdle() - after ${opts.timeout}ms`);
80
- })));
81
- }
82
- yield firstNotNilPromise(wait$);
81
+ yield firstNotNilPromise(wait$, opts);
83
82
  });
84
83
  }
85
84
  export function waitForTrue(observable, opts) {
86
- return __awaiter(this, void 0, void 0, function* () {
87
- // Timeout (+ dueTime)
88
- if (opts && opts.timeout > 0) {
89
- const $timeout = timer(opts.timeout);
90
- return merge(timer(opts.dueTime || 0)
91
- .pipe(switchMap(() => firstTrue(observable)), takeUntil($timeout)), $timeout
92
- .pipe(map(() => {
93
- throw new Error(`Timeout ready() - after ${opts.timeout}ms`);
94
- })))
95
- .toPromise();
96
- }
97
- // dueTime (without timeout)
98
- if (opts && opts.dueTime > 0) {
99
- return timer(opts.dueTime)
100
- .pipe(switchMap(() => firstTrue(observable)))
101
- .toPromise();
102
- }
103
- return firstTrue(observable).toPromise();
104
- });
85
+ opts = Object.assign({ stopError: true }, opts);
86
+ // dueTime (without timeout)
87
+ if (opts && opts.dueTime > 0) {
88
+ return timer(opts.dueTime)
89
+ .pipe(switchMap(() => firstTrue(observable, opts)))
90
+ .toPromise();
91
+ }
92
+ return firstTrue(observable, opts).toPromise();
105
93
  }
106
94
  export function waitForFalse(observable, opts) {
107
- return __awaiter(this, void 0, void 0, function* () {
108
- return waitForTrue(
109
- // Inverse the logic
110
- observable.pipe(map(v => v === false)), opts);
111
- });
95
+ return waitForTrue(
96
+ // Inverse the logic
97
+ observable.pipe(map(v => v === false)), opts);
112
98
  }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9vYnNlcnZhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLEtBQUssRUFBdUIsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl2QyxNQUFNLFVBQVUsWUFBWSxDQUFVLEdBQWtCO0lBQ3RELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBVSxHQUFrQjtJQUNyRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUNELE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBd0I7SUFDakQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUNELE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBd0I7SUFDbEQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUF3QixFQUFFLElBQXdCO0lBQ2pGLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxJQUFHLENBQUMs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ImltcG9ydCB7bWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc05vdE5pbCB9IGZyb20gJy4vZnVuY3Rpb25zJztcbmltcG9ydCB7UHJlZGljYXRlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTm90TmlsPFQgPSBhbnk+KG9iczogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICByZXR1cm4gb2JzLnBpcGUoZmlsdGVyKGlzTm90TmlsKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb3ROaWw8VCA9IGFueT4ob2JzOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBvYnMucGlwZShmaXJzdChpc05vdE5pbCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclRydWUob2JzOiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gIHJldHVybiBvYnMucGlwZShmaWx0ZXIoKHYpID0+IHYgPT09IHRydWUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJGYWxzZShvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG9icy5waXBlKGZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdFRydWVQcm9taXNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcHRzPy50aW1lb3V0ID4gMCkge1xuICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgIGZpcnN0KCh2KSA9PiB2ID09PSB0cnVlKSxcbiAgICAgIHRha2VVbnRpbCh0aW1lcihvcHRzLnRpbWVvdXQpKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cbiAgcmV0dXJuIG9icy5waXBlKFxuICAgIGZpcnN0KCh2KSA9PiB2ID09PSB0cnVlKVxuICApLnRvUHJvbWlzZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0RmFsc2VQcm9taXNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcHRzPy50aW1lb3V0ID4gMCkge1xuICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgIGZpcnN0KCh2KSA9PiB2ID09PSBmYWxzZSksXG4gICAgICB0YWtlVW50aWwodGltZXIob3B0cy50aW1lb3V0KSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG4gIHJldHVybiBvYnMucGlwZShcbiAgICBmaXJzdCgodikgPT4gdiA9PT0gZmFsc2UpXG4gICkudG9Qcm9taXNlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb3ROaWxQcm9taXNlPFQgPSBhbnk+KG9iczogT2JzZXJ2YWJsZTxUPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxUPiB7XG4gIGlmIChvcHRzPy50aW1lb3V0ID4gMCkge1xuICAgIHJldHVybiBmaXJzdE5vdE5pbChvYnMpLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGltZXIob3B0cy50aW1lb3V0KSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG4gIHJldHVybiBmaXJzdE5vdE5pbChvYnMpLnRvUHJvbWlzZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluUHJvbWlzZXM8VCA9IGFueT4oZGVmZXJzOiAoKCkgPT4gUHJvbWlzZTxhbnk+KVtdKTogUHJvbWlzZTxUW10+IHtcbiAgcmV0dXJuIChkZWZlcnMgfHwgW10pLnJlZHVjZSgocHJldmlvdXM6IFByb21pc2U8YW55PiB8IG51bGwsIGRlZmVyKSA9PiB7XG4gICAgLy8gRmlyc3Qgam9iXG4gICAgaWYgKCFwcmV2aW91cykge1xuICAgICAgcmV0dXJuIGRlZmVyKClcbiAgICAgICAgLy8gSW5pdCB0aGUgZmluYWwgcmVzdWx0IGFycmF5LCB3aXRoIHRoZSBmaXJzdCByZXN1bHRcbiAgICAgICAgLnRoZW4oam9iUmVzID0+IFtqb2JSZXNdKTtcbiAgICB9XG4gICAgLy8gT3RoZXIgam9ic1xuICAgIHJldHVybiBwcmV2aW91c1xuICAgICAgLnRoZW4oKGZpbmFsUmVzdWx0KSA9PiBkZWZlcigpXG4gICAgICAgIC8vIEFkZCBqb2IgcmVzdWx0IHRvIGZpbmFsIHJlc3VsdCBhcnJheVxuICAgICAgICAudGhlbihqb2JSZXMgPT4gZmluYWxSZXN1bHQuY29uY2F0KGpvYlJlcykpKTtcbiAgfSwgbnVsbCk7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXYWl0Rm9yT3B0aW9ucyB7XG4gIGR1ZVRpbWU/OiBudW1iZXI7XG4gIGNoZWNrUGVyaW9kPzogbnVtYmVyO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RUcnVlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPik6IE9ic2VydmFibGU8dm9pZD4ge1xuICByZXR1cm4gb2JzLnBpcGUoXG4gICAgZmlyc3QodmFsdWUgPT4gdmFsdWUgPT09IHRydWUpLFxuICAgIG1hcChfID0+IHt9KSAvLyBDb252ZXJ0IHRvIHZvaWRcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEZhbHNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPik6IE9ic2VydmFibGU8dm9pZD4ge1xuICByZXR1cm4gb2JzLnBpcGUoXG4gICAgZmlyc3QodmFsdWUgPT4gdmFsdWUgPT09IGZhbHNlKSxcbiAgICBtYXAoXyA9PiB7fSkgLy8gQ29udmVydCB0byB2b2lkXG4gICk7XG59XG5cbi8qKlxuICogV2FpdCBmb3JtIGEgcHJlZGljYXRlIHJldHVybiB0cnVlLiBUaGlzIG5lZWQgdG8gaW1wbGVtZW50IEFwcEZvcm1VdGlscy53YWl0V2hpbGVQZW5kaW5nKCksIEFwcEZvcm1VdGlscy53YWl0SWRsZSgpXG4gKiBAcGFyYW0gcHJlZGljYXRlXG4gKiBAcGFyYW0gb3B0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvcihwcmVkaWNhdGU6IFByZWRpY2F0ZTx2b2lkPiwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwcmVkaWNhdGUoKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIGNvbnN0IHBlcmlvZCA9IG9wdHMgJiYgb3B0cy5jaGVja1BlcmlvZCB8fCAzMDA7XG4gIGNvbnN0IGR1ZVRpbWUgPSBvcHRzICYmIG9wdHMuZHVlVGltZSB8fCBwZXJpb2Q7XG4gIGxldCB3YWl0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRpbWVyKGR1ZVRpbWUsIHBlcmlvZClcbiAgICAucGlwZShcbiAgICAgIC8vIEZvciBERUJVRyA6XG4gICAgICAvL3RhcCgoKSA9PiBjb25zb2xlLmRlYnVnKFwiV2FpdGluZyBmb3JtIGlkbGUuLi5cIiwgZm9ybSkpLFxuICAgICAgZmlsdGVyKF8gPT4gcHJlZGljYXRlKCkpLFxuICAgICAgbWFwKF8gPT4gdHJ1ZSlcbiAgICApO1xuXG4gIC8vIEFkZCB0aW1lb3V0XG4gIGlmIChvcHRzICYmIG9wdHMudGltZW91dCkge1xuICAgIGNvbnN0ICR0aW1lb3V0ID0gdGltZXIob3B0cy50aW1lb3V0KTtcbiAgICB3YWl0JCA9IG1lcmdlKFxuICAgICAgd2FpdCQucGlwZShcbiAgICAgICAgdGFrZVVudGlsKCR0aW1lb3V0KVxuICAgICAgKSxcbiAgICAgICR0aW1lb3V0XG4gICAgICAgIC5waXBlKG1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lb3V0IHdhaXRJZGxlKCkgLSBhZnRlciAke29wdHMudGltZW91dH1tc2ApO1xuICAgICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHdhaXQkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JUcnVlKG9ic2VydmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXG4gIC8vIFRpbWVvdXQgKCsgZHVlVGltZSlcbiAgaWYgKG9wdHMgJiYgb3B0cy50aW1lb3V0ID4gMCkge1xuICAgIGNvbnN0ICR0aW1lb3V0ID0gdGltZXIob3B0cy50aW1lb3V0KTtcbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICB0aW1lcihvcHRzLmR1ZVRpbWUgfHwgMClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGZpcnN0VHJ1ZShvYnNlcnZhYmxlKSksXG4gICAgICAgICAgdGFrZVVudGlsKCR0aW1lb3V0KVxuICAgICAgICApLFxuICAgICAgJHRpbWVvdXRcbiAgICAgICAgLnBpcGUobWFwKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVvdXQgcmVhZHkoKSAtIGFmdGVyICR7b3B0cy50aW1lb3V0fW1zYCk7XG4gICAgICAgIH0pKVxuICAgIClcbiAgICAudG9Qcm9taXNlKCk7XG4gIH1cbiAgLy8gZHVlVGltZSAod2l0aG91dCB0aW1lb3V0KVxuICBpZiAob3B0cyAmJiBvcHRzLmR1ZVRpbWUgPiAwKSB7XG4gICAgcmV0dXJuIHRpbWVyKG9wdHMuZHVlVGltZSlcbiAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiBmaXJzdFRydWUob2JzZXJ2YWJsZSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG4gIHJldHVybiBmaXJzdFRydWUob2JzZXJ2YWJsZSkudG9Qcm9taXNlKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRmFsc2Uob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiB3YWl0Rm9yVHJ1ZShcbiAgICAvLyBJbnZlcnNlIHRoZSBsb2dpY1xuICAgIG9ic2VydmFibGUucGlwZShtYXAodiA9PiB2ID09PSBmYWxzZSlcbiAgKSwgb3B0cyk7XG59XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9vYnNlcnZhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLEtBQUssRUFBdUIsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWN2QyxNQUFNLFVBQVUsWUFBWSxDQUFVLEdBQWtCO0lBQ3RELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUF3QjtJQUNqRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUF3QixFQUFFLElBQW1CO0lBQ3ZFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFVLEdBQWtCLEVBQUUsSUFBbUI7SUFDeEUsMEJBQTBCO0lBQzFCLE1BQU0sVUFBVSxHQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksS0FBSSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sS0FBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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bEQsU0FBUyxFQUFFLENBQUM7S0FDaEI7SUFDRCxPQUFPLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBK0IsRUFBRSxJQUFxQjtJQUNqRixPQUFPLFdBQVc7SUFDaEIsb0JBQW9CO0lBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUN0QyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc05vdE5pbCB9IGZyb20gJy4vZnVuY3Rpb25zJztcbmltcG9ydCB7UHJlZGljYXRlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEZpcnN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHN0b3A/OiBPYnNlcnZhYmxlPGFueT47XG4gIHN0b3BFcnJvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXYWl0Rm9yT3B0aW9ucyBleHRlbmRzIEZpcnN0T3B0aW9uc3tcbiAgZHVlVGltZT86IG51bWJlcjtcbiAgY2hlY2tQZXJpb2Q/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOb3ROaWw8VCA9IGFueT4ob2JzOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBvYnMucGlwZShmaWx0ZXIoaXNOb3ROaWwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclRydWUob2JzOiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gIHJldHVybiBvYnMucGlwZShmaWx0ZXIoKHYpID0+IHYgPT09IHRydWUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJGYWxzZShvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBGaXJzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG9icy5waXBlKGZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpKTtcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGVGb3JGaXJzdDxUID0gYW55PihvYnM6IE9ic2VydmFibGU8VD4sIG9wdHM/OiBGaXJzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgLy8gU2V0IHRha2UgdW50aWwgbm90aWZpZXJcbiAgY29uc3QgdGFrZVVudGlsJCA9IG9wdHM/LnN0b3AgfHwgKG9wdHM/LnRpbWVvdXQgJiYgdGltZXIob3B0cy50aW1lb3V0KSk7XG4gIGlmICh0YWtlVW50aWwkKSB7XG5cbiAgICAvLyBXaGVuIHN0b3AsIHRocm93IGFuIGVycm9yICh1c2VmdWwgd2hlbiB1c2VkIHdpdGggYSB0b1Byb21pc2UoKSlcbiAgICBpZiAob3B0cy5zdG9wRXJyb3IpIHtcbiAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgb2JzLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRha2VVbnRpbCQpXG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbCRcbiAgICAgICAgICAucGlwZShtYXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG9wdHMudGltZW91dCA/IGBUaW1lb3V0ICR7b3B0cy50aW1lb3V0fW1zYCA6IGBTdG9wYCk7XG4gICAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFkZCBhIHRha2VVbnRpbFxuICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRha2VVbnRpbCQpXG4gICAgICApO1xuICB9XG4gIHJldHVybiBvYnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdE5vdE5pbDxUID0gYW55PihvYnM6IE9ic2VydmFibGU8VD4sIG9wdHM/OiBGaXJzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgcmV0dXJuIGRlY29yYXRlRm9yRmlyc3Qob2JzLCBvcHRzKS5waXBlKGZpcnN0KGlzTm90TmlsKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RUcnVlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IEZpcnN0T3B0aW9ucyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICByZXR1cm4gZGVjb3JhdGVGb3JGaXJzdChvYnMsIG9wdHMpLnBpcGUoXG4gICAgZmlyc3QoKHYpID0+IHYgPT09IHRydWUpLFxuICAgIG1hcChfID0+IHt9KSAvLyBDb252ZXJ0IHRvIHZvaWRcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEZhbHNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IEZpcnN0T3B0aW9ucyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICByZXR1cm4gZGVjb3JhdGVGb3JGaXJzdChvYnMsIG9wdHMpLnBpcGUoXG4gICAgZmlyc3QoKHYpID0+IHYgPT09IGZhbHNlKSxcbiAgICBtYXAoXyA9PiB7fSkgLy8gQ29udmVydCB0byB2b2lkXG4gICk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3RUcnVlUHJvbWlzZShvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBGaXJzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIGZpcnN0VHJ1ZShvYnMsIHtzdG9wRXJyb3I6IHRydWUsIC4uLm9wdHN9KS50b1Byb21pc2UoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEZhbHNlUHJvbWlzZShvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBGaXJzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIGZpcnN0RmFsc2Uob2JzLCB7c3RvcEVycm9yOiB0cnVlLCAuLi5vcHRzfSkudG9Qcm9taXNlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb3ROaWxQcm9taXNlPFQgPSBhbnk+KG9iczogT2JzZXJ2YWJsZTxUPiwgb3B0cz86IEZpcnN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICByZXR1cm4gZmlyc3ROb3ROaWwob2JzLCB7c3RvcEVycm9yOiB0cnVlLCAuLi5vcHRzfSkudG9Qcm9taXNlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hhaW5Qcm9taXNlczxUID0gYW55PihkZWZlcnM6ICgoKSA9PiBQcm9taXNlPGFueT4pW10pOiBQcm9taXNlPFRbXT4ge1xuICByZXR1cm4gKGRlZmVycyB8fCBbXSkucmVkdWNlKChwcmV2aW91czogUHJvbWlzZTxhbnk+IHwgbnVsbCwgZGVmZXIpID0+IHtcbiAgICAvLyBGaXJzdCBqb2JcbiAgICBpZiAoIXByZXZpb3VzKSB7XG4gICAgICByZXR1cm4gZGVmZXIoKVxuICAgICAgICAvLyBJbml0IHRoZSBmaW5hbCByZXN1bHQgYXJyYXksIHdpdGggdGhlIGZpcnN0IHJlc3VsdFxuICAgICAgICAudGhlbihqb2JSZXMgPT4gW2pvYlJlc10pO1xuICAgIH1cbiAgICAvLyBPdGhlciBqb2JzXG4gICAgcmV0dXJuIHByZXZpb3VzXG4gICAgICAudGhlbigoZmluYWxSZXN1bHQpID0+IGRlZmVyKClcbiAgICAgICAgLy8gQWRkIGpvYiByZXN1bHQgdG8gZmluYWwgcmVzdWx0IGFycmF5XG4gICAgICAgIC50aGVuKGpvYlJlcyA9PiBmaW5hbFJlc3VsdC5jb25jYXQoam9iUmVzKSkpO1xuICB9LCBudWxsKTtcbn1cblxuLyoqXG4gKiBXYWl0IGZvcm0gYSBwcmVkaWNhdGUgcmV0dXJuIHRydWUuIFRoaXMgbmVlZCB0byBpbXBsZW1lbnQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcoKSwgQXBwRm9ybVV0aWxzLndhaXRJZGxlKClcbiAqIEBwYXJhbSBwcmVkaWNhdGVcbiAqIEBwYXJhbSBvcHRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yKHByZWRpY2F0ZTogUHJlZGljYXRlPHZvaWQ+LCBvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHByZWRpY2F0ZSgpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgY29uc3QgcGVyaW9kID0gb3B0cyAmJiBvcHRzLmNoZWNrUGVyaW9kIHx8IDMwMDtcbiAgY29uc3QgZHVlVGltZSA9IG9wdHMgJiYgb3B0cy5kdWVUaW1lIHx8IHBlcmlvZDtcbiAgbGV0IHdhaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGltZXIoZHVlVGltZSwgcGVyaW9kKVxuICAgIC5waXBlKFxuICAgICAgLy8gRm9yIERFQlVHIDpcbiAgICAgIC8vdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoXCJXYWl0aW5nIGZvcm0gaWRsZS4uLlwiLCBmb3JtKSksXG4gICAgICBmaWx0ZXIoXyA9PiBwcmVkaWNhdGUoKSksXG4gICAgICBtYXAoXyA9PiB0cnVlKVxuICAgICk7XG5cbiAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHdhaXQkLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JUcnVlKG9ic2VydmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBvcHRzID0ge3N0b3BFcnJvcjogdHJ1ZSwgLi4ub3B0c307XG4gIC8vIGR1ZVRpbWUgKHdpdGhvdXQgdGltZW91dClcbiAgaWYgKG9wdHMgJiYgb3B0cy5kdWVUaW1lID4gMCkge1xuICAgIHJldHVybiB0aW1lcihvcHRzLmR1ZVRpbWUpXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gZmlyc3RUcnVlKG9ic2VydmFibGUsIG9wdHMpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuICByZXR1cm4gZmlyc3RUcnVlKG9ic2VydmFibGUsIG9wdHMpLnRvUHJvbWlzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2FpdEZvckZhbHNlKG9ic2VydmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj4sIG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gd2FpdEZvclRydWUoXG4gICAgLy8gSW52ZXJzZSB0aGUgbG9naWNcbiAgICBvYnNlcnZhYmxlLnBpcGUobWFwKHYgPT4gdiA9PT0gZmFsc2UpXG4gICksIG9wdHMpO1xufVxuIl19
@@ -37,7 +37,7 @@ import { __awaiter, __decorate } from 'tslib';
37
37
  import * as i1$6 from '@angular/forms';
38
38
  import { Validators, NG_VALUE_ACCESSOR, FormGroupDirective, AbstractControl, FormGroup, FormArray, FormControl, ReactiveFormsModule, FormBuilder } from '@angular/forms';
39
39
  import { timer, merge, fromEvent, BehaviorSubject, Subscription, Subject, isObservable, from, of, noop as noop$9, Observable, defer, forkJoin, interval, combineLatest, EMPTY } from 'rxjs';
40
- import { filter, first, takeUntil, map, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen, take } from 'rxjs/operators';
40
+ import { filter, takeUntil, map, first, switchMap, tap, debounceTime, startWith, distinctUntilChanged, mergeMap, catchError, throttleTime, skip, bufferWhen, take } from 'rxjs/operators';
41
41
  import { trigger, transition, style, animate, state } from '@angular/animations';
42
42
  import * as i1$1 from '@ngx-translate/core';
43
43
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
@@ -777,32 +777,47 @@ function focusPreviousInput(event, elements, opts) {
777
777
  function filterNotNil(obs) {
778
778
  return obs.pipe(filter(isNotNil));
779
779
  }
780
- function firstNotNil(obs) {
781
- return obs.pipe(first(isNotNil));
782
- }
783
780
  function filterTrue(obs) {
784
781
  return obs.pipe(filter((v) => v === true));
785
782
  }
786
- function filterFalse(obs) {
783
+ function filterFalse(obs, opts) {
787
784
  return obs.pipe(filter((v) => v === false));
788
785
  }
789
- function firstTruePromise(obs, opts) {
790
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
791
- return obs.pipe(first((v) => v === true), takeUntil(timer(opts.timeout))).toPromise();
786
+ function decorateForFirst(obs, opts) {
787
+ // Set take until notifier
788
+ const takeUntil$ = (opts === null || opts === void 0 ? void 0 : opts.stop) || ((opts === null || opts === void 0 ? void 0 : opts.timeout) && timer(opts.timeout));
789
+ if (takeUntil$) {
790
+ // When stop, throw an error (useful when used with a toPromise())
791
+ if (opts.stopError) {
792
+ return merge(obs.pipe(takeUntil(takeUntil$)), takeUntil$
793
+ .pipe(map(() => {
794
+ throw new Error(opts.timeout ? `Timeout ${opts.timeout}ms` : `Stop`);
795
+ })));
796
+ }
797
+ // Add a takeUntil
798
+ return obs.pipe(takeUntil(takeUntil$));
792
799
  }
793
- return obs.pipe(first((v) => v === true)).toPromise();
800
+ return obs;
801
+ }
802
+ function firstNotNil(obs, opts) {
803
+ return decorateForFirst(obs, opts).pipe(first(isNotNil));
804
+ }
805
+ function firstTrue(obs, opts) {
806
+ return decorateForFirst(obs, opts).pipe(first((v) => v === true), map(_ => { }) // Convert to void
807
+ );
808
+ }
809
+ function firstFalse(obs, opts) {
810
+ return decorateForFirst(obs, opts).pipe(first((v) => v === false), map(_ => { }) // Convert to void
811
+ );
812
+ }
813
+ function firstTruePromise(obs, opts) {
814
+ return firstTrue(obs, Object.assign({ stopError: true }, opts)).toPromise();
794
815
  }
795
816
  function firstFalsePromise(obs, opts) {
796
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
797
- return obs.pipe(first((v) => v === false), takeUntil(timer(opts.timeout))).toPromise();
798
- }
799
- return obs.pipe(first((v) => v === false)).toPromise();
817
+ return firstFalse(obs, Object.assign({ stopError: true }, opts)).toPromise();
800
818
  }
801
819
  function firstNotNilPromise(obs, opts) {
802
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
803
- return firstNotNil(obs).pipe(takeUntil(timer(opts.timeout))).toPromise();
804
- }
805
- return firstNotNil(obs).toPromise();
820
+ return firstNotNil(obs, Object.assign({ stopError: true }, opts)).toPromise();
806
821
  }
807
822
  function chainPromises(defers) {
808
823
  return (defers || []).reduce((previous, defer) => {
@@ -819,14 +834,6 @@ function chainPromises(defers) {
819
834
  .then(jobRes => finalResult.concat(jobRes)));
820
835
  }, null);
821
836
  }
822
- function firstTrue(obs) {
823
- return obs.pipe(first(value => value === true), map(_ => { }) // Convert to void
824
- );
825
- }
826
- function firstFalse(obs) {
827
- return obs.pipe(first(value => value === false), map(_ => { }) // Convert to void
828
- );
829
- }
830
837
  /**
831
838
  * Wait form a predicate return true. This need to implement AppFormUtils.waitWhilePending(), AppFormUtils.waitIdle()
832
839
  * @param predicate
@@ -843,44 +850,23 @@ function waitFor(predicate, opts) {
843
850
  // For DEBUG :
844
851
  //tap(() => console.debug("Waiting form idle...", form)),
845
852
  filter(_ => predicate()), map(_ => true));
846
- // Add timeout
847
- if (opts && opts.timeout) {
848
- const $timeout = timer(opts.timeout);
849
- wait$ = merge(wait$.pipe(takeUntil($timeout)), $timeout
850
- .pipe(map(() => {
851
- throw new Error(`Timeout waitIdle() - after ${opts.timeout}ms`);
852
- })));
853
- }
854
- yield firstNotNilPromise(wait$);
853
+ yield firstNotNilPromise(wait$, opts);
855
854
  });
856
855
  }
857
856
  function waitForTrue(observable, opts) {
858
- return __awaiter(this, void 0, void 0, function* () {
859
- // Timeout (+ dueTime)
860
- if (opts && opts.timeout > 0) {
861
- const $timeout = timer(opts.timeout);
862
- return merge(timer(opts.dueTime || 0)
863
- .pipe(switchMap(() => firstTrue(observable)), takeUntil($timeout)), $timeout
864
- .pipe(map(() => {
865
- throw new Error(`Timeout ready() - after ${opts.timeout}ms`);
866
- })))
867
- .toPromise();
868
- }
869
- // dueTime (without timeout)
870
- if (opts && opts.dueTime > 0) {
871
- return timer(opts.dueTime)
872
- .pipe(switchMap(() => firstTrue(observable)))
873
- .toPromise();
874
- }
875
- return firstTrue(observable).toPromise();
876
- });
857
+ opts = Object.assign({ stopError: true }, opts);
858
+ // dueTime (without timeout)
859
+ if (opts && opts.dueTime > 0) {
860
+ return timer(opts.dueTime)
861
+ .pipe(switchMap(() => firstTrue(observable, opts)))
862
+ .toPromise();
863
+ }
864
+ return firstTrue(observable, opts).toPromise();
877
865
  }
878
866
  function waitForFalse(observable, opts) {
879
- return __awaiter(this, void 0, void 0, function* () {
880
- return waitForTrue(
881
- // Inverse the logic
882
- observable.pipe(map(v => v === false)), opts);
883
- });
867
+ return waitForTrue(
868
+ // Inverse the logic
869
+ observable.pipe(map(v => v === false)), opts);
884
870
  }
885
871
 
886
872
  function createPromiseEventEmitter() {
@@ -22355,7 +22341,7 @@ class EntitiesTableDataSource extends TableDataSource {
22355
22341
  * @param config Additional configuration for table.
22356
22342
  */
22357
22343
  constructor(dataType, dataService, validatorService, options) {
22358
- super([], dataType, validatorService, Object.assign({ keepOriginalDataAfterConfirm: false, readOnly: false, saveOnlyDirtyRows: false, dataServiceOptions: {} }, options));
22344
+ super([], dataType, validatorService, Object.assign({ keepOriginalDataAfterConfirm: false, readOnly: false, saveOnlyDirtyRows: false }, options));
22359
22345
  this.dataService = dataService;
22360
22346
  this._debug = false;
22361
22347
  this._creating = false;
@@ -22620,9 +22606,13 @@ class EntitiesTableDataSource extends TableDataSource {
22620
22606
  yield this.dataService.deleteAll(data, this.serviceOptions);
22621
22607
  // Workaround, to be sure all rows have been deleted
22622
22608
  // Sometimes, the service miss deletion, or GrapQHl cache remove failed
22623
- const rowNotDeleted = this.getRows()
22624
- .map(row => rows.find(r => r === row))
22625
- .filter(isNotNil);
22609
+ const rowNotDeleted = Object.getOwnPropertyNames(rowsById)
22610
+ .reduce((res, id) => {
22611
+ const row = rowsById[id];
22612
+ const present = this.getRow(+id) === row;
22613
+ return present ? res.concat(row) : res;
22614
+ }, []);
22615
+ //this.getRows().filter(row => rows.includes(row));
22626
22616
  // Apply missing deletion
22627
22617
  if (isNotEmptyArray(rowNotDeleted)) {
22628
22618
  console.warn(`[table-datasource] Force deletion of ${rowNotDeleted.length} rows (Is service update the cache ?)`);
@@ -23286,6 +23276,7 @@ class AppTable {
23286
23276
  // Stop event
23287
23277
  event === null || event === void 0 ? void 0 : event.stopPropagation();
23288
23278
  // Confirmation edition or creation
23279
+ //const confirmed = this.dataSource.confirmEditCreate(row);
23289
23280
  const confirmed = row.confirmEditCreate();
23290
23281
  if (confirmed) {
23291
23282
  // If edit finished, forget edited row