import _identity from 'lodash/identity' import _isEmpty from 'lodash/isEmpty' import React, { useMemo, useState } from 'react' import SVG from 'react-inlinesvg' import EditSvg from '../../assets/images/edit.svg' import { CustomFieldsForm } from './CustomFieldsForm' import { CustomFieldTypes } from './index' import { ITicketTypes } from './ticketsTable' import { createCustomFieldsUpdateBody, isFieldUpdatable, renderCustomFieldValue, } from './utils' interface HolderCustomFieldsProps { ticket: ITicketTypes; holderCustomFields: CustomFieldTypes[]; handleTicketHoldersUpdate: (values: Record, ticketHash: string) => void; } const TicketHolderCustomFields = ({ ticket, holderCustomFields, handleTicketHoldersUpdate = _identity, }: HolderCustomFieldsProps) => { const [showHolderCustomFieldsSection, setShowHolderCustomFieldsSection] = useState(false) const [allowedHolderCustomFields, notAllowedHolderCustomFields] = useMemo(() => { const allowedFields: CustomFieldTypes[] = [] const notAllowedFields: CustomFieldTypes[] = [] holderCustomFields.forEach((field: CustomFieldTypes) => { if (isFieldUpdatable(field)) { allowedFields.push(field) } else { notAllowedFields.push(field) } }) return [allowedFields, notAllowedFields] }, [holderCustomFields]) const holderEditableFieldsFormInitialValues = useMemo( () => getHolderCustomFieldsInitialValues(holderCustomFields), [holderCustomFields] ) const handleFormClose = () => { setShowHolderCustomFieldsSection(false) } const handleForSubmit = (values: Record) => { // Collect all updatable and non updatable values for bulk update const fullUpdatableValues = createCustomFieldsUpdateBody( values, notAllowedHolderCustomFields ) setShowHolderCustomFieldsSection(false) handleTicketHoldersUpdate(fullUpdatableValues, ticket.hash) } function getHolderCustomFieldsInitialValues(fields: Array) { const initialValues: { [key: string]: string | boolean | string[] } = {} for (const field of fields) { if (isFieldUpdatable(field)) { initialValues[field.name] = field.type === 'checkbox' ? Boolean(field.value) : field.value || '' } } return initialValues } return ( <>
{!_isEmpty(allowedHolderCustomFields) && setShowHolderCustomFieldsSection(true)} />} {holderCustomFields.map((customField: CustomFieldTypes) => (
{customField.label} : {renderCustomFieldValue(customField)}
))}
{showHolderCustomFieldsSection && (

Edit ticket {ticket.hash}

)} ) } export { TicketHolderCustomFields }