Drag into folder (Closes #8)

This commit is contained in:
Gregory Schier
2023-11-17 07:36:01 -08:00
parent ee87e65763
commit bff6c668a0
2 changed files with 33 additions and 19 deletions

View File

@@ -4,6 +4,8 @@ use log::info;
use tauri::{AppHandle, updater, Window, Wry}; use tauri::{AppHandle, updater, Window, Wry};
use tauri::api::dialog; use tauri::api::dialog;
use crate::is_dev;
// Check for updates every 3 hours // Check for updates every 3 hours
const MAX_UPDATE_CHECK_SECONDS: u64 = 60 * 60 * 3; const MAX_UPDATE_CHECK_SECONDS: u64 = 60 * 60 * 3;
@@ -28,6 +30,10 @@ impl YaakUpdater {
app_handle: &AppHandle<Wry>, app_handle: &AppHandle<Wry>,
mode: UpdateMode, mode: UpdateMode,
) -> Result<(), updater::Error> { ) -> Result<(), updater::Error> {
if is_dev() {
info!("Skipping update check because we are in dev mode");
return Ok(());
}
self.last_update_check = SystemTime::now(); self.last_update_check = SystemTime::now();
let update_mode = get_update_mode_str(mode); let update_mode = get_update_mode_str(mode);
info!("Checking for updates mode={}", update_mode); info!("Checking for updates mode={}", update_mode);

View File

@@ -78,6 +78,11 @@ export function Sidebar({ className }: Props) {
namespace: NAMESPACE_NO_SYNC, namespace: NAMESPACE_NO_SYNC,
}); });
const isCollapsed = useCallback(
(id: string) => collapsed.value?.[id] ?? false,
[collapsed.value],
);
const { tree, treeParentMap, selectableRequests } = useMemo<{ const { tree, treeParentMap, selectableRequests } = useMemo<{
tree: TreeNode | null; tree: TreeNode | null;
treeParentMap: Record<string, TreeNode>; treeParentMap: Record<string, TreeNode>;
@@ -258,13 +263,21 @@ export function Sidebar({ className }: Props) {
const handleMove = useCallback<DraggableSidebarItemProps['onMove']>( const handleMove = useCallback<DraggableSidebarItemProps['onMove']>(
(id, side) => { (id, side) => {
const hoveredTree = treeParentMap[id] ?? null; let hoveredTree = treeParentMap[id] ?? null;
const dragIndex = hoveredTree?.children.findIndex((n) => n.item.id === id) ?? -99; 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); setHoveredTree(hoveredTree);
setHoveredIndex(hoveredIndex); setHoveredIndex(hoveredIndex);
}, },
[treeParentMap], [isCollapsed, treeParentMap],
); );
const handleDragStart = useCallback<DraggableSidebarItemProps['onDragStart']>((id: string) => { const handleDragStart = useCallback<DraggableSidebarItemProps['onDragStart']>((id: string) => {
@@ -340,11 +353,8 @@ export function Sidebar({ className }: Props) {
], ],
); );
if (tree == null) { // Not ready to render yet
return null; if (tree == null || collapsed.value == null) {
}
if (collapsed.value == null) {
return null; return null;
} }
@@ -364,7 +374,7 @@ export function Sidebar({ className }: Props) {
treeParentMap={treeParentMap} treeParentMap={treeParentMap}
selectedId={selectedId} selectedId={selectedId}
selectedTree={selectedTree} selectedTree={selectedTree}
collapsed={collapsed.value} isCollapsed={isCollapsed}
tree={tree} tree={tree}
focused={hasFocus} focused={hasFocus}
draggingId={draggingId} draggingId={draggingId}
@@ -392,7 +402,7 @@ interface SidebarItemsProps {
handleEnd: (id: string) => void; handleEnd: (id: string) => void;
handleDragStart: (id: string) => void; handleDragStart: (id: string) => void;
onSelect: (requestId: string) => void; onSelect: (requestId: string) => void;
collapsed: Record<string, boolean>; isCollapsed: (id: string) => boolean;
} }
function SidebarItems({ function SidebarItems({
@@ -403,7 +413,7 @@ function SidebarItems({
draggingId, draggingId,
onSelect, onSelect,
treeParentMap, treeParentMap,
collapsed, isCollapsed,
hoveredTree, hoveredTree,
hoveredIndex, hoveredIndex,
handleEnd, handleEnd,
@@ -438,16 +448,16 @@ function SidebarItems({
onSelect={onSelect} onSelect={onSelect}
onDragStart={handleDragStart} onDragStart={handleDragStart}
useProminentStyles={focused} useProminentStyles={focused}
collapsed={collapsed} isCollapsed={isCollapsed}
child={child} child={child}
> >
{child.item.model === 'folder' && {child.item.model === 'folder' &&
!collapsed[child.item.id] && !isCollapsed(child.item.id) &&
draggingId !== child.item.id && ( draggingId !== child.item.id && (
<SidebarItems <SidebarItems
treeParentMap={treeParentMap} treeParentMap={treeParentMap}
tree={child} tree={child}
collapsed={collapsed} isCollapsed={isCollapsed}
draggingId={draggingId} draggingId={draggingId}
hoveredTree={hoveredTree} hoveredTree={hoveredTree}
hoveredIndex={hoveredIndex} hoveredIndex={hoveredIndex}
@@ -478,12 +488,10 @@ type SidebarItemProps = {
itemModel: string; itemModel: string;
useProminentStyles?: boolean; useProminentStyles?: boolean;
selected?: boolean; selected?: boolean;
onSelect: (id: string) => void;
draggable?: boolean; draggable?: boolean;
children?: ReactNode; children?: ReactNode;
collapsed: Record<string, boolean>;
child: TreeNode; child: TreeNode;
}; } & Pick<SidebarItemsProps, 'isCollapsed' | 'onSelect'>;
const SidebarItem = forwardRef(function SidebarItem( const SidebarItem = forwardRef(function SidebarItem(
{ {
@@ -496,7 +504,7 @@ const SidebarItem = forwardRef(function SidebarItem(
useProminentStyles, useProminentStyles,
selected, selected,
onSelect, onSelect,
collapsed, isCollapsed,
child, child,
}: SidebarItemProps, }: SidebarItemProps,
ref: ForwardedRef<HTMLLIElement>, ref: ForwardedRef<HTMLLIElement>,
@@ -679,7 +687,7 @@ const SidebarItem = forwardRef(function SidebarItem(
icon="chevronRight" icon="chevronRight"
className={classNames( className={classNames(
'-ml-0.5 mr-2 transition-transform', '-ml-0.5 mr-2 transition-transform',
!collapsed[itemId] && 'transform rotate-90', !isCollapsed(itemId) && 'transform rotate-90',
)} )}
/> />
)} )}