mirror of
https://github.com/inventree/InvenTree.git
synced 2025-10-29 20:30:39 +00:00
[UI] Fixes (#10697)
* Fix for StockItemTestResultTable - Fix column alignment * Update rendering * Refactor <SupplierPartTable /> - Formalize parameter arguments
This commit is contained in:
@@ -18,8 +18,12 @@ import { useMemo } from 'react';
|
|||||||
* Field set for SupplierPart instance
|
* Field set for SupplierPart instance
|
||||||
*/
|
*/
|
||||||
export function useSupplierPartFields({
|
export function useSupplierPartFields({
|
||||||
|
manufacturerId,
|
||||||
|
manufacturerPartId,
|
||||||
partId
|
partId
|
||||||
}: {
|
}: {
|
||||||
|
manufacturerId?: number;
|
||||||
|
manufacturerPartId?: number;
|
||||||
partId?: number;
|
partId?: number;
|
||||||
}) {
|
}) {
|
||||||
return useMemo(() => {
|
return useMemo(() => {
|
||||||
@@ -34,7 +38,9 @@ export function useSupplierPartFields({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
manufacturer_part: {
|
manufacturer_part: {
|
||||||
|
value: manufacturerPartId,
|
||||||
filters: {
|
filters: {
|
||||||
|
manufacturer: manufacturerId,
|
||||||
part_detail: true,
|
part_detail: true,
|
||||||
manufacturer_detail: true
|
manufacturer_detail: true
|
||||||
},
|
},
|
||||||
@@ -69,7 +75,7 @@ export function useSupplierPartFields({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return fields;
|
return fields;
|
||||||
}, [partId]);
|
}, [manufacturerId, manufacturerPartId, partId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useManufacturerPartFields() {
|
export function useManufacturerPartFields() {
|
||||||
|
|||||||
@@ -187,9 +187,7 @@ export default function CompanyDetail(props: Readonly<CompanyDetailProps>) {
|
|||||||
label: t`Supplied Parts`,
|
label: t`Supplied Parts`,
|
||||||
icon: <IconPackageExport />,
|
icon: <IconPackageExport />,
|
||||||
hidden: !company?.is_supplier,
|
hidden: !company?.is_supplier,
|
||||||
content: company?.pk && (
|
content: company?.pk && <SupplierPartTable supplierId={company.pk} />
|
||||||
<SupplierPartTable params={{ supplier: company.pk }} />
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'manufactured-parts',
|
name: 'manufactured-parts',
|
||||||
|
|||||||
@@ -193,9 +193,9 @@ export default function ManufacturerPartDetail() {
|
|||||||
icon: <IconBuildingWarehouse />,
|
icon: <IconBuildingWarehouse />,
|
||||||
content: manufacturerPart?.pk ? (
|
content: manufacturerPart?.pk ? (
|
||||||
<SupplierPartTable
|
<SupplierPartTable
|
||||||
params={{
|
partId={manufacturerPart.part}
|
||||||
manufacturer_part: manufacturerPart.pk
|
manufacturerId={manufacturerPart.manufacturer}
|
||||||
}}
|
manufacturerPartId={manufacturerPart.pk}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<Skeleton />
|
<Skeleton />
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ export default function SupplierPartDetail() {
|
|||||||
icon: 'purchase_orders'
|
icon: 'purchase_orders'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'number',
|
||||||
name: 'available',
|
name: 'available',
|
||||||
label: t`Supplier Availability`,
|
label: t`Supplier Availability`,
|
||||||
hidden: !data.availability_updated,
|
hidden: !data.availability_updated,
|
||||||
@@ -206,7 +206,7 @@ export default function SupplierPartDetail() {
|
|||||||
icon: 'packages'
|
icon: 'packages'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'string',
|
type: 'date',
|
||||||
name: 'availability_updated',
|
name: 'availability_updated',
|
||||||
label: t`Availability Updated`,
|
label: t`Availability Updated`,
|
||||||
copy: true,
|
copy: true,
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default function PartSupplierDetail({
|
|||||||
<StylishText size='lg'>{t`Suppliers`}</StylishText>
|
<StylishText size='lg'>{t`Suppliers`}</StylishText>
|
||||||
</Accordion.Control>
|
</Accordion.Control>
|
||||||
<Accordion.Panel>
|
<Accordion.Panel>
|
||||||
<SupplierPartTable params={{ part: partId }} />
|
<SupplierPartTable partId={partId} />
|
||||||
</Accordion.Panel>
|
</Accordion.Panel>
|
||||||
</Accordion.Item>
|
</Accordion.Item>
|
||||||
<Accordion.Item value='part-manufacturers'>
|
<Accordion.Item value='part-manufacturers'>
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ export default function PurchasingIndex() {
|
|||||||
name: 'supplier-parts',
|
name: 'supplier-parts',
|
||||||
label: t`Supplier Parts`,
|
label: t`Supplier Parts`,
|
||||||
icon: <IconPackageExport />,
|
icon: <IconPackageExport />,
|
||||||
content: <SupplierPartTable params={{}} />
|
content: <SupplierPartTable />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'manufacturer',
|
name: 'manufacturer',
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
|
|||||||
import { ModelType } from '@lib/enums/ModelType';
|
import { ModelType } from '@lib/enums/ModelType';
|
||||||
import { UserRoles } from '@lib/enums/Roles';
|
import { UserRoles } from '@lib/enums/Roles';
|
||||||
import { apiUrl } from '@lib/functions/Api';
|
import { apiUrl } from '@lib/functions/Api';
|
||||||
|
import { formatDecimal } from '@lib/functions/Formatting';
|
||||||
import type { TableFilter } from '@lib/types/Filters';
|
import type { TableFilter } from '@lib/types/Filters';
|
||||||
import type { TableColumn } from '@lib/types/Tables';
|
import type { TableColumn } from '@lib/types/Tables';
|
||||||
import { IconPackageImport } from '@tabler/icons-react';
|
import { IconPackageImport } from '@tabler/icons-react';
|
||||||
@@ -43,8 +44,16 @@ import { TableHoverCard } from '../TableHoverCard';
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export function SupplierPartTable({
|
export function SupplierPartTable({
|
||||||
params
|
manufacturerId,
|
||||||
}: Readonly<{ params: any }>): ReactNode {
|
manufacturerPartId,
|
||||||
|
partId,
|
||||||
|
supplierId
|
||||||
|
}: Readonly<{
|
||||||
|
manufacturerId?: number;
|
||||||
|
manufacturerPartId?: number;
|
||||||
|
partId?: number;
|
||||||
|
supplierId?: number;
|
||||||
|
}>): ReactNode {
|
||||||
const table = useTable('supplierparts');
|
const table = useTable('supplierparts');
|
||||||
|
|
||||||
const user = useUserState();
|
const user = useUserState();
|
||||||
@@ -53,7 +62,7 @@ export function SupplierPartTable({
|
|||||||
const tableColumns: TableColumn[] = useMemo(() => {
|
const tableColumns: TableColumn[] = useMemo(() => {
|
||||||
return [
|
return [
|
||||||
PartColumn({
|
PartColumn({
|
||||||
switchable: 'part' in params,
|
switchable: !!partId,
|
||||||
part: 'part_detail'
|
part: 'part_detail'
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
@@ -119,7 +128,7 @@ export function SupplierPartTable({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<TableHoverCard
|
<TableHoverCard
|
||||||
value={record.pack_quantity}
|
value={formatDecimal(record.pack_quantity)}
|
||||||
extra={extra}
|
extra={extra}
|
||||||
title={t`Pack Quantity`}
|
title={t`Pack Quantity`}
|
||||||
/>
|
/>
|
||||||
@@ -147,10 +156,10 @@ export function SupplierPartTable({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}, [params]);
|
}, [partId]);
|
||||||
|
|
||||||
const supplierPartFields = useSupplierPartFields({
|
const supplierPartFields = useSupplierPartFields({
|
||||||
partId: params?.part
|
partId: partId
|
||||||
});
|
});
|
||||||
|
|
||||||
const addSupplierPart = useCreateApiFormModal({
|
const addSupplierPart = useCreateApiFormModal({
|
||||||
@@ -158,8 +167,9 @@ export function SupplierPartTable({
|
|||||||
title: t`Add Supplier Part`,
|
title: t`Add Supplier Part`,
|
||||||
fields: supplierPartFields,
|
fields: supplierPartFields,
|
||||||
initialData: {
|
initialData: {
|
||||||
part: params?.part,
|
part: partId,
|
||||||
supplier: params?.supplier
|
supplier: supplierId,
|
||||||
|
manufacturer_part: manufacturerPartId
|
||||||
},
|
},
|
||||||
table: table,
|
table: table,
|
||||||
successMessage: t`Supplier part created`
|
successMessage: t`Supplier part created`
|
||||||
@@ -167,7 +177,7 @@ export function SupplierPartTable({
|
|||||||
|
|
||||||
const supplierPlugins = usePluginsWithMixin('supplier');
|
const supplierPlugins = usePluginsWithMixin('supplier');
|
||||||
const importPartWizard = ImportPartWizard({
|
const importPartWizard = ImportPartWizard({
|
||||||
partId: params?.part
|
partId: partId
|
||||||
});
|
});
|
||||||
|
|
||||||
const tableActions = useMemo(() => {
|
const tableActions = useMemo(() => {
|
||||||
@@ -187,11 +197,11 @@ export function SupplierPartTable({
|
|||||||
hidden={
|
hidden={
|
||||||
supplierPlugins.length === 0 ||
|
supplierPlugins.length === 0 ||
|
||||||
!user.hasAddRole(UserRoles.part) ||
|
!user.hasAddRole(UserRoles.part) ||
|
||||||
!params?.part
|
!partId
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
];
|
];
|
||||||
}, [user, supplierPlugins]);
|
}, [user, partId, supplierPlugins]);
|
||||||
|
|
||||||
const tableFilters: TableFilter[] = useMemo(() => {
|
const tableFilters: TableFilter[] = useMemo(() => {
|
||||||
return [
|
return [
|
||||||
@@ -272,7 +282,10 @@ export function SupplierPartTable({
|
|||||||
columns={tableColumns}
|
columns={tableColumns}
|
||||||
props={{
|
props={{
|
||||||
params: {
|
params: {
|
||||||
...params,
|
manufacturer: manufacturerId,
|
||||||
|
manufacturer_part: manufacturerPartId,
|
||||||
|
supplier: supplierId,
|
||||||
|
part: partId,
|
||||||
part_detail: true,
|
part_detail: true,
|
||||||
supplier_detail: true,
|
supplier_detail: true,
|
||||||
manufacturer_detail: true
|
manufacturer_detail: true
|
||||||
|
|||||||
@@ -153,19 +153,21 @@ export default function StockItemTestResultTable({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Group justify='space-between' wrap='nowrap'>
|
<Group justify='space-between' wrap='nowrap'>
|
||||||
{!child && (
|
<Group gap='xs'>
|
||||||
<RowExpansionIcon
|
{!child && (
|
||||||
enabled={multipleResults}
|
<RowExpansionIcon
|
||||||
expanded={table.isRowExpanded(record.pk)}
|
enabled={multipleResults}
|
||||||
/>
|
expanded={table.isRowExpanded(record.pk)}
|
||||||
)}
|
/>
|
||||||
<Text
|
)}
|
||||||
style={{ fontStyle: installed ? 'italic' : undefined }}
|
<Text
|
||||||
c={enabled ? undefined : 'red'}
|
style={{ fontStyle: installed ? 'italic' : undefined }}
|
||||||
>
|
c={enabled ? undefined : 'red'}
|
||||||
{!record.templateId && '- '}
|
>
|
||||||
{record.test_name ?? record.template_detail?.test_name}
|
{!record.templateId && '- '}
|
||||||
</Text>
|
{record.test_name ?? record.template_detail?.test_name}
|
||||||
|
</Text>
|
||||||
|
</Group>
|
||||||
<Group justify='right'>
|
<Group justify='right'>
|
||||||
{record.results && record.results.length > 1 && (
|
{record.results && record.results.length > 1 && (
|
||||||
<Tooltip label={t`Test Results`}>
|
<Tooltip label={t`Test Results`}>
|
||||||
|
|||||||
Reference in New Issue
Block a user