Files
SCM-Manager/scm-ui/src/modules/indexResource.js

146 lines
3.3 KiB
JavaScript
Raw Normal View History

2018-10-05 11:02:00 +02:00
// @flow
import * as types from "./types";
import { apiClient } from "@scm-manager/ui-components";
import type { Action, IndexResources } from "@scm-manager/ui-types";
2018-10-05 12:11:35 +02:00
import { isPending } from "./pending";
import { getFailure } from "./failure";
2018-10-05 11:02:00 +02:00
// Action
2018-10-05 13:14:33 +02:00
export const FETCH_INDEXRESOURCES = "scm/INDEXRESOURCES";
2018-10-05 11:02:00 +02:00
export const FETCH_INDEXRESOURCES_PENDING = `${FETCH_INDEXRESOURCES}_${
types.PENDING_SUFFIX
}`;
export const FETCH_INDEXRESOURCES_SUCCESS = `${FETCH_INDEXRESOURCES}_${
types.SUCCESS_SUFFIX
}`;
export const FETCH_INDEXRESOURCES_FAILURE = `${FETCH_INDEXRESOURCES}_${
types.FAILURE_SUFFIX
}`;
const INDEX_RESOURCES_LINK = "/";
2018-10-11 10:26:54 +02:00
export const callFetchIndexResources = (): Promise<IndexResources> => {
return apiClient.get(INDEX_RESOURCES_LINK).then(response => {
return response.json();
});
};
2018-10-05 11:02:00 +02:00
export function fetchIndexResources() {
return function(dispatch: any) {
dispatch(fetchIndexResourcesPending());
2018-10-11 10:26:54 +02:00
return callFetchIndexResources()
2018-10-05 11:02:00 +02:00
.then(resources => {
dispatch(fetchIndexResourcesSuccess(resources));
})
.catch(err => {
dispatch(fetchIndexResourcesFailure(err));
});
};
}
export function fetchIndexResourcesPending(): Action {
return {
type: FETCH_INDEXRESOURCES_PENDING
};
}
export function fetchIndexResourcesSuccess(resources: IndexResources): Action {
return {
type: FETCH_INDEXRESOURCES_SUCCESS,
payload: resources
};
}
export function fetchIndexResourcesFailure(err: Error): Action {
return {
type: FETCH_INDEXRESOURCES_FAILURE,
payload: err
};
}
2018-10-05 11:15:19 +02:00
// reducer
export default function reducer(
state: Object = {},
action: Action = { type: "UNKNOWN" }
): Object {
if (!action.payload) {
return state;
}
switch (action.type) {
case FETCH_INDEXRESOURCES_SUCCESS:
return {
...state,
2018-10-05 11:28:27 +02:00
links: action.payload._links
2018-10-05 11:15:19 +02:00
};
default:
return state;
}
}
2018-10-05 12:11:35 +02:00
// selectors
export function isFetchIndexResourcesPending(state: Object) {
return isPending(state, FETCH_INDEXRESOURCES);
}
export function getFetchIndexResourcesFailure(state: Object) {
return getFailure(state, FETCH_INDEXRESOURCES);
}
export function getLinks(state: Object) {
2018-10-05 13:14:33 +02:00
return state.indexResources.links;
}
2018-10-24 12:02:42 +02:00
export function getLink(state: Object, name: string) {
if (state.indexResources.links && state.indexResources.links[name]) {
return state.indexResources.links[name].href;
}
}
2018-10-05 12:11:35 +02:00
export function getUiPluginsLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "uiPlugins");
2018-10-05 12:11:35 +02:00
}
export function getMeLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "me");
2018-10-05 12:11:35 +02:00
}
export function getLogoutLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "logout");
2018-10-05 12:11:35 +02:00
}
export function getLoginLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "login");
2018-10-05 12:11:35 +02:00
}
export function getUsersLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "users");
2018-10-05 12:11:35 +02:00
}
export function getGroupsLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "groups");
2018-10-05 12:11:35 +02:00
}
export function getConfigLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "config");
2018-10-05 12:11:35 +02:00
}
export function getRepositoriesLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "repositories");
2018-10-05 12:11:35 +02:00
}
export function getHgConfigLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "hgConfig");
2018-10-05 12:11:35 +02:00
}
export function getGitConfigLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "gitConfig");
2018-10-05 12:11:35 +02:00
}
export function getSvnConfigLink(state: Object) {
2018-10-24 12:02:42 +02:00
return getLink(state, "svnConfig");
2018-10-05 12:11:35 +02:00
}