feat: adjust frontend document navigation and opening contexts.
This commit is contained in:
@@ -238,7 +238,7 @@ const DesktopWorkspaceContent: React.FC<DesktopWorkspaceProps> = ({
|
|||||||
const doc = items.find(i => String(i.id) === lastId);
|
const doc = items.find(i => String(i.id) === lastId);
|
||||||
if (doc) {
|
if (doc) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const target = e.code === 'Enter' ? 'sidepanel' : 'preview';
|
const target = e.code === 'Enter' ? 'inspect' : 'preview';
|
||||||
openDocument(doc, target);
|
openDocument(doc, target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -416,7 +416,7 @@ const DesktopWorkspaceContent: React.FC<DesktopWorkspaceProps> = ({
|
|||||||
getDocumentAsset={getDocumentAsset}
|
getDocumentAsset={getDocumentAsset}
|
||||||
onDocumentActivate={(_id, event) => {
|
onDocumentActivate={(_id, event) => {
|
||||||
const isPreview = event && ((event as any).altKey || (event as any).button === 1);
|
const isPreview = event && ((event as any).altKey || (event as any).button === 1);
|
||||||
openDocument(doc, isPreview ? 'preview' : 'sidepanel');
|
openDocument(doc, isPreview ? 'preview' : 'inspect');
|
||||||
}}
|
}}
|
||||||
layoutCard={layoutCard}
|
layoutCard={layoutCard}
|
||||||
tagHandlers={tagHandlers}
|
tagHandlers={tagHandlers}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ export const useDocumentItemLogic = ({ doc, tagHandlers, viewLogic }: UseDocumen
|
|||||||
},
|
},
|
||||||
onDoubleClick: (event: React.MouseEvent) => {
|
onDoubleClick: (event: React.MouseEvent) => {
|
||||||
const isPreview = event && (event.altKey || event.button === 1);
|
const isPreview = event && (event.altKey || event.button === 1);
|
||||||
openDocument(doc, isPreview ? 'preview' : 'sidepanel');
|
openDocument(doc, isPreview ? 'preview' : 'inspect');
|
||||||
},
|
},
|
||||||
onDragStart: (event: DragEvent<HTMLElement>) => onDocumentDragStart?.(event, doc),
|
onDragStart: (event: DragEvent<HTMLElement>) => onDocumentDragStart?.(event, doc),
|
||||||
onDragEnd: (event: DragEvent<HTMLElement>) => onDocumentDragEnd?.(event),
|
onDragEnd: (event: DragEvent<HTMLElement>) => onDocumentDragEnd?.(event),
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ export const useDocumentsNavigation = ({
|
|||||||
const entry = getEntryByKey(activeRow.key);
|
const entry = getEntryByKey(activeRow.key);
|
||||||
if (entry && entry.type === 'document') {
|
if (entry && entry.type === 'document') {
|
||||||
const isPreview = key === ' ' || key === 'Space' || key === 'Spacebar';
|
const isPreview = key === ' ' || key === 'Space' || key === 'Spacebar';
|
||||||
openDocument(entry.document, isPreview ? 'preview' : 'sidepanel');
|
openDocument(entry.document, isPreview ? 'preview' : 'inspect');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ import type { Document } from '../../types/documents';
|
|||||||
import type { Identifier } from '../../types/identifiers';
|
import type { Identifier } from '../../types/identifiers';
|
||||||
import { createSafeContext } from '../../utils/createSafeContext';
|
import { createSafeContext } from '../../utils/createSafeContext';
|
||||||
|
|
||||||
type DocumentOpenTarget = 'preview' | 'sidepanel' | 'viewer';
|
type DocumentOpenIntent = 'preview' | 'inspect' | 'navigate';
|
||||||
|
|
||||||
interface DocumentOpenContextValue {
|
interface DocumentOpenContextValue {
|
||||||
openDocument: (doc: Document, target?: DocumentOpenTarget) => void;
|
openDocument: (doc: Document, intent?: DocumentOpenIntent) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const [DocumentOpenContext, useDocumentOpen] = createSafeContext<DocumentOpenContextValue>('DocumentOpen');
|
const [DocumentOpenContext, useDocumentOpen] = createSafeContext<DocumentOpenContextValue>('DocumentOpen');
|
||||||
@@ -24,21 +24,28 @@ export const DocumentOpenProvider: React.FC<DocumentOpenProviderProps> = ({
|
|||||||
onOpenPreview,
|
onOpenPreview,
|
||||||
onOpenDetailPanel,
|
onOpenDetailPanel,
|
||||||
}) => {
|
}) => {
|
||||||
const openDocument = useCallback((doc: Document, target: DocumentOpenTarget = 'preview') => {
|
const openDocument = useCallback((doc: Document, intent: DocumentOpenIntent = 'preview') => {
|
||||||
if (!doc) return;
|
if (!doc) return;
|
||||||
|
|
||||||
switch (target) {
|
switch (intent) {
|
||||||
case 'preview':
|
case 'preview':
|
||||||
if (onOpenPreview) {
|
if (onOpenPreview) {
|
||||||
onOpenPreview(doc);
|
onOpenPreview(doc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'sidepanel':
|
case 'inspect':
|
||||||
if (onOpenDetailPanel) {
|
// Responsive behavior: on mobile, "inspect" just navigates to the document
|
||||||
onOpenDetailPanel(doc.id);
|
if (window.matchMedia('(max-width: 768px)').matches) {
|
||||||
|
if (onOpenViewer) {
|
||||||
|
onOpenViewer(doc.id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (onOpenDetailPanel) {
|
||||||
|
onOpenDetailPanel(doc.id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'viewer':
|
case 'navigate':
|
||||||
if (onOpenViewer) {
|
if (onOpenViewer) {
|
||||||
onOpenViewer(doc.id);
|
onOpenViewer(doc.id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user