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