klee-contrib/focus4

[makeFormActions] Gestion de plusieurs actions save

Closed this issue · 0 comments

sebez commented

Besoin

Sur mon application, les formulaires sont toujours en éditions, et les boutons d'actions sont réunis dans une button bar fixée en bas de l'écran.

Sur un formulaire, j'ai plusieurs actions de "save" : une qui sauvegarde simplement le formulaire, et d'autres qui sauvegardent + une action de workflow métier (validation / dévalidation/ ...).

Constat

Le makeFormActions ne supporte qu'une seule action de save.

Cela m'oblige à appeler makeFormActions plusieurs fois, une fois par service de "save".

     actions = makeFormActionsMec(this.entity, {
        getLoadParams: () => grosSiteViewStore.withView(({id}) => id && [+id]),
        load: getMontageInfo,
        save: saveMontageInfo        
    });

    topActions = makeFormActionsMec(
        this.entity,
        save: toperMontage
    });

Je dois alors agréger à la main les loading de chaque action pour piloter l'anti-rejeu sur mes boutons.

/** Obtient les props d'un panel / boutons */
    @computed
    get panelProps(): GlobalPanelProps {
        return {loading: this.actions.isLoading || this.topActions.isLoading};
    }

Proposition

Le makeFormActions pourrait prendre en entrée un nombre arbitraire de save.

Avec du TypeScript barbare, on pourrait produire un objet d'actions avec une propriété par save, ayant le même nom, mais wrappé comme un save normal (avec gestion du loading).