mirror of
https://github.com/grafana/grafana.git
synced 2025-02-15 10:03:33 -06:00
* Add and configure eslint-plugin-import * Fix the lint:ts npm command * Autofix + prettier all the files * Manually fix remaining files * Move jquery code in jest-setup to external file to safely reorder imports * Resolve issue caused by circular dependencies within Prometheus * Update .betterer.results * Fix missing // @ts-ignore * ignore iconBundle.ts * Fix missing // @ts-ignore
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { AnyAction, createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
|
|
import { TransactionStatus } from '../types';
|
|
|
|
import {
|
|
addVariable,
|
|
changeVariableOrder,
|
|
changeVariableProp,
|
|
changeVariableType,
|
|
duplicateVariable,
|
|
removeVariable,
|
|
} from './sharedReducer';
|
|
|
|
export interface TransactionState {
|
|
uid: string | undefined | null;
|
|
status: TransactionStatus;
|
|
isDirty: boolean;
|
|
}
|
|
|
|
export const initialTransactionState: TransactionState = {
|
|
uid: null,
|
|
status: TransactionStatus.NotStarted,
|
|
isDirty: false,
|
|
};
|
|
|
|
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;
|
|
state.isDirty = false;
|
|
},
|
|
},
|
|
extraReducers: (builder) =>
|
|
builder.addMatcher(actionAffectsDirtyState, (state, action) => {
|
|
if (state.status === TransactionStatus.Completed) {
|
|
state.isDirty = true;
|
|
}
|
|
}),
|
|
});
|
|
|
|
function actionAffectsDirtyState(action: AnyAction): boolean {
|
|
return (
|
|
removeVariable.match(action) ||
|
|
addVariable.match(action) ||
|
|
changeVariableProp.match(action) ||
|
|
changeVariableOrder.match(action) ||
|
|
duplicateVariable.match(action) ||
|
|
changeVariableType.match(action)
|
|
);
|
|
}
|
|
|
|
export const { variablesInitTransaction, variablesClearTransaction, variablesCompleteTransaction } =
|
|
transactionSlice.actions;
|
|
|
|
export const transactionReducer = transactionSlice.reducer;
|