-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathqueryActions.ts
79 lines (69 loc) · 2.79 KB
/
queryActions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import type {PayloadAction} from '@reduxjs/toolkit';
import {createSlice} from '@reduxjs/toolkit';
import type {SavedQuery} from '../../../types/store/query';
import {SAVED_QUERIES_KEY} from '../../../utils/constants';
import type {AppDispatch, GetState} from '../../defaultStore';
import {getSettingValue, setSettingValue} from '../settings/settings';
import type {QueryActions, QueryActionsState} from './types';
const initialState: QueryActionsState = {
queryName: null,
queryAction: 'idle',
savedQueriesFilter: '',
};
const slice = createSlice({
name: 'queryActions',
initialState,
reducers: {
setQueryNameToEdit: (state, action: PayloadAction<string>) => {
state.queryName = action.payload;
},
clearQueryNameToEdit: (state) => {
state.queryName = null;
},
setQueryAction: (state, action: PayloadAction<QueryActions>) => {
state.queryAction = action.payload;
},
setSavedQueriesFilter: (state, action: PayloadAction<string>) => {
state.savedQueriesFilter = action.payload;
},
},
selectors: {
selectQueryName: (state) => state.queryName,
selectQueryAction: (state) => state.queryAction,
selectSavedQueriesFilter: (state) => state.savedQueriesFilter,
},
});
export default slice.reducer;
export const {setQueryNameToEdit, clearQueryNameToEdit, setQueryAction, setSavedQueriesFilter} =
slice.actions;
export const {selectQueryName, selectQueryAction, selectSavedQueriesFilter} = slice.selectors;
export function deleteSavedQuery(queryName: string) {
return function deleteSavedQueryThunk(dispatch: AppDispatch, getState: GetState) {
const state = getState();
const savedQueries = (getSettingValue(state, SAVED_QUERIES_KEY) as SavedQuery[]) ?? [];
const newSavedQueries = savedQueries.filter(
(el) => el.name.toLowerCase() !== queryName.toLowerCase(),
);
dispatch(setSettingValue(SAVED_QUERIES_KEY, newSavedQueries));
};
}
export function saveQuery(queryName: string | null) {
return function saveQueryThunk(dispatch: AppDispatch, getState: GetState) {
const state = getState();
const savedQueries = (getSettingValue(state, SAVED_QUERIES_KEY) as SavedQuery[]) ?? [];
const queryBody = state.query.input;
if (queryName === null) {
return;
}
const nextSavedQueries = [...savedQueries];
const query = nextSavedQueries.find(
(el) => el.name.toLowerCase() === queryName.toLowerCase(),
);
if (query) {
query.body = queryBody;
} else {
nextSavedQueries.push({name: queryName, body: queryBody});
}
dispatch(setSettingValue(SAVED_QUERIES_KEY, nextSavedQueries));
};
}