mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import { DashboardQuery, SearchQueryParams, SearchAction, SearchLayout } from '../types';
|
|
|
|
import {
|
|
ADD_TAG,
|
|
CLEAR_FILTERS,
|
|
LAYOUT_CHANGE,
|
|
QUERY_CHANGE,
|
|
REMOVE_STARRED,
|
|
REMOVE_TAG,
|
|
SET_TAGS,
|
|
DATASOURCE_CHANGE,
|
|
TOGGLE_SORT,
|
|
TOGGLE_STARRED,
|
|
} from './actionTypes';
|
|
|
|
export const defaultQuery: DashboardQuery = {
|
|
query: '',
|
|
tag: [],
|
|
starred: false,
|
|
sort: null,
|
|
layout: SearchLayout.Folders,
|
|
prevSort: null,
|
|
};
|
|
|
|
export const defaultQueryParams: SearchQueryParams = {
|
|
sort: null,
|
|
starred: null,
|
|
query: null,
|
|
tag: null,
|
|
layout: null,
|
|
};
|
|
|
|
export const queryReducer = (state: DashboardQuery, action: SearchAction) => {
|
|
switch (action.type) {
|
|
case QUERY_CHANGE:
|
|
return { ...state, query: action.payload };
|
|
case REMOVE_TAG:
|
|
return { ...state, tag: state.tag.filter((t) => t !== action.payload) };
|
|
case SET_TAGS:
|
|
return { ...state, tag: action.payload };
|
|
case ADD_TAG: {
|
|
const tag = action.payload;
|
|
return tag && !state.tag.includes(tag) ? { ...state, tag: [...state.tag, tag] } : state;
|
|
}
|
|
case DATASOURCE_CHANGE:
|
|
return { ...state, datasource: action.payload };
|
|
case TOGGLE_STARRED:
|
|
return { ...state, starred: action.payload };
|
|
case REMOVE_STARRED:
|
|
return { ...state, starred: false };
|
|
case CLEAR_FILTERS:
|
|
return { ...state, query: '', tag: [], starred: false, sort: null };
|
|
case TOGGLE_SORT: {
|
|
const sort = action.payload;
|
|
if (state.layout === SearchLayout.Folders) {
|
|
return { ...state, sort, layout: SearchLayout.List };
|
|
}
|
|
return { ...state, sort };
|
|
}
|
|
case LAYOUT_CHANGE: {
|
|
const layout = action.payload;
|
|
if (state.sort && layout === SearchLayout.Folders) {
|
|
return { ...state, layout, sort: null, prevSort: state.sort };
|
|
}
|
|
return { ...state, layout, sort: state.prevSort };
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
};
|