Skip to content

Commit 8609f66

Browse files
feat(QueryEditor): save current query in session storage (#2950)
1 parent 2e9a409 commit 8609f66

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

src/store/reducers/query/query.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import {settingsManager} from '../../../services/settings';
55
import {TracingLevelNumber} from '../../../types/api/query';
66
import type {QueryAction, QueryRequestParams, QuerySettings} from '../../../types/store/query';
77
import type {StreamDataChunk} from '../../../types/store/streaming';
8-
import {QUERIES_HISTORY_KEY} from '../../../utils/constants';
8+
import {loadFromSessionStorage, saveToSessionStorage} from '../../../utils';
9+
import {
10+
QUERIES_HISTORY_KEY,
11+
QUERY_EDITOR_CURRENT_QUERY_KEY,
12+
QUERY_EDITOR_DIRTY_KEY,
13+
} from '../../../utils/constants';
914
import {isQueryErrorResponse} from '../../../utils/query';
1015
import {isNumeric} from '../../../utils/utils';
1116
import type {RootState} from '../../defaultStore';
@@ -29,9 +34,14 @@ const queriesHistoryInitial = settingsManager.readUserSettingsValue(
2934

3035
const sliceLimit = queriesHistoryInitial.length - MAXIMUM_QUERIES_IN_HISTORY;
3136

37+
const rawQuery = loadFromSessionStorage(QUERY_EDITOR_CURRENT_QUERY_KEY);
38+
const input = typeof rawQuery === 'string' ? rawQuery : '';
39+
40+
const isDirty = Boolean(loadFromSessionStorage(QUERY_EDITOR_DIRTY_KEY));
41+
3242
const initialState: QueryState = {
33-
input: '',
34-
isDirty: false,
43+
input,
44+
isDirty,
3545
history: {
3646
queries: queriesHistoryInitial
3747
.slice(sliceLimit < 0 ? 0 : sliceLimit)
@@ -50,9 +60,11 @@ const slice = createSlice({
5060
reducers: {
5161
changeUserInput: (state, action: PayloadAction<{input: string}>) => {
5262
state.input = action.payload.input;
63+
saveToSessionStorage(QUERY_EDITOR_CURRENT_QUERY_KEY, action.payload.input);
5364
},
5465
setIsDirty: (state, action: PayloadAction<boolean>) => {
5566
state.isDirty = action.payload;
67+
saveToSessionStorage(QUERY_EDITOR_DIRTY_KEY, action.payload);
5668
},
5769
setQueryResult: (state, action: PayloadAction<QueryResult | undefined>) => {
5870
state.result = action.payload;

src/utils/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ export const INVERTED_DISKS_KEY = SETTING_KEYS.INVERTED_DISKS;
116116
export const SAVED_QUERIES_KEY = SETTING_KEYS.SAVED_QUERIES;
117117
export const ASIDE_HEADER_COMPACT_KEY = SETTING_KEYS.ASIDE_HEADER_COMPACT;
118118
export const QUERIES_HISTORY_KEY = 'queries_history';
119+
120+
export const QUERY_EDITOR_CURRENT_QUERY_KEY = 'query_editor_current_query';
121+
export const QUERY_EDITOR_DIRTY_KEY = 'query_editor_dirty';
122+
119123
export const BINARY_DATA_IN_PLAIN_TEXT_DISPLAY = SETTING_KEYS.BINARY_DATA_IN_PLAIN_TEXT_DISPLAY;
120124
export const AUTO_REFRESH_INTERVAL = SETTING_KEYS.AUTO_REFRESH_INTERVAL;
121125

src/utils/index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,24 @@ export function normalizePathSlashes(path: string) {
1717
// (?<!:) - negative lookbehind - ignore parts that start with :
1818
return path.replaceAll(/(?<!:)\/\/+/g, '/');
1919
}
20+
21+
export function saveToSessionStorage(key: string, value: unknown): void {
22+
try {
23+
sessionStorage.setItem(key, JSON.stringify(value));
24+
} catch (error) {
25+
console.warn('Failed to save to session storage:', error);
26+
}
27+
}
28+
29+
export function loadFromSessionStorage(key: string): unknown {
30+
try {
31+
const stored = sessionStorage.getItem(key);
32+
if (!stored) {
33+
return null;
34+
}
35+
return JSON.parse(stored);
36+
} catch (error) {
37+
console.warn('Failed to load from session storage:', error);
38+
return null;
39+
}
40+
}

0 commit comments

Comments
 (0)