mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-19 01:25:06 +00:00
97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
import React, { useState } from 'react';
|
|
import { Box, Button, Group } from '@mantine/core';
|
|
import { formatKB } from '../../utils/networkUtils.js';
|
|
|
|
const SizedInstallButton = ({
|
|
latest_size,
|
|
children,
|
|
color,
|
|
loading,
|
|
disabled,
|
|
onClick,
|
|
...buttonProps
|
|
}) => {
|
|
const [hovered, setHovered] = useState(false);
|
|
if (!Number.isFinite(latest_size) || latest_size <= 0) {
|
|
return (
|
|
<Button
|
|
color={color}
|
|
loading={loading}
|
|
disabled={disabled}
|
|
onClick={onClick}
|
|
{...buttonProps}
|
|
>
|
|
{children}
|
|
</Button>
|
|
);
|
|
}
|
|
const isDisabled = disabled || loading;
|
|
const colorVar = color
|
|
? `var(--mantine-color-${color}-filled)`
|
|
: 'var(--mantine-primary-color-filled)';
|
|
return (
|
|
<Group
|
|
gap={0}
|
|
align="stretch"
|
|
wrap="nowrap"
|
|
onMouseEnter={() => {
|
|
if (!isDisabled) setHovered(true);
|
|
}}
|
|
onMouseLeave={() => setHovered(false)}
|
|
>
|
|
<Button
|
|
color={color}
|
|
loading={loading}
|
|
disabled={disabled}
|
|
onClick={onClick}
|
|
styles={
|
|
hovered && !isDisabled
|
|
? {
|
|
root: {
|
|
background: color
|
|
? `var(--mantine-color-${color}-filled-hover)`
|
|
: 'var(--mantine-primary-color-filled-hover)',
|
|
},
|
|
}
|
|
: undefined
|
|
}
|
|
{...buttonProps}
|
|
style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0 }}
|
|
>
|
|
{children}
|
|
</Button>
|
|
<Box
|
|
onClick={!isDisabled ? onClick : undefined}
|
|
style={{
|
|
background: isDisabled
|
|
? colorVar
|
|
: hovered
|
|
? color
|
|
? `var(--mantine-color-${color}-filled-hover)`
|
|
: 'var(--mantine-primary-color-filled-hover)'
|
|
: colorVar,
|
|
filter: isDisabled
|
|
? 'grayscale(1) brightness(0.55)'
|
|
: hovered
|
|
? 'brightness(0.86)'
|
|
: 'brightness(0.82)',
|
|
borderLeft: '1px solid rgba(0,0,0,0.2)',
|
|
borderTopRightRadius: 'var(--mantine-radius-sm)',
|
|
borderBottomRightRadius: 'var(--mantine-radius-sm)',
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
padding: '0 9px',
|
|
fontSize: 11,
|
|
color: '#fff',
|
|
cursor: isDisabled ? 'default' : 'pointer',
|
|
userSelect: 'none',
|
|
whiteSpace: 'nowrap',
|
|
}}
|
|
>
|
|
{formatKB(latest_size)}
|
|
</Box>
|
|
</Group>
|
|
);
|
|
};
|
|
|
|
export default SizedInstallButton;
|