mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-08 07:12:49 +00:00
* beginnings of app directory * settings mostly good * colocate way more components * flatten components folder * reexport QueryClientProvider from client * move CodeBlock back to interface * colocate Explorer, KeyManager + more * goddamn captialisation * get toasts out of components * please eslint * no more src directory * $ instead of : * added back RowHeader component * fix settings modal padding * more spacing, less margin * fix sidebar locations button * fix tags sidebar link * clean up back button * added margin to explorer context menu to prevent contact with edge of viewport * don't export QueryClientProvider from @sd/client * basic guidelines * import interface correctly * remove old demo data * fix onboarding layout * fix onboarding navigation * fix key manager settings button --------- Co-authored-by: Jamie Pine <ijamespine@me.com>
35 lines
670 B
TypeScript
35 lines
670 B
TypeScript
import { proxy, useSnapshot } from 'valtio';
|
|
|
|
interface Toast {
|
|
id: string;
|
|
title: string;
|
|
subtitle?: string;
|
|
duration?: number;
|
|
actionButton?: {
|
|
text: string;
|
|
onClick: () => void;
|
|
};
|
|
}
|
|
|
|
const state = proxy({
|
|
toasts: [] as Toast[]
|
|
});
|
|
|
|
const randomId = () => Math.random().toString(36).slice(2);
|
|
|
|
export function useToasts() {
|
|
return {
|
|
toasts: useSnapshot(state).toasts,
|
|
addToast: (toast: Omit<Toast, 'id'>) => {
|
|
state.toasts.push({
|
|
id: randomId(),
|
|
...toast
|
|
});
|
|
},
|
|
removeToast: (toast: Toast | string) => {
|
|
const id = typeof toast === 'string' ? toast : toast.id;
|
|
state.toasts = state.toasts.filter((t) => t.id !== id);
|
|
}
|
|
};
|
|
}
|