diff --git a/src/context/intermediate/Intermediate.tsx b/src/context/intermediate/Intermediate.tsx
index 9a1ac4d1..b58c37de 100644
--- a/src/context/intermediate/Intermediate.tsx
+++ b/src/context/intermediate/Intermediate.tsx
@@ -12,6 +12,7 @@ import { determineLink } from "../../lib/links";
import { useApplicationState } from "../../mobx/State";
+import { modalController } from "../modals";
import Modals from "./Modals";
export type Screen =
@@ -171,13 +172,7 @@ export default function Intermediate(props: Props) {
return true;
},
openScreen: (screen: Screen) => openScreen(screen),
- writeClipboard: (text: string) => {
- if (navigator.clipboard) {
- navigator.clipboard.writeText(text);
- } else {
- actions.openScreen({ id: "clipboard", text });
- }
- },
+ writeClipboard: (a: string) => modalController.writeText(a),
};
// eslint-disable-next-line
}, []);
diff --git a/src/context/intermediate/Modals.tsx b/src/context/intermediate/Modals.tsx
index 8ff715c3..a2a91507 100644
--- a/src/context/intermediate/Modals.tsx
+++ b/src/context/intermediate/Modals.tsx
@@ -1,6 +1,5 @@
//import { isModalClosing } from "../../components/ui/Modal";
import { Screen } from "./Intermediate";
-import { ClipboardModal } from "./modals/Clipboard";
import { ExternalLinkModal } from "./modals/ExternalLinkPrompt";
import { InputModal } from "./modals/Input";
import { OnboardingModal } from "./modals/Onboarding";
@@ -22,8 +21,6 @@ export default function Modals({ screen, openScreen }: Props) {
return ;
case "_input":
return ;
- case "clipboard":
- return ;
case "onboarding":
return ;
case "external_link_prompt":
diff --git a/src/context/intermediate/modals/Clipboard.tsx b/src/context/modals/components/Clipboard.tsx
similarity index 65%
rename from src/context/intermediate/modals/Clipboard.tsx
rename to src/context/modals/components/Clipboard.tsx
index 710e2a84..0361eb8e 100644
--- a/src/context/intermediate/modals/Clipboard.tsx
+++ b/src/context/modals/components/Clipboard.tsx
@@ -2,19 +2,18 @@ import { Text } from "preact-i18n";
import { Modal } from "@revoltchat/ui";
-interface Props {
- onClose: () => void;
- text: string;
-}
+import { noopTrue } from "../../../lib/js";
-export function ClipboardModal({ onClose, text }: Props) {
+import { ModalProps } from "../types";
+
+export default function Clipboard({ text, ...props }: ModalProps<"clipboard">) {
return (
}
actions={[
{
- onClick: onClose,
+ onClick: noopTrue,
confirmation: true,
children: ,
},
@@ -25,7 +24,9 @@ export function ClipboardModal({ onClose, text }: Props) {
)}
{" "}
- {text}
+
+ {text}
+
);
}
diff --git a/src/context/modals/components/Error.tsx b/src/context/modals/components/Error.tsx
index 92e3f7c8..892f5794 100644
--- a/src/context/modals/components/Error.tsx
+++ b/src/context/modals/components/Error.tsx
@@ -6,7 +6,7 @@ import { noopTrue } from "../../../lib/js";
import { ModalProps } from "../types";
-export function Error({ error, ...props }: ModalProps<"error">) {
+export default function Error({ error, ...props }: ModalProps<"error">) {
return (
) {
+export default function ShowToken({
+ name,
+ token,
+ ...props
+}: ModalProps<"show_token">) {
return (
) {
children: ,
},
]}>
- {token}
+
+ {token}
+
);
}
diff --git a/src/context/modals/components/SignOutSessions.tsx b/src/context/modals/components/SignOutSessions.tsx
index 46afff05..35b07882 100644
--- a/src/context/modals/components/SignOutSessions.tsx
+++ b/src/context/modals/components/SignOutSessions.tsx
@@ -10,7 +10,9 @@ import { ModalProps } from "../types";
/**
* Confirm whether a user wants to sign out of all other sessions
*/
-export function SignOutSessions(props: ModalProps<"sign_out_sessions">) {
+export default function SignOutSessions(
+ props: ModalProps<"sign_out_sessions">,
+) {
const onClick = useCallback(() => {
props.onDeleting();
props.client.api.delete("/auth/session/all").then(props.onDelete);
diff --git a/src/context/modals/components/SignedOut.tsx b/src/context/modals/components/SignedOut.tsx
index 21c702e5..0f3fa66d 100644
--- a/src/context/modals/components/SignedOut.tsx
+++ b/src/context/modals/components/SignedOut.tsx
@@ -9,7 +9,7 @@ import { ModalProps } from "../types";
/**
* Indicate that the user has been signed out of their account
*/
-export function SignedOut(props: ModalProps<"signed_out">) {
+export default function SignedOut(props: ModalProps<"signed_out">) {
return (
>;
@@ -140,10 +141,26 @@ class ModalControllerExtended extends ModalController {
),
);
}
+
+ /**
+ * Write text to the clipboard
+ * @param text Text to write
+ */
+ writeText(text: string) {
+ if (navigator.clipboard) {
+ navigator.clipboard.writeText(text);
+ } else {
+ this.push({
+ type: "clipboard",
+ text,
+ });
+ }
+ }
}
export const modalController = new ModalControllerExtended({
changelog: Changelog,
+ clipboard: Clipboard,
error: Error,
mfa_flow: MFAFlow,
mfa_recovery: MFARecovery,
diff --git a/src/context/modals/types.ts b/src/context/modals/types.ts
index 6349c132..1b5a36e7 100644
--- a/src/context/modals/types.ts
+++ b/src/context/modals/types.ts
@@ -47,6 +47,10 @@ export type Modal = {
type: "error";
error: string;
}
+ | {
+ type: "clipboard";
+ text: string;
+ }
| {
type: "signed_out";
}