All files / src/gadgets/filtered-dropdown edit.js

100% Statements 15/15
100% Branches 8/8
100% Functions 3/3
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64                              4x 4x 4x   4x 4x 2x 2x     4x 4x 1x 1x       4x         1x                   3x   3x                            
/* Copyright © 2016 Kuali, Inc. - All Rights Reserved
 * You may use and modify this code under the terms of the Kuali, Inc.
 * Pre-Release License Agreement. You may not distribute it.
 *
 * You should have received a copy of the Kuali, Inc. Pre-Release License
 * Agreement with this file. If not, please write to license@kuali.co.
 */
 
import PropTypes from 'prop-types'
import React from 'react'
import { SelectField } from '@kuali/kuali-ui'
import styles from './edit.css'
import { defaultTo, get } from 'lodash'
 
export default function Edit ({ details, dependent, formKey, onChange, value }) {
  const referenceGadget = get(details, 'data.referenceGadget')
  const dependentData = get(dependent, 'data', {})
  const referenceValue = dependentData[referenceGadget]
 
  let options = []
  if (referenceValue) {
    const possibleValuesMap = get(details, 'data.values', {})
    options = defaultTo(possibleValuesMap[referenceValue], [])
  }
 
  const disabled = get(options, 'length', 0) === 0
  if (value !== undefined && disabled) {
    setTimeout(() => {
      onChange(undefined)
    }, 0)
  }
 
  return (
    <SelectField
      id={formKey}
      className={disabled ? styles.disabled : ''}
      disabled={disabled}
      onChange={val => onChange(val)}
      fullWidth
      value={value}
      menuItems={options}
      itemLabel='lbl'
      itemValue='key'
    />
  )
}
 
Edit.displayName = 'FilteredDropdownEdit'
 
Edit.propTypes = {
  dependent: PropTypes.object,
  details: PropTypes.shape({
    options: PropTypes.arrayOf(
      PropTypes.shape({
        key: PropTypes.string,
        lbl: PropTypes.string
      })
    )
  }).isRequired,
  formKey: PropTypes.string.isRequired,
  onChange: PropTypes.func.isRequired,
  value: PropTypes.string
}