@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.
@@ -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 {};
@@ -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
@@ -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,2 @@
1
+ import { observer } from "mobx-react-lite";
2
+ export declare const createReactiveComponent: typeof observer;
@@ -0,0 +1,6 @@
1
+ "use client";
2
+ import { observer } from "mobx-react-lite";
3
+ const createReactiveComponent = observer;
4
+ export { createReactiveComponent };
5
+
6
+ //# sourceMappingURL=createReactiveComponent.js.map
@@ -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
@@ -0,0 +1,2 @@
1
+ import type { CmsEntry, CmsEntryValues } from "@webiny/cms-sdk";
2
+ export declare function useEntry<T extends CmsEntryValues = CmsEntryValues>(): CmsEntry<T> | null;
package/useEntry.js ADDED
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useEntryStore } from "./EntryStoreProvider.js";
3
+ function useEntry() {
4
+ const store = useEntryStore();
5
+ return store.getEntry();
6
+ }
7
+ export { useEntry };
8
+
9
+ //# sourceMappingURL=useEntry.js.map
@@ -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"}