2018-09-10 17:00:53 +02:00
|
|
|
// @flow
|
|
|
|
|
|
|
|
|
|
import {FAILURE_SUFFIX, PENDING_SUFFIX, SUCCESS_SUFFIX} from "../../modules/types";
|
2018-09-11 17:20:30 +02:00
|
|
|
import {apiClient} from "@scm-manager/ui-components";
|
2018-09-12 17:15:58 +02:00
|
|
|
import {isPending} from "../../modules/pending";
|
|
|
|
|
import {getFailure} from "../../modules/failure";
|
2018-09-10 17:00:53 +02:00
|
|
|
|
|
|
|
|
export const FETCH_CHANGESETS = "scm/repos/FETCH_CHANGESETS";
|
|
|
|
|
export const FETCH_CHANGESETS_PENDING = `${FETCH_CHANGESETS}_${PENDING_SUFFIX}`;
|
|
|
|
|
export const FETCH_CHANGESETS_SUCCESS = `${FETCH_CHANGESETS}_${SUCCESS_SUFFIX}`;
|
|
|
|
|
export const FETCH_CHANGESETS_FAILURE = `${FETCH_CHANGESETS}_${FAILURE_SUFFIX}`;
|
|
|
|
|
|
|
|
|
|
const REPO_URL = "repositories";
|
|
|
|
|
|
|
|
|
|
|
2018-09-11 17:20:30 +02:00
|
|
|
// actions
|
|
|
|
|
export function fetchChangesetsByNamespaceAndName(namespace: string, name: string) {
|
|
|
|
|
return function (dispatch: any) {
|
|
|
|
|
dispatch(fetchChangesetsPending(namespace, name));
|
|
|
|
|
return apiClient.get(REPO_URL + "/" + namespace + "/" + name + "/changesets").then(response => response.json())
|
2018-09-10 17:00:53 +02:00
|
|
|
.then(data => {
|
2018-09-11 17:20:30 +02:00
|
|
|
dispatch(fetchChangesetsSuccess(data, namespace, name))
|
2018-09-10 17:00:53 +02:00
|
|
|
}).catch(cause => {
|
2018-09-12 17:15:58 +02:00
|
|
|
dispatch(fetchChangesetsFailure(namespace, name, cause))
|
2018-09-10 17:00:53 +02:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-14 16:15:13 +02:00
|
|
|
export function fetchChangesetsByNamespaceNameAndBranch(namespace: string, name: string, branch: string) {
|
|
|
|
|
return function (dispatch: any) {
|
|
|
|
|
dispatch(fetchChangesetsPending(namespace, name, branch));
|
|
|
|
|
return apiClient.get(REPO_URL + "/" + namespace + "/" + name + "/branches/" + branch + "/changesets").then(response => response.json())
|
|
|
|
|
.then(data => {
|
|
|
|
|
dispatch(fetchChangesetsSuccess(data, namespace, name, branch))
|
|
|
|
|
}).catch(cause => {
|
|
|
|
|
dispatch(fetchChangesetsFailure(namespace, name, branch, cause))
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function fetchChangesetsPending(namespace: string, name: string, branch?: string): Action {
|
2018-09-18 16:30:37 +02:00
|
|
|
const itemId = createItemId(namespace, name, branch);
|
2018-09-10 17:00:53 +02:00
|
|
|
return {
|
2018-09-11 17:20:30 +02:00
|
|
|
type: FETCH_CHANGESETS_PENDING,
|
2018-09-18 16:30:37 +02:00
|
|
|
payload: itemId,
|
|
|
|
|
itemId
|
2018-09-10 17:00:53 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-18 16:30:37 +02:00
|
|
|
export function fetchChangesetsSuccess(changesets: any, namespace: string, name: string, branch?: string): Action {
|
2018-09-10 17:00:53 +02:00
|
|
|
return {
|
|
|
|
|
type: FETCH_CHANGESETS_SUCCESS,
|
2018-09-18 16:30:37 +02:00
|
|
|
payload: changesets,
|
2018-09-14 16:15:13 +02:00
|
|
|
itemId: createItemId(namespace, name, branch)
|
2018-09-10 17:00:53 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-14 16:15:13 +02:00
|
|
|
function fetchChangesetsFailure(namespace: string, name: string, branch?: string, error: Error): Action {
|
2018-09-10 17:00:53 +02:00
|
|
|
return {
|
|
|
|
|
type: FETCH_CHANGESETS_FAILURE,
|
|
|
|
|
payload: {
|
2018-09-11 17:20:30 +02:00
|
|
|
namespace,
|
|
|
|
|
name,
|
2018-09-14 16:15:13 +02:00
|
|
|
branch,
|
2018-09-10 17:00:53 +02:00
|
|
|
error
|
2018-09-12 17:15:58 +02:00
|
|
|
},
|
2018-09-14 16:15:13 +02:00
|
|
|
itemId: createItemId(namespace, name, branch)
|
2018-09-10 17:00:53 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-14 16:15:13 +02:00
|
|
|
function createItemId(namespace: string, name: string, branch?: string): string {
|
|
|
|
|
let itemId = namespace + "/" + name;
|
|
|
|
|
if (branch && branch !== "") {
|
|
|
|
|
itemId = itemId + "/" + branch;
|
|
|
|
|
}
|
|
|
|
|
return itemId;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-11 17:20:30 +02:00
|
|
|
// reducer
|
2018-09-14 16:15:13 +02:00
|
|
|
export default function reducer(state: any = {}, action: Action = {type: "UNKNOWN"}): Object {
|
2018-09-10 17:00:53 +02:00
|
|
|
switch (action.type) {
|
|
|
|
|
case FETCH_CHANGESETS_SUCCESS:
|
2018-09-18 16:30:37 +02:00
|
|
|
const key = action.itemId
|
2018-09-11 17:20:30 +02:00
|
|
|
let oldChangesets = {[key]: {}};
|
|
|
|
|
if (state[key] !== undefined) {
|
|
|
|
|
oldChangesets[key] = state[key]
|
|
|
|
|
}
|
2018-09-18 16:30:37 +02:00
|
|
|
return {...state, [key]: {byId: extractChangesetsByIds(action.payload, oldChangesets[key].byId)}};
|
2018-09-10 17:00:53 +02:00
|
|
|
default:
|
|
|
|
|
return state;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-11 17:20:30 +02:00
|
|
|
function extractChangesetsByIds(data: any, oldChangesetsByIds: any) {
|
2018-09-10 17:00:53 +02:00
|
|
|
const changesets = data._embedded.changesets;
|
|
|
|
|
const changesetsByIds = {};
|
2018-09-11 17:20:30 +02:00
|
|
|
|
2018-09-10 17:00:53 +02:00
|
|
|
for (let changeset of changesets) {
|
|
|
|
|
changesetsByIds[changeset.id] = changeset;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-11 17:20:30 +02:00
|
|
|
for (let id in oldChangesetsByIds) {
|
|
|
|
|
changesetsByIds[id] = oldChangesetsByIds[id];
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-10 17:00:53 +02:00
|
|
|
return changesetsByIds;
|
|
|
|
|
}
|
2018-09-11 17:20:30 +02:00
|
|
|
|
|
|
|
|
//selectors
|
2018-09-18 13:14:29 +02:00
|
|
|
export function getChangesets(state: Object, namespace: string, name: string, branch?: string) {
|
2018-09-14 16:15:13 +02:00
|
|
|
const key = createItemId(namespace, name, branch);
|
|
|
|
|
if (!state.changesets[key]) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return Object.values(state.changesets[key].byId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function isFetchChangesetsPending(state: Object, namespace: string, name: string, branch?: string) {
|
|
|
|
|
return isPending(state, FETCH_CHANGESETS, createItemId(namespace, name, branch))
|
2018-09-12 17:15:58 +02:00
|
|
|
}
|
|
|
|
|
|
2018-09-14 16:15:13 +02:00
|
|
|
export function getFetchChangesetsFailure(state: Object, namespace: string, name: string, branch?: string) {
|
|
|
|
|
return getFailure(state, FETCH_CHANGESETS, createItemId(namespace, name, branch));
|
2018-09-12 17:15:58 +02:00
|
|
|
}
|
|
|
|
|
|