🔖 feat: Conversation Bookmarks (#3344)

* feat: add tags property in Conversation model

* feat: add ConversationTag model

* feat: add the tags parameter to getConvosByPage

* feat: add API route to ConversationTag

* feat: add types of ConversationTag

* feat: add data access functions for conversation tags

* feat: add Bookmark table component

* feat: Add an action to bookmark

* feat: add Bookmark nav component

* fix: failed test

* refactor: made 'Saved' tag a constant

* feat: add new bookmark to current conversation

* chore: Add comment

* fix: delete tag from conversations when it's deleted

* fix: Update the query cache when the tag title is changed.

* chore: fix typo

* refactor: add description of rebuilding bookmarks

* chore: remove unused variables

* fix: position when adding a new bookmark

* refactor: add comment, rename a function

* refactor: add a unique constraint in ConversationTag

* chore: add localizations
This commit is contained in:
Yuichi Oneda 2024-07-29 07:45:59 -07:00 committed by GitHub
parent d4d56281e3
commit e565e0faab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
65 changed files with 3751 additions and 36 deletions

View file

@ -424,7 +424,8 @@ export const listConversations = (
// Assuming params has a pageNumber property
const pageNumber = params?.pageNumber || '1'; // Default to page 1 if not provided
const isArchived = params?.isArchived || false; // Default to false if not provided
return request.get(endpoints.conversations(pageNumber, isArchived));
const tags = params?.tags || []; // Default to an empty array if not provided
return request.get(endpoints.conversations(pageNumber, isArchived, tags));
};
export const listConversationsByQuery = (
@ -541,3 +542,34 @@ export function updatePromptPermissions(
): Promise<m.UpdatePromptPermResponse> {
return request.put(endpoints.updatePromptPermissions(variables.roleName), variables.updates);
}
/* Tags */
export function getConversationTags(): Promise<t.TConversationTagsResponse> {
return request.get(endpoints.conversationTags());
}
export function createConversationTag(
payload: t.TConversationTagRequest,
): Promise<t.TConversationTagResponse> {
return request.post(endpoints.conversationTags(), payload);
}
export function updateConversationTag(
tag: string,
payload: t.TConversationTagRequest,
): Promise<t.TConversationTagResponse> {
return request.put(endpoints.conversationTags(tag), payload);
}
export function deleteConversationTag(tag: string): Promise<t.TConversationTagResponse> {
return request.delete(endpoints.conversationTags(tag));
}
export function addTagToConversation(
conversationId: string,
payload: t.TTagConversationRequest,
): Promise<t.TTagConversationResponse> {
return request.put(endpoints.addTagToConversation(conversationId), payload);
}
export function rebuildConversationTags(): Promise<t.TConversationTagsResponse> {
return request.post(endpoints.conversationTags('rebuild'));
}