@elastic-suite/gally-admin-components
Version:
Components package for gally admin BO
80 lines (67 loc) • 2.19 kB
text/typescript
import {
IFetch,
IFieldConfig,
IHydraResponse,
ILimitationsTypes,
IRequestType,
} from '@elastic-suite/gally-admin-shared'
import { InputBaseProps } from '@mui/material'
import { useApiList } from '../hooks'
import { IDoubleDatePickerValues } from '../components/atoms/form/DoubleDatePickerWithoutError'
export type IProps = Pick<InputBaseProps, 'required' | 'type'>
export function getFormValue(value: string, props: IProps): string | number {
const { required, type } = props
if (type === 'number') {
if (value === '' && !required) {
return null
}
return Number(value)
}
return value
}
export function getDoubleDatePickerValue(
data: Record<string, Date>
): IDoubleDatePickerValues {
return { fromDate: data?.fromDate, toDate: data?.toDate }
}
export function getRequestTypeData(
data?: Record<string, any>,
limitationTypeOptionsApi?: IFetch<IHydraResponse<ILimitationsTypes>>
): IRequestType {
if (!data) {
return null
}
const requestTypeData = {} as IRequestType
limitationTypeOptionsApi?.data?.['hydra:member'].forEach((it) => {
requestTypeData[`${it.value}Limitations` as keyof IRequestType] =
data[`${it.value}Limitations`] ?? []
})
return { ...requestTypeData, requestTypes: data.requestTypes }
}
export function useValue(
field: IFieldConfig | string,
data: unknown
): unknown | IRequestType {
const [limitationTypeOptionsApi] = useApiList<ILimitationsTypes>(
field && (field as IFieldConfig)?.input === 'requestType'
? (field as IFieldConfig)?.requestTypeConfigurations
?.limitationTypeOptionsApi ?? 'boost_limitation_type_options'
: field && typeof field === 'string'
? field
: undefined
)
if (!field) {
return null
}
if (typeof field === 'string') {
return getRequestTypeData(data, limitationTypeOptionsApi)
}
switch ((field as IFieldConfig)?.input) {
case 'requestType':
return getRequestTypeData(data, limitationTypeOptionsApi)
case 'rangeDate':
return getDoubleDatePickerValue(data as Record<string, Date>)
default:
return (data as Record<string, unknown>)?.[(field as IFieldConfig).name]
}
}