import { css, cx } from '@emotion/css'; import { useState } from 'react'; import { useParams } from 'react-router-dom-v5-compat'; import { useAsync } from 'react-use'; import { GrafanaTheme2 } from '@grafana/data'; import { getBackendSrv } from '@grafana/runtime'; import { Button, Field, Input, useStyles2 } from '@grafana/ui'; import { Form } from 'app/core/components/Form/Form'; import { Page } from 'app/core/components/Page/Page'; import { getConfig } from 'app/core/config'; import { w3cStandardEmailValidator } from '../admin/utils'; interface FormModel { email: string; name?: string; username: string; password?: string; orgName?: string; } const navModel = { main: { icon: 'grafana' as const, text: 'Invite', subTitle: 'Register your Grafana account', breadcrumbs: [{ title: 'Login', url: 'login' }], }, node: { text: '', }, }; export const SignupInvitedPage = () => { const { code } = useParams(); const [initFormModel, setInitFormModel] = useState(); const [greeting, setGreeting] = useState(); const [invitedBy, setInvitedBy] = useState(); const styles = useStyles2(getStyles); useAsync(async () => { const invite = await getBackendSrv().get(`/api/user/invite/${code}`); setInitFormModel({ email: invite.email, name: invite.name, username: invite.email, orgName: invite.orgName, }); setGreeting(invite.name || invite.email || invite.username); setInvitedBy(invite.invitedBy); }, [code]); const onSubmit = async (formData: FormModel) => { await getBackendSrv().post('/api/user/invite/complete', { ...formData, inviteCode: code }); window.location.href = getConfig().appSubUrl + '/'; }; if (!initFormModel) { return null; } return (

Hello {greeting || 'there'}.

{invitedBy || 'Someone'} has invited you to join Grafana and the organization{' '} {initFormModel.orgName}
Please complete the following and choose a password to accept your invitation and continue:
{({ register, errors }) => ( <> )}
); }; const getStyles = (theme: GrafanaTheme2) => ({ tagline: css({ paddingBottom: theme.spacing(3), }), }); export default SignupInvitedPage;