Uniformize folder structure (#693)
* Uniformize folder structure * Fix icons * Fix icons * Fix tests * Fix tests
This commit is contained in:
39
front/src/modules/ui/snack-bar/states/snackBarState.ts
Normal file
39
front/src/modules/ui/snack-bar/states/snackBarState.ts
Normal file
@ -0,0 +1,39 @@
|
||||
import { atom, selector } from 'recoil';
|
||||
|
||||
import { SnackbarProps } from '../components/SnackBar';
|
||||
|
||||
export type SnackBarOptions = SnackbarProps & {
|
||||
id: string;
|
||||
};
|
||||
|
||||
export type SnackBarState = {
|
||||
maxQueue: number;
|
||||
queue: SnackBarOptions[];
|
||||
};
|
||||
|
||||
export const snackBarInternalState = atom<SnackBarState>({
|
||||
key: 'snackBarState',
|
||||
default: {
|
||||
maxQueue: 3,
|
||||
queue: [],
|
||||
},
|
||||
});
|
||||
|
||||
export const snackBarSetQueueState = selector<SnackBarOptions | null>({
|
||||
key: 'snackBarQueueState',
|
||||
get: ({ get }) => null, // We don't care about getting the value
|
||||
set: ({ set }, newValue) =>
|
||||
set(snackBarInternalState, (prev) => {
|
||||
if (prev.queue.length >= prev.maxQueue) {
|
||||
return {
|
||||
...prev,
|
||||
queue: [...prev.queue.slice(1), newValue] as SnackBarOptions[],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
...prev,
|
||||
queue: [...prev.queue, newValue] as SnackBarOptions[],
|
||||
};
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user