import * as React from 'react'; import { isRxDocument } from 'rxdb'; import Button from '@wcpos/components/src/button'; import Modal from '@wcpos/components/src/modal'; import useSnackbar from '@wcpos/components/src/snackbar'; import log from '@wcpos/utils/src/logger'; import { useT } from '../../../../../contexts/translations'; import { EditDocumentForm } from '../../../components/edit-document-form'; import usePushDocument from '../../../contexts/use-push-document'; import { useCurrentOrder } from '../../contexts/current-order'; /** * TODO - I either need to keep form data in sync with order.$, or better, * get fresh data everytime the modal is opened */ const OrderMetaModal = ({ onClose }: { onClose: () => void }) => { const pushDocument = usePushDocument(); const addSnackbar = useSnackbar(); const { currentOrder } = useCurrentOrder(); const t = useT(); /** * */ const handleSyncToServer = React.useCallback(async () => { try { const success = await pushDocument(currentOrder); if (isRxDocument(success)) { addSnackbar({ message: t('Order {id} saved', { _tags: 'core', id: success.id }), }); } } catch (error) { log.error(error); } }, [addSnackbar, currentOrder, pushDocument, t]); /** * uiSchema */ const uiSchema = React.useMemo( () => ({ 'ui:title': null, 'ui:description': null, number: { 'ui:label': t('Order Number', { _tags: 'core' }), }, // status: { // 'ui:label': t('Status', { _tags: 'core' }), // }, // discount_total: { // 'ui:label': t('Discount Total', { _tags: 'core' }), // }, // discount_tax: { // 'ui:label': t('Discount Tax', { _tags: 'core' }), // }, // shipping_total: { // 'ui:label': t('Shipping Total', { _tags: 'core' }), // }, // shipping_tax: { // 'ui:label': t('Shipping Tax', { _tags: 'core' }), // }, // cart_tax: { // 'ui:label': t('Cart Tax', { _tags: 'core' }), // }, // total: { // 'ui:label': t('Total', { _tags: 'core' }), // }, // total_tax: { // 'ui:label': t('Total Tax', { _tags: 'core' }), // }, // prices_include_tax: { // 'ui:label': t('Prices Include Tax', { _tags: 'core' }), // }, // payment_method: { // 'ui:label': t('Payment Method ID', { _tags: 'core' }), // }, // payment_method_title: { // 'ui:label': t('Payment Method Title', { _tags: 'core' }), // }, // billing: { // 'ui:collapsible': 'closed', // 'ui:title': t('Billing Address', { _tags: 'core' }), // 'ui:description': null, // }, // shipping: { // 'ui:collapsible': 'closed', // 'ui:title': t('Shipping Address', { _tags: 'core' }), // 'ui:description': null, // }, // tax_lines: { // 'ui:collapsible': 'closed', // 'ui:title': t('Taxes', { _tags: 'core' }), // 'ui:description': null, // }, // coupon_lines: { // 'ui:collapsible': 'closed', // 'ui:title': t('Coupons', { _tags: 'core' }), // 'ui:description': null, // }, // refunds: { // 'ui:collapsible': 'closed', // 'ui:title': t('Refunds', { _tags: 'core' }), // 'ui:description': null, // }, currency: { 'ui:label': t('Currency', { _tags: 'core' }), }, currency_symbol: { 'ui:label': t('Currency Symbol', { _tags: 'core' }), }, meta_data: { 'ui:collapsible': 'closed', 'ui:title': t('Meta Data', { _tags: 'core' }), 'ui:description': null, }, }), [t] ); /** * */ return ( ); }; /** * */ export const OrderMetaButton = () => { const [opened, setOpened] = React.useState(false); const t = useT(); return ( <>