From 43464f8054d3ac5c76fdfbd9fc84a9a83d945b22 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sat, 22 Aug 2026 21:06:32 +0100 Subject: [PATCH] Refactor Delete Functionality Across Multiple Components - Removed the delete action from various components including InvoiceInfo, PaymentInfo, and others to streamline functionality. - Introduced a new DeleteObject component to handle deletion logic in a centralized manner, enhancing code maintainability. - Updated models to utilize the new DeleteObject component for consistent deletion handling across the application. - Simplified ObjectForm by eliminating the previous delete modal, improving component structure and clarity. --- .../Finance/Invoices/InvoiceInfo.jsx | 4 - .../Finance/Payments/PaymentInfo.jsx | 4 - .../Finance/TaxRecords/TaxRecordInfo.jsx | 4 - .../Inventory/OrderItems/OrderItemInfo.jsx | 4 - .../ProductStocks/ProductStockInfo.jsx | 4 - .../PurchaseOrders/PurchaseOrderInfo.jsx | 4 - .../Inventory/Shipments/PurchaseOrderInfo.jsx | 4 - .../Inventory/Shipments/ShipmentInfo.jsx | 4 - .../StockTransfers/StockTransferInfo.jsx | 4 - .../CourierServices/CourierServiceInfo.jsx | 4 - .../Management/Couriers/CourierInfo.jsx | 4 - .../FilamentSkus/FilamentSkuInfo.jsx | 4 - .../Management/Filaments/FilamentInfo.jsx | 4 - .../Dashboard/Management/Files/FileInfo.jsx | 4 - .../Dashboard/Management/Hosts/HostInfo.jsx | 4 - .../Management/Materials/MaterialInfo.jsx | 4 - .../Dashboard/Management/Notes/NoteInfo.jsx | 4 - .../Management/PartSkus/PartSkuInfo.jsx | 4 - .../PermissionSettingInfo.jsx | 4 - .../ProductCategories/ProductCategoryInfo.jsx | 4 - .../Management/ProductSkus/ProductSkuInfo.jsx | 4 - .../Management/TaxRates/TaxRateInfo.jsx | 4 - .../Management/UserGroups/UserGroupInfo.jsx | 4 - .../Management/Vendors/VendorInfo.jsx | 4 - .../FilamentProfiles/FilamentProfileInfo.jsx | 4 - .../PrinterProfiles/PrinterProfileInfo.jsx | 4 - .../Dashboard/Sales/Clients/ClientInfo.jsx | 4 - .../ListingVarients/ListingVarientInfo.jsx | 4 - .../Dashboard/Sales/Listings/ListingInfo.jsx | 4 - .../Sales/Marketplaces/MarketplaceInfo.jsx | 4 - .../Sales/SalesOrders/SalesOrderInfo.jsx | 4 - .../Dashboard/common/ActionHandler.jsx | 6 +- .../Dashboard/common/DeleteObject.jsx | 76 +++++++++++++++++++ .../Dashboard/common/DeleteObjectModal.jsx | 58 -------------- .../Dashboard/common/MessageDialogView.jsx | 13 +++- .../Dashboard/common/ObjectForm.jsx | 39 +--------- .../Dashboard/context/ActionsContext.jsx | 4 +- src/database/models/Client.js | 13 +++- src/database/models/Courier.js | 13 +++- src/database/models/CourierService.js | 13 +++- src/database/models/Filament.js | 11 ++- src/database/models/FilamentProfile.js | 13 +++- src/database/models/FilamentSku.js | 13 +++- src/database/models/File.js | 13 +++- src/database/models/Host.js | 13 +++- src/database/models/Invoice.js | 11 ++- src/database/models/Job.js | 11 ++- src/database/models/Listing.js | 13 +++- src/database/models/ListingVarient.js | 13 +++- src/database/models/Marketplace.js | 13 +++- src/database/models/Material.js | 13 +++- src/database/models/OrderItem.js | 18 ++++- src/database/models/PartSku.js | 13 +++- src/database/models/Payment.js | 11 ++- src/database/models/PermissionSetting.js | 13 +++- src/database/models/PrinterProfile.js | 13 +++- src/database/models/ProductCategory.js | 13 +++- src/database/models/ProductSku.js | 13 +++- src/database/models/ProductStock.js | 11 ++- src/database/models/PurchaseOrder.js | 11 ++- src/database/models/SalesOrder.js | 11 ++- src/database/models/Shipment.js | 11 ++- src/database/models/StockTransfer.js | 11 ++- src/database/models/TaxRate.js | 13 +++- src/database/models/TaxRecord.js | 13 +++- src/database/models/UserGroup.js | 13 +++- src/database/models/Vendor.js | 13 +++- 67 files changed, 389 insertions(+), 308 deletions(-) create mode 100644 src/components/Dashboard/common/DeleteObject.jsx delete mode 100644 src/components/Dashboard/common/DeleteObjectModal.jsx diff --git a/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx b/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx index 5f1e0a4a..64edc6f8 100644 --- a/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx +++ b/src/components/Dashboard/Finance/Invoices/InvoiceInfo.jsx @@ -92,10 +92,6 @@ const InvoiceInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx b/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx index bbc4d0a4..31503971 100644 --- a/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx +++ b/src/components/Dashboard/Finance/Payments/PaymentInfo.jsx @@ -85,10 +85,6 @@ const PaymentInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx b/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx index c086c2d4..4b86aa65 100644 --- a/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx +++ b/src/components/Dashboard/Finance/TaxRecords/TaxRecordInfo.jsx @@ -77,10 +77,6 @@ const TaxRecordInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx b/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx index 1ba17839..52491635 100644 --- a/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx +++ b/src/components/Dashboard/Inventory/OrderItems/OrderItemInfo.jsx @@ -78,10 +78,6 @@ const OrderItemInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx b/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx index d64e0ca1..99ae075f 100644 --- a/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx +++ b/src/components/Dashboard/Inventory/ProductStocks/ProductStockInfo.jsx @@ -98,10 +98,6 @@ const ProductStockInfo = () => { objectFormRef?.current.handleUpdate() return true }, - delete: () => { - objectFormRef?.current.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx b/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx index 91201b80..51c6583d 100644 --- a/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx +++ b/src/components/Dashboard/Inventory/PurchaseOrders/PurchaseOrderInfo.jsx @@ -103,10 +103,6 @@ const PurchaseOrderInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx b/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx index 054b02be..9a0d832d 100644 --- a/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx +++ b/src/components/Dashboard/Inventory/Shipments/PurchaseOrderInfo.jsx @@ -96,10 +96,6 @@ const PurchaseOrderInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - }, newOrderItem: () => { setNewOrderItemOpen(true) return true diff --git a/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx b/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx index f4d8a644..95bfd1a3 100644 --- a/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx +++ b/src/components/Dashboard/Inventory/Shipments/ShipmentInfo.jsx @@ -88,10 +88,6 @@ const ShipmentInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx b/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx index 0d7ed3ed..e8830c38 100644 --- a/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx +++ b/src/components/Dashboard/Inventory/StockTransfers/StockTransferInfo.jsx @@ -88,10 +88,6 @@ const StockTransferInfo = () => { objectFormRef?.current.handleUpdate() return true }, - delete: () => { - objectFormRef?.current.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx b/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx index e830cd80..0503d4a8 100644 --- a/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx +++ b/src/components/Dashboard/Management/CourierServices/CourierServiceInfo.jsx @@ -79,10 +79,6 @@ const CourierServiceInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Couriers/CourierInfo.jsx b/src/components/Dashboard/Management/Couriers/CourierInfo.jsx index 7a737d22..1c7a8ae0 100644 --- a/src/components/Dashboard/Management/Couriers/CourierInfo.jsx +++ b/src/components/Dashboard/Management/Couriers/CourierInfo.jsx @@ -75,10 +75,6 @@ const CourierInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx b/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx index c3b1fd5c..ab4b5990 100644 --- a/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx +++ b/src/components/Dashboard/Management/FilamentSkus/FilamentSkuInfo.jsx @@ -74,10 +74,6 @@ const FilamentSkuInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx index 5c1b17aa..7fc7dff8 100644 --- a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx +++ b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx @@ -93,10 +93,6 @@ const FilamentInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Files/FileInfo.jsx b/src/components/Dashboard/Management/Files/FileInfo.jsx index 412a372c..781ad24f 100644 --- a/src/components/Dashboard/Management/Files/FileInfo.jsx +++ b/src/components/Dashboard/Management/Files/FileInfo.jsx @@ -87,10 +87,6 @@ const FileInfo = () => { fetchFileContent(objectFormState?.objectData, true) return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Hosts/HostInfo.jsx b/src/components/Dashboard/Management/Hosts/HostInfo.jsx index a0ab9dad..4df4fd47 100644 --- a/src/components/Dashboard/Management/Hosts/HostInfo.jsx +++ b/src/components/Dashboard/Management/Hosts/HostInfo.jsx @@ -88,10 +88,6 @@ const HostInfo = () => { objectFormRef?.current.handleUpdate() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Materials/MaterialInfo.jsx b/src/components/Dashboard/Management/Materials/MaterialInfo.jsx index 3c23a2f4..da7ebdd1 100644 --- a/src/components/Dashboard/Management/Materials/MaterialInfo.jsx +++ b/src/components/Dashboard/Management/Materials/MaterialInfo.jsx @@ -77,10 +77,6 @@ const MaterialInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Notes/NoteInfo.jsx b/src/components/Dashboard/Management/Notes/NoteInfo.jsx index f23e145b..b36c139d 100644 --- a/src/components/Dashboard/Management/Notes/NoteInfo.jsx +++ b/src/components/Dashboard/Management/Notes/NoteInfo.jsx @@ -78,10 +78,6 @@ const NoteInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx b/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx index 3a58a40a..ed7d05f1 100644 --- a/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx +++ b/src/components/Dashboard/Management/PartSkus/PartSkuInfo.jsx @@ -69,10 +69,6 @@ const PartSkuInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/PermissionSettings/PermissionSettingInfo.jsx b/src/components/Dashboard/Management/PermissionSettings/PermissionSettingInfo.jsx index 21af764f..c6bfe75e 100644 --- a/src/components/Dashboard/Management/PermissionSettings/PermissionSettingInfo.jsx +++ b/src/components/Dashboard/Management/PermissionSettings/PermissionSettingInfo.jsx @@ -81,10 +81,6 @@ const PermissionSettingInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx b/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx index ede02d46..c041e98d 100644 --- a/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx +++ b/src/components/Dashboard/Management/ProductCategories/ProductCategoryInfo.jsx @@ -74,10 +74,6 @@ const ProductCategoryInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx b/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx index 592a7c17..a39eaae2 100644 --- a/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx +++ b/src/components/Dashboard/Management/ProductSkus/ProductSkuInfo.jsx @@ -75,10 +75,6 @@ const ProductSkuInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx b/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx index e7de6139..c3b0b289 100644 --- a/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx +++ b/src/components/Dashboard/Management/TaxRates/TaxRateInfo.jsx @@ -74,10 +74,6 @@ const TaxRateInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/UserGroups/UserGroupInfo.jsx b/src/components/Dashboard/Management/UserGroups/UserGroupInfo.jsx index d521e906..b871c97c 100644 --- a/src/components/Dashboard/Management/UserGroups/UserGroupInfo.jsx +++ b/src/components/Dashboard/Management/UserGroups/UserGroupInfo.jsx @@ -81,10 +81,6 @@ const UserGroupInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx index 6f70de56..7c26d66f 100644 --- a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx +++ b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx @@ -74,10 +74,6 @@ const VendorInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx b/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx index a36d3e72..d9f00d6e 100644 --- a/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx +++ b/src/components/Dashboard/Production/FilamentProfiles/FilamentProfileInfo.jsx @@ -112,10 +112,6 @@ const FilamentProfileInfo = () => { objectFormRef.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx b/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx index 2e64b24e..fd027b9a 100644 --- a/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx +++ b/src/components/Dashboard/Production/PrinterProfiles/PrinterProfileInfo.jsx @@ -90,10 +90,6 @@ const PrinterProfileInfo = () => { objectFormRef.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Sales/Clients/ClientInfo.jsx b/src/components/Dashboard/Sales/Clients/ClientInfo.jsx index b9d04dab..4d280a1e 100644 --- a/src/components/Dashboard/Sales/Clients/ClientInfo.jsx +++ b/src/components/Dashboard/Sales/Clients/ClientInfo.jsx @@ -74,10 +74,6 @@ const ClientInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx b/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx index 84fad8c2..055dd655 100644 --- a/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx +++ b/src/components/Dashboard/Sales/ListingVarients/ListingVarientInfo.jsx @@ -88,10 +88,6 @@ const ListingVarientInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Sales/Listings/ListingInfo.jsx b/src/components/Dashboard/Sales/Listings/ListingInfo.jsx index 414470e9..0e9a3c47 100644 --- a/src/components/Dashboard/Sales/Listings/ListingInfo.jsx +++ b/src/components/Dashboard/Sales/Listings/ListingInfo.jsx @@ -86,10 +86,6 @@ const ListingInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx b/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx index a71c7c32..e55e92e2 100644 --- a/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx +++ b/src/components/Dashboard/Sales/Marketplaces/MarketplaceInfo.jsx @@ -143,10 +143,6 @@ const MarketplaceInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - }, connect: () => { startAuthorization() return true diff --git a/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx b/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx index 6ebec2de..602c5fe3 100644 --- a/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx +++ b/src/components/Dashboard/Sales/SalesOrders/SalesOrderInfo.jsx @@ -101,10 +101,6 @@ const SalesOrderInfo = () => { objectFormRef?.current?.handleUpdate?.() return true }, - delete: () => { - objectFormRef?.current?.handleDelete?.() - return true - } } return ( diff --git a/src/components/Dashboard/common/ActionHandler.jsx b/src/components/Dashboard/common/ActionHandler.jsx index 34686cc4..fda1ec98 100644 --- a/src/components/Dashboard/common/ActionHandler.jsx +++ b/src/components/Dashboard/common/ActionHandler.jsx @@ -16,7 +16,9 @@ const ActionHandler = forwardRef( ) => { const location = useLocation() const navigate = useNavigate() - const action = new URLSearchParams(location.search).get(actionParam) + const searchParams = new URLSearchParams(location.search) + const action = searchParams.get(actionParam) + const actionObjectType = searchParams.get('actionObjectType') // Ref to track last executed action const lastExecutedAction = useRef(null) @@ -44,6 +46,7 @@ const ActionHandler = forwardRef( if ( loading == false && action && + !actionObjectType && actions[action] && lastExecutedAction.current !== action ) { @@ -71,6 +74,7 @@ const ActionHandler = forwardRef( }, [ loading, action, + actionObjectType, actions, actionParam, clearAfterExecute, diff --git a/src/components/Dashboard/common/DeleteObject.jsx b/src/components/Dashboard/common/DeleteObject.jsx new file mode 100644 index 00000000..a53a6b7e --- /dev/null +++ b/src/components/Dashboard/common/DeleteObject.jsx @@ -0,0 +1,76 @@ +import { useState, useContext } from 'react' +import PropTypes from 'prop-types' +import { useLocation, useNavigate } from 'react-router-dom' +import { ApiServerContext } from '../context/ApiServerContext' +import { useMessageContext } from '../context/MessageContext' +import { useActions } from '../context/ActionsContext' +import { getModelByName } from '../../../database/ObjectModels' +import MessageDialogView from './MessageDialogView.jsx' +import BinIcon from '../../Icons/BinIcon' + +const capitalizeFirstLetter = (value) => { + return String(value).charAt(0).toUpperCase() + String(value).slice(1) +} + +const DeleteObject = ({ onOk, objectData, objectType: objectTypeProp }) => { + const [deleteLoading, setDeleteLoading] = useState(false) + const { deleteObject } = useContext(ApiServerContext) + const { showSuccess, showError } = useMessageContext() + const { currentObjectType } = useActions() + const location = useLocation() + const navigate = useNavigate() + + const objectType = + objectTypeProp || + new URLSearchParams(location.search).get('actionObjectType') || + currentObjectType + + const model = objectType ? getModelByName(objectType) : null + const modelLabel = model?.label || 'object' + const objectName = + objectData?.name || objectData?._reference || objectData?._id + + const handleDelete = async () => { + if (!objectData?._id || !objectType) return + setDeleteLoading(true) + try { + await deleteObject(objectData._id, objectType) + showSuccess( + `${capitalizeFirstLetter(modelLabel.toLowerCase())} deleted successfully!` + ) + const onInfoPage = model?.url && location.pathname === `${model.url}/info` + if (onInfoPage) { + navigate(model.url) + } else { + onOk() + } + } catch (error) { + console.error('Error deleting object:', error) + showError(`Failed to delete ${modelLabel.toLowerCase()}.`) + } finally { + setDeleteLoading(false) + } + } + + return ( + } + title={`Are you sure you want to delete this ${modelLabel.toLowerCase()}?`} + description={ + objectName ? `This will permanently delete ${objectName}.` : undefined + } + onOk={handleDelete} + okText='Delete' + okLoading={deleteLoading} + danger + /> + ) +} + +DeleteObject.propTypes = { + onOk: PropTypes.func.isRequired, + objectData: PropTypes.object, + objectType: PropTypes.string +} + +export default DeleteObject diff --git a/src/components/Dashboard/common/DeleteObjectModal.jsx b/src/components/Dashboard/common/DeleteObjectModal.jsx deleted file mode 100644 index b1fe7946..00000000 --- a/src/components/Dashboard/common/DeleteObjectModal.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import PropTypes from 'prop-types' -import { Modal, Button, Space, Typography } from 'antd' -import { getModelByName } from '../../../database/ObjectModels' -import BinIcon from '../../Icons/BinIcon' - -const { Text } = Typography - -const DeleteObjectModal = ({ open, onOk, onCancel, loading, objectType }) => { - const model = getModelByName(objectType) - return ( - - - {`Confirm Delete ${model.label}`} - - } - onOk={onOk} - onCancel={onCancel} - okText='Delete' - cancelText='Cancel' - okType='danger' - closable={false} - centered - maskClosable={false} - footer={[ - , - - ]} - > - - Are you sure you want to delete this {model.label.toLowerCase()}? - - - ) -} - -DeleteObjectModal.propTypes = { - open: PropTypes.bool.isRequired, - onOk: PropTypes.func.isRequired, - onCancel: PropTypes.func.isRequired, - loading: PropTypes.bool, - objectType: PropTypes.string.isRequired -} - -export default DeleteObjectModal diff --git a/src/components/Dashboard/common/MessageDialogView.jsx b/src/components/Dashboard/common/MessageDialogView.jsx index c9a28a18..0fef57a6 100644 --- a/src/components/Dashboard/common/MessageDialogView.jsx +++ b/src/components/Dashboard/common/MessageDialogView.jsx @@ -10,7 +10,8 @@ const MessageDialogView = ({ description, onOk, okText, - okLoading + okLoading, + danger = false }) => { return ( @@ -20,7 +21,12 @@ const MessageDialogView = ({ {description && {description}} - @@ -34,7 +40,8 @@ MessageDialogView.propTypes = { description: PropTypes.node, onOk: PropTypes.func.isRequired, okText: PropTypes.string, - okLoading: PropTypes.bool + okLoading: PropTypes.bool, + danger: PropTypes.bool } export default MessageDialogView diff --git a/src/components/Dashboard/common/ObjectForm.jsx b/src/components/Dashboard/common/ObjectForm.jsx index 7f1382ba..8c91ac7b 100644 --- a/src/components/Dashboard/common/ObjectForm.jsx +++ b/src/components/Dashboard/common/ObjectForm.jsx @@ -11,7 +11,6 @@ import { Form } from 'antd' import { ApiServerContext } from '../context/ApiServerContext' import { AuthContext } from '../context/AuthContext' import { useMessageContext } from '../context/MessageContext' -import DeleteObjectModal from './DeleteObjectModal' import merge from 'lodash/merge' import mergeWith from 'lodash/mergeWith' import set from 'lodash/set' @@ -157,12 +156,9 @@ const ObjectForm = forwardRef( const [form] = Form.useForm() const formUpdateValues = Form.useWatch([], form) const { showSuccess, showError } = useMessageContext() - const [deleteModalOpen, setDeleteModalOpen] = useState(false) - const [deleteLoading, setDeleteLoading] = useState(false) const { fetchObject, updateObject, - deleteObject, setObjectActivity, clearObjectActivity, fetchObjectActivities, @@ -777,34 +773,10 @@ const ObjectForm = forwardRef( onStateChangeRef.current({ editLoading: false }) } - const handleDelete = () => { - setDeleteModalOpen(true) - } - - const confirmDelete = async () => { - setDeleteLoading(true) - try { - await deleteObject(id, type) - setDeleteModalOpen(false) - showSuccess(`${getModelMessageLabel(type)} deleted successfully!`) - navigate(-2) - // Optionally: trigger a callback to parent to remove this object from view - } catch (err) { - console.error(err) - showError( - `Failed to delete ${getModelMessageLabel(type).toLowerCase()}.` - ) - } finally { - setDeleteLoading(false) - } - } - useImperativeHandle(ref, () => ({ startEditing, cancelEditing, handleUpdate, - handleDelete, - confirmDelete, handleFetchObject, editLoading, fetchLoading, @@ -815,14 +787,6 @@ const ObjectForm = forwardRef( return ( <> - setDeleteModalOpen(false)} - loading={deleteLoading} - objectType={type} - objectName={objectData?.name || objectData?.label || ''} - />
diff --git a/src/components/Dashboard/context/ActionsContext.jsx b/src/components/Dashboard/context/ActionsContext.jsx index b5ab3e87..4b0ed796 100644 --- a/src/components/Dashboard/context/ActionsContext.jsx +++ b/src/components/Dashboard/context/ActionsContext.jsx @@ -174,9 +174,7 @@ const ActionsProvider = ({ children }) => { const [modalCentered, setModalCentered] = useState(false) useEffect(() => { - if (resolvedModalAction?.modalCentered !== undefined) { - setModalCentered(resolvedModalAction.modalCentered) - } + setModalCentered(resolvedModalAction?.modalCentered === true) }, [resolvedModalAction?.modalCentered]) const modalContentData = diff --git a/src/database/models/Client.js b/src/database/models/Client.js index 3422e5ce..d853fa31 100644 --- a/src/database/models/Client.js +++ b/src/database/models/Client.js @@ -6,6 +6,9 @@ const ClientInfo = lazy( const NewClient = lazy( () => import('../../components/Dashboard/Sales/Clients/NewClient') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ClientIcon from '../../components/Icons/ClientIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const Client = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Courier.js b/src/database/models/Courier.js index 20fd0da8..6a8a040d 100644 --- a/src/database/models/Courier.js +++ b/src/database/models/Courier.js @@ -6,6 +6,9 @@ const CourierInfo = lazy( const NewCourier = lazy( () => import('../../components/Dashboard/Management/Couriers/NewCourier') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import CourierIcon from '../../components/Icons/CourierIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const Courier = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/CourierService.js b/src/database/models/CourierService.js index 363b261e..b91b2d05 100644 --- a/src/database/models/CourierService.js +++ b/src/database/models/CourierService.js @@ -6,6 +6,9 @@ const CourierServiceInfo = lazy( const NewCourierService = lazy( () => import('../../components/Dashboard/Management/CourierServices/NewCourierService') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import CourierServiceIcon from '../../components/Icons/CourierServiceIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const CourierService = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Filament.js b/src/database/models/Filament.js index 012507da..99960bcd 100644 --- a/src/database/models/Filament.js +++ b/src/database/models/Filament.js @@ -6,6 +6,9 @@ const FilamentInfo = lazy( const NewFilament = lazy( () => import('../../components/Dashboard/Management/Filaments/NewFilament') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import EditIcon from '../../components/Icons/EditIcon' import PlusIcon from '../../components/Icons/PlusIcon' import CheckIcon from '../../components/Icons/CheckIcon' @@ -95,13 +98,17 @@ export const Filament = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, visible: (objectData) => { return !(objectData?._isEditing && objectData?._isEditing == true) + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } } ], diff --git a/src/database/models/FilamentProfile.js b/src/database/models/FilamentProfile.js index 27e54b21..7c253c88 100644 --- a/src/database/models/FilamentProfile.js +++ b/src/database/models/FilamentProfile.js @@ -7,6 +7,9 @@ const FilamentProfileInfo = lazy( const NewFilamentProfile = lazy( () => import('../../components/Dashboard/Production/FilamentProfiles/NewFilamentProfile') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import FilamentProfileIcon from '../../components/Icons/FilamentProfileIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -85,12 +88,16 @@ export const FilamentProfile = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', row: true, icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/FilamentSku.js b/src/database/models/FilamentSku.js index 753d69de..61e2c238 100644 --- a/src/database/models/FilamentSku.js +++ b/src/database/models/FilamentSku.js @@ -6,6 +6,9 @@ const FilamentSkuInfo = lazy( const NewFilamentSku = lazy( () => import('../../components/Dashboard/Management/FilamentSkus/NewFilamentSku') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import FilamentSkuIcon from '../../components/Icons/FilamentSkuIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const FilamentSku = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/File.js b/src/database/models/File.js index 698013c7..cb2a08c8 100644 --- a/src/database/models/File.js +++ b/src/database/models/File.js @@ -3,6 +3,9 @@ import { createElement, lazy } from 'react' const FileInfo = lazy( () => import('../../components/Dashboard/Management/Files/FileInfo') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import DownloadIcon from '../../components/Icons/DownloadIcon' import FileIcon from '../../components/Icons/FileIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -78,11 +81,15 @@ export const File = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Host.js b/src/database/models/Host.js index 2db3c667..908315d4 100644 --- a/src/database/models/Host.js +++ b/src/database/models/Host.js @@ -9,6 +9,9 @@ const NewHost = lazy( const HostOTP = lazy( () => import('../../components/Dashboard/Management/Hosts/HostOtp') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import HostIcon from '../../components/Icons/HostIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -100,11 +103,15 @@ export const Host = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Invoice.js b/src/database/models/Invoice.js index 741ec91f..f281b845 100644 --- a/src/database/models/Invoice.js +++ b/src/database/models/Invoice.js @@ -12,6 +12,9 @@ const PostInvoice = lazy( const AcknowledgeInvoice = lazy( () => import('../../components/Dashboard/Finance/Invoices/AcknowledgeInvoice') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import InvoiceIcon from '../../components/Icons/InvoiceIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -92,8 +95,9 @@ export const Invoice = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -102,6 +106,9 @@ export const Invoice = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/Job.js b/src/database/models/Job.js index 3feac966..ef774b30 100644 --- a/src/database/models/Job.js +++ b/src/database/models/Job.js @@ -9,6 +9,9 @@ const NewJob = lazy( const DeployJob = lazy( () => import('../../components/Dashboard/Production/Jobs/DeployJob') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import JobIcon from '../../components/Icons/JobIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -90,8 +93,9 @@ export const Job = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -100,6 +104,9 @@ export const Job = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/Listing.js b/src/database/models/Listing.js index 95c3895e..460c58ff 100644 --- a/src/database/models/Listing.js +++ b/src/database/models/Listing.js @@ -12,6 +12,9 @@ const PublishListing = lazy( const UnpublishListing = lazy( () => import('../../components/Dashboard/Sales/Listings/UnpublishListing') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ListingIcon from '../../components/Icons/ListingIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -126,11 +129,15 @@ export const Listing = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/ListingVarient.js b/src/database/models/ListingVarient.js index d4048214..c9d2f159 100644 --- a/src/database/models/ListingVarient.js +++ b/src/database/models/ListingVarient.js @@ -12,6 +12,9 @@ const PublishListingVarient = lazy( const UnpublishListingVarient = lazy( () => import('../../components/Dashboard/Sales/ListingVarients/UnpublishListingVarient') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ListingVarientIcon from '../../components/Icons/ListingVarientIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -118,11 +121,15 @@ export const ListingVarient = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Marketplace.js b/src/database/models/Marketplace.js index c2cf09c1..29402ba6 100644 --- a/src/database/models/Marketplace.js +++ b/src/database/models/Marketplace.js @@ -12,6 +12,9 @@ const SyncListings = lazy( const SyncOrders = lazy( () => import('../../components/Dashboard/Sales/Marketplaces/SyncOrders') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import MarketplaceIcon from '../../components/Icons/MarketplaceIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -154,11 +157,15 @@ export const Marketplace = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Material.js b/src/database/models/Material.js index e56a1199..6af2af12 100644 --- a/src/database/models/Material.js +++ b/src/database/models/Material.js @@ -6,6 +6,9 @@ const MaterialInfo = lazy( const NewMaterial = lazy( () => import('../../components/Dashboard/Management/Materials/NewMaterial') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import MaterialIcon from '../../components/Icons/MaterialIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const Material = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/OrderItem.js b/src/database/models/OrderItem.js index bd3aa33d..a835f44d 100644 --- a/src/database/models/OrderItem.js +++ b/src/database/models/OrderItem.js @@ -6,6 +6,9 @@ const OrderItemInfo = lazy( const NewOrderItem = lazy( () => import('../../components/Dashboard/Inventory/OrderItems/NewOrderItem') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import OrderItemIcon from '../../components/Icons/OrderItemIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -31,7 +34,11 @@ export const OrderItem = { label: 'New Order Item', icon: PlusIcon, content: (objectData, { onOk } = {}) => { - return createElement(NewOrderItem, { defaultValues: objectData, onOk, reset: true }) + return createElement(NewOrderItem, { + defaultValues: objectData, + onOk, + reset: true + }) } }, { @@ -86,9 +93,11 @@ export const OrderItem = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', + row: true, icon: BinIcon, danger: true, visible: (objectData) => { @@ -96,6 +105,9 @@ export const OrderItem = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } } ], diff --git a/src/database/models/PartSku.js b/src/database/models/PartSku.js index a1d45a58..fab141ea 100644 --- a/src/database/models/PartSku.js +++ b/src/database/models/PartSku.js @@ -6,6 +6,9 @@ const PartSkuInfo = lazy( const NewPartSku = lazy( () => import('../../components/Dashboard/Management/PartSkus/NewPartSku') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PartSkuIcon from '../../components/Icons/PartSkuIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const PartSku = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Payment.js b/src/database/models/Payment.js index d4608cb5..452f6909 100644 --- a/src/database/models/Payment.js +++ b/src/database/models/Payment.js @@ -18,6 +18,9 @@ const DeclinePayment = lazy( const CancelPayment = lazy( () => import('../../components/Dashboard/Finance/Payments/CancelPayment') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PaymentIcon from '../../components/Icons/PaymentIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -98,8 +101,9 @@ export const Payment = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -108,6 +112,9 @@ export const Payment = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/PermissionSetting.js b/src/database/models/PermissionSetting.js index 73ee3dde..50573879 100644 --- a/src/database/models/PermissionSetting.js +++ b/src/database/models/PermissionSetting.js @@ -7,6 +7,9 @@ const PermissionSettingInfo = lazy( const NewPermissionSetting = lazy( () => import('../../components/Dashboard/Management/PermissionSettings/NewPermissionSetting') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PermissionSettingIcon from '../../components/Icons/PermissionSettingIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -86,11 +89,15 @@ export const PermissionSetting = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/PrinterProfile.js b/src/database/models/PrinterProfile.js index 30939197..0d565779 100644 --- a/src/database/models/PrinterProfile.js +++ b/src/database/models/PrinterProfile.js @@ -6,6 +6,9 @@ const PrinterProfileInfo = lazy( const NewPrinterProfile = lazy( () => import('../../components/Dashboard/Production/PrinterProfiles/NewPrinterProfile') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PrinterProfileIcon from '../../components/Icons/PrinterProfileIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -349,12 +352,16 @@ export const PrinterProfile = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', row: true, icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/ProductCategory.js b/src/database/models/ProductCategory.js index 253e5641..363a492a 100644 --- a/src/database/models/ProductCategory.js +++ b/src/database/models/ProductCategory.js @@ -6,6 +6,9 @@ const ProductCategoryInfo = lazy( const NewProductCategory = lazy( () => import('../../components/Dashboard/Management/ProductCategories/NewProductCategory') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ProductCategoryIcon from '../../components/Icons/ProductCategoryIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -85,11 +88,15 @@ export const ProductCategory = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/ProductSku.js b/src/database/models/ProductSku.js index 6f7e2156..bd9807e6 100644 --- a/src/database/models/ProductSku.js +++ b/src/database/models/ProductSku.js @@ -6,6 +6,9 @@ const ProductSkuInfo = lazy( const NewProductSku = lazy( () => import('../../components/Dashboard/Management/ProductSkus/NewProductSku') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ProductSkuIcon from '../../components/Icons/ProductSkuIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const ProductSku = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/ProductStock.js b/src/database/models/ProductStock.js index 3b258a5e..eba24fcc 100644 --- a/src/database/models/ProductStock.js +++ b/src/database/models/ProductStock.js @@ -9,6 +9,9 @@ const NewProductStock = lazy( const PostProductStock = lazy( () => import('../../components/Dashboard/Inventory/ProductStocks/PostProductStock') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ProductStockIcon from '../../components/Icons/ProductStockIcon' import PlusIcon from '../../components/Icons/PlusIcon' import { getModelByName } from '../ObjectModels.js' @@ -90,8 +93,9 @@ export const ProductStock = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -100,6 +104,9 @@ export const ProductStock = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/PurchaseOrder.js b/src/database/models/PurchaseOrder.js index e403e066..b64e77bf 100644 --- a/src/database/models/PurchaseOrder.js +++ b/src/database/models/PurchaseOrder.js @@ -15,6 +15,9 @@ const AcknowledgePurchaseOrder = lazy( const CancelPurchaseOrder = lazy( () => import('../../components/Dashboard/Inventory/PurchaseOrders/CancelPurchaseOrder') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PurchaseOrderIcon from '../../components/Icons/PurchaseOrderIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -95,8 +98,9 @@ export const PurchaseOrder = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -105,6 +109,9 @@ export const PurchaseOrder = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/SalesOrder.js b/src/database/models/SalesOrder.js index 63640925..61114189 100644 --- a/src/database/models/SalesOrder.js +++ b/src/database/models/SalesOrder.js @@ -15,6 +15,9 @@ const ConfirmSalesOrder = lazy( const CancelSalesOrder = lazy( () => import('../../components/Dashboard/Sales/SalesOrders/CancelSalesOrder') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import SalesOrderIcon from '../../components/Icons/SalesOrderIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -95,8 +98,9 @@ export const SalesOrder = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -105,6 +109,9 @@ export const SalesOrder = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/Shipment.js b/src/database/models/Shipment.js index c6c37511..3899dcff 100644 --- a/src/database/models/Shipment.js +++ b/src/database/models/Shipment.js @@ -15,6 +15,9 @@ const ReceiveShipment = lazy( const CancelShipment = lazy( () => import('../../components/Dashboard/Inventory/Shipments/CancelShipment') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import ShipmentIcon from '../../components/Icons/ShipmentIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -95,8 +98,9 @@ export const Shipment = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -105,6 +109,9 @@ export const Shipment = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/StockTransfer.js b/src/database/models/StockTransfer.js index bd1385d3..053ad4f4 100644 --- a/src/database/models/StockTransfer.js +++ b/src/database/models/StockTransfer.js @@ -9,6 +9,9 @@ const NewStockTransfer = lazy( const PostStockTransfer = lazy( () => import('../../components/Dashboard/Inventory/StockTransfers/PostStockTransfer') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import StockTransferIcon from '../../components/Icons/StockTransferIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -89,8 +92,9 @@ export const StockTransfer = { }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, danger: true, @@ -99,6 +103,9 @@ export const StockTransfer = { }, disabled: (objectData) => { return objectData?.state?.type != 'draft' + }, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) } }, { type: 'divider' }, diff --git a/src/database/models/TaxRate.js b/src/database/models/TaxRate.js index 26ef9d41..814b2095 100644 --- a/src/database/models/TaxRate.js +++ b/src/database/models/TaxRate.js @@ -6,6 +6,9 @@ const TaxRateInfo = lazy( const NewTaxRate = lazy( () => import('../../components/Dashboard/Management/TaxRates/NewTaxRate') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import TaxRateIcon from '../../components/Icons/TaxRateIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const TaxRate = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/TaxRecord.js b/src/database/models/TaxRecord.js index f467fc7e..77320452 100644 --- a/src/database/models/TaxRecord.js +++ b/src/database/models/TaxRecord.js @@ -6,6 +6,9 @@ const TaxRecordInfo = lazy( const NewTaxRecord = lazy( () => import('../../components/Dashboard/Finance/TaxRecords/NewTaxRecord') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import TaxRecordIcon from '../../components/Icons/TaxRecordIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const TaxRecord = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/UserGroup.js b/src/database/models/UserGroup.js index bf207c85..204ed2ea 100644 --- a/src/database/models/UserGroup.js +++ b/src/database/models/UserGroup.js @@ -6,6 +6,9 @@ const UserGroupInfo = lazy( const NewUserGroup = lazy( () => import('../../components/Dashboard/Management/UserGroups/NewUserGroup') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import PersonGroupIcon from '../../components/Icons/PersonGroupIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -85,11 +88,15 @@ export const UserGroup = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [ diff --git a/src/database/models/Vendor.js b/src/database/models/Vendor.js index 69ecb202..0afab917 100644 --- a/src/database/models/Vendor.js +++ b/src/database/models/Vendor.js @@ -6,6 +6,9 @@ const VendorInfo = lazy( const NewVendor = lazy( () => import('../../components/Dashboard/Management/Vendors/NewVendor') ) +const DeleteObject = lazy( + () => import('../../components/Dashboard/common/DeleteObject') +) import VendorIcon from '../../components/Icons/VendorIcon' import PlusIcon from '../../components/Icons/PlusIcon' import InfoCircleIcon from '../../components/Icons/InfoCircleIcon' @@ -84,11 +87,15 @@ export const Vendor = { { type: 'divider' }, { name: 'delete', - type: 'page', - pageName: 'info', + type: 'modal', + modalWidth: 520, + modalCentered: true, label: 'Delete', icon: BinIcon, - danger: true + danger: true, + content: (objectData, { onOk } = {}) => { + return createElement(DeleteObject, { objectData, onOk }) + } } ], pages: [