import { useRef, useState, useEffect, useMemo } from 'react' import { useLocation } from 'react-router-dom' import { Card, Flex, Space, Spin } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' import useCollapseState from '../../hooks/useCollapseState.jsx' import NotesPanel from '../../common/NotesPanel.jsx' import InfoCollapse from '../../common/InfoCollapse.jsx' import ObjectInfo from '../../common/ObjectInfo.jsx' import ObjectProperty from '../../common/ObjectProperty.jsx' import ViewButton from '../../common/ViewButton.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx' import PaymentIcon from '../../../Icons/PaymentIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import ObjectForm from '../../common/ObjectForm.jsx' import EditButtons from '../../common/EditButtons.jsx' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' import { useActions } from '../../context/ActionsContext' import { useDashboardObjectTools } from '../../context/DashboardObjectToolsContext' import ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import { getModelProperty, getModelByName } from '../../../../database/ObjectModels.js' import OrderItemIcon from '../../../Icons/OrderItemIcon.jsx' import ShipmentIcon from '../../../Icons/ShipmentIcon.jsx' const log = loglevel.getLogger('InvoiceInfo') log.setLevel(config.logLevel) const InvoiceInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) const { setOnModalOk } = useActions() useEffect(() => { setOnModalOk(() => () => { objectFormRef.current?.handleFetchObject?.() }) return () => setOnModalOk(null) }, [setOnModalOk]) const invoiceId = new URLSearchParams(location.search).get('invoiceId') const [collapseState, updateCollapseState] = useCollapseState('InvoiceInfo', { info: true, invoiceOrderItems: true, invoiceShipments: true, payments: true, notes: true, auditLogs: false }) const [objectFormState, setEditFormState] = useState({ isEditing: false, editLoading: false, formValid: false, lock: null, loading: false, editDisabled: false, objectData: {} }) const currentObjectTools = useMemo( () => ( ), [objectFormState.loading, objectFormState.isEditing, invoiceId] ) useDashboardObjectTools(currentObjectTools) const actions = { edit: () => { objectFormRef?.current?.startEditing?.() return false }, cancelEdit: () => { objectFormRef?.current?.cancelEditing?.() return true }, finishEdit: () => { objectFormRef?.current?.handleUpdate?.() return true }, } return ( { actionHandlerRef.current.callAction('finishEdit') }} cancelEditing={() => { actionHandlerRef.current.callAction('cancelEdit') }} startEditing={() => { actionHandlerRef.current.callAction('edit') }} editLoading={objectFormState.editLoading} formValid={objectFormState.formValid} disabled={ objectFormState.beingEditedByOther || objectFormState.loading || objectFormState.editDisabled } loading={objectFormState.editLoading} /> { setEditFormState((prev) => ({ ...prev, ...state })) }} > {({ loading, isEditing, objectData }) => ( } active={collapseState.info} onToggle={(expanded) => updateCollapseState('info', expanded) } collapseKey='info' > } isEditing={isEditing} type='invoice' labelWidth='225px' objectData={objectData} visibleProperties={{ invoiceOrderItems: false, invoiceShipments: false }} /> } active={collapseState.invoiceOrderItems} onToggle={(expanded) => updateCollapseState('invoiceOrderItems', expanded) } collapseKey='invoiceOrderItems' > } active={collapseState.invoiceShipments} onToggle={(expanded) => updateCollapseState('invoiceShipments', expanded) } collapseKey='invoiceShipments' > )} } active={collapseState.payments} onToggle={(expanded) => updateCollapseState('payments', expanded)} collapseKey='payments' > {objectFormState.loading ? ( ) : ( )} } active={collapseState.notes} onToggle={(expanded) => updateCollapseState('notes', expanded)} collapseKey='notes' > } > } active={collapseState.auditLogs} onToggle={(expanded) => updateCollapseState('auditLogs', expanded)} collapseKey='auditLogs' > {objectFormState.loading ? ( ) : ( )} ) } export default InvoiceInfo