Files
wanderer/assets/js/hooks/Mapper/components/ui-kit/WdCheckbox/WdCheckbox.tsx
Dmitry Popov 1fc95c96eb
Some checks are pending
Build / 🚀 Deploy to test env (fly.io) (push) Waiting to run
Build / Manual Approval (push) Blocked by required conditions
Build / 🛠 Build (1.17, 18.x, 27) (push) Blocked by required conditions
Build / 🛠 Build Docker Images (linux/amd64) (push) Blocked by required conditions
Build / 🛠 Build Docker Images (linux/arm64) (push) Blocked by required conditions
Build / merge (push) Blocked by required conditions
Build / 🏷 Create Release (push) Blocked by required conditions
feat: enhance character activty and summmarize by user (#206)
2025-03-10 00:24:16 +01:00

67 lines
1.7 KiB
TypeScript

import classes from './WdCheckbox.module.scss';
import { Checkbox, CheckboxChangeEvent } from 'primereact/checkbox';
import { WithClassName } from '@/hooks/Mapper/types/common';
import clsx from 'clsx';
import React, { useMemo } from 'react';
let counter = 0;
export interface WdCheckboxProps {
id?: string;
label: React.ReactNode | string;
classNameLabel?: string;
value: boolean;
labelSide?: 'left' | 'right';
onChange?: (event: CheckboxChangeEvent) => void;
size?: 'xs' | 'm' | 'normal';
}
export const WdCheckbox = ({
id: defaultId,
label,
className,
classNameLabel,
value,
onChange,
labelSide = 'right',
size = 'normal',
}: WdCheckboxProps & WithClassName) => {
const id = useMemo(() => defaultId || (++counter).toString(), [defaultId]);
const labelElement = (
<label
htmlFor={id}
className={clsx(
classes.Label,
'select-none',
{
['ml-1']: labelSide === 'right' && size === 'xs',
['mr-1']: labelSide === 'left' && size === 'xs',
['ml-1.5']: labelSide === 'right' && (size === 'normal' || size === 'm'),
['mr-1.5']: labelSide === 'left' && (size === 'normal' || size === 'm'),
},
classNameLabel,
)}
>
{label}
</label>
);
return (
<div className={clsx(className, 'flex items-center')}>
{labelSide === 'left' && labelElement}
<Checkbox
inputId={id}
className={clsx(classes.CheckboxRoot, {
[classes.SizeNormal]: size === 'normal',
[classes.SizeM]: size === 'm',
[classes.SizeXS]: size === 'xs',
})}
onChange={onChange}
checked={value}
/>
{labelSide === 'right' && labelElement}
</div>
);
};