@picked/react 0.0.62-next.4 → 0.0.62-next.6

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,26 @@
1
+ import { Store } from 'effector';
2
+ import { Content } from '@picked/client';
3
+ /**
4
+ * Returns the registry store for a content id. Resolves the Picked client via
5
+ * `usePicked()` and returns `client.contents.getById(id)`. Consumers are
6
+ * responsible for calling `useUnit` to subscribe.
7
+ *
8
+ * Named with the `use` prefix so it satisfies React's rules-of-hooks (it
9
+ * indirectly calls `usePicked()`, which is itself a hook).
10
+ *
11
+ * @param {string} id - The content record id to look up.
12
+ * @returns {Store<Content | null>} The registry store; `null` until content is registered.
13
+ * @throws {Error} When called outside a `ClientProvider`. The error is propagated unchanged from `usePicked()`.
14
+ * @example
15
+ * ```tsx
16
+ * import { useUnit } from 'effector-react'
17
+ * import { useContent } from '@picked/react'
18
+ *
19
+ * const Banner = () => {
20
+ * const content = useUnit(useContent('lc_banner'))
21
+ * return <h1>{(content?.data?.headline as string) ?? ''}</h1>
22
+ * }
23
+ * ```
24
+ */
25
+ export declare function useContent(id: string): Store<Content | null>;
26
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/hooks/content.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAG7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAG5D"}
@@ -0,0 +1 @@
1
+ import{usePicked as e}from"./client.js";function t(t){return e().contents.getById(t)}export{t as useContent};
@@ -3,11 +3,12 @@
3
3
  */
4
4
  export { ClientContext, ClientProvider, ExperienceContext, ExperienceProvider } from '../context';
5
5
  export { usePicked, useExperience } from './client';
6
- export { useStep, useSetStepContext } from './step';
6
+ export { useStep, useSetStepContext, useStepContent } from './step';
7
7
  export type { StepContext } from './step';
8
8
  export { useSessionStorage, useLocalStorage } from './storage';
9
9
  export type { UseStorageOptions } from './storage';
10
10
  export * from './field';
11
11
  export { useFeature, useFeatureResult } from './feature';
12
12
  export { useAction, useActionResult } from './action';
13
+ export { useContent } from './content';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACjG,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACjG,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
@@ -1 +1 @@
1
- import{ClientContext as e,ClientProvider as t,ExperienceContext as n,ExperienceProvider as r}from"../context.js";import{useExperience as i,usePicked as a}from"./client.js";import{useAction as o,useActionResult as s}from"./action.js";import{useFeature as c,useFeatureResult as l}from"./feature.js";import{getField as u}from"./field.js";import{useSetStepContext as d,useStep as f}from"./step.js";import{useLocalStorage as p,useSessionStorage as m}from"./storage.js";export{e as ClientContext,t as ClientProvider,n as ExperienceContext,r as ExperienceProvider,u as getField,o as useAction,s as useActionResult,i as useExperience,c as useFeature,l as useFeatureResult,p as useLocalStorage,a as usePicked,m as useSessionStorage,d as useSetStepContext,f as useStep};
1
+ import{ClientContext as e,ClientProvider as t,ExperienceContext as n,ExperienceProvider as r}from"../context.js";import{useExperience as i,usePicked as a}from"./client.js";import{useAction as o,useActionResult as s}from"./action.js";import{useContent as c}from"./content.js";import{useFeature as l,useFeatureResult as u}from"./feature.js";import{getField as d}from"./field.js";import{useSetStepContext as f,useStep as p,useStepContent as m}from"./step.js";import{useLocalStorage as h,useSessionStorage as g}from"./storage.js";export{e as ClientContext,t as ClientProvider,n as ExperienceContext,r as ExperienceProvider,d as getField,o as useAction,s as useActionResult,c as useContent,i as useExperience,l as useFeature,u as useFeatureResult,h as useLocalStorage,a as usePicked,g as useSessionStorage,f as useSetStepContext,p as useStep,m as useStepContent};
@@ -1,11 +1,18 @@
1
1
  import { Store } from 'effector';
2
- import { ExperienceStep } from '@picked/client';
2
+ import { Content, ExperienceStep } from '@picked/client';
3
3
  import { FormInstance } from '../form';
4
4
  import { ReactFormField } from '../utils/map-field-to-react';
5
5
  export interface StepContext {
6
6
  step: Store<ExperienceStep>;
7
7
  /** Reactive store of fields with React-style event handlers and current state. */
8
8
  fields: Store<ReactFormField[]>;
9
+ /**
10
+ * Reactive store of the current step's CMS layout content. Resolves the step's
11
+ * `layoutContentId` against `client.contents` and stays reactive — when content is
12
+ * registered or updated, subscribers re-render. Yields `null` when the step has no
13
+ * `layoutContentId` or the referenced content has not been registered yet.
14
+ */
15
+ layoutContentStore: Store<Content | null>;
9
16
  isActive: boolean;
10
17
  /** @deprecated Use `isActive` instead. */
11
18
  isActiveStep: boolean;
@@ -31,4 +38,18 @@ export declare function useStep(): StepContext;
31
38
  * @example useSetStepContext('step-1')
32
39
  */
33
40
  export declare function useSetStepContext(stepKey: string): StepContext;
41
+ /**
42
+ * Returns the current step's resolved CMS content data, or `null` when no content is
43
+ * registered for the step's `layoutContentId`. Subscribes to `useStep().layoutContentStore`
44
+ * via Effector's `useUnit`, so the component re-renders on content updates.
45
+ *
46
+ * @returns {Record<string, unknown> | null} The Content record's `data`, or `null`.
47
+ * @throws {Error} When called outside `StepContextProvider`.
48
+ * @example
49
+ * ```tsx
50
+ * const content = useStepContent()
51
+ * return <Layout headline={content?.headline as string ?? ''} />
52
+ * ```
53
+ */
54
+ export declare function useStepContent(): Record<string, unknown> | null;
34
55
  //# sourceMappingURL=step.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/hooks/step.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAGjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAC3B,kFAAkF;IAClF,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAA;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAA;IACrB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,6CAA0C,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,WAAW,CAOrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAyC9D"}
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/hooks/step.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAGjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAC3B,kFAAkF;IAClF,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAA;IAC/B;;;;;OAKG;IACH,kBAAkB,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACzC,QAAQ,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,YAAY,EAAE,OAAO,CAAA;IACrB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,6CAA0C,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,WAAW,CAOrC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CA6D9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI/D"}
@@ -1 +1 @@
1
- import{useExperience as e}from"./client.js";import{useForm as t}from"../form/index.js";import{useStepRouter as n}from"../router/context.js";import{createContext as r,useContext as i,useMemo as a}from"react";var o=r(null);function s(){let e=i(o);if(!e)throw Error(`useStep must be used within a StepContextProvider`);return e}function c(r){let i=e(),{activeStep:o}=n(),s=a(()=>o?.key===r,[o?.key,r]),c=a(()=>i.treeStore.map(e=>e.steps.find(e=>e.key===r)??{id:r,key:r,name:``,fieldKeys:[]},{skipVoid:!1}),[i,r]),{form:l,fields:u}=t(r,a(()=>c.map(e=>e.name,{skipVoid:!1}),[c]),a(()=>c.map(e=>e.fieldKeys,{skipVoid:!1}),[c]));return{step:c,fields:u,isActive:s,isActiveStep:s,form:l}}export{o as StepContextProvider,c as useSetStepContext,s as useStep};
1
+ import{useExperience as e,usePicked as t}from"./client.js";import{useForm as n}from"../form/index.js";import{useStepRouter as r}from"../router/context.js";import{createContext as i,useContext as a,useMemo as o}from"react";import{combine as s}from"effector";import{useUnit as c}from"effector-react";var l=i(null);function u(){let e=a(l);if(!e)throw Error(`useStep must be used within a StepContextProvider`);return e}function d(i){let a=e(),c=t(),{activeStep:l}=r(),u=o(()=>l?.key===i,[l?.key,i]),d=o(()=>a.treeStore.map(e=>e.steps.find(e=>e.key===i)??{id:i,key:i,name:``,fieldKeys:[]},{skipVoid:!1}),[a,i]),{form:f,fields:p}=n(i,o(()=>d.map(e=>e.name,{skipVoid:!1}),[d]),o(()=>d.map(e=>e.fieldKeys,{skipVoid:!1}),[d]));return{step:d,fields:p,layoutContentStore:o(()=>s(d,c.contents.indexStore,(e,t)=>e.layoutContentId?t[e.layoutContentId]??null:null,{skipVoid:!1}),[d,c]),isActive:u,isActiveStep:u,form:f}}function f(){let{layoutContentStore:e}=u();return c(e)?.data??null}export{l as StepContextProvider,d as useSetStepContext,u as useStep,f as useStepContent};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/react",
3
- "version": "0.0.62-next.4",
3
+ "version": "0.0.62-next.6",
4
4
  "devDependencies": {
5
5
  "@picked/client": "workspace:*",
6
6
  "@repo/eslint-config": "workspace:*",
@@ -85,7 +85,7 @@
85
85
  },
86
86
  "module": "./dist/index.js",
87
87
  "peerDependencies": {
88
- "@picked/client": "0.0.62-next.4",
88
+ "@picked/client": "0.0.62-next.6",
89
89
  "effector": "^23.3.0",
90
90
  "effector-react": "^23.3.0",
91
91
  "react": "19.2.2",