@pallasoft/ps-core-components 2.46.0 → 2.46.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.
- package/dist/esm/hooks/use-ps-optimistic-rows.js +2 -1
- package/dist/esm/services/ps-optimistic-release-service.js +11 -5
- package/dist/hooks/use-ps-optimistic-rows.js +2 -1
- package/dist/interfaces/ps-optimistic-changes.d.ts +1 -0
- package/dist/services/ps-optimistic-release-service.d.ts +1 -1
- package/dist/services/ps-optimistic-release-service.js +11 -5
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import { PsOptimisticReleaseService } from '../services/ps-optimistic-release-se
|
|
|
4
4
|
export const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows, }) => {
|
|
5
5
|
const [remembered, setRemembered] = useState(() => PsOptimisticReleaseService.empty(rows));
|
|
6
6
|
const isActive = isSaving || isHolding;
|
|
7
|
-
const current = PsOptimisticReleaseService.next(remembered, rows, isActive, apply);
|
|
7
|
+
const current = PsOptimisticReleaseService.next(remembered, rows, isActive, isHolding, apply);
|
|
8
8
|
if (current !== remembered)
|
|
9
9
|
setRemembered(current);
|
|
10
10
|
const { changes } = current;
|
|
@@ -21,6 +21,7 @@ export const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows,
|
|
|
21
21
|
changes: [...previous.changes, change],
|
|
22
22
|
drainBase: null,
|
|
23
23
|
wasActive: previous.wasActive,
|
|
24
|
+
wasHolding: previous.wasHolding,
|
|
24
25
|
})), [rows]);
|
|
25
26
|
const forgetLast = useCallback(() => setRemembered((previous) => ({ ...previous, changes: previous.changes.slice(0, -1) })), []);
|
|
26
27
|
const rollback = useCallback(() => setRemembered(PsOptimisticReleaseService.empty(rows)), [rows]);
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { PsDeepEqualService } from './ps-deep-equal-service.js';
|
|
2
2
|
export class PsOptimisticReleaseService {
|
|
3
3
|
static empty(rows) {
|
|
4
|
-
return { base: rows, changes: [], drainBase: null, wasActive: false };
|
|
4
|
+
return { base: rows, changes: [], drainBase: null, wasActive: false, wasHolding: false };
|
|
5
5
|
}
|
|
6
|
-
static next(remembered, rows, isActive, apply) {
|
|
6
|
+
static next(remembered, rows, isActive, isHolding, apply) {
|
|
7
7
|
if (isActive) {
|
|
8
|
-
|
|
8
|
+
const wasHolding = remembered.wasHolding || isHolding;
|
|
9
|
+
if (remembered.wasActive &&
|
|
10
|
+
remembered.drainBase === null &&
|
|
11
|
+
remembered.wasHolding === wasHolding)
|
|
9
12
|
return remembered;
|
|
10
|
-
return { ...remembered, drainBase: null, wasActive: true };
|
|
13
|
+
return { ...remembered, drainBase: null, wasActive: true, wasHolding };
|
|
11
14
|
}
|
|
12
15
|
if (remembered.changes.length === 0) {
|
|
13
16
|
if (remembered.base === rows && !remembered.wasActive)
|
|
@@ -15,10 +18,13 @@ export class PsOptimisticReleaseService {
|
|
|
15
18
|
return PsOptimisticReleaseService.empty(rows);
|
|
16
19
|
}
|
|
17
20
|
if (remembered.wasActive) {
|
|
21
|
+
if (remembered.wasHolding && rows !== remembered.base) {
|
|
22
|
+
return PsOptimisticReleaseService.empty(rows);
|
|
23
|
+
}
|
|
18
24
|
if (!PsDeepEqualService.isEqual(rows, remembered.base)) {
|
|
19
25
|
return PsOptimisticReleaseService.empty(rows);
|
|
20
26
|
}
|
|
21
|
-
return { ...remembered, drainBase: rows, wasActive: false };
|
|
27
|
+
return { ...remembered, drainBase: rows, wasActive: false, wasHolding: false };
|
|
22
28
|
}
|
|
23
29
|
const reference = remembered.drainBase === null ? remembered.base : remembered.drainBase;
|
|
24
30
|
if (!PsDeepEqualService.isEqual(rows, reference)) {
|
|
@@ -7,7 +7,7 @@ const ps_optimistic_release_service_1 = require("../services/ps-optimistic-relea
|
|
|
7
7
|
const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows, }) => {
|
|
8
8
|
const [remembered, setRemembered] = (0, react_1.useState)(() => ps_optimistic_release_service_1.PsOptimisticReleaseService.empty(rows));
|
|
9
9
|
const isActive = isSaving || isHolding;
|
|
10
|
-
const current = ps_optimistic_release_service_1.PsOptimisticReleaseService.next(remembered, rows, isActive, apply);
|
|
10
|
+
const current = ps_optimistic_release_service_1.PsOptimisticReleaseService.next(remembered, rows, isActive, isHolding, apply);
|
|
11
11
|
if (current !== remembered)
|
|
12
12
|
setRemembered(current);
|
|
13
13
|
const { changes } = current;
|
|
@@ -24,6 +24,7 @@ const usePsOptimisticRows = ({ apply, isHolding = false, isSaving, rows, }) => {
|
|
|
24
24
|
changes: [...previous.changes, change],
|
|
25
25
|
drainBase: null,
|
|
26
26
|
wasActive: previous.wasActive,
|
|
27
|
+
wasHolding: previous.wasHolding,
|
|
27
28
|
})), [rows]);
|
|
28
29
|
const forgetLast = (0, react_1.useCallback)(() => setRemembered((previous) => ({ ...previous, changes: previous.changes.slice(0, -1) })), []);
|
|
29
30
|
const rollback = (0, react_1.useCallback)(() => setRemembered(ps_optimistic_release_service_1.PsOptimisticReleaseService.empty(rows)), [rows]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PsOptimisticChanges } from '../interfaces/ps-optimistic-changes';
|
|
2
2
|
export declare class PsOptimisticReleaseService {
|
|
3
3
|
static empty<Row, Change>(rows: Row[]): PsOptimisticChanges<Row, Change>;
|
|
4
|
-
static next<Row, Change>(remembered: PsOptimisticChanges<Row, Change>, rows: Row[], isActive: boolean, apply: (rows: Row[], changes: Change[]) => Row[]): PsOptimisticChanges<Row, Change>;
|
|
4
|
+
static next<Row, Change>(remembered: PsOptimisticChanges<Row, Change>, rows: Row[], isActive: boolean, isHolding: boolean, apply: (rows: Row[], changes: Change[]) => Row[]): PsOptimisticChanges<Row, Change>;
|
|
5
5
|
}
|
|
@@ -4,13 +4,16 @@ exports.PsOptimisticReleaseService = void 0;
|
|
|
4
4
|
const ps_deep_equal_service_1 = require("./ps-deep-equal-service");
|
|
5
5
|
class PsOptimisticReleaseService {
|
|
6
6
|
static empty(rows) {
|
|
7
|
-
return { base: rows, changes: [], drainBase: null, wasActive: false };
|
|
7
|
+
return { base: rows, changes: [], drainBase: null, wasActive: false, wasHolding: false };
|
|
8
8
|
}
|
|
9
|
-
static next(remembered, rows, isActive, apply) {
|
|
9
|
+
static next(remembered, rows, isActive, isHolding, apply) {
|
|
10
10
|
if (isActive) {
|
|
11
|
-
|
|
11
|
+
const wasHolding = remembered.wasHolding || isHolding;
|
|
12
|
+
if (remembered.wasActive &&
|
|
13
|
+
remembered.drainBase === null &&
|
|
14
|
+
remembered.wasHolding === wasHolding)
|
|
12
15
|
return remembered;
|
|
13
|
-
return { ...remembered, drainBase: null, wasActive: true };
|
|
16
|
+
return { ...remembered, drainBase: null, wasActive: true, wasHolding };
|
|
14
17
|
}
|
|
15
18
|
if (remembered.changes.length === 0) {
|
|
16
19
|
if (remembered.base === rows && !remembered.wasActive)
|
|
@@ -18,10 +21,13 @@ class PsOptimisticReleaseService {
|
|
|
18
21
|
return PsOptimisticReleaseService.empty(rows);
|
|
19
22
|
}
|
|
20
23
|
if (remembered.wasActive) {
|
|
24
|
+
if (remembered.wasHolding && rows !== remembered.base) {
|
|
25
|
+
return PsOptimisticReleaseService.empty(rows);
|
|
26
|
+
}
|
|
21
27
|
if (!ps_deep_equal_service_1.PsDeepEqualService.isEqual(rows, remembered.base)) {
|
|
22
28
|
return PsOptimisticReleaseService.empty(rows);
|
|
23
29
|
}
|
|
24
|
-
return { ...remembered, drainBase: rows, wasActive: false };
|
|
30
|
+
return { ...remembered, drainBase: rows, wasActive: false, wasHolding: false };
|
|
25
31
|
}
|
|
26
32
|
const reference = remembered.drainBase === null ? remembered.base : remembered.drainBase;
|
|
27
33
|
if (!ps_deep_equal_service_1.PsDeepEqualService.isEqual(rows, reference)) {
|