feat: Migrate favorites state management from Recoil to Jotai

This commit is contained in:
Marco Beretta 2025-12-02 22:38:35 +01:00
parent 769374d14a
commit 7b4fc58d25
No known key found for this signature in database
GPG key ID: D918033D8E74CC11
3 changed files with 9 additions and 14 deletions

View file

@ -1,11 +1,11 @@
import { useEffect, useCallback } from 'react'; import { useEffect, useCallback } from 'react';
import { useRecoilState } from 'recoil'; import { useAtom } from 'jotai';
import { useToastContext } from '@librechat/client'; import { useToastContext } from '@librechat/client';
import type { Favorite } from '~/store/favorites'; import type { Favorite } from '~/store/favorites';
import { useGetFavoritesQuery, useUpdateFavoritesMutation } from '~/data-provider'; import { useGetFavoritesQuery, useUpdateFavoritesMutation } from '~/data-provider';
import { favoritesAtom } from '~/store';
import { useLocalize } from '~/hooks'; import { useLocalize } from '~/hooks';
import { logger } from '~/utils'; import { logger } from '~/utils';
import store from '~/store';
/** /**
* Hook for managing user favorites (pinned agents and models). * Hook for managing user favorites (pinned agents and models).
@ -36,7 +36,7 @@ const cleanFavorites = (favorites: Favorite[]): Favorite[] =>
export default function useFavorites() { export default function useFavorites() {
const localize = useLocalize(); const localize = useLocalize();
const { showToast } = useToastContext(); const { showToast } = useToastContext();
const [favorites, setFavorites] = useRecoilState(store.favorites); const [favorites, setFavorites] = useAtom(favoritesAtom);
const getFavoritesQuery = useGetFavoritesQuery(); const getFavoritesQuery = useGetFavoritesQuery();
const updateFavoritesMutation = useUpdateFavoritesMutation(); const updateFavoritesMutation = useUpdateFavoritesMutation();

View file

@ -1,4 +1,4 @@
import { atom } from 'recoil'; import { createStorageAtom } from './jotai-utils';
export type Favorite = { export type Favorite = {
agentId?: string; agentId?: string;
@ -13,11 +13,7 @@ export type FavoriteModel = {
export type FavoritesState = Favorite[]; export type FavoritesState = Favorite[];
const favorites = atom<FavoritesState>({ /**
key: 'favorites', * This atom stores the user's favorite models/agents
default: [], */
}); export const favoritesAtom = createStorageAtom<FavoritesState>('favorites', []);
export default {
favorites,
};

View file

@ -12,9 +12,9 @@ import lang from './language';
import settings from './settings'; import settings from './settings';
import misc from './misc'; import misc from './misc';
import isTemporary from './temporary'; import isTemporary from './temporary';
import favorites from './favorites';
export * from './agents'; export * from './agents';
export * from './mcp'; export * from './mcp';
export * from './favorites';
export default { export default {
...artifacts, ...artifacts,
@ -31,5 +31,4 @@ export default {
...settings, ...settings,
...misc, ...misc,
...isTemporary, ...isTemporary,
...favorites,
}; };