diff --git a/scm-ui/src/changesets/modules/changesets.js b/scm-ui/src/changesets/modules/changesets.js index 498f6b3aea..3f2819fc0a 100644 --- a/scm-ui/src/changesets/modules/changesets.js +++ b/scm-ui/src/changesets/modules/changesets.js @@ -1,44 +1,153 @@ // @flow -import {FAILURE_SUFFIX, PENDING_SUFFIX, SUCCESS_SUFFIX} from "../../modules/types"; -import {apiClient} from "@scm-manager/ui-components"; -import {isPending} from "../../modules/pending"; -import {getFailure} from "../../modules/failure"; +import { + FAILURE_SUFFIX, + PENDING_SUFFIX, + SUCCESS_SUFFIX +} from "../../modules/types"; +import { apiClient } from "@scm-manager/ui-components"; +import { isPending } from "../../modules/pending"; +import { getFailure } from "../../modules/failure"; 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}`; +/****added for detailed view of changesets****/ + +export const FETCH_CHANGESET = "scm/repos/FETCH_CHANGESET"; +export const FETCH_CHANGESET_PENDING = `${FETCH_CHANGESET}_${PENDING_SUFFIX}`; +export const FETCH_CHANGESET_SUCCESS = `${FETCH_CHANGESET}_${SUCCESS_SUFFIX}`; +export const FETCH_CHANGESET_FAILURE = `${FETCH_CHANGESET}_${FAILURE_SUFFIX}`; + +/********/ + const REPO_URL = "repositories"; +/****added for detailed view of changesets****/ + +export function fetchChangesetIfNeeded(state: Object, namespace: string, repoName: string, id: string) { + return function(dispatch) { + if (shouldFetchChangeset(state, namespace, repoName, id)) { + dispatch(fetchChangeset(url)); + } + }; +} + +export function shouldFetchChangeset(state: Object, namespace: string, repoName: string, id: string) { + // decide if changeset should be fetched here + return true; +} + +function fetchChangeset(namespace: string, repoName: string, id: string) { + return function(dispatch) { + dispatch(fetchChangesetPending(namespace, repoName, id)); + return apiClient + .get(url) + .then(response => response.json()) + .then(json => dispatch(fetchChangesetSuccess(namespace, repoName, id))) + .catch(err => { + dispatch(fetchChangesetFailure(namespace, repoName, id, err)); + }); + }; +} + +export function fetchChangesetPending( + namespace: string, repoName: string, id: string +): Action { + return { + type: FETCH_CHANGESET_PENDING, + payload: { + namespace, + repoName, + id + }, + itemId: createItemId(namespace, repoName) + "/" + id + }; +} + +export function fetchChangesetSuccess( + namespace: string, repoName: string, id: string +): Action { + return { + type: FETCH_CHANGESET_SUCCESS, + payload: { namespace, repoName, id }, + itemId: createItemId(namespace, repoName) + "/" + id + }; +} + +function fetchChangesetFailure( + namespace: string, + name: string, + id: string, + error: Error +): Action { + return { + type: FETCH_CHANGESET_FAILURE, + payload: { + namespace, + name, + id, + error + }, + itemId: createItemId(namespace, repoName) + "/" + id + }; + +/********/ // actions -export function fetchChangesetsByNamespaceAndName(namespace: string, name: string) { - return function (dispatch: any) { +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()) + return apiClient + .get(REPO_URL + "/" + namespace + "/" + name + "/changesets") + .then(response => response.json()) .then(data => { - dispatch(fetchChangesetsSuccess(data, namespace, name)) - }).catch(cause => { - dispatch(fetchChangesetsFailure(namespace, name, cause)) + dispatch(fetchChangesetsSuccess(data, namespace, name)); }) - } + .catch(cause => { + dispatch(fetchChangesetsFailure(namespace, name, cause)); + }); + }; } -export function fetchChangesetsByNamespaceNameAndBranch(namespace: string, name: string, branch: string) { - return function (dispatch: any) { +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()) + 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)) + dispatch(fetchChangesetsSuccess(data, namespace, name, branch)); }) - } + .catch(cause => { + dispatch(fetchChangesetsFailure(namespace, name, branch, cause)); + }); + }; } -export function fetchChangesetsPending(namespace: string, name: string, branch?: string): Action { +export function fetchChangesetsPending( + namespace: string, + name: string, + branch?: string +): Action { return { type: FETCH_CHANGESETS_PENDING, payload: { @@ -47,18 +156,28 @@ export function fetchChangesetsPending(namespace: string, name: string, branch?: branch }, itemId: createItemId(namespace, name, branch) - } + }; } -export function fetchChangesetsSuccess(collection: any, namespace: string, name: string, branch?: string): Action { +export function fetchChangesetsSuccess( + collection: any, + namespace: string, + name: string, + branch?: string +): Action { return { type: FETCH_CHANGESETS_SUCCESS, - payload: {collection, namespace, name, branch}, + payload: { collection, namespace, name, branch }, itemId: createItemId(namespace, name, branch) - } + }; } -function fetchChangesetsFailure(namespace: string, name: string, branch?: string, error: Error): Action { +function fetchChangesetsFailure( + namespace: string, + name: string, + branch?: string, + error: Error +): Action { return { type: FETCH_CHANGESETS_FAILURE, payload: { @@ -68,10 +187,14 @@ function fetchChangesetsFailure(namespace: string, name: string, branch?: string error }, itemId: createItemId(namespace, name, branch) - } + }; } -function createItemId(namespace: string, name: string, branch?: string): string { +function createItemId( + namespace: string, + name: string, + branch?: string +): string { let itemId = namespace + "/" + name; if (branch && branch !== "") { itemId = itemId + "/" + branch; @@ -80,16 +203,27 @@ function createItemId(namespace: string, name: string, branch?: string): string } // reducer -export default function reducer(state: any = {}, action: Action = {type: "UNKNOWN"}): Object { +export default function reducer( + state: any = {}, + action: Action = { type: "UNKNOWN" } +): Object { switch (action.type) { case FETCH_CHANGESETS_SUCCESS: - const {namespace, name, branch} = action.payload; + const { namespace, name, branch } = action.payload; const key = createItemId(namespace, name, branch); - let oldChangesets = {[key]: {}}; + let oldChangesets = { [key]: {} }; if (state[key] !== undefined) { - oldChangesets[key] = state[key] + oldChangesets[key] = state[key]; } - return {...state, [key]: {byId: extractChangesetsByIds(action.payload.collection, oldChangesets[key].byId)}}; + return { + ...state, + [key]: { + byId: extractChangesetsByIds( + action.payload.collection, + oldChangesets[key].byId + ) + } + }; default: return state; } @@ -111,7 +245,11 @@ function extractChangesetsByIds(data: any, oldChangesetsByIds: any) { } //selectors -export function getChangesetsForNamespaceAndNameFromState(namespace: string, name: string, state: Object) { +export function getChangesetsForNamespaceAndNameFromState( + namespace: string, + name: string, + state: Object +) { const key = createItemId(namespace, name); if (!state.changesets[key]) { return null; @@ -119,7 +257,12 @@ export function getChangesetsForNamespaceAndNameFromState(namespace: string, nam return Object.values(state.changesets[key].byId); } -export function getChangesets(state: Object, namespace: string, name: string, branch: string) { +export function getChangesets( + state: Object, + namespace: string, + name: string, + branch: string +) { const key = createItemId(namespace, name, branch); if (!state.changesets[key]) { return null; @@ -127,11 +270,28 @@ export function getChangesets(state: Object, namespace: string, name: string, br 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)) +export function isFetchChangesetsPending( + state: Object, + namespace: string, + name: string, + branch?: string +) { + return isPending( + state, + FETCH_CHANGESETS, + createItemId(namespace, name, branch) + ); } -export function getFetchChangesetsFailure(state: Object, namespace: string, name: string, branch?: string) { - return getFailure(state, FETCH_CHANGESETS, createItemId(namespace, name, branch)); +export function getFetchChangesetsFailure( + state: Object, + namespace: string, + name: string, + branch?: string +) { + return getFailure( + state, + FETCH_CHANGESETS, + createItemId(namespace, name, branch) + ); } -