feishin/src/renderer/components/virtual-table/cells/full-width-disc-cell.tsx

51 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-05-20 19:21:23 -07:00
import { useState } from 'react';
import { ICellRendererParams } from '@ag-grid-community/core';
import { Group } from '@mantine/core';
import { RiCheckboxBlankLine, RiCheckboxLine } from 'react-icons/ri';
import styled from 'styled-components';
import { Button } from '/@/renderer/components/button';
import { Paper } from '/@/renderer/components/paper';
import { getNodesByDiscNumber, setNodeSelection } from '../utils';
const Container = styled(Paper)`
2023-07-21 00:16:35 -07:00
display: flex;
height: 100%;
2023-07-01 19:10:05 -07:00
padding: 0.5rem 1rem;
border: 1px solid transparent;
2023-05-20 19:21:23 -07:00
`;
export const FullWidthDiscCell = ({ node, data, api }: ICellRendererParams) => {
2023-07-01 19:10:05 -07:00
const [isSelected, setIsSelected] = useState(false);
2023-05-20 19:21:23 -07:00
2023-07-01 19:10:05 -07:00
const handleToggleDiscNodes = () => {
if (!data) return;
2024-08-25 21:34:43 -07:00
const split: string[] = node.data.id.split('-');
const discNumber = Number(split[1]);
// the subtitle could have '-' in it; make sure to have all remaining items
const subtitle = split.length === 3 ? split.slice(2).join('-') : null;
const nodes = getNodesByDiscNumber({ api, discNumber, subtitle });
2023-05-20 19:21:23 -07:00
2023-07-01 19:10:05 -07:00
setNodeSelection({ isSelected: !isSelected, nodes });
setIsSelected((prev) => !prev);
};
2023-05-20 19:21:23 -07:00
2023-07-01 19:10:05 -07:00
return (
<Container>
<Group
position="apart"
w="100%"
>
<Button
compact
leftIcon={isSelected ? <RiCheckboxLine /> : <RiCheckboxBlankLine />}
size="md"
variant="subtle"
onClick={handleToggleDiscNodes}
>
{data.name}
</Button>
</Group>
</Container>
);
2023-05-20 19:21:23 -07:00
};