Skip to content

Commit 5625cc9

Browse files
authored
Fix import (#299)
1 parent e8674de commit 5625cc9

File tree

4 files changed

+44
-29
lines changed

4 files changed

+44
-29
lines changed

schema.graphql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ input ImportData {
210210
committeeMembers: [ImportDataCommitteeMember!]!
211211
committees: [ImportDataCommittee!]!
212212
conferenceMembers: [ImportDataConferenceMember!]!
213-
conferenceUsers: [ImportDataConferenceUser!]!
213+
conferenceUsers: [ImportDataConferenceUser!]
214214
id: ID!
215215
representations: [ImportDataRepresentation!]!
216216
title: String!

src/api/handlers/import.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const Input = schemaBuilder.inputType('ImportData', {
8080
})
8181
})
8282
],
83-
required: true
83+
required: false
8484
}),
8585
agendaItems: t.field({
8686
type: [
@@ -150,7 +150,7 @@ schemaBuilder.mutationFields((t) => ({
150150

151151
if (data.conferenceMembers.length > 0) {
152152
await tx.insert(schema.conferenceMember).values(
153-
data.conferenceMembers.map((member) => ({
153+
data.conferenceMembers!.map((member) => ({
154154
id: member.id,
155155
conferenceId: data.id,
156156
representationId: member.representationId
@@ -160,17 +160,17 @@ schemaBuilder.mutationFields((t) => ({
160160

161161
if (data.committeeMembers.length > 0) {
162162
await tx.insert(schema.committeeMember).values(
163-
data.committeeMembers.map((member) => ({
163+
data.committeeMembers!.map((member) => ({
164164
id: member.id,
165165
committeeId: member.committeeId,
166166
representationId: member.representationId
167167
}))
168168
);
169169
}
170170

171-
if (data.conferenceUsers.length > 0) {
171+
if ((data.conferenceUsers?.length ?? 0) > 0) {
172172
await tx.insert(schema.conferenceUser).values(
173-
data.conferenceUsers.map((user) => ({
173+
data.conferenceUsers!.map((user) => ({
174174
id: user.id ?? undefined,
175175
conferenceUserType: user.conferenceUserType,
176176
userEmail: user.userEmail,
@@ -182,7 +182,7 @@ schemaBuilder.mutationFields((t) => ({
182182
}
183183

184184
// if the creating user is not found in the dataset, we want to make them an admin anyway!
185-
if (!data.conferenceUsers.find((u) => u.userEmail === ctx.oidc!.user.email)) {
185+
if (!data.conferenceUsers?.find((u) => u.userEmail === ctx.oidc!.user.email)) {
186186
await tx.insert(schema.conferenceUser).values({
187187
conferenceId: data.id,
188188
conferenceUserType: 'ADMIN',

src/lib/utils/import.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ export const importDataSchema = z.object({
1616
.object({
1717
id: z.string(),
1818
representationType: z.enum(['DELEGATION', 'NSA', 'UN']),
19-
alpha3Code: z.string().optional(),
20-
alpha2Code: z.string().optional(),
19+
alpha3Code: z
20+
.string()
21+
.optional()
22+
.refine((data) => data === undefined || data?.length === 3),
23+
alpha2Code: z
24+
.string()
25+
.optional()
26+
.refine((data) => data === undefined || data?.length === 2),
2127
name: z.string().optional(),
2228
faIcon: z.string().optional(),
2329
regionalGroup: z
@@ -50,16 +56,18 @@ export const importDataSchema = z.object({
5056
committeeId: z.string()
5157
})
5258
),
53-
conferenceUsers: z.array(
54-
z.object({
55-
id: z.string(),
56-
conferenceUserType: z.enum(['ADMIN', 'DELEGATE', 'NON_STATE_ACTOR', 'SPECTATOR', 'TEAM']),
57-
userEmail: z.string(),
58-
//TODO enforce that one has to be set?
59-
conferenceMemberId: z.string().optional(),
60-
committeeMemberId: z.string().optional()
61-
})
62-
),
59+
conferenceUsers: z
60+
.array(
61+
z.object({
62+
id: z.string(),
63+
conferenceUserType: z.enum(['ADMIN', 'DELEGATE', 'NON_STATE_ACTOR', 'SPECTATOR', 'TEAM']),
64+
userEmail: z.string(),
65+
//TODO enforce that one has to be set?
66+
conferenceMemberId: z.string().optional(),
67+
committeeMemberId: z.string().optional()
68+
})
69+
)
70+
.optional(),
6371
agendaItems: z.array(
6472
z.object({
6573
id: z.string().optional(),

src/routes/app/(launcher)/import/+page.svelte

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
9393
async function createFreshData(): Promise<void> {
9494
importData = {
95+
$schema: `${page.url.origin}/api/schemas/import`,
9596
title: '',
9697
id: nanoid(),
9798
committees: [],
@@ -100,7 +101,7 @@
100101
id: nanoid(),
101102
representationType: 'DELEGATION',
102103
alpha3Code: nation.cca3.toLowerCase(),
103-
alpha2Code: nation.cca3.toLowerCase(),
104+
alpha2Code: nation.cca2.toLowerCase(),
104105
regionalGroup: transformRegionalGroup(nation.unRegionalGroup)
105106
})),
106107
conferenceMembers: [],
@@ -168,6 +169,9 @@
168169
representationType: type,
169170
id: repId
170171
});
172+
if (importData?.conferenceMembers === undefined) {
173+
importData!.conferenceMembers = [];
174+
}
171175
importData?.conferenceMembers.push({
172176
id: nanoid(),
173177
representationId: repId
@@ -193,6 +197,9 @@
193197
id: repId
194198
});
195199
}
200+
if (importData?.committeeMembers === undefined) {
201+
importData!.committeeMembers = [];
202+
}
196203
importData?.committeeMembers.push({
197204
id: nanoid(),
198205
committeeId: committeeId,
@@ -265,7 +272,7 @@
265272
{@const agendaItems = importData.agendaItems.filter(
266273
(item) => item.committeeId === committee.id
267274
)}
268-
{@const committeeMembers = importData.committeeMembers.filter(
275+
{@const committeeMembers = importData.committeeMembers?.filter(
269276
(member) => member.committeeId === committee.id
270277
)}
271278

@@ -344,7 +351,7 @@
344351
class="btn btn-error btn-sm btn-circle absolute top-1/2 right-1/2 z-40 translate-x-1/2 -translate-y-1/2 opacity-0 transition-all duration-300 group-hover:opacity-100"
345352
aria-label="Remove committee member"
346353
onclick={() => {
347-
importData!.committeeMembers = importData!.committeeMembers.filter(
354+
importData!.committeeMembers = importData!.committeeMembers?.filter(
348355
(i) => i.id !== member.id
349356
);
350357
}}
@@ -374,7 +381,7 @@
374381
importData!.agendaItems = importData!.agendaItems.filter(
375382
(i) => i.committeeId !== committee.id
376383
);
377-
importData!.committeeMembers = importData!.committeeMembers.filter(
384+
importData!.committeeMembers = importData!.committeeMembers?.filter(
378385
(i) => i.committeeId !== committee.id
379386
);
380387
}}
@@ -394,7 +401,7 @@
394401
<fieldset class="fieldset bg-base-100 border-base-300 rounded-box border p-4">
395402
<legend class="fieldset-legend">{m.nonStateActors()}</legend>
396403
{#each importData.representations.filter((x) => x.representationType === 'NSA') as rep}
397-
{@const conferenceMembers = importData.conferenceMembers.filter(
404+
{@const conferenceMembers = importData.conferenceMembers?.filter(
398405
(member) => member.representationId === rep.id
399406
)}
400407
<div class="join">
@@ -413,9 +420,9 @@
413420
bind:value={rep.name}
414421
placeholder={m.nonStateActor()}
415422
/>
416-
<div class="btn join-item {conferenceMembers.length === 0 ? 'btn-error' : ''}">
423+
<div class="btn join-item {conferenceMembers?.length === 0 ? 'btn-error' : ''}">
417424
<i class="fas fa-users"></i>
418-
<span class="ml-2">{conferenceMembers.length}</span>
425+
<span class="ml-2">{conferenceMembers?.length}</span>
419426
</div>
420427
<button
421428
class="btn join-item"
@@ -424,7 +431,7 @@
424431
importData!.representations = importData!.representations.filter(
425432
(i) => i.id !== rep.id
426433
);
427-
importData!.conferenceMembers = importData!.conferenceMembers.filter(
434+
importData!.conferenceMembers = importData!.conferenceMembers?.filter(
428435
(i) => i.representationId !== rep.id
429436
);
430437
}}
@@ -446,7 +453,7 @@
446453
<fieldset class="fieldset bg-base-100 border-base-300 rounded-box border p-4">
447454
<legend class="fieldset-legend">{m.unActors()}</legend>
448455
{#each importData.representations.filter((x) => x.representationType === 'UN') as rep}
449-
{@const conferenceMembers = importData.conferenceMembers.filter(
456+
{@const conferenceMembers = importData.conferenceMembers?.filter(
450457
(member) => member.representationId === rep.id
451458
)}
452459
<div class="join">
@@ -467,7 +474,7 @@
467474
importData!.representations = importData!.representations.filter(
468475
(i) => i.id !== rep.id
469476
);
470-
importData!.conferenceMembers = importData!.conferenceMembers.filter(
477+
importData!.conferenceMembers = importData!.conferenceMembers?.filter(
471478
(i) => i.representationId !== rep.id
472479
);
473480
}}

0 commit comments

Comments
 (0)