UNPKG

@sanity/ui-workshop

Version:

An environment for designing, reviewing, and quality-testing React components.

88 lines (73 loc) 2.04 kB
import {WorkshopMsg} from '@sanity/ui-workshop' import {PerfMsg} from './msg' import {PerfState} from './types' /** @internal */ export function perfReducer(state: PerfState, msg: PerfMsg | WorkshopMsg): PerfState { if (msg.type === 'workshop/perf/clearResults') { return {...state, results: state.results.filter((d) => d.name !== msg.name)} } if (msg.type === 'workshop/perf/registerTest') { return { ...state, testDetails: state.testDetails.concat([ { description: msg.description, name: msg.name, title: msg.title, }, ]), } } if (msg.type === 'workshop/perf/unregisterTest') { return {...state, testDetails: state.testDetails.filter((d) => d.name !== msg.name)} } if (msg.type === 'workshop/perf/runTest') { return { ...state, activeTest: msg.name, results: state.results.concat([ { name: msg.name, renders: [], }, ]), } } if (msg.type === 'workshop/perf/addResult') { if (state.activeTest === msg.name) { const result = state.results.filter((r) => r.name === msg.name) const lastResult = result[result.length - 1] if (lastResult) { return { ...state, results: state.results.map((r) => { if (r === lastResult) { return {...r, timing: msg.result} } return r }), } } } return state } if (msg.type === 'workshop/perf/addRenderResult') { if (state.activeTest === msg.name) { const result = state.results.filter((r) => r.name === msg.name) const lastResult = result[result.length - 1] if (lastResult) { return { ...state, results: state.results.map((r) => { if (r === lastResult) { return {...r, renders: r.renders.concat([msg.result])} } return r }), } } } return state } return state }