import { InfiniteCollections, QueryKeys } from 'librechat-data-provider'; import type { InfiniteData, QueryClient } from '@tanstack/react-query'; import type { PromptGroupListResponse, PromptGroupListData, TPromptGroup, } from 'librechat-data-provider'; import { addData, deleteData, updateData, updateFields, addToCacheList, updateCacheList, removeFromCacheList, getRecordByProperty, } from './collection'; export const addPromptGroup = ( data: InfiniteData, newPromptGroup: TPromptGroup, ): PromptGroupListData => { return addData( data, InfiniteCollections.PROMPT_GROUPS, newPromptGroup, (page) => page.promptGroups.findIndex((group) => group._id === newPromptGroup._id), ); }; export const updatePromptGroup = ( data: InfiniteData, updatedPromptGroup: TPromptGroup, ): PromptGroupListData => { return updateData( data, InfiniteCollections.PROMPT_GROUPS, updatedPromptGroup, (page) => page.promptGroups.findIndex((group) => group._id === updatedPromptGroup._id), ); }; export const deletePromptGroup = ( data: InfiniteData, groupId: string, ): PromptGroupListData => { return deleteData( data, InfiniteCollections.PROMPT_GROUPS, (page) => page.promptGroups.findIndex((group) => group._id === groupId), ); }; export const updateGroupFields = ( data: InfiniteData, updatedGroup: Partial, callback?: (group: TPromptGroup) => void, ): InfiniteData => { return updateFields( data, updatedGroup, InfiniteCollections.PROMPT_GROUPS, '_id', callback, ); }; export const getSnippet = (promptText: string, length = 56) => { return promptText.length > length ? `${promptText.slice(0, length - 3)}...` : promptText; }; export const findPromptGroup = ( data: InfiniteData, findProperty: (group: TPromptGroup) => boolean, ): TPromptGroup | undefined => { return getRecordByProperty( data, InfiniteCollections.PROMPT_GROUPS, findProperty, ); }; export const addGroupToAll = (queryClient: QueryClient, newGroup: TPromptGroup) => { addToCacheList(queryClient, [QueryKeys.allPromptGroups], newGroup); }; export const updateGroupInAll = ( queryClient: QueryClient, updatedGroup: Partial & { _id: string }, ) => { updateCacheList({ queryClient, queryKey: [QueryKeys.allPromptGroups], searchProperty: '_id', updateData: updatedGroup, searchValue: updatedGroup._id, }); }; export const removeGroupFromAll = (queryClient: QueryClient, groupId: string) => { removeFromCacheList(queryClient, [QueryKeys.allPromptGroups], '_id', groupId); };