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