diff --git a/packages/form/addon/components/document-validity.hbs b/packages/form/addon/components/document-validity.hbs index b58c3b85d..9041f4ede 100644 --- a/packages/form/addon/components/document-validity.hbs +++ b/packages/form/addon/components/document-validity.hbs @@ -1,7 +1,7 @@ {{#if @validateOnEnter}}
- {{yield this.isValid this.validate}} + {{yield this.isValid this.validate this.isValidating}}
{{else}} - {{yield this.isValid this.validate}} + {{yield this.isValid this.validate this.isValidating}} {{/if}} \ No newline at end of file diff --git a/packages/form/addon/components/document-validity.js b/packages/form/addon/components/document-validity.js index 52c7cb800..82d06b09d 100644 --- a/packages/form/addon/components/document-validity.js +++ b/packages/form/addon/components/document-validity.js @@ -1,6 +1,6 @@ import { action } from "@ember/object"; import Component from "@glimmer/component"; -import { restartableTask } from "ember-concurrency"; +import { task } from "ember-concurrency"; import { cached } from "tracked-toolbox"; /** @@ -39,8 +39,11 @@ export default class DocumentValidity extends Component { .every((f) => f.isValid); } - @restartableTask - *_validate() { + get isValidating() { + return this._validate.isRunning; + } + + _validate = task({ restartable: true }, async () => { const saveTasks = this.args.document.fields .flatMap((field) => [ ...[...(field._components ?? [])].map((c) => c.save.last), @@ -50,11 +53,13 @@ export default class DocumentValidity extends Component { // Wait until all currently running save tasks in the UI and in the field // itself are finished - yield Promise.all(saveTasks); + await Promise.all(saveTasks); - for (const field of this.args.document.fields) { - yield field.validate.linked().perform(); - } + await Promise.all( + this.args.document.fields.map( + async (field) => await field.validate.linked().perform(), + ), + ); if (this.isValid) { this.args.onValid?.(); @@ -63,7 +68,7 @@ export default class DocumentValidity extends Component { } return this.isValid; - } + }); @action validate() {