MCPcopy
hub / github.com/puckeditor/puck / resolveComponentData

Function resolveComponentData

packages/core/lib/resolve-component-data.ts:19–134  ·  view source on GitHub ↗
(
  item: T,
  config: Config,
  metadata: Metadata = {},
  onResolveStart?: (item: T) => void,
  onResolveEnd?: (item: T) => void,
  trigger: ResolveDataTrigger = "replace",
  parent: ComponentData | null = null,
  root: RootData = { props: {} }
)

Source from the content-addressed store, hash-verified

17} = { lastChange: {} };
18
19export const resolveComponentData = async <
20 T extends ComponentData | RootDataWithProps
21>(
22 item: T,
23 config: Config,
24 metadata: Metadata = {},
25 onResolveStart?: (item: T) => void,
26 onResolveEnd?: (item: T) => void,
27 trigger: ResolveDataTrigger = "replace",
28 parent: ComponentData | null = null,
29 root: RootData = { props: {} }
30) => {
31 const configForItem =
32 "type" in item && item.type !== "root"
33 ? config.components[item.type]
34 : config.root;
35
36 const resolvedItem: T = {
37 ...item,
38 };
39
40 const shouldRunResolver = configForItem?.resolveData && item.props;
41
42 const id = "id" in item.props ? item.props.id : "root";
43
44 if (shouldRunResolver) {
45 const {
46 item: oldItem = null,
47 resolved = {},
48 parentId: oldParentId = null,
49 } = cache.lastChange[id] || {};
50 // Skip inserted nodes for "move" trigger
51 // This is done this way to mitigate race conditions on insertion
52 const isRootOrInserted = oldParentId === null;
53 const parentChanged = !isRootOrInserted && parent?.props.id !== oldParentId;
54 const dataChanged = item && !deepEqual(item, oldItem);
55
56 const shouldSkip =
57 (trigger === "move" && !parentChanged) ||
58 (trigger !== "move" && trigger !== "force" && !dataChanged);
59
60 if (shouldSkip) {
61 return { node: resolved, didChange: false };
62 }
63
64 const changed = getChanged(item, oldItem) as any;
65
66 if (onResolveStart) {
67 onResolveStart(item);
68 }
69
70 const { props: resolvedProps, readOnly = {} } =
71 await configForItem.resolveData!(item, {
72 changed,
73 lastData: oldItem,
74 metadata: { ...metadata, ...configForItem.metadata },
75 trigger,
76 parent,

Callers 6

resolveNodeFunction · 0.90
createAppStoreFunction · 0.90
createOnChangeFunction · 0.85
moveComponentFunction · 0.85
insertComponentFunction · 0.85

Calls 3

getChangedFunction · 0.90
toComponentFunction · 0.90
mapFieldsFunction · 0.90

Tested by

no test coverage detected