import { type Dispatch, type SetStateAction, useState } from "react";
import type { ExpandableId } from "../types";
export const useExpand = (
isInsideContext: boolean,
expandedByContext: boolean,
setExpanded: (id: ExpandableId) => void,
id?: ExpandableId,
externalOpen?: boolean,
setExternalOpen?: Dispatch<SetStateAction<boolean>>,
defaultOpened?: boolean,
): [boolean, () => void] => {
const [internalOpen, setInternalOpen] = useState(!!defaultOpened);
const isControlled =
externalOpen !== undefined && setExternalOpen !== undefined;
const isContextControlled = isInsideContext;
const state = isControlled
? externalOpen
: isContextControlled
? expandedByContext
: internalOpen;
const toggleState = () => {
if (isControlled) {
setExternalOpen((prev) => !prev);
} else if (isInsideContext && id !== undefined) {
setExpanded(id);
} else {
setInternalOpen((prev) => !prev);
}
};
return [state, toggleState];
};