From b0132bee62975e7d3b0cf7bd8e09ec7554233b20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 10 Sep 2020 13:13:12 +0200
Subject: [PATCH] [dome] radio field

---
 ivette/src/dome/src/renderer/layout/form.tsx | 37 +++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/ivette/src/dome/src/renderer/layout/form.tsx b/ivette/src/dome/src/renderer/layout/form.tsx
index e85027a3751..df762bdcc8a 100644
--- a/ivette/src/dome/src/renderer/layout/form.tsx
+++ b/ivette/src/dome/src/renderer/layout/form.tsx
@@ -12,7 +12,7 @@ import React from 'react';
 import * as Dome from 'dome';
 import * as Utils from 'dome/misc/utils';
 import { SVG } from 'dome/controls/icons';
-import { Checkbox } from 'dome/controls/buttons';
+import { Checkbox, Radio } from 'dome/controls/buttons';
 
 export type Error =
   | undefined | boolean | string
@@ -1041,4 +1041,39 @@ export function CheckboxField(props: CheckboxFieldProps) {
   );
 }
 
+/* --------------------------------------------------------------------------*/
+/* --- Radio Box Field                                                    ---*/
+/* --------------------------------------------------------------------------*/
+
+/** @category Form Fields */
+export interface RadioFieldProps<A> extends FieldProps<A> {
+  value: A;
+}
+
+export function RadioField<A>(props: RadioFieldProps<A>) {
+  const { hidden, disabled } = useContext(props);
+
+  if (hidden) return null;
+
+  const [selection, , setState] = props.state;
+  const onSelection = (value: A) => setState(value, undefined);
+  const { label, title, value } = props;
+  const css = Utils.classes(
+    'dome-xForm-field dome-text-label',
+    disabled && 'dome-disabled',
+  );
+
+  return (
+    <Radio
+      className={css}
+      label={label}
+      title={title}
+      value={value}
+      disabled={disabled}
+      selection={selection}
+      onSelection={onSelection}
+    />
+  );
+}
+
 // --------------------------------------------------------------------------
-- 
GitLab