/* Toast.tsx - ESP3D WebUI component file Copyright (c) 2021 Alexandre Aussourd. All rights reserved. This code is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This code 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with This code; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ import { ComponentChildren } from "preact" import { useEffect } from "preact/hooks" import { useUiContextFn, useToastsContext } from "../../contexts" import { Toast as SpectreToast } from "../Controls" import { T } from "../Translations" interface ToastProps { index: string | number type?: string children?: ComponentChildren timeout?: number remove: (id: string | number) => void } const Toast = ({ index, type = "", children, timeout = 2000, remove }: ToastProps) => { useEffect(() => { let timer: any if (timeout) { timer = setTimeout(() => { remove(index) }, timeout) return () => clearTimeout(timer) } }, []) return ( { useUiContextFn.haptic() remove(index) }} /> {children} ) } const ToastsContainer = () => { const { toasts } = useToastsContext() return ( toasts.toastList && (
{toasts.toastList.map((toast: any) => { const { id, type, content } = toast return ( toasts.removeToast([String(id)])} index={id} type={type} key={id} > {typeof content === 'string' ? T(content) : content} ) })}
) ) } export { ToastsContainer }