failedMigratedConversations: filterMigratedEntities()

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({