Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Commit 689593d

Browse files
authored
fix: SQL Modal Changes (#413)
1 parent bf7237a commit 689593d

File tree

3 files changed

+51
-18
lines changed

3 files changed

+51
-18
lines changed

src/pages/Stream/Views/Explore/useLogsFetcher.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import { useLogsStore, logsStoreReducers } from '../../providers/LogsProvider';
44
import { useQueryLogs } from '@/hooks/useQueryLogs';
55
import { useFetchCount } from '@/hooks/useQueryResult';
66
import { useStreamStore } from '../../providers/StreamProvider';
7+
import useParamsController from '@/pages/Stream/hooks/useParamsController';
78
import _ from 'lodash';
89

910
const { setCleanStoreForStreamChange } = logsStoreReducers;
1011
const { syncTimeRange } = appStoreReducers;
1112

1213
const useLogsFetcher = (props: { schemaLoading: boolean; infoLoading: boolean }) => {
14+
const { isStoreSynced } = useParamsController();
1315
const { schemaLoading, infoLoading } = props;
1416
const [currentStream] = useAppStore((store) => store.currentStream);
1517
const [{ timeRange }, setAppStore] = useAppStore((store) => store);
@@ -25,6 +27,7 @@ const useLogsFetcher = (props: { schemaLoading: boolean; infoLoading: boolean })
2527
const showTable = hasContentLoaded && !hasNoData && !queryLogsError;
2628

2729
useEffect(() => {
30+
if (!isStoreSynced) return;
2831
setAppStore(syncTimeRange);
2932
setLogsStore(setCleanStoreForStreamChange);
3033
}, [currentStream]);

src/pages/Stream/components/Querier/FilterQueryBuilder.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
RuleTypeOverride,
3535
Combinator,
3636
} from '../../providers/FilterProvider';
37+
import { useAppStore } from '@/layouts/MainLayout/providers/AppProvider';
3738

3839
type RuleSetProps = {
3940
ruleSet: RuleGroupTypeOverride;
@@ -50,6 +51,7 @@ const {
5051
updateGroupCombinator,
5152
updateParentCombinator,
5253
updateRule,
54+
parseQuery,
5355
} = filterStoreReducers;
5456

5557
type RuleViewType = {
@@ -284,17 +286,25 @@ export const QueryPills = () => {
284286
);
285287
};
286288

287-
export const FilterQueryBuilder = (props: { onClear: () => void; onApply: () => void }) => {
289+
export const FilterQueryBuilder = (props: {
290+
onClear: () => void;
291+
onApply: () => void;
292+
filterBuilderQuery?: (query: string) => void;
293+
}) => {
288294
const [{ query, isSumbitDisabled, fields }, setFilterStore] = useFilterStore((store) => store);
289295
const [{ isQuerySearchActive, viewMode }] = useLogsStore((store) => store.custQuerySearchState);
290296
const isFiltersApplied = isQuerySearchActive && viewMode === 'filters';
291297
const { combinator, rules: ruleSets } = query;
298+
const [currentStream] = useAppStore((store) => store.currentStream);
292299

293300
useEffect(() => {
294301
// init first rule
295302
if (query.rules.length === 0 && fields.length !== 0) {
296303
setFilterStore((store) => createRuleGroup(store));
297304
}
305+
306+
const { parsedQuery } = parseQuery(query, currentStream || '');
307+
props.filterBuilderQuery && props.filterBuilderQuery(parsedQuery);
298308
}, [query.rules, fields]);
299309

300310
return (

src/pages/Stream/components/Querier/index.tsx

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ import classes from '../../styles/Querier.module.css';
44
import { Text } from '@mantine/core';
55
import { FilterQueryBuilder, QueryPills } from './FilterQueryBuilder';
66
import { AppliedSQLQuery } from './QueryEditor';
7-
import QueryCodeEditor, { defaultCustSQLQuery } from './QueryCodeEditor';
7+
import QueryCodeEditor from './QueryCodeEditor';
88
import { useLogsStore, logsStoreReducers } from '../../providers/LogsProvider';
9-
import { useCallback, useEffect, useRef } from 'react';
9+
import { useCallback, useEffect, useRef, useState } from 'react';
1010
import { filterStoreReducers, noValueOperators, useFilterStore } from '../../providers/FilterProvider';
1111
import { appStoreReducers, useAppStore } from '@/layouts/MainLayout/providers/AppProvider';
1212
import { useStreamStore } from '../../providers/StreamProvider';
1313
import SaveFilterModal from './SaveFilterModal';
1414
import SavedFiltersModal from './SavedFiltersModal';
1515
import _ from 'lodash';
16+
import useParamsController from '@/pages/Stream/hooks/useParamsController';
1617

1718
const { setFields, parseQuery, storeAppliedQuery, resetFilters, toggleSubmitBtn, toggleSaveFiltersModal } =
1819
filterStoreReducers;
@@ -74,24 +75,37 @@ const QuerierModal = (props: {
7475
onSqlSearchApply: (query: string) => void;
7576
onFiltersApply: () => void;
7677
}) => {
77-
const [currentStream] = useAppStore((store) => store.currentStream);
78-
const [{ showQueryBuilder, viewMode }, setLogsStore] = useLogsStore((store) => store.custQuerySearchState);
79-
const [streamInfo] = useStreamStore((store) => store.info);
80-
const [timeRange] = useAppStore((store) => store.timeRange);
81-
const timePartitionColumn = _.get(streamInfo, 'time_partition', 'p_timestamp');
78+
const [{ showQueryBuilder, viewMode, custSearchQuery, activeMode }, setLogsStore] = useLogsStore(
79+
(store) => store.custQuerySearchState,
80+
);
81+
const [parsedFilterQuery, setParsedFilterQuery] = useState('');
82+
83+
const getParsedFilterQuery = useCallback(
84+
(query: string) => {
85+
setParsedFilterQuery(query);
86+
},
87+
[parsedFilterQuery],
88+
);
8289
const onClose = useCallback(() => {
8390
setLogsStore((store) => toggleQueryBuilder(store, false));
84-
}, []);
91+
setLogsStore((store) => toggleCustQuerySearchViewMode(store, activeMode !== null ? activeMode : 'filters'));
92+
}, [activeMode]);
93+
8594
const queryCodeEditorRef = useRef<any>(''); // to store input value even after the editor unmounts
8695

8796
useEffect(() => {
88-
queryCodeEditorRef.current = defaultCustSQLQuery(
89-
currentStream,
90-
timeRange.startTime,
91-
timeRange.endTime,
92-
timePartitionColumn,
93-
);
94-
}, [currentStream, timeRange.endTime, timeRange.startTime, timePartitionColumn]);
97+
if (!_.isEmpty(parsedFilterQuery)) {
98+
queryCodeEditorRef.current = parsedFilterQuery;
99+
} else {
100+
queryCodeEditorRef.current = custSearchQuery;
101+
}
102+
}, [parsedFilterQuery, custSearchQuery]);
103+
104+
useEffect(() => {
105+
if (showQueryBuilder === false) {
106+
setParsedFilterQuery('');
107+
}
108+
}, [showQueryBuilder]);
95109

96110
return (
97111
<Modal
@@ -106,7 +120,11 @@ const QuerierModal = (props: {
106120
title={<ModalTitle title={getLabel(viewMode)} />}>
107121
<Stack style={{ padding: '1rem 0.5rem', height: '100%' }} gap={2}>
108122
{viewMode === 'filters' ? (
109-
<FilterQueryBuilder onClear={props.onClear} onApply={props.onFiltersApply} />
123+
<FilterQueryBuilder
124+
onClear={props.onClear}
125+
onApply={props.onFiltersApply}
126+
filterBuilderQuery={getParsedFilterQuery}
127+
/>
110128
) : (
111129
<QueryCodeEditor
112130
queryCodeEditorRef={queryCodeEditorRef}
@@ -132,6 +150,7 @@ const Querier = () => {
132150
const [streamInfo] = useStreamStore((store) => store.info);
133151
const [{ query, isSumbitDisabled, isQueryFromParams }, setFilterStore] = useFilterStore((store) => store);
134152
const timePartitionColumn = _.get(streamInfo, 'time_partition', 'p_timestamp');
153+
const { isStoreSynced } = useParamsController();
135154

136155
useEffect(() => {
137156
if (schema) {
@@ -140,7 +159,8 @@ const Querier = () => {
140159
}, [schema]);
141160

142161
useEffect(() => {
143-
return setFilterStore(resetFilters);
162+
if (!isStoreSynced) return;
163+
setFilterStore(resetFilters);
144164
}, [currentStream]);
145165

146166
const triggerRefetch = useCallback(

0 commit comments

Comments
 (0)