12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { createSlice, PayloadAction } from '@reduxjs/toolkit';
- import { map } from 'lodash';
- import { getInstanceState } from '../state/selectors';
- import { initialVariablesState, VariablePayload, VariablesState } from '../state/types';
- import { initialVariableModelState, IntervalVariableModel, VariableOption, VariableRefresh } from '../types';
- export const initialIntervalVariableModelState: IntervalVariableModel = {
- ...initialVariableModelState,
- type: 'interval',
- auto_count: 30,
- auto_min: '10s',
- options: [],
- auto: false,
- query: '1m,10m,30m,1h,6h,12h,1d,7d,14d,30d',
- refresh: VariableRefresh.onTimeRangeChanged,
- current: {} as VariableOption,
- };
- export const intervalVariableSlice = createSlice({
- name: 'templating/interval',
- initialState: initialVariablesState,
- reducers: {
- createIntervalOptions: (state: VariablesState, action: PayloadAction<VariablePayload>) => {
- const instanceState = getInstanceState<IntervalVariableModel>(state, action.payload.id);
- const options: VariableOption[] = map(instanceState.query.match(/(["'])(.*?)\1|\w+/g), (text) => {
- text = text.replace(/["']+/g, '');
- return { text: text.trim(), value: text.trim(), selected: false };
- });
- if (instanceState.auto) {
- // add auto option if missing
- if (options.length && options[0].text !== 'auto') {
- options.unshift({
- text: 'auto',
- value: '$__auto_interval_' + instanceState.name,
- selected: false,
- });
- }
- }
- instanceState.options = options;
- },
- },
- });
- export const intervalVariableReducer = intervalVariableSlice.reducer;
- export const { createIntervalOptions } = intervalVariableSlice.actions;
|