PromucFlow_constructor/app/client/src/sagas/GlobalSearchSagas.ts

106 lines
2.9 KiB
TypeScript
Raw Normal View History

import {
ReduxActionTypes,
ReduxAction,
} from "@appsmith/constants/ReduxActionConstants";
2021-03-08 08:24:12 +00:00
import {
all,
call,
put,
takeLatest,
select,
putResolve,
take,
} from "redux-saga/effects";
import { setRecentAppEntities, fetchRecentAppEntities } from "utils/storage";
import {
restoreRecentEntitiesSuccess,
setRecentEntities,
} from "actions/globalSearchActions";
import { AppState } from "@appsmith/reducers";
import {
getCurrentApplicationId,
getIsEditorInitialized,
} from "selectors/editorSelectors";
2021-03-08 08:24:12 +00:00
import { RecentEntity } from "components/editorComponents/GlobalSearch/utils";
import log from "loglevel";
import { getCurrentGitBranch } from "selectors/gitSyncSelectors";
2022-12-15 04:06:13 +00:00
import { FocusEntity, FocusEntityInfo } from "navigation/FocusEntity";
const getRecentEntitiesKey = (applicationId: string, branch?: string) =>
branch ? `${applicationId}-${branch}` : applicationId;
2021-03-08 08:24:12 +00:00
2022-12-15 04:06:13 +00:00
export function* updateRecentEntitySaga(entityInfo: FocusEntityInfo) {
2021-03-08 08:24:12 +00:00
try {
const branch: string | undefined = yield select(getCurrentGitBranch);
const applicationId: string = yield select(getCurrentApplicationId);
const recentEntitiesRestored: boolean = yield select(
2021-03-08 08:24:12 +00:00
(state: AppState) => state.ui.globalSearch.recentEntitiesRestored,
);
const isEditorInitialised: boolean = yield select(getIsEditorInitialized);
2021-03-08 08:24:12 +00:00
const waitForEffects = [];
if (!isEditorInitialised) {
waitForEffects.push(take(ReduxActionTypes.INITIALIZE_EDITOR_SUCCESS));
}
if (!recentEntitiesRestored) {
waitForEffects.push(
take(ReduxActionTypes.RESTORE_RECENT_ENTITIES_SUCCESS),
);
}
yield all(waitForEffects);
2022-12-15 04:06:13 +00:00
const { entity, id, pageId } = entityInfo;
let recentEntities: RecentEntity[] = yield select(
2021-03-08 08:24:12 +00:00
(state: AppState) => state.ui.globalSearch.recentEntities,
);
recentEntities = recentEntities.slice();
recentEntities = recentEntities.filter(
2022-12-15 04:06:13 +00:00
(recentEntity: { type: FocusEntity; id: string }) =>
recentEntity.id !== id,
2021-03-08 08:24:12 +00:00
);
2022-12-15 04:06:13 +00:00
recentEntities.unshift(<RecentEntity>{ type: entity, id, pageId });
recentEntities = recentEntities.slice(0, 6);
2021-03-08 08:24:12 +00:00
yield put(setRecentEntities(recentEntities));
if (applicationId) {
2021-03-08 08:24:12 +00:00
yield call(
setRecentAppEntities,
recentEntities,
getRecentEntitiesKey(applicationId, branch),
2021-03-08 08:24:12 +00:00
);
}
} catch (e) {
log.error(e);
2021-03-08 08:24:12 +00:00
}
}
export function* restoreRecentEntities(
actionPayload: ReduxAction<{ applicationId: string; branch?: string }>,
) {
const {
payload: { applicationId, branch },
} = actionPayload;
const recentAppEntities: RecentEntity[] = yield call(
fetchRecentAppEntities,
getRecentEntitiesKey(applicationId, branch),
);
2021-03-08 08:24:12 +00:00
yield putResolve(setRecentEntities(recentAppEntities));
yield put(restoreRecentEntitiesSuccess());
}
export default function* globalSearchSagas() {
yield all([
takeLatest(
ReduxActionTypes.RESTORE_RECENT_ENTITIES_REQUEST,
restoreRecentEntities,
),
]);
}