diff --git a/src/AdminUI.css b/src/AdminUI.css
index 0c75396..4ecec97 100644
--- a/src/AdminUI.css
+++ b/src/AdminUI.css
@@ -250,3 +250,6 @@ dialog > div label {
text-align: center;
}
}
+#dialog-edit-user input.invalid {
+ color: red;
+}
diff --git a/src/AdminUI.tsx b/src/AdminUI.tsx
index 07cc139..e6ad0c5 100644
--- a/src/AdminUI.tsx
+++ b/src/AdminUI.tsx
@@ -1,7 +1,7 @@
import React, { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
import './AdminUI.css';
import { createGuestRequest, createPartyRequest, deleteGuestRequest, deletePartyRequest, listGuestsRequest, listPartyRequest, modifyGuestRequest, parseToken, setAllowedExtras } from './partyAdminApi';
-import { GrammaticalGender, Person, RequestCreateGuest, ResponseCreateParty, ResponseListGuests, ResponseListParties } from './partyAdminApiTypes';
+import { GrammaticalGender, Person, RequestCreateGuest, ResponseCreateParty, ResponseListGuests, ResponseListParties, AllowedExtraLengths } from './partyAdminApiTypes';
export const AdminUI: React.FC = () => {
@@ -92,7 +92,7 @@ export const AdminUI: React.FC = () => {
if (adminToken === "") return;
loadPartyList();
}, [adminToken, loadPartyList]);
-
+
return <>
{editUserData || editingParty ?
@@ -120,7 +120,7 @@ export const AdminUI: React.FC = () => {
{editUserData ?
<>
-
{"_id" in editUserData ? `Editing ${editUserData.name}` : "New Invitation"}
+
{"_id" in editUserData ? `Editing ${editUserData.name}` : "New Invitation"}
{ setEditUserData({ ...editUserData, token: e.target.value }) }} />
@@ -145,6 +145,9 @@ export const AdminUI: React.FC = () => {
+ {selectedParty !== undefined && partyList[selectedParty] ?
+
+ :null}
>
: "Hab keine user data bekommen."}
@@ -183,6 +186,23 @@ export const AdminUI: React.FC = () => {
>
};
+export const ExtraDataTable : React.FC<{
+ value: RequestCreateGuest | Person,
+ setEditUserData: React.Dispatch
>,
+ allowed_extra: AllowedExtraLengths }
+ > = ({value: editUserData, setEditUserData, allowed_extra}) => {
+ return <>
+ Extras
+
+ {Object.entries(allowed_extra).map(([extra, maxLen], index) =>
+ <>
+
+ maxLen ? "invalid" : "")} key={`extra-${extra}-input` } type="text" id={`edit-extra-${extra}`} value={editUserData.extra[extra]} onChange={(e) => { setEditUserData({ ...editUserData, extra: {...editUserData.extra, [extra]: e.target.value}}) }} />
+ >
+ )}
+ >;
+}
+
export const PartyUI: React.FC<{ party: ResponseCreateParty, adminToken: string, editUser: (user: RequestCreateGuest) => void }> = ({ party, adminToken, editUser }) => {
const [guests, setGuests] = useState([]);
@@ -233,8 +253,8 @@ export const PartyUI: React.FC<{ party: ResponseCreateParty, adminToken: string,
{confirmations[2]}
{ hasExtras ?
- Extras{Object.keys(party.allowed_extra).map((k,i) =>
{k}
)}
- :null
+ Extras{Object.keys(party.allowed_extra).map((k,i) =>
{k}
)}
+ :null
}
{guests.map((guest, index) =>
{ e.preventDefault(); exportPartyLink(guest); }} onClick={() => editUser(guest)}>{guest.token}
@@ -242,8 +262,8 @@ export const PartyUI: React.FC<{ party: ResponseCreateParty, adminToken: string,
{ e.preventDefault(); exportPartyLink(guest); }} onClick={() => editUser(guest)}>{guest.grammatical_gender}
{ e.preventDefault(); exportPartyLink(guest); }} onClick={() => editUser(guest)}>{guest.coming ?? "?"}
{hasExtras ?
- { e.preventDefault(); exportPartyLink(guest); }} onClick={() => editUser(guest)}/>
- : null}
+ { e.preventDefault(); exportPartyLink(guest); }} onClick={() => editUser(guest)}/>
+ : null}
)}
@@ -261,10 +281,10 @@ export const PartyUI: React.FC<{ party: ResponseCreateParty, adminToken: string,
};
export const ExtraTable : React.FC<{guest: Person, party: ResponseCreateParty} & React.HTMLProps> = ({guest, party}) => {
- const numExtraColumns = Object.keys(party.allowed_extra).length;
- return
- {Object.keys(party.allowed_extra).map((k, i) =>
- {guest.extra[k]?? ""}
-
)}
-
+ const numExtraColumns = Object.keys(party.allowed_extra).length;
+ return
+ {Object.keys(party.allowed_extra).map((k, i) =>
+ {guest.extra[k]?? ""}
+
)}
+
}