Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/accordion/AccordionState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as React from "react";
import { useCompositeState } from "reakit";
import { useControllableState } from "@chakra-ui/hooks";
import {
SelectedIdPair,
AccordionState,
AccordionActions,
AccordionReturns,
Expand All @@ -10,7 +11,6 @@ import {
AccordionInitialState,
AccordionInitialStateMulti,
AccordionInitialStateSingle,
SelectedIdPair,
} from "./types";

export type AccordionStateReturn = AccordionActions &
Expand Down
69 changes: 30 additions & 39 deletions src/accordion/types.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { Dispatch, SetStateAction } from "react";
import {
CompositeState,
CompositeActions,
CompositeInitialState,
} from "reakit";

export type StringOrNull = string | null;

export type AccordionState = CompositeState & {
/**
* Allow to open multiple accordion items
Expand Down Expand Up @@ -44,7 +47,7 @@ export type AccordionActions = CompositeActions & {
unregisterPanel: CompositeActions["unregisterItem"];
};

export interface CommonAccordionProps {
export type CommonAccordionProps = {
/**
* Whether the accodion selection should be manual.
* @default true
Expand All @@ -55,23 +58,16 @@ export interface CommonAccordionProps {
* @default false
*/
allowToggle: boolean;
}
};

export type SelectedIdPair = {
/**
* The current selected accordion's `id`.
*/
selectedId?: string | null;
/**
* Initial selected accordion's `id`.
* @default []
*/
selectedIds?: (string | null)[];
setSelectedId?: React.Dispatch<React.SetStateAction<string | null>>;
setSelectedIds?: React.Dispatch<React.SetStateAction<(string | null)[]>>;
selectedId?: StringOrNull;
selectedIds?: StringOrNull[];
setSelectedId?: Dispatch<SetStateAction<StringOrNull>>;
setSelectedIds?: Dispatch<SetStateAction<StringOrNull[]>>;
};

export interface SingleAccordionProps extends CommonAccordionProps {
export type SingleAccordionProps = CommonAccordionProps & {
/**
* Allow to open multiple accordion items
* @default false
Expand All @@ -80,20 +76,20 @@ export interface SingleAccordionProps extends CommonAccordionProps {
/**
* The current selected accordion's `id`.
*/
selectedId?: string | null;
selectedId?: StringOrNull;
/**
* Set default selected id(uncontrolled)
*
* @default null
*/
defaultSelectedId?: string | null;
defaultSelectedId?: StringOrNull;
/**
* Handler that is called when the selectedId changes.
*/
onSelectedIdChange?: (value: string | null) => void;
}
onSelectedIdChange?: (value: StringOrNull) => void;
};

export interface MultiAccordionProps extends CommonAccordionProps {
export type MultiAccordionProps = CommonAccordionProps & {
/**
* Allow to open multiple accordion items
* @default true
Expand All @@ -103,60 +99,55 @@ export interface MultiAccordionProps extends CommonAccordionProps {
* Initial selected accordion's `id`.
* @default []
*/
selectedIds?: (string | null)[];
selectedIds?: StringOrNull[];
/**
* Set default selected ids(uncontrolled)
*
* @default []
*/
defaultSelectedIds?: (string | null)[];
defaultSelectedIds?: StringOrNull[];
/**
* Handler that is called when the selectedIds changes.
*/
onSelectedIdsChange?: (value: (string | null)[]) => void;
}
onSelectedIdsChange?: (value: StringOrNull[]) => void;
};

// State return types //

export interface SingleReturn {
export type SingleReturn = {
/**
* Allow to open multiple accordion items
* @default false
*/
allowMultiple: false;
/**
* The current selected accordion's `id`.
*/
selectedId: string | null | undefined;
selectedId: SelectedIdPair["selectedId"] | undefined;
/**
* Sets `selectedId`.
*/
setSelectedId: React.Dispatch<React.SetStateAction<string | null>>;
}
setSelectedId: NonNullable<SelectedIdPair["setSelectedId"]>;
};

export interface MultiReturn {
export type MultiReturn = {
/**
* Allow to open multiple accordion items
* @default true
*/
allowMultiple: true;
/**
* The current selected accordion's `id`.
*/
selectedIds: (string | null)[] | undefined;
selectedIds: SelectedIdPair["selectedIds"] | undefined;
/**
* Sets `selectedIds`.
*/
setSelectedIds: React.Dispatch<React.SetStateAction<(string | null)[]>>;
}
setSelectedIds: NonNullable<SelectedIdPair["setSelectedIds"]>;
};

// Overload signatures for useAccordionState
export type SingleOverloadReturn = AccordionActions &
AccordionState &
SingleReturn;
export type MultiOverloadReturn = AccordionActions &
AccordionState &
MultiReturn;
type AccordionStateActions = AccordionActions & AccordionState;
export type SingleOverloadReturn = AccordionStateActions & SingleReturn;
export type MultiOverloadReturn = AccordionStateActions & MultiReturn;

type AccordionProps = SingleAccordionProps | MultiAccordionProps;
export type AccordionReturns = MultiReturn | SingleReturn;
Expand Down