---
# System prepended metadata

title: forms.yaml - Input Component

---

[[_TOC_]]

# forms.yaml - Input Component
下列的各個元件，可以單獨使用，也可以透過給 ElasticForm Spec 使用  
某些 property 在單獨使用的時候是沒有作用的，比方說 dependOn，因為沒有統整的 Data，Child component 不知道要去哪裡取得資料。 

**如果要單獨使用 component 的話，error 判斷需要自己額外處理**
 
**Component 之間有相同 Properties 的話，只在第一次提及時詳述，其它只單純列出，請善用 Ctrl + F 查詢。**

# 資料取得  
最新的版本不再使用 reducer 來進行分流，意思是不再用 dispatch，而是用 handleChange 來取得資料  
因為有用 debounce 的關係，所以不會 User 每次 change 都呼叫，而是 User 停止輸入一段時間 (300ms) 後才呼叫  
```js
// frontend/src/components/Form/utils/debounceHook.js
import { useMemo } from 'react';
import _ from 'lodash';

const useDebounce = (callback, wait = 300) => (
  useMemo(() => _.debounce(
    (...args) => {
      if (callback) callback(...args);
    },
    wait,
  ), [callback, wait])
);

export default useDebounce;
```

## 通用 Properties
所有的元件皆能使用下列的 Properties，不再於 Child component 中列出
| paramenter | description |
| ------ | ------ |
| autoValue | 當滿足 autoValue 的條件之後，component 會將特定的 value 填入指定的欄位，請參考下列範例 |
| dependOn | 此值為一 Object，component key 為 object key, object value 為一 value 陣列。當所有的 component key 及 value 符合 formData 裡的記錄時，此 component 才會顯示 |
| ignore | Elastic Form Submit 時忽略此 Componet 值 |
| key | 辨認 Component 的唯一值 |
| required | Elastic Form Submit 時此值不得為空 (空陣列、空物件、空字串、null、undefined) |
| type | Component 類型 |
| value | Component 的預設值 |
| handleChange | 當 Component Value Change 時觸發此 Function |

### AutoValue 範例
**Format**
```javascript
// 當 <component key> 的 value 符合 data 中的 <other component value> 值時  
// 被設定 autoValue 的 componet 的 <specific field> 欄位的值將會被替換成 <value as string, object, array>
autoValue: {
  <component key>: {
    field: <specific field>,
    data: {
      <other component value>: <value as string, object, array>,
        // key pair as first one
    }
  }
}
```

```javascript
// 範例 1: 自動填入 array 於 options
{
  key: 'secret',
  label: 'variable',
  type: 'select',
  options: [
    { label: 'testSecret1', value: 'testSecret1' },
    { label: 'testSecret2', value: 'testSecret2' },
  ],
},
{
  key: 'value',
  label: 'variable',
  type: 'select',
  autoValue: {
    secret: {
      field: 'options',
      data: {
        testSecret1: [
          { label: 'test1', value: 'value1' },
          { label: 'test2', value: 'value2' },
        ],
        testSecret2: [
          { label: 'test3', value: 'value3' },
          { label: 'test4', value: 'value4' },
        ],
      },
    },
  },
}

// 範例 2: 自動填入 string 於 value
{
  // ...
  autoValue: {
    secret: {
      field: 'value',
      data: {
        testSecret1: 'autoValue1',
        testSecret2: 'autoValue2'
      },
    },
  }
}
```

### dependOn 範例
```
(keyName 為參考的 component key)

- 陣列中只要一個數值 ('value1' 或 'value2') 符合即可
dependOn: { keyName: ['value1', 'value2'] } 

- 若寫為空陣列 []，代表只要有填入值即為符合
dependOn: { keyName: [] } 

- 可以多重組合，以下三個 key 的數值都要符合才算符合
dependOn: { keyName1: ['value1'], keyName2: ['value2'], keyName3: [] }  

- 若該 key 只有一個數值要判斷，數值可以寫成字串形式 (不用包在陣列裡)
dependOn: { keyName1: 'value1',  keyName2: 'value2' }

- 反向判定  
  當 value 為 object 且 value's object key === `not` 時為反向判定。  
  即 key 的 value 符合 formData 記錄時，此 component 不顯示。  
 
  可接受以下幾種情形  
  - keyName 有任意值時，此 component 不顯示  
    dependOn: { keyName: { not: [] } }  

  - keyName 有特定值時，此 component 不顯示  
    dependOn: { keyName: { not: 'value1' } }  

  - keyName 符合陣列某個值時，此 component 不顯示
    dependOn: { keyName: { not: ['value1', 'value2' ] } }  

  - 多個 keyName 時，只要有一個符合，此 component 不顯示  
    dependOn: { keyName1: { not: ['value1'] }, keyName2: { not: ['value2'] } }  

  此功能預計於 v1.8.0 milestone2 開發 storage class & volume 時加入   
```

## TextInput
e.g. Elastic Form Spec
```js
{
        key: 'name',
        type: 'text',
        label: `${lang.user}${lang.name}`,
        placeholder: `${lang.pleaseEnter} ${lang.user}${lang.name}`,
        format: /^[A-Za-z0-9]+[A-Za-z0-9._-]*[A-Za-z0-9]+$/,
        dependOn: { image: ['nginx'] },
        required: true,
        fullWidth: true,
        endAdornmentIcon: 'info',
        renderEndAdornmentIconHover: () => this.renderFlavorTable(),
        dialogTitle: lang.flavor,
        enforceFocus: false,
        clickEndAdornmentIcon: () => { console.log('click'); },
}
```
```html
<TextInput
  disabled={disabled}
  error={error}
  fullWidth={fullWidth}
  handleChange={handleChange}
  inputProps={inputProps}
  itemKey={itemKey}
  key={key}
  label={label}
  maxLength={maxLength}
  placeholder={placeholder}
  readOnly={readOnly}
  required={required}
  type={type}
  value={value}
/>
```

**Properties**
| paramenter | description |
| ------ | ------ |
| disabled | Component disabled |
| format | 可對 TextInput 的 Value 做 regex 格式判斷 |
| fullWidth | Component use full width |
| jsonFormat | Value 如果不是 json 格式的話觸發 error |
| maxLength | TextInput 能輸入的字元限制 |
| placeholer | Component 的 範例值 |
| readOnly | 將 Componet 設定成 readOnly |
| endAdornmentIcon | string，可在 TextInput 的尾端顯示你要的 icon。<br/>目前支援 'info', 'help' 兩種。<br/>實作是用 HoverIcon，你可以自行在 HoverIcon 加入更多 icon，詳見 HoverIcon component |
| dialogTitle | Hover 顯示的 commonForm 的 title |
| renderEndAdornmentIconHover | render function，在 hover 過 endAdornment icon 的時候，會顯示在 common Form 的內容 |
| enforceFocus | 布林值，預設為 false。<br/>當此值為 true 時，hover 過 endAdornment icon 的時候，會強制把畫面 focus 在 common Form 上；<br/>當此值為 false 時，鼠標離開 endAdornment icon 的時候，會自動關閉 common Form。<br/>另外，當 enforceFocus 設定為 false 時，點擊 icon 會自動進入 focus 的狀態，此時就算滑鼠離開 icon，common Form 也不會被關閉。 |
| clickEndAdornmentIcon | click function，點擊 endAdornment icon 時會觸發此 function。|

## AmountInput
用來顯示金額的 input component

```js
// elastic form spec
{
      key: 'cpu',
      type: 'amount',
      label: `${lang.cpu} (vcore) - ${lang.pricePerHour}`,
}
```

**Properties**
| paramenter | description |
| ------ | ------ |
| decimalScale | 限制可到小數幾位，預設 2 |
| disabled | Component disabled |
| error | 錯誤訊息 |
| fullWidth | Component use full width |

## AutoCompleteInput
```js
{
        key: 'image',
        type: 'autocomplete',
        label: lang.image,
        options: [
          { label: 'label1', value: 'label1' },
          { label: 'label2', value: 'label2' },
        ],
        fullWidth: true,
        required: true,
}
```

**Properties**  
 disabled, fullWidth
| Properties | Description |
| --------- | ----------- |
| options | Select 的下拉選單選項 |

## CheckboxInput
提供可勾選的項目，比較特別的是它在 formData 裡是以個別 option 的項目做記錄  
e.g. `formData: { regen_key: false, test2: true }`
```js
{
        key: 'checkBoxGroup',
        type: 'checkbox',
        label: 'Test key',
        fullWidth: true,
        options: [
          {
            label: lang.recreateKey,
            value: false,
            key: 'regen_key',
          },
          {
            label: 'test2',
            value: true,
            key: 'test2',
          },
        ],
        required: true,
}
```
**Properties**  
fullWidth
| Properties | Description |
| --------- | ----------- |
| options | 可勾選的選項 |

## DatePickerInput
```js
{
        key: 'expiredTime',
        type: 'date',
        label: lang.extendDays,
        showTime: true,
        placeholder: 'Default: 180 days later from now.',
        fullWidth: true,
        value: moment('2021-04-15 09:35:10'),
        required: true,

}
```
**Properties** 
fullWidth, placeholder
| Properties | Description |
| --------- | ----------- |
| showTime | 顯示時間選項 |


## DependOnSelectInput
此 Component 可以根據其它 Component 所選的值不同，而呈現不同的 Options 供使用者選擇
```js
{
        key: 'selectPlatform',
        type: 'dependOnSelect',
        label: 'Select Platform',
        wholeOptions: {
          label2: [{ label: 'default_k8s', value: 'default_k8s' }],
          label3: [{ label: 'default_k8s', value: 'default_k8s' }, { label: 'k8s2', value: 'k8s2' }],
        },
        dependOnSelect: 'image',
        handleChange: () => { console.log('handle change'); },
        fullWidth: true,
        required: true,
}
```
**Properties**  
format, jsonFormat, maxLength, options, readOnly
| Properties | Description |
| --------- | ----------- |
| dependOnSelect | 此值為一 component key，當此 component key 所屬 component 的值等於 wholeOptions Object 中的任一 key 時，DependOnSelect 的 Options 會等於 wholeOptions 中的 key 的 value |
| wholeOptions | 完整的 Options 物件，以 component value 區分 |

## DynamicSelectInput
以前寫的很複雜，但我在重構的時候發現，根本不需要這麼複雜，純粹是對 react life cycle 不熟造成的冗餘程式，可以參考 [MR-745](https://gitlab.com/geminiopencloud/engineering/portal/xportal/-/merge_requests/745)  
重構完成後的 component 其實與 selectInput 非常相似，只是多了幫 option value === 'btn' 的 MenuItem 加上 border，日後說不定可以跟 selectInput 合併  

```js
{
        key: 'autoScaling',
        type: 'dynamicSelect',
        label: lang.autoScaling,
        required: true,
        fullWidth: true,
        options: autoOptions,
        handleChange: this.openCreateASPForm.bind(this),
}
```

**Properties**  
disabled, error, fullWidth, label, options, readOnly, required

## FileInput
```js
{
        key: 'imageFile',
        label: `${lang.uploadImage} (${lang.chooseTar})`,
        type: 'file',
        customValidation: (file) => {
          // 回傳錯誤訊息表示沒通過驗證，回傳 null 通過驗證
          if (file && !file.name.includes('.svg')) return 'error format';
          return null;
        },
        required: true,
        fullWidth: true,
}
```
**Properties**  
fullWidth
| Properties | Description |
| --------- | ----------- |
| customValidation | 對 File 的 格式進行判斷，回傳錯誤訊息表示沒通過驗證，回傳 null 通過驗證。錯誤訊息會顯示在欄位下方|

## FileNameInput  
因應 FileInput 使用內建 input (type="file")，不支援 FormSteps 回上一頁填充 input (type="file") 的值，
而建立該 component。
```js
{
        key: 'jsonFile',
        label: lang.jsonFile,
        type: 'fileNameInput',
        required: true,
        fullWidth: true,
}
```
**Properties**  
fullWidth

## FileReaderInput 
與 `<FileInput>` 差別在於 `<FileReaderInput>` 讀取檔案後會將檔案名稱＆內容顯示在textArea

```js
{
        key: '',
        label: 'fileReaderInput',
        type: 'fileReaderInput',
        handleChange: (file) => {
          console.log(file) // file information: name, size, type...
        },
        required: true,
        fullWidth: true,
}
```

**Properties**  
error, fullWidth, itemKey, label, handleChange, required, value,

## MultiColEntryInput
提供多行的資料輸入   
![image](uploads/32044c6ca4f0a3e2ff85a251970ece0f/image.png)
```js
{
  key: 'env',
  type: 'multicolentry',
  label: lang.environment,
  addMoreOptions: { label: `+ ${lang.addMore}` },
  colSpec: [
    {
      key: 'variableName',
      label: lang.variableName,
      type: 'text',
      fullWidth: true,
    },
    {
      key: 'valueOrSecret',
      label: lang.valueOrSecret,
      type: 'autocomplete',
      fullWidth: true,
      options: envSecretListOptions,
    },
    {
      key: 'key',
      label: lang.key,
      type: 'select',
      fullWidth: true,
      dependOn: {
        valueOrSecret: envSecretListOptions.map(option => option.value),
      },
      autoValue: {
        valueOrSecret: {
          field: 'options',
          data: autoKeyOptions,
        },
      },
    },
  ],
  fullWidth: true,
  value: envValue,
}
```
**Properties**  
| Properties | Description |
| --------- | ----------- |
| addMoreOptions | 設定有關 addMore 的參數 <br/>**label**: addMore 要顯示的文字內容 <br/> **diabled**: 不顯示 addMore |
| colSpec | 每行要顯示的 Component Spec，可使用的參數與 ElasticForm 的設定相同 |
| customBtnOptions | 設定行尾的客製化 Button <br/><br/>**onClick** 點擊會觸發的 function <br/><br/>**disabled** disabled === true 時，只顯示，不可點擊|
| displayDeletedBtn | 預設 true。如果值為 false 的話，不顯示後方的刪除按鈕 |
| enableMultiLine | - 是否啟用多行模式，在多行模式下，colSpec 的每個 spec 都會獨立一行 |
| enableNumbered | 在每個項目的前端顯示編號，從 A-Z，目前不支援超過 Z 的情況 <br/><br/> ![image](uploads/96694bd95195f7bb653e59d0c86a8b67/image.png) |
| rowLimit | rowLimit 為一 Object，內含： <br/><br/> **rowMaximum**: MCE 最多接受幾筆資料，不給值的話就是沒有上限<br/><br/> **rowMinimum**: MCE 最少需要幾筆資料，不給值的話就是 0 |
| value | 預設值，與 formData 裡的格式相同 [{ colSpec[key]: value }, ...] |


## PlainTextInput
單純顯示文字，不回傳值
```js
{
          key: 'projectGPU',
          label: 'Project GPU Quota',
          type: 'plaintext',
          content: 'Plain Text Content',
          dynamicContent: lang.usageCondition,
          color: 'red',

}
```
**Properties**  
size, marginTop, marginBottom,
| Properties | Description |
| --------- | ----------- |
| content | 要顯示的文字內容 |
| dynamicContent | 要顯示的動態文字內容。內容中有關 {{ }} 裡的 key 如果與同 step 的其中一個 spec 的 key 相符，則 {{key}} 替換成該 spec 的 value |
| color | 可給 css 支援的 顏色格式， e.g. 'rgb(255, 99, 71)' |
| size | 文字大小，目前只支援 'medium' 值 |
| marginTop | 設定 component 離上一個 component 的距離， e.g. '10px' |
| marginBottom | 設定 component 離下一個 component 的距離，e.g. '10px' |

## PasswordInput
作為密碼欄位輸入使用，PasswordInput 會在後端多一個 icon，點擊可切換密碼的明文密文顯示  
![image](uploads/b31e7c144dad6824d791b1b3da9d8e0b/image.png) 

e.g. Elastic Form Spec
```js
{
        key: 'password',
        type: 'password',
        label: `${lang.password}`,
        required: true,
        fullWidth: true,
}
```
```html
<PasswordInput
      disabled={disabled}
      error={!!error}
      fullWidth={fullWidth}
      inputProps={inputProps}
      itemKey={inputProps}
      handleChange={handleChange}
      label={label}
      maxLength={maxLength}
      placeholder={placeholder}
      required={required}
      readOnly={readOnly}
      value={pwValues}

/>
```

**Properties**
| paramenter | description |
| ------ | ------ |
| fullWidth | Component use full width |
| readOnly | 將 Componet 設定成 readOnly |

## RadioInput
當選項只能擇一時使用   
![image](uploads/736b7e73fec289d65f9ec9c0eccce5a9/image.png)
```js
{
        key: 'open_port',
        type: 'radio',
        label: lang.openPort,
        value: 'portRange',
        options: [
          {
            label: lang.portRange,
            value: 'portRange',
            disabled: true,
          },
          {
            label: lang.singlePort,
            value: 'singlePort',
          },
          {
            label: lang.allPorts,
            value: 'allPorts',
          },
        ],
        required: true,
        ignore: true,
        fullWidth: true,
        dependOn: { name: ['test'] },
}
```
**Properties**  
fullWidth, options

## SwitchInput
當選項是 二擇一 時使用  
注意！舊寫法是用 checked 表示勾選，新版為統一都採用 value 來表示  
```js
{
        key: 'isSystemUser',
        type: 'switch',
        label: 'System Admin Auth',
        value: true,
        fullWidth: true,
}
```
**Properties** 
disabled
| Properties | Description |
| --------- | ----------- |
| checked | 設定預設值， true / false |

## SelectInput
```js
{
        key: 'volumeType',
        type: 'select',
        label: lang.networkStorage,
        options: [
          { label: 'None', value: 'None', info: 'info1' },
          { label: 'NFS', value: 'NFS', info: 'info2' },
        ],
        fullWidth: true,
        required: true,
        showOptionInfo: true,
        endAdornmentIcon: 'info',
        renderEndAdornmentIconHover: () => this.renderFlavorTable(),
        dialogTitle: lang.flavor,
        enforceFocus: false,
        clickEndAdornmentIcon: () => { console.log('click'); },
}
```

**Properties**  
format, jsonFormat, maxLength, options, readOnly
| Properties | Description |
| --------- | ----------- |
| showOptionInfo | 布林值，預設為 false。<br/>當此值為 true 時，options 可以多夾帶 info 資訊如下：<br/> [ { label: 'None', value: 'None', info: 'info1' }, { label: 'NFS', value: 'NFS', info: 'info2' } ]<br/>  夾帶的 info 會在選到對應的 option 時於下方顯示 |
| endAdornmentIcon | string，可在 selectInput 的尾端顯示你要的 icon。<br/>目前支援 'info', 'help' 兩種。<br/>實作是用 HoverIcon，你可以自行在 HoverIcon 加入更多 icon，詳見 HoverIcon component |
| dialogTitle | Hover 顯示的 commonForm 的 title |
| renderEndAdornmentIconHover | render function，在 hover 過 endAdornment icon 的時候，會顯示在 common Form 的內容 |
| enforceFocus | 布林值，預設為 false。<br/>當此值為 true 時，hover 過 endAdornment icon 的時候，會強制把畫面 focus 在 common Form 上；<br/>當此值為 false 時，鼠標離開 endAdornment icon 的時候，會自動關閉 common Form。<br/>另外，當 enforceFocus 設定為 false 時，點擊 icon 會自動進入 focus 的狀態，此時就算滑鼠離開 icon，common Form 也不會被關閉。 |
| clickEndAdornmentIcon | click function，點擊 endAdornment icon 時會觸發此 function。|

### renderEndAdornmentIconHover
renderEndAdornmentIconHover 在 SelectInput 有兩種寫法
1. 直接給 function 回傳出要 render 的 element
2. 給一個 Object，此 object 可以根據 SelectInput 的 value，給出不同 render element

```js
// case 1
{
          key: 'flavor',
          type: 'select',
          label: lang.flavor,
          options: flavorOptions,
          fullWidth: true,
          required: true,
          showOptionInfo: true,
          endAdornmentIconType: 'info',
          renderEndAdornmentIconHover: () => (
            <FlavorInfoTable flavorList={RespListFlavor?.data ?? []} />
          ),
          dialogTitle: lang.flavor,
          enforceFocus: false,
}

// case 2
{
          key: 'type',
          type: 'select',
          label: lang.type,
          options: [
                   { label: lang.usageTime, value: 'time' },
                   { label: lang.usageAmount, value: 'usage' }
          ],
          endAdornmentIconType: 'info',
          renderEndAdornmentIconHover: { time: lang.timeInfo, usage: lang.usageInfo },
          dialogTitle: {
                   time: `${lang.usageTime} ${lang.info}`,
                   usage: `${lang.usageAmount} ${lang.info}`,
          },
          required: true,
        }
```

## TextAreaInput
多行文字輸入
```js
{
        key: 'metadata',
        type: 'textarea',
        rows: 2,
        label: 'Metadata',
        placeholder: 'Example: {"schedule-policy": "affinity"}',
        jsonFormat: true,
        fullWidth: true,
        required: true,
}
```
disabled, fullWidth, format, jsonFormat, readOnly
| Properties | Description |
| --------- | ----------- |
| rows | 最少要顯示幾行的高度 |


## TimePickerInput
```js
{
        key: 'launchCreate',
        type: 'time',
        label: 'Create Time',
        timeFormat: 'HH:mm',
        minuteStep: 5,
        value: moment('00:00', 'HH:mm'),
        placeholder: 'Default: 180 days later from now.',
        required: true,
}
```
**Properties** 
fullWidth, placeholder
| Properties | Description |
| --------- | ----------- |
| hourStep | hour 的增加值 |
| minuteStep | minute 的增加值 |
| timeFormat | 時間格式 |

## TransferInput
```js
{
        key: 'hostList',
        type: 'transfer',
        label: lang.selectHost,
        transferTitles: [lang.availableHosts, lang.hostsInZone],
        fullWidth: true,
        showSearch: true,
        dataSource: [
          { key: 'host1', hostname: 'host1' },
          { key: 'host2', hostname: 'host2' },
          { key: 'host3', hostname: 'host3' },
        ],
        selectedKeys: ['host1', 'host2'],
        value: ['host2'],
        render: item => item.hostname,
        required: true,
 }
```

**Properties**  
dataSource, disabled, fullWidth, render
| Properties | Description |
| --------- | ----------- |
| filterOption | Search 時會套用此 function 來判斷結果。  格式: filterOption = (searchValue, itemList) => {...} |
| handleSearch | Search 時觸發此 Function |
| handleSelectChange | 勾選 Item 時觸發此 Function |
| operations | 客製化中間的兩個按鈕 e.g. ['>', '<'] |
| selectedKeys | 預設一開始要勾選哪些 item，為一 key 值陣列 |
| showSearch | 是否顯示 Search 功能 |
| TransferTitles | 客製化兩個框框上面的 title  e.g. ['Not Selected', 'Selected'] |

# 其它 Component
## HoverIcon
HoverIcon 是一個當 Hover 事件觸發時，會顯示 commonForm 的 icon component  
![image](uploads/028ebc148d9c4ea58c0a4e5cf522e043/image.png)  
目前 NewElasticForm 中無法使用它 (意思是你無法在 formSpec 中像這樣定義 `{ type: 'HoverIcon' }`)，不過你可以在 XPortal 中有需要的頁面自行使用，selectInput 也有整合進 HoverIcon  
```js
        <HoverIcon
          dialogTitle={dialogTitle}
          enforceFocus={enforceFocus}
          handleClick={clickEndAdornmentIcon}
          iconType={endAdornmentIconType}
          renderIconHover={renderEndAdornmentIconHover}
          size="small"
        />
``` 
你可以在 HoverIcon 中的 renderIcon Function 加入你想要支援的 icon，目前支援 'info', 'help'，加完之後記得更新這個頁面  
你可以在 [material icon](https://material-ui.com/components/material-icons/) 搜尋你要加的 icon，iconType 的規則為小寫 \<import icon\> 去掉後面的 icon 四個字母   
```js

  const renderIcon = () => {
    switch (iconType) {
      case 'help': return <HelpIcon />;
      default: return <InfoIcon />;
    }
  };
```

# History
以下特性因改寫後廢棄


#### dependOnAC 範例
目前只支援在 MultiColEntryInput 中的元件能使用下列的 Properties，不再於 Child component 中列出
| paramenter | description |
| ------ | ------ |
| dependOnAC | 主要使用於 depend 在 AutoCompleteInput，不過 SelectInput (type: 'select') 也可以 depend。 <br/><br/>此值為一 object，key 為 'fields', value 為一 value 陣列。<br/><br/> 如果 value 陣列的任一個 value 與同一個 MultiColEntryInput 裡的某個 AutoCompleteInput 的 key 相同，且 user 選擇了 AutoCompleteInput options 的內建項目，則此 component 顯示;<br/>反之，則此 component 隱藏。 |


```
(value1 和 value2 為參考的 component key)

- 陣列中只要一個數值 ('value1' 或 'value2') 符合即可 depend
dependOnAC: { fields: ['value1', 'value2'] } 

- 目前不支援空陣列 []

- 目前不支援多重組合

- 目前不支援數值寫成字串形式 (不用包在陣列裡)
```
#### dependOnSelect 範例
目前只支援在 MultiColEntryInput 中的元件能使用下列的 Properties，不再於 Child component 中列出
| paramenter | description |
| ------ | ------ |
| dependOnSelect | 主要使用於 depend 在 SelectInput，另外需與 valueSource 一起搭配使用。<br/><br/>此值為一 object，key 為 'fields', value 為一 value 陣列，雖然為 value 陣列，目前支援一個 value。<br/><br/>如果 value 陣列的第一個 value 與同一個 MultiColEntryInput 裡的某個 SelectInput 的 key 相同，且 user 選擇了 SelectInput 的 option，則此 component 從 valueSource 獲取並顯示相對應 data。 |


```
(value 為參考的 component key)

- 陣列中只要第一個數值 ('value') 符合即可 depend (第一個數值後的數值會被忽略)
dependOnSelect: { fields: ['value'] }

- 目前不支援空陣列 []

- 目前不支援多重組合

- 目前不支援數值寫成字串形式 (不用包在陣列裡)
```

#### TextInput
**properties**

| valueSource | 目前只支援在 MultiColEntryInput 中使用。<br/> 需與 dependOnSelect 搭配使用，否則會有空的 value。<br/><br/> 依據 depend 在同一個 MultiColEntryInput 裡的第一個 component (適用 depend 對象為 SelectInput (type: 'select')) 選擇的 option，來動態從值中，依據是否 id 一致挑選 data，並用挑選的 data 來填充此 component 的 value。

valueSource 值的格式如下:
```js
[
  { id: 'idValue', data: 'dataValue' }, 
  ..., 
  { ... }, // The same data structure as the first one.
]
```

#### SelectInput
**properties**

| optionsSource | 目前只支援在 MultiColEntryInput 中使用。<br/> 需與 dependOnAC 搭配使用，否則會有空的 options。<br/><br/> 依據 depend 在同一個 MultiColEntryInput 裡的各 components (適用 depend 對象為 AutoCompleteInput 和 SelectInput (type: 'select')) 選擇的 options，來動態從值中，依據是否 name 一致挑選 data，並用挑選的 data 來填充此 component 的 options。|

optionsSource 值的格式如下:
```js
[
  { ..., name: 'nameValue', ..., data: { key_1: 'value_1', ..., key_n: 'value_n' }, ... }, 
  ..., 
  { ... }, // The same data structure as the first one.
]
```


