in apps/chat/src/store/migration/migration.epics.ts [125:303]
failedMigratedConversations: filterMigratedEntities(
conversations,
failedMigratedConversationIds,
),
}),
),
);
}
return EMPTY;
}
const conversationsWithoutDate = notMigratedConversations.filter(
(c) => !c.lastActivityDate,
);
const conversationsWithDate = notMigratedConversations.filter(
(c) => c.lastActivityDate,
);
const sortedConversations = [
...conversationsWithoutDate,
...orderBy(conversationsWithDate, (c) => c.lastActivityDate),
];
const preparedConversations = getPreparedConversations({
conversations: sortedConversations,
conversationsFolders,
});
let migratedConversationsCount = 0;
return concat(
of(
MigrationActions.initConversationsMigration({
conversationsToMigrateCount: notMigratedConversations.length,
}),
),
from(preparedConversations).pipe(
concatMap((conversation) =>
ConversationService.setConversations([
conversation as Conversation,
]).pipe(
concatMap(() => {
migratedConversationIds.push(
sortedConversations[migratedConversationsCount].id,
);
return concat(
BrowserStorage.setMigratedEntitiesIds(
migratedConversationIds,
MigrationStorageKeys.MigratedConversationIds,
).pipe(switchMap(() => EMPTY)),
of(
MigrationActions.migrateConversationFinish({
migratedConversationsCount:
++migratedConversationsCount,
}),
),
);
}),
catchError(() => {
failedMigratedConversationIds.push(
sortedConversations[migratedConversationsCount].id,
);
return concat(
BrowserStorage.setFailedMigratedEntityIds(
failedMigratedConversationIds,
MigrationStorageKeys.FailedMigratedConversationIds,
).pipe(switchMap(() => EMPTY)),
of(
MigrationActions.migrateConversationFinish({
migratedConversationsCount:
++migratedConversationsCount,
}),
),
);
}),
),
),
),
);
},
),
);
export const skipFailedMigratedConversationsEpic: AppEpic = (action$) =>
action$.pipe(
filter(MigrationActions.skipFailedMigratedConversations.match),
switchMap(({ payload }) =>
BrowserStorage.getMigratedEntityIds(
MigrationStorageKeys.MigratedConversationIds,
).pipe(
switchMap((migratedConversationIds) =>
concat(
BrowserStorage.setMigratedEntitiesIds(
[...payload.idsToMarkAsMigrated, ...migratedConversationIds],
MigrationStorageKeys.MigratedConversationIds,
).pipe(switchMap(() => EMPTY)),
BrowserStorage.setFailedMigratedEntityIds(
[],
MigrationStorageKeys.FailedMigratedConversationIds,
).pipe(switchMap(() => EMPTY)),
of(
MigrationActions.setFailedMigratedConversations({
failedMigratedConversations: [],
}),
),
),
),
),
),
);
const migratePromptsIfRequiredEpic: AppEpic = (action$, state$) =>
action$.pipe(
filter(MigrationActions.migratePromptsIfRequired.match),
switchMap(() =>
forkJoin({
prompts: browserStorage.getPrompts().pipe(map(filterOnlyMyEntities)),
promptsFolders: browserStorage
.getPromptsFolders(undefined, true)
.pipe(map(filterOnlyMyEntities)),
migratedPromptIds: BrowserStorage.getMigratedEntityIds(
MigrationStorageKeys.MigratedPromptIds,
),
failedMigratedPromptIds: BrowserStorage.getFailedMigratedEntityIds(
MigrationStorageKeys.FailedMigratedPromptIds,
),
isPromptsBackedUp: BrowserStorage.getEntityBackedUp(
MigrationStorageKeys.PromptsBackedUp,
),
isMigrationInitialized:
BrowserStorage.getEntitiesMigrationInitialized(),
}),
),
switchMap(
({
prompts,
promptsFolders,
migratedPromptIds,
failedMigratedPromptIds,
isPromptsBackedUp,
isMigrationInitialized,
}) => {
const notMigratedPrompts = filterMigratedEntities(
prompts,
[...migratedPromptIds, ...failedMigratedPromptIds],
true,
);
if (
!isMigrationInitialized &&
prompts.length &&
!failedMigratedPromptIds.length &&
!migratedPromptIds.length
) {
return concat(
of(
MigrationActions.setFailedMigratedPrompts({
failedMigratedPrompts: filterMigratedEntities(
prompts,
prompts.map((p) => p.id),
),
}),
),
of(UIActions.setShowSelectToMigrateWindow(true)),
);
}
if (
SettingsSelectors.selectStorageType(state$.value) !==
StorageType.API ||
!notMigratedPrompts.length
) {
if (failedMigratedPromptIds.length) {
return concat(
of(MigrationActions.setIsPromptsBackedUp({ isPromptsBackedUp })),
of(
MigrationActions.setFailedMigratedPrompts({