diff --git a/src/lib/accordion/custom.tsx b/src/lib/accordion/custom.tsx index 6cd1bd2..3a5d75c 100644 --- a/src/lib/accordion/custom.tsx +++ b/src/lib/accordion/custom.tsx @@ -1,6 +1,6 @@ import React, { ReactNode, useState } from "react"; import AccordionItem from "./accordion-item"; -import { cn } from "../../utils"; +import { cn, isUndefined } from "../../utils"; interface AccordionItem { title: ReactNode; @@ -10,14 +10,18 @@ interface AccordionItem { interface AccordionProps { items: AccordionItem[]; className?: string; + defaultExpanded?: number; } const CustomAccordion: React.FC = ({ items, className, + defaultExpanded, ...props }) => { - const [expanded, setExpanded] = useState(-1); + const [expanded, setExpanded] = useState( + !isUndefined(defaultExpanded) ? defaultExpanded : -1, + ); return (
= ({ className, ...props }) => { - const [expanded, setExpanded] = useState(defaultExpanded ?? -1); + const [expanded, setExpanded] = useState( + !isUndefined(defaultExpanded) ? defaultExpanded : -1, + ); return (
{ items: ListItem[]; + /** Flag to disable drag operations in list. */ + dragDisabled?: boolean; + /** Flag to disable delete operations in list. */ + deletionDisabled?: boolean; /** Returns the updated list after a delete or move operation. */ updateCallback?: (updatedItems: ListItem[]) => void; /** Returns the selected item. */ @@ -45,6 +49,8 @@ function DraggableList({ selectionCallback, className, renderDragPreview, + dragDisabled = false, + deletionDisabled = false, ...props }: Readonly) { const list = useListData({ @@ -76,7 +82,7 @@ function DraggableList({ aria-label={props["aria-label"] ?? "Reorderable list"} selectionMode="single" items={list.items} - dragAndDropHooks={dragAndDropHooks} + dragAndDropHooks={dragDisabled ? undefined : dragAndDropHooks} onSelectionChange={(keys) => { const keyArr = Array.from(keys); const selectedItem = list.getItem(keyArr[0]); @@ -106,11 +112,13 @@ function DraggableList({ > {({ isHovered }) => ( <> - + {dragDisabled ? null : ( + + )} {item.name} - {isHovered ? ( + {isHovered && !deletionDisabled ? (