mirror of
https://github.com/ajnart/homarr.git
synced 2025-11-15 17:56:21 +01:00
✨ Add copy button to invite modal
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
import { Button, Mark, Stack, Text } from '@mantine/core';
|
import { Button, CopyButton, Mark, Stack, Text } from '@mantine/core';
|
||||||
import { ContextModalProps, modals } from '@mantine/modals';
|
import { ContextModalProps, modals } from '@mantine/modals';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
|
||||||
export const CopyInviteModal = ({
|
export const CopyInviteModal = ({
|
||||||
context,
|
|
||||||
id,
|
id,
|
||||||
innerProps,
|
innerProps,
|
||||||
}: ContextModalProps<{ id: string; token: string; expire: Date }>) => {
|
}: ContextModalProps<{ id: string; token: string; expire: Date }>) => {
|
||||||
|
const inviteUrl = useInviteUrl(innerProps.id, innerProps.token);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack>
|
<Stack>
|
||||||
<Text>
|
<Text>
|
||||||
@@ -29,15 +31,26 @@ export const CopyInviteModal = ({
|
|||||||
</Mark>
|
</Mark>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
|
<CopyButton value={inviteUrl}>
|
||||||
|
{({ copy }) => (
|
||||||
<Button
|
<Button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
copy();
|
||||||
modals.close(id);
|
modals.close(id);
|
||||||
}}
|
}}
|
||||||
variant="default"
|
variant="default"
|
||||||
fullWidth
|
fullWidth
|
||||||
>
|
>
|
||||||
Cancel
|
Copy & Dismiss
|
||||||
</Button>
|
</Button>
|
||||||
|
)}
|
||||||
|
</CopyButton>
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const useInviteUrl = (id: string, token: string) => {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
return `${window.location.href.replace(router.pathname, `/auth/invite/${id}?token=${token}`)}`;
|
||||||
|
};
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import { modals } from '@mantine/modals';
|
|||||||
import { IconPlus, IconTrash } from '@tabler/icons-react';
|
import { IconPlus, IconTrash } from '@tabler/icons-react';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import Head from 'next/head';
|
import Head from 'next/head';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { ManageLayout } from '~/components/layout/Templates/ManageLayout';
|
import { ManageLayout } from '~/components/layout/Templates/ManageLayout';
|
||||||
import { api } from '~/utils/api';
|
import { api } from '~/utils/api';
|
||||||
@@ -22,6 +23,7 @@ const ManageUserInvitesPage = () => {
|
|||||||
const { data } = api.invites.all.useQuery({
|
const { data } = api.invites.all.useQuery({
|
||||||
page: activePage,
|
page: activePage,
|
||||||
});
|
});
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
const { classes } = useStyles();
|
const { classes } = useStyles();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user