2018-03-26 00:46:45 +05:30
|
|
|
// @flow
|
|
|
|
import type { Dispatch } from 'redux';
|
|
|
|
import type { OauthAppResponse } from 'services/api/oauth';
|
|
|
|
import type { User } from 'components/user';
|
2018-05-05 12:12:21 +05:30
|
|
|
import oauth from 'services/api/oauth';
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2018-05-05 12:12:21 +05:30
|
|
|
import type { Apps } from './reducer';
|
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
type SetAvailableAction = {
|
|
|
|
type: 'apps:setAvailable',
|
|
|
|
payload: Array<OauthAppResponse>,
|
|
|
|
};
|
2018-05-05 12:12:21 +05:30
|
|
|
type DeleteAppAction = { type: 'apps:deleteApp', payload: string };
|
|
|
|
type AddAppAction = { type: 'apps:addApp', payload: OauthAppResponse };
|
|
|
|
export type Action = SetAvailableAction | DeleteAppAction | AddAppAction;
|
|
|
|
|
|
|
|
export function setAppsList(apps: Array<OauthAppResponse>): SetAvailableAction {
|
2019-11-27 14:33:32 +05:30
|
|
|
return {
|
|
|
|
type: 'apps:setAvailable',
|
|
|
|
payload: apps,
|
|
|
|
};
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
export function getApp(
|
|
|
|
state: { apps: Apps },
|
|
|
|
clientId: string,
|
|
|
|
): ?OauthAppResponse {
|
|
|
|
return state.apps.available.find(app => app.clientId === clientId) || null;
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
export function fetchApp(clientId: string) {
|
2019-11-27 14:33:32 +05:30
|
|
|
return async (dispatch: Dispatch<any>): Promise<void> => {
|
|
|
|
const app = await oauth.getApp(clientId);
|
2018-05-05 12:12:21 +05:30
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
dispatch(addApp(app));
|
|
|
|
};
|
2018-05-05 12:12:21 +05:30
|
|
|
}
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2018-05-05 12:12:21 +05:30
|
|
|
function addApp(app: OauthAppResponse): AddAppAction {
|
2019-11-27 14:33:32 +05:30
|
|
|
return {
|
|
|
|
type: 'apps:addApp',
|
|
|
|
payload: app,
|
|
|
|
};
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
export function fetchAvailableApps() {
|
2019-11-27 14:33:32 +05:30
|
|
|
return async (
|
|
|
|
dispatch: Dispatch<any>,
|
|
|
|
getState: () => { user: User },
|
|
|
|
): Promise<void> => {
|
|
|
|
const { id } = getState().user;
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
if (!id) {
|
|
|
|
dispatch(setAppsList([]));
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const apps = await oauth.getAppsByUser(id);
|
|
|
|
|
|
|
|
dispatch(setAppsList(apps));
|
|
|
|
};
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
export function deleteApp(clientId: string) {
|
2019-11-27 14:33:32 +05:30
|
|
|
return async (dispatch: Dispatch<any>): Promise<void> => {
|
|
|
|
await oauth.delete(clientId);
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
dispatch(createDeleteAppAction(clientId));
|
|
|
|
};
|
2018-05-05 12:12:21 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
function createDeleteAppAction(clientId: string): DeleteAppAction {
|
2019-11-27 14:33:32 +05:30
|
|
|
return {
|
|
|
|
type: 'apps:deleteApp',
|
|
|
|
payload: clientId,
|
|
|
|
};
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
export function resetApp(clientId: string, resetSecret: boolean) {
|
|
|
|
return async (dispatch: Dispatch<any>): Promise<void> => {
|
|
|
|
const { data: app } = await oauth.reset(clientId, resetSecret);
|
2018-03-26 00:46:45 +05:30
|
|
|
|
2019-11-27 14:33:32 +05:30
|
|
|
if (resetSecret) {
|
|
|
|
dispatch(addApp(app));
|
|
|
|
}
|
|
|
|
};
|
2018-03-26 00:46:45 +05:30
|
|
|
}
|