import { ReduxAction, ReduxActionTypes, ReduxActionWithCallbacks, } from "constants/ReduxActionConstants"; import { CreateDatasourceConfig } from "api/DatasourcesApi"; import { Datasource } from "entities/Datasource"; import { PluginType } from "entities/Action"; import { executeDatasourceQueryRequest } from "../api/DatasourcesApi"; import { ResponseMeta } from "../api/ApiResponses"; export const createDatasourceFromForm = (payload: CreateDatasourceConfig) => { return { type: ReduxActionTypes.CREATE_DATASOURCE_FROM_FORM_INIT, payload, }; }; export const updateDatasource = ( payload: Datasource, onSuccess?: ReduxAction, onError?: ReduxAction, ): ReduxActionWithCallbacks => { return { type: ReduxActionTypes.UPDATE_DATASOURCE_INIT, payload, onSuccess, onError, }; }; export type UpdateDatasourceSuccessAction = { type: string; payload: Datasource; redirect: boolean; queryParams?: Record; }; export const updateDatasourceSuccess = ( payload: Datasource, redirect = true, queryParams = {}, ): UpdateDatasourceSuccessAction => ({ type: ReduxActionTypes.UPDATE_DATASOURCE_SUCCESS, payload, redirect, queryParams, }); export const redirectAuthorizationCode = ( pageId: string, datasourceId: string, pluginType: PluginType, ) => { return { type: ReduxActionTypes.REDIRECT_AUTHORIZATION_CODE, payload: { pageId, datasourceId, pluginType, }, }; }; export const fetchDatasourceStructure = (id: string, ignoreCache?: boolean) => { return { type: ReduxActionTypes.FETCH_DATASOURCE_STRUCTURE_INIT, payload: { id, ignoreCache, }, }; }; export const expandDatasourceEntity = (id: string) => { return { type: ReduxActionTypes.EXPAND_DATASOURCE_ENTITY, payload: id, }; }; export const refreshDatasourceStructure = (id: string) => { return { type: ReduxActionTypes.REFRESH_DATASOURCE_STRUCTURE_INIT, payload: { id, }, }; }; export const saveDatasourceName = (payload: { id: string; name: string }) => ({ type: ReduxActionTypes.SAVE_DATASOURCE_NAME, payload: payload, }); export const changeDatasource = (payload: Datasource) => { return { type: ReduxActionTypes.CHANGE_DATASOURCE, payload, }; }; export const switchDatasource = (id: string) => { return { type: ReduxActionTypes.SWITCH_DATASOURCE, payload: { datasourceId: id }, }; }; export const testDatasource = (payload: Partial) => { return { type: ReduxActionTypes.TEST_DATASOURCE_INIT, payload, }; }; export const deleteDatasource = ( payload: Partial, onSuccess?: ReduxAction, onError?: ReduxAction, onSuccessCallback?: () => void, ): ReduxActionWithCallbacks, unknown, unknown> => { return { type: ReduxActionTypes.DELETE_DATASOURCE_INIT, payload, onSuccess, onError, onSuccessCallback, }; }; export const setDatsourceEditorMode = (payload: { id: string; viewMode: boolean; }) => { return { type: ReduxActionTypes.SET_DATASOURCE_EDITOR_MODE, payload, }; }; export const fetchDatasources = () => { return { type: ReduxActionTypes.FETCH_DATASOURCES_INIT, }; }; export const fetchMockDatasources = () => { return { type: ReduxActionTypes.FETCH_MOCK_DATASOURCES_INIT, }; }; export interface addMockRequest extends ReduxAction<{ name: string; organizationId: string; pluginId: string; packageName: string; isGeneratePageMode?: string; }> { extraParams?: any; } export const addMockDatasourceToOrg = ( name: string, organizationId: string, pluginId: string, packageName: string, isGeneratePageMode?: string, ): addMockRequest => { return { type: ReduxActionTypes.ADD_MOCK_DATASOURCES_INIT, payload: { name, packageName, pluginId, organizationId }, extraParams: { isGeneratePageMode }, }; }; export const initDatasourcePane = ( pluginType: string, urlId?: string, ): ReduxAction<{ pluginType: string; id?: string }> => { return { type: ReduxActionTypes.INIT_DATASOURCE_PANE, payload: { id: urlId, pluginType }, }; }; export const storeAsDatasource = () => { return { type: ReduxActionTypes.STORE_AS_DATASOURCE_INIT, }; }; export const getOAuthAccessToken = (datasourceId: string) => { return { type: ReduxActionTypes.SAAS_GET_OAUTH_ACCESS_TOKEN, payload: { datasourceId }, }; }; export type executeDatasourceQuerySuccessPayload = { responseMeta: ResponseMeta; data: { body: T; headers: Record; statusCode: string; isExecutionSuccess: boolean; }; }; type errorPayload = unknown; export type executeDatasourceQueryReduxAction = ReduxActionWithCallbacks< executeDatasourceQueryRequest, executeDatasourceQuerySuccessPayload, errorPayload >; export const executeDatasourceQuery = ({ onErrorCallback, onSuccessCallback, payload, }: { onErrorCallback?: (payload: errorPayload) => void; onSuccessCallback?: ( payload: executeDatasourceQuerySuccessPayload, ) => void; payload: executeDatasourceQueryRequest; }): executeDatasourceQueryReduxAction => { return { type: ReduxActionTypes.EXECUTE_DATASOURCE_QUERY_INIT, payload, onErrorCallback, onSuccessCallback, }; }; export default { fetchDatasources, initDatasourcePane, };