@focus4/forms
Advanced tools
| import { Entity, EntityToType } from "@focus4/entities"; | ||
| import { StoreListNode, StoreNode } from "@focus4/stores"; | ||
| /** | ||
| * Crée un StoreListNode dans un state du composant à partir d'une définition d'entité. | ||
| * @param entity Un tuple une seule entité (pour différencier la création d'un StoreListNode de celle d'un StoreNode). | ||
| * @param initialData Les données initiales du store. | ||
| */ | ||
| export declare function useStoreNode<E extends Entity>(entity: [E], initialData?: EntityToType<E>[]): StoreListNode<E>; | ||
| /** | ||
| * Crée un StoreNode dans un state du composant à partir d'une définition d'entité. | ||
| * @param entity L'entité. | ||
| * @param initialData Les données initiales du store. | ||
| */ | ||
| export declare function useStoreNode<E extends Entity>(entity: E, initialData?: EntityToType<E>): StoreNode<E>; |
@@ -23,2 +23,4 @@ import { Ref } from "react"; | ||
| inputRef?: Ref<any>; | ||
| /** Surcharge du libellé du champ (il devrait à priori déjà être défini dans l'entité). */ | ||
| label?: string; | ||
| /** Handler de modification de la valeur. */ | ||
@@ -25,0 +27,0 @@ onChange?: (value: F["fieldType"]) => void; |
| export { autocompleteFor, fieldFor, Form, FormContext, registerFieldComponent, registerFormComponent, selectFor, useField } from "./fields"; | ||
| export { useFormActions, useFormNode, useLoad, useReferenceTracking } from "./stores"; | ||
| export { useFormActions, useFormNode, useLoad, useReferenceTracking, useStoreNode } from "./stores"; | ||
| export { useDisplay, useInput } from "./utils"; | ||
| export type { AutocompleteForOptions, FieldForOptions, SelectForOptions, UseFieldProps } from "./fields"; | ||
| export type { UseDisplayProps, UseInputProps } from "./utils"; |
+11
-6
| import { jsx } from 'react/jsx-runtime'; | ||
| import { createContext, useMemo, useContext, useCallback, useId, useLayoutEffect, useRef, useState, useEffect } from 'react'; | ||
| import { upperFirst, isFunction, takeWhile } from 'es-toolkit'; | ||
| import { action, autorun } from 'mobx'; | ||
| import { UndefinedComponent, themeable, FormActions, FormActionsBuilder, buildNode, isAnyStoreNode, isStoreListNode, FormListNodeBuilder, toFlatValues, FormNodeBuilder, LoadRegistration, NodeLoadBuilder, getDefaultFormatter } from '@focus4/stores'; | ||
| import { useTranslation } from 'react-i18next'; | ||
| import { UndefinedComponent, themeable, FormActions, FormActionsBuilder, isAnyStoreNode, makeStoreNode, isStoreListNode, FormListNodeBuilder, toFlatValues, FormNodeBuilder, LoadRegistration, NodeLoadBuilder, getDefaultFormatter } from '@focus4/stores'; | ||
| import { upperFirst, isFunction, takeWhile } from 'es-toolkit'; | ||
| import numberParser from 'intl-number-parser'; | ||
@@ -31,3 +31,3 @@ import { isNumberSchema, isIntSchema } from '@focus4/entities'; | ||
| const context = useContext(FormContext); | ||
| const { autocompleteProps = {}, displayProps = {}, errorDisplay = fieldProps?.errorDisplay ?? context.errorDisplay ?? "after-focus", field, inputRef, hasLabel = fieldProps?.hasLabel ?? !!field.$field.label, labelProps = {}, labelClassName, inputProps = {}, inputType = "input", selectProps = {}, showErrorWhenFocused = false } = props; | ||
| const { autocompleteProps = {}, displayProps = {}, errorDisplay = fieldProps?.errorDisplay ?? context.errorDisplay ?? "after-focus", field, inputRef, hasLabel = fieldProps?.hasLabel ?? !!field.$field.label, label = props.field.$field.label, labelProps = {}, labelClassName, inputProps = {}, inputType = "input", selectProps = {}, showErrorWhenFocused = false } = props; | ||
| const onChange = useCallback(props.onChange ?? | ||
@@ -78,3 +78,3 @@ action(`on${upperFirst(field.$field.name)}Change`, (value) => (field.value = value)), [field, props.onChange]); | ||
| (errorDisplay === "always" || (errorDisplay === "after-focus" && hasHadFocus)), [errorDisplay, hasFocus, hasHadFocus, showErrorWhenFocused]); | ||
| const { error, isEdit, value, $field: { comment, label, name, isRequired: required, domain: { AutocompleteComponent = UndefinedComponent, autocompleteProps: domainACP = {}, className = "", DisplayComponent = UndefinedComponent, displayFormatter, displayProps: domainDCP = {}, LabelComponent = UndefinedComponent, labelProps: domainLCP = {}, InputComponent = UndefinedComponent, inputProps: domainICP = {}, SelectComponent = UndefinedComponent, selectProps: domainSCP = {}, schema } } } = field; | ||
| const { error, isEdit, value, $field: { comment, name, isRequired: required, domain: { AutocompleteComponent = UndefinedComponent, autocompleteProps: domainACP = {}, className = "", DisplayComponent = UndefinedComponent, displayFormatter, displayProps: domainDCP = {}, LabelComponent = UndefinedComponent, labelProps: domainLCP = {}, InputComponent = UndefinedComponent, inputProps: domainICP = {}, SelectComponent = UndefinedComponent, selectProps: domainSCP = {}, schema } } } = field; | ||
| useEffect(() => { | ||
@@ -171,3 +171,3 @@ setHasHadFocus(false); | ||
| function useFormNode(entityOrNode, builder = (x) => x, initialData = undefined) { | ||
| const [node] = useState(() => (isAnyStoreNode(entityOrNode) ? entityOrNode : buildNode(entityOrNode))); | ||
| const [node] = useState(() => (isAnyStoreNode(entityOrNode) ? entityOrNode : makeStoreNode(entityOrNode))); | ||
| const [formNode] = useState(() => { | ||
@@ -252,2 +252,7 @@ let fn; | ||
| function useStoreNode(entity, initialData) { | ||
| const [node] = useState(() => makeStoreNode(entity, initialData)); | ||
| return node; | ||
| } | ||
| /** | ||
@@ -752,3 +757,3 @@ * Calcule la valeur à afficher pour un champ, à partir du formatteur, d'une liste de référence et/ou d'un keyResolver. | ||
| export { Form, FormContext, autocompleteFor, fieldFor, registerFieldComponent, registerFormComponent, selectFor, useDisplay, useField, useFormActions, useFormNode, useInput, useLoad, useReferenceTracking }; | ||
| export { Form, FormContext, autocompleteFor, fieldFor, registerFieldComponent, registerFormComponent, selectFor, useDisplay, useField, useFormActions, useFormNode, useInput, useLoad, useReferenceTracking, useStoreNode }; | ||
| //# sourceMappingURL=focus4.forms.js.map |
@@ -1,2 +0,2 @@ | ||
| import { EntityToType } from "@focus4/entities"; | ||
| import { Entity, EntityToType } from "@focus4/entities"; | ||
| import { FormActions, FormActionsBuilder, FormListNode, FormListNodeBuilder, FormNode, FormNodeBuilder, SourceNodeType, StoreListNode, StoreNode } from "@focus4/stores"; | ||
@@ -11,3 +11,3 @@ /** | ||
| */ | ||
| export declare function useFormNode<E, NE = E>(node: StoreListNode<E>, builder?: (s: FormListNodeBuilder<E, E>) => FormListNodeBuilder<NE, E>, initialData?: EntityToType<E>[] | (() => EntityToType<E>[]) | true): FormListNode<NE, E>; | ||
| export declare function useFormNode<E extends Entity, NE extends Entity = E>(node: StoreListNode<E>, builder?: (s: FormListNodeBuilder<E, E>) => FormListNodeBuilder<NE, E>, initialData?: EntityToType<E>[] | (() => EntityToType<E>[]) | true): FormListNode<NE, E>; | ||
| /** | ||
@@ -21,3 +21,3 @@ * Construit un FormListNode à partir d'un StoreListNode. | ||
| */ | ||
| export declare function useFormNode<E, NE = E>(node: StoreNode<E>, builder?: (s: FormNodeBuilder<E, E>) => FormNodeBuilder<NE, E>, initialData?: EntityToType<E> | (() => EntityToType<E>) | true): FormNode<NE, E>; | ||
| export declare function useFormNode<E extends Entity, NE extends Entity = E>(node: StoreNode<E>, builder?: (s: FormNodeBuilder<E, E>) => FormNodeBuilder<NE, E>, initialData?: EntityToType<E> | (() => EntityToType<E>) | true): FormNode<NE, E>; | ||
| /** | ||
@@ -29,3 +29,3 @@ * Construit un FormListNode à partir d'une définition d'entité. | ||
| */ | ||
| export declare function useFormNode<E, NE = E>(entity: [E], builder?: (s: FormListNodeBuilder<E, E>) => FormListNodeBuilder<NE, E>, initialData?: EntityToType<E>[] | (() => EntityToType<E>[])): FormListNode<NE, E>; | ||
| export declare function useFormNode<E extends Entity, NE extends Entity = E>(entity: [E], builder?: (s: FormListNodeBuilder<E, E>) => FormListNodeBuilder<NE, E>, initialData?: EntityToType<E>[] | (() => EntityToType<E>[])): FormListNode<NE, E>; | ||
| /** | ||
@@ -37,3 +37,3 @@ * Construit un FormNode à partir d'un StoreNode. | ||
| */ | ||
| export declare function useFormNode<E, NE = E>(entity: E, builder?: (s: FormNodeBuilder<E, E>) => FormNodeBuilder<NE, E>, initialData?: EntityToType<E> | (() => EntityToType<E>)): FormNode<NE, E>; | ||
| export declare function useFormNode<E extends Entity, NE extends Entity = E>(entity: E, builder?: (s: FormNodeBuilder<E, E>) => FormNodeBuilder<NE, E>, initialData?: EntityToType<E> | (() => EntityToType<E>)): FormNode<NE, E>; | ||
| /** | ||
@@ -40,0 +40,0 @@ * Permet de définir des actions de formulaires pour un noeud de formulaire. Les actions peuvent comprendre un service de chargement et un service de sauvegarde. |
| export { useFormActions, useFormNode } from "./form"; | ||
| export { useLoad, useReferenceTracking } from "./load"; | ||
| export { useStoreNode } from "./store"; |
@@ -1,2 +0,2 @@ | ||
| import { CollectionStore, NodeLoadBuilder, ReferenceDefinition, ReferenceStore, StoreListNode, StoreNode } from "@focus4/stores"; | ||
| import { LocalCollectionStore, NodeLoadBuilder, ReferenceDefinition, ReferenceStore, StoreListNode, StoreNode } from "@focus4/stores"; | ||
| /** | ||
@@ -12,3 +12,3 @@ * Enregistre un service de chargement sur un store (`storeNode.load()` ou `collectionStore.search()`). | ||
| */ | ||
| export declare function useLoad<SN extends StoreListNode | StoreNode | CollectionStore>(node: SN, builder: (builder: NodeLoadBuilder<SN>) => NodeLoadBuilder<SN>, deps?: any[]): readonly [boolean, string]; | ||
| export declare function useLoad<SN extends StoreListNode | StoreNode | LocalCollectionStore>(node: SN, builder: (builder: NodeLoadBuilder<SN>) => NodeLoadBuilder<SN>, deps?: any[]): readonly [boolean, string]; | ||
| /** | ||
@@ -15,0 +15,0 @@ * Ajoute un (ou plusieurs) id(s) de suivi donné au chargement des listes de référence demandées. |
+10
-11
| { | ||
| "name": "@focus4/forms", | ||
| "version": "12.8.3", | ||
| "version": "12.9.0", | ||
| "description": "Focus v4, forms module", | ||
@@ -18,7 +18,7 @@ "main": "lib/focus4.forms.js", | ||
| "dependencies": { | ||
| "@focus4/entities": "12.8.0", | ||
| "@focus4/stores": "12.8.3", | ||
| "es-toolkit": "~1.43.0", | ||
| "intl-number-parser": "~1.0.6", | ||
| "tslib": "~2.8.1" | ||
| "@focus4/entities": "12.9.0", | ||
| "@focus4/stores": "12.9.0", | ||
| "es-toolkit": "^1.45.1", | ||
| "intl-number-parser": "^1.0.6", | ||
| "tslib": "^2.8.1" | ||
| }, | ||
@@ -33,7 +33,6 @@ "peerDependencies": { | ||
| "devDependencies": { | ||
| "@focus4/tooling": "12.8.3", | ||
| "@testing-library/react": "16.3.1", | ||
| "jsdom": "27.4.0" | ||
| }, | ||
| "gitHead": "aac95e156ff265f82f92070c395ab9284365d4f6" | ||
| "@focus4/tooling": "12.9.0", | ||
| "@testing-library/react": "16.3.2", | ||
| "jsdom": "28.1.0" | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
147291
2.06%20
5.26%1068
2.01%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated
Updated
Updated