diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridActions.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridActions.tsx index 3e8e49f9..90a87f99 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridActions.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridActions.tsx @@ -20,6 +20,8 @@ import { useTrans, } from '@/docs/doc-management'; import { DocShareModal } from '@/docs/doc-share'; +import { MAIN_LAYOUT_ID } from '@/layouts/conf'; +import { useFocusStore } from '@/stores'; import { DocMoveModal } from './DocMoveModal'; @@ -29,13 +31,21 @@ interface DocsGridActionsProps { export const DocsGridActions = ({ doc }: DocsGridActionsProps) => { const { t } = useTranslation(); + const restoreFocus = useFocusStore((state) => state.restoreFocus); const deleteModal = useModal(); const shareModal = useModal(); const importModal = useModal(); const { untitledDocument } = useTrans(); - const { mutate: duplicateDoc } = useDuplicateDoc(); + const { mutate: duplicateDoc } = useDuplicateDoc({ + onSuccess: () => { + const mainContent = document.getElementById(MAIN_LAYOUT_ID); + if (mainContent) { + requestAnimationFrame(() => mainContent.focus()); + } + }, + }); const removeFavoriteDoc = useDeleteFavoriteDoc({ listInvalidQueries: [KEY_LIST_DOC, KEY_LIST_FAVORITE_DOC], @@ -135,15 +145,30 @@ export const DocsGridActions = ({ doc }: DocsGridActionsProps) => { {deleteModal.isOpen && ( - + { + deleteModal.onClose(); + restoreFocus(); + }} + doc={doc} + /> )} {shareModal.isOpen && ( - + { + shareModal.close(); + restoreFocus(); + }} + /> )} {importModal.isOpen && ( { + importModal.close(); + restoreFocus(); + }} isOpen={importModal.isOpen} /> )} diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItemSharedButton.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItemSharedButton.tsx index 9270d205..72fb5b8c 100644 --- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItemSharedButton.tsx +++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItemSharedButton.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next'; import { Box, Icon, Text } from '@/components'; import { Doc } from '@/docs/doc-management'; import { DocShareModal } from '@/docs/doc-share'; +import { useFocusStore } from '@/stores'; type Props = { doc: Doc; @@ -14,6 +15,7 @@ export const DocsGridItemSharedButton = ({ doc, disabled }: Props) => { const sharedCount = doc.nb_accesses_direct; const isShared = sharedCount - 1 > 0; const shareModal = useModal(); + const { addLastFocus, restoreFocus } = useFocusStore(); if (!isShared) { return  ; @@ -40,6 +42,7 @@ export const DocsGridItemSharedButton = ({ doc, disabled }: Props) => { onClick={(event) => { event.preventDefault(); event.stopPropagation(); + addLastFocus(event.currentTarget as HTMLElement); shareModal.open(); }} color="brand" @@ -60,7 +63,13 @@ export const DocsGridItemSharedButton = ({ doc, disabled }: Props) => { {shareModal.isOpen && ( - + { + shareModal.close(); + restoreFocus(); + }} + /> )} );