未验证 提交 5a19d2e6 编写于 作者: P Peter Pan 提交者: GitHub

fix: prevent empty runs selection when routing between pages (#800)

上级 fe666692
...@@ -3,6 +3,7 @@ import {color, colorAlt} from '~/utils/chart'; ...@@ -3,6 +3,7 @@ import {color, colorAlt} from '~/utils/chart';
import {useCallback, useEffect, useMemo, useReducer} from 'react'; import {useCallback, useEffect, useMemo, useReducer} from 'react';
import groupBy from 'lodash/groupBy'; import groupBy from 'lodash/groupBy';
import intersection from 'lodash/intersection';
import intersectionBy from 'lodash/intersectionBy'; import intersectionBy from 'lodash/intersectionBy';
import uniq from 'lodash/uniq'; import uniq from 'lodash/uniq';
import useGlobalState from '~/hooks/useGlobalState'; import useGlobalState from '~/hooks/useGlobalState';
...@@ -85,61 +86,72 @@ const attachRunColor = (runs: string[]): Run[] => ...@@ -85,61 +86,72 @@ const attachRunColor = (runs: string[]): Run[] =>
const reducer = (state: State, action: Action): State => { const reducer = (state: State, action: Action): State => {
switch (action.type) { switch (action.type) {
case ActionType.initRuns: case ActionType.initRuns: {
const initRuns = action.payload; const initRuns = action.payload;
const initRunsGlobalRuns = state.globalRuns.length ? state.globalRuns : initRuns; const validGlobalRuns = initRuns.length ? intersection(initRuns, state.globalRuns) : state.globalRuns;
const initRunsRuns = attachRunColor(initRuns); const globalRuns = validGlobalRuns.length ? validGlobalRuns : initRuns;
const initRunsSelectedRuns = state.globalRuns.length const runs = attachRunColor(initRuns);
? initRunsRuns.filter(run => initRunsGlobalRuns.includes(run.label)) const selectedRuns = runs.filter(run => globalRuns.includes(run.label));
: initRunsRuns; const tags = groupTags(selectedRuns, state.initTags);
const initRunsTags = groupTags(initRunsSelectedRuns, state.initTags);
return { return {
...state, ...state,
initRuns, initRuns,
globalRuns: initRunsGlobalRuns, globalRuns,
runs: initRunsRuns, runs,
selectedRuns: initRunsSelectedRuns, selectedRuns,
tags: initRunsTags, tags,
selectedTags: initRunsTags selectedTags: tags
}; };
case ActionType.setRuns: }
const setRunsSelectedRuns = intersectionBy(state.selectedRuns, action.payload, r => r.label); case ActionType.setRuns: {
const setRunsTags = groupTags(setRunsSelectedRuns, state.initTags); const runs = action.payload;
const selectedRuns = intersectionBy(state.selectedRuns, runs, r => r.label);
const tags = groupTags(selectedRuns, state.initTags);
return { return {
...state, ...state,
runs: action.payload, runs,
selectedRuns: setRunsSelectedRuns, selectedRuns,
tags: setRunsTags, tags,
selectedTags: setRunsTags selectedTags: tags
}; };
case ActionType.setSelectedRuns: }
const setSelectedRunsTags = groupTags(action.payload, state.initTags); case ActionType.setSelectedRuns: {
const selectedRuns = action.payload;
const globalRuns = selectedRuns.map(run => run.label);
const tags = groupTags(selectedRuns, state.initTags);
return { return {
...state, ...state,
globalRuns: action.payload.map(run => run.label), globalRuns,
selectedRuns: action.payload, selectedRuns,
tags: setSelectedRunsTags, tags,
selectedTags: setSelectedRunsTags selectedTags: tags
}; };
case ActionType.initTags: }
const initTagsTags = groupTags(state.selectedRuns, action.payload); case ActionType.initTags: {
const initTags = action.payload;
const tags = groupTags(state.selectedRuns, initTags);
return { return {
...state, ...state,
initTags: action.payload, initTags,
tags: initTagsTags, tags,
selectedTags: initTagsTags selectedTags: tags
}; };
case ActionType.setTags: }
case ActionType.setTags: {
const tags = action.payload;
return { return {
...state, ...state,
tags: action.payload, tags,
selectedTags: action.payload selectedTags: tags
}; };
case ActionType.setSelectedTags: }
case ActionType.setSelectedTags: {
const selectedTags = action.payload;
return { return {
...state, ...state,
selectedTags: action.payload selectedTags
}; };
}
default: default:
throw new Error(); throw new Error();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册