Files
jobtrackingapp/vendor/saasable-ui-main/admin/nextjs/src/states/snackbar.js
T
2026-03-21 11:55:27 +01:00

118 lines
2.8 KiB
JavaScript

import { useMemo } from 'react';
// @third-party
import useSWR, { mutate } from 'swr';
const endpoints = {
key: 'snackbar'
};
const initialState = {
action: false,
open: false,
message: 'Note archived',
anchorOrigin: {
vertical: 'bottom',
horizontal: 'right'
},
severity: 'success',
variant: 'default',
alert: {
variant: 'filled'
},
transition: 'Zoom',
close: false,
actionButton: false,
maxStack: 3,
dense: false,
iconVariant: 'useemojis',
hideIconVariant: false
};
export function useGetSnackbar() {
const { data } = useSWR(endpoints.key, () => initialState, {
revalidateIfStale: false,
revalidateOnFocus: false,
revalidateOnReconnect: false
});
const memoizedValue = useMemo(() => ({ snackbar: data }), [data]);
return memoizedValue;
}
export function openSnackbar(snackbar) {
// to update local state based on key
const { action, open, message, anchorOrigin, variant, alert, transition, close, actionButton, severity } = snackbar;
mutate(
endpoints.key,
(currentSnackbar) => {
const safeSnackbar = currentSnackbar || initialState;
return {
...safeSnackbar,
action: action || initialState.action,
open: open || initialState.open,
message: message || initialState.message,
anchorOrigin: anchorOrigin || initialState.anchorOrigin,
variant: variant || initialState.variant,
alert: { variant: alert?.variant || initialState.alert.variant },
severity: severity || initialState.severity,
transition: transition || initialState.transition,
close: close || initialState.close,
actionButton: actionButton || initialState.actionButton
};
},
false
);
}
export function closeSnackbar() {
// to update local state based on key
mutate(
endpoints.key,
(currentSnackbar) => {
const safeSnackbar = currentSnackbar || initialState;
return { ...safeSnackbar, open: false };
},
false
);
}
export function handlerIncrease(maxStack) {
// to update local state based on key
mutate(
endpoints.key,
(currentSnackbar) => {
const safeSnackbar = currentSnackbar || initialState;
return { ...safeSnackbar, maxStack };
},
false
);
}
export function handlerDense(dense) {
// to update local state based on key
mutate(
endpoints.key,
(currentSnackbar) => {
const safeSnackbar = currentSnackbar || initialState;
return { ...safeSnackbar, dense };
},
false
);
}
export function handlerIconVariants(iconVariant) {
// to update local state based on key
mutate(
endpoints.key,
(currentSnackbar) => {
const safeSnackbar = currentSnackbar || initialState;
return { ...safeSnackbar, iconVariant, hideIconVariant: iconVariant === 'hide' };
},
false
);
}