Skip to content

Commit

Permalink
change: remember variable panel state
Browse files Browse the repository at this point in the history
closes #359
  • Loading branch information
macjuul committed Aug 30, 2024
1 parent 559be75 commit c4b8433
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 38 deletions.
18 changes: 12 additions & 6 deletions src/screens/database/views/graphql/GraphqlView/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { PanelGroup, Panel } from "react-resizable-panels";
import { PanelDragger } from "~/components/Pane/dragger";
import { useActiveConnection } from "~/hooks/connection";
import { useStable } from "~/hooks/stable";
import { useInterfaceStore } from "~/stores/interface";
import { useKeymap } from "~/hooks/keymap";
import { Icon } from "~/components/Icon";
import { iconCursor, iconGraphql, iconOpen, iconWarning } from "~/util/icons";
Expand All @@ -29,15 +28,14 @@ const VariablesPaneLazy = memo(VariablesPane);
const ResultPaneLazy = memo(ResultPane);

export function GraphqlView() {
const { setShowGraphqlVariables, toggleGraphqlVariables } = useInterfaceStore.getState();
const { updateCurrentConnection } = useConfigStore.getState();
const { setGraphqlResponse } = useDatabaseStore.getState();

const [variablesValid, setVariablesValid] = useState(true);
const [queryValid, setQueryValid] = useState(true);

const isLight = useIsLight();
const connection = useActiveConnection();
const showVariables = useInterfaceStore(state => state.showGraphqlVariables);
const activeView = useConfigStore(state => state.activeView);

const isAvailable = GQL_SUPPORTED.has(connection.authentication.protocol);
Expand All @@ -60,14 +58,22 @@ export function GraphqlView() {
}
});

const showVariables = connection.graphqlShowVariables;

const setShowVariables = useStable((graphqlShowVariables: boolean) => {
updateCurrentConnection({
graphqlShowVariables
});
});

const closeVariables = useStable(() => {
setShowGraphqlVariables(false);
setShowVariables(false);
});

const isValid = queryValid && variablesValid;

useIntent("run-graphql-query", runQuery);
useIntent("toggle-graphql-variables", toggleGraphqlVariables);
useIntent("toggle-graphql-variables", () => setShowVariables(!showVariables));

useKeymap([
["F9", () => runQuery()],
Expand All @@ -87,7 +93,7 @@ export function GraphqlView() {
setIsValid={setQueryValid}
isValid={queryValid}
showVariables={showVariables}
setShowVariables={setShowGraphqlVariables}
setShowVariables={setShowVariables}
/>
</Panel>
{showVariables && (
Expand Down
26 changes: 17 additions & 9 deletions src/screens/database/views/query/QueryView/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import { useIntent } from "~/hooks/url";
import { executeUserQuery } from "~/screens/database/connection/connection";
import { useSetting } from "~/hooks/config";
import { usePanelMinSize } from "~/hooks/panels";
import { useInterfaceStore } from "~/stores/interface";
import { useKeymap } from "~/hooks/keymap";
import { CodeInput } from "~/components/Inputs";
import { surrealql } from "@surrealdb/codemirror";
Expand All @@ -44,8 +43,7 @@ const VariablesPaneLazy = memo(VariablesPane);
const ResultPaneLazy = memo(ResultPane);

export function QueryView() {
const { setShowQueryVariables, toggleQueryVariables } = useInterfaceStore.getState();
const { saveQuery } = useConfigStore.getState();
const { saveQuery, updateQueryTab } = useConfigStore.getState();
const logoUrl = useLogoUrl();

const [orientation] = useSetting("appearance", "queryOrientation");
Expand All @@ -59,7 +57,6 @@ export function QueryView() {

const tags = useSavedQueryTags();
const active = useActiveQuery();
const showVariables = useInterfaceStore(state => state.showQueryVariables);
const activeView = useConfigStore(state => state.activeView);

const [isSaving, isSavingHandle] = useDisclosure();
Expand Down Expand Up @@ -121,8 +118,19 @@ export function QueryView() {
});
});

const showVariables = !!active?.showVariables;

const setShowVariables = useStable((showVariables: boolean) => {
if (!active) return;

updateQueryTab({
id: active?.id,
showVariables
});
});

const closeVariables = useStable(() => {
setShowQueryVariables(false);
setShowVariables(false);
});

const variablesOrientation = orientation === "horizontal"
Expand All @@ -133,7 +141,7 @@ export function QueryView() {
useIntent("open-query-history", showHistoryHandle.open);
useIntent("run-query", runQuery);
useIntent("save-query", handleSaveRequest);
useIntent("toggle-variables", toggleQueryVariables);
useIntent("toggle-variables", () => setShowVariables(!showVariables));

useKeymap([
["F9", () => runQuery()],
Expand Down Expand Up @@ -162,7 +170,7 @@ export function QueryView() {
selection={selection}
showVariables={showVariables}
onSaveQuery={handleSaveRequest}
setShowVariables={setShowQueryVariables}
setShowVariables={setShowVariables}
onSelectionChange={setSelection}
square={squareCards}
/>
Expand All @@ -175,7 +183,7 @@ export function QueryView() {
showVariables={showVariables}
selection={selection}
onSaveQuery={handleSaveRequest}
setShowVariables={setShowQueryVariables}
setShowVariables={setShowVariables}
onSelectionChange={setSelection}
/>
</Panel>
Expand Down Expand Up @@ -217,7 +225,7 @@ export function QueryView() {
<SegmentedControl
data={['Query', 'Variables']}
value={showVariables ? 'Variables' : 'Query'}
onChange={toggleQueryVariables}
onChange={() => setShowVariables(!showVariables)}
className={classes.switcher}
radius="xs"
/>
Expand Down
22 changes: 0 additions & 22 deletions src/stores/interface.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ export type InterfaceStore = {
showScopeSignup: boolean;
showChangelogAlert: boolean;
hasReadChangelog: boolean;
showQueryVariables: boolean;
showGraphqlVariables: boolean;

setWindowTitle: (title: string) => void;
setColorScheme: (colorScheme: ColorScheme) => void;
Expand All @@ -29,10 +27,6 @@ export type InterfaceStore = {
closeScopeSignup: () => void;
showChangelog: () => void;
readChangelog: () => void;
setShowQueryVariables: (show: boolean) => void;
setShowGraphqlVariables: (show: boolean) => void;
toggleQueryVariables: () => void;
toggleGraphqlVariables: () => void;
};

export const useInterfaceStore = create<InterfaceStore>((set) => ({
Expand Down Expand Up @@ -125,20 +119,4 @@ export const useInterfaceStore = create<InterfaceStore>((set) => ({
hasReadChangelog: true,
})),

setShowQueryVariables: (show) => set(() => ({
showQueryVariables: show,
})),

toggleQueryVariables: () => set((state) => ({
showQueryVariables: !state.showQueryVariables,
})),

setShowGraphqlVariables: (show) => set(() => ({
showGraphqlVariables: show,
})),

toggleGraphqlVariables: () => set((state) => ({
showGraphqlVariables: !state.showGraphqlVariables,
})),

}));
2 changes: 2 additions & 0 deletions src/types.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ export interface Connection {
designerTableList: boolean;
graphqlQuery: string;
graphqlVariables: string;
graphqlShowVariables: boolean;
}

export interface Template {
Expand Down Expand Up @@ -181,6 +182,7 @@ export interface TabQuery {
variables: string;
valid: boolean;
resultMode: ResultMode;
showVariables: boolean;
}

export interface HistoryQuery {
Expand Down
4 changes: 3 additions & 1 deletion src/util/defaults.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ export function createBaseConnection(settings: SurrealistSettings): Connection {
diagramDirection: settings.appearance.defaultDiagramDirection,
diagramShowLinks: settings.appearance.defaultDiagramShowLinks,
graphqlQuery: "",
graphqlVariables: ""
graphqlVariables: "",
graphqlShowVariables: false
};
}

Expand All @@ -126,6 +127,7 @@ export function createBaseTab(settings: SurrealistSettings, query?: string, ): T
variables: "{}",
valid: query ? !validateQuery(query) : true,
resultMode: settings.appearance.defaultResultMode,
showVariables: false,
};
}

Expand Down

0 comments on commit c4b8433

Please sign in to comment.