portainer/app/react/components/form-components/SwitchField/SwitchField.tsx

80 lines
1.6 KiB
TypeScript
Raw Normal View History

import clsx from 'clsx';
import { FeatureId } from '@/portainer/feature-flags/enums';
import { Tooltip } from '@@/Tip/Tooltip';
import styles from './SwitchField.module.css';
import { Switch } from './Switch';
export interface Props {
label: string;
checked: boolean;
onChange(value: boolean): void;
name?: string;
tooltip?: string;
labelClass?: string;
switchClass?: string;
fieldClass?: string;
dataCy?: string;
disabled?: boolean;
featureId?: FeatureId;
switchValues?: {
on: string;
off: string;
};
}
export function SwitchField({
tooltip,
checked,
label,
name,
labelClass,
fieldClass,
dataCy,
disabled,
onChange,
featureId,
switchValues,
switchClass,
}: Props) {
const toggleName = name ? `toggle_${name}` : '';
return (
<label className={clsx(styles.root, fieldClass)}>
<span
className={clsx(
'text-left space-right control-label',
styles.label,
labelClass
)}
>
{label}
{tooltip && <Tooltip message={tooltip} />}
</span>
<Switch
className={clsx('space-right', switchClass)}
name={toggleName}
id={toggleName}
checked={checked}
disabled={disabled}
onChange={onChange}
featureId={featureId}
dataCy={dataCy}
/>
{switchValues && checked && (
<span className={`"ml-2" ${styles.switchValues}`}>
{switchValues.on}
</span>
)}
{switchValues && !checked && (
<span className={`"ml-2" ${styles.switchValues}`}>
{switchValues.off}
</span>
)}
</label>
);
}