@alpaca-editor/core 1.0.3840 → 1.0.3842
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.
|
@@ -1,31 +1,49 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
import { loadPlaceholderInsertOptions, } from "../services/editService";
|
|
3
3
|
export function usePageModel(itemsRepository, pageItemDescriptor) {
|
|
4
4
|
const [page, setPage] = useState();
|
|
5
5
|
const [pageSkeleton, setPageSkeleton] = useState();
|
|
6
6
|
const [insertOptions, setInsertOptions] = useState([]);
|
|
7
|
+
const insertOptionsCache = useRef({});
|
|
8
|
+
// 2) whenever the descriptor changes, reset skeleton, page and clear cache
|
|
7
9
|
useEffect(() => {
|
|
8
10
|
setPage(undefined);
|
|
9
11
|
setPageSkeleton(undefined);
|
|
12
|
+
insertOptionsCache.current = {};
|
|
13
|
+
setInsertOptions([]);
|
|
10
14
|
}, [pageItemDescriptor]);
|
|
15
|
+
// 3) collect all placeholder-keys in a skeleton
|
|
16
|
+
const collectPlaceholderKeys = (skeleton) => {
|
|
17
|
+
const keys = [];
|
|
18
|
+
const collect = (c) => {
|
|
19
|
+
c.placeholders.forEach((ph) => {
|
|
20
|
+
keys.push(ph.key);
|
|
21
|
+
ph.components.forEach(collect);
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
collect(skeleton.rootComponent);
|
|
25
|
+
return keys;
|
|
26
|
+
};
|
|
27
|
+
// 4) load only missing insertOptions
|
|
11
28
|
useEffect(() => {
|
|
12
29
|
const loadInsertOptions = async () => {
|
|
13
30
|
if (!pageSkeleton)
|
|
14
31
|
return;
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
const allKeys = collectPlaceholderKeys(pageSkeleton);
|
|
33
|
+
// find which keys we haven’t cached yet
|
|
34
|
+
const missingKeys = allKeys.filter((k) => !(k in insertOptionsCache.current));
|
|
35
|
+
if (missingKeys.length) {
|
|
36
|
+
const newlyFetched = await loadPlaceholderInsertOptions(pageSkeleton.item, missingKeys);
|
|
37
|
+
// stash them in our cache
|
|
38
|
+
newlyFetched.forEach((opt) => {
|
|
39
|
+
insertOptionsCache.current[opt.key] = opt;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// now build the full list in the original placeholder order
|
|
43
|
+
const optionsInOrder = allKeys
|
|
44
|
+
.map((k) => insertOptionsCache.current[k])
|
|
45
|
+
.filter((opt) => !!opt);
|
|
46
|
+
setInsertOptions(optionsInOrder);
|
|
29
47
|
};
|
|
30
48
|
loadInsertOptions();
|
|
31
49
|
}, [pageSkeleton]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageModelBuilder.js","sourceRoot":"","sources":["../../../src/editor/client/pageModelBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pageModelBuilder.js","sourceRoot":"","sources":["../../../src/editor/client/pageModelBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/revision.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.0.
|
|
2
|
-
export declare const buildDate = "2025-04-
|
|
1
|
+
export declare const version = "1.0.3842";
|
|
2
|
+
export declare const buildDate = "2025-04-25 01:49:52";
|
package/dist/revision.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const version = "1.0.
|
|
2
|
-
export const buildDate = "2025-04-
|
|
1
|
+
export const version = "1.0.3842";
|
|
2
|
+
export const buildDate = "2025-04-25 01:49:52";
|
|
3
3
|
//# sourceMappingURL=revision.js.map
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
import {
|
|
3
3
|
Component,
|
|
4
4
|
ComponentSkeleton,
|
|
@@ -26,34 +26,61 @@ export function usePageModel(
|
|
|
26
26
|
PlaceholderInsertOptions[]
|
|
27
27
|
>([]);
|
|
28
28
|
|
|
29
|
+
const insertOptionsCache = useRef<Record<string, PlaceholderInsertOptions>>(
|
|
30
|
+
{},
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
// 2) whenever the descriptor changes, reset skeleton, page and clear cache
|
|
29
34
|
useEffect(() => {
|
|
30
35
|
setPage(undefined);
|
|
31
36
|
setPageSkeleton(undefined);
|
|
37
|
+
insertOptionsCache.current = {};
|
|
38
|
+
setInsertOptions([]);
|
|
32
39
|
}, [pageItemDescriptor]);
|
|
33
40
|
|
|
41
|
+
// 3) collect all placeholder-keys in a skeleton
|
|
42
|
+
const collectPlaceholderKeys = (skeleton: PageSkeleton): string[] => {
|
|
43
|
+
const keys: string[] = [];
|
|
44
|
+
const collect = (c: ComponentSkeleton) => {
|
|
45
|
+
c.placeholders.forEach((ph) => {
|
|
46
|
+
keys.push(ph.key);
|
|
47
|
+
ph.components.forEach(collect);
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
collect(skeleton.rootComponent);
|
|
51
|
+
return keys;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// 4) load only missing insertOptions
|
|
34
55
|
useEffect(() => {
|
|
35
56
|
const loadInsertOptions = async () => {
|
|
36
57
|
if (!pageSkeleton) return;
|
|
37
58
|
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
keys.push(placeholder.key);
|
|
43
|
-
placeholder.components.forEach((c) => collectFromComponent(c));
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
collectFromComponent(skeleton.rootComponent);
|
|
47
|
-
return keys;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const placeholderKeys = collectPlaceholderKeys(pageSkeleton);
|
|
51
|
-
const options = await loadPlaceholderInsertOptions(
|
|
52
|
-
pageSkeleton.item,
|
|
53
|
-
placeholderKeys,
|
|
59
|
+
const allKeys = collectPlaceholderKeys(pageSkeleton);
|
|
60
|
+
// find which keys we haven’t cached yet
|
|
61
|
+
const missingKeys = allKeys.filter(
|
|
62
|
+
(k) => !(k in insertOptionsCache.current),
|
|
54
63
|
);
|
|
55
|
-
|
|
64
|
+
|
|
65
|
+
if (missingKeys.length) {
|
|
66
|
+
const newlyFetched = await loadPlaceholderInsertOptions(
|
|
67
|
+
pageSkeleton.item,
|
|
68
|
+
missingKeys,
|
|
69
|
+
);
|
|
70
|
+
// stash them in our cache
|
|
71
|
+
newlyFetched.forEach((opt) => {
|
|
72
|
+
insertOptionsCache.current[opt.key] = opt;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// now build the full list in the original placeholder order
|
|
77
|
+
const optionsInOrder = allKeys
|
|
78
|
+
.map((k) => insertOptionsCache.current[k])
|
|
79
|
+
.filter((opt): opt is PlaceholderInsertOptions => !!opt);
|
|
80
|
+
|
|
81
|
+
setInsertOptions(optionsInOrder);
|
|
56
82
|
};
|
|
83
|
+
|
|
57
84
|
loadInsertOptions();
|
|
58
85
|
}, [pageSkeleton]);
|
|
59
86
|
|
package/src/revision.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = "1.0.
|
|
2
|
-
export const buildDate = "2025-04-
|
|
1
|
+
export const version = "1.0.3842";
|
|
2
|
+
export const buildDate = "2025-04-25 01:49:52";
|