diff --git a/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx b/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx index 93d3e54..b5ae825 100644 --- a/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx +++ b/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -19,6 +19,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -31,9 +32,6 @@ import { } from '../../../../database/ObjectModels.js' import OrderItemIcon from '../../../Icons/OrderItemIcon.jsx' import ShipmentIcon from '../../../Icons/ShipmentIcon.jsx' -import PostInvoice from './PostInvoice.jsx' -import AcknowledgeInvoice from './AcknowledgeInvoice.jsx' -import NewPayment from '../Payments/NewPayment.jsx' const log = loglevel.getLogger('InvoiceInfo') log.setLevel(config.logLevel) @@ -42,6 +40,15 @@ 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, @@ -60,9 +67,6 @@ const InvoiceInfo = () => { loading: false, objectData: {} }) - const [postInvoiceOpen, setPostInvoiceOpen] = useState(false) - const [acknowledgeInvoiceOpen, setAcknowledgeInvoiceOpen] = useState(false) - const [newPaymentOpen, setNewPaymentOpen] = useState(false) const actions = { edit: () => { @@ -81,18 +85,6 @@ const InvoiceInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - post: () => { - setPostInvoiceOpen(true) - return true - }, - acknowledge: () => { - setAcknowledgeInvoiceOpen(true) - return true - }, - newPayment: () => { - setNewPaymentOpen(true) - return true - } } const editDisabled = @@ -101,7 +93,6 @@ const InvoiceInfo = () => { ?.disabled(objectFormState.objectData) ?? false return ( - <> { type='invoice' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -306,65 +298,6 @@ const InvoiceInfo = () => { - { - setPostInvoiceOpen(false) - }} - width={500} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostInvoiceOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setAcknowledgeInvoiceOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setAcknowledgeInvoiceOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setNewPaymentOpen(false) - }} - destroyOnHidden={true} - > - { - setNewPaymentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - reset={newPaymentOpen} - defaultValues={{ - invoice: { ...objectFormState.objectData }, - amount: objectFormState.objectData?.grandTotalAmount - }} - /> - - ) } diff --git a/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx b/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx index 0aee1fc..2532264 100644 --- a/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx +++ b/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,6 +17,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -24,10 +25,6 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import { getModelByName } from '../../../../database/ObjectModels.js' -import PostPayment from './PostPayment.jsx' -import AuthorisePayment from './AuthorisePayment.jsx' -import DeclinePayment from './DeclinePayment.jsx' -import CancelPayment from './CancelPayment.jsx' const log = loglevel.getLogger('PaymentInfo') log.setLevel(config.logLevel) @@ -36,6 +33,15 @@ const PaymentInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const paymentId = new URLSearchParams(location.search).get('paymentId') const [collapseState, updateCollapseState] = useCollapseState('PaymentInfo', { info: true, @@ -51,10 +57,6 @@ const PaymentInfo = () => { loading: false, objectData: {} }) - const [postPaymentOpen, setPostPaymentOpen] = useState(false) - const [authorisePaymentOpen, setAuthorisePaymentOpen] = useState(false) - const [declinePaymentOpen, setDeclinePaymentOpen] = useState(false) - const [cancelPaymentOpen, setCancelPaymentOpen] = useState(false) const actions = { edit: () => { @@ -73,22 +75,6 @@ const PaymentInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - post: () => { - setPostPaymentOpen(true) - return true - }, - authorise: () => { - setAuthorisePaymentOpen(true) - return true - }, - decline: () => { - setDeclinePaymentOpen(true) - return true - }, - cancel: () => { - setCancelPaymentOpen(true) - return true - } } const editDisabled = @@ -97,7 +83,6 @@ const PaymentInfo = () => { ?.disabled(objectFormState.objectData) ?? false return ( - <> { type='payment' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -244,79 +230,6 @@ const PaymentInfo = () => { - { - setPostPaymentOpen(false) - }} - width={500} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostPaymentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setAuthorisePaymentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setAuthorisePaymentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setDeclinePaymentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setDeclinePaymentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setCancelPaymentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setCancelPaymentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx b/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx index b2619f2..b1c19c6 100644 --- a/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx +++ b/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx @@ -155,6 +155,7 @@ const TaxRecordInfo = () => { type='taxRecord' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx index e980974..ce5650f 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx @@ -153,6 +153,7 @@ const FilamentStockInfo = () => { type='filamentStock' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx index bd8d0e0..6d430b6 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx @@ -215,6 +215,7 @@ const LoadFilamentStock = ({ showBed={false} showMoreInfo={false} id={loadFilamentStockFormValues.printer._id} + offline={!connected} /> ) : null} diff --git a/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx index ea49d7e..66a87f2 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx @@ -175,6 +175,7 @@ const UnloadFilamentStock = ({ onOk, reset, printer = null }) => { showBed={false} showMoreInfo={false} id={unloadFilamentStockFormValues.printer._id} + offline={!connected} /> ) : null} diff --git a/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx b/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx index 8bea305..d548aa1 100644 --- a/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx +++ b/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx @@ -148,6 +148,7 @@ const OrderItemInfo = () => { type='orderItem' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/PartStocks/PartStockInfo.jsx b/src/components/Dashboard/Inventory/PartStocks/PartStockInfo.jsx index e6ee1c7..810502a 100644 --- a/src/components/Dashboard/Inventory/PartStocks/PartStockInfo.jsx +++ b/src/components/Dashboard/Inventory/PartStocks/PartStockInfo.jsx @@ -164,6 +164,7 @@ const PartStockInfo = () => { type='partStock' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx b/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx index e6c30fa..d031682 100644 --- a/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx +++ b/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -14,7 +14,6 @@ import { getModelProperty, getModelByName } from '../../../../database/ObjectModels.js' -import PostProductStock from './PostProductStock.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' @@ -26,6 +25,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -41,10 +41,18 @@ const ProductStockInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const productStockId = new URLSearchParams(location.search).get( 'productStockId' ) - const [postProductStockOpen, setPostProductStockOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState( 'ProductStockInfo', { @@ -83,10 +91,6 @@ const ProductStockInfo = () => { objectFormRef?.current.handleDelete?.() return true }, - post: () => { - setPostProductStockOpen(true) - return true - } } const editDisabled = @@ -95,7 +99,6 @@ const ProductStockInfo = () => { ?.disabled(objectFormState.objectData) ?? false return ( - <> { type='productStock' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -302,25 +306,6 @@ const ProductStockInfo = () => { - { - setPostProductStockOpen(false) - }} - width={500} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostProductStockOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx b/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx index aca6954..e82da87 100644 --- a/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx +++ b/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,6 +17,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -24,16 +25,10 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import OrderItemsIcon from '../../../Icons/OrderItemIcon.jsx' -import NewOrderItem from '../OrderItems/NewOrderItem.jsx' -import NewShipment from '../Shipments/NewShipment.jsx' -import PostPurchaseOrder from './PostPurchaseOrder.jsx' -import AcknowledgePurchaseOrder from './AcknowledgePurchaseOrder.jsx' -import CancelPurchaseOrder from './CancelPurchaseOrder.jsx' import ShipmentIcon from '../../../Icons/ShipmentIcon.jsx' import InvoiceIcon from '../../../Icons/InvoiceIcon.jsx' import StockEventIcon from '../../../Icons/StockEventIcon.jsx' import { getModelByName } from '../../../../database/ObjectModels.js' -import NewInvoice from '../../Finance/Invoices/NewInvoice.jsx' const log = loglevel.getLogger('PurchaseOrderInfo') log.setLevel(config.logLevel) @@ -44,13 +39,15 @@ const PurchaseOrderInfo = () => { const orderItemsTableRef = useRef(null) const shipmentsTableRef = useRef(null) const actionHandlerRef = useRef(null) - const [newOrderItemOpen, setNewOrderItemOpen] = useState(false) - const [newShipmentOpen, setNewShipmentOpen] = useState(false) - const [postPurchaseOrderOpen, setPostPurchaseOrderOpen] = useState(false) - const [acknowledgePurchaseOrderOpen, setAcknowledgePurchaseOrderOpen] = - useState(false) - const [cancelPurchaseOrderOpen, setCancelPurchaseOrderOpen] = useState(false) - const [newInvoiceOpen, setNewInvoiceOpen] = useState(false) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const purchaseOrderId = new URLSearchParams(location.search).get( 'purchaseOrderId' ) @@ -96,30 +93,6 @@ const PurchaseOrderInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - newOrderItem: () => { - setNewOrderItemOpen(true) - return true - }, - newShipment: () => { - setNewShipmentOpen(true) - return true - }, - newInvoice: () => { - setNewInvoiceOpen(true) - return true - }, - post: () => { - setPostPurchaseOrderOpen(true) - return true - }, - acknowledge: () => { - setAcknowledgePurchaseOrderOpen(true) - return true - }, - cancel: () => { - setCancelPurchaseOrderOpen(true) - return true - } } const editDisabled = getModelByName('purchaseOrder') @@ -127,7 +100,6 @@ const PurchaseOrderInfo = () => { .disabled(objectFormState.objectData) return ( - <> { type='purchaseOrder' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -361,122 +334,6 @@ const PurchaseOrderInfo = () => { - { - setNewOrderItemOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewOrderItemOpen(false) - }} - reset={newOrderItemOpen} - defaultValues={{ - order: { _id: purchaseOrderId }, - orderType: 'purchaseOrder', - syncAmount: 'itemCost' - }} - /> - - { - setNewShipmentOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewShipmentOpen(false) - }} - reset={newShipmentOpen} - defaultValues={{ - orderType: 'purchaseOrder', - order: { _id: purchaseOrderId } - }} - /> - - { - setNewInvoiceOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewInvoiceOpen(false) - }} - reset={newInvoiceOpen} - defaultValues={{ - orderType: 'purchaseOrder', - order: { ...objectFormState.objectData } - }} - /> - - { - setPostPurchaseOrderOpen(false) - }} - width={500} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostPurchaseOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setAcknowledgePurchaseOrderOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setAcknowledgePurchaseOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setCancelPurchaseOrderOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setCancelPurchaseOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx b/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx index 0e03635..915c3d7 100644 --- a/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx +++ b/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx @@ -184,6 +184,7 @@ const PurchaseOrderInfo = () => { type='purchaseOrder' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx b/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx index 74f95d0..dfa13ac 100644 --- a/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx +++ b/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,6 +17,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -24,9 +25,6 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import OrderItemIcon from '../../../Icons/OrderItemIcon.jsx' -import ShipShipment from './ShipShipment.jsx' -import ReceiveShipment from './ReceiveShipment.jsx' -import CancelShipment from './CancelShipment.jsx' const log = loglevel.getLogger('ShipmentInfo') log.setLevel(config.logLevel) @@ -35,6 +33,15 @@ const ShipmentInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const shipmentId = new URLSearchParams(location.search).get('shipmentId') const [collapseState, updateCollapseState] = useCollapseState( 'ShipmentInfo', @@ -53,10 +60,6 @@ const ShipmentInfo = () => { loading: false, objectData: {} }) - - const [shipShipmentOpen, setShipShipmentOpen] = useState(false) - const [receiveShipmentOpen, setReceiveShipmentOpen] = useState(false) - const [cancelShipmentOpen, setCancelShipmentOpen] = useState(false) const actions = { edit: () => { objectFormRef?.current?.startEditing?.() @@ -74,22 +77,9 @@ const ShipmentInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - ship: () => { - setShipShipmentOpen(true) - return true - }, - receive: () => { - setReceiveShipmentOpen(true) - return true - }, - cancel: () => { - setCancelShipmentOpen(true) - return true - } } return ( - <> { type='shipment' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -256,61 +247,6 @@ const ShipmentInfo = () => { - { - setShipShipmentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setShipShipmentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setReceiveShipmentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setReceiveShipmentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setCancelShipmentOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setCancelShipmentOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx index 8d9faac..2f9044f 100644 --- a/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx +++ b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx @@ -158,6 +158,7 @@ const StockAuditInfo = () => { type='stockAudit' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/StockLocations/StockLocationInfo.jsx b/src/components/Dashboard/Inventory/StockLocations/StockLocationInfo.jsx index f77dbb3..eb3121f 100644 --- a/src/components/Dashboard/Inventory/StockLocations/StockLocationInfo.jsx +++ b/src/components/Dashboard/Inventory/StockLocations/StockLocationInfo.jsx @@ -159,6 +159,7 @@ const StockLocationInfo = () => { type='stockLocation' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx b/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx index 2a93b28..e973a8e 100644 --- a/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx +++ b/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import useCollapseState from '../../hooks/useCollapseState.jsx' import NotesPanel from '../../common/NotesPanel.jsx' @@ -12,7 +12,6 @@ import { getModelProperty, getModelByName } from '../../../../database/ObjectModels.js' -import PostStockTransfer from './PostStockTransfer.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' @@ -22,6 +21,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -33,10 +33,18 @@ const StockTransferInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const stockTransferId = new URLSearchParams(location.search).get( 'stockTransferId' ) - const [postOpen, setPostOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState( 'StockTransferInfo', { @@ -73,10 +81,6 @@ const StockTransferInfo = () => { objectFormRef?.current.handleDelete?.() return true }, - post: () => { - setPostOpen(true) - return true - } } const editDisabled = @@ -85,7 +89,6 @@ const StockTransferInfo = () => { ?.disabled(objectFormState.objectData) ?? false return ( - <> { type='stockTransfer' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -253,25 +257,6 @@ const StockTransferInfo = () => { - { - setPostOpen(false) - }} - width={520} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/components/Dashboard/Management/AppPasswords/AppPasswordInfo.jsx b/src/components/Dashboard/Management/AppPasswords/AppPasswordInfo.jsx index 76de2e4..8440af8 100644 --- a/src/components/Dashboard/Management/AppPasswords/AppPasswordInfo.jsx +++ b/src/components/Dashboard/Management/AppPasswords/AppPasswordInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState, useContext } from 'react' +import { useRef, useState, useEffect, useContext } from 'react' import { useLocation } from 'react-router-dom' -import { Flex, Modal, Space } from 'antd' +import { Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import useCollapseState from '../../hooks/useCollapseState' import InfoCollapse from '../../common/InfoCollapse' @@ -13,13 +13,13 @@ import EditButtons from '../../common/EditButtons' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' 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 RegenerateAppPasswordSecret from './RegenerateAppPasswordSecret.jsx' import { getModelByName } from '../../../../database/ObjectModels.js' import { AuthContext } from '../../context/AuthContext.jsx' @@ -27,11 +27,19 @@ const AppPasswordInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const { userProfile } = useContext(AuthContext) const appPasswordId = new URLSearchParams(location.search).get( 'appPasswordId' ) - const [regenerateSecretOpen, setRegenerateSecretOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState( 'AppPasswordInfo', { @@ -49,10 +57,6 @@ const AppPasswordInfo = () => { }) const actions = { - regenerateSecret: () => { - setRegenerateSecretOpen(true) - return false - }, edit: () => { objectFormRef?.current?.startEditing?.() return false @@ -72,7 +76,6 @@ const AppPasswordInfo = () => { .disabled({ ...objectFormState.objectData, _user: userProfile }) return ( - <> { type='appPassword' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -198,20 +202,6 @@ const AppPasswordInfo = () => { - - { - actionHandlerRef.current?.clearAction?.() - setRegenerateSecretOpen(false) - }} - footer={null} - > - - - ) } diff --git a/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx b/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx index 22cba55..8a5fdee 100644 --- a/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx +++ b/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx @@ -157,6 +157,7 @@ const CourierServiceInfo = () => { type='courierService' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Couriers/CourierInfo.jsx b/src/components/Dashboard/Management/Couriers/CourierInfo.jsx index bb6a76e..cc72d44 100644 --- a/src/components/Dashboard/Management/Couriers/CourierInfo.jsx +++ b/src/components/Dashboard/Management/Couriers/CourierInfo.jsx @@ -153,6 +153,7 @@ const CourierInfo = () => { type='courier' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx b/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx index e8ad5d7..3794874 100644 --- a/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx +++ b/src/components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx @@ -154,6 +154,7 @@ const DocumentJobInfo = () => { type='documentJob' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx b/src/components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx index 65277d5..d5d5b99 100644 --- a/src/components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx +++ b/src/components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx @@ -163,6 +163,7 @@ const DocumentPrinterInfo = () => { type='documentPrinter' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/DocumentSizes/DocumentSizeInfo.jsx b/src/components/Dashboard/Management/DocumentSizes/DocumentSizeInfo.jsx index 6dc0730..ecd491a 100644 --- a/src/components/Dashboard/Management/DocumentSizes/DocumentSizeInfo.jsx +++ b/src/components/Dashboard/Management/DocumentSizes/DocumentSizeInfo.jsx @@ -154,6 +154,7 @@ const DocumentSizeInfo = () => { type='documentSize' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx b/src/components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx index 23dca4c..2306403 100644 --- a/src/components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx +++ b/src/components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx @@ -160,6 +160,7 @@ const DocumentTemplateInfo = () => { type='documentTemplate' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx b/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx index 51fea6b..bfb95f6 100644 --- a/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx +++ b/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx @@ -152,6 +152,7 @@ const FilamentSkuInfo = () => { type='filamentSku' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/FilamentSkus/NewFilamentSku.jsx b/src/components/Dashboard/Management/FilamentSkus/NewFilamentSku.jsx index 3b13260..1c51ef1 100644 --- a/src/components/Dashboard/Management/FilamentSkus/NewFilamentSku.jsx +++ b/src/components/Dashboard/Management/FilamentSkus/NewFilamentSku.jsx @@ -15,6 +15,7 @@ const NewFilamentSku = ({ onOk, reset, defaultValues }) => { }} > {({ handleSubmit, submitLoading, objectData, formValid }) => { + console.log('objectData', objectData) const steps = [ { title: 'Required', diff --git a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx index 28e33b7..dccc904 100644 --- a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx +++ b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config' @@ -17,6 +17,7 @@ import EditButtons from '../../common/EditButtons' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler' +import { useActions } from '../../context/ActionsContext' import ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -25,7 +26,6 @@ import FilamentSkuIcon from '../../../Icons/FilamentSkuIcon.jsx' import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' -import NewFilamentSku from '../FilamentSkus/NewFilamentSku' const log = loglevel.getLogger('FilamentInfo') log.setLevel(config.logLevel) @@ -35,8 +35,15 @@ const FilamentInfo = () => { const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) const filamentId = new URLSearchParams(location.search).get('filamentId') - const [newFilamentSkuOpen, setNewFilamentSkuOpen] = useState(false) const filamentSkusTableRef = useRef() + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + filamentSkusTableRef.current?.reload?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const [collapseState, updateCollapseState] = useCollapseState( 'FilamentInfo', { @@ -58,10 +65,6 @@ const FilamentInfo = () => { }) const actions = { - newFilamentSku: () => { - setNewFilamentSkuOpen(true) - return true - }, edit: () => { objectFormRef?.current?.startEditing?.() return false @@ -81,215 +84,192 @@ const FilamentInfo = () => { } 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 - } - loading={objectFormState.editLoading} - /> - - - - - - - - } - active={collapseState.info} - onToggle={(expanded) => updateCollapseState('info', expanded)} - collapseKey='info' - > - { - setEditFormState((prev) => ({ ...prev, ...state })) - }} - > - {({ loading, isEditing, objectData }) => { - return ( - } - isEditing={isEditing} - type='filament' - objectData={objectData} - /> - ) - }} - - - - - } - active={collapseState.filamentSkus} - onToggle={(expanded) => - updateCollapseState('filamentSkus', expanded) - } - collapseKey='filamentSkus' - > - {objectFormState.loading ? ( - - ) : ( - - )} - - - } - active={collapseState.stocks} - onToggle={(expanded) => updateCollapseState('stocks', expanded)} - collapseKey='stocks' - > - {objectFormState.loading ? ( - - ) : ( - - )} - - - setNewFilamentSkuOpen(false)} - destroyOnHidden={true} - > - { - setNewFilamentSkuOpen(false) - filamentSkusTableRef.current?.reload?.() - }} - reset={newFilamentSkuOpen} - defaultValues={{ - filament: objectFormState?.objectData || undefined - }} - /> - - - } - active={collapseState.notes} - onToggle={(expanded) => updateCollapseState('notes', expanded)} - collapseKey='notes' - > - - - - - - } - active={collapseState.auditLogs} - onToggle={(expanded) => - updateCollapseState('auditLogs', expanded) - } - collapseKey='auditLogs' - > - {objectFormState.loading ? ( - - ) : ( - - )} - - - + + + + { + 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 + } + loading={objectFormState.editLoading} + /> + + - + + + + + } + active={collapseState.info} + onToggle={(expanded) => updateCollapseState('info', expanded)} + collapseKey='info' + > + { + setEditFormState((prev) => ({ ...prev, ...state })) + }} + > + {({ loading, isEditing, objectData }) => { + return ( + } + isEditing={isEditing} + type='filament' + objectData={objectData} + /> + ) + }} + + + + + } + active={collapseState.filamentSkus} + onToggle={(expanded) => + updateCollapseState('filamentSkus', expanded) + } + collapseKey='filamentSkus' + > + {objectFormState.loading ? ( + + ) : ( + + )} + + + } + active={collapseState.stocks} + onToggle={(expanded) => updateCollapseState('stocks', expanded)} + collapseKey='stocks' + > + {objectFormState.loading ? ( + + ) : ( + + )} + + + } + active={collapseState.notes} + onToggle={(expanded) => updateCollapseState('notes', expanded)} + collapseKey='notes' + > + + + + + + } + active={collapseState.auditLogs} + onToggle={(expanded) => updateCollapseState('auditLogs', expanded)} + collapseKey='auditLogs' + > + {objectFormState.loading ? ( + + ) : ( + + )} + + + + ) } diff --git a/src/components/Dashboard/Management/Files/FileInfo.jsx b/src/components/Dashboard/Management/Files/FileInfo.jsx index fc89096..487eaae 100644 --- a/src/components/Dashboard/Management/Files/FileInfo.jsx +++ b/src/components/Dashboard/Management/Files/FileInfo.jsx @@ -168,6 +168,7 @@ const FileInfo = () => { type='file' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Hosts/HostInfo.jsx b/src/components/Dashboard/Management/Hosts/HostInfo.jsx index 6069cd9..cade824 100644 --- a/src/components/Dashboard/Management/Hosts/HostInfo.jsx +++ b/src/components/Dashboard/Management/Hosts/HostInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,10 +17,10 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' -import HostOTP from './HostOtp.jsx' import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import PrinterIcon from '../../../Icons/PrinterIcon.jsx' @@ -34,6 +34,15 @@ const HostInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const hostId = new URLSearchParams(location.search).get('hostId') const [collapseState, updateCollapseState] = useCollapseState('HostInfo', { info: true, @@ -42,8 +51,6 @@ const HostInfo = () => { notes: true, auditLogs: false }) - - const [hostOTPOpen, setHostOTPOpen] = useState(false) const [objectFormState, setEditFormState] = useState({ isEditing: false, editLoading: false, @@ -54,10 +61,6 @@ const HostInfo = () => { }) const actions = { - hostOTP: () => { - setHostOTPOpen(true) - return false - }, edit: () => { objectFormRef?.current.startEditing() return false @@ -77,7 +80,6 @@ const HostInfo = () => { } return ( - <> { type='host' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -267,20 +270,6 @@ const HostInfo = () => { - - { - actionHandlerRef.current.clearAction() - setHostOTPOpen(false) - }} - footer={false} - > - - - ) } diff --git a/src/components/Dashboard/Management/Materials/MaterialInfo.jsx b/src/components/Dashboard/Management/Materials/MaterialInfo.jsx index 005a0a6..5617b97 100644 --- a/src/components/Dashboard/Management/Materials/MaterialInfo.jsx +++ b/src/components/Dashboard/Management/Materials/MaterialInfo.jsx @@ -155,6 +155,7 @@ const MaterialInfo = () => { type='material' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx b/src/components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx index 01c0ffa..584b9af 100644 --- a/src/components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx +++ b/src/components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx @@ -143,6 +143,7 @@ const NoteTypeInfo = () => { type='noteType' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Notes/NoteInfo.jsx b/src/components/Dashboard/Management/Notes/NoteInfo.jsx index 10c8bd7..a42e3f8 100644 --- a/src/components/Dashboard/Management/Notes/NoteInfo.jsx +++ b/src/components/Dashboard/Management/Notes/NoteInfo.jsx @@ -151,6 +151,7 @@ const NoteInfo = () => { type='note' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx b/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx index 5d006c9..40a4308 100644 --- a/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx +++ b/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx @@ -147,6 +147,7 @@ const PartSkuInfo = () => { type='partSku' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Parts/PartInfo.jsx b/src/components/Dashboard/Management/Parts/PartInfo.jsx index f1d2000..6526790 100644 --- a/src/components/Dashboard/Management/Parts/PartInfo.jsx +++ b/src/components/Dashboard/Management/Parts/PartInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import useCollapseState from '../../hooks/useCollapseState' import NotesPanel from '../../common/NotesPanel' import InfoCollapse from '../../common/InfoCollapse' @@ -14,6 +14,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' import ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -21,15 +22,22 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import PartSkuIcon from '../../../Icons/PartSkuIcon.jsx' -import NewPartSku from '../PartSkus/NewPartSku' const PartInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) const partId = new URLSearchParams(location.search).get('partId') - const [newPartSkuOpen, setNewPartSkuOpen] = useState(false) const partSkusTableRef = useRef() + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + partSkusTableRef.current?.reload?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const [collapseState, updateCollapseState] = useCollapseState('PartInfo', { info: true, partSkus: true, @@ -46,10 +54,6 @@ const PartInfo = () => { }) const actions = { - newPartSku: () => { - setNewPartSkuOpen(true) - return true - }, edit: () => { objectFormRef?.current?.startEditing?.() return false @@ -65,7 +69,6 @@ const PartInfo = () => { } return ( - <> { type='part' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -190,25 +194,6 @@ const PartInfo = () => { )} - setNewPartSkuOpen(false)} - destroyOnHidden={true} - > - { - setNewPartSkuOpen(false) - partSkusTableRef.current?.reload?.() - }} - reset={newPartSkuOpen} - defaultValues={{ - part: objectFormState?.objectData || undefined - }} - /> - } @@ -242,7 +227,6 @@ const PartInfo = () => { - ) } diff --git a/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx b/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx index 2ca72ae..7b9c272 100644 --- a/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx +++ b/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx @@ -152,6 +152,7 @@ const ProductCategoryInfo = () => { type='productCategory' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx b/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx index 8e9a050..443f39a 100644 --- a/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx +++ b/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx @@ -148,6 +148,7 @@ const ProductSkuInfo = () => { type='productSku' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Products/ProductInfo.jsx b/src/components/Dashboard/Management/Products/ProductInfo.jsx index 9ddb98f..b0d8fdb 100644 --- a/src/components/Dashboard/Management/Products/ProductInfo.jsx +++ b/src/components/Dashboard/Management/Products/ProductInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import useCollapseState from '../../hooks/useCollapseState' import NotesPanel from '../../common/NotesPanel' import InfoCollapse from '../../common/InfoCollapse' @@ -15,13 +15,13 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' import ObjectActions from '../../common/ObjectActions.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 ProductSkuIcon from '../../../Icons/ProductSkuIcon.jsx' -import NewProductSku from '../ProductSkus/NewProductSku' const ProductInfo = () => { const location = useLocation() @@ -34,8 +34,16 @@ const ProductInfo = () => { notes: true, auditLogs: false }) - const [newProductSkuOpen, setNewProductSkuOpen] = useState(false) const productSkusTableRef = useRef() + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + productSkusTableRef.current?.reload?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const [objectFormState, setEditFormState] = useState({ isEditing: false, editLoading: false, @@ -46,10 +54,6 @@ const ProductInfo = () => { }) const actions = { - newProductSku: () => { - setNewProductSkuOpen(true) - return true - }, edit: () => { objectFormRef?.current?.startEditing?.() return false @@ -65,7 +69,6 @@ const ProductInfo = () => { } return ( - <> { type='product' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -193,26 +197,6 @@ const ProductInfo = () => { - setNewProductSkuOpen(false)} - destroyOnHidden={true} - > - { - setNewProductSkuOpen(false) - productSkusTableRef.current?.reload?.() - }} - reset={newProductSkuOpen} - defaultValues={{ - product: objectFormState?.objectData || undefined - }} - /> - - } @@ -246,7 +230,6 @@ const ProductInfo = () => { - ) } diff --git a/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx b/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx index 68572ad..782ac7d 100644 --- a/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx +++ b/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx @@ -152,6 +152,7 @@ const TaxRateInfo = () => { type='taxRate' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Management/Users/UserInfo.jsx b/src/components/Dashboard/Management/Users/UserInfo.jsx index 77d05ad..2df0543 100644 --- a/src/components/Dashboard/Management/Users/UserInfo.jsx +++ b/src/components/Dashboard/Management/Users/UserInfo.jsx @@ -1,6 +1,6 @@ import { useRef, useState } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import useCollapseState from '../../hooks/useCollapseState' import NotesPanel from '../../common/NotesPanel' @@ -22,7 +22,6 @@ 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 NewAppPassword from '../AppPasswords/NewAppPassword.jsx' import ObjectProperty from '../../common/ObjectProperty.jsx' import { getModelProperty } from '../../../../database/ObjectModels.js' import { useMediaQuery } from 'react-responsive' @@ -33,7 +32,6 @@ const UserInfo = () => { const appPasswordsTableRef = useRef(null) const actionHandlerRef = useRef(null) const userId = new URLSearchParams(location.search).get('userId') - const [newAppPasswordOpen, setNewAppPasswordOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState('UserInfo', { info: true, appPasswords: true, @@ -51,10 +49,6 @@ const UserInfo = () => { const isMobile = useMediaQuery({ maxWidth: 768 }) const actions = { - newAppPassword: () => { - setNewAppPasswordOpen(true) - return false - }, edit: () => { objectFormRef?.current?.startEditing?.() return false @@ -70,205 +64,184 @@ const UserInfo = () => { } 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 - } - loading={objectFormState.editLoading} - /> - - - - - - - } - active={collapseState.info} - onToggle={(expanded) => updateCollapseState('info', expanded)} - collapseKey='info' - > - { - setEditFormState((prev) => ({ ...prev, ...state })) - }} - > - {({ loading, isEditing, objectData }) => ( - -
- - - -
- } - isEditing={isEditing} - type='user' - objectData={objectData} - visibleProperties={{ - profileImage: false - }} - /> -
- )} -
-
-
- } - active={collapseState.appPasswords} - onToggle={(expanded) => - updateCollapseState('appPasswords', expanded) - } - collapseKey='appPasswords' - > - {!userId ? ( - - ) : ( - - )} - - } - active={collapseState.notes} - onToggle={(expanded) => updateCollapseState('notes', expanded)} - collapseKey='notes' - > - - - - - } - active={collapseState.auditLogs} - onToggle={(expanded) => - updateCollapseState('auditLogs', expanded) - } - collapseKey='auditLogs' - > - {objectFormState.loading ? ( - - ) : ( - - )} - -
-
+ + + + { + 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 + } + loading={objectFormState.editLoading} + /> + +
- - { - actionHandlerRef.current?.clearAction?.() - setNewAppPasswordOpen(false) - }} - footer={null} - > - { - setNewAppPasswordOpen(false) - appPasswordsTableRef.current?.reload?.() - }} - reset={newAppPasswordOpen} - defaultValues={{ user: { ...objectFormState.objectData } }} - /> - - + + + + } + active={collapseState.info} + onToggle={(expanded) => updateCollapseState('info', expanded)} + collapseKey='info' + > + { + setEditFormState((prev) => ({ ...prev, ...state })) + }} + > + {({ loading, isEditing, objectData }) => ( + +
+ + + +
+ } + isEditing={isEditing} + type='user' + objectData={objectData} + visibleProperties={{ + profileImage: false + }} + /> +
+ )} +
+
+
+ } + active={collapseState.appPasswords} + onToggle={(expanded) => + updateCollapseState('appPasswords', expanded) + } + collapseKey='appPasswords' + > + {!userId ? ( + + ) : ( + + )} + + } + active={collapseState.notes} + onToggle={(expanded) => updateCollapseState('notes', expanded)} + collapseKey='notes' + > + + + + + } + active={collapseState.auditLogs} + onToggle={(expanded) => + updateCollapseState('auditLogs', expanded) + } + collapseKey='auditLogs' + > + {objectFormState.loading ? ( + + ) : ( + + )} + +
+
+
) } diff --git a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx index 53f943f..87c860c 100644 --- a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx +++ b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx @@ -152,6 +152,7 @@ const VendorInfo = () => { type='vendor' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx b/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx index 7201e6e..5cb64ed 100644 --- a/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx +++ b/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx @@ -189,6 +189,7 @@ const FilamentProfileInfo = () => { id={filamentProfileId} type='filamentProfile' ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => setObjectFormState((current) => ({ ...current, ...state })) } diff --git a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx index aeb6990..ef6c490 100644 --- a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx +++ b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx @@ -155,6 +155,7 @@ const GCodeFileInfo = () => { type='gcodeFile' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Production/Jobs/JobInfo.jsx b/src/components/Dashboard/Production/Jobs/JobInfo.jsx index 663311c..37628af 100644 --- a/src/components/Dashboard/Production/Jobs/JobInfo.jsx +++ b/src/components/Dashboard/Production/Jobs/JobInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,13 +17,13 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' import JobIcon from '../../../Icons/JobIcon.jsx' import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' -import DeployJob from './DeployJob.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import { getModelByName } from '../../../../database/ObjectModels.js' @@ -34,9 +34,16 @@ const JobInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) - const jobId = new URLSearchParams(location.search).get('jobId') - const [deployJobOpen, setDeployJobOpen] = useState(false) + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) + const jobId = new URLSearchParams(location.search).get('jobId') const [collapseState, updateCollapseState] = useCollapseState('JobInfo', { info: true, subJobs: true, @@ -73,14 +80,9 @@ const JobInfo = () => { objectFormRef?.current.handleUpdate() return true }, - deploy: () => { - setDeployJobOpen(true) - return false - } } return ( - <> { type='job' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -239,25 +242,6 @@ const JobInfo = () => {
- { - actionHandlerRef.current.clearAction() - setDeployJobOpen(false) - }} - > - { - actionHandlerRef.current.clearAction() - setDeployJobOpen(false) - }} - /> - - ) } diff --git a/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx b/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx index 8df893e..a3fc445 100644 --- a/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx +++ b/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx @@ -162,6 +162,7 @@ const PrinterProfileInfo = () => { id={printerProfileId} type='printerProfile' ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => setObjectFormState((current) => ({ ...current, ...state })) } diff --git a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx index f8991f9..98b1754 100644 --- a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx @@ -1,6 +1,6 @@ import { useState, useRef, useEffect, useContext } from 'react' import { useLocation } from 'react-router-dom' -import { Space, Flex, Card, Splitter, Divider, Modal } from 'antd' +import { Space, Flex, Card, Splitter, Divider } from 'antd' import loglevel from 'loglevel' import config from '../../../../config.js' import useCollapseState from '../../hooks/useCollapseState.jsx' @@ -11,6 +11,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx' import ObjectForm from '../../common/ObjectForm.jsx' import ActionHandler from '../../common/ActionHandler.jsx' import ObjectActions from '../../common/ObjectActions.jsx' +import { useActions } from '../../context/ActionsContext' import PropTypes from 'prop-types' import ObjectInfo from '../../common/ObjectInfo.jsx' @@ -29,8 +30,6 @@ import MissingPlaceholder from '../../common/MissingPlaceholder.jsx' import { useMediaQuery } from 'react-responsive' import AlertsDisplay from '../../common/AlertsDisplay.jsx' import { ApiServerContext } from '../../context/ApiServerContext.jsx' -import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock.jsx' -import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import PrinterControlButtons from '../../common/PrinterControlButtons.jsx' @@ -59,6 +58,7 @@ const ControlPrinter = ({ slicerIntegration = false }) => { ) const { connected, sendObjectAction } = useContext(ApiServerContext) + const { setCurrentObject, setCurrentObjectType, setOnModalOk } = useActions() const [sideBarVisible, setSideBarVisible] = useState( collapseState.temperature || collapseState.position || @@ -66,8 +66,14 @@ const ControlPrinter = ({ slicerIntegration = false }) => { collapseState.misc ) - const [loadFilamentStockOpen, setLoadFilamentStockOpen] = useState(false) - const [unloadFilamentStockOpen, setUnloadFilamentStockOpen] = useState(false) + const [objectFormState, setEditFormState] = useState({ + isEditing: false, + editLoading: false, + formValid: false, + activities: [], + loading: false, + objectData: {} + }) useEffect(() => { setSideBarVisible( @@ -78,14 +84,26 @@ const ControlPrinter = ({ slicerIntegration = false }) => { ) }, [collapseState]) - const [objectFormState, setEditFormState] = useState({ - isEditing: false, - editLoading: false, - formValid: false, - activities: [], - loading: false, - objectData: {} - }) + useEffect(() => { + setCurrentObjectType('printer') + return () => { + setCurrentObject(null) + setCurrentObjectType(null) + } + }, [setCurrentObject, setCurrentObjectType]) + + useEffect(() => { + if (objectFormState.objectData?._id) { + setCurrentObject(objectFormState.objectData) + } + }, [objectFormState.objectData, setCurrentObject]) + + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const actions = { edit: () => { @@ -156,14 +174,6 @@ const ControlPrinter = ({ slicerIntegration = false }) => { }) } return true - }, - loadFilamentStock: () => { - setLoadFilamentStockOpen(true) - return true - }, - unloadFilamentStock: () => { - setUnloadFilamentStockOpen(true) - return true } } @@ -373,6 +383,7 @@ const ControlPrinter = ({ slicerIntegration = false }) => { id={printerId} type='printer' ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -595,34 +606,6 @@ const ControlPrinter = ({ slicerIntegration = false }) => { - setLoadFilamentStockOpen(false)} - footer={null} - width='700px' - destroyOnHidden={true} - > - setLoadFilamentStockOpen(false)} - reset={false} - filamentStockLoaded={false} - /> - - setUnloadFilamentStockOpen(false)} - footer={null} - width='700px' - destroyOnHidden={true} - > - setUnloadFilamentStockOpen(false)} - reset={false} - filamentStockLoaded={false} - /> - ) } diff --git a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx index 4487ba7..7c275c9 100644 --- a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx +++ b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx @@ -1,7 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' -import NewPrinterProfile from '../PrinterProfiles/NewPrinterProfile' +import { Card, Flex, Space } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,6 +16,7 @@ import ObjectForm from '../../common/ObjectForm.jsx' import EditButtons from '../../common/EditButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' import ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -33,6 +33,9 @@ const PrinterInfo = () => { const objectFormRef = useRef(null) const profilesTableRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() const printerId = new URLSearchParams(location.search).get('printerId') const [collapseState, updateCollapseState] = useCollapseState('PrinterInfo', { info: true, @@ -50,7 +53,14 @@ const PrinterInfo = () => { loading: false, objectData: {} }) - const [newPrinterProfileOpen, setNewPrinterProfileOpen] = useState(false) + + useEffect(() => { + setOnModalOk(() => () => { + profilesTableRef.current?.reload?.() + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const actions = { edit: () => { @@ -65,14 +75,9 @@ const PrinterInfo = () => { objectFormRef?.current.handleUpdate() return true }, - newPrinterProfile: () => { - setNewPrinterProfileOpen(true) - return true - } } return ( - <> { type='printer' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -248,28 +254,6 @@ const PrinterInfo = () => { - { - setNewPrinterProfileOpen(false) - }} - destroyOnHidden={true} - > - { - setNewPrinterProfileOpen(false) - profilesTableRef.current?.reload() - }} - reset={newPrinterProfileOpen} - defaultValues={{ - printer: { ...objectFormState.objectData } - }} - /> - - ) } diff --git a/src/components/Dashboard/Production/SubJobs/SubJobInfo.jsx b/src/components/Dashboard/Production/SubJobs/SubJobInfo.jsx index c6b35d0..99d846f 100644 --- a/src/components/Dashboard/Production/SubJobs/SubJobInfo.jsx +++ b/src/components/Dashboard/Production/SubJobs/SubJobInfo.jsx @@ -143,6 +143,7 @@ const SubJobInfo = () => { type='subJob' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Sales/Clients/ClientInfo.jsx b/src/components/Dashboard/Sales/Clients/ClientInfo.jsx index 5423a32..8e1e812 100644 --- a/src/components/Dashboard/Sales/Clients/ClientInfo.jsx +++ b/src/components/Dashboard/Sales/Clients/ClientInfo.jsx @@ -152,6 +152,7 @@ const ClientInfo = () => { type='client' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} diff --git a/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx b/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx index 3393c66..7c278ce 100644 --- a/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx +++ b/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import loglevel from 'loglevel' import config from '../../../../config' import useCollapseState from '../../hooks/useCollapseState' @@ -16,14 +16,13 @@ import EditButtons from '../../common/EditButtons' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' 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 PublishListingVarient from './PublishListingVarient.jsx' -import UnpublishListingVarient from './UnpublishListingVarient.jsx' const log = loglevel.getLogger('ListingVarientInfo') log.setLevel(config.logLevel) @@ -32,11 +31,18 @@ const ListingVarientInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const listingVarientId = new URLSearchParams(location.search).get( 'listingVarientId' ) - const [publishOpen, setPublishOpen] = useState(false) - const [unpublishOpen, setUnpublishOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState( 'ListingVarientInfo', { @@ -71,18 +77,9 @@ const ListingVarientInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - publish: () => { - setPublishOpen(true) - return true - }, - unpublish: () => { - setUnpublishOpen(true) - return true - } } return ( - <> { type='listingVarient' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -221,39 +219,6 @@ const ListingVarientInfo = () => { - setPublishOpen(false)} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPublishOpen(false) - objectFormRef?.current.handleFetchObject() - }} - /> - - setUnpublishOpen(false)} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setUnpublishOpen(false) - objectFormRef?.current.handleFetchObject() - }} - /> - - ) } diff --git a/src/components/Dashboard/Sales/Listings/ListingInfo.jsx b/src/components/Dashboard/Sales/Listings/ListingInfo.jsx index fc2c44d..6931b22 100644 --- a/src/components/Dashboard/Sales/Listings/ListingInfo.jsx +++ b/src/components/Dashboard/Sales/Listings/ListingInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, Modal, Space } from 'antd' +import { Card, Flex, Space } from 'antd' import loglevel from 'loglevel' import config from '../../../../config' import useCollapseState from '../../hooks/useCollapseState' @@ -17,15 +17,13 @@ import EditButtons from '../../common/EditButtons' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' 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 NewListingVarient from '../ListingVarients/NewListingVarient.jsx' -import PublishListing from './PublishListing.jsx' -import UnpublishListing from './UnpublishListing.jsx' const log = loglevel.getLogger('ListingInfo') log.setLevel(config.logLevel) @@ -35,10 +33,16 @@ const ListingInfo = () => { const objectFormRef = useRef(null) const listingVarientsTableRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + listingVarientsTableRef.current?.reload?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const listingId = new URLSearchParams(location.search).get('listingId') - const [newListingVarientOpen, setNewListingVarientOpen] = useState(false) - const [publishListingOpen, setPublishListingOpen] = useState(false) - const [unpublishListingOpen, setUnpublishListingOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState('ListingInfo', { info: true, listingVarients: true, @@ -71,22 +75,9 @@ const ListingInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - newListingVarient: () => { - setNewListingVarientOpen(true) - return true - }, - publish: () => { - setPublishListingOpen(true) - return true - }, - unpublish: () => { - setUnpublishListingOpen(true) - return true - } } return ( - <> { type='listing' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -245,61 +237,6 @@ const ListingInfo = () => { - { - setNewListingVarientOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewListingVarientOpen(false) - listingVarientsTableRef.current?.reload() - }} - reset={newListingVarientOpen} - defaultValues={{ - listing: objectFormState.objectData - }} - /> - - setPublishListingOpen(false)} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPublishListingOpen(false) - objectFormRef?.current.handleFetchObject() - listingVarientsTableRef.current?.reload?.() - }} - /> - - setUnpublishListingOpen(false)} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setUnpublishListingOpen(false) - objectFormRef?.current.handleFetchObject() - listingVarientsTableRef.current?.reload?.() - }} - /> - - ) } diff --git a/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx b/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx index c161589..f77c8d9 100644 --- a/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx +++ b/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx @@ -1,6 +1,6 @@ -import { useContext, useRef, useState } from 'react' +import { useContext, useRef, useState , useEffect} from 'react' import { useLocation } from 'react-router-dom' -import { Card, Flex, message, Modal, Space } from 'antd' +import { Card, Flex, message, Space } from 'antd' import loglevel from 'loglevel' import config from '../../../../config' import useCollapseState from '../../hooks/useCollapseState' @@ -16,15 +16,13 @@ import EditButtons from '../../common/EditButtons' import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActionHandler from '../../common/ActionHandler.jsx' +import { useActions } from '../../context/ActionsContext' 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 SyncListings from './SyncListings.jsx' -import SyncOrders from './SyncOrders.jsx' -import ConfigureMarketplace from './ConfigureMarketplace.jsx' import { ApiServerContext } from '../../context/ApiServerContext.jsx' import { ElectronContext } from '../../context/ElectronContext.jsx' import { @@ -39,6 +37,15 @@ const MarketplaceInfo = () => { const location = useLocation() const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const { getMarketplaceAuthUrl, refreshMarketplaceAuth } = useContext(ApiServerContext) const { openExternalUrl } = useContext(ElectronContext) @@ -61,9 +68,6 @@ const MarketplaceInfo = () => { loading: false, objectData: {} }) - const [syncListingsOpen, setSyncListingsOpen] = useState(false) - const [syncOrdersOpen, setSyncOrdersOpen] = useState(false) - const [configureModalOpen, setConfigureModalOpen] = useState(false) const startAuthorization = async () => { const objectData = objectFormState.objectData @@ -128,18 +132,6 @@ const MarketplaceInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - syncListings: () => { - setSyncListingsOpen(true) - return true - }, - syncOrders: () => { - setSyncOrdersOpen(true) - return true - }, - configure: () => { - setConfigureModalOpen(true) - return true - }, connect: () => { startAuthorization() return true @@ -155,7 +147,6 @@ const MarketplaceInfo = () => { } return ( - <> { type='marketplace' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -291,63 +283,6 @@ const MarketplaceInfo = () => { - setSyncListingsOpen(false)} - width={500} - footer={null} - destroyOnHidden={true} - centered - > - { - setSyncListingsOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - setSyncOrdersOpen(false)} - width={500} - footer={null} - destroyOnHidden={true} - centered - > - { - setSyncOrdersOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - setConfigureModalOpen(false)} - width={650} - footer={null} - destroyOnHidden={true} - centered - > - { - startAuthorization() - setConfigureModalOpen(false) - }} - isConnected={ - !!( - objectFormState.objectData?.config?.refreshToken || - objectFormState.objectData?.config?.accessToken || - objectFormState.objectData?.config?.shopCipher - ) - } - loading={objectFormState.loading} - disabled={objectFormState.isEditing} - /> - - ) } diff --git a/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx b/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx index 5f6f9cd..e898204 100644 --- a/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx +++ b/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx @@ -1,6 +1,6 @@ -import { useRef, useState } from 'react' +import { useRef, useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' -import { Space, Flex, Card, Modal } from 'antd' +import { Space, Flex, Card } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -17,6 +17,7 @@ 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 ObjectActions from '../../common/ObjectActions.jsx' import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' @@ -24,16 +25,10 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import ScrollBox from '../../common/ScrollBox.jsx' import OrderItemsIcon from '../../../Icons/OrderItemIcon.jsx' -import NewOrderItem from '../../Inventory/OrderItems/NewOrderItem.jsx' -import NewShipment from '../../Inventory/Shipments/NewShipment.jsx' -import PostSalesOrder from './PostSalesOrder.jsx' -import ConfirmSalesOrder from './ConfirmSalesOrder.jsx' -import CancelSalesOrder from './CancelSalesOrder.jsx' import ShipmentIcon from '../../../Icons/ShipmentIcon.jsx' import InvoiceIcon from '../../../Icons/InvoiceIcon.jsx' import StockEventIcon from '../../../Icons/StockEventIcon.jsx' import { getModelByName } from '../../../../database/ObjectModels.js' -import NewInvoice from '../../Finance/Invoices/NewInvoice.jsx' const log = loglevel.getLogger('SalesOrderInfo') log.setLevel(config.logLevel) @@ -44,12 +39,15 @@ const SalesOrderInfo = () => { const orderItemsTableRef = useRef(null) const shipmentsTableRef = useRef(null) const actionHandlerRef = useRef(null) - const [newOrderItemOpen, setNewOrderItemOpen] = useState(false) - const [newShipmentOpen, setNewShipmentOpen] = useState(false) - const [postSalesOrderOpen, setPostSalesOrderOpen] = useState(false) - const [confirmSalesOrderOpen, setConfirmSalesOrderOpen] = useState(false) - const [cancelSalesOrderOpen, setCancelSalesOrderOpen] = useState(false) - const [newInvoiceOpen, setNewInvoiceOpen] = useState(false) + + + const { setOnModalOk } = useActions() + useEffect(() => { + setOnModalOk(() => () => { + objectFormRef.current?.handleFetchObject?.() + }) + return () => setOnModalOk(null) + }, [setOnModalOk]) const salesOrderId = new URLSearchParams(location.search).get('salesOrderId') const [collapseState, updateCollapseState] = useCollapseState( 'SalesOrderInfo', @@ -93,30 +91,6 @@ const SalesOrderInfo = () => { objectFormRef?.current?.handleDelete?.() return true }, - newOrderItem: () => { - setNewOrderItemOpen(true) - return true - }, - newShipment: () => { - setNewShipmentOpen(true) - return true - }, - newInvoice: () => { - setNewInvoiceOpen(true) - return true - }, - post: () => { - setPostSalesOrderOpen(true) - return true - }, - confirm: () => { - setConfirmSalesOrderOpen(true) - return true - }, - cancel: () => { - setCancelSalesOrderOpen(true) - return true - } } const editDisabled = getModelByName('salesOrder') @@ -124,7 +98,6 @@ const SalesOrderInfo = () => { .disabled(objectFormState.objectData) return ( - <> { type='salesOrder' style={{ height: '100%' }} ref={objectFormRef} + setCurrentObject={true} onStateChange={(state) => { setEditFormState((prev) => ({ ...prev, ...state })) }} @@ -358,122 +332,6 @@ const SalesOrderInfo = () => { - { - setNewOrderItemOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewOrderItemOpen(false) - }} - reset={newOrderItemOpen} - defaultValues={{ - order: { _id: salesOrderId }, - orderType: 'salesOrder', - syncAmount: 'itemPrice' - }} - /> - - { - setNewShipmentOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewShipmentOpen(false) - }} - reset={newShipmentOpen} - defaultValues={{ - orderType: 'salesOrder', - order: { _id: salesOrderId } - }} - /> - - { - setNewInvoiceOpen(false) - }} - width={800} - footer={null} - destroyOnHidden={true} - > - { - setNewInvoiceOpen(false) - }} - reset={newInvoiceOpen} - defaultValues={{ - orderType: 'salesOrder', - order: { ...objectFormState.objectData } - }} - /> - - { - setPostSalesOrderOpen(false) - }} - width={500} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setPostSalesOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setConfirmSalesOrderOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setConfirmSalesOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - { - setCancelSalesOrderOpen(false) - }} - width={515} - footer={null} - destroyOnHidden={true} - centered={true} - > - { - setCancelSalesOrderOpen(false) - objectFormRef?.current.handleFetchObject() - }} - objectData={objectFormState.objectData} - /> - - ) } diff --git a/src/database/models/AppPassword.js b/src/database/models/AppPassword.js index f87519e..afaa3e2 100644 --- a/src/database/models/AppPassword.js +++ b/src/database/models/AppPassword.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const AppPasswordInfo = lazy( + () => import('../../components/Dashboard/Management/AppPasswords/AppPasswordInfo') +) +const RegenerateAppPasswordSecret = lazy( + () => import('../../components/Dashboard/Management/AppPasswords/RegenerateAppPasswordSecret') +) import AppPasswordIcon from '../../components/Icons/AppPasswordIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,21 +23,20 @@ export const AppPassword = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/apppasswords/info?appPasswordId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/apppasswords/info?appPasswordId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -38,21 +45,21 @@ export const AppPassword = { } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/apppasswords/info?appPasswordId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/apppasswords/info?appPasswordId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -60,17 +67,25 @@ export const AppPassword = { { type: 'divider' }, { name: 'regenerateSecret', + type: 'modal', + modalWidth: 520, label: 'Regenerate Secret', - type: 'button', row: true, icon: LockIcon, - url: (_id) => - `/dashboard/management/apppasswords/info?appPasswordId=${_id}&action=regenerateSecret`, disabled: (objectData) => { return objectData?._user?._id != objectData?.user?._id + }, + content: (objectData, { onOk } = {}) => { + return createElement(RegenerateAppPasswordSecret, { id: objectData._id, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(AppPasswordInfo) + } + ], columns: ['_reference', 'name', 'user', 'active', 'createdAt', 'updatedAt'], filters: [ '_id', diff --git a/src/database/models/Client.js b/src/database/models/Client.js index bb1032f..17ea309 100644 --- a/src/database/models/Client.js +++ b/src/database/models/Client.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const ClientInfo = lazy( + () => import('../../components/Dashboard/Sales/Clients/ClientInfo') +) import ClientIcon from '../../components/Icons/ClientIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,38 +20,40 @@ export const Client = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/sales/clients/info?clientId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => `/dashboard/sales/clients/info?clientId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/sales/clients/info?clientId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/sales/clients/info?clientId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -54,11 +61,17 @@ export const Client = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/sales/clients/info?clientId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ClientInfo) } ], columns: [ diff --git a/src/database/models/Courier.js b/src/database/models/Courier.js index 1416f9d..f5be91a 100644 --- a/src/database/models/Courier.js +++ b/src/database/models/Courier.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const CourierInfo = lazy( + () => import('../../components/Dashboard/Management/Couriers/CourierInfo') +) import CourierIcon from '../../components/Icons/CourierIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const Courier = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/couriers/info?courierId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/couriers/info?courierId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/couriers/info?courierId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/couriers/info?courierId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const Courier = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/couriers/info?courierId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(CourierInfo) } ], columns: ['_reference', 'name', 'country', 'email', 'website', 'createdAt'], diff --git a/src/database/models/CourierService.js b/src/database/models/CourierService.js index 655ed3b..ca8605b 100644 --- a/src/database/models/CourierService.js +++ b/src/database/models/CourierService.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const CourierServiceInfo = lazy( + () => import('../../components/Dashboard/Management/CourierServices/CourierServiceInfo') +) import CourierServiceIcon from '../../components/Icons/CourierServiceIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,40 +20,40 @@ export const CourierService = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/courierservices/info?courierServiceId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/courierservices/info?courierServiceId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/courierservices/info?courierServiceId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/courierservices/info?courierServiceId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -56,11 +61,17 @@ export const CourierService = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/courierservices/info?courierServiceId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(CourierServiceInfo) } ], columns: [ diff --git a/src/database/models/DocumentJob.js b/src/database/models/DocumentJob.js index 3fa6c94..386f607 100644 --- a/src/database/models/DocumentJob.js +++ b/src/database/models/DocumentJob.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const DocumentJobInfo = lazy( + () => import('../../components/Dashboard/Management/DocumentJobs/DocumentJobInfo') +) import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -15,44 +20,49 @@ export const DocumentJob = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/documentjobs/info?documentJobId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/documentjobs/info?documentJobId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/management/documentjobs/info?documentJobId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/documentjobs/info?documentJobId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(DocumentJobInfo) } ], columns: ['_reference', 'name', 'state', 'createdAt', 'updatedAt'], diff --git a/src/database/models/DocumentPrinter.js b/src/database/models/DocumentPrinter.js index 3be89a9..09fd245 100644 --- a/src/database/models/DocumentPrinter.js +++ b/src/database/models/DocumentPrinter.js @@ -1,8 +1,13 @@ +import { createElement, lazy } from 'react' + +const DocumentPrinterInfo = lazy( + () => import('../../components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo') +) import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' -import DocumentPrinterIcon from '../../components/Icons/DocumentPrinterIcon' import CheckIcon from '../../components/Icons/CheckIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' +import DocumentPrinterIcon from '../../components/Icons/DocumentPrinterIcon' export const DocumentPrinter = { name: 'documentPrinter', @@ -14,44 +19,49 @@ export const DocumentPrinter = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/documentprinters/info?documentPrinterId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/documentprinters/info?documentPrinterId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/management/documentprinters/info?documentPrinterId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/documentprinters/info?documentPrinterId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(DocumentPrinterInfo) } ], columns: [ diff --git a/src/database/models/DocumentSize.js b/src/database/models/DocumentSize.js index 4a3eb5e..2cffc22 100644 --- a/src/database/models/DocumentSize.js +++ b/src/database/models/DocumentSize.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const DocumentSizeInfo = lazy( + () => import('../../components/Dashboard/Management/DocumentSizes/DocumentSizeInfo') +) import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -14,44 +19,49 @@ export const DocumentSize = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/documentsizes/info?documentSizeId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/documentsizes/info?documentSizeId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/management/documentsizes/info?documentSizeId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/documentsizes/info?documentSizeId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(DocumentSizeInfo) } ], columns: [ diff --git a/src/database/models/DocumentTemplate.js b/src/database/models/DocumentTemplate.js index f2f695d..c292c77 100644 --- a/src/database/models/DocumentTemplate.js +++ b/src/database/models/DocumentTemplate.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const DocumentTemplateInfo = lazy( + () => import('../../components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo') +) import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -23,44 +28,49 @@ export const DocumentTemplate = { }, { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/documenttemplates/info?documentTemplateId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/documenttemplates/info?documentTemplateId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/management/documenttemplates/info?documentTemplateId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/documenttemplates/info?documentTemplateId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(DocumentTemplateInfo) } ], columns: [ diff --git a/src/database/models/Filament.js b/src/database/models/Filament.js index 272ea04..c762174 100644 --- a/src/database/models/Filament.js +++ b/src/database/models/Filament.js @@ -1,8 +1,16 @@ +import { createElement, lazy } from 'react' + +const FilamentInfo = lazy( + () => import('../../components/Dashboard/Management/Filaments/FilamentInfo') +) +const NewFilamentSku = lazy( + () => import('../../components/Dashboard/Management/FilamentSkus/NewFilamentSku') +) import EditIcon from '../../components/Icons/EditIcon' -import FilamentIcon from '../../components/Icons/FilamentIcon' -import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import CheckIcon from '../../components/Icons/CheckIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' +import FilamentIcon from '../../components/Icons/FilamentIcon' +import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import PlusIcon from '../../components/Icons/PlusIcon' import BinIcon from '../../components/Icons/BinIcon' @@ -16,39 +24,40 @@ export const Filament = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/filaments/info?filamentId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/filaments/info?filamentId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/filaments/info?filamentId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/filaments/info?filamentId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -56,28 +65,36 @@ export const Filament = { { type: 'divider' }, { name: 'newFilamentSku', + type: 'modal', + modalWidth: 700, label: 'New Filament SKU', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/management/filaments/info?filamentId=${_id}&action=newFilamentSku`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewFilamentSku, { defaultValues: { filament: objectData }, onOk, reset: true }) } }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/management/filaments/info?filamentId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } } ], + pages: [ + { + name: 'info', + content: () => createElement(FilamentInfo) + } + ], columns: [ '_reference', 'name', diff --git a/src/database/models/FilamentProfile.js b/src/database/models/FilamentProfile.js index 90b2d12..6c5b06a 100644 --- a/src/database/models/FilamentProfile.js +++ b/src/database/models/FilamentProfile.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const FilamentProfileInfo = lazy( + () => import('../../components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo') +) import FilamentProfileIcon from '../../components/Icons/FilamentProfileIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,47 +20,57 @@ export const FilamentProfile = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/production/filamentprofiles/info?filamentProfileId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/production/filamentprofiles/info?filamentProfileId=${_id}&action=edit`, visible: (objectData) => !objectData?._isEditing }, - { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/production/filamentprofiles/info?filamentProfileId=${_id}&action=finishEdit`, - visible: (objectData) => objectData?._isEditing === true - }, { name: 'cancelEdit', label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/production/filamentprofiles/info?filamentProfileId=${_id}&action=cancelEdit`, - visible: (objectData) => objectData?._isEditing === true + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } + }, + { + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', row: true, icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/production/filamentprofiles/info?filamentProfileId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(FilamentProfileInfo) } ], columns: ['_reference', 'name', 'filamentType', 'filament', 'updatedAt'], diff --git a/src/database/models/FilamentSku.js b/src/database/models/FilamentSku.js index 3870629..d908eed 100644 --- a/src/database/models/FilamentSku.js +++ b/src/database/models/FilamentSku.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const FilamentSkuInfo = lazy( + () => import('../../components/Dashboard/Management/FilamentSkus/FilamentSkuInfo') +) import FilamentSkuIcon from '../../components/Icons/FilamentSkuIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,40 +20,40 @@ export const FilamentSku = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/filamentskus/info?filamentSkuId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/filamentskus/info?filamentSkuId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/filamentskus/info?filamentSkuId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/filamentskus/info?filamentSkuId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -56,11 +61,17 @@ export const FilamentSku = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/filamentskus/info?filamentSkuId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(FilamentSkuInfo) } ], columns: [ diff --git a/src/database/models/FilamentStock.js b/src/database/models/FilamentStock.js index dffc4cd..3ab9f27 100644 --- a/src/database/models/FilamentStock.js +++ b/src/database/models/FilamentStock.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const FilamentStockInfo = lazy( + () => import('../../components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo') +) import FilamentStockIcon from '../../components/Icons/FilamentStockIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -11,12 +16,18 @@ export const FilamentStock = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/inventory/filamentstocks/info?filamentStockId=${_id}` + icon: InfoCircleIcon + } + ], + pages: [ + { + name: 'info', + content: () => createElement(FilamentStockInfo) } ], columns: [ diff --git a/src/database/models/File.js b/src/database/models/File.js index 728d8fe..248976d 100644 --- a/src/database/models/File.js +++ b/src/database/models/File.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const FileInfo = lazy( + () => import('../../components/Dashboard/Management/Files/FileInfo') +) import DownloadIcon from '../../components/Icons/DownloadIcon' import FileIcon from '../../components/Icons/FileIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -16,59 +21,66 @@ export const File = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/files/info?fileId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/files/info?fileId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/files/info?fileId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/files/info?fileId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'download', + type: 'page', + pageName: 'info', label: 'Download', row: true, - icon: DownloadIcon, - url: (_id) => - `/dashboard/management/files/info?fileId=${_id}&action=download` + icon: DownloadIcon }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/files/info?fileId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(FileInfo) } ], columns: [ diff --git a/src/database/models/GCodeFile.js b/src/database/models/GCodeFile.js index a338150..24dc3ef 100644 --- a/src/database/models/GCodeFile.js +++ b/src/database/models/GCodeFile.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const GCodeFileInfo = lazy( + () => import('../../components/Dashboard/Production/GCodeFiles/GCodeFileInfo') +) import DownloadIcon from '../../components/Icons/DownloadIcon' import EditIcon from '../../components/Icons/EditIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -24,50 +29,57 @@ export const GCodeFile = { }, { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/production/gcodefiles/info?gcodeFileId=${_id}` + icon: InfoCircleIcon }, { name: 'download', + type: 'page', + pageName: 'info', label: 'Download', row: true, - icon: DownloadIcon, - url: (_id) => - `/dashboard/production/gcodefiles/info?gcodeFileId=${_id}&action=download` + icon: DownloadIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/production/gcodefiles/info?gcodeFileId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/production/gcodefiles/info?gcodeFileId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/production/gcodefiles/info?gcodeFileId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(GCodeFileInfo) } ], diff --git a/src/database/models/Host.js b/src/database/models/Host.js index 87e7764..f8fc9bf 100644 --- a/src/database/models/Host.js +++ b/src/database/models/Host.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const HostInfo = lazy( + () => import('../../components/Dashboard/Management/Hosts/HostInfo') +) +const HostOTP = lazy( + () => import('../../components/Dashboard/Management/Hosts/HostOtp') +) import HostIcon from '../../components/Icons/HostIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -16,40 +24,40 @@ export const Host = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/hosts/info?hostId=${_id}` + icon: InfoCircleIcon }, - { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/hosts/info?hostId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/hosts/info?hostId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/hosts/info?hostId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -59,18 +67,27 @@ export const Host = { }, { name: 'connect', + type: 'modal', + modalWidth: 520, label: 'Connect', icon: OTPIcon, - url: (_id) => - `/dashboard/management/hosts/info?hostId=${_id}&action=hostOTP` + content: (objectData, { onOk } = {}) => { + return createElement(HostOTP, { id: objectData._id, onOk }) + } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/hosts/info?hostId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(HostInfo) } ], columns: ['_reference', 'name', 'state', 'tags', 'connectedAt'], diff --git a/src/database/models/Invoice.js b/src/database/models/Invoice.js index 2919f59..d9ec180 100644 --- a/src/database/models/Invoice.js +++ b/src/database/models/Invoice.js @@ -1,3 +1,17 @@ +import { createElement, lazy } from 'react' + +const InvoiceInfo = lazy( + () => import('../../components/Dashboard/Finance/Invoices/InvoiceInfo') +) +const PostInvoice = lazy( + () => import('../../components/Dashboard/Finance/Invoices/PostInvoice') +) +const AcknowledgeInvoice = lazy( + () => import('../../components/Dashboard/Finance/Invoices/AcknowledgeInvoice') +) +const NewPayment = lazy( + () => import('../../components/Dashboard/Finance/Payments/NewPayment') +) import InvoiceIcon from '../../components/Icons/InvoiceIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -16,19 +30,19 @@ export const Invoice = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/finance/invoices/info?invoiceId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -38,34 +52,31 @@ export const Invoice = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -76,47 +87,59 @@ export const Invoice = { { type: 'divider' }, { name: 'newPayment', + type: 'modal', + modalWidth: 700, label: 'New Payment', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=newPayment`, disabled: (objectData) => { const allowedStates = ['acknowledged', 'partiallyPaid', 'overdue'] return !allowedStates.includes(objectData?.state?.type) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewPayment, { + defaultValues: { + invoice: objectData, + amount: objectData?.grandTotalAmount + }, + onOk, + reset: true + }) } }, { type: 'divider' }, { name: 'post', + type: 'modal', + modalWidth: 520, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostInvoice, { objectData, onOk }) } }, { name: 'acknowledge', + type: 'modal', + modalWidth: 520, label: 'Acknowledge', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=acknowledge`, visible: (objectData) => { return objectData?.state?.type == 'sent' + }, + content: (objectData, { onOk } = {}) => { + return createElement(AcknowledgeInvoice, { objectData, onOk }) } }, { name: 'cancel', + type: 'page', + pageName: 'info', label: 'Cancel', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/finance/invoices/info?invoiceId=${_id}&action=cancel`, disabled: (objectData) => { const allowedStates = [ 'acknowledged', @@ -131,6 +154,12 @@ export const Invoice = { } } ], + pages: [ + { + name: 'info', + content: () => createElement(InvoiceInfo) + } + ], group: ['orderType'], filters: [ 'vendor', diff --git a/src/database/models/Job.js b/src/database/models/Job.js index ea82626..87a9a23 100644 --- a/src/database/models/Job.js +++ b/src/database/models/Job.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const JobInfo = lazy( + () => import('../../components/Dashboard/Production/Jobs/JobInfo') +) +const DeployJob = lazy( + () => import('../../components/Dashboard/Production/Jobs/DeployJob') +) import JobIcon from '../../components/Icons/JobIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -16,18 +24,19 @@ export const Job = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/production/jobs/info?jobId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => `/dashboard/production/jobs/info?jobId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -37,34 +46,31 @@ export const Job = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/production/jobs/info?jobId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/production/jobs/info?jobId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/production/jobs/info?jobId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -75,17 +81,26 @@ export const Job = { { type: 'divider' }, { name: 'deploy', + type: 'modal', + modalWidth: 680, label: 'Deploy', default: true, row: true, icon: CheckIcon, - url: (_id) => - `/dashboard/production/jobs/info?jobId=${_id}&action=deploy`, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeployJob, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(JobInfo) + } + ], columns: ['_reference', 'quantity', 'state', 'gcodeFile', 'createdAt'], filters: [ 'state', @@ -96,13 +111,7 @@ export const Job = { 'createdAt', 'updatedAt' ], - sorters: [ - 'createdAt', - 'state', - 'quantity', - 'gcodeFile', - 'updatedAt' - ], + sorters: ['createdAt', 'state', 'quantity', 'gcodeFile', 'updatedAt'], properties: [ { name: '_id', diff --git a/src/database/models/Listing.js b/src/database/models/Listing.js index 14e22c0..d89e446 100644 --- a/src/database/models/Listing.js +++ b/src/database/models/Listing.js @@ -1,3 +1,17 @@ +import { createElement, lazy } from 'react' + +const ListingInfo = lazy( + () => import('../../components/Dashboard/Sales/Listings/ListingInfo') +) +const NewListingVarient = lazy( + () => import('../../components/Dashboard/Sales/ListingVarients/NewListingVarient') +) +const PublishListing = lazy( + () => import('../../components/Dashboard/Sales/Listings/PublishListing') +) +const UnpublishListing = lazy( + () => import('../../components/Dashboard/Sales/Listings/UnpublishListing') +) import ListingIcon from '../../components/Icons/ListingIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -16,39 +30,40 @@ export const Listing = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/sales/listings/info?listingId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -56,44 +71,56 @@ export const Listing = { { type: 'divider' }, { name: 'newListingVarient', + type: 'modal', + modalWidth: 700, label: 'New Listing Varient', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=newListingVarient` + content: (objectData, { onOk } = {}) => { + return createElement(NewListingVarient, { defaultValues: { listing: objectData }, onOk, reset: true }) + } }, { type: 'divider' }, { name: 'publish', + type: 'modal', + modalWidth: 520, label: 'Publish', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=publish`, visible: (objectData) => objectData?.state?.type === 'draft' || objectData?.state?.type === 'inactive', - disabled: (objectData) => objectData?.state?.type === 'syncing' + disabled: (objectData) => objectData?.state?.type === 'syncing', + content: (objectData, { onOk } = {}) => { + return createElement(PublishListing, { objectData, onOk }) + } }, { name: 'unpublish', + type: 'modal', + modalWidth: 520, label: 'Unpublish', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=unpublish`, visible: (objectData) => objectData?.state?.type === 'active', - disabled: (objectData) => objectData?.state?.type === 'syncing' + disabled: (objectData) => objectData?.state?.type === 'syncing', + content: (objectData, { onOk } = {}) => { + return createElement(UnpublishListing, { objectData, onOk }) + } }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/sales/listings/info?listingId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ListingInfo) } ], columns: [ diff --git a/src/database/models/ListingVarient.js b/src/database/models/ListingVarient.js index 33c7134..9368eda 100644 --- a/src/database/models/ListingVarient.js +++ b/src/database/models/ListingVarient.js @@ -1,3 +1,14 @@ +import { createElement, lazy } from 'react' + +const ListingVarientInfo = lazy( + () => import('../../components/Dashboard/Sales/ListingVarients/ListingVarientInfo') +) +const PublishListingVarient = lazy( + () => import('../../components/Dashboard/Sales/ListingVarients/PublishListingVarient') +) +const UnpublishListingVarient = lazy( + () => import('../../components/Dashboard/Sales/ListingVarients/UnpublishListingVarient') +) import ListingVarientIcon from '../../components/Icons/ListingVarientIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -7,6 +18,7 @@ import BinIcon from '../../components/Icons/BinIcon' export const ListingVarient = { name: 'listingVarient', + url: '/dashboard/sales/listingvarients', label: 'Listing Varient', labelPlural: 'Listing Varients', prefix: 'LVR', @@ -14,40 +26,40 @@ export const ListingVarient = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,35 +67,45 @@ export const ListingVarient = { { type: 'divider' }, { name: 'publish', + type: 'modal', + modalWidth: 520, label: 'Publish', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=publish`, visible: (objectData) => objectData?.state?.type === 'draft' || objectData?.state?.type === 'inactive', - disabled: (objectData) => objectData?.state?.type === 'syncing' + disabled: (objectData) => objectData?.state?.type === 'syncing', + content: (objectData, { onOk } = {}) => { + return createElement(PublishListingVarient, { objectData, onOk }) + } }, { name: 'unpublish', + type: 'modal', + modalWidth: 520, label: 'Unpublish', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=unpublish`, visible: (objectData) => objectData?.state?.type === 'active', - disabled: (objectData) => objectData?.state?.type === 'syncing' + disabled: (objectData) => objectData?.state?.type === 'syncing', + content: (objectData, { onOk } = {}) => { + return createElement(UnpublishListingVarient, { objectData, onOk }) + } }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/sales/listingvarients/info?listingVarientId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ListingVarientInfo) } ], columns: [ diff --git a/src/database/models/Marketplace.js b/src/database/models/Marketplace.js index ce324b4..d83d082 100644 --- a/src/database/models/Marketplace.js +++ b/src/database/models/Marketplace.js @@ -1,3 +1,14 @@ +import { createElement, lazy } from 'react' + +const MarketplaceInfo = lazy( + () => import('../../components/Dashboard/Sales/Marketplaces/MarketplaceInfo') +) +const SyncListings = lazy( + () => import('../../components/Dashboard/Sales/Marketplaces/SyncListings') +) +const SyncOrders = lazy( + () => import('../../components/Dashboard/Sales/Marketplaces/SyncOrders') +) import MarketplaceIcon from '../../components/Icons/MarketplaceIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -17,39 +28,40 @@ export const Marketplace = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/sales/marketplaces/info?marketplaceId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -57,34 +69,37 @@ export const Marketplace = { { type: 'divider' }, { name: 'syncListings', + type: 'modal', + modalWidth: 520, label: 'Sync Listings', - type: 'button', icon: ReloadIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=syncListings`, disabled: (objectData) => { return objectData?.state?.type != 'ready' + }, + content: (objectData, { onOk } = {}) => { + return createElement(SyncListings, { objectData, onOk }) } }, { name: 'syncOrders', + type: 'modal', + modalWidth: 520, label: 'Sync Orders', - type: 'button', icon: ReloadIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=syncOrders`, disabled: (objectData) => { return objectData?.state?.type != 'ready' + }, + content: (objectData, { onOk } = {}) => { + return createElement(SyncOrders, { objectData, onOk }) } }, { type: 'divider' }, { name: 'connect', + type: 'page', + pageName: 'info', label: 'Connect', - type: 'button', icon: LinkIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=connect`, disabled: (objectData) => { return ( objectData?.state?.type == 'ready' || @@ -95,22 +110,20 @@ export const Marketplace = { }, { name: 'reconnect', + type: 'page', + pageName: 'info', label: 'Reconnect', - type: 'button', icon: LinkIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=reconnect`, disabled: (objectData) => { return objectData?.state?.type != 'ready' } }, { name: 'refreshToken', + type: 'page', + pageName: 'info', label: 'Refresh Token', - type: 'button', icon: ReloadIcon, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=refreshToken`, disabled: (objectData) => { return objectData?.state?.type != 'ready' } @@ -118,11 +131,17 @@ export const Marketplace = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/sales/marketplaces/info?marketplaceId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(MarketplaceInfo) } ], columns: [ diff --git a/src/database/models/Material.js b/src/database/models/Material.js index 1757b85..7f35e6f 100644 --- a/src/database/models/Material.js +++ b/src/database/models/Material.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const MaterialInfo = lazy( + () => import('../../components/Dashboard/Management/Materials/MaterialInfo') +) import MaterialIcon from '../../components/Icons/MaterialIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const Material = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/materials/info?materialId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/materials/info?materialId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/materials/info?materialId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/materials/info?materialId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const Material = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/materials/info?materialId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(MaterialInfo) } ], columns: ['_reference', 'name', 'tags', 'createdAt', 'updatedAt'], diff --git a/src/database/models/NoteType.js b/src/database/models/NoteType.js index a593060..abb7ad8 100644 --- a/src/database/models/NoteType.js +++ b/src/database/models/NoteType.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const NoteTypeInfo = lazy( + () => import('../../components/Dashboard/Management/NoteTypes/NoteTypeInfo') +) import NoteTypeIcon from '../../components/Icons/NoteTypeIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -14,42 +19,49 @@ export const NoteType = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/notetypes/info?noteTypeId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/notetypes/info?noteTypeId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } + } +, { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'finishEdit', label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/management/notetypes/info?noteTypeId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, + ], + pages: [ { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/notetypes/info?noteTypeId=${_id}&action=cancelEdit`, - visible: (objectData) => { - return objectData?._isEditing && objectData?._isEditing == true - } + name: 'info', + content: () => createElement(NoteTypeInfo) } ], columns: ['_reference', 'name', 'color', 'active', 'createdAt', 'updatedAt'], diff --git a/src/database/models/OrderItem.js b/src/database/models/OrderItem.js index 72eab8a..5d65f99 100644 --- a/src/database/models/OrderItem.js +++ b/src/database/models/OrderItem.js @@ -1,9 +1,14 @@ +import { createElement, lazy } from 'react' + +const OrderItemInfo = lazy( + () => import('../../components/Dashboard/Inventory/OrderItems/OrderItemInfo') +) import OrderItemIcon from '../../components/Icons/OrderItemIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' -import BinIcon from '../../components/Icons/BinIcon' import CheckIcon from '../../components/Icons/CheckIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' +import BinIcon from '../../components/Icons/BinIcon' export const OrderItem = { name: 'orderItem', @@ -15,19 +20,19 @@ export const OrderItem = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/inventory/orderitems/info?orderItemId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/inventory/orderitems/info?orderItemId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -37,40 +42,31 @@ export const OrderItem = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/inventory/orderitems/info?orderItemId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true - }, - disabled: (objectData) => { - return objectData?.state?.type != 'draft' } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/orderitems/info?orderItemId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true - }, - disabled: (objectData) => { - return objectData?.state?.type != 'draft' } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/inventory/orderitems/info?orderItemId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -79,6 +75,12 @@ export const OrderItem = { } } ], + pages: [ + { + name: 'info', + content: () => createElement(OrderItemInfo) + } + ], group: [], filters: [ 'name', diff --git a/src/database/models/Part.js b/src/database/models/Part.js index c88600b..7e89a31 100644 --- a/src/database/models/Part.js +++ b/src/database/models/Part.js @@ -1,8 +1,16 @@ +import { createElement, lazy } from 'react' + +const PartInfo = lazy( + () => import('../../components/Dashboard/Management/Parts/PartInfo') +) +const NewPartSku = lazy( + () => import('../../components/Dashboard/Management/PartSkus/NewPartSku') +) import EditIcon from '../../components/Icons/EditIcon' -import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' -import PartIcon from '../../components/Icons/PartIcon' import CheckIcon from '../../components/Icons/CheckIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' +import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' +import PartIcon from '../../components/Icons/PartIcon' import PlusIcon from '../../components/Icons/PlusIcon' export const Part = { @@ -15,39 +23,40 @@ export const Part = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/parts/info?partId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/parts/info?partId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/parts/info?partId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/parts/info?partId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,16 +64,24 @@ export const Part = { { type: 'divider' }, { name: 'newPartSku', + type: 'modal', + modalWidth: 700, label: 'New Part SKU', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/management/parts/info?partId=${_id}&action=newPartSku`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewPartSku, { defaultValues: { part: objectData }, onOk, reset: true }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(PartInfo) + } + ], columns: [ '_reference', 'name', diff --git a/src/database/models/PartSku.js b/src/database/models/PartSku.js index c409c11..3ec88a7 100644 --- a/src/database/models/PartSku.js +++ b/src/database/models/PartSku.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const PartSkuInfo = lazy( + () => import('../../components/Dashboard/Management/PartSkus/PartSkuInfo') +) import PartSkuIcon from '../../components/Icons/PartSkuIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const PartSku = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/partskus/info?partSkuId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/partskus/info?partSkuId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/partskus/info?partSkuId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/partskus/info?partSkuId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const PartSku = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/partskus/info?partSkuId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(PartSkuInfo) } ], columns: [ diff --git a/src/database/models/PartStock.js b/src/database/models/PartStock.js index e66cfb7..ecffb66 100644 --- a/src/database/models/PartStock.js +++ b/src/database/models/PartStock.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const PartStockInfo = lazy( + () => import('../../components/Dashboard/Inventory/PartStocks/PartStockInfo') +) import PartStockIcon from '../../components/Icons/PartStockIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -11,11 +16,18 @@ export const PartStock = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/inventory/partstocks/info?partStockId=${_id}` + icon: InfoCircleIcon + } + ], + pages: [ + { + name: 'info', + content: () => createElement(PartStockInfo) } ], filters: [ diff --git a/src/database/models/Payment.js b/src/database/models/Payment.js index 390dbed..e55d0d9 100644 --- a/src/database/models/Payment.js +++ b/src/database/models/Payment.js @@ -1,3 +1,20 @@ +import { createElement, lazy } from 'react' + +const PaymentInfo = lazy( + () => import('../../components/Dashboard/Finance/Payments/PaymentInfo') +) +const PostPayment = lazy( + () => import('../../components/Dashboard/Finance/Payments/PostPayment') +) +const AuthorisePayment = lazy( + () => import('../../components/Dashboard/Finance/Payments/AuthorisePayment') +) +const DeclinePayment = lazy( + () => import('../../components/Dashboard/Finance/Payments/DeclinePayment') +) +const CancelPayment = lazy( + () => import('../../components/Dashboard/Finance/Payments/CancelPayment') +) import PaymentIcon from '../../components/Icons/PaymentIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -15,19 +32,19 @@ export const Payment = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/finance/payments/info?paymentId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -37,34 +54,31 @@ export const Payment = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -75,60 +89,74 @@ export const Payment = { { type: 'divider' }, { name: 'post', + type: 'modal', + modalWidth: 520, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostPayment, { objectData, onOk }) } }, { name: 'authorise', + type: 'modal', + modalWidth: 520, label: 'Authorise', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=authorise`, disabled: (objectData) => { return objectData?.state?.type != 'posted' }, visible: (objectData) => { return objectData?.state?.type == 'posted' + }, + content: (objectData, { onOk } = {}) => { + return createElement(AuthorisePayment, { objectData, onOk }) } }, { name: 'decline', + type: 'modal', + modalWidth: 520, label: 'Decline', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=decline`, disabled: (objectData) => { return objectData?.state?.type != 'posted' }, visible: (objectData) => { return objectData?.state?.type == 'posted' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeclinePayment, { objectData, onOk }) } }, { name: 'cancel', + type: 'modal', + modalWidth: 520, label: 'Cancel', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/finance/payments/info?paymentId=${_id}&action=cancel`, disabled: (objectData) => { return objectData?.state?.type != 'posted' }, visible: (objectData) => { return objectData?.state?.type == 'posted' + }, + content: (objectData, { onOk } = {}) => { + return createElement(CancelPayment, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(PaymentInfo) + } + ], group: ['vendor', 'client', 'invoice'], filters: [ 'vendor', diff --git a/src/database/models/Printer.js b/src/database/models/Printer.js index 1ab15b7..58abab9 100644 --- a/src/database/models/Printer.js +++ b/src/database/models/Printer.js @@ -1,3 +1,17 @@ +import { createElement, lazy } from 'react' + +const PrinterInfo = lazy( + () => import('../../components/Dashboard/Production/Printers/PrinterInfo') +) +const NewPrinterProfile = lazy( + () => import('../../components/Dashboard/Production/PrinterProfiles/NewPrinterProfile') +) +const LoadFilamentStock = lazy( + () => import('../../components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock') +) +const UnloadFilamentStock = lazy( + () => import('../../components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock') +) import PrinterIcon from '../../components/Icons/PrinterIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import ReloadIcon from '../../components/Icons/ReloadIcon' @@ -22,13 +36,13 @@ export const Printer = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/production/printers/info?printerId=${_id}` + icon: InfoCircleIcon }, - { name: 'control', label: 'Control', @@ -38,31 +52,31 @@ export const Printer = { }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/production/printers/info?printerId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/production/printers/info?printerId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/production/printers/info?printerId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -70,11 +84,13 @@ export const Printer = { { type: 'divider' }, { name: 'newPrinterProfile', + type: 'modal', + modalWidth: 700, label: 'New Printer Profile', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/production/printers/info?printerId=${_id}&action=newPrinterProfile` + content: (objectData, { onOk } = {}) => { + return createElement(NewPrinterProfile, { defaultValues: { printer: objectData }, onOk, reset: true }) + } }, { type: 'divider' }, { @@ -188,35 +204,57 @@ export const Printer = { children: [ { name: 'loadFilamentStock', + type: 'modal', + modalWidth: 700, label: 'Load Filament Stock', icon: FilamentStockIcon, - url: (_id) => - `/dashboard/production/printers/control?printerId=${_id}&action=loadFilamentStock`, disabled: (objectData) => { return ( objectData?.state?.type == 'printing' || objectData?.state?.type == 'error' || objectData?.currentFilamentStock != null ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(LoadFilamentStock, { + printer: objectData, + onOk, + reset: false, + filamentStockLoaded: false + }) } }, { name: 'unloadFilamentStock', + type: 'modal', + modalWidth: 700, label: 'Unload Filament Stock', icon: FilamentStockIcon, - url: (_id) => - `/dashboard/production/printers/control?printerId=${_id}&action=unloadFilamentStock`, disabled: (objectData) => { return ( objectData?.state?.type == 'printing' || objectData?.state?.type == 'error' || objectData?.currentFilamentStock == null ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(UnloadFilamentStock, { + printer: objectData, + onOk, + reset: false, + filamentStockLoaded: false + }) } } ] } ], + pages: [ + { + name: 'info', + content: () => createElement(PrinterInfo) + } + ], columns: [ '_reference', 'name', diff --git a/src/database/models/PrinterProfile.js b/src/database/models/PrinterProfile.js index d5c106b..3319fe1 100644 --- a/src/database/models/PrinterProfile.js +++ b/src/database/models/PrinterProfile.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const PrinterProfileInfo = lazy( + () => import('../../components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo') +) import PrinterProfileIcon from '../../components/Icons/PrinterProfileIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -280,47 +285,57 @@ export const PrinterProfile = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/production/printerprofiles/info?printerProfileId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/production/printerprofiles/info?printerProfileId=${_id}&action=edit`, visible: (objectData) => !objectData?._isEditing }, - { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/production/printerprofiles/info?printerProfileId=${_id}&action=finishEdit`, - visible: (objectData) => objectData?._isEditing === true - }, { name: 'cancelEdit', label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/production/printerprofiles/info?printerProfileId=${_id}&action=cancelEdit`, - visible: (objectData) => objectData?._isEditing === true + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } + }, + { + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', row: true, icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/production/printerprofiles/info?printerProfileId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(PrinterProfileInfo) } ], columns: [ diff --git a/src/database/models/Product.js b/src/database/models/Product.js index cd9f584..8c86f19 100644 --- a/src/database/models/Product.js +++ b/src/database/models/Product.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const ProductInfo = lazy( + () => import('../../components/Dashboard/Management/Products/ProductInfo') +) +const NewProductSku = lazy( + () => import('../../components/Dashboard/Management/ProductSkus/NewProductSku') +) import ProductIcon from '../../components/Icons/ProductIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +23,40 @@ export const Product = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/products/info?productId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/products/info?productId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/products/info?productId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/products/info?productId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -57,16 +66,24 @@ export const Product = { }, { name: 'newProductSku', + type: 'modal', + modalWidth: 700, label: 'New Product SKU', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/management/products/info?productId=${_id}&action=newProductSku`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewProductSku, { defaultValues: { product: objectData }, onOk, reset: true }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(ProductInfo) + } + ], columns: [ '_reference', 'name', diff --git a/src/database/models/ProductCategory.js b/src/database/models/ProductCategory.js index 21aaa60..069623a 100644 --- a/src/database/models/ProductCategory.js +++ b/src/database/models/ProductCategory.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const ProductCategoryInfo = lazy( + () => import('../../components/Dashboard/Management/ProductCategories/ProductCategoryInfo') +) import ProductCategoryIcon from '../../components/Icons/ProductCategoryIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -16,40 +21,40 @@ export const ProductCategory = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/management/productcategories/info?productCategoryId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/productcategories/info?productCategoryId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/productcategories/info?productCategoryId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/productcategories/info?productCategoryId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -57,11 +62,17 @@ export const ProductCategory = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/productcategories/info?productCategoryId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ProductCategoryInfo) } ], columns: ['_reference', 'name', 'createdAt', 'updatedAt'], diff --git a/src/database/models/ProductSku.js b/src/database/models/ProductSku.js index fba329b..f9cf349 100644 --- a/src/database/models/ProductSku.js +++ b/src/database/models/ProductSku.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const ProductSkuInfo = lazy( + () => import('../../components/Dashboard/Management/ProductSkus/ProductSkuInfo') +) import ProductSkuIcon from '../../components/Icons/ProductSkuIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const ProductSku = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/productskus/info?productSkuId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/productskus/info?productSkuId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/productskus/info?productSkuId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/productskus/info?productSkuId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const ProductSku = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/productskus/info?productSkuId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ProductSkuInfo) } ], columns: [ diff --git a/src/database/models/ProductStock.js b/src/database/models/ProductStock.js index 7c14299..088d459 100644 --- a/src/database/models/ProductStock.js +++ b/src/database/models/ProductStock.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const ProductStockInfo = lazy( + () => import('../../components/Dashboard/Inventory/ProductStocks/ProductStockInfo') +) +const PostProductStock = lazy( + () => import('../../components/Dashboard/Inventory/ProductStocks/PostProductStock') +) import ProductStockIcon from '../../components/Icons/ProductStockIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,20 +23,19 @@ export const ProductStock = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -38,34 +45,31 @@ export const ProductStock = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -76,16 +80,24 @@ export const ProductStock = { { type: 'divider' }, { name: 'post', + type: 'modal', + modalWidth: 520, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/productstocks/info?productStockId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostProductStock, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(ProductStockInfo) + } + ], filters: [ 'productSku', 'state', diff --git a/src/database/models/PurchaseOrder.js b/src/database/models/PurchaseOrder.js index 3986326..fdd9349 100644 --- a/src/database/models/PurchaseOrder.js +++ b/src/database/models/PurchaseOrder.js @@ -1,3 +1,26 @@ +import { createElement, lazy } from 'react' + +const PurchaseOrderInfo = lazy( + () => import('../../components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo') +) +const NewOrderItem = lazy( + () => import('../../components/Dashboard/Inventory/OrderItems/NewOrderItem') +) +const NewShipment = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/NewShipment') +) +const NewInvoice = lazy( + () => import('../../components/Dashboard/Finance/Invoices/NewInvoice') +) +const PostPurchaseOrder = lazy( + () => import('../../components/Dashboard/Inventory/PurchaseOrders/PostPurchaseOrder') +) +const AcknowledgePurchaseOrder = lazy( + () => import('../../components/Dashboard/Inventory/PurchaseOrders/AcknowledgePurchaseOrder') +) +const CancelPurchaseOrder = lazy( + () => import('../../components/Dashboard/Inventory/PurchaseOrders/CancelPurchaseOrder') +) import PurchaseOrderIcon from '../../components/Icons/PurchaseOrderIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import PlusIcon from '../../components/Icons/PlusIcon' @@ -16,20 +39,19 @@ export const PurchaseOrder = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -39,34 +61,31 @@ export const PurchaseOrder = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -76,34 +95,49 @@ export const PurchaseOrder = { }, { type: 'divider' }, { - name: 'New Order Item', + name: 'newOrderItem', + type: 'modal', + modalWidth: 700, label: 'New Order Item', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=newOrderItem`, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewOrderItem, { + defaultValues: { + order: { _id: objectData._id }, + orderType: 'purchaseOrder', + syncAmount: 'itemCost' + }, + onOk, + reset: true + }) } }, { - name: 'New Shipment', + name: 'newShipment', + type: 'modal', + modalWidth: 700, label: 'New Shipment', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=newShipment`, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewShipment, { + defaultValues: { orderType: 'purchaseOrder', order: { _id: objectData._id } }, + onOk, + reset: true + }) } }, { - name: 'New Invoice', + name: 'newInvoice', + type: 'modal', + modalWidth: 700, label: 'New Invoice', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=newInvoice`, disabled: (objectData) => { const allowedStates = [ 'received', @@ -112,6 +146,13 @@ export const PurchaseOrder = { 'partiallyShipped' ] return !allowedStates.includes(objectData?.state?.type) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewInvoice, { + defaultValues: { orderType: 'purchaseOrder', order: objectData }, + onOk, + reset: true + }) } }, { @@ -119,30 +160,33 @@ export const PurchaseOrder = { }, { name: 'post', + type: 'modal', + modalWidth: 520, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostPurchaseOrder, { objectData, onOk }) } }, { name: 'acknowledge', + type: 'modal', + modalWidth: 520, label: 'Acknowledge', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=acknowledge`, visible: (objectData) => { return objectData?.state?.type == 'sent' + }, + content: (objectData, { onOk } = {}) => { + return createElement(AcknowledgePurchaseOrder, { objectData, onOk }) } }, { name: 'complete', label: 'Complete', - type: 'button', icon: CheckIcon, url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=complete`, @@ -155,12 +199,11 @@ export const PurchaseOrder = { }, { name: 'cancel', + type: 'modal', + modalWidth: 520, label: 'Cancel', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/inventory/purchaseorders/info?purchaseOrderId=${_id}&action=cancel`, disabled: (objectData) => { return objectData?.state?.type == 'cancelled' }, @@ -170,9 +213,18 @@ export const PurchaseOrder = { objectData?.state?.type != 'completed' && objectData?.state?.type != 'received' ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(CancelPurchaseOrder, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(PurchaseOrderInfo) + } + ], group: ['vendor'], filters: [ 'vendor', diff --git a/src/database/models/SalesOrder.js b/src/database/models/SalesOrder.js index e322f46..d6e5563 100644 --- a/src/database/models/SalesOrder.js +++ b/src/database/models/SalesOrder.js @@ -1,3 +1,26 @@ +import { createElement, lazy } from 'react' + +const SalesOrderInfo = lazy( + () => import('../../components/Dashboard/Sales/SalesOrders/SalesOrderInfo') +) +const NewOrderItem = lazy( + () => import('../../components/Dashboard/Inventory/OrderItems/NewOrderItem') +) +const NewShipment = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/NewShipment') +) +const NewInvoice = lazy( + () => import('../../components/Dashboard/Finance/Invoices/NewInvoice') +) +const PostSalesOrder = lazy( + () => import('../../components/Dashboard/Sales/SalesOrders/PostSalesOrder') +) +const ConfirmSalesOrder = lazy( + () => import('../../components/Dashboard/Sales/SalesOrders/ConfirmSalesOrder') +) +const CancelSalesOrder = lazy( + () => import('../../components/Dashboard/Sales/SalesOrders/CancelSalesOrder') +) import SalesOrderIcon from '../../components/Icons/SalesOrderIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import PlusIcon from '../../components/Icons/PlusIcon' @@ -16,19 +39,19 @@ export const SalesOrder = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/sales/salesorders/info?salesOrderId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -38,34 +61,31 @@ export const SalesOrder = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -75,34 +95,54 @@ export const SalesOrder = { }, { type: 'divider' }, { - name: 'New Order Item', + name: 'newOrderItem', + type: 'modal', + modalWidth: 700, label: 'New Order Item', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=newOrderItem`, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewOrderItem, { + defaultValues: { + order: { _id: objectData._id }, + orderType: 'salesOrder', + syncAmount: 'itemPrice' + }, + onOk, + reset: true + }) } }, { - name: 'New Shipment', + name: 'newShipment', + type: 'modal', + modalWidth: 700, + modalCentered: false, label: 'New Shipment', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=newShipment`, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewShipment, { + defaultValues: { + orderType: 'salesOrder', + order: { _id: objectData._id } + }, + onOk, + reset: true + }) } }, { - name: 'New Invoice', + name: 'newInvoice', + type: 'modal', + modalWidth: 700, + modalCentered: false, label: 'New Invoice', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=newInvoice`, disabled: (objectData) => { const allowedStates = [ 'delivered', @@ -113,38 +153,50 @@ export const SalesOrder = { 'partiallyShipped' ] return !allowedStates.includes(objectData?.state?.type) + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewInvoice, { + defaultValues: { orderType: 'salesOrder', order: objectData }, + onOk, + reset: true + }) } }, { type: 'divider' }, { name: 'post', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostSalesOrder, { objectData, onOk }) } }, { name: 'confirm', + type: 'modal', + modalWidth: 520, label: 'Confirm', - type: 'button', + modalCentered: true, icon: CheckIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=confirm`, visible: (objectData) => { return objectData?.state?.type == 'sent' + }, + content: (objectData, { onOk } = {}) => { + return createElement(ConfirmSalesOrder, { objectData, onOk }) } }, { name: 'complete', + type: 'page', + pageName: 'info', label: 'Complete', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=complete`, disabled: (objectData) => { return objectData?.state?.type != 'delivered' }, @@ -154,12 +206,11 @@ export const SalesOrder = { }, { name: 'cancel', + type: 'modal', + modalWidth: 520, label: 'Cancel', - type: 'button', icon: XMarkIcon, danger: true, - url: (_id) => - `/dashboard/sales/salesorders/info?salesOrderId=${_id}&action=cancel`, disabled: (objectData) => { return objectData?.state?.type == 'cancelled' }, @@ -169,9 +220,18 @@ export const SalesOrder = { objectData?.state?.type != 'completed' && objectData?.state?.type != 'delivered' ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(CancelSalesOrder, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(SalesOrderInfo) + } + ], group: ['client'], filters: [ 'client', diff --git a/src/database/models/Shipment.js b/src/database/models/Shipment.js index d381f9c..a7e1a23 100644 --- a/src/database/models/Shipment.js +++ b/src/database/models/Shipment.js @@ -1,3 +1,17 @@ +import { createElement, lazy } from 'react' + +const ShipmentInfo = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/ShipmentInfo') +) +const ShipShipment = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/ShipShipment') +) +const ReceiveShipment = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/ReceiveShipment') +) +const CancelShipment = lazy( + () => import('../../components/Dashboard/Inventory/Shipments/CancelShipment') +) import ShipmentIcon from '../../components/Icons/ShipmentIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,19 +29,19 @@ export const Shipment = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/inventory/shipments/info?shipmentId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -37,40 +51,31 @@ export const Shipment = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true - }, - disabled: (objectData) => { - return objectData?.state?.type != 'draft' } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true - }, - disabled: (objectData) => { - return objectData?.state?.type != 'draft' } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -81,11 +86,10 @@ export const Shipment = { { type: 'divider' }, { name: 'ship', + type: 'modal', + modalWidth: 520, label: 'Ship', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=ship`, disabled: (objectData) => { return objectData?.state?.type != 'planned' }, @@ -94,15 +98,17 @@ export const Shipment = { objectData?.state?.type == 'planned' || objectData?.state?.type == 'draft' ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(ShipShipment, { objectData, onOk }) } }, { name: 'receive', + type: 'modal', + modalWidth: 520, label: 'Receive', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/shipments/info?shipmentId=${_id}&action=receive`, disabled: (objectData) => { return objectData?.state?.type != 'shipped' }, @@ -111,7 +117,27 @@ export const Shipment = { objectData?.state?.type == 'shipped' || objectData?.state?.type == 'delivered' ) + }, + content: (objectData, { onOk } = {}) => { + return createElement(ReceiveShipment, { objectData, onOk }) } + }, + { + name: 'cancel', + type: 'modal', + modalWidth: 520, + label: 'Cancel', + icon: CheckIcon, + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(CancelShipment, { objectData, onOk }) + } + } + ], + pages: [ + { + name: 'info', + content: () => createElement(ShipmentInfo) } ], group: [], diff --git a/src/database/models/StockAudit.js b/src/database/models/StockAudit.js index 614fab4..4640d46 100644 --- a/src/database/models/StockAudit.js +++ b/src/database/models/StockAudit.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const StockAuditInfo = lazy( + () => import('../../components/Dashboard/Inventory/StockAudits/StockAuditInfo') +) import StockAuditIcon from '../../components/Icons/StockAuditIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -11,11 +16,18 @@ export const StockAudit = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/inventory/stockaudits/info?stockAuditId=${_id}` + icon: InfoCircleIcon + } + ], + pages: [ + { + name: 'info', + content: () => createElement(StockAuditInfo) } ], columns: ['_reference', 'state', 'createdAt', 'updatedAt'], diff --git a/src/database/models/StockLocation.js b/src/database/models/StockLocation.js index 06674f8..d44d38d 100644 --- a/src/database/models/StockLocation.js +++ b/src/database/models/StockLocation.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const StockLocationInfo = lazy( + () => import('../../components/Dashboard/Inventory/StockLocations/StockLocationInfo') +) import StockLocationIcon from '../../components/Icons/StockLocationIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -11,12 +16,18 @@ export const StockLocation = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/inventory/stocklocations/info?stockLocationId=${_id}` + icon: InfoCircleIcon + } + ], + pages: [ + { + name: 'info', + content: () => createElement(StockLocationInfo) } ], filters: ['name','createdAt','updatedAt','_reference'], diff --git a/src/database/models/StockTransfer.js b/src/database/models/StockTransfer.js index 328bd02..230cf97 100644 --- a/src/database/models/StockTransfer.js +++ b/src/database/models/StockTransfer.js @@ -1,3 +1,11 @@ +import { createElement, lazy } from 'react' + +const StockTransferInfo = lazy( + () => import('../../components/Dashboard/Inventory/StockTransfers/StockTransferInfo') +) +const PostStockTransfer = lazy( + () => import('../../components/Dashboard/Inventory/StockTransfers/PostStockTransfer') +) import StockTransferIcon from '../../components/Icons/StockTransferIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,20 +23,19 @@ export const StockTransfer = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', - type: 'button', icon: EditIcon, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -38,34 +45,31 @@ export const StockTransfer = { }, { name: 'cancelEdit', - label: 'Cancel Edit', - type: 'button', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', icon: XMarkIcon, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}&action=cancelEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'finishEdit', - label: 'Finish Edit', - type: 'button', + label: 'Save Edits', + type: 'page', + pageName: 'info', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}&action=finishEdit`, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', - type: 'button', icon: BinIcon, danger: true, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}&action=delete`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) }, @@ -76,16 +80,24 @@ export const StockTransfer = { { type: 'divider' }, { name: 'post', + type: 'modal', + modalWidth: 520, label: 'Post', - type: 'button', icon: CheckIcon, - url: (_id) => - `/dashboard/inventory/stocktransfers/info?stockTransferId=${_id}&action=post`, visible: (objectData) => { return objectData?.state?.type == 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(PostStockTransfer, { objectData, onOk }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(StockTransferInfo) + } + ], filters: [ 'state', 'state.type', diff --git a/src/database/models/SubJob.js b/src/database/models/SubJob.js index 07440f1..45e61a8 100644 --- a/src/database/models/SubJob.js +++ b/src/database/models/SubJob.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const SubJobInfo = lazy( + () => import('../../components/Dashboard/Production/SubJobs/SubJobInfo') +) import SubJobIcon from '../../components/Icons/SubJobIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import XMarkIcon from '../../components/Icons/XMarkIcon' @@ -13,24 +18,31 @@ export const SubJob = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/production/subjobs/info?subJobId=${_id}` + icon: InfoCircleIcon }, { name: 'cancel', + type: 'page', + pageName: 'info', label: 'Cancel Sub Job', row: true, icon: XMarkIcon, - url: (_id) => - `/dashboard/production/subjobs/info?subJobId=${_id}&action=cancel`, disabled: (objectData) => { return objectData?.state?.type !== 'queued' } } ], + pages: [ + { + name: 'info', + content: () => createElement(SubJobInfo) + } + ], columns: [ '_reference', 'printer', diff --git a/src/database/models/TaxRate.js b/src/database/models/TaxRate.js index eebc8bb..38f0656 100644 --- a/src/database/models/TaxRate.js +++ b/src/database/models/TaxRate.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const TaxRateInfo = lazy( + () => import('../../components/Dashboard/Management/TaxRates/TaxRateInfo') +) import TaxRateIcon from '../../components/Icons/TaxRateIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const TaxRate = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/taxrates/info?taxRateId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/taxrates/info?taxRateId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/taxrates/info?taxRateId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/taxrates/info?taxRateId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const TaxRate = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/taxrates/info?taxRateId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(TaxRateInfo) } ], columns: [ diff --git a/src/database/models/TaxRecord.js b/src/database/models/TaxRecord.js index 4027923..3eea782 100644 --- a/src/database/models/TaxRecord.js +++ b/src/database/models/TaxRecord.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const TaxRecordInfo = lazy( + () => import('../../components/Dashboard/Finance/TaxRecords/TaxRecordInfo') +) import TaxRecordIcon from '../../components/Icons/TaxRecordIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const TaxRecord = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/finance/taxrecords/info?taxRecordId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/finance/taxrecords/info?taxRecordId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/finance/taxrecords/info?taxRecordId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/finance/taxrecords/info?taxRecordId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const TaxRecord = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/finance/taxrecords/info?taxRecordId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(TaxRecordInfo) } ], columns: [ diff --git a/src/database/models/User.js b/src/database/models/User.js index 39f7a01..fe6e4d3 100644 --- a/src/database/models/User.js +++ b/src/database/models/User.js @@ -1,6 +1,16 @@ +import { createElement, lazy } from 'react' + +const UserInfo = lazy( + () => import('../../components/Dashboard/Management/Users/UserInfo') +) +const NewAppPassword = lazy( + () => import('../../components/Dashboard/Management/AppPasswords/NewAppPassword') +) import PersonIcon from '../../components/Icons/PersonIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' +import CheckIcon from '../../components/Icons/CheckIcon' +import XMarkIcon from '../../components/Icons/XMarkIcon' import PlusIcon from '../../components/Icons/PlusIcon' export const User = { @@ -13,31 +23,64 @@ export const User = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/users/info?userId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => `/dashboard/management/users/info?userId=${_id}&action=edit` + visible: (objectData) => { + return !(objectData?._isEditing && objectData?._isEditing == true) + } + }, + { + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } + }, + { + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, + visible: (objectData) => { + return objectData?._isEditing && objectData?._isEditing == true + } }, { name: 'newAppPassword', + type: 'modal', + modalWidth: 680, label: 'New App Password', - type: 'button', icon: PlusIcon, - url: (_id) => - `/dashboard/management/users/info?userId=${_id}&action=newAppPassword`, disabled: (objectData) => { return objectData?._user?._id != objectData?._id + }, + content: (objectData, { onOk } = {}) => { + return createElement(NewAppPassword, { defaultValues: { user: objectData }, onOk, reset: true }) } } ], + pages: [ + { + name: 'info', + content: () => createElement(UserInfo) + } + ], columns: ['_reference', 'name', 'username', 'email', 'role', 'createdAt'], filters: [ 'name', diff --git a/src/database/models/Vendor.js b/src/database/models/Vendor.js index 5975e36..3475eee 100644 --- a/src/database/models/Vendor.js +++ b/src/database/models/Vendor.js @@ -1,3 +1,8 @@ +import { createElement, lazy } from 'react' + +const VendorInfo = lazy( + () => import('../../components/Dashboard/Management/Vendors/VendorInfo') +) import VendorIcon from '../../components/Icons/VendorIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' import EditIcon from '../../components/Icons/EditIcon' @@ -15,39 +20,40 @@ export const Vendor = { actions: [ { name: 'info', + type: 'page', + pageName: 'info', label: 'Info', default: true, row: true, - icon: InfoCircleIcon, - url: (_id) => `/dashboard/management/vendors/info?vendorId=${_id}` + icon: InfoCircleIcon }, { name: 'edit', + type: 'page', + pageName: 'info', label: 'Edit', row: true, icon: EditIcon, - url: (_id) => - `/dashboard/management/vendors/info?vendorId=${_id}&action=edit`, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) } }, { - name: 'finishEdit', - label: 'Save Edits', - icon: CheckIcon, - url: (_id) => - `/dashboard/management/vendors/info?vendorId=${_id}&action=finishEdit`, + name: 'cancelEdit', + label: 'Cancel Edits', + type: 'page', + pageName: 'info', + icon: XMarkIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } }, { - name: 'cancelEdit', - label: 'Cancel Edits', - icon: XMarkIcon, - url: (_id) => - `/dashboard/management/vendors/info?vendorId=${_id}&action=cancelEdit`, + name: 'finishEdit', + label: 'Save Edits', + type: 'page', + pageName: 'info', + icon: CheckIcon, visible: (objectData) => { return objectData?._isEditing && objectData?._isEditing == true } @@ -55,11 +61,17 @@ export const Vendor = { { type: 'divider' }, { name: 'delete', + type: 'page', + pageName: 'info', label: 'Delete', icon: BinIcon, - danger: true, - url: (_id) => - `/dashboard/management/vendors/info?vendorId=${_id}&action=delete` + danger: true + } + ], + pages: [ + { + name: 'info', + content: () => createElement(VendorInfo) } ], columns: [ diff --git a/src/routes/FinanceRoutes.jsx b/src/routes/FinanceRoutes.jsx index 675e301..125176a 100644 --- a/src/routes/FinanceRoutes.jsx +++ b/src/routes/FinanceRoutes.jsx @@ -14,24 +14,15 @@ const TaxRecordsInfoRedirect = () => { const Invoices = lazy( () => import('../components/Dashboard/Finance/Invoices.jsx') ) -const InvoiceInfo = lazy( - () => import('../components/Dashboard/Finance/Invoices/InvoiceInfo.jsx') -) const Payments = lazy( () => import('../components/Dashboard/Finance/Payments.jsx') ) -const PaymentInfo = lazy( - () => import('../components/Dashboard/Finance/Payments/PaymentInfo.jsx') -) const FinanceOverview = lazy( () => import('../components/Dashboard/Finance/FinanceOverview.jsx') ) const TaxRecords = lazy( () => import('../components/Dashboard/Finance/TaxRecords.jsx') ) -const TaxRecordInfo = lazy( - () => import('../components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx') -) const FinanceRoutes = [ } />, } />, - } - />, } />, - } - />, } />, - } - />, import('../components/Dashboard/Inventory/FilamentStocks.jsx') ) -const FilamentStockInfo = lazy( - () => - import('../components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx') -) const PartStocks = lazy( () => import('../components/Dashboard/Inventory/PartStocks.jsx') ) const ProductStocks = lazy( () => import('../components/Dashboard/Inventory/ProductStocks.jsx') ) -const ProductStockInfo = lazy( - () => - import( - '../components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx' - ) -) -const PartStockInfo = lazy( - () => import('../components/Dashboard/Inventory/PartStocks/PartStockInfo.jsx') -) const StockEvents = lazy( () => import('../components/Dashboard/Inventory/StockEvents.jsx') ) const StockAudits = lazy( () => import('../components/Dashboard/Inventory/StockAudits.jsx') ) -const StockAuditInfo = lazy( - () => - import('../components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx') -) const PurchaseOrders = lazy( () => import('../components/Dashboard/Inventory/PurchaseOrders.jsx') ) -const PurchaseOrderInfo = lazy( - () => - import('../components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx') -) const OrderItems = lazy( () => import('../components/Dashboard/Inventory/OrderItems.jsx') ) -const OrderItemInfo = lazy( - () => import('../components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx') -) const Shipments = lazy( () => import('../components/Dashboard/Inventory/Shipments.jsx') ) -const ShipmentInfo = lazy( - () => import('../components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx') -) const InventoryOverview = lazy( () => import('../components/Dashboard/Inventory/InventoryOverview.jsx') ) const StockLocations = lazy( () => import('../components/Dashboard/Inventory/StockLocations.jsx') ) -const StockLocationInfo = lazy( - () => - import('../components/Dashboard/Inventory/StockLocations/StockLocationInfo.jsx') -) const StockTransfers = lazy( () => import('../components/Dashboard/Inventory/StockTransfers.jsx') ) -const StockTransferInfo = lazy( - () => - import( - '../components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx' - ) -) const InventoryRoutes = [ } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, - } />, - } - /> + } /> ] export default InventoryRoutes diff --git a/src/routes/ManagementRoutes.jsx b/src/routes/ManagementRoutes.jsx index c26bfbc..e024f85 100644 --- a/src/routes/ManagementRoutes.jsx +++ b/src/routes/ManagementRoutes.jsx @@ -4,69 +4,32 @@ import { Route } from 'react-router-dom' const Filaments = lazy( () => import('../components/Dashboard/Management/Filaments') ) -const FilamentInfo = lazy( - () => import('../components/Dashboard/Management/Filaments/FilamentInfo.jsx') -) const FilamentSkus = lazy( () => import('../components/Dashboard/Management/FilamentSkus.jsx') ) -const FilamentSkuInfo = lazy( - () => - import('../components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx') -) const Parts = lazy(() => import('../components/Dashboard/Management/Parts.jsx')) -const PartInfo = lazy( - () => import('../components/Dashboard/Management/Parts/PartInfo.jsx') -) const PartSkus = lazy( () => import('../components/Dashboard/Management/PartSkus.jsx') ) -const PartSkuInfo = lazy( - () => import('../components/Dashboard/Management/PartSkus/PartSkuInfo.jsx') -) const Products = lazy( () => import('../components/Dashboard/Management/Products.jsx') ) -const ProductInfo = lazy( - () => import('../components/Dashboard/Management/Products/ProductInfo.jsx') -) const ProductCategories = lazy( () => import('../components/Dashboard/Management/ProductCategories.jsx') ) -const ProductCategoryInfo = lazy( - () => - import('../components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx') -) const ProductSkus = lazy( () => import('../components/Dashboard/Management/ProductSkus.jsx') ) -const ProductSkuInfo = lazy( - () => - import('../components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx') -) const Vendors = lazy(() => import('../components/Dashboard/Management/Vendors')) -const VendorInfo = lazy( - () => import('../components/Dashboard/Management/Vendors/VendorInfo') -) const Materials = lazy( () => import('../components/Dashboard/Management/Materials') ) -const MaterialInfo = lazy( - () => import('../components/Dashboard/Management/Materials/MaterialInfo.jsx') -) const Couriers = lazy( () => import('../components/Dashboard/Management/Couriers') ) -const CourierInfo = lazy( - () => import('../components/Dashboard/Management/Couriers/CourierInfo.jsx') -) const CourierServices = lazy( () => import('../components/Dashboard/Management/CourierServices') ) -const CourierServiceInfo = lazy( - () => - import('../components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx') -) const Settings = lazy( () => import('../components/Dashboard/Management/Settings') ) @@ -76,243 +39,103 @@ const AuditLogs = lazy( const NoteTypes = lazy( () => import('../components/Dashboard/Management/NoteTypes.jsx') ) -const NoteTypeInfo = lazy( - () => import('../components/Dashboard/Management/NoteTypes/NoteTypeInfo.jsx') -) const NoteInfo = lazy( () => import('../components/Dashboard/Management/Notes/NoteInfo.jsx') ) const Users = lazy(() => import('../components/Dashboard/Management/Users.jsx')) -const UserInfo = lazy( - () => import('../components/Dashboard/Management/Users/UserInfo.jsx') -) const AppPasswords = lazy( () => import('../components/Dashboard/Management/AppPasswords.jsx') ) -const AppPasswordInfo = lazy( - () => - import('../components/Dashboard/Management/AppPasswords/AppPasswordInfo.jsx') -) const Hosts = lazy(() => import('../components/Dashboard/Management/Hosts.jsx')) -const HostInfo = lazy( - () => import('../components/Dashboard/Management/Hosts/HostInfo.jsx') -) const DocumentSizes = lazy( () => import('../components/Dashboard/Management/DocumentSizes.jsx') ) -const DocumentSizeInfo = lazy( - () => - import('../components/Dashboard/Management/DocumentSizes/DocumentSizeInfo.jsx') -) const DocumentTemplates = lazy( () => import('../components/Dashboard/Management/DocumentTemplates.jsx') ) -const DocumentTemplateInfo = lazy( - () => - import('../components/Dashboard/Management/DocumentTemplates/DocumentTemplateInfo.jsx') -) const DocumentPrinters = lazy( () => import('../components/Dashboard/Management/DocumentPrinters.jsx') ) -const DocumentPrinterInfo = lazy( - () => - import('../components/Dashboard/Management/DocumentPrinters/DocumentPrinterInfo.jsx') -) const DocumentJobs = lazy( () => import('../components/Dashboard/Management/DocumentJobs.jsx') ) -const DocumentJobInfo = lazy( - () => - import('../components/Dashboard/Management/DocumentJobs/DocumentJobInfo.jsx') -) const DocumentTemplateDesign = lazy( () => import('../components/Dashboard/Management/DocumentTemplates/DocumentTemplateDesign.jsx') ) const Files = lazy(() => import('../components/Dashboard/Management/Files.jsx')) -const FileInfo = lazy( - () => import('../components/Dashboard/Management/Files/FileInfo.jsx') -) const TaxRates = lazy( () => import('../components/Dashboard/Management/TaxRates.jsx') ) -const TaxRateInfo = lazy( - () => import('../components/Dashboard/Management/TaxRates/TaxRateInfo.jsx') -) const About = lazy(() => import('../components/Dashboard/Management/About.jsx')) const ManagementRoutes = [ } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, } />, - } - />, - } - />, - } - />, + } />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } - />, } />, - } />, } />, - } - />, } />, } />, } />, - } />, - } - /> + } /> ] export default ManagementRoutes diff --git a/src/routes/ProductionRoutes.jsx b/src/routes/ProductionRoutes.jsx index 68d366e..611e1f0 100644 --- a/src/routes/ProductionRoutes.jsx +++ b/src/routes/ProductionRoutes.jsx @@ -10,40 +10,19 @@ const Printers = lazy( const ControlPrinter = lazy( () => import('../components/Dashboard/Production/Printers/ControlPrinter.jsx') ) -const PrinterInfo = lazy( - () => import('../components/Dashboard/Production/Printers/PrinterInfo.jsx') -) const PrinterProfiles = lazy( () => import('../components/Dashboard/Production/PrinterProfiles.jsx') ) -const PrinterProfileInfo = lazy( - () => - import('../components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx') -) const FilamentProfiles = lazy( () => import('../components/Dashboard/Production/FilamentProfiles.jsx') ) -const FilamentProfileInfo = lazy( - () => - import('../components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx') -) const Jobs = lazy(() => import('../components/Dashboard/Production/Jobs.jsx')) -const JobInfo = lazy( - () => import('../components/Dashboard/Production/Jobs/JobInfo.jsx') -) const SubJobs = lazy( () => import('../components/Dashboard/Production/SubJobs.jsx') ) -const SubJobInfo = lazy( - () => import('../components/Dashboard/Production/SubJobs/SubJobInfo.jsx') -) const GCodeFiles = lazy( () => import('../components/Dashboard/Production/GCodeFiles') ) -const GCodeFileInfo = lazy( - () => - import('../components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx') -) const GCodeFilePreview = lazy( () => import('../components/Dashboard/Production/GCodeFiles/GCodeFilePreview.jsx') @@ -61,49 +40,23 @@ const ProductionRoutes = [ path='production/printers/control' element={} />, - } - />, } />, - } - />, } />, - } - />, } />, } />, - } - />, - } />, } />, - } - />, import('../components/Dashboard/Sales/Clients.jsx')) -const ClientInfo = lazy( - () => import('../components/Dashboard/Sales/Clients/ClientInfo.jsx') -) const SalesOrders = lazy( () => import('../components/Dashboard/Sales/SalesOrders.jsx') ) -const SalesOrderInfo = lazy( - () => import('../components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx') -) const SalesOverview = lazy( () => import('../components/Dashboard/Sales/SalesOverview.jsx') ) const Marketplaces = lazy( () => import('../components/Dashboard/Sales/Marketplaces.jsx') ) -const MarketplaceInfo = lazy( - () => import('../components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx') -) const Listings = lazy( () => import('../components/Dashboard/Sales/Listings.jsx') ) -const ListingInfo = lazy( - () => import('../components/Dashboard/Sales/Listings/ListingInfo.jsx') -) -const ListingVarientInfo = lazy( - () => - import('../components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx') -) const SalesRoutes = [ } />, } />, - } - />, } />, - } - />, } />, - } - />, - } />, - } - />, - } - /> + } /> ] export default SalesRoutes