mirror of
https://github.com/inventree/InvenTree.git
synced 2026-05-09 03:03:41 +00:00
d1354fc147
* Move useFilterSet state to the @lib
* Refactor useTable hook into @lib
* Refactor string helper functions
* Refactor constructFormUrl func
* Refactor Boundary component
* Refactor StoredTableState
* More refactoring
* Refactor CopyButton and CopyableCell
* Pass table render func to plugins
* Provide internal wrapper function, while allowing the "api" and "navigate" functions to be provided by the caller
* Adds <InvenTreeTable /> component which is exposed to plugins
* Update frontend versioning
* Update docs
* Handle condition where UI does not provide table rendering function
* Move queryFilters out of custom state
* Fix exported type
* Extract searchParams
- Cannot be used outside of router component
- Only provide when the table is generated internally
* Bump UI version
* Fix for right-click context menu
- Function needs to be defined with the context menu provider
(cherry picked from commit 23f43ffd33)
Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import { t } from '@lingui/core/macro';
|
|
import {
|
|
ActionIcon,
|
|
type ActionIconVariant,
|
|
Button,
|
|
type DefaultMantineColor,
|
|
type FloatingPosition,
|
|
CopyButton as MantineCopyButton,
|
|
type MantineSize,
|
|
Text,
|
|
Tooltip
|
|
} from '@mantine/core';
|
|
import { IconCheck, IconCopy } from '@tabler/icons-react';
|
|
|
|
import type { JSX } from 'react';
|
|
|
|
export function CopyButton({
|
|
value,
|
|
label,
|
|
tooltip,
|
|
disabled,
|
|
tooltipPosition,
|
|
content,
|
|
size,
|
|
color = 'gray',
|
|
variant = 'transparent'
|
|
}: Readonly<{
|
|
value: any;
|
|
label?: string;
|
|
tooltip?: string;
|
|
disabled?: boolean;
|
|
tooltipPosition?: FloatingPosition;
|
|
content?: JSX.Element;
|
|
size?: MantineSize;
|
|
color?: DefaultMantineColor;
|
|
variant?: ActionIconVariant;
|
|
}>) {
|
|
const ButtonComponent = label ? Button : ActionIcon;
|
|
|
|
// Disable the copy button if we are not in a secure context, as the Clipboard API is not available
|
|
if (!window.isSecureContext) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<MantineCopyButton value={value}>
|
|
{({ copied, copy }) => (
|
|
<Tooltip
|
|
label={copied ? t`Copied` : (tooltip ?? t`Copy`)}
|
|
withArrow
|
|
position={tooltipPosition}
|
|
>
|
|
<ButtonComponent
|
|
disabled={disabled}
|
|
color={copied ? 'teal' : color}
|
|
onClick={(e: any) => {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
copy();
|
|
}}
|
|
variant={copied ? 'transparent' : (variant ?? 'transparent')}
|
|
size={size ?? 'sm'}
|
|
>
|
|
{copied ? <IconCheck /> : <IconCopy />}
|
|
{content}
|
|
{label && (
|
|
<Text p={size ?? 'sm'} size={size ?? 'sm'}>
|
|
{label}
|
|
</Text>
|
|
)}
|
|
</ButtonComponent>
|
|
</Tooltip>
|
|
)}
|
|
</MantineCopyButton>
|
|
);
|
|
}
|