mirror of
https://github.com/inventree/InvenTree.git
synced 2025-08-09 21:30:54 +00:00
update args
This commit is contained in:
@@ -41,7 +41,7 @@ export function ActionButton(props: ActionButtonProps) {
|
|||||||
onClick={props.onClick ?? notYetImplemented}
|
onClick={props.onClick ?? notYetImplemented}
|
||||||
variant={props.variant ?? 'light'}
|
variant={props.variant ?? 'light'}
|
||||||
>
|
>
|
||||||
<Group spacing="xs" noWrap={true}>
|
<Group gap="xs" wrap="nowrap">
|
||||||
{props.icon}
|
{props.icon}
|
||||||
</Group>
|
</Group>
|
||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
|
@@ -55,7 +55,7 @@ export function SplitButton({
|
|||||||
const theme = useMantineTheme();
|
const theme = useMantineTheme();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group noWrap style={{ gap: 0 }}>
|
<Group wrap="nowrap" style={{ gap: 0 }}>
|
||||||
<Button
|
<Button
|
||||||
onClick={currentOption?.onClick}
|
onClick={currentOption?.onClick}
|
||||||
disabled={loading ? false : currentOption?.disabled}
|
disabled={loading ? false : currentOption?.disabled}
|
||||||
|
@@ -399,7 +399,7 @@ export function DetailsTable({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<Paper p="xs" withBorder radius="xs">
|
<Paper p="xs" withBorder radius="xs">
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{title && <StylishText size="lg">{title}</StylishText>}
|
{title && <StylishText size="lg">{title}</StylishText>}
|
||||||
<Table striped>
|
<Table striped>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@@ -174,7 +174,7 @@ function UploadModal({
|
|||||||
>
|
>
|
||||||
<Group
|
<Group
|
||||||
position="center"
|
position="center"
|
||||||
spacing="xl"
|
gap="xl"
|
||||||
style={{ minHeight: rem(140), pointerEvents: 'none' }}
|
style={{ minHeight: rem(140), pointerEvents: 'none' }}
|
||||||
>
|
>
|
||||||
<Dropzone.Accept>
|
<Dropzone.Accept>
|
||||||
@@ -252,7 +252,7 @@ function ImageActionButtons({
|
|||||||
<>
|
<>
|
||||||
{visible && (
|
{visible && (
|
||||||
<Group
|
<Group
|
||||||
spacing="xs"
|
gap="xs"
|
||||||
style={{ zIndex: 2, position: 'absolute', top: '10px', left: '10px' }}
|
style={{ zIndex: 2, position: 'absolute', top: '10px', left: '10px' }}
|
||||||
>
|
>
|
||||||
{actions.selectExisting && (
|
{actions.selectExisting && (
|
||||||
|
@@ -246,7 +246,7 @@ export function TemplateEditor(props: TemplateEditorProps) {
|
|||||||
</Tabs.Tab>
|
</Tabs.Tab>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
<Group position="right" style={{ flex: '1' }} noWrap>
|
<Group justify="right" style={{ flex: '1' }} wrap="nowrap">
|
||||||
<SplitButton
|
<SplitButton
|
||||||
loading={isPreviewLoading}
|
loading={isPreviewLoading}
|
||||||
defaultSelected="preview_save"
|
defaultSelected="preview_save"
|
||||||
|
@@ -422,11 +422,11 @@ export function ApiForm({
|
|||||||
<Paper mah={'65vh'} style={{ overflowY: 'auto' }}>
|
<Paper mah={'65vh'} style={{ overflowY: 'auto' }}>
|
||||||
<div>
|
<div>
|
||||||
{/* Form Fields */}
|
{/* Form Fields */}
|
||||||
<Stack spacing="sm">
|
<Stack gap="sm">
|
||||||
{(!isValid || nonFieldErrors.length > 0) && (
|
{(!isValid || nonFieldErrors.length > 0) && (
|
||||||
<Alert radius="sm" color="red" title={t`Form Errors Exist`}>
|
<Alert radius="sm" color="red" title={t`Form Errors Exist`}>
|
||||||
{nonFieldErrors.length > 0 && (
|
{nonFieldErrors.length > 0 && (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{nonFieldErrors.map((message) => (
|
{nonFieldErrors.map((message) => (
|
||||||
<Text key={message}>{message}</Text>
|
<Text key={message}>{message}</Text>
|
||||||
))}
|
))}
|
||||||
@@ -446,7 +446,7 @@ export function ApiForm({
|
|||||||
</Alert>
|
</Alert>
|
||||||
)}
|
)}
|
||||||
<FormProvider {...form}>
|
<FormProvider {...form}>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{!optionsLoading &&
|
{!optionsLoading &&
|
||||||
Object.entries(props.fields ?? {}).map(
|
Object.entries(props.fields ?? {}).map(
|
||||||
([fieldName, field]) => (
|
([fieldName, field]) => (
|
||||||
@@ -468,7 +468,7 @@ export function ApiForm({
|
|||||||
{/* Footer with Action Buttons */}
|
{/* Footer with Action Buttons */}
|
||||||
<Divider />
|
<Divider />
|
||||||
<div>
|
<div>
|
||||||
<Group position="right">
|
<Group justify="right">
|
||||||
{props.actions?.map((action, i) => (
|
{props.actions?.map((action, i) => (
|
||||||
<Button
|
<Button
|
||||||
key={i}
|
key={i}
|
||||||
|
@@ -104,7 +104,7 @@ export function AuthenticationForm() {
|
|||||||
) : null}
|
) : null}
|
||||||
<form onSubmit={classicForm.onSubmit(() => {})}>
|
<form onSubmit={classicForm.onSubmit(() => {})}>
|
||||||
{classicLoginMode ? (
|
{classicLoginMode ? (
|
||||||
<Stack spacing={0}>
|
<Stack gap={0}>
|
||||||
<TextInput
|
<TextInput
|
||||||
required
|
required
|
||||||
label={t`Username`}
|
label={t`Username`}
|
||||||
@@ -118,7 +118,7 @@ export function AuthenticationForm() {
|
|||||||
{...classicForm.getInputProps('password')}
|
{...classicForm.getInputProps('password')}
|
||||||
/>
|
/>
|
||||||
{auth_settings?.password_forgotten_enabled === true && (
|
{auth_settings?.password_forgotten_enabled === true && (
|
||||||
<Group position="apart" mt="0">
|
<Group justify="apart" mt="0">
|
||||||
<Anchor
|
<Anchor
|
||||||
component="button"
|
component="button"
|
||||||
type="button"
|
type="button"
|
||||||
@@ -143,7 +143,7 @@ export function AuthenticationForm() {
|
|||||||
</Stack>
|
</Stack>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Group position="apart" mt="xl">
|
<Group justify="apart" mt="xl">
|
||||||
<Anchor
|
<Anchor
|
||||||
component="button"
|
component="button"
|
||||||
type="button"
|
type="button"
|
||||||
@@ -228,7 +228,7 @@ export function RegistrationForm() {
|
|||||||
<>
|
<>
|
||||||
{auth_settings?.registration_enabled && (
|
{auth_settings?.registration_enabled && (
|
||||||
<form onSubmit={registrationForm.onSubmit(() => {})}>
|
<form onSubmit={registrationForm.onSubmit(() => {})}>
|
||||||
<Stack spacing={0}>
|
<Stack gap={0}>
|
||||||
<TextInput
|
<TextInput
|
||||||
required
|
required
|
||||||
label={t`Username`}
|
label={t`Username`}
|
||||||
@@ -256,7 +256,7 @@ export function RegistrationForm() {
|
|||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
<Group position="apart" mt="xl">
|
<Group justify="apart" mt="xl">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={isRegistering}
|
disabled={isRegistering}
|
||||||
|
@@ -20,7 +20,7 @@ export function NestedObjectField({
|
|||||||
</Accordion.Control>
|
</Accordion.Control>
|
||||||
<Accordion.Panel>
|
<Accordion.Panel>
|
||||||
<Divider sx={{ marginTop: '-10px', marginBottom: '10px' }} />
|
<Divider sx={{ marginTop: '-10px', marginBottom: '10px' }} />
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{Object.entries(definition.children ?? {}).map(
|
{Object.entries(definition.children ?? {}).map(
|
||||||
([childFieldName, field]) => (
|
([childFieldName, field]) => (
|
||||||
<ApiFormField
|
<ApiFormField
|
||||||
|
@@ -25,7 +25,7 @@ export function Thumbnail({
|
|||||||
const backup_image = '/static/img/blank_image.png';
|
const backup_image = '/static/img/blank_image.png';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group align={align ?? 'left'} spacing="xs" noWrap={true}>
|
<Group align={align ?? 'left'} gap="xs" wrap="nowrap">
|
||||||
<ApiImage
|
<ApiImage
|
||||||
src={src || backup_image}
|
src={src || backup_image}
|
||||||
alt={alt}
|
alt={alt}
|
||||||
@@ -59,7 +59,7 @@ export function ThumbnailHoverCard({
|
|||||||
}) {
|
}) {
|
||||||
const card = useMemo(() => {
|
const card = useMemo(() => {
|
||||||
return (
|
return (
|
||||||
<Group position="left" spacing={10} noWrap={true}>
|
<Group justify="left" gap={10} wrap="nowrap">
|
||||||
<Thumbnail src={src} alt={alt} size={size} />
|
<Thumbnail src={src} alt={alt} size={size} />
|
||||||
<Text>{text}</Text>
|
<Text>{text}</Text>
|
||||||
</Group>
|
</Group>
|
||||||
|
@@ -59,7 +59,7 @@ export function AttachmentLink({
|
|||||||
let text = external ? attachment : attachment.split('/').pop();
|
let text = external ? attachment : attachment.split('/').pop();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="left" spacing="sm">
|
<Group justify="left" gap="sm">
|
||||||
{external ? <IconLink /> : attachmentIcon(attachment)}
|
{external ? <IconLink /> : attachmentIcon(attachment)}
|
||||||
<Anchor href={attachment} target="_blank" rel="noopener noreferrer">
|
<Anchor href={attachment} target="_blank" rel="noopener noreferrer">
|
||||||
{text}
|
{text}
|
||||||
|
@@ -5,7 +5,7 @@ export function ColorToggle() {
|
|||||||
const { colorScheme, toggleColorScheme } = useMantineColorScheme();
|
const { colorScheme, toggleColorScheme } = useMantineColorScheme();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="center">
|
<Group justify="center">
|
||||||
<ActionIcon
|
<ActionIcon
|
||||||
onClick={() => toggleColorScheme()}
|
onClick={() => toggleColorScheme()}
|
||||||
size="lg"
|
size="lg"
|
||||||
|
@@ -19,13 +19,13 @@ export function StatisticItem({
|
|||||||
return (
|
return (
|
||||||
<Paper withBorder p="xs" key={id} pos="relative">
|
<Paper withBorder p="xs" key={id} pos="relative">
|
||||||
<LoadingOverlay visible={isLoading} overlayBlur={2} />
|
<LoadingOverlay visible={isLoading} overlayBlur={2} />
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text size="xs" color="dimmed" className={classes.dashboardItemTitle}>
|
<Text size="xs" color="dimmed" className={classes.dashboardItemTitle}>
|
||||||
{data.title}
|
{data.title}
|
||||||
</Text>
|
</Text>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group align="flex-end" spacing="xs" mt={25}>
|
<Group align="flex-end" gap="xs" mt={25}>
|
||||||
<Text className={classes.dashboardItemValue}>{data.value}</Text>
|
<Text className={classes.dashboardItemValue}>{data.value}</Text>
|
||||||
</Group>
|
</Group>
|
||||||
</Paper>
|
</Paper>
|
||||||
|
@@ -43,7 +43,7 @@ export function InfoItem({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text fz="sm" fw={700}>
|
<Text fz="sm" fw={700}>
|
||||||
{name}:
|
{name}:
|
||||||
</Text>
|
</Text>
|
||||||
|
@@ -22,7 +22,7 @@ export function ProgressBar(props: ProgressBarProps) {
|
|||||||
}, [props]);
|
}, [props]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing={2} style={{ flexGrow: 1, minWidth: '100px' }}>
|
<Stack gap={2} style={{ flexGrow: 1, minWidth: '100px' }}>
|
||||||
{props.progressLabel && (
|
{props.progressLabel && (
|
||||||
<Text align="center" size="xs">
|
<Text align="center" size="xs">
|
||||||
{props.value} / {props.maximum}
|
{props.value} / {props.maximum}
|
||||||
|
@@ -59,7 +59,7 @@ export function AboutInvenTreeModal({
|
|||||||
<tr key={idx}>
|
<tr key={idx}>
|
||||||
<td>{map.title}</td>
|
<td>{map.title}</td>
|
||||||
<td>
|
<td>
|
||||||
<Group position="apart" spacing="xs">
|
<Group justify="apart" gap="xs">
|
||||||
{alwaysLink ? (
|
{alwaysLink ? (
|
||||||
<Anchor href={data[map.ref]} target="_blank">
|
<Anchor href={data[map.ref]} target="_blank">
|
||||||
{data[map.ref]}
|
{data[map.ref]}
|
||||||
@@ -177,7 +177,7 @@ export function AboutInvenTreeModal({
|
|||||||
</tbody>
|
</tbody>
|
||||||
</Table>
|
</Table>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<CopyButton
|
<CopyButton
|
||||||
value={copyval}
|
value={copyval}
|
||||||
label={<Trans>Copy version information</Trans>}
|
label={<Trans>Copy version information</Trans>}
|
||||||
|
@@ -18,14 +18,14 @@ import { apiUrl } from '../../states/ApiState';
|
|||||||
|
|
||||||
export function LicenceView(entries: Readonly<any[]>) {
|
export function LicenceView(entries: Readonly<any[]>) {
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Divider />
|
<Divider />
|
||||||
{entries?.length > 0 ? (
|
{entries?.length > 0 ? (
|
||||||
<Accordion variant="contained" defaultValue="-">
|
<Accordion variant="contained" defaultValue="-">
|
||||||
{entries?.map((entry: any, index: number) => (
|
{entries?.map((entry: any, index: number) => (
|
||||||
<Accordion.Item key={entry.name} value={`entry-${index}`}>
|
<Accordion.Item key={entry.name} value={`entry-${index}`}>
|
||||||
<Accordion.Control>
|
<Accordion.Control>
|
||||||
<Group position="apart" grow>
|
<Group justify="apart" grow>
|
||||||
<Text>{entry.name}</Text>
|
<Text>{entry.name}</Text>
|
||||||
<Text>{entry.license}</Text>
|
<Text>{entry.license}</Text>
|
||||||
<Space />
|
<Space />
|
||||||
@@ -60,7 +60,7 @@ export function LicenseModal() {
|
|||||||
const rspdata = !data ? [] : Object.keys(data ?? {});
|
const rspdata = !data ? [] : Object.keys(data ?? {});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Divider />
|
<Divider />
|
||||||
<LoadingOverlay visible={isFetching} />
|
<LoadingOverlay visible={isFetching} />
|
||||||
{isFetching && (
|
{isFetching && (
|
||||||
|
@@ -137,7 +137,7 @@ export function ServerInfoModal({
|
|||||||
</tbody>
|
</tbody>
|
||||||
</Table>
|
</Table>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Group position="right">
|
<Group justify="right">
|
||||||
<Button
|
<Button
|
||||||
color="red"
|
color="red"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
@@ -42,7 +42,7 @@ export function BreadcrumbList({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper p="3" radius="xs">
|
<Paper p="3" radius="xs">
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
{navCallback && (
|
{navCallback && (
|
||||||
<ActionIcon key="nav-action" onClick={navCallback}>
|
<ActionIcon key="nav-action" onClick={navCallback}>
|
||||||
<IconMenu2 />
|
<IconMenu2 />
|
||||||
|
@@ -79,7 +79,7 @@ function DetailDrawerComponent({
|
|||||||
</Group>
|
</Group>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Stack spacing={'xs'} className={classes.flex}>
|
<Stack gap={'xs'} className={classes.flex}>
|
||||||
<Divider />
|
<Divider />
|
||||||
{content}
|
{content}
|
||||||
</Stack>
|
</Stack>
|
||||||
|
@@ -88,7 +88,7 @@ export function Header() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Container className={classes.layoutHeaderSection} size="100%">
|
<Container className={classes.layoutHeaderSection} size="100%">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Group>
|
<Group>
|
||||||
<NavHoverMenu openDrawer={openNavDrawer} />
|
<NavHoverMenu openDrawer={openNavDrawer} />
|
||||||
<NavTabs />
|
<NavTabs />
|
||||||
|
@@ -22,7 +22,7 @@ export function MainMenu() {
|
|||||||
<Menu width={260} position="bottom-end">
|
<Menu width={260} position="bottom-end">
|
||||||
<Menu.Target>
|
<Menu.Target>
|
||||||
<UnstyledButton className={classes.layoutHeaderUser}>
|
<UnstyledButton className={classes.layoutHeaderUser}>
|
||||||
<Group spacing={7}>
|
<Group gap={7}>
|
||||||
<Text weight={500} size="sm" sx={{ lineHeight: 1 }} mr={3}>
|
<Text weight={500} size="sm" sx={{ lineHeight: 1 }} mr={3}>
|
||||||
{userState.username() ? (
|
{userState.username() ? (
|
||||||
userState.username()
|
userState.username()
|
||||||
|
@@ -56,7 +56,7 @@ export function NavHoverMenu({
|
|||||||
</HoverCard.Target>
|
</HoverCard.Target>
|
||||||
|
|
||||||
<HoverCard.Dropdown sx={{ overflow: 'hidden' }}>
|
<HoverCard.Dropdown sx={{ overflow: 'hidden' }}>
|
||||||
<Group position="apart" px="md">
|
<Group justify="apart" px="md">
|
||||||
<ActionIcon
|
<ActionIcon
|
||||||
onClick={openDrawer}
|
onClick={openDrawer}
|
||||||
onMouseOver={openDrawer}
|
onMouseOver={openDrawer}
|
||||||
@@ -64,7 +64,7 @@ export function NavHoverMenu({
|
|||||||
>
|
>
|
||||||
<IconLayoutSidebar />
|
<IconLayoutSidebar />
|
||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
<Group spacing={'xs'}>
|
<Group gap={'xs'}>
|
||||||
{instanceName ? (
|
{instanceName ? (
|
||||||
instanceName
|
instanceName
|
||||||
) : (
|
) : (
|
||||||
@@ -89,7 +89,7 @@ export function NavHoverMenu({
|
|||||||
/>
|
/>
|
||||||
<MenuLinks links={onlyItems} highlighted={true} />
|
<MenuLinks links={onlyItems} highlighted={true} />
|
||||||
<div className={classes.headerDropdownFooter}>
|
<div className={classes.headerDropdownFooter}>
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<div>
|
<div>
|
||||||
<Text fw={500} fz="sm">
|
<Text fw={500} fz="sm">
|
||||||
<Trans>Get started</Trans>
|
<Trans>Get started</Trans>
|
||||||
|
@@ -66,7 +66,7 @@ export function NotificationDrawer({
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
title={
|
title={
|
||||||
<Group position="apart" noWrap={true}>
|
<Group justify="apart" wrap="nowrap">
|
||||||
<StylishText size="lg">{t`Notifications`}</StylishText>
|
<StylishText size="lg">{t`Notifications`}</StylishText>
|
||||||
<ActionIcon
|
<ActionIcon
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@@ -79,7 +79,7 @@ export function NotificationDrawer({
|
|||||||
</Group>
|
</Group>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Divider />
|
<Divider />
|
||||||
<LoadingOverlay visible={notificationQuery.isFetching} />
|
<LoadingOverlay visible={notificationQuery.isFetching} />
|
||||||
{(notificationQuery.data?.results?.length ?? 0) == 0 && (
|
{(notificationQuery.data?.results?.length ?? 0) == 0 && (
|
||||||
@@ -88,8 +88,8 @@ export function NotificationDrawer({
|
|||||||
</Alert>
|
</Alert>
|
||||||
)}
|
)}
|
||||||
{notificationQuery.data?.results?.map((notification: any) => (
|
{notificationQuery.data?.results?.map((notification: any) => (
|
||||||
<Group position="apart" key={notification.pk}>
|
<Group justify="apart" key={notification.pk}>
|
||||||
<Stack spacing="3">
|
<Stack gap="3">
|
||||||
{notification?.target?.link ? (
|
{notification?.target?.link ? (
|
||||||
<Text
|
<Text
|
||||||
size="sm"
|
size="sm"
|
||||||
|
@@ -32,7 +32,7 @@ export function PageDetail({
|
|||||||
actions?: ReactNode[];
|
actions?: ReactNode[];
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{breadcrumbs && breadcrumbs.length > 0 && (
|
{breadcrumbs && breadcrumbs.length > 0 && (
|
||||||
<Paper p="xs" radius="xs" shadow="xs">
|
<Paper p="xs" radius="xs" shadow="xs">
|
||||||
<BreadcrumbList
|
<BreadcrumbList
|
||||||
@@ -42,13 +42,13 @@ export function PageDetail({
|
|||||||
</Paper>
|
</Paper>
|
||||||
)}
|
)}
|
||||||
<Paper p="xs" radius="xs" shadow="xs">
|
<Paper p="xs" radius="xs" shadow="xs">
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Group position="apart" noWrap={true}>
|
<Group justify="apart" wrap="nowrap">
|
||||||
<Group position="left" noWrap={true}>
|
<Group justify="left" wrap="nowrap">
|
||||||
{imageUrl && (
|
{imageUrl && (
|
||||||
<ApiImage src={imageUrl} radius="sm" height={64} width={64} />
|
<ApiImage src={imageUrl} radius="sm" height={64} width={64} />
|
||||||
)}
|
)}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{title && <StylishText size="lg">{title}</StylishText>}
|
{title && <StylishText size="lg">{title}</StylishText>}
|
||||||
{subtitle && (
|
{subtitle && (
|
||||||
<Text size="md" truncate>
|
<Text size="md" truncate>
|
||||||
@@ -59,12 +59,12 @@ export function PageDetail({
|
|||||||
</Group>
|
</Group>
|
||||||
<Space />
|
<Space />
|
||||||
{detail}
|
{detail}
|
||||||
<Group position="right" spacing="xs" noWrap>
|
<Group justify="right" gap="xs" wrap="nowrap">
|
||||||
{badges}
|
{badges}
|
||||||
</Group>
|
</Group>
|
||||||
<Space />
|
<Space />
|
||||||
{actions && (
|
{actions && (
|
||||||
<Group spacing={5} position="right">
|
<Group gap={5} justify="right">
|
||||||
{actions.map((action, idx) => (
|
{actions.map((action, idx) => (
|
||||||
<Fragment key={idx}>{action}</Fragment>
|
<Fragment key={idx}>{action}</Fragment>
|
||||||
))}
|
))}
|
||||||
|
@@ -161,7 +161,7 @@ function BasePanelGroup({
|
|||||||
width: '100%'
|
width: '100%'
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
{panel.showHeadline !== false && (
|
{panel.showHeadline !== false && (
|
||||||
<>
|
<>
|
||||||
<StylishText size="xl">{panel.label}</StylishText>
|
<StylishText size="xl">{panel.label}</StylishText>
|
||||||
|
@@ -61,7 +61,7 @@ export function PartCategoryTree({
|
|||||||
<Group
|
<Group
|
||||||
position="apart"
|
position="apart"
|
||||||
key={node.id}
|
key={node.id}
|
||||||
noWrap={true}
|
wrap="nowrap"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onClose();
|
onClose();
|
||||||
navigate(`/part/category/${node.id}`);
|
navigate(`/part/category/${node.id}`);
|
||||||
@@ -148,13 +148,13 @@ export function PartCategoryTree({
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
title={
|
title={
|
||||||
<Group position="left" p="ms" spacing="md" noWrap={true}>
|
<Group justify="left" p="ms" gap="md" wrap="nowrap">
|
||||||
<IconSitemap />
|
<IconSitemap />
|
||||||
<StylishText size="lg">{t`Part Categories`}</StylishText>
|
<StylishText size="lg">{t`Part Categories`}</StylishText>
|
||||||
</Group>
|
</Group>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={treeQuery.isFetching} />
|
<LoadingOverlay visible={treeQuery.isFetching} />
|
||||||
<ReactTree
|
<ReactTree
|
||||||
nodes={treeQuery.data ?? []}
|
nodes={treeQuery.data ?? []}
|
||||||
|
@@ -68,8 +68,8 @@ function QueryResultGroup({
|
|||||||
return (
|
return (
|
||||||
<Paper shadow="sm" radius="xs" p="md" key={`paper-${query.model}`}>
|
<Paper shadow="sm" radius="xs" p="md" key={`paper-${query.model}`}>
|
||||||
<Stack key={`stack-${query.model}`}>
|
<Stack key={`stack-${query.model}`}>
|
||||||
<Group position="apart" noWrap={true}>
|
<Group justify="apart" wrap="nowrap">
|
||||||
<Group position="left" spacing={5} noWrap={true}>
|
<Group justify="left" gap={5} wrap="nowrap">
|
||||||
<Text size="lg">{model.label_multiple}</Text>
|
<Text size="lg">{model.label_multiple}</Text>
|
||||||
<Text size="sm" italic>
|
<Text size="sm" italic>
|
||||||
{' '}
|
{' '}
|
||||||
@@ -331,7 +331,7 @@ export function SearchDrawer({
|
|||||||
withCloseButton={false}
|
withCloseButton={false}
|
||||||
styles={{ header: { width: '100%' }, title: { width: '100%' } }}
|
styles={{ header: { width: '100%' }, title: { width: '100%' } }}
|
||||||
title={
|
title={
|
||||||
<Group position="apart" spacing={1} noWrap={true}>
|
<Group justify="apart" gap={1} wrap="nowrap">
|
||||||
<TextInput
|
<TextInput
|
||||||
placeholder={t`Enter search text`}
|
placeholder={t`Enter search text`}
|
||||||
radius="xs"
|
radius="xs"
|
||||||
@@ -392,7 +392,7 @@ export function SearchDrawer({
|
|||||||
</Center>
|
</Center>
|
||||||
)}
|
)}
|
||||||
{!searchQuery.isFetching && !searchQuery.isError && (
|
{!searchQuery.isFetching && !searchQuery.isError && (
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
{queryResults.map((query, idx) => (
|
{queryResults.map((query, idx) => (
|
||||||
<QueryResultGroup
|
<QueryResultGroup
|
||||||
key={idx}
|
key={idx}
|
||||||
|
@@ -22,7 +22,7 @@ export function SettingsHeader({
|
|||||||
switch_link?: string;
|
switch_link?: string;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<Stack spacing="0" ml={'sm'}>
|
<Stack gap="0" ml={'sm'}>
|
||||||
<Group>
|
<Group>
|
||||||
<Title order={3}>{title}</Title>
|
<Title order={3}>{title}</Title>
|
||||||
{shorthand && <Text c="dimmed">({shorthand})</Text>}
|
{shorthand && <Text c="dimmed">({shorthand})</Text>}
|
||||||
|
@@ -53,7 +53,7 @@ export function StockLocationTree({
|
|||||||
<Group
|
<Group
|
||||||
position="apart"
|
position="apart"
|
||||||
key={node.id}
|
key={node.id}
|
||||||
noWrap={true}
|
wrap="nowrap"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onClose();
|
onClose();
|
||||||
navigate(`/stock/location/${node.id}`);
|
navigate(`/stock/location/${node.id}`);
|
||||||
@@ -88,13 +88,13 @@ export function StockLocationTree({
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
title={
|
title={
|
||||||
<Group position="left" noWrap={true} spacing="md" p="md">
|
<Group justify="left" wrap="nowrap" gap="md" p="md">
|
||||||
<IconSitemap />
|
<IconSitemap />
|
||||||
<StylishText size="lg">{t`Stock Locations`}</StylishText>
|
<StylishText size="lg">{t`Stock Locations`}</StylishText>
|
||||||
</Group>
|
</Group>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={treeQuery.isFetching} />
|
<LoadingOverlay visible={treeQuery.isFetching} />
|
||||||
<ReactTree
|
<ReactTree
|
||||||
nodes={treeQuery.data ?? []}
|
nodes={treeQuery.data ?? []}
|
||||||
|
@@ -113,8 +113,8 @@ export function RenderInlineModel({
|
|||||||
// TODO: Handle URL
|
// TODO: Handle URL
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group spacing="xs" position="apart" noWrap={true}>
|
<Group gap="xs" justify="apart" wrap="nowrap">
|
||||||
<Group spacing="xs" position="left" noWrap={true}>
|
<Group gap="xs" justify="left" wrap="nowrap">
|
||||||
{image && Thumbnail({ src: image, size: 18 })}
|
{image && Thumbnail({ src: image, size: 18 })}
|
||||||
<Text size="sm">{primary}</Text>
|
<Text size="sm">{primary}</Text>
|
||||||
{secondary && <Text size="xs">{secondary}</Text>}
|
{secondary && <Text size="xs">{secondary}</Text>}
|
||||||
|
@@ -137,7 +137,7 @@ function SettingValue({
|
|||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
return valueText ? (
|
return valueText ? (
|
||||||
<Group spacing="xs" position="right">
|
<Group gap="xs" justify="right">
|
||||||
<Space />
|
<Space />
|
||||||
<Button variant="subtle" onClick={onEditButton}>
|
<Button variant="subtle" onClick={onEditButton}>
|
||||||
{valueText}
|
{valueText}
|
||||||
@@ -177,8 +177,8 @@ export function SettingItem({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper style={style}>
|
<Paper style={style}>
|
||||||
<Group position="apart" p="3">
|
<Group justify="apart" p="3">
|
||||||
<Stack spacing="2" p="4px">
|
<Stack gap="2" p="4px">
|
||||||
<Text>
|
<Text>
|
||||||
{setting.name}
|
{setting.name}
|
||||||
{setting.required ? ' *' : ''}
|
{setting.required ? ' *' : ''}
|
||||||
|
@@ -35,7 +35,7 @@ export function SettingList({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{(keys || allKeys).map((key, i) => {
|
{(keys || allKeys).map((key, i) => {
|
||||||
const setting = settingsState?.settings?.find(
|
const setting = settingsState?.settings?.find(
|
||||||
(s: any) => s.key === key
|
(s: any) => s.key === key
|
||||||
|
@@ -134,7 +134,7 @@ function WidgetControlBar({
|
|||||||
useHotkeys([['mod+E', () => editFnc()]]);
|
useHotkeys([['mod+E', () => editFnc()]]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="right">
|
<Group justify="right">
|
||||||
<Menu
|
<Menu
|
||||||
shadow="md"
|
shadow="md"
|
||||||
width={200}
|
width={200}
|
||||||
|
@@ -244,7 +244,7 @@ export function openModalApiForm(props: OpenApiFormProps) {
|
|||||||
props.onClose ? props.onClose() : null;
|
props.onClose ? props.onClose() : null;
|
||||||
},
|
},
|
||||||
children: (
|
children: (
|
||||||
<Stack spacing={'xs'}>
|
<Stack gap={'xs'}>
|
||||||
<Divider />
|
<Divider />
|
||||||
<ApiForm id={modalId} props={props} optionsLoading={false} />
|
<ApiForm id={modalId} props={props} optionsLoading={false} />
|
||||||
</Stack>
|
</Stack>
|
||||||
|
@@ -62,7 +62,7 @@ export function useApiFormModal(props: ApiFormModalProps) {
|
|||||||
closeOnClickOutside: formProps.closeOnClickOutside,
|
closeOnClickOutside: formProps.closeOnClickOutside,
|
||||||
size: props.size ?? 'xl',
|
size: props.size ?? 'xl',
|
||||||
children: (
|
children: (
|
||||||
<Stack spacing={'xs'}>
|
<Stack gap={'xs'}>
|
||||||
<Divider />
|
<Divider />
|
||||||
<OptionsApiForm props={formProps} id={id} />
|
<OptionsApiForm props={formProps} id={id} />
|
||||||
</Stack>
|
</Stack>
|
||||||
|
@@ -22,7 +22,7 @@ export default function Logged_In() {
|
|||||||
<Text size="lg">
|
<Text size="lg">
|
||||||
<Trans>Checking if you are already logged in</Trans>
|
<Trans>Checking if you are already logged in</Trans>
|
||||||
</Text>
|
</Text>
|
||||||
<Group position="center">
|
<Group justify="center">
|
||||||
<Loader />
|
<Loader />
|
||||||
</Group>
|
</Group>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
@@ -240,14 +240,14 @@ export default function Scan() {
|
|||||||
|
|
||||||
if (uniqueObjectTypes.length === 0) {
|
if (uniqueObjectTypes.length === 0) {
|
||||||
return (
|
return (
|
||||||
<Group spacing={0}>
|
<Group gap={0}>
|
||||||
<IconQuestionMark color="orange" />
|
<IconQuestionMark color="orange" />
|
||||||
<Trans>Selected elements are not known</Trans>
|
<Trans>Selected elements are not known</Trans>
|
||||||
</Group>
|
</Group>
|
||||||
);
|
);
|
||||||
} else if (uniqueObjectTypes.length > 1) {
|
} else if (uniqueObjectTypes.length > 1) {
|
||||||
return (
|
return (
|
||||||
<Group spacing={0}>
|
<Group gap={0}>
|
||||||
<IconAlertCircle color="orange" />
|
<IconAlertCircle color="orange" />
|
||||||
<Trans>Multiple object types selected</Trans>
|
<Trans>Multiple object types selected</Trans>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -270,8 +270,8 @@ export default function Scan() {
|
|||||||
// rendering
|
// rendering
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Group position="left">
|
<Group justify="left">
|
||||||
<StylishText>
|
<StylishText>
|
||||||
<Trans>Scan Page</Trans>
|
<Trans>Scan Page</Trans>
|
||||||
</StylishText>
|
</StylishText>
|
||||||
@@ -287,8 +287,8 @@ export default function Scan() {
|
|||||||
<Grid maw={'100%'}>
|
<Grid maw={'100%'}>
|
||||||
<Col span={4}>
|
<Col span={4}>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<TitleWithDoc
|
<TitleWithDoc
|
||||||
order={3}
|
order={3}
|
||||||
text={t`Select the input method you want to use to scan items.`}
|
text={t`Select the input method you want to use to scan items.`}
|
||||||
@@ -306,7 +306,7 @@ export default function Scan() {
|
|||||||
</Group>
|
</Group>
|
||||||
{inp}
|
{inp}
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack spacing={0}>
|
<Stack gap={0}>
|
||||||
<TitleWithDoc
|
<TitleWithDoc
|
||||||
order={3}
|
order={3}
|
||||||
text={t`Depending on the selected parts actions will be shown here. Not all barcode types are supported currently.`}
|
text={t`Depending on the selected parts actions will be shown here. Not all barcode types are supported currently.`}
|
||||||
@@ -355,7 +355,7 @@ export default function Scan() {
|
|||||||
</Stack>
|
</Stack>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={8}>
|
<Col span={8}>
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<TitleWithDoc
|
<TitleWithDoc
|
||||||
order={3}
|
order={3}
|
||||||
text={t`History is locally kept in this browser.`}
|
text={t`History is locally kept in this browser.`}
|
||||||
@@ -696,8 +696,8 @@ function InputImageBarcode({ action }: inputProps) {
|
|||||||
}, [cameraValue]);
|
}, [cameraValue]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
<Select
|
<Select
|
||||||
value={cameraValue}
|
value={cameraValue}
|
||||||
onChange={setCameraValue}
|
onChange={setCameraValue}
|
||||||
|
@@ -35,7 +35,7 @@ export function AccountDetailPanel() {
|
|||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
{editing ? (
|
{editing ? (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<TextInput
|
<TextInput
|
||||||
label="first name"
|
label="first name"
|
||||||
placeholder={t`First name`}
|
placeholder={t`First name`}
|
||||||
@@ -46,14 +46,14 @@ export function AccountDetailPanel() {
|
|||||||
placeholder={t`Last name`}
|
placeholder={t`Last name`}
|
||||||
{...form.getInputProps('last_name')}
|
{...form.getInputProps('last_name')}
|
||||||
/>
|
/>
|
||||||
<Group position="right" mt="md">
|
<Group justify="right" mt="md">
|
||||||
<Button type="submit">
|
<Button type="submit">
|
||||||
<Trans>Submit</Trans>
|
<Trans>Submit</Trans>
|
||||||
</Button>
|
</Button>
|
||||||
</Group>
|
</Group>
|
||||||
</Stack>
|
</Stack>
|
||||||
) : (
|
) : (
|
||||||
<Stack spacing="0">
|
<Stack gap="0">
|
||||||
<Text>
|
<Text>
|
||||||
<Trans>First name: </Trans>
|
<Trans>First name: </Trans>
|
||||||
{form.values.first_name}
|
{form.values.first_name}
|
||||||
|
@@ -137,7 +137,7 @@ function EmailContent({}: {}) {
|
|||||||
key={link.id}
|
key={link.id}
|
||||||
value={String(link.id)}
|
value={String(link.id)}
|
||||||
label={
|
label={
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
{link.email}
|
{link.email}
|
||||||
{link.primary && (
|
{link.primary && (
|
||||||
<Badge color="blue">
|
<Badge color="blue">
|
||||||
@@ -251,7 +251,7 @@ function SsoContent({ dataProvider }: { dataProvider: any | undefined }) {
|
|||||||
variant="outline"
|
variant="outline"
|
||||||
disabled={!provider.configured}
|
disabled={!provider.configured}
|
||||||
>
|
>
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
{provider.display_name}
|
{provider.display_name}
|
||||||
{provider.configured == false && <IconAlertCircle />}
|
{provider.configured == false && <IconAlertCircle />}
|
||||||
</Group>
|
</Group>
|
||||||
@@ -308,7 +308,7 @@ function SsoContent({ dataProvider }: { dataProvider: any | undefined }) {
|
|||||||
{currentProviders === undefined ? (
|
{currentProviders === undefined ? (
|
||||||
<Trans>Loading</Trans>
|
<Trans>Loading</Trans>
|
||||||
) : (
|
) : (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{currentProviders.map((provider: any) => (
|
{currentProviders.map((provider: any) => (
|
||||||
<ProviderButton key={provider.id} provider={provider} />
|
<ProviderButton key={provider.id} provider={provider} />
|
||||||
))}
|
))}
|
||||||
|
@@ -97,7 +97,7 @@ export default function AdminCenter() {
|
|||||||
label: t`Project Codes`,
|
label: t`Project Codes`,
|
||||||
icon: <IconListDetails />,
|
icon: <IconListDetails />,
|
||||||
content: (
|
content: (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<GlobalSettingList keys={['PROJECT_CODES_ENABLED']} />
|
<GlobalSettingList keys={['PROJECT_CODES_ENABLED']} />
|
||||||
<Divider />
|
<Divider />
|
||||||
<ProjectCodeTable />
|
<ProjectCodeTable />
|
||||||
@@ -144,7 +144,7 @@ export default function AdminCenter() {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const QuickAction = () => (
|
const QuickAction = () => (
|
||||||
<Stack spacing={'xs'} ml={'sm'}>
|
<Stack gap={'xs'} ml={'sm'}>
|
||||||
<Title order={5}>
|
<Title order={5}>
|
||||||
<Trans>Quick Actions</Trans>
|
<Trans>Quick Actions</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -167,7 +167,7 @@ export default function AdminCenter() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<SettingsHeader
|
<SettingsHeader
|
||||||
title={t`Admin Center`}
|
title={t`Admin Center`}
|
||||||
subtitle={t`Advanced Options`}
|
subtitle={t`Advanced Options`}
|
||||||
|
@@ -38,7 +38,7 @@ export default function MachineManagementPanel() {
|
|||||||
|
|
||||||
<Space h="10px" />
|
<Space h="10px" />
|
||||||
|
|
||||||
<Stack spacing={'xs'}>
|
<Stack gap={'xs'}>
|
||||||
<Title order={5}>
|
<Title order={5}>
|
||||||
<Trans>Machine types</Trans>
|
<Trans>Machine types</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -47,7 +47,7 @@ export default function MachineManagementPanel() {
|
|||||||
|
|
||||||
<Space h="10px" />
|
<Space h="10px" />
|
||||||
|
|
||||||
<Stack spacing={'xs'}>
|
<Stack gap={'xs'}>
|
||||||
<Group>
|
<Group>
|
||||||
<Title order={5}>
|
<Title order={5}>
|
||||||
<Trans>Machine Error Stack</Trans>
|
<Trans>Machine Error Stack</Trans>
|
||||||
|
@@ -8,7 +8,7 @@ import { UserTable } from '../../../../tables/settings/UserTable';
|
|||||||
|
|
||||||
export default function UserManagementPanel() {
|
export default function UserManagementPanel() {
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Title order={5}>
|
<Title order={5}>
|
||||||
<Trans>Users</Trans>
|
<Trans>Users</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -21,7 +21,7 @@ export default function UserManagementPanel() {
|
|||||||
|
|
||||||
<Divider />
|
<Divider />
|
||||||
|
|
||||||
<Stack spacing={0}>
|
<Stack gap={0}>
|
||||||
<Text>
|
<Text>
|
||||||
<Trans>Settings</Trans>
|
<Trans>Settings</Trans>
|
||||||
</Text>
|
</Text>
|
||||||
|
@@ -288,7 +288,7 @@ export default function SystemSettings() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<SettingsHeader
|
<SettingsHeader
|
||||||
title={t`System Settings`}
|
title={t`System Settings`}
|
||||||
subtitle={server.instance || ''}
|
subtitle={server.instance || ''}
|
||||||
|
@@ -110,7 +110,7 @@ export default function UserSettings() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<SettingsHeader
|
<SettingsHeader
|
||||||
title={t`Account Settings`}
|
title={t`Account Settings`}
|
||||||
subtitle={`${user?.first_name} ${user?.last_name}`}
|
subtitle={`${user?.first_name} ${user?.last_name}`}
|
||||||
|
@@ -349,7 +349,7 @@ export default function BuildDetail() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editBuild.modal}
|
{editBuild.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={build.reference}
|
title={build.reference}
|
||||||
|
@@ -296,7 +296,7 @@ export default function CompanyDetail(props: CompanyDetailProps) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editCompany.modal}
|
{editCompany.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`Company` + `: ${company.name}`}
|
title={t`Company` + `: ${company.name}`}
|
||||||
|
@@ -227,7 +227,7 @@ export default function ManufacturerPartDetail() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editManufacturerPart.modal}
|
{editManufacturerPart.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`ManufacturerPart`}
|
title={t`ManufacturerPart`}
|
||||||
|
@@ -272,7 +272,7 @@ export default function SupplierPartDetail() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editSuppliertPart.modal}
|
{editSuppliertPart.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`Supplier Part`}
|
title={t`Supplier Part`}
|
||||||
|
@@ -222,7 +222,7 @@ export default function CategoryDetail({}: {}) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editCategory.modal}
|
{editCategory.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PartCategoryTree
|
<PartCategoryTree
|
||||||
opened={treeOpen}
|
opened={treeOpen}
|
||||||
|
@@ -452,7 +452,7 @@ export default function PartDetail() {
|
|||||||
/>
|
/>
|
||||||
</Grid.Col>
|
</Grid.Col>
|
||||||
<Grid.Col span={8}>
|
<Grid.Col span={8}>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<table>
|
<table>
|
||||||
<PartIcons part={part} />
|
<PartIcons part={part} />
|
||||||
</table>
|
</table>
|
||||||
@@ -752,7 +752,7 @@ export default function PartDetail() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editPart.modal}
|
{editPart.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PartCategoryTree
|
<PartCategoryTree
|
||||||
opened={treeOpen}
|
opened={treeOpen}
|
||||||
|
@@ -313,7 +313,7 @@ export default function PurchaseOrderDetail() {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{editPurchaseOrder.modal}
|
{editPurchaseOrder.modal}
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`Purchase Order` + `: ${order.reference}`}
|
title={t`Purchase Order` + `: ${order.reference}`}
|
||||||
|
@@ -235,7 +235,7 @@ export default function ReturnOrderDetail() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`Return Order` + `: ${order.reference}`}
|
title={t`Return Order` + `: ${order.reference}`}
|
||||||
|
@@ -259,7 +259,7 @@ export default function SalesOrderDetail() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<LoadingOverlay visible={instanceQuery.isFetching} />
|
<LoadingOverlay visible={instanceQuery.isFetching} />
|
||||||
<PageDetail
|
<PageDetail
|
||||||
title={t`Sales Order` + `: ${order.reference}`}
|
title={t`Sales Order` + `: ${order.reference}`}
|
||||||
|
@@ -41,12 +41,12 @@ function FilterItem({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper p="sm" shadow="sm" radius="xs">
|
<Paper p="sm" shadow="sm" radius="xs">
|
||||||
<Group position="apart" key={flt.name}>
|
<Group justify="apart" key={flt.name}>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Text size="sm">{flt.label}</Text>
|
<Text size="sm">{flt.label}</Text>
|
||||||
<Text size="xs">{flt.description}</Text>
|
<Text size="xs">{flt.description}</Text>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Group position="right">
|
<Group justify="right">
|
||||||
<Badge>{flt.displayValue ?? flt.value}</Badge>
|
<Badge>{flt.displayValue ?? flt.value}</Badge>
|
||||||
<Tooltip label={t`Remove filter`} withinPortal={true}>
|
<Tooltip label={t`Remove filter`} withinPortal={true}>
|
||||||
<CloseButton size="md" color="red" onClick={removeFilter} />
|
<CloseButton size="md" color="red" onClick={removeFilter} />
|
||||||
@@ -138,7 +138,7 @@ function FilterAddGroup({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Divider />
|
<Divider />
|
||||||
<Select
|
<Select
|
||||||
data={filterOptions}
|
data={filterOptions}
|
||||||
@@ -195,14 +195,14 @@ export function FilterSelectDrawer({
|
|||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
title={<StylishText size="lg">{t`Table Filters`}</StylishText>}
|
title={<StylishText size="lg">{t`Table Filters`}</StylishText>}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{hasFilters &&
|
{hasFilters &&
|
||||||
tableState.activeFilters?.map((f) => (
|
tableState.activeFilters?.map((f) => (
|
||||||
<FilterItem key={f.name} flt={f} tableState={tableState} />
|
<FilterItem key={f.name} flt={f} tableState={tableState} />
|
||||||
))}
|
))}
|
||||||
{hasFilters && <Divider />}
|
{hasFilters && <Divider />}
|
||||||
{addFilter && (
|
{addFilter && (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<FilterAddGroup
|
<FilterAddGroup
|
||||||
tableState={tableState}
|
tableState={tableState}
|
||||||
availableFilters={availableFilters}
|
availableFilters={availableFilters}
|
||||||
|
@@ -548,9 +548,9 @@ export function InvenTreeTable<T = any>({
|
|||||||
onClose={() => setFiltersVisible(false)}
|
onClose={() => setFiltersVisible(false)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<Stack spacing="sm">
|
<Stack gap="sm">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Group position="left" key="custom-actions" spacing={5}>
|
<Group justify="left" key="custom-actions" gap={5}>
|
||||||
{tableProps.tableActions?.map((group, idx) => (
|
{tableProps.tableActions?.map((group, idx) => (
|
||||||
<Fragment key={idx}>{group}</Fragment>
|
<Fragment key={idx}>{group}</Fragment>
|
||||||
))}
|
))}
|
||||||
@@ -583,7 +583,7 @@ export function InvenTreeTable<T = any>({
|
|||||||
)}
|
)}
|
||||||
</Group>
|
</Group>
|
||||||
<Space />
|
<Space />
|
||||||
<Group position="right" spacing={5}>
|
<Group justify="right" gap={5}>
|
||||||
{tableProps.enableSearch && (
|
{tableProps.enableSearch && (
|
||||||
<TableSearchInput
|
<TableSearchInput
|
||||||
searchCallback={(term: string) =>
|
searchCallback={(term: string) =>
|
||||||
|
@@ -29,14 +29,14 @@ export function TableHoverCard({
|
|||||||
return (
|
return (
|
||||||
<HoverCard withinPortal={true}>
|
<HoverCard withinPortal={true}>
|
||||||
<HoverCard.Target>
|
<HoverCard.Target>
|
||||||
<Group spacing="xs" position="apart" noWrap={true}>
|
<Group gap="xs" justify="apart" wrap="nowrap">
|
||||||
{value}
|
{value}
|
||||||
<IconInfoCircle size="16" color="blue" />
|
<IconInfoCircle size="16" color="blue" />
|
||||||
</Group>
|
</Group>
|
||||||
</HoverCard.Target>
|
</HoverCard.Target>
|
||||||
<HoverCard.Dropdown>
|
<HoverCard.Dropdown>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Group spacing="xs" position="left">
|
<Group gap="xs" justify="left">
|
||||||
<IconInfoCircle size="16" color="blue" />
|
<IconInfoCircle size="16" color="blue" />
|
||||||
<Text weight="bold">{title}</Text>
|
<Text weight="bold">{title}</Text>
|
||||||
</Group>
|
</Group>
|
||||||
|
@@ -149,7 +149,7 @@ export function BomTable({
|
|||||||
|
|
||||||
let text =
|
let text =
|
||||||
available_stock <= 0 ? (
|
available_stock <= 0 ? (
|
||||||
<Text color="red" italic>{t`No stock`}</Text>
|
<Text c="red" italic>{t`No stock`}</Text>
|
||||||
) : (
|
) : (
|
||||||
available_stock
|
available_stock
|
||||||
);
|
);
|
||||||
|
@@ -142,7 +142,7 @@ export default function BuildLineTable({ params = {} }: { params?: any }) {
|
|||||||
ordering: 'unit_quantity',
|
ordering: 'unit_quantity',
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text>{record.bom_item_detail?.quantity}</Text>
|
<Text>{record.bom_item_detail?.quantity}</Text>
|
||||||
{record?.part_detail?.units && (
|
{record?.part_detail?.units && (
|
||||||
<Text size="xs">[{record.part_detail.units}]</Text>
|
<Text size="xs">[{record.part_detail.units}]</Text>
|
||||||
@@ -156,7 +156,7 @@ export default function BuildLineTable({ params = {} }: { params?: any }) {
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text>{record.quantity}</Text>
|
<Text>{record.quantity}</Text>
|
||||||
{record?.part_detail?.units && (
|
{record?.part_detail?.units && (
|
||||||
<Text size="xs">[{record.part_detail.units}]</Text>
|
<Text size="xs">[{record.part_detail.units}]</Text>
|
||||||
|
@@ -39,7 +39,7 @@ export function CompanyTable({
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group spacing="xs" noWrap={true}>
|
<Group gap="xs" wrap="nowrap">
|
||||||
<Thumbnail
|
<Thumbnail
|
||||||
src={record.thumbnail ?? record.image ?? ''}
|
src={record.thumbnail ?? record.image ?? ''}
|
||||||
alt={record.name}
|
alt={record.name}
|
||||||
|
@@ -54,7 +54,7 @@ function attachmentTableColumns(): TableColumn[] {
|
|||||||
|
|
||||||
render: function (record: any) {
|
render: function (record: any) {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text>{record.upload_date}</Text>
|
<Text>{record.upload_date}</Text>
|
||||||
{record.user_detail && (
|
{record.user_detail && (
|
||||||
<Badge size="xs">{record.user_detail.username}</Badge>
|
<Badge size="xs">{record.user_detail.username}</Badge>
|
||||||
@@ -227,7 +227,7 @@ export function AttachmentTable({
|
|||||||
}, [allowEdit]);
|
}, [allowEdit]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
{pk && pk > 0 && (
|
{pk && pk > 0 && (
|
||||||
<InvenTreeTable
|
<InvenTreeTable
|
||||||
key="attachment-table"
|
key="attachment-table"
|
||||||
@@ -248,7 +248,7 @@ export function AttachmentTable({
|
|||||||
{allowEdit && validPk && (
|
{allowEdit && validPk && (
|
||||||
<Dropzone onDrop={uploadFiles} key="attachment-dropzone">
|
<Dropzone onDrop={uploadFiles} key="attachment-dropzone">
|
||||||
<Dropzone.Idle>
|
<Dropzone.Idle>
|
||||||
<Group position="center">
|
<Group justify="center">
|
||||||
<IconFileUpload size={24} />
|
<IconFileUpload size={24} />
|
||||||
<Text size="sm">{t`Upload attachment`}</Text>
|
<Text size="sm">{t`Upload attachment`}</Text>
|
||||||
</Group>
|
</Group>
|
||||||
|
@@ -206,8 +206,8 @@ function MachineDrawer({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Box></Box>
|
<Box></Box>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
@@ -277,8 +277,8 @@ function MachineDrawer({
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Machine information</Trans>
|
<Trans>Machine information</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -286,10 +286,10 @@ function MachineDrawer({
|
|||||||
<IconRefresh />
|
<IconRefresh />
|
||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
</Group>
|
</Group>
|
||||||
<Stack pos="relative" spacing="xs">
|
<Stack pos="relative" gap="xs">
|
||||||
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
||||||
<InfoItem name={t`Machine Type`}>
|
<InfoItem name={t`Machine Type`}>
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
{machineType ? (
|
{machineType ? (
|
||||||
<DetailDrawerLink
|
<DetailDrawerLink
|
||||||
to={`../type-${machine?.machine_type}`}
|
to={`../type-${machine?.machine_type}`}
|
||||||
@@ -302,7 +302,7 @@ function MachineDrawer({
|
|||||||
</Group>
|
</Group>
|
||||||
</InfoItem>
|
</InfoItem>
|
||||||
<InfoItem name={t`Machine Driver`}>
|
<InfoItem name={t`Machine Driver`}>
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
{machineDriver ? (
|
{machineDriver ? (
|
||||||
<DetailDrawerLink
|
<DetailDrawerLink
|
||||||
to={`../driver-${machine?.driver}`}
|
to={`../driver-${machine?.driver}`}
|
||||||
@@ -333,7 +333,7 @@ function MachineDrawer({
|
|||||||
<Text fz="sm">{machine?.status_text}</Text>
|
<Text fz="sm">{machine?.status_text}</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
</InfoItem>
|
</InfoItem>
|
||||||
<Group position="apart" spacing="xs">
|
<Group justify="apart" gap="xs">
|
||||||
<Text fz="sm" fw={700}>
|
<Text fz="sm" fw={700}>
|
||||||
<Trans>Errors</Trans>:
|
<Trans>Errors</Trans>:
|
||||||
</Text>
|
</Text>
|
||||||
@@ -412,7 +412,7 @@ export function MachineListTable({
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
render: function (record) {
|
render: function (record) {
|
||||||
return (
|
return (
|
||||||
<Group position="left" noWrap>
|
<Group justify="left" wrap="nowrap">
|
||||||
<MachineStatusIndicator machine={record} />
|
<MachineStatusIndicator machine={record} />
|
||||||
<Text>{record.name}</Text>
|
<Text>{record.name}</Text>
|
||||||
{record.restart_required && (
|
{record.restart_required && (
|
||||||
@@ -432,7 +432,7 @@ export function MachineListTable({
|
|||||||
(m) => m.slug === record.machine_type
|
(m) => m.slug === record.machine_type
|
||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
<Text>
|
<Text>
|
||||||
{machineType ? machineType.name : record.machine_type}
|
{machineType ? machineType.name : record.machine_type}
|
||||||
</Text>
|
</Text>
|
||||||
@@ -447,7 +447,7 @@ export function MachineListTable({
|
|||||||
render: (record) => {
|
render: (record) => {
|
||||||
const driver = machineDrivers?.find((d) => d.slug === record.driver);
|
const driver = machineDrivers?.find((d) => d.slug === record.driver);
|
||||||
return (
|
return (
|
||||||
<Group spacing="xs">
|
<Group gap="xs">
|
||||||
<Text>{driver ? driver.name : record.driver}</Text>
|
<Text>{driver ? driver.name : record.driver}</Text>
|
||||||
{!record.is_driver_available && <UnavailableIndicator />}
|
{!record.is_driver_available && <UnavailableIndicator />}
|
||||||
</Group>
|
</Group>
|
||||||
|
@@ -78,7 +78,7 @@ function MachineTypeDrawer({ machineTypeSlug }: { machineTypeSlug: string }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack>
|
<Stack>
|
||||||
<Group position="center">
|
<Group justify="center">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
{machineType ? machineType.name : machineTypeSlug}
|
{machineType ? machineType.name : machineTypeSlug}
|
||||||
</Title>
|
</Title>
|
||||||
@@ -91,8 +91,8 @@ function MachineTypeDrawer({ machineTypeSlug }: { machineTypeSlug: string }) {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Machine type information</Trans>
|
<Trans>Machine type information</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -101,7 +101,7 @@ function MachineTypeDrawer({ machineTypeSlug }: { machineTypeSlug: string }) {
|
|||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Stack pos="relative" spacing="xs">
|
<Stack pos="relative" gap="xs">
|
||||||
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
||||||
<InfoItem name={t`Name`} value={machineType?.name} type="text" />
|
<InfoItem name={t`Name`} value={machineType?.name} type="text" />
|
||||||
<InfoItem name={t`Slug`} value={machineType?.slug} type="text" />
|
<InfoItem name={t`Slug`} value={machineType?.slug} type="text" />
|
||||||
@@ -138,7 +138,7 @@ function MachineTypeDrawer({ machineTypeSlug }: { machineTypeSlug: string }) {
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Available drivers</Trans>
|
<Trans>Available drivers</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -182,7 +182,7 @@ function MachineDriverDrawer({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack>
|
<Stack>
|
||||||
<Group position="center">
|
<Group justify="center">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
{machineDriver ? machineDriver.name : machineDriverSlug}
|
{machineDriver ? machineDriver.name : machineDriverSlug}
|
||||||
</Title>
|
</Title>
|
||||||
@@ -195,8 +195,8 @@ function MachineDriverDrawer({
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Machine driver information</Trans>
|
<Trans>Machine driver information</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -205,7 +205,7 @@ function MachineDriverDrawer({
|
|||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Stack pos="relative" spacing="xs">
|
<Stack pos="relative" gap="xs">
|
||||||
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
||||||
<InfoItem name={t`Name`} value={machineDriver?.name} type="text" />
|
<InfoItem name={t`Name`} value={machineDriver?.name} type="text" />
|
||||||
<InfoItem name={t`Slug`} value={machineDriver?.slug} type="text" />
|
<InfoItem name={t`Slug`} value={machineDriver?.slug} type="text" />
|
||||||
@@ -250,7 +250,7 @@ function MachineDriverDrawer({
|
|||||||
value={machineDriver?.is_builtin}
|
value={machineDriver?.is_builtin}
|
||||||
type="boolean"
|
type="boolean"
|
||||||
/>
|
/>
|
||||||
<Group position="apart" spacing="xs">
|
<Group justify="apart" gap="xs">
|
||||||
<Text fz="sm" fw={700}>
|
<Text fz="sm" fw={700}>
|
||||||
<Trans>Errors</Trans>:
|
<Trans>Errors</Trans>:
|
||||||
</Text>
|
</Text>
|
||||||
@@ -276,7 +276,7 @@ function MachineDriverDrawer({
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Machines</Trans>
|
<Trans>Machines</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
|
@@ -67,7 +67,7 @@ function ParameterCell({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Group grow ref={ref} position="apart">
|
<Group grow ref={ref} justify="apart">
|
||||||
<Group grow style={{ flex: 1 }}>
|
<Group grow style={{ flex: 1 }}>
|
||||||
<TableHoverCard
|
<TableHoverCard
|
||||||
value={value ?? '-'}
|
value={value ?? '-'}
|
||||||
|
@@ -94,7 +94,7 @@ export default function PartCategoryTemplateTable({}: {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="apart" grow>
|
<Group justify="apart" grow>
|
||||||
<Text>{record.default_value}</Text>
|
<Text>{record.default_value}</Text>
|
||||||
{units && <Text size="xs">{units}</Text>}
|
{units && <Text size="xs">{units}</Text>}
|
||||||
</Group>
|
</Group>
|
||||||
|
@@ -140,7 +140,7 @@ function partTableColumns(): TableColumn[] {
|
|||||||
return (
|
return (
|
||||||
<TableHoverCard
|
<TableHoverCard
|
||||||
value={
|
value={
|
||||||
<Group spacing="xs" position="left" noWrap>
|
<Group gap="xs" justify="left" wrap="nowrap">
|
||||||
<Text color={color}>{text}</Text>
|
<Text color={color}>{text}</Text>
|
||||||
{record.units && (
|
{record.units && (
|
||||||
<Text size="xs" color={color}>
|
<Text size="xs" color={color}>
|
||||||
|
@@ -38,7 +38,7 @@ export default function PartTestTemplateTable({ partId }: { partId: number }) {
|
|||||||
return (
|
return (
|
||||||
<Text
|
<Text
|
||||||
weight={record.required && 700}
|
weight={record.required && 700}
|
||||||
color={record.enabled ? undefined : 'red'}
|
c={record.enabled ? undefined : 'red'}
|
||||||
>
|
>
|
||||||
{record.test_name}
|
{record.test_name}
|
||||||
</Text>
|
</Text>
|
||||||
|
@@ -185,7 +185,7 @@ export function PartThumbTable({
|
|||||||
|
|
||||||
<Divider />
|
<Divider />
|
||||||
<Paper p="sm">
|
<Paper p="sm">
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<TextInput
|
<TextInput
|
||||||
placeholder={t`Search...`}
|
placeholder={t`Search...`}
|
||||||
onChange={(event) => {
|
onChange={(event) => {
|
||||||
|
@@ -47,8 +47,8 @@ export function RelatedPartTable({ partId }: { partId: number }): ReactNode {
|
|||||||
let part = getPart(record);
|
let part = getPart(record);
|
||||||
return (
|
return (
|
||||||
<Group
|
<Group
|
||||||
noWrap={true}
|
wrap="nowrap"
|
||||||
position="left"
|
justify="left"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
navigate(`/part/${part.pk}/`);
|
navigate(`/part/${part.pk}/`);
|
||||||
}}
|
}}
|
||||||
|
@@ -119,11 +119,11 @@ export function PluginDrawer({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing={'xs'}>
|
<Stack gap={'xs'}>
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Box></Box>
|
<Box></Box>
|
||||||
|
|
||||||
<Group spacing={'xs'}>
|
<Group gap={'xs'}>
|
||||||
{plugin && PluginIcon(plugin)}
|
{plugin && PluginIcon(plugin)}
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
{plugin?.meta?.human_name ?? plugin?.name ?? '-'}
|
{plugin?.meta?.human_name ?? plugin?.name ?? '-'}
|
||||||
@@ -161,11 +161,11 @@ export function PluginDrawer({
|
|||||||
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
<LoadingOverlay visible={isFetching} overlayOpacity={0} />
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Plugin information</Trans>
|
<Trans>Plugin information</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
<Stack pos="relative" spacing="xs">
|
<Stack pos="relative" gap="xs">
|
||||||
<InfoItem type="text" name={t`Name`} value={plugin?.name} />
|
<InfoItem type="text" name={t`Name`} value={plugin?.name} />
|
||||||
<InfoItem
|
<InfoItem
|
||||||
type="text"
|
type="text"
|
||||||
@@ -193,11 +193,11 @@ export function PluginDrawer({
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Package information</Trans>
|
<Trans>Package information</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
<Stack pos="relative" spacing="xs">
|
<Stack pos="relative" gap="xs">
|
||||||
{plugin?.is_package && (
|
{plugin?.is_package && (
|
||||||
<InfoItem
|
<InfoItem
|
||||||
type="text"
|
type="text"
|
||||||
@@ -226,7 +226,7 @@ export function PluginDrawer({
|
|||||||
|
|
||||||
{plugin && plugin.active && (
|
{plugin && plugin.active && (
|
||||||
<Card withBorder>
|
<Card withBorder>
|
||||||
<Stack spacing="md">
|
<Stack gap="md">
|
||||||
<Title order={4}>
|
<Title order={4}>
|
||||||
<Trans>Plugin settings</Trans>
|
<Trans>Plugin settings</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
@@ -290,7 +290,7 @@ export default function PluginListTable() {
|
|||||||
// TODO: Add link to plugin detail page
|
// TODO: Add link to plugin detail page
|
||||||
// TODO: Add custom badges
|
// TODO: Add custom badges
|
||||||
return (
|
return (
|
||||||
<Group position="left">
|
<Group justify="left">
|
||||||
<PluginIcon {...record} />
|
<PluginIcon {...record} />
|
||||||
<Text>{record.name}</Text>
|
<Text>{record.name}</Text>
|
||||||
</Group>
|
</Group>
|
||||||
@@ -344,7 +344,7 @@ export default function PluginListTable() {
|
|||||||
: t`Confirm plugin deactivation`
|
: t`Confirm plugin deactivation`
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Text>
|
<Text>
|
||||||
{active
|
{active
|
||||||
? t`The following plugin will be activated`
|
? t`The following plugin will be activated`
|
||||||
@@ -532,7 +532,7 @@ export default function PluginListTable() {
|
|||||||
icon={<IconInfoCircle />}
|
icon={<IconInfoCircle />}
|
||||||
title={t`Confirm plugin uninstall`}
|
title={t`Confirm plugin uninstall`}
|
||||||
>
|
>
|
||||||
<Stack spacing="xs">
|
<Stack gap="xs">
|
||||||
<Text>{t`The selected plugin will be uninstalled.`}</Text>
|
<Text>{t`The selected plugin will be uninstalled.`}</Text>
|
||||||
<Text>{t`This action cannot be undone.`}</Text>
|
<Text>{t`This action cannot be undone.`}</Text>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
@@ -31,7 +31,7 @@ export default function ScheduledTasksTable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text>{record.last_run}</Text>
|
<Text>{record.last_run}</Text>
|
||||||
{record.success ? (
|
{record.success ? (
|
||||||
<IconCircleCheck color="green" />
|
<IconCircleCheck color="green" />
|
||||||
|
@@ -130,11 +130,11 @@ export function TemplateDrawer({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing="xs" style={{ display: 'flex', flex: '1' }}>
|
<Stack gap="xs" style={{ display: 'flex', flex: '1' }}>
|
||||||
{editTemplate.modal}
|
{editTemplate.modal}
|
||||||
{deleteTemplate.modal}
|
{deleteTemplate.modal}
|
||||||
|
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Box></Box>
|
<Box></Box>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
|
@@ -178,7 +178,7 @@ function stockItemTableColumns(): TableColumn[] {
|
|||||||
return (
|
return (
|
||||||
<TableHoverCard
|
<TableHoverCard
|
||||||
value={
|
value={
|
||||||
<Group spacing="xs" position="left" noWrap={true}>
|
<Group gap="xs" justify="left" wrap="nowrap">
|
||||||
<Text color={color}>{text}</Text>
|
<Text color={color}>{text}</Text>
|
||||||
{part.units && (
|
{part.units && (
|
||||||
<Text size="xs" color={color}>
|
<Text size="xs" color={color}>
|
||||||
|
@@ -132,7 +132,7 @@ export default function StockItemTestResultTable({
|
|||||||
record.stock_item != undefined && record.stock_item != itemId;
|
record.stock_item != undefined && record.stock_item != itemId;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
<Text
|
<Text
|
||||||
italic={installed}
|
italic={installed}
|
||||||
fw={required && 700}
|
fw={required && 700}
|
||||||
@@ -141,7 +141,7 @@ export default function StockItemTestResultTable({
|
|||||||
{!record.templateId && '- '}
|
{!record.templateId && '- '}
|
||||||
{record.test_name ?? record.template_detail?.test_name}
|
{record.test_name ?? record.template_detail?.test_name}
|
||||||
</Text>
|
</Text>
|
||||||
<Group position="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`}>
|
||||||
<Badge color="lightblue" variant="filled">
|
<Badge color="lightblue" variant="filled">
|
||||||
@@ -194,7 +194,7 @@ export default function StockItemTestResultTable({
|
|||||||
title: t`Date`,
|
title: t`Date`,
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
{renderDate(record.date)}
|
{renderDate(record.date)}
|
||||||
{record.user_detail && (
|
{record.user_detail && (
|
||||||
<RenderUser instance={record.user_detail} />
|
<RenderUser instance={record.user_detail} />
|
||||||
@@ -214,7 +214,7 @@ export default function StockItemTestResultTable({
|
|||||||
title: t`Started`,
|
title: t`Started`,
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
{renderDate(record.started_datetime, {
|
{renderDate(record.started_datetime, {
|
||||||
showTime: true,
|
showTime: true,
|
||||||
showSeconds: true
|
showSeconds: true
|
||||||
@@ -229,7 +229,7 @@ export default function StockItemTestResultTable({
|
|||||||
title: t`Finished`,
|
title: t`Finished`,
|
||||||
render: (record: any) => {
|
render: (record: any) => {
|
||||||
return (
|
return (
|
||||||
<Group position="apart">
|
<Group justify="apart">
|
||||||
{renderDate(record.finished_datetime, {
|
{renderDate(record.finished_datetime, {
|
||||||
showTime: true,
|
showTime: true,
|
||||||
showSeconds: true
|
showSeconds: true
|
||||||
|
@@ -18,7 +18,7 @@ export default function MobileAppView() {
|
|||||||
<Center h="100vh">
|
<Center h="100vh">
|
||||||
<Container>
|
<Container>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Title color="red">
|
<Title c="red">
|
||||||
<Trans>Mobile viewport detected</Trans>
|
<Trans>Mobile viewport detected</Trans>
|
||||||
</Title>
|
</Title>
|
||||||
<Text>
|
<Text>
|
||||||
|
Reference in New Issue
Block a user