PromucFlow_constructor/app/client/src/sagas/RecentEntitiesSagas.ts
Apeksha Bhosale 09eea59330
feat: JS Editor (#6003)
* Changes to add js plugin

* routes+reducer+create template

* added debugger to js editor page

* entity explorer changes

* create js function

* added copy, move and delete action

* added js plugin

* added existing js functions to data tree

* removed actionconfig for js collection

* new js function added to data tree and entity as well

* parsing flow added

* changes to data tree

* parse and update js functions

* small changes for def creator for js action

* create delete modified

* small changes for update

* update flow change

* entity properties added

* removed linting errors

* small changes in entity explorer

* changes for update

* move, copy implementation

* conflict resolved

* changes for dependecy map creation

* Only make the variables the binding paths

* Basic eval sync working

* Minor fixes

* removed unwanted code

* entity props and autocomplete

* saving in progress show

* redirection fix after delete js action

* removed unnecessary line

* Fixing merge conflict

* added sample body

* removed dummy data and added plugin Type

* few PR comments fixed

* automplete fix

* few more PR comments fix

* PR commnets fix

* move and copy api change

* js colleciton name refactor & 'move to page' changes & search

* view changes

* autocomplete added for js collections

* removing till async is implemented

* small changes

* separate js pane response view

* Executing functions

* js collection to js objects

* entity explorer issue and resolve action on page switch

* removed unused line

* small color fix

* js file icon added

* added js action to property pane

* Property pane changes for actions

* property pane changes for js functions

* showing syntax error for now

* actions sorted in response tab

* added js objects to slash and recent entitties

* enabling this to be used inside of function

* eval fix

* feature flag changes for entity explorer and property pane

* debugger changes

* copy bug fix

* small changes for eval

* debugger bug fix

* chnaged any to specific types

* error in console fix

* icons update

* fixed test case

* test case fix

* non empty check for functions

* evaluate test case fix

* added new icons

* text change

* updated time for debounce for trial

* after release mereg

* changed icon

* after merge

* PR comments simple

* fixed PR comments - redux form, settings remove

* js object interface changes

* name refactor

* export default change

* delete resolve actions chnage

* after merge

* adding execute fn as 3rd option and removed create new js function

* issue 7054 fixed - app crash

* execute function on response tab changes

* refactor function name part 1

* refactor of js function name

* try catch added refactor

* test fix

* not used line removed

* test cases locator fixed

Co-authored-by: Nidhi <nidhi.nair93@gmail.com>
Co-authored-by: hetunandu <hetu@appsmith.com>
2021-09-08 23:02:22 +05:30

90 lines
2.3 KiB
TypeScript

import { ReduxActionTypes, ReduxAction } from "constants/ReduxActionConstants";
import { all, put, takeLatest } from "redux-saga/effects";
import { updateRecentEntity } from "actions/globalSearchActions";
import {
matchApiPath,
matchDatasourcePath,
matchQueryPath,
matchBuilderPath,
matchJSObjectPath,
} from "constants/routes";
import { MAIN_CONTAINER_WIDGET_ID } from "constants/WidgetConstants";
const getRecentEntity = (pathName: string) => {
const builderMatch = matchBuilderPath(pathName);
if (builderMatch)
return {
type: "page",
id: builderMatch?.params?.pageId,
params: builderMatch?.params,
};
const apiMatch = matchApiPath(pathName);
if (apiMatch)
return {
type: "action",
id: apiMatch?.params?.apiId,
params: apiMatch?.params,
};
const queryMatch = matchQueryPath(pathName);
if (queryMatch)
return {
type: "action",
id: queryMatch.params?.queryId,
params: queryMatch?.params,
};
const datasourceMatch = matchDatasourcePath(pathName);
if (datasourceMatch)
return {
type: "datasource",
id: datasourceMatch?.params?.datasourceId,
params: datasourceMatch?.params,
};
const jsObjectMatch = matchJSObjectPath(pathName);
if (jsObjectMatch) {
return {
type: "jsAction",
id: jsObjectMatch?.params?.collectionId,
params: jsObjectMatch?.params,
};
}
return {};
};
function* handleSelectWidget(action: ReduxAction<{ widgetId: string }>) {
const builderMatch = matchBuilderPath(window.location.pathname);
const { payload } = action;
const selectedWidget = payload.widgetId;
if (selectedWidget && selectedWidget !== MAIN_CONTAINER_WIDGET_ID)
yield put(
updateRecentEntity({
type: "widget",
id: selectedWidget,
params: builderMatch?.params,
}),
);
}
function* handlePathUpdated(
action: ReduxAction<{ location: typeof window.location }>,
) {
const { id, params, type } = getRecentEntity(
action.payload.location.pathname,
);
if (type && id && id.indexOf(":") === -1) {
yield put(updateRecentEntity({ type, id, params }));
}
}
export default function* recentEntitiesSagas() {
yield all([
takeLatest(ReduxActionTypes.SELECT_WIDGET_INIT, handleSelectWidget),
takeLatest(ReduxActionTypes.HANDLE_PATH_UPDATED, handlePathUpdated),
]);
}