@projectcaluma/ember-form-builder
Version:
Ember engine for building Caluma forms.
54 lines (44 loc) • 1.57 kB
JavaScript
import { action } from "@ember/object";
import { underscore } from "@ember/string";
import Component from "@glimmer/component";
import { queryManager } from "ember-apollo-client";
import { task } from "ember-concurrency";
import { trackedTask } from "reactiveweb/ember-concurrency";
import allFormatValidatorsQuery from "@projectcaluma/ember-form-builder/gql/queries/all-format-validators.graphql";
export default class CfbFormEditorQuestionValidation extends Component {
apollo;
get simpleQuestionType() {
return underscore(this.args.questionType.replace(/Question$/, ""));
}
get validators() {
return (
this._validators.value
?.map((edge) => edge.node)
.filter((node) => {
const allowed = node.allowedQuestionTypes;
return (
allowed.length === 0 || allowed.includes(this.simpleQuestionType)
);
}) ?? []
);
}
get selected() {
return this.validators.filter((validator) =>
(this.args.value?.edges.map((edge) => edge.node.slug) || []).includes(
validator.slug,
),
);
}
fetchFormatValidators = task({ drop: true }, async () => {
return await this.apollo.watchQuery(
{ query: allFormatValidatorsQuery, fetchPolicy: "cache-and-network" },
"allFormatValidators.edges",
);
});
_validators = trackedTask(this, this.fetchFormatValidators, () => []);
updateValidators(value) {
this.args.update({ edges: value.map(({ slug }) => ({ node: { slug } })) });
this.args.setDirty();
}
}