@webiny/cms-nextjs 0.0.0-unstable.0156a4c312
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/ConnectToEntryEditor.d.ts +10 -0
- package/ConnectToEntryEditor.js +27 -0
- package/ConnectToEntryEditor.js.map +1 -0
- package/DynamicZoneField.d.ts +8 -0
- package/DynamicZoneField.js +33 -0
- package/DynamicZoneField.js.map +1 -0
- package/EntryRenderer.d.ts +12 -0
- package/EntryRenderer.js +52 -0
- package/EntryRenderer.js.map +1 -0
- package/EntryStoreProvider.d.ts +11 -0
- package/EntryStoreProvider.js +22 -0
- package/EntryStoreProvider.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/RefField.d.ts +17 -0
- package/RefField.js +37 -0
- package/RefField.js.map +1 -0
- package/createReactiveComponent.d.ts +2 -0
- package/createReactiveComponent.js +6 -0
- package/createReactiveComponent.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +8 -0
- package/package.json +45 -0
- package/useEntry.d.ts +2 -0
- package/useEntry.js +9 -0
- package/useEntry.js.map +1 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type EntryStoreConfig } from "@webiny/cms-sdk";
|
|
3
|
+
interface ConnectToEntryEditorProps {
|
|
4
|
+
modelId: string;
|
|
5
|
+
entryId: string;
|
|
6
|
+
storeConfig?: EntryStoreConfig;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const ConnectToEntryEditor: ({ modelId, entryId, storeConfig, children }: ConnectToEntryEditorProps) => React.JSX.Element | null;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import react, { useEffect, useState } from "react";
|
|
3
|
+
import { contentSdk } from "@webiny/cms-sdk";
|
|
4
|
+
import { EntryStoreProvider } from "./EntryStoreProvider.js";
|
|
5
|
+
const ConnectToEntryEditor = ({ modelId, entryId, storeConfig, children })=>{
|
|
6
|
+
const [entry, setEntry] = useState(null);
|
|
7
|
+
useEffect(()=>{
|
|
8
|
+
contentSdk.getEntry({
|
|
9
|
+
modelId,
|
|
10
|
+
entryId
|
|
11
|
+
}).then((result)=>{
|
|
12
|
+
if (result) setEntry(result);
|
|
13
|
+
});
|
|
14
|
+
}, [
|
|
15
|
+
modelId,
|
|
16
|
+
entryId
|
|
17
|
+
]);
|
|
18
|
+
if (!entry) return null;
|
|
19
|
+
return /*#__PURE__*/ react.createElement(EntryStoreProvider, {
|
|
20
|
+
entryId: entryId,
|
|
21
|
+
entry: entry,
|
|
22
|
+
storeConfig: storeConfig
|
|
23
|
+
}, children);
|
|
24
|
+
};
|
|
25
|
+
export { ConnectToEntryEditor };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=ConnectToEntryEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectToEntryEditor.js","sources":["../src/ConnectToEntryEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { contentSdk, type CmsEntry, type EntryStoreConfig } from \"@webiny/cms-sdk\";\nimport { EntryStoreProvider } from \"./EntryStoreProvider.js\";\n\ninterface ConnectToEntryEditorProps {\n modelId: string;\n entryId: string;\n storeConfig?: EntryStoreConfig;\n children: React.ReactNode;\n}\n\nexport const ConnectToEntryEditor = ({\n modelId,\n entryId,\n storeConfig,\n children\n}: ConnectToEntryEditorProps) => {\n const [entry, setEntry] = useState<CmsEntry | null>(null);\n\n useEffect(() => {\n contentSdk.getEntry({ modelId, entryId }).then(result => {\n if (result) {\n setEntry(result);\n }\n });\n }, [modelId, entryId]);\n\n if (!entry) {\n return null;\n }\n\n return (\n <EntryStoreProvider entryId={entryId} entry={entry} storeConfig={storeConfig}>\n {children}\n </EntryStoreProvider>\n );\n};\n"],"names":["ConnectToEntryEditor","modelId","entryId","storeConfig","children","entry","setEntry","useState","useEffect","contentSdk","result","EntryStoreProvider"],"mappings":";;;;AAaO,MAAMA,uBAAuB,CAAC,EACjCC,OAAO,EACPC,OAAO,EACPC,WAAW,EACXC,QAAQ,EACgB;IACxB,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAA0B;IAEpDC,UAAU;QACNC,WAAW,QAAQ,CAAC;YAAER;YAASC;QAAQ,GAAG,IAAI,CAACQ,CAAAA;YAC3C,IAAIA,QACAJ,SAASI;QAEjB;IACJ,GAAG;QAACT;QAASC;KAAQ;IAErB,IAAI,CAACG,OACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACM,oBAAkBA;QAAC,SAAST;QAAS,OAAOG;QAAO,aAAaF;OAC5DC;AAGb"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface DynamicZoneProps {
|
|
3
|
+
value: unknown;
|
|
4
|
+
}
|
|
5
|
+
export declare const DynamicZoneField: (({ value }: DynamicZoneProps) => React.JSX.Element | null) & React.NamedExoticComponent<DynamicZoneProps> & {
|
|
6
|
+
readonly type: ({ value }: DynamicZoneProps) => React.JSX.Element | null;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import react, { useMemo } from "react";
|
|
3
|
+
import { observer } from "mobx-react-lite";
|
|
4
|
+
import { ComponentRegistry, ComponentResolver } from "@webiny/cms-sdk";
|
|
5
|
+
import { useComponents, useModel } from "./EntryRenderer.js";
|
|
6
|
+
const DynamicZoneField = observer(({ value })=>{
|
|
7
|
+
const components = useComponents();
|
|
8
|
+
const model = useModel();
|
|
9
|
+
const registry = useMemo(()=>{
|
|
10
|
+
const reg = new ComponentRegistry();
|
|
11
|
+
for (const component of components)reg.register(component);
|
|
12
|
+
return reg;
|
|
13
|
+
}, [
|
|
14
|
+
components
|
|
15
|
+
]);
|
|
16
|
+
if (!model || !value) return null;
|
|
17
|
+
const items = Array.isArray(value) ? value : [
|
|
18
|
+
value
|
|
19
|
+
];
|
|
20
|
+
const resolver = new ComponentResolver(registry);
|
|
21
|
+
const resolved = resolver.resolve(items, model);
|
|
22
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, resolved.map((item, index)=>/*#__PURE__*/ react.createElement(ResolvedComponentRenderer, {
|
|
23
|
+
key: `${item.templateId}-${index}`,
|
|
24
|
+
resolved: item
|
|
25
|
+
})));
|
|
26
|
+
});
|
|
27
|
+
const ResolvedComponentRenderer = ({ resolved })=>{
|
|
28
|
+
const Comp = resolved.component;
|
|
29
|
+
return /*#__PURE__*/ react.createElement(Comp, resolved.props);
|
|
30
|
+
};
|
|
31
|
+
export { DynamicZoneField };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=DynamicZoneField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicZoneField.js","sources":["../src/DynamicZoneField.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { ComponentResolver, ComponentRegistry } from \"@webiny/cms-sdk\";\nimport type { ResolvedComponent } from \"@webiny/cms-sdk\";\nimport { useComponents, useModel } from \"./EntryRenderer.js\";\n\ninterface DynamicZoneProps {\n value: unknown;\n}\n\nexport const DynamicZoneField = observer(({ value }: DynamicZoneProps) => {\n const components = useComponents();\n const model = useModel();\n\n const registry = useMemo(() => {\n const reg = new ComponentRegistry();\n for (const component of components) {\n reg.register(component);\n }\n return reg;\n }, [components]);\n\n if (!model || !value) {\n return null;\n }\n\n const items = Array.isArray(value) ? value : [value];\n const resolver = new ComponentResolver(registry);\n const resolved = resolver.resolve(items, model);\n\n return (\n <>\n {resolved.map((item, index) => (\n <ResolvedComponentRenderer key={`${item.templateId}-${index}`} resolved={item} />\n ))}\n </>\n );\n});\n\ninterface ResolvedComponentRendererProps {\n resolved: ResolvedComponent;\n}\n\nconst ResolvedComponentRenderer = ({ resolved }: ResolvedComponentRendererProps) => {\n const Comp = resolved.component as React.ComponentType<Record<string, unknown>>;\n return <Comp {...resolved.props} />;\n};\n"],"names":["DynamicZoneField","observer","value","components","useComponents","model","useModel","registry","useMemo","reg","ComponentRegistry","component","items","Array","resolver","ComponentResolver","resolved","item","index","ResolvedComponentRenderer","Comp"],"mappings":";;;;;AAYO,MAAMA,mBAAmBC,SAAS,CAAC,EAAEC,KAAK,EAAoB;IACjE,MAAMC,aAAaC;IACnB,MAAMC,QAAQC;IAEd,MAAMC,WAAWC,QAAQ;QACrB,MAAMC,MAAM,IAAIC;QAChB,KAAK,MAAMC,aAAaR,WACpBM,IAAI,QAAQ,CAACE;QAEjB,OAAOF;IACX,GAAG;QAACN;KAAW;IAEf,IAAI,CAACE,SAAS,CAACH,OACX,OAAO;IAGX,MAAMU,QAAQC,MAAM,OAAO,CAACX,SAASA,QAAQ;QAACA;KAAM;IACpD,MAAMY,WAAW,IAAIC,kBAAkBR;IACvC,MAAMS,WAAWF,SAAS,OAAO,CAACF,OAAOP;IAEzC,OAAO,WAAP,GACI,0CACKW,SAAS,GAAG,CAAC,CAACC,MAAMC,QAAAA,WAAAA,GACjB,oBAACC,2BAAyBA;YAAC,KAAK,GAAGF,KAAK,UAAU,CAAC,CAAC,EAAEC,OAAO;YAAE,UAAUD;;AAIzF;AAMA,MAAME,4BAA4B,CAAC,EAAEH,QAAQ,EAAkC;IAC3E,MAAMI,OAAOJ,SAAS,SAAS;IAC/B,OAAO,WAAP,GAAO,oBAACI,MAASJ,SAAS,KAAK;AACnC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { CmsEntry, CmsModelDefinition, Component } from "@webiny/cms-sdk";
|
|
3
|
+
export declare const useComponents: () => Component[];
|
|
4
|
+
export declare const useModel: () => CmsModelDefinition | null;
|
|
5
|
+
interface EntryRendererProps {
|
|
6
|
+
entry: CmsEntry | null;
|
|
7
|
+
model: CmsModelDefinition;
|
|
8
|
+
components: Component[];
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare const EntryRenderer: ({ entry, model, components, children }: EntryRendererProps) => React.JSX.Element | null;
|
|
12
|
+
export {};
|
package/EntryRenderer.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import react, { useMemo } from "react";
|
|
3
|
+
import { componentRegistry, contentSdk, refCache } from "@webiny/cms-sdk";
|
|
4
|
+
import { EntryStoreProvider } from "./EntryStoreProvider.js";
|
|
5
|
+
import { ConnectToEntryEditor } from "./ConnectToEntryEditor.js";
|
|
6
|
+
const ComponentsContext = /*#__PURE__*/ react.createContext([]);
|
|
7
|
+
const ModelContext = /*#__PURE__*/ react.createContext(null);
|
|
8
|
+
const useComponents = ()=>react.useContext(ComponentsContext);
|
|
9
|
+
const useModel = ()=>react.useContext(ModelContext);
|
|
10
|
+
const EntryRenderer = ({ entry, model, components, children })=>{
|
|
11
|
+
components.forEach((c)=>componentRegistry.register(c));
|
|
12
|
+
refCache.setResolver(contentSdk);
|
|
13
|
+
const storeConfig = useMemo(()=>{
|
|
14
|
+
const refModels = model.metadata?.refModels;
|
|
15
|
+
if (!refModels || 0 === Object.keys(refModels).length) return {};
|
|
16
|
+
return {
|
|
17
|
+
refModels,
|
|
18
|
+
refResolver: contentSdk
|
|
19
|
+
};
|
|
20
|
+
}, [
|
|
21
|
+
model
|
|
22
|
+
]);
|
|
23
|
+
if (contentSdk.isEditing()) {
|
|
24
|
+
const entryId = entry ? entry.entryId : getEntryIdFromUrl();
|
|
25
|
+
return /*#__PURE__*/ react.createElement(ModelContext.Provider, {
|
|
26
|
+
value: model
|
|
27
|
+
}, /*#__PURE__*/ react.createElement(ComponentsContext.Provider, {
|
|
28
|
+
value: components
|
|
29
|
+
}, /*#__PURE__*/ react.createElement(ConnectToEntryEditor, {
|
|
30
|
+
modelId: model.modelId,
|
|
31
|
+
entryId: entryId,
|
|
32
|
+
storeConfig: storeConfig
|
|
33
|
+
}, children)));
|
|
34
|
+
}
|
|
35
|
+
if (!entry) return null;
|
|
36
|
+
return /*#__PURE__*/ react.createElement(ModelContext.Provider, {
|
|
37
|
+
value: model
|
|
38
|
+
}, /*#__PURE__*/ react.createElement(ComponentsContext.Provider, {
|
|
39
|
+
value: components
|
|
40
|
+
}, /*#__PURE__*/ react.createElement(EntryStoreProvider, {
|
|
41
|
+
entryId: entry.entryId,
|
|
42
|
+
entry: entry,
|
|
43
|
+
storeConfig: storeConfig
|
|
44
|
+
}, children)));
|
|
45
|
+
};
|
|
46
|
+
function getEntryIdFromUrl() {
|
|
47
|
+
const params = new URLSearchParams(window.location.search);
|
|
48
|
+
return params.get("wb.id") || "";
|
|
49
|
+
}
|
|
50
|
+
export { EntryRenderer, useComponents, useModel };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=EntryRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntryRenderer.js","sources":["../src/EntryRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { contentSdk, componentRegistry, refCache } from \"@webiny/cms-sdk\";\nimport type { CmsEntry, CmsModelDefinition, Component, EntryStoreConfig } from \"@webiny/cms-sdk\";\nimport { EntryStoreProvider } from \"./EntryStoreProvider.js\";\nimport { ConnectToEntryEditor } from \"./ConnectToEntryEditor.js\";\n\nconst ComponentsContext = React.createContext<Component[]>([]);\nconst ModelContext = React.createContext<CmsModelDefinition | null>(null);\n\nexport const useComponents = () => React.useContext(ComponentsContext);\nexport const useModel = () => React.useContext(ModelContext);\n\ninterface EntryRendererProps {\n entry: CmsEntry | null;\n model: CmsModelDefinition;\n components: Component[];\n children: React.ReactNode;\n}\n\nexport const EntryRenderer = ({ entry, model, components, children }: EntryRendererProps) => {\n components.forEach(c => componentRegistry.register(c));\n refCache.setResolver(contentSdk);\n\n const storeConfig = useMemo((): EntryStoreConfig => {\n const refModels = model.metadata?.refModels;\n if (!refModels || Object.keys(refModels).length === 0) {\n return {};\n }\n return {\n refModels,\n refResolver: contentSdk\n };\n }, [model]);\n\n if (contentSdk.isEditing()) {\n const entryId = entry ? entry.entryId : getEntryIdFromUrl();\n return (\n <ModelContext.Provider value={model}>\n <ComponentsContext.Provider value={components}>\n <ConnectToEntryEditor\n modelId={model.modelId}\n entryId={entryId}\n storeConfig={storeConfig}\n >\n {children}\n </ConnectToEntryEditor>\n </ComponentsContext.Provider>\n </ModelContext.Provider>\n );\n }\n\n if (!entry) {\n return null;\n }\n\n return (\n <ModelContext.Provider value={model}>\n <ComponentsContext.Provider value={components}>\n <EntryStoreProvider entryId={entry.entryId} entry={entry} storeConfig={storeConfig}>\n {children}\n </EntryStoreProvider>\n </ComponentsContext.Provider>\n </ModelContext.Provider>\n );\n};\n\nfunction getEntryIdFromUrl(): string {\n const params = new URLSearchParams(window.location.search);\n return params.get(\"wb.id\") || \"\";\n}\n"],"names":["ComponentsContext","React","ModelContext","useComponents","useModel","EntryRenderer","entry","model","components","children","c","componentRegistry","refCache","contentSdk","storeConfig","useMemo","refModels","Object","entryId","getEntryIdFromUrl","ConnectToEntryEditor","EntryStoreProvider","params","URLSearchParams","window"],"mappings":";;;;;AAQA,MAAMA,oBAAoB,WAAHA,GAAGC,MAAAA,aAAmB,CAAc,EAAE;AAC7D,MAAMC,eAAe,WAAHA,GAAGD,MAAAA,aAAmB,CAA4B;AAE7D,MAAME,gBAAgB,IAAMF,MAAAA,UAAgB,CAACD;AAC7C,MAAMI,WAAW,IAAMH,MAAAA,UAAgB,CAACC;AASxC,MAAMG,gBAAgB,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,UAAU,EAAEC,QAAQ,EAAsB;IACpFD,WAAW,OAAO,CAACE,CAAAA,IAAKC,kBAAkB,QAAQ,CAACD;IACnDE,SAAS,WAAW,CAACC;IAErB,MAAMC,cAAcC,QAAQ;QACxB,MAAMC,YAAYT,MAAM,QAAQ,EAAE;QAClC,IAAI,CAACS,aAAaC,AAAkC,MAAlCA,OAAO,IAAI,CAACD,WAAW,MAAM,EAC3C,OAAO,CAAC;QAEZ,OAAO;YACHA;YACA,aAAaH;QACjB;IACJ,GAAG;QAACN;KAAM;IAEV,IAAIM,WAAW,SAAS,IAAI;QACxB,MAAMK,UAAUZ,QAAQA,MAAM,OAAO,GAAGa;QACxC,OAAO,WAAP,GACI,oBAACjB,aAAa,QAAQ;YAAC,OAAOK;yBAC1B,oBAACP,kBAAkB,QAAQ;YAAC,OAAOQ;yBAC/B,oBAACY,sBAAoBA;YACjB,SAASb,MAAM,OAAO;YACtB,SAASW;YACT,aAAaJ;WAEZL;IAKrB;IAEA,IAAI,CAACH,OACD,OAAO;IAGX,OAAO,WAAP,GACI,oBAACJ,aAAa,QAAQ;QAAC,OAAOK;qBAC1B,oBAACP,kBAAkB,QAAQ;QAAC,OAAOQ;qBAC/B,oBAACa,oBAAkBA;QAAC,SAASf,MAAM,OAAO;QAAE,OAAOA;QAAO,aAAaQ;OAClEL;AAKrB;AAEA,SAASU;IACL,MAAMG,SAAS,IAAIC,gBAAgBC,OAAO,QAAQ,CAAC,MAAM;IACzD,OAAOF,OAAO,GAAG,CAAC,YAAY;AAClC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type EntryStore, type EntryStoreConfig, type CmsEntry } from "@webiny/cms-sdk";
|
|
3
|
+
interface EntryStoreProviderProps {
|
|
4
|
+
entryId: string;
|
|
5
|
+
entry?: CmsEntry;
|
|
6
|
+
storeConfig?: EntryStoreConfig;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare const EntryStoreProvider: ({ entryId, entry, storeConfig, children }: EntryStoreProviderProps) => React.JSX.Element;
|
|
10
|
+
export declare const useEntryStore: () => EntryStore;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import react, { useContext, useMemo } from "react";
|
|
3
|
+
import { entryStoreManager } from "@webiny/cms-sdk";
|
|
4
|
+
const EntryStoreContext = /*#__PURE__*/ react.createContext(void 0);
|
|
5
|
+
const EntryStoreProvider = ({ entryId, entry, storeConfig, children })=>{
|
|
6
|
+
const store = useMemo(()=>entryStoreManager.getStore(entryId), [
|
|
7
|
+
entryId
|
|
8
|
+
]);
|
|
9
|
+
if (storeConfig) store.configure(storeConfig);
|
|
10
|
+
if (entry) store.setEntry(entry);
|
|
11
|
+
return /*#__PURE__*/ react.createElement(EntryStoreContext.Provider, {
|
|
12
|
+
value: store
|
|
13
|
+
}, children);
|
|
14
|
+
};
|
|
15
|
+
const useEntryStore = ()=>{
|
|
16
|
+
const store = useContext(EntryStoreContext);
|
|
17
|
+
if (!store) throw new Error("useEntryStore must be used within an EntryStoreProvider");
|
|
18
|
+
return store;
|
|
19
|
+
};
|
|
20
|
+
export { EntryStoreProvider, useEntryStore };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=EntryStoreProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntryStoreProvider.js","sources":["../src/EntryStoreProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useContext, useMemo } from \"react\";\nimport {\n type EntryStore,\n type EntryStoreConfig,\n entryStoreManager,\n type CmsEntry\n} from \"@webiny/cms-sdk\";\n\nconst EntryStoreContext = React.createContext<EntryStore | undefined>(undefined);\n\ninterface EntryStoreProviderProps {\n entryId: string;\n entry?: CmsEntry;\n storeConfig?: EntryStoreConfig;\n children: React.ReactNode;\n}\n\nexport const EntryStoreProvider = ({\n entryId,\n entry,\n storeConfig,\n children\n}: EntryStoreProviderProps) => {\n const store = useMemo(() => entryStoreManager.getStore(entryId), [entryId]);\n\n if (storeConfig) {\n store.configure(storeConfig);\n }\n\n if (entry) {\n store.setEntry(entry);\n }\n\n return <EntryStoreContext.Provider value={store}>{children}</EntryStoreContext.Provider>;\n};\n\nexport const useEntryStore = (): EntryStore => {\n const store = useContext(EntryStoreContext);\n if (!store) {\n throw new Error(\"useEntryStore must be used within an EntryStoreProvider\");\n }\n return store;\n};\n"],"names":["EntryStoreContext","React","undefined","EntryStoreProvider","entryId","entry","storeConfig","children","store","useMemo","entryStoreManager","useEntryStore","useContext","Error"],"mappings":";;;AAUA,MAAMA,oBAAoB,WAAHA,GAAGC,MAAAA,aAAmB,CAAyBC;AAS/D,MAAMC,qBAAqB,CAAC,EAC/BC,OAAO,EACPC,KAAK,EACLC,WAAW,EACXC,QAAQ,EACc;IACtB,MAAMC,QAAQC,QAAQ,IAAMC,kBAAkB,QAAQ,CAACN,UAAU;QAACA;KAAQ;IAE1E,IAAIE,aACAE,MAAM,SAAS,CAACF;IAGpB,IAAID,OACAG,MAAM,QAAQ,CAACH;IAGnB,OAAO,WAAP,GAAO,oBAACL,kBAAkB,QAAQ;QAAC,OAAOQ;OAAQD;AACtD;AAEO,MAAMI,gBAAgB;IACzB,MAAMH,QAAQI,WAAWZ;IACzB,IAAI,CAACQ,OACD,MAAM,IAAIK,MAAM;IAEpB,OAAOL;AACX"}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @webiny/cms-nextjs
|
|
2
|
+
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
6
|
+
|
|
7
|
+
📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
package/RefField.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type CmsEntry, type CmsEntryValues } from "@webiny/cms-sdk";
|
|
3
|
+
interface RefValue {
|
|
4
|
+
id: string;
|
|
5
|
+
modelId: string;
|
|
6
|
+
}
|
|
7
|
+
type RefFieldProps<T extends CmsEntryValues = CmsEntryValues> = {
|
|
8
|
+
value: RefValue | RefValue[] | null | undefined;
|
|
9
|
+
children: (entries: CmsEntry<T>[]) => React.ReactNode;
|
|
10
|
+
loading?: React.ReactNode;
|
|
11
|
+
};
|
|
12
|
+
declare function RefFieldInner<T extends CmsEntryValues = CmsEntryValues>({ value, children, loading }: RefFieldProps<T>): React.JSX.Element | null;
|
|
13
|
+
export declare const RefField: typeof RefFieldInner;
|
|
14
|
+
export declare namespace RefField {
|
|
15
|
+
type Value = RefValue | RefValue[] | null | undefined;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
package/RefField.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import react, { useEffect } from "react";
|
|
3
|
+
import { observer } from "mobx-react-lite";
|
|
4
|
+
import { refCache } from "@webiny/cms-sdk";
|
|
5
|
+
function RefFieldInner({ value, children, loading }) {
|
|
6
|
+
const refs = normalizeRefs(value);
|
|
7
|
+
useEffect(()=>{
|
|
8
|
+
for (const ref of refs)refCache.resolve(ref.id, ref.modelId);
|
|
9
|
+
}, [
|
|
10
|
+
refs.map((r)=>r.id).join(",")
|
|
11
|
+
]);
|
|
12
|
+
if (0 === refs.length) return null;
|
|
13
|
+
const entries = [];
|
|
14
|
+
let allResolved = true;
|
|
15
|
+
for (const ref of refs){
|
|
16
|
+
const entry = refCache.get(ref.id);
|
|
17
|
+
if (void 0 === entry) {
|
|
18
|
+
allResolved = false;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
if (null !== entry) entries.push(entry);
|
|
22
|
+
}
|
|
23
|
+
if (!allResolved) return loading ? /*#__PURE__*/ react.createElement(react.Fragment, null, loading) : null;
|
|
24
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, null, children(entries));
|
|
25
|
+
}
|
|
26
|
+
const RefField = observer(RefFieldInner);
|
|
27
|
+
function normalizeRefs(value) {
|
|
28
|
+
if (!value) return [];
|
|
29
|
+
if (Array.isArray(value)) return value.filter((v)=>v && v.id && v.modelId);
|
|
30
|
+
if (value.id && value.modelId) return [
|
|
31
|
+
value
|
|
32
|
+
];
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
export { RefField };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=RefField.js.map
|
package/RefField.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RefField.js","sources":["../src/RefField.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { refCache, type CmsEntry, type CmsEntryValues } from \"@webiny/cms-sdk\";\n\ninterface RefValue {\n id: string;\n modelId: string;\n}\n\ntype RefFieldProps<T extends CmsEntryValues = CmsEntryValues> = {\n value: RefValue | RefValue[] | null | undefined;\n children: (entries: CmsEntry<T>[]) => React.ReactNode;\n loading?: React.ReactNode;\n};\n\nfunction RefFieldInner<T extends CmsEntryValues = CmsEntryValues>({\n value,\n children,\n loading\n}: RefFieldProps<T>) {\n const refs = normalizeRefs(value);\n\n useEffect(() => {\n for (const ref of refs) {\n refCache.resolve(ref.id, ref.modelId);\n }\n }, [refs.map(r => r.id).join(\",\")]);\n\n if (refs.length === 0) {\n return null;\n }\n\n const entries: CmsEntry<T>[] = [];\n let allResolved = true;\n\n for (const ref of refs) {\n const entry = refCache.get(ref.id);\n if (entry === undefined) {\n allResolved = false;\n break;\n }\n if (entry !== null) {\n entries.push(entry as CmsEntry<T>);\n }\n }\n\n if (!allResolved) {\n return loading ? <>{loading}</> : null;\n }\n\n return <>{children(entries)}</>;\n}\n\nexport const RefField = observer(RefFieldInner) as typeof RefFieldInner;\n\nexport namespace RefField {\n export type Value = RefValue | RefValue[] | null | undefined;\n}\n\nfunction normalizeRefs(value: RefValue | RefValue[] | null | undefined): RefValue[] {\n if (!value) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter(v => v && v.id && v.modelId);\n }\n if (value.id && value.modelId) {\n return [value];\n }\n return [];\n}\n"],"names":["RefFieldInner","value","children","loading","refs","normalizeRefs","useEffect","ref","refCache","r","entries","allResolved","entry","undefined","RefField","observer","Array","v"],"mappings":";;;;AAiBA,SAASA,cAAyD,EAC9DC,KAAK,EACLC,QAAQ,EACRC,OAAO,EACQ;IACf,MAAMC,OAAOC,cAAcJ;IAE3BK,UAAU;QACN,KAAK,MAAMC,OAAOH,KACdI,SAAS,OAAO,CAACD,IAAI,EAAE,EAAEA,IAAI,OAAO;IAE5C,GAAG;QAACH,KAAK,GAAG,CAACK,CAAAA,IAAKA,EAAE,EAAE,EAAE,IAAI,CAAC;KAAK;IAElC,IAAIL,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAO;IAGX,MAAMM,UAAyB,EAAE;IACjC,IAAIC,cAAc;IAElB,KAAK,MAAMJ,OAAOH,KAAM;QACpB,MAAMQ,QAAQJ,SAAS,GAAG,CAACD,IAAI,EAAE;QACjC,IAAIK,AAAUC,WAAVD,OAAqB;YACrBD,cAAc;YACd;QACJ;QACA,IAAIC,AAAU,SAAVA,OACAF,QAAQ,IAAI,CAACE;IAErB;IAEA,IAAI,CAACD,aACD,OAAOR,UAAU,WAAVA,GAAU,0CAAGA,WAAc;IAGtC,OAAO,WAAP,GAAO,0CAAGD,SAASQ;AACvB;AAEO,MAAMI,WAAWC,SAASf;AAMjC,SAASK,cAAcJ,KAA+C;IAClE,IAAI,CAACA,OACD,OAAO,EAAE;IAEb,IAAIe,MAAM,OAAO,CAACf,QACd,OAAOA,MAAM,MAAM,CAACgB,CAAAA,IAAKA,KAAKA,EAAE,EAAE,IAAIA,EAAE,OAAO;IAEnD,IAAIhB,MAAM,EAAE,IAAIA,MAAM,OAAO,EACzB,OAAO;QAACA;KAAM;IAElB,OAAO,EAAE;AACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createReactiveComponent.js","sources":["../src/createReactiveComponent.ts"],"sourcesContent":["\"use client\";\n\nimport { observer } from \"mobx-react-lite\";\n\nexport const createReactiveComponent = observer;\n"],"names":["createReactiveComponent","observer"],"mappings":";;AAIO,MAAMA,0BAA0BC"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "@webiny/cms-sdk";
|
|
2
|
+
export { EntryRenderer, useComponents, useModel } from "./EntryRenderer.js";
|
|
3
|
+
export { EntryStoreProvider, useEntryStore } from "./EntryStoreProvider.js";
|
|
4
|
+
export { ConnectToEntryEditor } from "./ConnectToEntryEditor.js";
|
|
5
|
+
export { DynamicZoneField } from "./DynamicZoneField.js";
|
|
6
|
+
export { useEntry } from "./useEntry.js";
|
|
7
|
+
export { RefField } from "./RefField.js";
|
|
8
|
+
export { createReactiveComponent } from "./createReactiveComponent.js";
|
package/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "@webiny/cms-sdk";
|
|
2
|
+
export { EntryRenderer, useComponents, useModel } from "./EntryRenderer.js";
|
|
3
|
+
export { EntryStoreProvider, useEntryStore } from "./EntryStoreProvider.js";
|
|
4
|
+
export { ConnectToEntryEditor } from "./ConnectToEntryEditor.js";
|
|
5
|
+
export { DynamicZoneField } from "./DynamicZoneField.js";
|
|
6
|
+
export { useEntry } from "./useEntry.js";
|
|
7
|
+
export { RefField } from "./RefField.js";
|
|
8
|
+
export { createReactiveComponent } from "./createReactiveComponent.js";
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/cms-nextjs",
|
|
3
|
+
"version": "0.0.0-unstable.0156a4c312",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/webiny/webiny-js.git"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./index.js",
|
|
11
|
+
"./*": "./*"
|
|
12
|
+
},
|
|
13
|
+
"description": "Next.js integration for Webiny CMS SDK.",
|
|
14
|
+
"contributors": [
|
|
15
|
+
"Pavel Denisjuk <pavel@webiny.com>"
|
|
16
|
+
],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@webiny/cms-sdk": "0.0.0-unstable.0156a4c312",
|
|
20
|
+
"mobx-react-lite": "5.1.2"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"next": ">=15.0.0 <16.0.0",
|
|
24
|
+
"react": ">=19.0.0 <20.0.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@webiny/build-tools": "0.0.0-unstable.0156a4c312",
|
|
28
|
+
"typescript": "7.0.2",
|
|
29
|
+
"vitest": "5.0.5"
|
|
30
|
+
},
|
|
31
|
+
"adio": {
|
|
32
|
+
"ignore": {
|
|
33
|
+
"dependencies": [
|
|
34
|
+
"@webiny/cms-sdk",
|
|
35
|
+
"mobx-react-lite"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"webiny": {
|
|
40
|
+
"publishFrom": "dist"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
}
|
|
45
|
+
}
|
package/useEntry.d.ts
ADDED
package/useEntry.js
ADDED
package/useEntry.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEntry.js","sources":["../src/useEntry.ts"],"sourcesContent":["\"use client\";\n\nimport { useEntryStore } from \"./EntryStoreProvider.js\";\nimport type { CmsEntry, CmsEntryValues } from \"@webiny/cms-sdk\";\n\nexport function useEntry<T extends CmsEntryValues = CmsEntryValues>(): CmsEntry<T> | null {\n const store = useEntryStore();\n return store.getEntry() as CmsEntry<T> | null;\n}\n"],"names":["useEntry","store","useEntryStore"],"mappings":";;AAKO,SAASA;IACZ,MAAMC,QAAQC;IACd,OAAOD,MAAM,QAAQ;AACzB"}
|