diff --git a/packages/form/addon/components/cf-field/input/radio.hbs b/packages/form/addon/components/cf-field/input/radio.hbs index 0ede625c7..934546b7f 100644 --- a/packages/form/addon/components/cf-field/input/radio.hbs +++ b/packages/form/addon/components/cf-field/input/radio.hbs @@ -22,4 +22,10 @@ {{option.label}} {{/if}} -{{/each}} \ No newline at end of file +{{/each}} +{{#if (and @field.optional @field.answer.value)}} +
+ + {{t "caluma.form.power-select.reset"}} + +{{/if}} \ No newline at end of file diff --git a/packages/form/addon/components/cf-field/input/radio.js b/packages/form/addon/components/cf-field/input/radio.js new file mode 100644 index 000000000..8dbde4bee --- /dev/null +++ b/packages/form/addon/components/cf-field/input/radio.js @@ -0,0 +1,11 @@ +import { action } from "@ember/object"; +import Component from "@glimmer/component"; + +export default class CfFieldInpuRadio extends Component { + @action + reset(event) { + event.preventDefault(); + + this.args.onSave(null); + } +} diff --git a/packages/form/blueprints/@projectcaluma/ember-form/index.js b/packages/form/blueprints/@projectcaluma/ember-form/index.js index 46288ba9c..76720eeab 100644 --- a/packages/form/blueprints/@projectcaluma/ember-form/index.js +++ b/packages/form/blueprints/@projectcaluma/ember-form/index.js @@ -20,6 +20,7 @@ module.exports = { { name: "ember-flatpickr" }, { name: "ember-in-viewport" }, { name: "ember-math-helpers" }, + { name: "ember-truth-helpers" }, { name: "ember-power-select" }, ], }); diff --git a/packages/form/package.json b/packages/form/package.json index 25c3926f2..390896ad4 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -35,6 +35,7 @@ "ember-math-helpers": "^4.0.0", "ember-power-select": "^7.2.0", "ember-resources": "^6.4.2", + "ember-truth-helpers": "^4.0.3", "ember-uikit": "^9.0.0", "ember-validators": "^4.1.2", "graphql": "^15.8.0", diff --git a/packages/form/tests/integration/components/cf-field/input/radio-test.js b/packages/form/tests/integration/components/cf-field/input/radio-test.js index b03f70816..b5aed3d3c 100644 --- a/packages/form/tests/integration/components/cf-field/input/radio-test.js +++ b/packages/form/tests/integration/components/cf-field/input/radio-test.js @@ -86,19 +86,33 @@ module("Integration | Component | cf-field/input/radio", function (hooks) { }); test("it triggers save on click", async function (assert) { - assert.expect(1); - - this.set("save", (value) => assert.strictEqual(value, "option-1")); + this.set("value", false); + this.set("optional", true); + this.set("onSave", (value) => { + this.set("value", value); + assert.step("save"); + }); await render(hbs``); await click("label:nth-of-type(1) input"); + await click("[data-test-radio-reset]"); + + assert.verifySteps(["save", "save"]); + + this.set("optional", false); + await click("label:nth-of-type(1) input"); + + assert.verifySteps(["save"]); + assert.dom("[data-test-radio-reset]").isNotVisible(); }); test("it renders disabled options", async function (assert) { diff --git a/packages/form/translations/de.yaml b/packages/form/translations/de.yaml index b71486063..0075504e3 100644 --- a/packages/form/translations/de.yaml +++ b/packages/form/translations/de.yaml @@ -40,6 +40,7 @@ caluma: options-empty: "Keine Optionen vorhanden" search-placeholder: "Hier tippen um zu suchen" search-empty: "Keine Optionen gefunden" + reset: "Zurücksetzen" validation: blank: "Dieses Feld darf nicht leer gelassen werden" diff --git a/packages/form/translations/en.yaml b/packages/form/translations/en.yaml index 006486562..7af3daaa2 100644 --- a/packages/form/translations/en.yaml +++ b/packages/form/translations/en.yaml @@ -40,6 +40,7 @@ caluma: options-empty: "No options available" search-placeholder: "Type here to search options" search-empty: "Search didn't match any options" + reset: "Reset" validation: blank: "This field can't be blank" diff --git a/packages/form/translations/fr.yaml b/packages/form/translations/fr.yaml index 2904111ae..08e1b6e21 100644 --- a/packages/form/translations/fr.yaml +++ b/packages/form/translations/fr.yaml @@ -40,6 +40,7 @@ caluma: options-empty: "Pas d'options disponibles" search-placeholder: "Tapez ici pour rechercher" search-empty: "Pas d'options trouvées" + reset: "Réinitialiser" validation: blank: "Ce champ ne doit pas être laissé vide" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4dd75ced1..8a9098882 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -874,6 +874,9 @@ importers: ember-resources: specifier: ^6.4.2 version: 6.4.2(@ember/test-waiters@3.1.0)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/template@1.2.1)(ember-concurrency@3.1.1)(ember-source@5.5.0) + ember-truth-helpers: + specifier: ^4.0.3 + version: 4.0.3(ember-source@5.5.0) ember-uikit: specifier: ^9.0.0 version: 9.0.0(@glint/template@1.2.1)(ember-source@5.5.0)(webpack@5.89.0) @@ -19676,6 +19679,7 @@ packages: ember-power-select: 7.2.0(@babel/core@7.23.6)(@glint/template@1.2.1)(ember-source@5.5.0)(webpack@5.89.0) ember-resources: 6.4.2(@ember/test-waiters@3.1.0)(@glimmer/component@1.1.2)(@glimmer/tracking@1.1.2)(@glint/template@1.2.1)(ember-concurrency@3.1.1)(ember-source@5.5.0) ember-source: 5.5.0(@babel/core@7.23.6)(@glimmer/component@1.1.2)(@glint/template@1.2.1)(rsvp@4.8.5)(webpack@5.89.0) + ember-truth-helpers: 4.0.3(ember-source@5.5.0) ember-uikit: 9.0.0(@glint/template@1.2.1)(ember-source@5.5.0)(webpack@5.89.0) ember-validators: 4.1.2(@glint/template@1.2.1) graphql: 15.8.0