Skip to content
This repository was archived by the owner on Jan 3, 2025. It is now read-only.

Commit 2345d54

Browse files
authored
Handle no-competitor-limit UI cases (#377)
* Handle registration requirements case * Minor formatting and punctuation * Add blank line separation * Omit limit in approved table when undefined * Add spots remaining text to approved and waitlist * Add suggestion as comment
1 parent 37e6975 commit 2345d54

File tree

2 files changed

+53
-9
lines changed

2 files changed

+53
-9
lines changed

Frontend/src/pages/register/components/RegistrationRequirements.jsx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import styles from './requirements.module.scss'
1111
export default function RegistrationRequirements() {
1212
const { competitionInfo } = useContext(CompetitionContext)
1313
const [activeIndex, setActiveIndex] = useState(-1)
14-
const handleClick = (e, titleProps) => {
14+
15+
const handleClick = (_, titleProps) => {
1516
const { index } = titleProps
1617
setActiveIndex(activeIndex === index ? -1 : index)
1718
}
19+
1820
return (
1921
<div className={styles.requirements}>
2022
<Header as="h1" attached="top">
@@ -23,6 +25,7 @@ export default function RegistrationRequirements() {
2325
[INSERT ORGANIZER MESSAGE REGARDING REQUIREMENTS]
2426
</Header.Subheader>
2527
</Header>
28+
2629
<Segment padded inverted color="orange" attached size="big">
2730
<Accordion inverted>
2831
<Accordion.Title
@@ -39,20 +42,33 @@ export default function RegistrationRequirements() {
3942
<a href="/users/sign_up">here</a> to create one.
4043
</p>
4144
</Accordion.Content>
45+
4246
<Accordion.Title
4347
active={activeIndex === 1}
4448
index={1}
4549
onClick={handleClick}
4650
>
4751
<UiIcon name="dropdown" />
48-
{competitionInfo.competitor_limit} person Competitor Limit
52+
{competitionInfo.competitor_limit
53+
? `${competitionInfo.competitor_limit} Person Competitor Limit`
54+
: 'No Competitor Limit'}
4955
</Accordion.Title>
5056
<Accordion.Content active={activeIndex === 1}>
51-
<p>
52-
Once the competitor Limit has been reached you will be put onto
53-
the waiting list.
54-
</p>
57+
{competitionInfo.competitor_limit ? (
58+
<p>
59+
Once the competitor limit has been reached you will be put onto
60+
the waiting list.
61+
</p>
62+
) : (
63+
<p>
64+
There is no competitor limit, but if this competition has
65+
multiple locations then each location may have a separate
66+
competitor limit. Please review the other tabs for more
67+
information.
68+
</p>
69+
)}
5570
</Accordion.Content>
71+
5672
<Accordion.Title
5773
active={activeIndex === 2}
5874
index={2}
@@ -76,6 +92,7 @@ export default function RegistrationRequirements() {
7692
before this date.`}
7793
</p>
7894
</Accordion.Content>
95+
7996
<Accordion.Title
8097
active={activeIndex === 3}
8198
index={3}
@@ -91,6 +108,7 @@ export default function RegistrationRequirements() {
91108
<Accordion.Content active={activeIndex === 3}>
92109
<p>You can edit your registration until this date.</p>
93110
</Accordion.Content>
111+
94112
<Accordion.Title
95113
active={activeIndex === 4}
96114
index={4}
@@ -117,6 +135,7 @@ export default function RegistrationRequirements() {
117135
: 'This competition is free'}
118136
</p>
119137
</Accordion.Content>
138+
120139
<Accordion.Title
121140
active={activeIndex === 5}
122141
index={5}
@@ -141,6 +160,7 @@ export default function RegistrationRequirements() {
141160
: 'Guests attend for free.'}
142161
</p>
143162
</Accordion.Content>
163+
144164
{competitionInfo.extra_registration_requirements && (
145165
<>
146166
<Accordion.Title

Frontend/src/pages/registration_administration/components/RegistrationAdministrationList.jsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ const truncateComment = (comment) =>
141141

142142
export default function RegistrationAdministrationList() {
143143
const { competitionInfo } = useContext(CompetitionContext)
144+
144145
const {
145146
isLoading,
146147
data: registrations,
@@ -157,6 +158,7 @@ export default function RegistrationAdministrationList() {
157158
setMessage(err.message, 'error')
158159
},
159160
})
161+
160162
const [selected, dispatch] = useReducer(reducer, {
161163
pending: [],
162164
accepted: [],
@@ -168,6 +170,13 @@ export default function RegistrationAdministrationList() {
168170
() => partitionRegistrations(registrations ?? []),
169171
[registrations]
170172
)
173+
174+
// some sticky/floating bar somewhere with totals/info would be better
175+
// than putting this in the table headers which scroll out of sight
176+
const spotsRemaining = `; ${
177+
competitionInfo?.competitor_limit - accepted?.length
178+
} spot(s) remaining`
179+
171180
return isLoading ? (
172181
<LoadingMessage />
173182
) : (
@@ -181,9 +190,16 @@ export default function RegistrationAdministrationList() {
181190
competition_id={competitionInfo.id}
182191
selected={selected.pending}
183192
/>
193+
184194
<Header>
185-
Approved registrations ({accepted.length}/
186-
{competitionInfo.competitor_limit})
195+
Approved registrations ({accepted.length}
196+
{competitionInfo.competitor_limit && (
197+
<>
198+
{`/${competitionInfo.competitor_limit}`}
199+
{spotsRemaining}
200+
</>
201+
)}
202+
)
187203
</Header>
188204
<RegistrationAdministrationTable
189205
registrations={accepted}
@@ -192,14 +208,19 @@ export default function RegistrationAdministrationList() {
192208
competition_id={competitionInfo.id}
193209
selected={selected.accepted}
194210
/>
195-
<Header> Waitlisted registrations ({waiting.length}) </Header>
211+
212+
<Header>
213+
Waitlisted registrations ({waiting.length}
214+
{competitionInfo.competitor_limit && spotsRemaining})
215+
</Header>
196216
<RegistrationAdministrationTable
197217
registrations={waiting}
198218
add={(attendee) => dispatch({ type: 'add-waiting', attendee })}
199219
remove={(attendee) => dispatch({ type: 'remove-waiting', attendee })}
200220
competition_id={competitionInfo.id}
201221
selected={selected.waiting}
202222
/>
223+
203224
<Header> Cancelled registrations ({cancelled.length}) </Header>
204225
<RegistrationAdministrationTable
205226
registrations={cancelled}
@@ -211,6 +232,7 @@ export default function RegistrationAdministrationList() {
211232
selected={selected.cancelled}
212233
/>
213234
</div>
235+
214236
<RegistrationActions
215237
selected={selected}
216238
refresh={async () => {
@@ -231,6 +253,7 @@ function RegistrationAdministrationTable({
231253
selected,
232254
}) {
233255
const { competitionInfo } = useContext(CompetitionContext)
256+
234257
return (
235258
<Table striped textAlign="left">
236259
<Table.Header>
@@ -264,6 +287,7 @@ function RegistrationAdministrationTable({
264287
<Table.HeaderCell>Email</Table.HeaderCell>
265288
</Table.Row>
266289
</Table.Header>
290+
267291
<Table.Body>
268292
{registrations.length > 0 ? (
269293
registrations.map((registration) => {

0 commit comments

Comments
 (0)