diff --git a/src-tauri/src/updates.rs b/src-tauri/src/updates.rs index 3313c273..da23703f 100644 --- a/src-tauri/src/updates.rs +++ b/src-tauri/src/updates.rs @@ -4,6 +4,8 @@ use log::info; use tauri::{AppHandle, updater, Window, Wry}; use tauri::api::dialog; +use crate::is_dev; + // Check for updates every 3 hours const MAX_UPDATE_CHECK_SECONDS: u64 = 60 * 60 * 3; @@ -28,6 +30,10 @@ impl YaakUpdater { app_handle: &AppHandle, mode: UpdateMode, ) -> Result<(), updater::Error> { + if is_dev() { + info!("Skipping update check because we are in dev mode"); + return Ok(()); + } self.last_update_check = SystemTime::now(); let update_mode = get_update_mode_str(mode); info!("Checking for updates mode={}", update_mode); diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index a9d9ea19..e604a217 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -78,6 +78,11 @@ export function Sidebar({ className }: Props) { namespace: NAMESPACE_NO_SYNC, }); + const isCollapsed = useCallback( + (id: string) => collapsed.value?.[id] ?? false, + [collapsed.value], + ); + const { tree, treeParentMap, selectableRequests } = useMemo<{ tree: TreeNode | null; treeParentMap: Record; @@ -258,13 +263,21 @@ export function Sidebar({ className }: Props) { const handleMove = useCallback( (id, side) => { - const hoveredTree = treeParentMap[id] ?? null; + let hoveredTree = treeParentMap[id] ?? null; const dragIndex = hoveredTree?.children.findIndex((n) => n.item.id === id) ?? -99; - const hoveredIndex = dragIndex + (side === 'above' ? 0 : 1); + const hoveredItem = hoveredTree?.children[dragIndex]?.item ?? null; + let hoveredIndex = dragIndex + (side === 'above' ? 0 : 1); + + if (hoveredItem?.model === 'folder' && side === 'below' && !isCollapsed(hoveredItem.id)) { + // Move into folder if it's open and we're moving below it + hoveredTree = hoveredTree?.children.find((n) => n.item.id === id) ?? null; + hoveredIndex = 0; + } + setHoveredTree(hoveredTree); setHoveredIndex(hoveredIndex); }, - [treeParentMap], + [isCollapsed, treeParentMap], ); const handleDragStart = useCallback((id: string) => { @@ -340,11 +353,8 @@ export function Sidebar({ className }: Props) { ], ); - if (tree == null) { - return null; - } - - if (collapsed.value == null) { + // Not ready to render yet + if (tree == null || collapsed.value == null) { return null; } @@ -364,7 +374,7 @@ export function Sidebar({ className }: Props) { treeParentMap={treeParentMap} selectedId={selectedId} selectedTree={selectedTree} - collapsed={collapsed.value} + isCollapsed={isCollapsed} tree={tree} focused={hasFocus} draggingId={draggingId} @@ -392,7 +402,7 @@ interface SidebarItemsProps { handleEnd: (id: string) => void; handleDragStart: (id: string) => void; onSelect: (requestId: string) => void; - collapsed: Record; + isCollapsed: (id: string) => boolean; } function SidebarItems({ @@ -403,7 +413,7 @@ function SidebarItems({ draggingId, onSelect, treeParentMap, - collapsed, + isCollapsed, hoveredTree, hoveredIndex, handleEnd, @@ -438,16 +448,16 @@ function SidebarItems({ onSelect={onSelect} onDragStart={handleDragStart} useProminentStyles={focused} - collapsed={collapsed} + isCollapsed={isCollapsed} child={child} > {child.item.model === 'folder' && - !collapsed[child.item.id] && + !isCollapsed(child.item.id) && draggingId !== child.item.id && ( void; draggable?: boolean; children?: ReactNode; - collapsed: Record; child: TreeNode; -}; +} & Pick; const SidebarItem = forwardRef(function SidebarItem( { @@ -496,7 +504,7 @@ const SidebarItem = forwardRef(function SidebarItem( useProminentStyles, selected, onSelect, - collapsed, + isCollapsed, child, }: SidebarItemProps, ref: ForwardedRef, @@ -679,7 +687,7 @@ const SidebarItem = forwardRef(function SidebarItem( icon="chevronRight" className={classNames( '-ml-0.5 mr-2 transition-transform', - !collapsed[itemId] && 'transform rotate-90', + !isCollapsed(itemId) && 'transform rotate-90', )} /> )}