1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-09 07:45:22 +02:00

chore(notifications):improve performance [EE-4815] (#8475)

* chore(notifications):improve performance [EE-4815]

Co-authored-by: testa113 <testa113>
This commit is contained in:
Ali 2023-02-17 12:51:00 +13:00 committed by GitHub
parent 89dd72b4ac
commit 23f3008500
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 29 deletions

View file

@ -2,11 +2,12 @@ import create from 'zustand/vanilla';
import { persist } from 'zustand/middleware';
import { keyBuilder } from '@/react/hooks/useLocalStorage';
import { UserId } from '@/portainer/users/types';
import { ToastNotification } from './types';
interface NotificationsState {
userNotifications: Record<string, ToastNotification[]>;
userNotifications: Record<UserId, ToastNotification[]>;
addNotification: (userId: number, notification: ToastNotification) => void;
removeNotification: (userId: number, notificationId: string) => void;
removeNotifications: (userId: number, notifications: string[]) => void;
@ -18,15 +19,26 @@ export const notificationsStore = create<NotificationsState>()(
(set) => ({
userNotifications: {},
addNotification: (userId: number, notification: ToastNotification) => {
set((state) => ({
userNotifications: {
...state.userNotifications,
[userId]: [
...(state.userNotifications[userId] || []),
notification,
],
},
}));
set((state) => {
const currentUserNotifications =
state.userNotifications[userId] || [];
// keep the new notification at the start of the list, so sorting by newest time isn't required
const newUserNotifications = [
notification,
...currentUserNotifications,
];
const maxNotifications = 50;
const reducedNotifications = newUserNotifications.slice(
0,
maxNotifications
);
return {
userNotifications: {
...state.userNotifications,
[userId]: reducedNotifications,
},
};
});
},
removeNotification: (userId: number, notificationId: string) => {
set((state) => ({