diff --git a/frontend/src/features/deposit/Deposit.module.css b/frontend/src/features/deposit/Deposit.module.css index f33126e..af16d6b 100644 --- a/frontend/src/features/deposit/Deposit.module.css +++ b/frontend/src/features/deposit/Deposit.module.css @@ -1,17 +1,113 @@ +.deposit { + display: grid; + align-items: start; + gap: 1rem 2rem; + grid-template: + "heading amount" auto + "search amount" auto + "users amount" 1fr + / minmax(0, 1fr) minmax(260px, 320px); +} + +.heading { + grid-area: heading; + margin-bottom: 0; +} + +.search { + display: flex; + align-items: center; + gap: 0.75rem; + grid-area: search; +} + +.search input { + width: min(100%, 420px); +} + .userList { display: grid; - height: 800px; - padding-top: 2rem; - column-gap: 16px; - grid-template-columns: repeat(5, 220px); + max-height: min(62vh, 680px); + padding: 0.5rem 0.5rem 0.5rem 0; + gap: 1rem; + grid-area: users; + grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); overflow-y: auto; - row-gap: 24px; } .amountSection { - margin-top: 32px; + position: sticky; + top: 1rem; + padding: 1.25rem; + border: 1px solid rgba(221, 81, 127, 0.45); + border-radius: 8px; + background: rgba(35, 15, 41, 0.84); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24); + grid-area: amount; +} + +.amountSection h2 { + margin-top: 0; +} + +.selectedUser { + min-height: 1.5em; + margin: 0 0 1.25rem; + color: rgba(255, 255, 255, 0.78); + text-shadow: none; +} + +.selectedUser strong { + color: var(--text); +} + +.amountLabel { + display: block; + margin-bottom: 0.4rem; + color: var(--sun); +} + +.amountInput { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.amountInput input { + width: 100%; + min-width: 0; + font-size: 1.8rem; +} + +.amountInput span { + color: rgba(255, 255, 255, 0.8); + text-shadow: none; } .checkout { - margin-top: 32px; + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + margin-top: 1.5rem; +} + +@media (max-width: 760px) { + .deposit { + gap: 0.75rem; + grid-template: + "heading" auto + "search" auto + "amount" auto + "users" auto + / minmax(0, 1fr); + } + + .amountSection { + position: static; + } + + .userList { + max-height: 45vh; + grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); + } } diff --git a/frontend/src/features/deposit/Deposit.tsx b/frontend/src/features/deposit/Deposit.tsx index 1503383..eabd443 100644 --- a/frontend/src/features/deposit/Deposit.tsx +++ b/frontend/src/features/deposit/Deposit.tsx @@ -14,6 +14,7 @@ const Deposit = (): JSX.Element => { userQuery, setUserQuery, filteredUsers, + selectedUserDetails, reset, onSubmit, } = useDeposit(); @@ -23,45 +24,69 @@ const Deposit = (): JSX.Element => { } return ( -
-
-

Hvem skal sette inn penger?

+
+

Hvem skal sette inn penger?

+
) => setUserQuery(event.currentTarget.value)} value={userQuery} placeholder="Filtrér på navn" + aria-label="Filtrér personer på navn" /> {userQuery !== "" && ( )} -
- {filteredUsers.map((user) => ( - { - setSelectedUser(user.id); - }} - user={user} - /> - ))} +
+
+

Hvor mye?

+ {selectedUserDetails ? ( +

+ Innskudd til{" "} + + {selectedUserDetails.firstName} {selectedUserDetails.lastName} + +

+ ) : ( +

Velg en person fra listen

+ )} + +
+ setAmount(event.target.value)} + placeholder="0" + /> + kr +
+
+ +
-
-

Hvor mye?

- setAmount(event.target.value)} placeholder="0" /> -
-
- {" "} - -
+
+ {filteredUsers.map((user) => ( + { + setSelectedUser(user.id); + }} + user={user} + /> + ))} +
); }; diff --git a/frontend/src/features/deposit/useDeposit.ts b/frontend/src/features/deposit/useDeposit.ts index 1499552..a647a9e 100644 --- a/frontend/src/features/deposit/useDeposit.ts +++ b/frontend/src/features/deposit/useDeposit.ts @@ -13,6 +13,7 @@ export const useDeposit = () => { const filteredUsers = (data?.allUsers || []).filter((user) => `${user.firstName.toLowerCase()} ${user.lastName.toLowerCase()}`.includes(userQuery.toLowerCase()), ); + const selectedUserDetails = data?.allUsers.find((user) => user.id === selectedUser); const { showToast } = useToast(); const onSubmit = async () => { @@ -61,6 +62,7 @@ export const useDeposit = () => { userQuery, setUserQuery, filteredUsers, + selectedUserDetails, reset, onSubmit, };