1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 13:29:41 +02:00
portainer/app/react/components/form-components/SwitchField/SwitchField.tsx
Chaim Lev-Ari 8a81d95253
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
refactor(edge/stacks): migrate create view to react [EE-2223] (#11575)
2024-05-06 08:08:03 +03:00

75 lines
1.9 KiB
TypeScript

import clsx from 'clsx';
import uuid from 'uuid';
import { ComponentProps, PropsWithChildren, ReactNode, useState } from 'react';
import { FeatureId } from '@/react/portainer/feature-flags/enums';
import { AutomationTestingProps } from '@/types';
import { Tooltip } from '@@/Tip/Tooltip';
import styles from './SwitchField.module.css';
import { Switch } from './Switch';
export interface Props extends AutomationTestingProps {
label: string;
checked: boolean;
onChange(value: boolean, index?: number): void;
index?: number;
name?: string;
tooltip?: ComponentProps<typeof Tooltip>['message'];
setTooltipHtmlMessage?: ComponentProps<typeof Tooltip>['setHtmlMessage'];
labelClass?: string;
switchClass?: string;
fieldClass?: string;
disabled?: boolean;
featureId?: FeatureId;
valueExplanation?: ReactNode;
}
export function SwitchField({
tooltip,
checked,
label,
index,
name,
labelClass,
fieldClass,
'data-cy': dataCy,
disabled,
onChange,
featureId,
switchClass,
setTooltipHtmlMessage,
valueExplanation,
}: PropsWithChildren<Props>) {
const [toggleId] = useState(() => `toggle_${uuid()}`);
const toggleName = name ? `toggle_${name}` : '';
return (
<div className={clsx(styles.root, fieldClass)}>
<label
className={clsx('space-right control-label !p-0 text-left', labelClass)}
htmlFor={toggleId}
>
{label}
{tooltip && (
<Tooltip message={tooltip} setHtmlMessage={setTooltipHtmlMessage} />
)}
</label>
<Switch
className={clsx('space-right', switchClass)}
name={toggleName}
id={toggleId}
checked={checked}
disabled={disabled}
onChange={onChange}
index={index}
featureId={featureId}
data-cy={dataCy}
/>
{valueExplanation && <span>{valueExplanation}</span>}
</div>
);
}