From 36ecd23f8e3282f33aaf84e64fe51fae8f5a9a54 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:35:31 +0200
Subject: [PATCH] [dome] select field

---
 .../dome/src/renderer/controls/buttons.tsx    |  2 +-
 ivette/src/dome/src/renderer/layout/form.tsx  | 41 ++++++++++++++++++-
 2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/ivette/src/dome/src/renderer/controls/buttons.tsx b/ivette/src/dome/src/renderer/controls/buttons.tsx
index f3f2c0a38ce..7be26bdabb9 100644
--- a/ivette/src/dome/src/renderer/controls/buttons.tsx
+++ b/ivette/src/dome/src/renderer/controls/buttons.tsx
@@ -522,7 +522,7 @@ export interface SelectProps {
   className?: string;
   /** Additional style for the `< dov /> ` container of Raiods */
   style?: React.CSSProperties;
-  /** Shall be [[Item]] elements. */
+  /** Shall be standard `<option/>` and `<optgroup/>` elements. */
   children: any;
 }
 
diff --git a/ivette/src/dome/src/renderer/layout/form.tsx b/ivette/src/dome/src/renderer/layout/form.tsx
index df762bdcc8a..1916757ce57 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, Radio } from 'dome/controls/buttons';
+import { Checkbox, Radio, Select as SelectMenu } from 'dome/controls/buttons';
 
 export type Error =
   | undefined | boolean | string
@@ -1050,6 +1050,7 @@ export interface RadioFieldProps<A> extends FieldProps<A> {
   value: A;
 }
 
+/** @category Form Fields */
 export function RadioField<A>(props: RadioFieldProps<A>) {
   const { hidden, disabled } = useContext(props);
 
@@ -1076,4 +1077,42 @@ export function RadioField<A>(props: RadioFieldProps<A>) {
   );
 }
 
+/* --------------------------------------------------------------------------*/
+/* --- Select Menu Field                                                  ---*/
+/* --------------------------------------------------------------------------*/
+
+/** @category Form Fields */
+export interface SelectFieldProps extends FieldProps<string | undefined> {
+  placeholder?: string;
+  children: any;
+}
+
+/**
+   Children must be standard `<option>` or `<optgroup>` elements.
+
+   @category Form Fields
+*/
+export function SelectField(props: SelectFieldProps) {
+  const id = useHtmlFor();
+  const [value, error, setState] = useChecker(props.state, props.checker);
+  const onChange = (newValue?: string) => setState(newValue, undefined);
+  const { children, placeholder } = props;
+  return (
+    <Field
+      {...props}
+      error={error}
+      htmlFor={id}
+    >
+      <SelectMenu
+        id={id}
+        value={value}
+        placeholder={placeholder}
+        onChange={onChange}
+      >
+        {children}
+      </SelectMenu>
+    </Field>
+  );
+}
+
 // --------------------------------------------------------------------------
-- 
GitLab