From 7571b46c1156cdd6cb5b14d767d21df35ba6d60f Mon Sep 17 00:00:00 2001 From: Alexander <98586297+Alexander-Kezik@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:41:03 +0100 Subject: [PATCH 1/2] fix(chat): fix version groups cleanup after approving unpublish request (Issue #2727) (#3027) --- .../src/components/Chat/Publish/PublicVersionSelector.tsx | 6 +++--- apps/chat/src/store/publication/publication.epics.ts | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/chat/src/components/Chat/Publish/PublicVersionSelector.tsx b/apps/chat/src/components/Chat/Publish/PublicVersionSelector.tsx index a3c97ded6..4dae41379 100644 --- a/apps/chat/src/components/Chat/Publish/PublicVersionSelector.tsx +++ b/apps/chat/src/components/Chat/Publish/PublicVersionSelector.tsx @@ -23,13 +23,13 @@ interface Props { readonly?: boolean; groupVersions?: boolean; textBeforeSelector?: string | null; + selectedEntityId?: string; + excludeEntityId?: string; onChangeSelectedVersion?: ( versionGroupId: string, newVersion: NonNullable['selectedVersion'], oldVersion: NonNullable['selectedVersion'], ) => void; - selectedEntityId?: string; - excludeEntityId?: string; } export function PublicVersionSelector({ @@ -38,9 +38,9 @@ export function PublicVersionSelector({ readonly, groupVersions, textBeforeSelector, - onChangeSelectedVersion, selectedEntityId, excludeEntityId, + onChangeSelectedVersion, }: Props) { const { t } = useTranslation(Translation.Chat); diff --git a/apps/chat/src/store/publication/publication.epics.ts b/apps/chat/src/store/publication/publication.epics.ts index 2b357e09b..24f49804b 100644 --- a/apps/chat/src/store/publication/publication.epics.ts +++ b/apps/chat/src/store/publication/publication.epics.ts @@ -838,7 +838,7 @@ const approvePublicationEpic: AppEpic = (action$, state$) => }); const versionGroups = uniq( - itemsToRemoveIds.map((id) => + idsToExclude.map((id) => getIdWithoutVersionFromApiKey(id, parseConversationApiKey), ), ); @@ -860,6 +860,7 @@ const approvePublicationEpic: AppEpic = (action$, state$) => name: conv.name, folderId: conv.folderId, publicationInfo: { + ...conv.publicationInfo, isNotExist: true, }, publishedWithMe: false, @@ -990,7 +991,7 @@ const approvePublicationEpic: AppEpic = (action$, state$) => return !hasPrompts && hasHiddenPrompts; }); const versionGroups = uniq( - itemsToRemoveIds.map((id) => { + idsToExclude.map((id) => { return getIdWithoutVersionFromApiKey(id, parsePromptApiKey); }), ); @@ -1011,6 +1012,7 @@ const approvePublicationEpic: AppEpic = (action$, state$) => name: prompt.name, folderId: prompt.folderId, publicationInfo: { + ...prompt.publicationInfo, isNotExist: true, }, publishedWithMe: false, From ca0f6ea25e2a9115b57764dd4b51bc4a613d84d1 Mon Sep 17 00:00:00 2001 From: Alexander <98586297+Alexander-Kezik@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:58:24 +0100 Subject: [PATCH 2/2] fix(chat): add models models and files uploading if approved request has such resources (Issue #2048) (#3030) --- .../store/publication/publication.epics.ts | 47 ++++++++++++++----- .../store/publication/publication.reducers.ts | 8 +++- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/apps/chat/src/store/publication/publication.epics.ts b/apps/chat/src/store/publication/publication.epics.ts index 24f49804b..0fd4147c3 100644 --- a/apps/chat/src/store/publication/publication.epics.ts +++ b/apps/chat/src/store/publication/publication.epics.ts @@ -598,10 +598,10 @@ const uploadPublishedWithMeItemsEpic: AppEpic = (action$, state$) => const selectedIds = ConversationsSelectors.selectSelectedConversationsIds(state$.value); - const selectedConversationsToUpload = selectedIds + const selectedConversationsToUpload = selectedIds.filter( // do not upload root entities, as they uploaded with listing - .filter((id) => id.split('/').length > 3) - .filter((id) => isEntityIdPublic({ id })); + (id) => id.split('/').length > 3 && isEntityIdPublic({ id }), + ); const publicationItems = items.map((item) => ({ ...item, id: item.url, @@ -664,8 +664,6 @@ const uploadPublishedWithMeItemsEpic: AppEpic = (action$, state$) => publicVersionGroups, }), ), - ); - actions.push( of( ConversationsActions.addConversations({ conversations, @@ -703,8 +701,6 @@ const uploadPublishedWithMeItemsEpic: AppEpic = (action$, state$) => publicVersionGroups, }), ), - ); - actions.push( of( PromptsActions.addPrompts({ prompts, @@ -1104,6 +1100,12 @@ const approvePublicationEpic: AppEpic = (action$, state$) => of( PublicationActions.approvePublicationSuccess({ url: payload.url, + triggerModelsListing: selectedPublication.resources.some( + (resource) => isApplicationId(resource.reviewUrl), + ), + triggerPublicFilesListing: selectedPublication.resources.some( + (resource) => isFileId(resource.reviewUrl), + ), }), ), ); @@ -1152,6 +1154,30 @@ const rejectPublicationFailEpic: AppEpic = (action$) => ), ); +const approvePublicationSuccessEpic: AppEpic = (action$) => + action$.pipe( + filter(PublicationActions.approvePublicationSuccess.match), + switchMap(({ payload }) => { + const actions: Observable[] = []; + + if (payload.triggerModelsListing) { + actions.push(of(ModelsActions.getModels())); + } + + if (payload.triggerPublicFilesListing) { + actions.push( + of( + PublicationActions.uploadPublishedWithMeItems({ + featureType: FeatureType.File, + }), + ), + ); + } + + return concat(...actions); + }), + ); + const resolvePublicationSuccessEpic: AppEpic = (action$, state$) => action$.pipe( filter( @@ -1286,8 +1312,6 @@ const uploadAllPublishedWithMeItemsEpic: AppEpic = (action$, state$) => publicVersionGroups, }), ), - ); - actions.push( of( ConversationsActions.uploadChildConversationsWithFoldersSuccess( { @@ -1311,8 +1335,6 @@ const uploadAllPublishedWithMeItemsEpic: AppEpic = (action$, state$) => publicVersionGroups, }), ), - ); - actions.push( of( PromptsActions.uploadChildPromptsWithFoldersSuccess({ parentIds: paths, @@ -1370,11 +1392,12 @@ export const PublicationEpics = combineEpics( uploadAllPublishedWithMeItemsEpic, uploadAllPublishedWithMeItemsFailEpic, - // handle publications + // resolve publications approvePublicationEpic, approvePublicationFailEpic, rejectPublicationEpic, rejectPublicationFailEpic, + approvePublicationSuccessEpic, resolvePublicationSuccessEpic, // upload rules diff --git a/apps/chat/src/store/publication/publication.reducers.ts b/apps/chat/src/store/publication/publication.reducers.ts index 04c090223..60d9885e9 100644 --- a/apps/chat/src/store/publication/publication.reducers.ts +++ b/apps/chat/src/store/publication/publication.reducers.ts @@ -109,7 +109,13 @@ export const publicationSlice = createSlice({ state, approvePublicationSuccess: ( state, - { payload }: PayloadAction<{ url: string }>, + { + payload, + }: PayloadAction<{ + url: string; + triggerModelsListing: boolean; + triggerPublicFilesListing: boolean; + }>, ) => { state.publications = state.publications.filter( (p) => p.url !== payload.url,