Cómo ver si los datos del Form Toolkit están sucios

Continuando la discusión de Discourse toolkit para renderizar formularios:slight_smile:

Quiero que mi botón de guardar esté disponible solo cuando haya algo que guardar.

Buscando isDirty en todos los plugins no encuentra nada. El único lugar donde lo veo en el núcleo está en el toolkit.

Seguro que hay alguna manera de ver si un botón de guardar debe estar activo.

Tengo esto:


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 podría ser indefinido hasta que el formulario se registre
    console.log("submitDisabled", this);
    return !this.formApi?.isDirty;
  }

....

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

y esto (he intentado un montón de cosas):

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

No he podido averiguar cómo ver si los datos han cambiado para saber guardarlos. No entiendo por qué no encuentro un ejemplo de esto. He intentado un montón de cosas que parecen el ejemplo de la documentación, pero ninguna ha funcionado.

He mirado las páginas de configuración de administración, que sé que muestran un botón de guardar solo si los datos han cambiado, pero parece que no usan el toolkit de formularios.

Veo que mi función registerAPI(api) se llama, pero no veo isDirty en ella:

Luego, cuando lo registro, parece que es solo texto?

Por supuesto, isDirty es cuando quiero que el botón esté habilitado, no deshabilitado, pero otros ejemplos que obtuve (probablemente de ask.discourse.com) me dijeron que hiciera algo como @disabled={{not this.isDirty}} y no existe tal cosa como not, así que por ahora estaría feliz si funcionara al revés.

2 Me gusta