All Downloads are FREE. Search and download functionalities are using the official Maven repository.

components.form.fields.InputMultipleField.tsx Maven / Gradle / Ivy

import { useEffect } from 'react';
import { Card, FormControl, FormHelperText, FormLabel, Typography } from '@mui/material';

import { MultipleTable, MultipleTableBasedOn } from 'components/form/fields/multiple';
import MultipleFlex from 'components/form/fields/multiple/MultipleFlex';
import { nullOrEmpty } from 'components/form/fields/utils/values';
import { getInputLabel } from 'components/form/utils/form-utils';
import { setStepIconTabIndices } from 'components/form/utils/task-utils';
import RenderContextProvider from 'contexts/RenderContext';
import { useFieldInfo } from 'hooks/field';
import { useFormInfo } from 'hooks/form';
import { useRenderContext } from 'hooks/render';
import { useTranslator } from 'hooks/translator';
import { Field } from 'types/graphql';

export type MultipleFeatures = {
  select:  boolean,
  reorder: boolean,
  add:     boolean,
  remove:  boolean,
}

export type MutableMultipleProps = {
  features: MultipleFeatures
}

const InputMultipleField = (): JSX.Element => {
  const { t, translator }                        = useTranslator()
  const { fieldProps, info }                     = useFieldInfo()
  const { processDefinition: { key: processKey}} = useFormInfo()
  const { multipleType }                         = useRenderContext()
  const { mode }                                 = info.field

  useEffect(() => {
    setStepIconTabIndices()
  },[])

  if (mode === "closed" && nullOrEmpty(fieldProps.value)) {
    return (
      
        {getInputLabel(translator, info.field, processKey)}
        {t('form.multiple.no-lines')}
      
    )
  }

  const helperText = fieldProps.error ? (fieldProps.helperText?.trim() ? fieldProps.helperText : t('yup.invalid.multiple')) : fieldProps.helperText
  return (
    
      
        {!info.inMultiple && multipleType != "mutable-flex"
          ? {getInputLabel(translator, info.field, processKey)}
          : null
        }
        { info.inMultiple || multipleType != "mutable-flex" ?  : null }
          
        {helperText}
      
    
  )
}

const createFeatures = (field: Field): MultipleFeatures => {
  if (field.mode !== 'open') return {
    select:  false,
    reorder: false,
    add:     false,
    remove:  false,
  }

  const traitNames = !Array.isArray(field.traits) ? [] : field.traits.map(trait => trait.name)
  return {
    select:  !traitNames.includes("no_select"),
    add:     !traitNames.includes("no_add"),
    remove:  !traitNames.includes("no_remove"),
    reorder: !traitNames.includes("no_reorder"),
  }
}

const MutableMultipleInput = () => {
  const { multipleType }  = useRenderContext()
  const { info } = useFieldInfo()
  const features = createFeatures(info.field)

  switch (multipleType) {
    case 'mutable-flex': 
      return 

    case 'mutable-table':
    default:
      return (
         1 ? undefined : "5px"}}>
          
        
      )
  }
}

export default InputMultipleField




© 2015 - 2024 Weber Informatics LLC | Privacy Policy