import { getUnpackedSettings } from "http2"; import { h, VNode } from "preact"; import { useState } from "preact/hooks"; import { Button } from "../mui/Button.js"; import arrowDown from "../svg/chevron-down.svg"; import { ParagraphClickable } from "./styled/index.js"; export interface Props { label: (s: string) => VNode; actions: string[]; onClick: (s: string) => Promise; } /** * functionality: it will receive a list of actions, take the first actions as * the first chosen action * the user may change the chosen action * when the user click the button it will call onClick with the chosen action * as argument * * visually: it is a primary button with a select handler on the right * * @returns */ export function MultiActionButton({ label, actions, onClick: doClick, }: Props): VNode { const defaultAction = actions.length > 0 ? actions[0] : ""; const [opened, setOpened] = useState(false); const [selected, setSelected] = useState(defaultAction); const canChange = actions.length > 1; const options = canChange ? actions.filter((a) => a !== selected) : []; function select(m: string): void { setSelected(m); setOpened(false); } if (!canChange) { return ( ); } return (
{opened && (
{options.map((m) => ( select(m)}> {label(m)} ))}
)}
); }