Comment voir si les données du Form Toolkit sont modifiées ?

Continuant la discussion de Discourse toolkit pour le rendu des formulaires:slight_smile:

Je veux que mon bouton de sauvegarde ne soit disponible que lorsqu’il y a quelque chose à sauvegarder.

En recherchant isDirty dans tous les plugins, je ne trouve rien. Le seul endroit où je le vois dans le cœur du système est dans la boîte à outils.

Il doit y avoir un moyen de savoir si un bouton de sauvegarde doit être activé.

J’ai ceci :


export default class ServerCreate extends Component {
  @tracked formApi = null;
  @tracked isDirty = false;

  @action
  registerAPI(api) {
    console.log("registerAPI called", api);
    this.formApi = api;

    // api.onChange(() => {
    //   console.log("onChange!", api.isDirty);
    //   this.isDirty = api.isDirty;
    // });
  }

  get submitDisabled() {
    // formApi peut être indéfini jusqu'à ce que le formulaire s'enregistre
    console.log("submitDisabled", this);
    return !this.formApi?.isDirty;
  }

....

      <Form
        @data={{this.formData}}
        @onRegisterApi={{this.registerAPI}}
        @onSubmit={{this.handleSubmit}}
        as |form|
      >

et ceci (j’ai essayé plusieurs choses) :

            <form.Submit
              @label="pfaffmanager.server.save_button"
              class="save"
              @icon="check"
              @disabled={{this.registerAPI.isDirty}}
            />

Je n’ai pas réussi à comprendre comment savoir si les données ont été modifiées pour savoir s’il faut les enregistrer. Je ne comprends pas pourquoi je ne trouve pas d’exemple de cela. J’ai essayé plusieurs choses qui ressemblent à l’exemple de la documentation, mais aucune n’a fonctionné.

J’ai regardé les pages de configuration d’administration, dont je sais qu’elles affichent un bouton de sauvegarde uniquement si les données ont été modifiées, mais il semble qu’elles n’utilisent pas la boîte à outils des formulaires.

Je vois que ma fonction registerAPI(api) est appelée, mais je ne vois pas isDirty dedans :

Ensuite, quand je le connecte, on dirait que c’est juste du texte ?

Bien sûr, isDirty est quand je veux que le bouton soit activé, pas désactivé, mais d’autres exemples que j’ai obtenus (probablement de ask.discourse.com) m’ont dit de faire quelque chose comme @disabled={{not this.isDirty}} et il n’y a pas de tel chose que not, donc pour l’instant, je serais content si cela fonctionnait à l’envers.

2 « J'aime »