/* This file is part of GNU Taler (C) 2022 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ import { TranslatedString } from "@gnu-taler/taler-util"; 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) => TranslatedString; 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)} ))}
)}
); }