mirror of
https://github.com/hex248/sprint.git
synced 2026-02-07 18:23:03 +00:00
Select labels
This commit is contained in:
@@ -20,6 +20,7 @@ export function OrganisationSelect({
|
|||||||
onCreateOrganisation,
|
onCreateOrganisation,
|
||||||
placeholder = "Select Organisation",
|
placeholder = "Select Organisation",
|
||||||
contentClass,
|
contentClass,
|
||||||
|
labelPosition = "top",
|
||||||
}: {
|
}: {
|
||||||
organisations: OrganisationResponse[];
|
organisations: OrganisationResponse[];
|
||||||
selectedOrganisation: OrganisationResponse | null;
|
selectedOrganisation: OrganisationResponse | null;
|
||||||
@@ -27,6 +28,7 @@ export function OrganisationSelect({
|
|||||||
onCreateOrganisation?: (organisationId: number) => void | Promise<void>;
|
onCreateOrganisation?: (organisationId: number) => void | Promise<void>;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
contentClass?: string;
|
contentClass?: string;
|
||||||
|
labelPosition?: "top" | "bottom";
|
||||||
}) {
|
}) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
@@ -43,7 +45,13 @@ export function OrganisationSelect({
|
|||||||
}}
|
}}
|
||||||
onOpenChange={setOpen}
|
onOpenChange={setOpen}
|
||||||
>
|
>
|
||||||
<SelectTrigger className="text-sm" isOpen={open}>
|
<SelectTrigger
|
||||||
|
className="text-sm"
|
||||||
|
isOpen={open}
|
||||||
|
label="Organisation"
|
||||||
|
hasValue={!!selectedOrganisation}
|
||||||
|
labelPosition={labelPosition}
|
||||||
|
>
|
||||||
<SelectValue placeholder={placeholder} />
|
<SelectValue placeholder={placeholder} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent side="bottom" position="popper" className={contentClass}>
|
<SelectContent side="bottom" position="popper" className={contentClass}>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export function ProjectSelect({
|
|||||||
onSelectedProjectChange,
|
onSelectedProjectChange,
|
||||||
onCreateProject,
|
onCreateProject,
|
||||||
placeholder = "Select Project",
|
placeholder = "Select Project",
|
||||||
|
labelPosition = "top",
|
||||||
}: {
|
}: {
|
||||||
projects: ProjectResponse[];
|
projects: ProjectResponse[];
|
||||||
selectedProject: ProjectResponse | null;
|
selectedProject: ProjectResponse | null;
|
||||||
@@ -27,6 +28,7 @@ export function ProjectSelect({
|
|||||||
onSelectedProjectChange: (project: ProjectResponse | null) => void;
|
onSelectedProjectChange: (project: ProjectResponse | null) => void;
|
||||||
onCreateProject?: (projectId: number) => void | Promise<void>;
|
onCreateProject?: (projectId: number) => void | Promise<void>;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
|
labelPosition?: "top" | "bottom";
|
||||||
}) {
|
}) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
@@ -43,7 +45,13 @@ export function ProjectSelect({
|
|||||||
}}
|
}}
|
||||||
onOpenChange={setOpen}
|
onOpenChange={setOpen}
|
||||||
>
|
>
|
||||||
<SelectTrigger className="text-sm" isOpen={open}>
|
<SelectTrigger
|
||||||
|
className="text-sm"
|
||||||
|
isOpen={open}
|
||||||
|
label="Project"
|
||||||
|
hasValue={!!selectedProject}
|
||||||
|
labelPosition={labelPosition}
|
||||||
|
>
|
||||||
<SelectValue placeholder={placeholder} />
|
<SelectValue placeholder={placeholder} />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent side="bottom" position="popper" align={"start"}>
|
<SelectContent side="bottom" position="popper" align={"start"}>
|
||||||
|
|||||||
@@ -21,10 +21,16 @@ function SelectTrigger({
|
|||||||
size = "default",
|
size = "default",
|
||||||
children,
|
children,
|
||||||
isOpen,
|
isOpen,
|
||||||
|
label,
|
||||||
|
hasValue,
|
||||||
|
labelPosition = "top",
|
||||||
...props
|
...props
|
||||||
}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
|
}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
|
||||||
isOpen?: boolean;
|
isOpen?: boolean;
|
||||||
size?: "sm" | "default";
|
size?: "sm" | "default";
|
||||||
|
label?: string;
|
||||||
|
hasValue?: boolean;
|
||||||
|
labelPosition?: "top" | "bottom";
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<SelectPrimitive.Trigger
|
<SelectPrimitive.Trigger
|
||||||
@@ -35,7 +41,7 @@ function SelectTrigger({
|
|||||||
"[&_svg:not([class*='text-'])]:text-muted-foreground",
|
"[&_svg:not([class*='text-'])]:text-muted-foreground",
|
||||||
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",
|
||||||
"aria-invalid:border-destructive dark:hover:bg-muted/40",
|
"aria-invalid:border-destructive dark:hover:bg-muted/40",
|
||||||
"flex w-fit items-center justify-between gap-2 border",
|
"relative flex w-fit items-center justify-between gap-2 border",
|
||||||
"bg-transparent px-3 py-2 text-sm whitespace-nowrap",
|
"bg-transparent px-3 py-2 text-sm whitespace-nowrap",
|
||||||
"shadow-xs outline-none disabled:cursor-not-allowed",
|
"shadow-xs outline-none disabled:cursor-not-allowed",
|
||||||
"disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8",
|
"disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8",
|
||||||
@@ -46,6 +52,16 @@ function SelectTrigger({
|
|||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
>
|
>
|
||||||
|
{label && hasValue && (
|
||||||
|
<span
|
||||||
|
className={cn(
|
||||||
|
"text-muted-foreground bg-background absolute left-0.5 px-1 text-[9px] leading-none",
|
||||||
|
labelPosition === "top" ? "-top-1" : "-bottom-1",
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{label}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
{children}
|
{children}
|
||||||
<SelectPrimitive.Icon asChild>
|
<SelectPrimitive.Icon asChild>
|
||||||
<ChevronDownIcon
|
<ChevronDownIcon
|
||||||
|
|||||||
Reference in New Issue
Block a user