From ee9562f600d65ed6a9329025c6a9cf782d8f7c17 Mon Sep 17 00:00:00 2001 From: Alissa Cheng <cheng@astron.nl> Date: Tue, 12 Dec 2023 17:08:19 +0100 Subject: [PATCH] feat: toggle disabled state --- src/components/Toggle.tsx | 13 +++++++++++-- src/components/utils/classes.ts | 2 +- src/stories/Toggle.stories.tsx | 9 +++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components/Toggle.tsx b/src/components/Toggle.tsx index 5666fc4..e31d106 100644 --- a/src/components/Toggle.tsx +++ b/src/components/Toggle.tsx @@ -1,23 +1,32 @@ import { Dispatch, SetStateAction } from "react"; import { Switch } from "@nextui-org/react"; +import { disabledCursor } from "./utils/classes.ts"; type ToggleProps = { + isDisabled?: boolean; isSelected: boolean; - setIsSelected: Dispatch<SetStateAction<boolean>>; + setIsSelected?: Dispatch<SetStateAction<boolean>>; label?: string; }; -const Toggle = ({ isSelected, setIsSelected, label }: ToggleProps) => { +const Toggle = ({ + isDisabled = false, + isSelected, + setIsSelected, + label, +}: ToggleProps) => { const selectedClass = isSelected ? "group-data-[selected=true]:ml-0 bg-primary" : "ml-[11px] bg-grey"; return ( <Switch + isDisabled={isDisabled} // Does not support "isRequired": https://github.com/nextui-org/nextui/issues/1610 isSelected={isSelected} onValueChange={setIsSelected} color="default" classNames={{ + base: disabledCursor(isDisabled), thumb: `h-[14px] w-[14px] ${selectedClass}`, wrapper: "h-[8px] w-[25px] p-0 overflow-visible bg-lightGrey dark:bg-mediumGrey", diff --git a/src/components/utils/classes.ts b/src/components/utils/classes.ts index 0fbc07c..7ab8b54 100644 --- a/src/components/utils/classes.ts +++ b/src/components/utils/classes.ts @@ -1,6 +1,6 @@ export const disabledCursor = (isDisabled: boolean) => { if (!isDisabled) return ""; - return "pointer-events-auto cursor-not-allowed opacity-100"; + return "pointer-events-auto cursor-not-allowed opacity-50"; }; export const disabledBg = (isDisabled: boolean) => { diff --git a/src/stories/Toggle.stories.tsx b/src/stories/Toggle.stories.tsx index c71bd9c..1e21e17 100644 --- a/src/stories/Toggle.stories.tsx +++ b/src/stories/Toggle.stories.tsx @@ -19,3 +19,12 @@ export const SimpleToggle = () => { /> ); }; + +export const DisabledToggle = () => { + return ( + <div className="flex flex-col gap-4"> + <Toggle isDisabled={true} isSelected={true} label="I'm always right!" /> + <Toggle isDisabled={true} isSelected={false} label="I'm always left!" /> + </div> + ); +}; -- GitLab