File size: 1,865 Bytes
5f40163 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import { create } from "zustand";
import { persist, createJSONStorage } from "zustand/middleware";
import { GitRepository } from "#/types/git";
import { Provider } from "#/types/settings";
interface HomeState {
recentRepositories: GitRepository[];
lastSelectedProvider: Provider | null;
}
interface HomeActions {
addRecentRepository: (repository: GitRepository) => void;
clearRecentRepositories: () => void;
getRecentRepositories: () => GitRepository[];
setLastSelectedProvider: (provider: Provider | null) => void;
getLastSelectedProvider: () => Provider | null;
}
type HomeStore = HomeState & HomeActions;
const initialState: HomeState = {
recentRepositories: [],
lastSelectedProvider: null,
};
export const useHomeStore = create<HomeStore>()(
persist(
(set, get) => ({
...initialState,
addRecentRepository: (repository: GitRepository) =>
set((state) => {
// Remove the repository if it already exists to avoid duplicates
const filteredRepos = state.recentRepositories.filter(
(repo) => repo.id !== repository.id,
);
// Add the new repository to the beginning and keep only top 3
const updatedRepos = [repository, ...filteredRepos].slice(0, 3);
return {
recentRepositories: updatedRepos,
};
}),
clearRecentRepositories: () =>
set(() => ({
recentRepositories: [],
})),
getRecentRepositories: () => get().recentRepositories,
setLastSelectedProvider: (provider: Provider | null) =>
set(() => ({
lastSelectedProvider: provider,
})),
getLastSelectedProvider: () => get().lastSelectedProvider,
}),
{
name: "home-store", // unique name for localStorage
storage: createJSONStorage(() => localStorage),
},
),
);
|