From 328e3db56e66fa34db3a214c18a26486aac8c928 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Wed, 8 Jan 2025 15:25:03 -0800 Subject: [PATCH] Fix UpdateSource for sync upserts --- src-tauri/src/lib.rs | 15 +++++-- src-tauri/yaak-models/src/queries.rs | 12 +++--- src-tauri/yaak-sync/src/sync.rs | 1 + src-web/commands/commands.tsx | 1 - src-web/components/MarkdownEditor.tsx | 41 +++++++++++-------- src-web/components/RequestPane.tsx | 6 +-- .../components/WorkspaceSettingsDialog.tsx | 9 +++- src-web/components/core/Tabs/Tabs.tsx | 2 - 8 files changed, 53 insertions(+), 34 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 2b400fe1..ce004d3e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -921,10 +921,17 @@ async fn cmd_import_data( }) .collect(); - let upserted = - batch_upsert(&window, workspaces, environments, folders, http_requests, grpc_requests) - .await - .map_err(|e| e.to_string())?; + let upserted = batch_upsert( + &window, + workspaces, + environments, + folders, + http_requests, + grpc_requests, + &UpdateSource::Import, + ) + .await + .map_err(|e| e.to_string())?; analytics::track_event( &window, diff --git a/src-tauri/yaak-models/src/queries.rs b/src-tauri/yaak-models/src/queries.rs index 011a84ea..17c2eb93 100644 --- a/src-tauri/yaak-models/src/queries.rs +++ b/src-tauri/yaak-models/src/queries.rs @@ -2013,6 +2013,7 @@ pub enum UpdateSource { Window, Plugin, Background, + Import, } fn emit_upserted_model( @@ -2100,11 +2101,12 @@ pub async fn batch_upsert( folders: Vec, http_requests: Vec, grpc_requests: Vec, + update_source: &UpdateSource, ) -> Result { let mut imported_resources = BatchUpsertResult::default(); for v in workspaces { - let x = upsert_workspace(&window, v, &UpdateSource::Window).await?; + let x = upsert_workspace(&window, v, update_source).await?; imported_resources.workspaces.push(x.clone()); } info!("Imported {} workspaces", imported_resources.workspaces.len()); @@ -2120,7 +2122,7 @@ pub async fn batch_upsert( if let Some(_) = imported_resources.environments.iter().find(|f| f.id == v.id) { continue; } - let x = upsert_environment(&window, v, &UpdateSource::Window).await?; + let x = upsert_environment(&window, v, update_source).await?; imported_resources.environments.push(x.clone()); } } @@ -2137,20 +2139,20 @@ pub async fn batch_upsert( if let Some(_) = imported_resources.folders.iter().find(|f| f.id == v.id) { continue; } - let x = upsert_folder(&window, v, &UpdateSource::Window).await?; + let x = upsert_folder(&window, v, update_source).await?; imported_resources.folders.push(x.clone()); } } info!("Imported {} folders", imported_resources.folders.len()); for v in http_requests { - let x = upsert_http_request(&window, v, &UpdateSource::Window).await?; + let x = upsert_http_request(&window, v, update_source).await?; imported_resources.http_requests.push(x.clone()); } info!("Imported {} http_requests", imported_resources.http_requests.len()); for v in grpc_requests { - let x = upsert_grpc_request(&window, v, &UpdateSource::Window).await?; + let x = upsert_grpc_request(&window, v, update_source).await?; imported_resources.grpc_requests.push(x.clone()); } info!("Imported {} grpc_requests", imported_resources.grpc_requests.len()); diff --git a/src-tauri/yaak-sync/src/sync.rs b/src-tauri/yaak-sync/src/sync.rs index 00d7a842..4607b0a1 100644 --- a/src-tauri/yaak-sync/src/sync.rs +++ b/src-tauri/yaak-sync/src/sync.rs @@ -416,6 +416,7 @@ pub(crate) async fn apply_sync_ops( folders_to_upsert, http_requests_to_upsert, grpc_requests_to_upsert, + &UpdateSource::Sync, ) .await?; diff --git a/src-web/commands/commands.tsx b/src-web/commands/commands.tsx index efa9b3d5..8cfb1a62 100644 --- a/src-web/commands/commands.tsx +++ b/src-web/commands/commands.tsx @@ -65,7 +65,6 @@ export const syncWorkspace = createFastMutation< mutationKey: [], mutationFn: async ({ workspaceId, syncDir }) => { const ops = (await calculateSync(workspaceId, syncDir)) ?? []; - console.log('SYNCING WORKSPACE', ops); if (ops.length === 0) { return; } diff --git a/src-web/components/MarkdownEditor.tsx b/src-web/components/MarkdownEditor.tsx index 4cc89de1..5a45456d 100644 --- a/src-web/components/MarkdownEditor.tsx +++ b/src-web/components/MarkdownEditor.tsx @@ -1,8 +1,10 @@ import classNames from 'classnames'; import { atom, useAtom } from 'jotai'; -import { useRef, useState } from 'react'; +import { useRef } from 'react'; +import type { Components } from 'react-markdown'; import Markdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; +import { useStateWithDeps } from '../hooks/useStateWithDeps'; import { Button } from './core/Button'; import type { EditorProps } from './core/Editor/Editor'; import { Editor } from './core/Editor/Editor'; @@ -30,12 +32,14 @@ export function MarkdownEditor({ name, defaultMode = 'preview', doneButtonLabel = 'Save', + forceUpdateKey, ...editorProps }: Props) { - const containerRef = useRef(null); const [rawViewMode, setViewMode] = useAtom(viewModeAtom); + const [value, setValue] = useStateWithDeps(defaultValue, [forceUpdateKey]); + + const containerRef = useRef(null); const viewMode = rawViewMode[name] ?? defaultMode; - const [value, setValue] = useState(defaultValue); const editor = ( ); @@ -55,21 +60,7 @@ export function MarkdownEditor({

No description

) : ( - { - if (href && !href.match(/https?:\/\//)) { - href = `http://${href}`; - } - return ( - - {children} - - ); - }, - }} - > + {value} @@ -131,3 +122,17 @@ export function MarkdownEditor({ ); } + +const markdownComponents: Partial = { + // Ensure links open in external browser by adding target="_blank" + a: ({ href, children, ...rest }) => { + if (href && !href.match(/https?:\/\//)) { + href = `http://${href}`; + } + return ( + + {children} + + ); + }, +}; diff --git a/src-web/components/RequestPane.tsx b/src-web/components/RequestPane.tsx index 0dd638eb..de335695 100644 --- a/src-web/components/RequestPane.tsx +++ b/src-web/components/RequestPane.tsx @@ -485,9 +485,9 @@ export const RequestPane = memo(function RequestPane({ updateRequest({ id: activeRequestId, update: { description } }) } diff --git a/src-web/components/WorkspaceSettingsDialog.tsx b/src-web/components/WorkspaceSettingsDialog.tsx index 5eab9411..8dd22966 100644 --- a/src-web/components/WorkspaceSettingsDialog.tsx +++ b/src-web/components/WorkspaceSettingsDialog.tsx @@ -24,7 +24,14 @@ export function WorkspaceSettingsDialog({ workspaceId, hide }: Props) { const { mutate: updateWorkspace } = useUpdateWorkspace(workspaceId ?? null); const { mutateAsync: deleteActiveWorkspace } = useDeleteActiveWorkspace(); - if (workspace == null) return null; + if (workspace == null) { + return ( + + Workspace not found + + ); + } + if (workspaceMeta == null) return ( diff --git a/src-web/components/core/Tabs/Tabs.tsx b/src-web/components/core/Tabs/Tabs.tsx index 1996c781..701dd633 100644 --- a/src-web/components/core/Tabs/Tabs.tsx +++ b/src-web/components/core/Tabs/Tabs.tsx @@ -42,8 +42,6 @@ export function Tabs({ }: Props) { const ref = useRef(null); - value = value ?? tabs[0]?.value; - // Update tabs when value changes useEffect(() => { const tabs = ref.current?.querySelectorAll(`[data-tab]`);