2018-10-05 11:02:00 +02:00
|
|
|
// @flow
|
|
|
|
|
import * as types from "./types";
|
|
|
|
|
|
|
|
|
|
import { apiClient } from "@scm-manager/ui-components";
|
2018-11-14 13:40:14 +01:00
|
|
|
import type { Action, IndexResources, Link } 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);
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-05 13:48:21 +02:00
|
|
|
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-11-14 13:40:14 +01:00
|
|
|
export function getLinkCollection(state: Object, name: string): Link[] {
|
|
|
|
|
if (state.indexResources.links && state.indexResources.links[name]) {
|
|
|
|
|
return state.indexResources.links[name];
|
|
|
|
|
}
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
|
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
|
|
|
}
|
2018-11-14 13:40:14 +01:00
|
|
|
|
|
|
|
|
export function getUserAutoCompleteLink(state: Object): string {
|
|
|
|
|
const link = getLinkCollection(state, "autocomplete").find(
|
|
|
|
|
i => i.name === "users"
|
|
|
|
|
);
|
|
|
|
|
if (link) {
|
|
|
|
|
return link.href;
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function getGroupAutoCompleteLink(state: Object): string {
|
|
|
|
|
const link = getLinkCollection(state, "autocomplete").find(
|
|
|
|
|
i => i.name === "groups"
|
|
|
|
|
);
|
|
|
|
|
if (link) {
|
|
|
|
|
return link.href;
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|