diff --git a/Frontend/src/pages/registration_administration/components/RegistrationActions.jsx b/Frontend/src/pages/registration_administration/components/RegistrationActions.jsx index a86d3dfd..25aeed64 100644 --- a/Frontend/src/pages/registration_administration/components/RegistrationActions.jsx +++ b/Frontend/src/pages/registration_administration/components/RegistrationActions.jsx @@ -47,6 +47,11 @@ export default function RegistrationActions({ const anyCancellable = cancelled.length < selectedCount const anyWaitlistable = waiting.length < selectedCount + const selectedEmails = [...pending, ...accepted, ...cancelled, ...waiting] + // TODO: get real email from backend + .map((user) => user + '@worldcubeassociation.org') + .join(',') + const { mutate: updateRegistrationMutation } = useMutation({ mutationFn: updateRegistration, onError: (data) => { @@ -77,6 +82,11 @@ export default function RegistrationActions({ }) } + const copyEmails = (emails) => { + navigator.clipboard.writeText(emails) + setMessage('Copied to clipboard. Remember to use bcc!', 'positive') + } + return ( anySelected && ( @@ -93,22 +103,19 @@ export default function RegistrationActions({ + + {isOrganizerOrDelegate && ( <> {anyApprovable && ( diff --git a/Frontend/src/pages/registration_administration/components/RegistrationAdministrationList.jsx b/Frontend/src/pages/registration_administration/components/RegistrationAdministrationList.jsx index 103bf814..90c55bfe 100644 --- a/Frontend/src/pages/registration_administration/components/RegistrationAdministrationList.jsx +++ b/Frontend/src/pages/registration_administration/components/RegistrationAdministrationList.jsx @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query' import { FlagIcon, UiIcon } from '@thewca/wca-components' import React, { useContext, useMemo, useReducer } from 'react' import { Link } from 'react-router-dom' -import { Checkbox, Header, Popup, Table } from 'semantic-ui-react' +import { Checkbox, Header, Icon, Popup, Table } from 'semantic-ui-react' import { CompetitionContext } from '../../../api/helper/context/competition_context' import { getAllRegistrations } from '../../../api/registration/get/get_registrations' import { BASE_ROUTE } from '../../../routes' @@ -194,7 +194,6 @@ function RegistrationAdministrationTable({ registrations, select, unselect, - competition_id, selected, }) { const { competitionInfo } = useContext(CompetitionContext) @@ -239,100 +238,20 @@ function RegistrationAdministrationTable({ {registrations.length > 0 ? ( registrations.map((registration) => { + const id = registration.user.id return ( - - - { - if (data.checked) { - select([registration.user.id]) - } else { - unselect([registration.user.id]) - } - }} - checked={selected.includes(registration.user.id)} - /> - - - - Edit - - - - {registration.user.wca_id && ( - - {registration.user.wca_id} - - )} - - {registration.user.name} - - - {registration.user.country.name} - - - - {new Date( - registration.competing.registered_on - ).toLocaleDateString()} - - } - /> - - - {competitionInfo['using_stripe_payments?'] && ( - <> - - {registration.payment.payment_status ?? 'not paid'} - - - {registration.payment.updated_at && ( - - {new Date( - registration.payment.updated_at - ).toLocaleDateString()} - - } - /> - )} - - - )} - - {registration.competing.event_ids.length} - - {registration.guests} - - {truncateComment(registration.competing.comment)} - - - {truncateComment(registration.competing.admin_comment)} - - - - - - - + { + if (data.checked) { + select([id]) + } else { + unselect([id]) + } + }} + /> ) }) ) : ( @@ -344,3 +263,76 @@ function RegistrationAdministrationTable({ ) } + +function TableRow({ registration, isSelected, onCheckboxChange }) { + const { id, wca_id, name, country } = registration.user + const { registered_on, event_ids, comment, admin_comment } = + registration.competing + const { payment_status, updated_at } = registration.payment + // TODO: get actual email + const email = `${registration.user_id}@worldcubeassociation.org` + + const { competitionInfo, competition_id } = useContext(CompetitionContext) + + const copyEmail = () => { + navigator.clipboard.writeText(email) + setMessage('Copied email address to clipboard.', 'positive') + } + + return ( + + + + + + Edit + + + {wca_id && ( + + {wca_id} + + )} + + {name} + + + {country.name} + + + {new Date(registered_on).toLocaleDateString()}} + /> + + + {competitionInfo['using_stripe_payments?'] && ( + <> + {payment_status ?? 'not paid'} + + {updated_at && ( + {new Date(updated_at).toLocaleDateString()} + } + /> + )} + + + )} + {event_ids.length} + {registration.guests} + {truncateComment(comment)} + + {truncateComment(admin_comment)} + + + + + {' '} + + + + ) +}