import { getCurrentWebviewWindow } from '@tauri-apps/api/webviewWindow'; import type { ModelPayload } from '@yaakapp-internal/models'; import { atom, useAtomValue } from 'jotai'; import { generateId } from '../lib/generateId'; import { jotaiStore } from '../lib/jotai'; const requestUpdateKeyAtom = atom>({}); getCurrentWebviewWindow() .listen('model_write', ({ payload }) => { if (payload.change.type !== 'upsert') return; if ( (payload.model.model === 'http_request' || payload.model.model === 'grpc_request' || payload.model.model === 'websocket_request') && ((payload.updateSource.type === 'window' && payload.updateSource.label !== getCurrentWebviewWindow().label) || payload.updateSource.type !== 'window') ) { wasUpdatedExternally(payload.model.id); } }) .catch(console.error); export function wasUpdatedExternally(changedRequestId: string) { jotaiStore.set(requestUpdateKeyAtom, (m) => ({ ...m, [changedRequestId]: generateId() })); } export function useRequestUpdateKey(requestId: string | null) { const keys = useAtomValue(requestUpdateKeyAtom); const key = keys[requestId ?? 'n/a']; return `${requestId}::${key ?? 'default'}`; }