Skip to content
Snippets Groups Projects
Verified Commit c5461117 authored by Dennis Collaris's avatar Dennis Collaris
Browse files

fix: rebase issues and return context menu functionality on tabs

parent 0047de9f
No related branches found
Tags v1.164.6
No related merge requests found
Pipeline #147849 failed
import { Button, ControlContainer, Input, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/lib/components';
import { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger } from '@/lib/components/menu';
import { Popover, PopoverContent, PopoverTrigger } from '@/lib/components/popover';
import { Tab, Tabs } from '@/lib/components/tabs';
import { ControlContainer, TooltipProvider } from '@/lib/components'; import { ControlContainer, TooltipProvider } from '@/lib/components';
import { useEffect, useMemo, useRef } from 'react';
import { useActiveQuery, useActiveSaveState, useAppDispatch, useGraphQuery, useML } from '../../../data-access';
import { Tabs } from '@/lib/components/tabs'; import { Tabs } from '@/lib/components/tabs';
import { wsUpdateQuery } from '@/lib/data-access/broker'; import { wsUpdateQuery } from '@/lib/data-access/broker';
import { addError } from '@/lib/data-access/store/configSlice'; import { addError } from '@/lib/data-access/store/configSlice';
import objectHash from 'object-hash'; import objectHash from 'object-hash';
import { useEffect, useMemo, useRef } from 'react';
import Sortable from 'sortablejs'; import Sortable from 'sortablejs';
import { useActiveQuery, useActiveSaveState, useAppDispatch, useGraphQuery, useML } from '../../../data-access';
import { clearQB, reorderQueryState, setQueryName } from '../../../data-access/store/sessionSlice'; import { clearQB, reorderQueryState, setQueryName } from '../../../data-access/store/sessionSlice';
import { import {
AddQueryButton, AddQueryButton,
......
import { Button, Input, Tab, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/lib/components'; import { Button, Icon, Input, Tab, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/lib/components';
import { Menu, MenuContent, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger } from '@/lib/components/menu';
import { useAppDispatch } from '@/lib/data-access'; import { useAppDispatch } from '@/lib/data-access';
import { wsDeleteQuery } from '@/lib/data-access/broker'; import { wsDeleteQuery } from '@/lib/data-access/broker';
import { removeQueryByID, setActiveQueryID, setQueryViewMode } from '@/lib/data-access/store/sessionSlice'; import { removeQueryByID, setActiveQueryID, setQuerybuilderSettings, setQueryViewMode } from '@/lib/data-access/store/sessionSlice';
import { useState } from 'react'; import { useState } from 'react';
import { Query, QueryViewMode } from 'ts-common/src/model'; import { Query, QueryViewMode } from 'ts-common/src/model';
...@@ -36,7 +37,7 @@ const QueryBuilderTab = ({ query, isActive, canWrite, saveStateId, isLastTab, on ...@@ -36,7 +37,7 @@ const QueryBuilderTab = ({ query, isActive, canWrite, saveStateId, isLastTab, on
}; };
// Get icon component based on the view mode // Get icon component based on the view mode
const getViewModeIcon = (): string => { const getViewModeIcon = (viewMode: QueryViewMode): string => {
switch (viewMode) { switch (viewMode) {
case QueryViewMode.Visual: case QueryViewMode.Visual:
return 'icon-[ic--baseline-remove-red-eye]'; return 'icon-[ic--baseline-remove-red-eye]';
...@@ -71,94 +72,116 @@ const QueryBuilderTab = ({ query, isActive, canWrite, saveStateId, isLastTab, on ...@@ -71,94 +72,116 @@ const QueryBuilderTab = ({ query, isActive, canWrite, saveStateId, isLastTab, on
}; };
return ( return (
<Tab <Menu atCursor>
text="" <MenuTrigger className="-mb-px" rightClick>
activeTab={isActive} <Tab
data-id={query.id} text=""
onClick={() => { activeTab={isActive}
if (query.id == null) throw new Error('Query ID is null; Cannot change tabs in query tab navbar'); data-id={query.id}
dispatch(setActiveQueryID(query.id)); onClick={() => {
}} if (query.id == null) throw new Error('Query ID is null; Cannot change tabs in query tab navbar');
> dispatch(setActiveQueryID(query.id));
{isEditing ? (
<Input
type="text"
size="xs"
value={editText}
label=""
onChange={(e: any) => {
setEditText(typeof e === 'string' ? e : e.target.value);
}} }}
onBlur={handleUpdateName} IconComponent={() => <Icon size={14} component={getViewModeIcon(viewMode)} />}
onKeyDown={(e: React.KeyboardEvent) => { >
if (e.key === 'Enter') { {isEditing ? (
handleUpdateName(); <Input
} type="text"
size="xs"
value={editText}
label=""
onChange={(e: any) => {
setEditText(typeof e === 'string' ? e : e.target.value);
}}
onBlur={handleUpdateName}
onKeyDown={(e: React.KeyboardEvent) => {
if (e.key === 'Enter') {
handleUpdateName();
}
}}
className="w-20"
style={{
border: 'none',
boxShadow: 'none',
background: 'none',
}}
autoFocus
/>
) : (
<>
<div
onDoubleClick={(e: React.MouseEvent) => {
e.stopPropagation();
if (query.id == null) throw new Error('Query ID is null; Cannot change tabs in query tab navbar');
dispatch(setActiveQueryID(query.id));
setIsEditing(true);
}}
>
{query.name ?? 'Query'}
</div>
</>
)}
{!isLastTab && (
<>
<Button
variantType="secondary"
variant="ghost"
disabled={!canWrite}
rounded
size="3xs"
iconComponent="icon-[ic--baseline-close]"
onClick={(e: React.MouseEvent) => {
e.stopPropagation();
if (query.id !== undefined) {
wsDeleteQuery({ saveStateID: saveStateId, queryID: query.id });
dispatch(removeQueryByID(query.id));
}
}}
/>
</>
)}
</Tab>
</MenuTrigger>
<MenuContent>
<Menu>
<MenuTrigger label="Change mode" />
<MenuContent>
<MenuRadioGroup
value={query.settings.mode}
onValueChange={value => {
dispatch(setQuerybuilderSettings({ ...query.settings, mode: value as QueryViewMode }));
}}
>
<MenuRadioItem value={QueryViewMode.Visual} label="Visual" closeOnClick={true} />
<MenuRadioItem value={QueryViewMode.Cypher} label="Cypher" closeOnClick={true} />
</MenuRadioGroup>
</MenuContent>
</Menu>
<MenuItem
label="Rename"
closeOnClick={true}
onClick={e => {
e.stopPropagation();
setTimeout(() => {
setIsEditing(true);
}, 1);
}} }}
className="w-20" />
style={{ <MenuSeparator />
border: 'none', <MenuItem
boxShadow: 'none', label="Remove"
background: 'none', className="text-danger"
onClick={() => {
if (query.id !== undefined) {
wsDeleteQuery({ saveStateID: ss.id, queryID: query.id });
dispatch(removeQueryByID(query.id));
}
}} }}
autoFocus
/> />
) : ( </MenuContent>
<> </Menu>
<div
onDoubleClick={(e: React.MouseEvent) => {
e.stopPropagation();
if (query.id == null) throw new Error('Query ID is null; Cannot change tabs in query tab navbar');
dispatch(setActiveQueryID(query.id));
setIsEditing(true);
}}
>
{query.name ?? 'Query'}
</div>
<TooltipProvider>
<Tooltip>
<TooltipTrigger>
<Button
variantType="secondary"
variant="ghost"
size="3xs"
// disabled={true} // will be enabled when more panels are available
iconComponent={getViewModeIcon()}
onClick={(e: React.MouseEvent) => {
e.stopPropagation();
toggleViewMode();
}}
/>
</TooltipTrigger>
<TooltipContent>
<p>{getViewModeTooltip()}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</>
)}
{!isLastTab && (
<>
<Button
variantType="secondary"
variant="ghost"
disabled={!canWrite}
rounded
size="3xs"
iconComponent="icon-[ic--baseline-close]"
onClick={(e: React.MouseEvent) => {
e.stopPropagation();
if (query.id !== undefined) {
wsDeleteQuery({ saveStateID: saveStateId, queryID: query.id });
dispatch(removeQueryByID(query.id));
}
}}
/>
</>
)}
</Tab>
); );
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment