Skip to content

Commit 93869ad

Browse files
committed
i18n confirmation dialog
1 parent 0e83039 commit 93869ad

File tree

8 files changed

+110
-26
lines changed

8 files changed

+110
-26
lines changed

frontend/apps/ui/public/localization/de/_default.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@
5353
"deleteDocument": "Dokument löschen",
5454
"dangerZone": "Gefahrenzone"
5555
},
56+
"deleteEntireDocumentConfirmDialog": {
57+
"title": "Dokument löschen",
58+
"mainMessage": "Möchtest du dieses Dokument wirklich löschen?",
59+
"confirmButtonText": "Ja, lösche diese Dokument"
60+
},
5661
"load-more": "Mehr anzeigen",
5762
"app.version": "Version",
5863
"me": "Ich",

frontend/apps/ui/public/localization/en/_default.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@
5353
"deleteDocument": "Delete document",
5454
"dangerZone": "Danger Zone"
5555
},
56+
"deleteEntireDocumentConfirmDialog": {
57+
"title": "Document Delete",
58+
"mainMessage": "Do you really want to delete this document?",
59+
"confirmButtonText": "Yes, delete this document"
60+
},
5661
"load-more": "Load more",
5762
"app.version": "Version",
5863
"me": "Me",
Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {useAppSelector} from "@/app/hooks"
2-
import Error from "@/components/Error"
32
import PanelContext from "@/contexts/PanelContext"
43
import {useDeleteNodesMutation} from "@/features/nodes/apiSlice"
54
import {selectCurrentNodeID} from "@/features/ui/uiSlice"
6-
import {Button, Group, Loader, Modal} from "@mantine/core"
7-
import {useContext, useState} from "react"
5+
import {useContext, useEffect, useState} from "react"
6+
import type {I18NDeleteEntireDocumentConfirmDialog} from "viewer"
7+
import {DeleteEntireDocumentConfirmDialog} from "viewer"
88

99
import type {PanelMode} from "@/types"
1010
import {useTranslation} from "react-i18next"
@@ -16,16 +16,12 @@ interface Args {
1616
text?: string
1717
}
1818

19-
const TEXT =
20-
"You are about to delete ALL pages. This is same as deleting entire document. Delete entire document?"
21-
22-
export default function DeleteWithAllPagesSelected({
19+
export default function DeleteEntireDocumentConfirmDialogContainer({
2320
opened,
24-
onCancel,
2521
onSubmit,
26-
text = TEXT
22+
onCancel
2723
}: Args) {
28-
const {t} = useTranslation()
24+
const txt = useI18nText()
2925
const [error, setError] = useState("")
3026
const mode: PanelMode = useContext(PanelContext)
3127
const currentNodeID = useAppSelector(s => selectCurrentNodeID(s, mode))
@@ -44,23 +40,39 @@ export default function DeleteWithAllPagesSelected({
4440

4541
const reset = () => {
4642
setError("")
43+
onCancel()
4744
}
4845

4946
return (
50-
<Modal title={t("documents.delete.one")} opened={opened} onClose={onCancel}>
51-
{text}
52-
{error && <Error message={error} />}
53-
<Group justify="space-between" mt="md">
54-
<Button variant="default" onClick={onCancel}>
55-
{t("common.no")}
56-
</Button>
57-
<Group>
58-
{isLoading && <Loader size="sm" />}
59-
<Button disabled={isLoading} onClick={onDeleteDocument} color={"red"}>
60-
{t("common.yes")}
61-
</Button>
62-
</Group>
63-
</Group>
64-
</Modal>
47+
<DeleteEntireDocumentConfirmDialog
48+
txt={txt}
49+
opened={opened}
50+
error={error}
51+
inProgress={isLoading}
52+
onSubmit={onDeleteDocument}
53+
onCancel={reset}
54+
/>
6555
)
6656
}
57+
58+
function useI18nText(): I18NDeleteEntireDocumentConfirmDialog | undefined {
59+
const {t, i18n} = useTranslation()
60+
const [txt, setTxt] = useState<I18NDeleteEntireDocumentConfirmDialog>()
61+
62+
useEffect(() => {
63+
if (i18n.isInitialized) {
64+
setTxt({
65+
title: t("deleteEntireDocumentConfirmDialog.title"),
66+
mainMessage: t("deleteEntireDocumentConfirmDialog.mainMessage"),
67+
cancel: t("common.cancel"),
68+
confirmButtonText: t(
69+
"deleteEntireDocumentConfirmDialog.confirmButtonText"
70+
)
71+
})
72+
} else {
73+
setTxt(undefined)
74+
}
75+
}, [i18n.isInitialized, t])
76+
77+
return txt
78+
}

frontend/apps/ui/src/features/document/components/Viewer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import ThumbnailsToggle from "@/components/document/ThumbnailsToggle"
1818
import classes from "@/components/document/Viewer.module.css"
1919
import {applyPageChangesThunk} from "@/features/document/actions/applyPageOpChanges"
2020
import ActionButtons from "@/features/document/components/ActionButtons"
21-
import DeleteEntireDocumentConfirm from "@/features/document/components/DeleteEntireDocumentConfirm"
2221
import {useCurrentDocVer} from "@/features/document/hooks"
2322
import {
2423
pagesDeleted,
@@ -40,6 +39,7 @@ import ContextMenu from "./ContextMenu"
4039
import {useSelectedPages} from "@/features/document/hooks"
4140
import useContextMenu from "@/features/document/hooks/useContextMenu"
4241
import {viewerSelectionCleared} from "@/features/ui/uiSlice"
42+
import DeleteEntireDocumentConfirm from "./DeleteEntireDocumentConfirm"
4343
import PagesHaveChangedDialog from "./PageHaveChangedDialog"
4444
import PageList from "./PageList"
4545
import ThumbnailList from "./ThumbnailList"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {Button, Group, Modal, Text} from "@mantine/core"
2+
import {SubmitButton} from "kommon"
3+
import type {I18NDeleteEntireDocumentConfirmDialog} from "./types"
4+
5+
interface Args {
6+
opened: boolean
7+
inProgress: boolean
8+
txt?: I18NDeleteEntireDocumentConfirmDialog
9+
error?: string
10+
onCancel?: () => void
11+
onSubmit?: () => void
12+
}
13+
14+
const EmptyFunc = () => {}
15+
16+
export default function DeleteEntireDocumentConfirmDialog({
17+
opened,
18+
txt,
19+
error,
20+
inProgress,
21+
onCancel,
22+
onSubmit
23+
}: Args) {
24+
return (
25+
<Modal
26+
title={txt?.title || "Delete Document"}
27+
opened={opened}
28+
onClose={onCancel || EmptyFunc}
29+
>
30+
{txt?.mainMessage || "Do you really want to delete this document?"}
31+
{error && <Text c="red">{error}</Text>}
32+
<Group justify="space-between" mt="md">
33+
<Button variant="default" onClick={onCancel}>
34+
{txt?.cancel || "Cancel"}
35+
</Button>
36+
<Group>
37+
<SubmitButton
38+
inProgress={inProgress}
39+
onClick={onSubmit}
40+
color={"red"}
41+
text={txt?.confirmButtonText || "Yes, delete this document"}
42+
/>
43+
</Group>
44+
</Group>
45+
</Modal>
46+
)
47+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import DeleteEntireDocumentConfirmDialog from "./DeleteEntireDocumentConfirmDialog"
2+
import type {I18NDeleteEntireDocumentConfirmDialog} from "./types"
3+
4+
export default DeleteEntireDocumentConfirmDialog
5+
export type {I18NDeleteEntireDocumentConfirmDialog}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export interface I18NDeleteEntireDocumentConfirmDialog {
2+
title: string
3+
mainMessage: string
4+
confirmButtonText: string
5+
cancel: string
6+
}

frontend/packages/viewer/src/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import type {
44
MoveDocumentDirection
55
} from "./components/ContextMenu"
66
import ContextMenu from "./components/ContextMenu"
7+
import type {I18NDeleteEntireDocumentConfirmDialog} from "./components/DeleteEntireDocumentConfirmDialog"
8+
import DeleteEntireDocumentConfirmDialog from "./components/DeleteEntireDocumentConfirmDialog"
79
import type {
810
DownloadDocumentVersion,
911
I18NDownloadButtonText
@@ -25,6 +27,7 @@ import Zoom from "./components/Zoom"
2527

2628
export {
2729
ContextMenu,
30+
DeleteEntireDocumentConfirmDialog,
2831
DownloadButton,
2932
ExtractPagesModal,
3033
Page,
@@ -38,6 +41,7 @@ export {
3841
export type {
3942
DownloadDocumentVersion,
4043
ExtractPagesDirection,
44+
I18NDeleteEntireDocumentConfirmDialog,
4145
I18NDownloadButtonText,
4246
I18NExtractPagesModal,
4347
I18NPagesHaveChangedDialogText,

0 commit comments

Comments
 (0)