Add ObjectTableNavigationButtons to various components for improved navigation
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good

- Integrated ObjectTableNavigationButtons into multiple components including InvoiceInfo, PaymentInfo, TaxRecordInfo, and others to enhance user navigation.
- Each button is configured with appropriate props for object type and ID, ensuring consistent functionality across the dashboard.
- This update improves the overall user experience by providing quick access to related object actions.
This commit is contained in:
Tom Butcher 2026-08-01 13:18:03 +01:00
parent 55a2ad2c5f
commit a2a1c5be5b
49 changed files with 533 additions and 25 deletions

View File

@ -16,6 +16,7 @@ import PaymentIcon from '../../../Icons/PaymentIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -168,6 +169,12 @@ const InvoiceInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={invoiceId}
objectType='invoice'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -161,6 +162,12 @@ const PaymentInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={paymentId}
objectType='payment'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -125,6 +126,12 @@ const TaxRecordInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={taxRecordId}
objectType='taxRecord'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -8,6 +8,7 @@ import ObjectTable from '../../common/ObjectTable'
import ObjectActions from '../../common/ObjectActions' import ObjectActions from '../../common/ObjectActions'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActionHandler from '../../common/ActionHandler' import ActionHandler from '../../common/ActionHandler'
import InfoCollapse from '../../common/InfoCollapse' import InfoCollapse from '../../common/InfoCollapse'
import NotesPanel from '../../common/NotesPanel' import NotesPanel from '../../common/NotesPanel'
@ -125,6 +126,12 @@ const FilamentStockInfo = () => {
disabled={true} disabled={true}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={filamentStockId}
objectType='filamentStock'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -124,6 +125,12 @@ const OrderItemInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={orderItemId}
objectType='orderItem'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -15,6 +15,7 @@ import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import GraphIcon from '../../../Icons/GraphIcon.jsx' import GraphIcon from '../../../Icons/GraphIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -135,6 +136,12 @@ const PartStockInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={partStockId}
objectType='partStock'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -23,6 +23,7 @@ import ProductStockIcon from '../../../Icons/ProductStockIcon.jsx'
import GraphIcon from '../../../Icons/GraphIcon.jsx' import GraphIcon from '../../../Icons/GraphIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -162,6 +163,12 @@ const ProductStockInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={productStockId}
objectType='productStock'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -195,6 +196,12 @@ const PurchaseOrderInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={purchaseOrderId}
objectType='purchaseOrder'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -160,6 +161,12 @@ const PurchaseOrderInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={purchaseOrderId}
objectType='purchaseOrder'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -149,6 +150,12 @@ const ShipmentInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={shipmentId}
objectType='shipment'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -127,6 +128,12 @@ const StockAuditInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={stockAuditId}
objectType='stockAudit'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -128,6 +129,12 @@ const StockLocationInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={stockLocationId}
objectType='stockLocation'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -19,6 +19,7 @@ import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import StockTransferIcon from '../../../Icons/StockTransferIcon.jsx' import StockTransferIcon from '../../../Icons/StockTransferIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -150,6 +151,12 @@ const StockTransferInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={stockTransferId}
objectType='stockTransfer'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -10,6 +10,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -132,6 +133,12 @@ const AppPasswordInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={appPasswordId}
objectType='appPassword'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -127,6 +128,12 @@ const CourierServiceInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={courierServiceId}
objectType='courierService'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -123,6 +124,12 @@ const CourierInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={courierId}
objectType='courier'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -124,6 +125,12 @@ const DocumentJobInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={documentJobId}
objectType='documentJob'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -134,6 +135,12 @@ const DocumentPrinterInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={documentPrinterId}
objectType='documentPrinter'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -126,6 +127,12 @@ const DocumentSizeInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={documentSizeId}
objectType='documentSize'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -131,6 +132,12 @@ const DocumentTemplateInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={documentTemplateId}
objectType='documentTemplate'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -8,6 +8,7 @@ import ObjectInfo from '../../common/ObjectInfo'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
@ -122,6 +123,12 @@ const FilamentSkuInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={filamentSkuId}
objectType='filamentSku'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler' import ActionHandler from '../../common/ActionHandler'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -143,6 +144,12 @@ const FilamentInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={filamentId}
objectType='filament'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -140,6 +141,12 @@ const FileInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={fileId}
objectType='file'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -139,6 +140,12 @@ const HostInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={hostId}
objectType='host'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -125,6 +126,12 @@ const MaterialInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={materialId}
objectType='material'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -10,6 +10,7 @@ import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -113,6 +114,12 @@ const NoteTypeInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={noteTypeId}
objectType='noteType'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -16,6 +16,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -128,6 +129,12 @@ const NoteInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={noteId}
objectType='note'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -8,6 +8,7 @@ import ObjectInfo from '../../common/ObjectInfo'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
@ -117,6 +118,12 @@ const PartSkuInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={partSkuId}
objectType='partSku'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -8,6 +8,7 @@ import ObjectInfo from '../../common/ObjectInfo'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
@ -123,6 +124,12 @@ const PartInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={partId}
objectType='part'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -11,6 +11,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -122,6 +123,12 @@ const ProductCategoryInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={productCategoryId}
objectType='productCategory'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -8,6 +8,7 @@ import ObjectInfo from '../../common/ObjectInfo'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
@ -125,6 +126,12 @@ const ProductSkuInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={productSkuId}
objectType='productSku'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -8,6 +8,7 @@ import ObjectInfo from '../../common/ObjectInfo'
import ViewButton from '../../common/ViewButton' import ViewButton from '../../common/ViewButton'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx' import InfoCircleIcon from '../../../Icons/InfoCircleIcon.jsx'
import NoteIcon from '../../../Icons/NoteIcon.jsx' import NoteIcon from '../../../Icons/NoteIcon.jsx'
@ -123,6 +124,12 @@ const ProductInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={productId}
objectType='product'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -122,6 +123,12 @@ const TaxRateInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={taxRateId}
objectType='taxRate'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import AppPasswordIcon from '../../../Icons/AppPasswordIcon.jsx' import AppPasswordIcon from '../../../Icons/AppPasswordIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler' import ActionHandler from '../../common/ActionHandler'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -128,6 +129,12 @@ const UserInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={userId}
objectType='user'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -122,6 +123,12 @@ const VendorInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={vendorId}
objectType='vendor'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -6,6 +6,7 @@ import ActionHandler from '../../common/ActionHandler'
import AuditLogIcon from '../../../Icons/AuditLogIcon' import AuditLogIcon from '../../../Icons/AuditLogIcon'
import DocumentPrintButton from '../../common/DocumentPrintButton' import DocumentPrintButton from '../../common/DocumentPrintButton'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import FilamentIcon from '../../../Icons/FilamentIcon' import FilamentIcon from '../../../Icons/FilamentIcon'
import GCodeFileIcon from '../../../Icons/GCodeFileIcon' import GCodeFileIcon from '../../../Icons/GCodeFileIcon'
import HotEndIcon from '../../../Icons/HotEndIcon' import HotEndIcon from '../../../Icons/HotEndIcon'
@ -155,18 +156,26 @@ const FilamentProfileInfo = () => {
showStartingDivider={true} showStartingDivider={true}
/> />
</Space> </Space>
<EditButtons <Space>
isEditing={objectFormState.isEditing} <EditButtons
handleUpdate={() => actionHandlerRef.current.callAction('finishEdit')} isEditing={objectFormState.isEditing}
cancelEditing={() => handleUpdate={() => actionHandlerRef.current.callAction('finishEdit')}
actionHandlerRef.current.callAction('cancelEdit') cancelEditing={() =>
} actionHandlerRef.current.callAction('cancelEdit')
startEditing={() => actionHandlerRef.current.callAction('edit')} }
editLoading={objectFormState.editLoading} startEditing={() => actionHandlerRef.current.callAction('edit')}
formValid={objectFormState.formValid} editLoading={objectFormState.editLoading}
disabled={objectFormState.beingEditedByOther || objectFormState.loading} formValid={objectFormState.formValid}
loading={objectFormState.editLoading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
/> loading={objectFormState.editLoading}
/>
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={filamentProfileId}
objectType='filamentProfile'
showEndingDivider={true}
/>
</Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -15,6 +15,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -131,6 +132,12 @@ const GCodeFileInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={gcodeFileId}
objectType='gcodeFile'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -145,6 +146,12 @@ const JobInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={jobId}
objectType='job'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -6,6 +6,7 @@ import ActionHandler from '../../common/ActionHandler'
import AuditLogIcon from '../../../Icons/AuditLogIcon' import AuditLogIcon from '../../../Icons/AuditLogIcon'
import DocumentPrintButton from '../../common/DocumentPrintButton' import DocumentPrintButton from '../../common/DocumentPrintButton'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import HotEndIcon from '../../../Icons/HotEndIcon' import HotEndIcon from '../../../Icons/HotEndIcon'
import InfoCircleIcon from '../../../Icons/InfoCircleIcon' import InfoCircleIcon from '../../../Icons/InfoCircleIcon'
import MultiMotionIcon from '../../../Icons/MultiMotionIcon' import MultiMotionIcon from '../../../Icons/MultiMotionIcon'
@ -128,18 +129,26 @@ const PrinterProfileInfo = () => {
showStartingDivider={true} showStartingDivider={true}
/> />
</Space> </Space>
<EditButtons <Space>
isEditing={objectFormState.isEditing} <EditButtons
handleUpdate={() => actionHandlerRef.current.callAction('finishEdit')} isEditing={objectFormState.isEditing}
cancelEditing={() => handleUpdate={() => actionHandlerRef.current.callAction('finishEdit')}
actionHandlerRef.current.callAction('cancelEdit') cancelEditing={() =>
} actionHandlerRef.current.callAction('cancelEdit')
startEditing={() => actionHandlerRef.current.callAction('edit')} }
editLoading={objectFormState.editLoading} startEditing={() => actionHandlerRef.current.callAction('edit')}
formValid={objectFormState.formValid} editLoading={objectFormState.editLoading}
disabled={objectFormState.beingEditedByOther || objectFormState.loading} formValid={objectFormState.formValid}
loading={objectFormState.editLoading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
/> loading={objectFormState.editLoading}
/>
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={printerProfileId}
objectType='printerProfile'
showEndingDivider={true}
/>
</Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -32,6 +32,7 @@ import { ApiServerContext } from '../../context/ApiServerContext.jsx'
import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock.jsx' import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock.jsx'
import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock.jsx' import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock.jsx'
import ScrollBox from '../../common/ScrollBox.jsx' import ScrollBox from '../../common/ScrollBox.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
const log = loglevel.getLogger('ControlPrinter') const log = loglevel.getLogger('ControlPrinter')
log.setLevel(config.logLevel) log.setLevel(config.logLevel)
@ -317,6 +318,11 @@ const ControlPrinter = ({ slicerIntegration = false }) => {
/> />
</Space> </Space>
</Space> </Space>
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={printerId}
objectType='printer'
/>
</Flex> </Flex>
<AlertsDisplay <AlertsDisplay

View File

@ -24,6 +24,7 @@ import DocumentPrintButton from '../../common/DocumentPrintButton.jsx'
import UserNotifierToggle from '../../common/UserNotifierToggle.jsx' import UserNotifierToggle from '../../common/UserNotifierToggle.jsx'
import ScrollBox from '../../common/ScrollBox.jsx' import ScrollBox from '../../common/ScrollBox.jsx'
import PrinterProfileIcon from '../../../Icons/PrinterProfileIcon.jsx' import PrinterProfileIcon from '../../../Icons/PrinterProfileIcon.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
const log = loglevel.getLogger('PrinterInfo') const log = loglevel.getLogger('PrinterInfo')
log.setLevel(config.logLevel) log.setLevel(config.logLevel)
@ -130,9 +131,17 @@ const PrinterInfo = () => {
}} }}
editLoading={objectFormState.editLoading} editLoading={objectFormState.editLoading}
formValid={objectFormState.formValid} formValid={objectFormState.formValid}
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={
objectFormState.beingEditedByOther || objectFormState.loading
}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={printerId}
objectType='printer'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -12,6 +12,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler' import ActionHandler from '../../common/ActionHandler'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -115,6 +116,12 @@ const SubJobInfo = () => {
disabled={true} disabled={true}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={subJobId}
objectType='subJob'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -122,6 +123,12 @@ const ClientInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={clientId}
objectType='client'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -139,6 +140,12 @@ const ListingVarientInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={listingVarientId}
objectType='listingVarient'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ListingVarientIcon from '../../../Icons/ListingVarientIcon.jsx' import ListingVarientIcon from '../../../Icons/ListingVarientIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -144,6 +145,12 @@ const ListingInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={listingId}
objectType='listing'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -13,6 +13,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm' import ObjectForm from '../../common/ObjectForm'
import EditButtons from '../../common/EditButtons' import EditButtons from '../../common/EditButtons'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -212,6 +213,12 @@ const MarketplaceInfo = () => {
disabled={objectFormState.beingEditedByOther || objectFormState.loading} disabled={objectFormState.beingEditedByOther || objectFormState.loading}
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={marketplaceId}
objectType='marketplace'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>
<ScrollBox> <ScrollBox>

View File

@ -14,6 +14,7 @@ import NoteIcon from '../../../Icons/NoteIcon.jsx'
import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx' import AuditLogIcon from '../../../Icons/AuditLogIcon.jsx'
import ObjectForm from '../../common/ObjectForm.jsx' import ObjectForm from '../../common/ObjectForm.jsx'
import EditButtons from '../../common/EditButtons.jsx' import EditButtons from '../../common/EditButtons.jsx'
import ObjectTableNavigationButtons from '../../common/ObjectTableNavigationButtons.jsx'
import ActivityIndicator from '../../common/ActivityIndicator.jsx' import ActivityIndicator from '../../common/ActivityIndicator.jsx'
import ActionHandler from '../../common/ActionHandler.jsx' import ActionHandler from '../../common/ActionHandler.jsx'
import ObjectActions from '../../common/ObjectActions.jsx' import ObjectActions from '../../common/ObjectActions.jsx'
@ -192,6 +193,12 @@ const SalesOrderInfo = () => {
} }
loading={objectFormState.editLoading} loading={objectFormState.editLoading}
/> />
<ObjectTableNavigationButtons
disabled={objectFormState.loading}
_id={salesOrderId}
objectType='salesOrder'
showEndingDivider={true}
/>
</Space> </Space>
</Flex> </Flex>

View File

@ -0,0 +1,120 @@
import { useContext, useEffect, useState, useCallback, useRef } from 'react'
import { Button, Divider, Flex, Space } from 'antd'
import { useSearchParams } from 'react-router-dom'
import ArrowLeftIcon from '../../Icons/ArrowLeftIcon.jsx'
import ArrowRightIcon from '../../Icons/ArrowRightIcon.jsx'
import PropTypes from 'prop-types'
import { ApiServerContext } from '../context/ApiServerContext'
import { AuthContext } from '../context/AuthContext'
import { useTableStatePersistence } from '../context/TableStateContext'
const ObjectTableNavigationButtons = ({
disabled,
_id,
objectType,
showEndingDivider = false
}) => {
const { getObjectNeighbors } = useContext(ApiServerContext)
const { token } = useContext(AuthContext)
const [searchParams, setSearchParams] = useSearchParams()
const [neighbors, setNeighbors] = useState({ next: null, previous: null })
const [loading, setLoading] = useState(false)
const { getPersistedFilter, getPersistedSorter, getActiveFilterValues } =
useTableStatePersistence({
scope: objectType,
useFilterInSession: true,
useSortInSession: true
})
const getObjectNeighborsRef = useRef(getObjectNeighbors)
getObjectNeighborsRef.current = getObjectNeighbors
const getPersistedFilterRef = useRef(getPersistedFilter)
getPersistedFilterRef.current = getPersistedFilter
const getPersistedSorterRef = useRef(getPersistedSorter)
getPersistedSorterRef.current = getPersistedSorter
useEffect(() => {
if (!_id || !objectType || !token) {
setNeighbors({ next: null, previous: null })
setLoading(false)
return
}
let cancelled = false
const loadNeighbors = async () => {
setLoading(true)
const filter = getActiveFilterValues(getPersistedFilterRef.current())
const sorter = getPersistedSorterRef.current()
const result = await getObjectNeighborsRef.current(objectType, {
id: _id,
filter,
sorter
})
if (!cancelled) {
setNeighbors(result || { next: null, previous: null })
setLoading(false)
}
}
loadNeighbors()
return () => {
cancelled = true
}
}, [token, objectType, _id])
const navigateToNeighbor = useCallback(
(neighbor) => {
if (!neighbor?._id || !objectType) return
const nextParams = new URLSearchParams(searchParams)
const objectTypeUpper = objectType.toUpperCase()
for (const [key] of nextParams.entries()) {
if (key.toUpperCase().includes(objectTypeUpper)) {
nextParams.set(key, neighbor._id)
}
}
setSearchParams(nextParams)
},
[searchParams, setSearchParams, objectType]
)
const handlePrevious = () => navigateToNeighbor(neighbors.previous)
const handleNext = () => navigateToNeighbor(neighbors.next)
return (
<Flex gap='small' align='center'>
{showEndingDivider && (
<Divider type='vertical' style={{ margin: '0 4px', height: '18px' }} />
)}
<Space size='small'>
<Button
icon={<ArrowLeftIcon />}
onClick={handlePrevious}
disabled={disabled || loading || !neighbors.previous?._id}
/>
<Button
icon={<ArrowRightIcon />}
onClick={handleNext}
disabled={disabled || loading || !neighbors.next?._id}
/>
</Space>
</Flex>
)
}
ObjectTableNavigationButtons.propTypes = {
disabled: PropTypes.bool,
_id: PropTypes.string,
objectType: PropTypes.string,
showEndingDivider: PropTypes.bool
}
export default ObjectTableNavigationButtons

View File

@ -1136,6 +1136,59 @@ const ApiServerProvider = ({ children }) => {
} }
} }
const getObjectNeighbors = async (type, params = {}) => {
const { id, filter = {}, sorter = {} } = params
let newFilter = { ...filter }
if (filter != null && Object.keys(filter).length > 0) {
const model = getModelByName(type)
if (model.name !== 'unknown') {
for (const key of Object.keys(filter)) {
const property = model?.properties?.find((p) => p.name === key)
if (property && property.type === 'object') {
const value = filter[key]
newFilter[`${key}._id`] = value?._id ?? value
delete newFilter[key]
}
}
}
}
logger.debug('Fetching object neighbors from:', type, {
id,
newFilter,
sorter
})
try {
const response = await axios.get(
`${config.backendUrl}/${getObjectEndpoint(type)}/neighbors`,
{
params: {
id,
...newFilter,
sort: sorter.field,
order: sorter.order
},
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`
}
}
)
return response.data
} catch (err) {
console.error(err)
showError(err, () => {
getObjectNeighbors(type, params)
})
return { next: null, previous: null }
}
}
// Fetch table data with pagination, filtering, and sorting // Fetch table data with pagination, filtering, and sorting
const fetchObjectsByProperty = async (type, params = {}) => { const fetchObjectsByProperty = async (type, params = {}) => {
const { filter = {}, properties = [], masterFilter = {} } = params const { filter = {}, properties = [], masterFilter = {} } = params
@ -2177,6 +2230,7 @@ const ApiServerProvider = ({ children }) => {
subscribeToModelStats, subscribeToModelStats,
fetchObject, fetchObject,
fetchObjects, fetchObjects,
getObjectNeighbors,
fetchObjectsByProperty, fetchObjectsByProperty,
searchObjects, searchObjects,
fetchSpotlightData, fetchSpotlightData,