diff --git a/frontend/src/AppBuilder/QueryPanel/QueryKeyHooks.jsx b/frontend/src/AppBuilder/QueryPanel/QueryKeyHooks.jsx new file mode 100644 index 0000000000..06d8958cab --- /dev/null +++ b/frontend/src/AppBuilder/QueryPanel/QueryKeyHooks.jsx @@ -0,0 +1,48 @@ +import React from 'react'; +import useStore from '@/AppBuilder/_stores/store'; +import { useHotkeys } from 'react-hotkeys-hook'; +import { useModuleId } from '@/AppBuilder/_contexts/ModuleContext'; + +const QueryKeyHooks = ({ children, isExpanded }) => { + const runQuery = useStore((state) => state.queryPanel.runQuery); + const selectedQuery = useStore((state) => state.queryPanel.selectedQuery); + const moduleId = useModuleId(); + const previewQuery = useStore((state) => state.queryPanel.previewQuery); + const selectedDataSource = useStore((state) => state.queryPanel.selectedDataSource); + const queryName = selectedQuery?.name ?? ''; + + const previewButtonOnClick = () => { + const _options = { ...selectedQuery.options }; + const query = { + data_source_id: selectedDataSource.id === 'null' ? null : selectedDataSource.id, + pluginId: selectedDataSource.pluginId, + options: _options, + kind: selectedDataSource.kind, + name: queryName, + id: selectedQuery?.id, + }; + previewQuery(query, false, undefined, moduleId).catch(({ error, data }) => { + console.log(error, data); + }); + }; + + const shortcutRef = useHotkeys( + ['mod+enter', 'mod+shift+enter'], + (event, handler) => { + if (handler.mod && handler.keys[0] === 'enter') { + if (handler.shift) { + previewButtonOnClick(); + } else runQuery(selectedQuery?.id, selectedQuery?.name, undefined, 'edit', {}, true); + } + }, + { enabled: isExpanded } + ); + + return ( +
+ {children} +
+ ); +}; + +export default QueryKeyHooks; diff --git a/frontend/src/AppBuilder/QueryPanel/QueryPanel.jsx b/frontend/src/AppBuilder/QueryPanel/QueryPanel.jsx index 827efe6d33..8bf5d2ea53 100644 --- a/frontend/src/AppBuilder/QueryPanel/QueryPanel.jsx +++ b/frontend/src/AppBuilder/QueryPanel/QueryPanel.jsx @@ -11,6 +11,7 @@ import useStore from '@/AppBuilder/_stores/store'; import SectionCollapse from '@/_ui/Icon/solidIcons/SectionCollapse'; import SectionExpand from '@/_ui/Icon/solidIcons/SectionExpand'; import { shallow } from 'zustand/shallow'; +import QueryKeyHooks from './QueryKeyHooks'; const MemoizedQueryDataPane = memo(QueryDataPane); const MemoizedQueryManager = memo(QueryManager); @@ -192,14 +193,14 @@ export const QueryPanel = ({ darkMode }) => { }} > {isExpanded && ( -
+
-
+ )}