From 190dcd593a6b38d4b86e35fde89d7d02a5a41ccf Mon Sep 17 00:00:00 2001 From: Pilotager Date: Tue, 24 Dec 2024 21:29:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(toast=E3=80=81notify):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20close=20=E4=BA=8B=E4=BB=B6=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/notify/notify.imperative.ts | 12 +++++++++--- packages/core/src/toast/toast.imperative.ts | 12 +++++++++--- packages/core/src/toast/toast.tsx | 11 ++++++++--- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/core/src/notify/notify.imperative.ts b/packages/core/src/notify/notify.imperative.ts index f672f861..e8d9f564 100644 --- a/packages/core/src/notify/notify.imperative.ts +++ b/packages/core/src/notify/notify.imperative.ts @@ -14,6 +14,7 @@ const initialNotifyOptions: NotifyOptions = { } const DEFAULT_NOTIFY_SELECTOR = "#notify" +const DEFAULT_NOTIFY_SELECTOR_CREATE = "notify" const defaultNotifyOptions: NotifyOptions = {} @@ -51,8 +52,13 @@ export function openNotify(args: ReactNode | NotifyOptions) { unmountPortal(notifyView) } mountPortal( - createElement(Notify, { ...restOptions, children: restOptions.message, defaultOpen: true }) as unknown as TaroNode, - notifyView + createElement(Notify, { + ...restOptions, + children: restOptions.message, + defaultOpen: true, + id: selector === DEFAULT_NOTIFY_SELECTOR ? DEFAULT_NOTIFY_SELECTOR_CREATE : selector, + }) as unknown as TaroNode, + notifyView, ) } } @@ -66,5 +72,5 @@ export function createNotify(color: NotifyColor) { } export function closeNotify(selector?: string) { - notifyEvents.trigger("close", selector ?? defaultNotifyOptions.selector) + notifyEvents.trigger("close", selector ? `#${selector}` : defaultNotifyOptions.selector) } diff --git a/packages/core/src/toast/toast.imperative.ts b/packages/core/src/toast/toast.imperative.ts index d1b2a684..9f0ffe96 100644 --- a/packages/core/src/toast/toast.imperative.ts +++ b/packages/core/src/toast/toast.imperative.ts @@ -17,6 +17,7 @@ const initialToastOptions: ToastOptions = { } const DEFAULT_TOAST_SELECTOR = "#toast" +const DEFAULT_TOAST_SELECTOR_CREATE = "toast" const defaultToastOptions: ToastOptions = {} @@ -54,8 +55,13 @@ export function openToast(args: ReactNode | ToastOptions) { unmountPortal(toastView) } mountPortal( - createElement(Toast, { ...restOptions, children: restOptions.message, defaultOpen: true }) as unknown as TaroNode, - toastView + createElement(Toast, { + ...restOptions, + children: restOptions.message, + defaultOpen: true, + id: selector === DEFAULT_TOAST_SELECTOR ? DEFAULT_TOAST_SELECTOR_CREATE : selector, + }) as unknown as TaroNode, + toastView, ) } } @@ -69,5 +75,5 @@ export function createToast(type: ToastType) { } export function closeToast(selector?: string) { - toastEvents.trigger("close", selector ?? defaultToastOptions.selector) + toastEvents.trigger("close", selector ? `#${selector}` : defaultToastOptions.selector) } diff --git a/packages/core/src/toast/toast.tsx b/packages/core/src/toast/toast.tsx index 3e5a0c7d..2fd02a41 100644 --- a/packages/core/src/toast/toast.tsx +++ b/packages/core/src/toast/toast.tsx @@ -28,7 +28,13 @@ import { } from "../utils/dom/element" import { useObject, useToRef } from "../utils/state" import { isElementOf } from "../utils/validate" -import { ToastPosition, ToastOptions, ToastType, toastEvents, toastSelectorSet } from "./toast.shared" +import { + ToastPosition, + ToastOptions, + ToastType, + toastEvents, + toastSelectorSet, +} from "./toast.shared" const TOAST_PRESET_TYPES = ["text", "loading", "success", "fail", "html"] @@ -54,7 +60,6 @@ function useToastClose(cb: (selector: string) => void) { }, []) } - function defaultToastIcon(icon?: ReactNode, type?: ToastType): ReactNode { if (icon) { return icon @@ -166,7 +171,7 @@ export default function Toast(props: ToastProps) { // eslint-disable-next-line react-hooks/exhaustive-deps rootSelectorRef.current && toastSelectorSet.delete(rootSelectorRef.current) } - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) useEffect(() => {