grafana/public/app/features/variables/state/transactionReducer.ts
Hugo Häggmark e65dbcfea1
Variables: enables cancel for slow query variables queries (#24430)
* Refactor: initial commit

* Tests: updates tests

* Tests: updates snapshots

* Chore: updates after PR comments

* Chore: renamed initVariablesBatch

* Tests: adds transactionReducer tests

* Chore: updates after PR comments

* Refactor: renames cancelAllDataSourceRequests

* Refactor: reduces cancellation complexity

* Tests: adds tests for cancelAllInFlightRequests

* Tests: adds initVariablesTransaction tests

* Tests: adds tests for cleanUpVariables and cancelVariables

* Always cleanup dashboard on unmount, even if init is in progress. Check if init phase has changed after services init is completed

* fixed failing tests and added some more to test new scenario.

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
2020-06-04 08:59:57 +02:00

46 lines
1.3 KiB
TypeScript

import { createSlice, PayloadAction } from '@reduxjs/toolkit';
export enum TransactionStatus {
NotStarted = 'Not started',
Fetching = 'Fetching',
Completed = 'Completed',
}
export interface TransactionState {
uid: string | undefined | null;
status: TransactionStatus;
}
export const initialTransactionState: TransactionState = { uid: null, status: TransactionStatus.NotStarted };
const transactionSlice = createSlice({
name: 'templating/transaction',
initialState: initialTransactionState,
reducers: {
variablesInitTransaction: (state, action: PayloadAction<{ uid: string | undefined | null }>) => {
state.uid = action.payload.uid;
state.status = TransactionStatus.Fetching;
},
variablesCompleteTransaction: (state, action: PayloadAction<{ uid: string | undefined | null }>) => {
if (state.uid !== action.payload.uid) {
// this might be an action from a cancelled batch
return;
}
state.status = TransactionStatus.Completed;
},
variablesClearTransaction: (state, action: PayloadAction<undefined>) => {
state.uid = null;
state.status = TransactionStatus.NotStarted;
},
},
});
export const {
variablesInitTransaction,
variablesClearTransaction,
variablesCompleteTransaction,
} = transactionSlice.actions;
export const transactionReducer = transactionSlice.reducer;