@sumaris-net/ngx-components 1.23.1-rc4 → 1.23.2

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, opts) {
9
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
10
- obs.pipe(takeUntil(timer(opts.timeout)), first(isNotNil));
11
- }
12
- return obs.pipe(first(isNotNil));
13
- }
14
8
  export function filterTrue(obs) {
15
9
  return obs.pipe(filter((v) => v === true));
16
10
  }
17
- export function filterFalse(obs) {
11
+ export function filterFalse(obs, opts) {
18
12
  return obs.pipe(filter((v) => v === false));
19
13
  }
20
- export function firstTruePromise(obs, opts) {
21
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
22
- return obs.pipe(takeUntil(timer(opts.timeout)), first((v) => v === true)).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$));
23
27
  }
24
- 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();
25
43
  }
26
44
  export function firstFalsePromise(obs, opts) {
27
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
28
- return obs.pipe(takeUntil(timer(opts.timeout)), first((v) => v === false)).toPromise();
29
- }
30
- return obs.pipe(first((v) => v === false)).toPromise();
45
+ return firstFalse(obs, Object.assign({ stopError: true }, opts)).toPromise();
31
46
  }
32
47
  export function firstNotNilPromise(obs, opts) {
33
- return firstNotNil(obs, opts).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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9vYnNlcnZhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLEtBQUssRUFBdUIsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl2QyxNQUFNLFVBQVUsWUFBWSxDQUFVLEdBQWtCO0lBQ3RELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFdBQVcsQ0FBVSxHQUFrQixFQUFFLElBQXlCO0lBQ2hGLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxJQUFHLENBQUMsRUFBRTtRQUNyQixHQUFHLENBQUMsSUFBSSxDQUNOLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzlCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FDaEIsQ0FBQztLQUNIO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFDRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQXdCO0lBQ2pELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQXdCO0lBQ2xELE9BQU8sR0FBRyxDQUFDLElB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c0NvbnRlbnQiOlsiaW1wb3J0IHttZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzTm90TmlsIH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtQcmVkaWNhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOb3ROaWw8VCA9IGFueT4ob2JzOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBvYnMucGlwZShmaWx0ZXIoaXNOb3ROaWwpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdE5vdE5pbDxUID0gYW55PihvYnM6IE9ic2VydmFibGU8VD4sIG9wdHM/OiB7dGltZW91dDogbnVtYmVyO30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgaWYgKG9wdHM/LnRpbWVvdXQgPiAwKSB7XG4gICAgb2JzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGltZXIob3B0cy50aW1lb3V0KSksXG4gICAgICBmaXJzdChpc05vdE5pbClcbiAgICApO1xuICB9XG4gIHJldHVybiBvYnMucGlwZShmaXJzdChpc05vdE5pbCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclRydWUob2JzOiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gIHJldHVybiBvYnMucGlwZShmaWx0ZXIoKHYpID0+IHYgPT09IHRydWUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJGYWxzZShvYnM6IE9ic2VydmFibGU8Ym9vbGVhbj4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG9icy5waXBlKGZpbHRlcigodikgPT4gdiA9PT0gZmFsc2UpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdFRydWVQcm9taXNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcHRzPy50aW1lb3V0ID4gMCkge1xuICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aW1lcihvcHRzLnRpbWVvdXQpKSxcbiAgICAgIGZpcnN0KCh2KSA9PiB2ID09PSB0cnVlKVxuICAgICkudG9Qcm9taXNlKCk7XG4gIH1cbiAgcmV0dXJuIG9icy5waXBlKFxuICAgIGZpcnN0KCh2KSA9PiB2ID09PSB0cnVlKVxuICApLnRvUHJvbWlzZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0RmFsc2VQcm9taXNlKG9iczogT2JzZXJ2YWJsZTxib29sZWFuPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcHRzPy50aW1lb3V0ID4gMCkge1xuICAgIHJldHVybiBvYnMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aW1lcihvcHRzLnRpbWVvdXQpKSxcbiAgICAgIGZpcnN0KCh2KSA9PiB2ID09PSBmYWxzZSlcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG4gIHJldHVybiBvYnMucGlwZShcbiAgICBmaXJzdCgodikgPT4gdiA9PT0gZmFsc2UpXG4gICkudG9Qcm9taXNlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb3ROaWxQcm9taXNlPFQgPSBhbnk+KG9iczogT2JzZXJ2YWJsZTxUPiwgb3B0cz86IHt0aW1lb3V0OiBudW1iZXJ9KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBmaXJzdE5vdE5pbChvYnMsIG9wdHMpLnRvUHJvbWlzZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluUHJvbWlzZXM8VCA9IGFueT4oZGVmZXJzOiAoKCkgPT4gUHJvbWlzZTxhbnk+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, takeUntil, first, 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, opts) {
781
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
782
- obs.pipe(takeUntil(timer(opts.timeout)), first(isNotNil));
783
- }
784
- return obs.pipe(first(isNotNil));
785
- }
786
780
  function filterTrue(obs) {
787
781
  return obs.pipe(filter((v) => v === true));
788
782
  }
789
- function filterFalse(obs) {
783
+ function filterFalse(obs, opts) {
790
784
  return obs.pipe(filter((v) => v === false));
791
785
  }
792
- function firstTruePromise(obs, opts) {
793
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
794
- return obs.pipe(takeUntil(timer(opts.timeout)), first((v) => v === true)).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$));
795
799
  }
796
- 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();
797
815
  }
798
816
  function firstFalsePromise(obs, opts) {
799
- if ((opts === null || opts === void 0 ? void 0 : opts.timeout) > 0) {
800
- return obs.pipe(takeUntil(timer(opts.timeout)), first((v) => v === false)).toPromise();
801
- }
802
- return obs.pipe(first((v) => v === false)).toPromise();
817
+ return firstFalse(obs, Object.assign({ stopError: true }, opts)).toPromise();
803
818
  }
804
819
  function firstNotNilPromise(obs, opts) {
805
- return firstNotNil(obs, opts).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,13 +22341,12 @@ 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;
22362
22348
  this._saving = false;
22363
22349
  this._stopWatching$ = new Subject();
22364
- this._editingRowCount = 0;
22365
22350
  this._fetchMoreFn = null;
22366
22351
  this.loadingSubject = new BehaviorSubject(undefined);
22367
22352
  this._entityName = removeEnd((new dataType()).__typename || 'UnknownVO', 'VO');
@@ -22408,7 +22393,6 @@ class EntitiesTableDataSource extends TableDataSource {
22408
22393
  }
22409
22394
  watchAll(offset, size, sortBy, sortDirection, filter) {
22410
22395
  this._stopWatching$.next();
22411
- this._editingRowCount = 0;
22412
22396
  this._fetchMoreFn = null;
22413
22397
  this.markAsLoading();
22414
22398
  return this.dataService.watchAll(offset, size, sortBy, sortDirection, filter, this.serviceOptions)
@@ -22416,8 +22400,8 @@ class EntitiesTableDataSource extends TableDataSource {
22416
22400
  if (this._saving) {
22417
22401
  console.info(`[table-datasource] Received ${this._entityName} data (from service), but still saving: skip`);
22418
22402
  }
22419
- else if (this._editingRowCount > 0) {
22420
- console.warn(`[table-datasource] Received ${this._entityName} data, while ${this._editingRowCount} rows still editing: skip; Please check save() implementation in the table!`);
22403
+ else if (this.hasSomeEditingRow()) {
22404
+ console.warn(`[table-datasource] Received ${this._entityName} data, while some row still editing: skip; Please check save() implementation in the table!`);
22421
22405
  }
22422
22406
  else {
22423
22407
  this.updateDatasource((res.data || []));
@@ -22471,7 +22455,6 @@ class EntitiesTableDataSource extends TableDataSource {
22471
22455
  // Stop with an error
22472
22456
  throw { code: ErrorCodes.TABLE_INVALID_ROW_ERROR, message: 'ERROR.TABLE_INVALID_ROW_ERROR' };
22473
22457
  }
22474
- this._editingRowCount = 0;
22475
22458
  let data;
22476
22459
  let dataToSave;
22477
22460
  if (this.validatorService) {
@@ -22548,7 +22531,6 @@ class EntitiesTableDataSource extends TableDataSource {
22548
22531
  console.warn('[table-datasource] Row still has {editing: true} after confirmCreate()! Force editing to false');
22549
22532
  row.validator.disable({ onlySelf: true, emitEvent: false });
22550
22533
  }
22551
- this._editingRowCount--;
22552
22534
  return true;
22553
22535
  }
22554
22536
  confirmEdit(row) {
@@ -22558,7 +22540,6 @@ class EntitiesTableDataSource extends TableDataSource {
22558
22540
  console.warn('[table-datasource] Row still has {editing: true} after confirmEdit()! Force editing to false');
22559
22541
  row.validator.disable({ onlySelf: true, emitEvent: false });
22560
22542
  }
22561
- this._editingRowCount--;
22562
22543
  return true;
22563
22544
  }
22564
22545
  startEdit(row) {
@@ -22568,7 +22549,6 @@ class EntitiesTableDataSource extends TableDataSource {
22568
22549
  console.warn('[table-datasource] Row still has {editing: false} after startEdit()! Force editing');
22569
22550
  row.validator.enable({ onlySelf: true, emitEvent: false });
22570
22551
  }
22571
- this._editingRowCount++;
22572
22552
  }
22573
22553
  handleError(error, message) {
22574
22554
  const errorMsg = error && error.message || error;
@@ -22592,9 +22572,7 @@ class EntitiesTableDataSource extends TableDataSource {
22592
22572
  console.error(`[table-datasource] Row to delete with id=${id} not found`);
22593
22573
  return;
22594
22574
  }
22595
- if (row.editing)
22596
- this._editingRowCount--;
22597
- this.loadingSubject.next(true);
22575
+ this.markAsLoading();
22598
22576
  this.dataService.deleteAll([row.currentData], this.serviceOptions)
22599
22577
  .catch(err => this.handleServiceError(err))
22600
22578
  .then(() => {
@@ -22603,7 +22581,7 @@ class EntitiesTableDataSource extends TableDataSource {
22603
22581
  const present = this.getRow(id) === row;
22604
22582
  if (present)
22605
22583
  super.delete(id);
22606
- this.loadingSubject.next(false);
22584
+ this.markAsLoaded();
22607
22585
  }, 300);
22608
22586
  });
22609
22587
  }
@@ -22620,7 +22598,13 @@ class EntitiesTableDataSource extends TableDataSource {
22620
22598
  yield this.dataService.deleteAll(data, this.serviceOptions);
22621
22599
  // Workaround, to be sure all rows have been deleted
22622
22600
  // Sometimes, the service miss deletion, or GrapQHl cache remove failed
22623
- const rowNotDeleted = this.getRows().filter(row => rows.includes(row));
22601
+ const rowNotDeleted = Object.getOwnPropertyNames(rowsById)
22602
+ .reduce((res, id) => {
22603
+ const row = rowsById[id];
22604
+ const present = this.getRow(+id) === row;
22605
+ return present ? res.concat(row) : res;
22606
+ }, []);
22607
+ //this.getRows().filter(row => rows.includes(row));
22624
22608
  // Apply missing deletion
22625
22609
  if (isNotEmptyArray(rowNotDeleted)) {
22626
22610
  console.warn(`[table-datasource] Force deletion of ${rowNotDeleted.length} rows (Is service update the cache ?)`);
@@ -22631,7 +22615,7 @@ class EntitiesTableDataSource extends TableDataSource {
22631
22615
  }
22632
22616
  }
22633
22617
  catch (err) {
22634
- // Handle sservice error
22618
+ // Handle service error
22635
22619
  this.handleServiceError(err);
22636
22620
  }
22637
22621
  finally {
@@ -22645,6 +22629,9 @@ class EntitiesTableDataSource extends TableDataSource {
22645
22629
  getRows() {
22646
22630
  return this.rowsSubject.getValue();
22647
22631
  }
22632
+ hasSomeEditingRow() {
22633
+ return (this.rowsSubject.value || []).some(row => row.editing);
22634
+ }
22648
22635
  createNew(insertAt, options = { editing: true }) {
22649
22636
  const _super = Object.create(null, {
22650
22637
  createNew: { get: () => super.createNew }
@@ -22667,8 +22654,6 @@ class EntitiesTableDataSource extends TableDataSource {
22667
22654
  console.error(err && err.message || err, err);
22668
22655
  }
22669
22656
  }
22670
- if (row.editing)
22671
- this._editingRowCount++;
22672
22657
  return row;
22673
22658
  }
22674
22659
  finally {
@@ -22687,8 +22672,8 @@ class EntitiesTableDataSource extends TableDataSource {
22687
22672
  return __awaiter(this, void 0, void 0, function* () {
22688
22673
  if (!this._fetchMoreFn)
22689
22674
  return false; // Avoid multiple call
22690
- if (this._editingRowCount > 0) {
22691
- console.warn(`Cannot fetch more ${this._entityName} because ${this._editingRowCount} row(s) still editing`);
22675
+ if (this.hasSomeEditingRow()) {
22676
+ console.warn(`Cannot fetch more ${this._entityName} because some row) still editing`);
22692
22677
  return;
22693
22678
  }
22694
22679
  console.debug(`Will fetching more row(s) still...`);
@@ -22760,7 +22745,6 @@ class AppTable {
22760
22745
  this.savingSubject = new BehaviorSubject(false);
22761
22746
  this.dirtySubject = new BehaviorSubject(false);
22762
22747
  this.errorSubject = new BehaviorSubject(undefined);
22763
- this.isRateLimitReached = false;
22764
22748
  this.selection = new SelectionModel(true, []);
22765
22749
  this.editedRow = undefined;
22766
22750
  this.i18nColumnPrefix = 'COMMON.';
@@ -23154,7 +23138,6 @@ class AppTable {
23154
23138
  if (!res)
23155
23139
  return; // Skip (e.g error)
23156
23140
  if (res && res.data) {
23157
- this.isRateLimitReached = !this.paginator || (res.data.length < this.paginator.pageSize);
23158
23141
  this.visibleRowCount = res.data.length;
23159
23142
  this.totalRowCount = isNotNil(res.total) ? res.total : ((this.paginator && this.paginator.pageIndex * (this.paginator.pageSize || DEFAULT_PAGE_SIZE) || 0) + this.visibleRowCount);
23160
23143
  if (this.debug)
@@ -23162,7 +23145,6 @@ class AppTable {
23162
23145
  }
23163
23146
  else {
23164
23147
  //if (this.debug) console.debug('[table] NO rows loaded');
23165
- this.isRateLimitReached = true;
23166
23148
  this.totalRowCount = 0;
23167
23149
  this.visibleRowCount = 0;
23168
23150
  }
@@ -23284,6 +23266,7 @@ class AppTable {
23284
23266
  // Stop event
23285
23267
  event === null || event === void 0 ? void 0 : event.stopPropagation();
23286
23268
  // Confirmation edition or creation
23269
+ //const confirmed = this.dataSource.confirmEditCreate(row);
23287
23270
  const confirmed = row.confirmEditCreate();
23288
23271
  if (confirmed) {
23289
23272
  // If edit finished, forget edited row
@@ -23514,22 +23497,19 @@ class AppTable {
23514
23497
  if (this.saveBeforeDelete) {
23515
23498
  // Exclude invalid rows (because of save() will fail, when exists some invalid rows)
23516
23499
  rows = rows.filter(row => {
23517
- if (row.validator && !row.validator.valid) {
23518
- // When deleted (= newly created row) : decrement counter
23519
- if (row.id === -1 || !row.editing) {
23520
- row.delete();
23521
- this.visibleRowCount--;
23522
- this.totalRowCount--;
23523
- return false; // Remove this row to the list, because already deleted
23524
- }
23525
- // Mark row as pristine, to avoid row to be saved even if still invalid
23526
- else {
23527
- // Will cancel only (delete will always go into the previous 'if')
23528
- row.cancelOrDelete();
23529
- // Mark row as pristine (if possible)
23530
- this.checkIfRowPristine(row, { emitEvent: false, onlySelf: true /*avoid propagation to table*/ });
23531
- // Continue: the row will be deleted after the save
23532
- }
23500
+ // Delete the row, if newly created row (id = -1), or if invalid and not editing (= not cancellable)
23501
+ if (row.id === -1 || (!row.valid && !row.editing)) {
23502
+ row.delete();
23503
+ this.visibleRowCount--;
23504
+ this.totalRowCount--;
23505
+ return false;
23506
+ }
23507
+ // Cancel the row (and mark as pristine), when not valid but in edition
23508
+ else if (!row.valid && row.editing) {
23509
+ row.cancel();
23510
+ // Mark row as pristine (if possible)
23511
+ this.checkIfRowPristine(row, { emitEvent: false, onlySelf: true /*avoid propagation to table*/ });
23512
+ return true; // Keep the row. the row will be deleted after the save
23533
23513
  }
23534
23514
  return true;
23535
23515
  });