ALwrity Version 0.5.0 (Fastapi + React )

This commit is contained in:
ajaysi
2025-08-06 12:48:02 +05:30
parent f28a919caa
commit 32f97fa6b3
476 changed files with 115544 additions and 28747 deletions

View File

@@ -0,0 +1,110 @@
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import { DashboardState, SnackbarState } from '../components/shared/types';
export interface DashboardStore extends DashboardState {
// Actions
toggleFavorite: (toolName: string) => void;
setSearchQuery: (query: string) => void;
setSelectedCategory: (category: string | null) => void;
setSelectedSubCategory: (subCategory: string | null) => void;
setError: (error: string | null) => void;
setLoading: (loading: boolean) => void;
showSnackbar: (message: string, severity?: SnackbarState['severity']) => void;
hideSnackbar: () => void;
clearFilters: () => void;
}
export const useDashboardStore = create<DashboardStore>()(
persist(
(set, get) => ({
// Initial state
loading: false,
error: null,
searchQuery: '',
selectedCategory: null,
selectedSubCategory: null,
favorites: [],
snackbar: {
open: false,
message: '',
severity: 'info',
},
// Actions
toggleFavorite: (toolName: string) => {
const { favorites } = get();
const newFavorites = favorites.includes(toolName)
? favorites.filter(f => f !== toolName)
: [...favorites, toolName];
set({ favorites: newFavorites });
// Show snackbar
const message = favorites.includes(toolName)
? 'Removed from favorites'
: 'Added to favorites';
get().showSnackbar(message, 'success');
},
setSearchQuery: (query: string) => {
set({ searchQuery: query });
},
setSelectedCategory: (category: string | null) => {
set({
selectedCategory: category,
selectedSubCategory: null, // Reset sub-category when changing main category
});
},
setSelectedSubCategory: (subCategory: string | null) => {
set({ selectedSubCategory: subCategory });
},
setError: (error: string | null) => {
set({ error });
},
setLoading: (loading: boolean) => {
set({ loading });
},
showSnackbar: (message: string, severity: SnackbarState['severity'] = 'info') => {
set({
snackbar: {
open: true,
message,
severity,
},
});
},
hideSnackbar: () => {
set({
snackbar: {
...get().snackbar,
open: false,
},
});
},
clearFilters: () => {
set({
searchQuery: '',
selectedCategory: null,
selectedSubCategory: null,
});
},
}),
{
name: 'alwrity-dashboard-storage',
partialize: (state) => ({
favorites: state.favorites,
searchQuery: state.searchQuery,
selectedCategory: state.selectedCategory,
selectedSubCategory: state.selectedSubCategory,
}),
}
)
);