Files
LingChair/client/utils/showSnackbar.ts
2025-12-06 00:18:10 +08:00

90 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { snackbar as mduiSnackbar, Snackbar } from "mdui"
interface Options {
/**
* Snackbar 出现的位置。默认为 `bottom`。可选值为:
* * `top`:位于顶部,居中对齐
* * `top-start`:位于顶部,左对齐
* * `top-end`:位于顶部,右对齐
* * `bottom`:位于底部,居中对齐
* * `bottom-start`:位于底部,左对齐
* * `bottom-end`:位于底部,右对齐
*/
placement?: 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end';
/**
* 操作按钮的文本
*/
action?: string;
/**
* 是否在右侧显示关闭按钮
*/
closeable?: boolean;
/**
* 消息文本最多显示几行。默认不限制行数。可选值为
* * `1`:消息文本最多显示一行
* * `2`:消息文本最多显示两行
*/
messageLine?: 1 | 2;
/**
* 在多长时间后自动关闭(单位为毫秒)。设置为 0 时,不自动关闭。默认为 5 秒后自动关闭。
*/
autoCloseDelay?: number;
/**
* 点击或触摸 Snackbar 以外的区域时是否关闭 Snackbar
*/
closeOnOutsideClick?: boolean;
/**
* 队列名称。
* 默认不启用队列,在多次调用该函数时,将同时显示多个 snackbar。
* 可在该参数中传入一个队列名称,具有相同队列名称的 snackbar 函数,将在上一个 snackbar 关闭后才打开下一个 snackbar。
*/
queue?: string;
/**
* 点击 Snackbar 时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* @param snackbar
*/
onClick?: (snackbar: Snackbar) => void;
/**
* 点击操作按钮时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* 默认点击后会关闭 snackbar若返回值为 false则不关闭 snackbar若返回值为 promise则将在 promise 被 resolve 后,关闭 snackbar。
* @param snackbar
*/
onActionClick?: (snackbar: Snackbar) => void | boolean | Promise<void>;
/**
* Snackbar 开始显示时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* @param snackbar
*/
onOpen?: (snackbar: Snackbar) => void;
/**
* Snackbar 显示动画完成时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* @param snackbar
*/
onOpened?: (snackbar: Snackbar) => void;
/**
* Snackbar 开始隐藏时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* @param snackbar
*/
onClose?: (snackbar: Snackbar) => void;
/**
* Snackbar 隐藏动画完成时的回调函数。
* 函数参数为 snackbar 实例,`this` 也指向 snackbar 实例。
* @param snackbar
*/
onClosed?: (snackbar: Snackbar) => void;
}
interface SnackbarOptions extends Options {
message: string
}
export default function showSnackbar(opinions: SnackbarOptions) {
opinions.autoCloseDelay == null && (opinions.autoCloseDelay = 3500)
opinions.placement == null && (opinions.placement = 'top')
return mduiSnackbar(opinions)
}