11import { Box , Flex } from "@radix-ui/themes" ;
22import type { Task } from "@shared/types" ;
3- import { useState } from "react" ;
3+ import { useCallback , useEffect , useState } from "react" ;
44import { useHotkeys } from "react-hotkeys-hook" ;
55import { useIntegrations } from "../hooks/useIntegrations" ;
66import { useTabStore } from "../stores/tabStore" ;
@@ -15,12 +15,30 @@ import { WorkflowForm } from "./WorkflowForm";
1515import { WorkflowView } from "./WorkflowView" ;
1616
1717export function MainLayout ( ) {
18- const { activeTabId, tabs, createTab, setActiveTab } = useTabStore ( ) ;
18+ const { activeTabId, tabs, createTab, setActiveTab, closeTab } =
19+ useTabStore ( ) ;
1920 useIntegrations ( ) ;
2021 const [ commandMenuOpen , setCommandMenuOpen ] = useState ( false ) ;
2122 const [ taskCreateOpen , setTaskCreateOpen ] = useState ( false ) ;
2223 const [ workflowCreateOpen , setWorkflowCreateOpen ] = useState ( false ) ;
2324
25+ const handleOpenSettings = useCallback ( ( ) => {
26+ const existingTab = tabs . find ( ( tab ) => tab . type === "settings" ) ;
27+
28+ if ( existingTab ) {
29+ if ( activeTabId === existingTab . id ) {
30+ closeTab ( existingTab . id ) ;
31+ } else {
32+ setActiveTab ( existingTab . id ) ;
33+ }
34+ } else {
35+ createTab ( {
36+ type : "settings" ,
37+ title : "Settings" ,
38+ } ) ;
39+ }
40+ } , [ tabs , activeTabId , setActiveTab , createTab , closeTab ] ) ;
41+
2442 useHotkeys ( "mod+k" , ( ) => setCommandMenuOpen ( ( prev ) => ! prev ) , {
2543 enabled : ! commandMenuOpen ,
2644 } ) ;
@@ -32,6 +50,17 @@ export function MainLayout() {
3250 } ) ;
3351 useHotkeys ( "mod+n" , ( ) => setTaskCreateOpen ( true ) ) ;
3452 useHotkeys ( "mod+shift+n" , ( ) => setWorkflowCreateOpen ( true ) ) ;
53+ useHotkeys ( "mod+," , ( ) => handleOpenSettings ( ) ) ;
54+
55+ useEffect ( ( ) => {
56+ const unsubscribe = window . electronAPI ?. onOpenSettings ( ( ) => {
57+ handleOpenSettings ( ) ;
58+ } ) ;
59+
60+ return ( ) => {
61+ unsubscribe ?.( ) ;
62+ } ;
63+ } , [ handleOpenSettings ] ) ;
3564
3665 const handleSelectTask = ( task : Task ) => {
3766 const existingTab = tabs . find (
@@ -54,19 +83,6 @@ export function MainLayout() {
5483 }
5584 } ;
5685
57- const handleOpenSettings = ( ) => {
58- const existingTab = tabs . find ( ( tab ) => tab . type === "settings" ) ;
59-
60- if ( existingTab ) {
61- setActiveTab ( existingTab . id ) ;
62- } else {
63- createTab ( {
64- type : "settings" ,
65- title : "Settings" ,
66- } ) ;
67- }
68- } ;
69-
7086 const activeTab = tabs . find ( ( tab ) => tab . id === activeTabId ) ;
7187
7288 return (
0 commit comments