PromucFlow_constructor/app/client/src/reducers/uiReducers/apiPaneReducer.ts

214 lines
5.2 KiB
TypeScript
Raw Normal View History

2022-08-04 05:40:44 +00:00
import { createReducer } from "utils/ReducerUtils";
2019-11-13 07:34:59 +00:00
import {
ReduxActionTypes,
ReduxActionErrorTypes,
2019-11-25 09:15:11 +00:00
ReduxAction,
} from "@appsmith/constants/ReduxActionConstants";
import { Action } from "entities/Action";
import { UpdateActionPropertyActionPayload } from "actions/pluginActionActions";
2019-11-13 07:34:59 +00:00
const initialState: ApiPaneReduxState = {
isCreating: false,
2019-11-13 07:34:59 +00:00
isFetching: false,
2019-12-11 15:14:38 +00:00
isRunning: {},
isSaving: {},
isDeleting: {},
isDirty: {},
currentCategory: "",
extraformData: {},
2019-11-13 07:34:59 +00:00
};
2020-06-18 14:16:49 +00:00
2019-11-13 07:34:59 +00:00
export interface ApiPaneReduxState {
isCreating: boolean; // RR
isFetching: boolean; // RR
2019-12-11 15:14:38 +00:00
isRunning: Record<string, boolean>;
isSaving: Record<string, boolean>; // RN
2019-12-11 15:14:38 +00:00
isDeleting: Record<string, boolean>;
isDirty: Record<string, boolean>;
currentCategory: string;
extraformData: Record<string, any>;
2019-11-13 07:34:59 +00:00
}
const apiPaneReducer = createReducer(initialState, {
[ReduxActionTypes.FETCH_ACTIONS_INIT]: (state: ApiPaneReduxState) => ({
...state,
isFetching: true,
}),
[ReduxActionTypes.FETCH_ACTIONS_SUCCESS]: (state: ApiPaneReduxState) => ({
...state,
isFetching: false,
}),
[ReduxActionErrorTypes.FETCH_ACTIONS_ERROR]: (state: ApiPaneReduxState) => ({
...state,
isFetching: false,
}),
[ReduxActionTypes.CREATE_ACTION_INIT]: (
state: ApiPaneReduxState,
): ApiPaneReduxState => ({
...state,
isCreating: true,
}),
[ReduxActionTypes.CREATE_ACTION_SUCCESS]: (
state: ApiPaneReduxState,
): ApiPaneReduxState => ({
...state,
isCreating: false,
}),
[ReduxActionErrorTypes.CREATE_ACTION_ERROR]: (
state: ApiPaneReduxState,
): ApiPaneReduxState => ({
...state,
isCreating: false,
}),
[ReduxActionTypes.RUN_ACTION_REQUEST]: (
2019-12-11 15:14:38 +00:00
state: ApiPaneReduxState,
2020-02-13 11:38:34 +00:00
action: ReduxAction<{ id: string }>,
2019-12-11 15:14:38 +00:00
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isRunning: {
...state.isRunning,
2020-02-13 11:38:34 +00:00
[action.payload.id]: true,
2019-12-11 15:14:38 +00:00
},
2019-11-13 07:34:59 +00:00
}),
[ReduxActionTypes.RUN_ACTION_SUCCESS]: (
2019-12-11 15:14:38 +00:00
state: ApiPaneReduxState,
action: ReduxAction<{ [id: string]: any }>,
) => {
const actionId = Object.keys(action.payload)[0];
return {
...state,
isRunning: {
...state.isRunning,
[actionId]: false,
},
};
},
[ReduxActionErrorTypes.RUN_ACTION_ERROR]: (
2019-12-11 15:14:38 +00:00
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isRunning: {
...state.isRunning,
[action.payload.id]: false,
},
2019-11-13 07:34:59 +00:00
}),
[ReduxActionTypes.RUN_ACTION_CANCELLED]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
): ApiPaneReduxState => ({
...state,
isRunning: {
...state.isRunning,
[action.payload.id]: false,
},
}),
[ReduxActionTypes.UPDATE_ACTION_PROPERTY]: (
state: ApiPaneReduxState,
action: ReduxAction<UpdateActionPropertyActionPayload>,
) => ({
...state,
isDirty: {
...state.isDirty,
[action.payload.id]: true,
},
}),
2019-12-11 15:14:38 +00:00
[ReduxActionTypes.UPDATE_ACTION_INIT]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
2019-12-11 15:14:38 +00:00
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isSaving: {
...state.isSaving,
[action.payload.id]: true,
2019-12-11 15:14:38 +00:00
},
2019-11-13 07:34:59 +00:00
}),
2019-12-11 15:14:38 +00:00
[ReduxActionTypes.UPDATE_ACTION_SUCCESS]: (
state: ApiPaneReduxState,
action: ReduxAction<{ data: Action }>,
2019-12-11 15:14:38 +00:00
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isSaving: {
...state.isSaving,
[action.payload.data.id]: false,
},
isDirty: {
...state.isDirty,
[action.payload.data.id]: false,
},
2019-11-13 07:34:59 +00:00
}),
2019-12-11 15:14:38 +00:00
[ReduxActionErrorTypes.UPDATE_ACTION_ERROR]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isSaving: {
...state.isSaving,
[action.payload.id]: false,
},
2019-11-13 07:34:59 +00:00
}),
2019-12-11 15:14:38 +00:00
[ReduxActionTypes.DELETE_ACTION_INIT]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isDeleting: {
...state.isDeleting,
[action.payload.id]: true,
},
2019-11-13 07:34:59 +00:00
}),
2019-12-11 15:14:38 +00:00
[ReduxActionTypes.DELETE_ACTION_SUCCESS]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isDeleting: {
...state.isDeleting,
[action.payload.id]: false,
},
2019-11-13 07:34:59 +00:00
}),
2019-12-11 15:14:38 +00:00
[ReduxActionErrorTypes.DELETE_ACTION_ERROR]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string }>,
) => ({
2019-11-13 07:34:59 +00:00
...state,
2019-12-11 15:14:38 +00:00
isDeleting: {
...state.isDeleting,
[action.payload.id]: false,
},
2019-11-13 07:34:59 +00:00
}),
[ReduxActionTypes.SET_CURRENT_CATEGORY]: (
state: ApiPaneReduxState,
action: ReduxAction<{ category: string }>,
) => ({
...state,
currentCategory: action.payload.category,
}),
feat: Support body in GET API requests (#7127) * WIP * Refactoring HTTP Method & Content Type to be objects instead of arrays TODO: 1. Set the default content-type for Get request to "None". Currently, it's raw 2. For None content-type, don't send the body field in the API request * Almost working implementation for the None type Currently, the body still gets sent in non-GET requests even if the None tab is selected. * Adding object.freeze to prevent any modifications to HTTP_METHOD_ENUM * WIP: Using enum & const for ts autocomplete * working implementation for NONE type, apiContentType prop added to API actions * WIP * Refactoring HTTP Method & Content Type to be objects instead of arrays TODO: 1. Set the default content-type for Get request to "None". Currently, it's raw 2. For None content-type, don't send the body field in the API request * Almost working implementation for the None type Currently, the body still gets sent in non-GET requests even if the None tab is selected. * Adding object.freeze to prevent any modifications to HTTP_METHOD_ENUM * WIP: Using enum & const for ts autocomplete * working implementation for NONE type, apiContentType prop added to API actions * adds apiContentType to actionConfiguration.formData object * Handling apiContentType property in Rest API formData * change apiContentType when user types content-type value and switches http method * makes api editor as similar as possible to postman, project postman. * Correcting the import in ApiEditorConstants * Resolved all merge conflicts * replay DSL functtionality * removes unneccessary files from worker * Fixes type declarations, naming e.t.c. * fix server side merge conflicts * fix client side merge conflicts * fix failing cypress tests Co-authored-by: Irongade <adeoluayangade@yahoo.com> Co-authored-by: Ayangade Adeoluwa <37867493+Irongade@users.noreply.github.com>
2022-02-15 11:13:48 +00:00
/**
* This redux action sets the extraformData field for an action. This is used to select the
* appropriate body type tab selection in the Rest API plugin based on the content-type.
* This redux action can be extended to other functionalities as well in the future.
*
* @param {ApiPaneReduxState} state
* @param {ReduxAction} action
* @returns {ApiPaneReduxState}
*/
[ReduxActionTypes.SET_EXTRA_FORMDATA]: (
state: ApiPaneReduxState,
action: ReduxAction<{ id: string; values: Record<string, unknown> }>,
) => {
const { id, values } = action.payload;
return {
...state,
extraformData: {
...state.extraformData,
[id]: values,
},
};
},
2019-11-13 07:34:59 +00:00
});
export default apiPaneReducer;