Skip to content

Commit

Permalink
Simplification type FormActions
Browse files Browse the repository at this point in the history
  • Loading branch information
JabX committed Feb 3, 2025
1 parent 179e8ac commit c38360d
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 26 deletions.
10 changes: 5 additions & 5 deletions packages/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
},
"devDependencies": {
"@focus4/tooling": "11.23.6",
"@storybook/addon-essentials": "8.5.2",
"@storybook/blocks": "8.5.2",
"@storybook/react-vite": "8.5.2",
"storybook": "8.5.2",
"@storybook/addon-essentials": "8.5.3",
"@storybook/blocks": "8.5.3",
"@storybook/react-vite": "8.5.3",
"storybook": "8.5.3",
"storybook-dark-mode": "4.0.2"
}
}
}
29 changes: 15 additions & 14 deletions packages/stores/src/entity/form/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,25 @@ export interface ActionsPanelProps {
}

/** Gère les actions d'un formulaire. A n'utiliser QUE pour des formulaires (avec de la sauvegarde). */
export class FormActions<
FN extends FormListNode | FormNode = any,
A extends readonly any[] = never,
C extends SourceNodeType<FN> | void | string | number = never,
U extends SourceNodeType<FN> | void | string | number = never,
S extends SourceNodeType<FN> | void | string | number = never
> extends LoadRegistration<FN["sourceNode"], A> {
export class FormActions<A extends readonly any[] = never> extends LoadRegistration<A> {
/** Mode d'affichage des erreurs du formulaire. */
errorDisplay: "after-focus" | "always" | "never";

protected declare builder: FormActionsBuilder<FN, A, C, U, S>;
protected declare builder: FormActionsBuilder<FormListNode | FormNode, A, any, any, any>;

private readonly formNode: FN;
private readonly formNode: FormListNode | FormNode;

/**
* Enregistre des actions de formulaire sur un noeud.
* @param node Le noeud.
* @param builder Builder pour les actions de forumaire.
* @param trackingId Id de suivi de requête pour ce load.
*/
constructor(formNode: FN, builder: FormActionsBuilder<FN, A, C, U, S>, trackingId = v4()) {
constructor(
formNode: FormListNode | FormNode,
builder: FormActionsBuilder<FormListNode | FormNode, A, any, any, any>,
trackingId = v4()
) {
super(formNode.sourceNode, builder, trackingId);
this.formNode = formNode;

Expand Down Expand Up @@ -163,7 +161,7 @@ export class FormActions<
};
}

const data = await requestStore.track<C | U | S>([this.trackingId, ...this.builder.trackingIds], () => {
const data = await requestStore.track<object>([this.trackingId, ...this.builder.trackingIds], () => {
const d = toFlatValues(this.formNode);
if (this.builder.saveService) {
return this.builder.saveService(d);
Expand Down Expand Up @@ -230,7 +228,10 @@ export class FormActions<
this.formNode.clear();
}

override register(node?: FN["sourceNode"], builder?: NodeLoadBuilder<FN["sourceNode"], A>) {
override register(
node?: (FormListNode | FormNode)["sourceNode"],
builder?: FormActionsBuilder<FormListNode | FormNode, A, any, any, any>
) {
const loadDisposer = super.register(node, builder);

if (this.builder.confirmation) {
Expand Down Expand Up @@ -260,12 +261,12 @@ export class FormActions<
? await requestStore.track([this.trackingId, ...this.builder.trackingIds], () =>
this.builder.initService!()
)
: ({} as SourceNodeType<FN>);
: ({} as SourceNodeType<FormListNode | FormNode>);

this.formNode.form._initialData = merge(this.formNode.form._initialData ?? {}, initData);

if (isFormNode(this.formNode)) {
this.formNode.sourceNode.replace(this.formNode.form._initialData!);
this.formNode.sourceNode.replace(this.formNode.form._initialData);
} else {
this.formNode.sourceNode.replaceNodes(this.formNode.form._initialData!);
}
Expand Down
14 changes: 9 additions & 5 deletions packages/stores/src/entity/store/load.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,29 @@ interface LoadRegistrationHandlers<SN extends StoreNode | StoreListNode> {
}

/** Enregistrement de chargement. */
export class LoadRegistration<SN extends StoreListNode | StoreNode = any, A extends readonly any[] = any[]> {
export class LoadRegistration<A extends readonly any[] = never> {
/**
* Id du suivi de requêtes associé à cette enregistrement de chargement.
*
* Il pourra être utilisé pour enregistrer d'autres services sur cet id pour combiner leur état de chargement.
*/
readonly trackingId: string;

protected builder: NodeLoadBuilder<SN, A>;
protected builder: NodeLoadBuilder<StoreNode | StoreListNode, A>;

private node: SN;
private node: StoreNode | StoreListNode;

/**
* Enregistre un service de chargement sur un noeud.
* @param node Le noeud.
* @param builder Builder pour le service de chargement.
* @param trackingId Id de suivi de requête pour ce load.
*/
constructor(node: SN, builder: NodeLoadBuilder<SN, A>, trackingId = v4()) {
constructor(
node: StoreNode | StoreListNode,
builder: NodeLoadBuilder<StoreNode | StoreListNode, A>,
trackingId = v4()
) {
if (isAnyFormNode(node) && !!builder.loadService) {
throw new Error("Impossible d'enregistrer 'load' sur un `FormNode`");
}
Expand Down Expand Up @@ -125,7 +129,7 @@ export class LoadRegistration<SN extends StoreListNode | StoreNode = any, A exte
* @param node Éventuel nouveau noeud de store, pour remplacer l'ancien.
* @param builder Éventuel nouveau builder, pour remplace l'ancien.
*/
register(node?: SN, builder?: NodeLoadBuilder<SN, A>) {
register(node?: StoreNode | StoreListNode, builder?: NodeLoadBuilder<StoreNode | StoreListNode, A>) {
if (node) {
if (isAnyFormNode(node) && !!builder?.loadService) {
throw new Error("Impossible d'enregistrer 'load' sur un `FormNode`");
Expand Down
4 changes: 2 additions & 2 deletions packages/toolbox/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
"@focus4/core": "11.23.6",
"@focus4/styling": "11.23.6",
"@types/luxon": "3.4.2",
"framer-motion": "12.0.6",
"framer-motion": "12.0.8",
"luxon": "3.5.0"
},
"devDependencies": {
"@focus4/tooling": "11.23.6"
}
}
}

0 comments on commit c38360d

Please sign in to comment.