80 lines
2.1 KiB
TypeScript
80 lines
2.1 KiB
TypeScript
import { t } from '@lingui/macro';
|
|
import { Text } from '@mantine/core';
|
|
import type { ReactNode } from 'react';
|
|
|
|
import { ModelType } from '../../enums/ModelType';
|
|
import { getDetailUrl } from '../../functions/urls';
|
|
import { ApiIcon } from '../items/ApiIcon';
|
|
import { type InstanceRenderInterface, RenderInlineModel } from './Instance';
|
|
|
|
/**
|
|
* Inline rendering of a single StockLocation instance
|
|
*/
|
|
export function RenderStockLocation(
|
|
props: Readonly<InstanceRenderInterface>
|
|
): ReactNode {
|
|
const { instance } = props;
|
|
|
|
return (
|
|
<RenderInlineModel
|
|
{...props}
|
|
tooltip={instance.pathstring}
|
|
prefix={
|
|
<>
|
|
{instance.level > 0 && `${'- '.repeat(instance.level)}`}
|
|
{instance.icon && <ApiIcon name={instance.icon} />}
|
|
</>
|
|
}
|
|
primary={instance.pathstring}
|
|
secondary={instance.description}
|
|
url={
|
|
props.link
|
|
? getDetailUrl(ModelType.stocklocation, instance.pk, true)
|
|
: undefined
|
|
}
|
|
/>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Inline rendering of a single StockLocationType instance
|
|
*/
|
|
export function RenderStockLocationType({
|
|
instance
|
|
}: Readonly<InstanceRenderInterface>): ReactNode {
|
|
return (
|
|
<RenderInlineModel
|
|
primary={instance.name}
|
|
prefix={instance.icon && <ApiIcon name={instance.icon} />}
|
|
secondary={`${instance.description} (${instance.location_count})`}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export function RenderStockItem(
|
|
props: Readonly<InstanceRenderInterface>
|
|
): ReactNode {
|
|
const { instance } = props;
|
|
let quantity_string = '';
|
|
|
|
if (instance?.serial !== null && instance?.serial !== undefined) {
|
|
quantity_string += `${t`Serial Number`}: ${instance.serial}`;
|
|
} else if (instance?.quantity) {
|
|
quantity_string = `${t`Quantity`}: ${instance.quantity}`;
|
|
}
|
|
|
|
return (
|
|
<RenderInlineModel
|
|
{...props}
|
|
primary={instance.part_detail?.full_name}
|
|
suffix={<Text size='sm'>{quantity_string}</Text>}
|
|
image={instance.part_detail?.thumbnail || instance.part_detail?.image}
|
|
url={
|
|
props.link
|
|
? getDetailUrl(ModelType.stockitem, instance.pk, true)
|
|
: undefined
|
|
}
|
|
/>
|
|
);
|
|
}
|