feat(game): 优化界面组件
- 在国际化文件中添加钱包流水相关翻译项 - 在用户个人资料页面添加复制邀请链接功能 - 优化桌面端动物组件的视觉效果和动画参数 - 添加虚拟滚动功能到财务记录标签页提升性能 - 为桌面端控制面板添加投注数量调节按钮 - 更新消息模态框为通知列表和详情展示 - 在头部余额显示旁添加充值图标入口
This commit is contained in:
@@ -24,12 +24,23 @@ interface NotificationStoreState {
|
||||
closingDialogId: string | null
|
||||
dialogQueue: NotificationDialog[]
|
||||
dismissDialog: (id?: string) => void
|
||||
pushDialog: (dialog: NotificationDialog) => void
|
||||
pushDialog: (dialog: NotificationDialog) => string
|
||||
}
|
||||
|
||||
const dialogTimers = new Map<string, number>()
|
||||
const dialogExitTimers = new Map<string, number>()
|
||||
|
||||
function isSameDialog(
|
||||
firstDialog: NotificationDialog,
|
||||
secondDialog: NotificationDialog,
|
||||
) {
|
||||
return (
|
||||
firstDialog.type === secondDialog.type &&
|
||||
firstDialog.message === secondDialog.message &&
|
||||
(firstDialog.description ?? '') === (secondDialog.description ?? '')
|
||||
)
|
||||
}
|
||||
|
||||
function clearDialogTimer(id: string) {
|
||||
const timerId = dialogTimers.get(id)
|
||||
|
||||
@@ -129,6 +140,8 @@ export const useNotificationStore = create<NotificationStoreState>()((set) => ({
|
||||
})
|
||||
},
|
||||
pushDialog: (dialog) => {
|
||||
let dialogId = dialog.id
|
||||
|
||||
set((state) => {
|
||||
if (!state.activeDialog) {
|
||||
clearDialogExitTimer(dialog.id)
|
||||
@@ -140,6 +153,42 @@ export const useNotificationStore = create<NotificationStoreState>()((set) => ({
|
||||
}
|
||||
}
|
||||
|
||||
if (isSameDialog(state.activeDialog, dialog)) {
|
||||
dialogId = state.activeDialog.id
|
||||
clearDialogExitTimer(state.activeDialog.id)
|
||||
scheduleDialogDismiss(state.activeDialog.id, dialog.duration)
|
||||
|
||||
return {
|
||||
activeDialog: {
|
||||
...state.activeDialog,
|
||||
duration: dialog.duration,
|
||||
},
|
||||
closingDialogId: null,
|
||||
dialogQueue: state.dialogQueue.filter(
|
||||
(item) => !isSameDialog(item, dialog),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
const queuedDialog = state.dialogQueue.find((item) =>
|
||||
isSameDialog(item, dialog),
|
||||
)
|
||||
|
||||
if (queuedDialog) {
|
||||
dialogId = queuedDialog.id
|
||||
|
||||
return {
|
||||
dialogQueue: state.dialogQueue.map((item) =>
|
||||
item.id === queuedDialog.id
|
||||
? {
|
||||
...item,
|
||||
duration: dialog.duration,
|
||||
}
|
||||
: item,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
dialogQueue: [
|
||||
...state.dialogQueue.filter((item) => item.id !== dialog.id),
|
||||
@@ -147,6 +196,8 @@ export const useNotificationStore = create<NotificationStoreState>()((set) => ({
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
return dialogId
|
||||
},
|
||||
}))
|
||||
|
||||
@@ -162,15 +213,13 @@ function showToast(
|
||||
const id = createToastId()
|
||||
const duration = options?.duration ?? DEFAULT_ALERT_DURATION_MS
|
||||
|
||||
useNotificationStore.getState().pushDialog({
|
||||
return useNotificationStore.getState().pushDialog({
|
||||
description: options?.description,
|
||||
duration,
|
||||
id,
|
||||
message,
|
||||
type,
|
||||
})
|
||||
|
||||
return id
|
||||
}
|
||||
|
||||
export const notify = {
|
||||
|
||||
Reference in New Issue
Block a user