PromucFlow_constructor/app/client/src/sagas/ActionExecution/StoreActionSaga.ts
ChandanBalajiBP 9a42ca9707
feat: Error Navigation (#21753)
## Description

> 

```
const isOnCanvas = matchBuilderPath(window.location.pathname);
    if (isOnCanvas) {
      dispatch(showDebuggerAction(!showDebugger));
}}
```
The condition check to verify if we are on canvas was removed as we are
opening debugger throughout all pages.

> Now debugger is accessible from all pages in Appsmith. (Earlier it was
not present in Datasources pages.)

Fixes #19567 
#21935 
#21934 
#21907 
#21223

Media
> [Video](https://www.loom.com/share/ff5eebb5e0a74e0bad6ead26050b5833)


## Type of change

> Please delete options that are not relevant.

- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)


## How Has This Been Tested?

- Manual
- Jest
- Cypress

### Test Plan
> Add Testsmith test cases links that relate to this PR

### Issues raised during DP testing
> Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)


## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag


### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-10 18:29:14 +05:30

64 lines
2.3 KiB
TypeScript

import { put, select } from "redux-saga/effects";
import { getAppStoreName } from "constants/AppConstants";
import localStorage from "utils/localStorage";
import { updateAppStore } from "actions/pageActions";
import AppsmithConsole from "utils/AppsmithConsole";
import { getAppStoreData } from "selectors/entitiesSelector";
import { getCurrentGitBranch } from "selectors/gitSyncSelectors";
import { getCurrentApplicationId } from "selectors/editorSelectors";
import type { AppStoreState } from "reducers/entityReducers/appReducer";
import { Severity, LOG_CATEGORY } from "entities/AppsmithConsole";
import moment from "moment";
import type {
TClearStoreDescription,
TRemoveValueDescription,
TStoreValueDescription,
} from "workers/Evaluation/fns/storeFns";
type StoreOperation =
| TStoreValueDescription
| TClearStoreDescription
| TRemoveValueDescription;
export function* handleStoreOperations(triggers: StoreOperation[]) {
const applicationId: string = yield select(getCurrentApplicationId);
const branch: string | undefined = yield select(getCurrentGitBranch);
const appStoreName = getAppStoreName(applicationId, branch);
const existingLocalStore = localStorage.getItem(appStoreName) || "{}";
let parsedLocalStore = JSON.parse(existingLocalStore);
let currentStore: AppStoreState = yield select(getAppStoreData);
const logs: string[] = [];
for (const t of triggers) {
const { type } = t;
if (type === "STORE_VALUE") {
const { key, persist, value } = t.payload;
if (persist) {
parsedLocalStore[key] = value;
}
currentStore[key] = value;
logs.push(`storeValue('${key}', '${value}', ${persist})`);
} else if (type === "REMOVE_VALUE") {
const { key } = t.payload;
delete parsedLocalStore[key];
delete currentStore[key];
logs.push(`removeValue('${key}')`);
} else if (type === "CLEAR_STORE") {
parsedLocalStore = {};
currentStore = {};
logs.push(`clearStore()`);
}
}
yield put(updateAppStore(currentStore));
const storeString = JSON.stringify(parsedLocalStore);
localStorage.setItem(appStoreName, storeString);
AppsmithConsole.addLogs(
logs.map((text) => ({
text,
severity: Severity.INFO,
category: LOG_CATEGORY.USER_GENERATED,
timestamp: moment().format("hh:mm:ss"),
isExpanded: false,
})),
);
}