diff --git a/__tests__/__utils__/VirtualLab.ts b/__tests__/__utils__/VirtualLab.ts index cb02aa842..5980fc083 100644 --- a/__tests__/__utils__/VirtualLab.ts +++ b/__tests__/__utils__/VirtualLab.ts @@ -1,39 +1,12 @@ -import { VirtualLab, VirtualLabPlanType } from '@/services/virtual-lab/types'; +import { VirtualLab } from '@/types/virtual-lab/lab'; export const createMockVirtualLab = (id: string, extra?: Partial): VirtualLab => ({ id, name: `Mock Lab ${id}`, description: 'Sploosh', - referenceEMail: 'sterling.archer@secretservice.cc', - members: [ - { - name: 'Sterling Archer', - email: 'sterling.archer@secretservice.cc', - role: 'user', - lastActive: Date.now(), - }, - { - name: 'Malory Archer', - email: 'malory.archer@secretservice.cc', - role: 'admin', - lastActive: Date.now(), - }, - { - name: 'Algernop Krieger', - email: 'drkrieger@secretservice.cc', - role: 'admin', - lastActive: Date.now(), - }, - ], - plan: VirtualLabPlanType.entry, - billing: { - organization: 'International Secret Intelligence Service', - firstname: 'Malory', - lastname: 'Archer', - address: '456 Popeyes Suds and Duds', - city: 'New York City', - postalCode: '456', - country: 'Switzerland', - }, + reference_email: 'sterling.archer@secretservice.cc', + budget: 0, + created_at: '', + plan_id: 0, ...extra, }); diff --git a/src/components/VirtualLab/create/constants.ts b/src/components/VirtualLab/create/constants.ts index 12d2a9345..46608a51d 100644 --- a/src/components/VirtualLab/create/constants.ts +++ b/src/components/VirtualLab/create/constants.ts @@ -1,20 +1,14 @@ import { VirtualLabWithOptionalId, VirtualLabPlanDefinition } from './types'; -import { VirtualLabMember, VirtualLabPlanType } from '@/services/virtual-lab/types'; +import { VirtualLabMember, VirtualLabPlanType } from '@/types/virtual-lab/lab'; export const EMPTY_VIRTUAL_LAB: VirtualLabWithOptionalId = { + id: '', + created_at: '', name: '', description: '', - referenceEMail: '', - members: [], - billing: { - organization: '', - firstname: '', - lastname: '', - address: '', - city: '', - postalCode: '', - country: '', - }, + reference_email: '', + budget: 1, + plan_id: 0, }; export const ROLES: Record = { diff --git a/src/components/VirtualLab/create/hooks/current-virtual-lab.ts b/src/components/VirtualLab/create/hooks/current-virtual-lab.ts index 241ee1986..51734a06d 100644 --- a/src/components/VirtualLab/create/hooks/current-virtual-lab.ts +++ b/src/components/VirtualLab/create/hooks/current-virtual-lab.ts @@ -4,7 +4,7 @@ import { atom, useAtom } from 'jotai'; import { VirtualLabWithOptionalId } from '../types'; import { EMPTY_VIRTUAL_LAB } from '../constants'; -import { VirtualLabMember } from '@/services/virtual-lab/types'; +import { VirtualLabMember } from '@/types/virtual-lab/lab'; const atomCurrentVirtualLab = atom(EMPTY_VIRTUAL_LAB); @@ -24,38 +24,4 @@ export function useCurrentVirtualLab(): [ ]; } -export function useCurrentVirtualLabMembers(): { - members: VirtualLabMember[]; - addMember: (member: VirtualLabMember) => void; - removeMember: (member: VirtualLabMember) => void; -} { - const [lab, update] = useCurrentVirtualLab(); - const session = useSession().data; - useEffect(() => { - if (!session) return; - - if (lab.members.find(({ email }) => email === session.user.email)) return; - - update({ - members: [ - { - name: session.user.name ?? session.user.username, - // We should always have the email, but since this is an optional - // attibute, we put a fallback. - email: session.user.email ?? `${session.user.username}@epfl.ch`, - role: 'admin', - }, - ...lab.members, - ], - }); - }, [session, lab.members, update]); - return { - members: lab.members, - addMember(newMember: VirtualLabMember) { - update({ members: [...lab.members.filter((m) => m.email !== newMember.email), newMember] }); - }, - removeMember(memberToDelete: VirtualLabMember) { - update({ members: lab.members.filter((m) => m.email !== memberToDelete.email) }); - }, - }; -} +export function useCurrentVirtualLabMembers() {} diff --git a/src/components/VirtualLab/create/pages/Members/AddMember/AddMember.tsx b/src/components/VirtualLab/create/pages/Members/AddMember/AddMember.tsx index b04ceb343..fb74137cf 100644 --- a/src/components/VirtualLab/create/pages/Members/AddMember/AddMember.tsx +++ b/src/components/VirtualLab/create/pages/Members/AddMember/AddMember.tsx @@ -7,8 +7,7 @@ import { ROLES } from '../../../constants'; import { NewMember, useNewMember } from './new-member-hook'; import IconPlus from '@/components/icons/Plus'; import { classNames } from '@/util/utils'; -import { VirtualLabMember } from '@/services/virtual-lab/types'; - +import { VirtualLabMember } from '@/types/virtual-lab/lab'; import styles from './add-member.module.css'; export interface AddMemberProps { @@ -67,6 +66,7 @@ const FIELDS = { pattern: RX_NAME, }, email: { type: 'email', label: 'EMail', required: true, placeholder: "Member's email" }, + role: 'user', }; function makeVirtualLabMember(member: NewMember): VirtualLabMember { diff --git a/src/components/VirtualLab/create/pages/Members/AddMember/new-member-hook.ts b/src/components/VirtualLab/create/pages/Members/AddMember/new-member-hook.ts index dc2a97e6d..3f458a373 100644 --- a/src/components/VirtualLab/create/pages/Members/AddMember/new-member-hook.ts +++ b/src/components/VirtualLab/create/pages/Members/AddMember/new-member-hook.ts @@ -1,6 +1,5 @@ import { useState } from 'react'; - -import { VirtualLabMember } from '@/services/virtual-lab/types'; +import { VirtualLabMember } from '@/types/virtual-lab/lab'; export interface NewMember { firstname: string; diff --git a/src/components/VirtualLab/create/pages/Members/MemberItem/MemberItem.tsx b/src/components/VirtualLab/create/pages/Members/MemberItem/MemberItem.tsx index cf79e4650..e25ece514 100644 --- a/src/components/VirtualLab/create/pages/Members/MemberItem/MemberItem.tsx +++ b/src/components/VirtualLab/create/pages/Members/MemberItem/MemberItem.tsx @@ -4,8 +4,7 @@ import { DeleteFilled } from '@ant-design/icons'; import { Avatar } from '../../../sub-components/Avatar'; import { ROLES } from '../../../constants'; import { classNames } from '@/util/utils'; -import { VirtualLabMember } from '@/services/virtual-lab/types'; - +import { VirtualLabMember } from '@/types/virtual-lab/lab'; import styles from './member-item.module.css'; export interface MemberItemProps { diff --git a/src/components/VirtualLab/create/pages/Members/VirtualLabCreateMembers.tsx b/src/components/VirtualLab/create/pages/Members/VirtualLabCreateMembers.tsx index fedfd120d..7841a3ff7 100644 --- a/src/components/VirtualLab/create/pages/Members/VirtualLabCreateMembers.tsx +++ b/src/components/VirtualLab/create/pages/Members/VirtualLabCreateMembers.tsx @@ -1,12 +1,11 @@ import React from 'react'; import { useSession } from 'next-auth/react'; -import { useCurrentVirtualLabMembers } from '../../hooks/current-virtual-lab'; import { Layout } from '../../sub-components/Layout'; import { Main } from '../../sub-components/Main'; import { MemberItem } from './MemberItem'; import { AddMember } from './AddMember'; - +import { VirtualLabMember } from '@/types/virtual-lab/lab'; import styles from './virtual-lab-create-members.module.css'; export interface VirtualLabCreateMembersProps { @@ -15,7 +14,7 @@ export interface VirtualLabCreateMembersProps { } export function VirtualLabCreateMembers({ className, nextPage }: VirtualLabCreateMembersProps) { - const { members, addMember, removeMember } = useCurrentVirtualLabMembers(); + const members: VirtualLabMember[] = []; const session = useSession().data; return ( @@ -26,12 +25,12 @@ export function VirtualLabCreateMembers({ className, nextPage }: VirtualLabCreat {}} readonly={member.email === session?.user.email} /> ))} - email)} /> + {}} currentMembersEmails={members.map(({ email }) => email)} /> ); diff --git a/src/components/VirtualLab/create/pages/Plan/InputBillingInfo/InputBillingInfo.tsx b/src/components/VirtualLab/create/pages/Plan/InputBillingInfo/InputBillingInfo.tsx index 489cad487..16e173ac3 100644 --- a/src/components/VirtualLab/create/pages/Plan/InputBillingInfo/InputBillingInfo.tsx +++ b/src/components/VirtualLab/create/pages/Plan/InputBillingInfo/InputBillingInfo.tsx @@ -1,13 +1,11 @@ import React from 'react'; import { COUNTRIES } from '../../../constants'; -import { useCurrentVirtualLab } from '../../../hooks/current-virtual-lab'; import { FieldType } from '../../../types'; import { Form } from '../../../sub-components/Form'; import { KeysOfType } from '@/util/typing'; import { classNames } from '@/util/utils'; -import { VirtualLab } from '@/services/virtual-lab/types'; - +import { MockBilling } from '@/types/virtual-lab/lab'; import styles from './input-billing-info.module.css'; export interface InputBillingInfoProps { @@ -16,24 +14,14 @@ export interface InputBillingInfoProps { } export function InputBillingInfo({ className, onValidityChange }: InputBillingInfoProps) { - const [lab, updateLab] = useCurrentVirtualLab(); - const { billing } = lab; - const updateBilling = (partialBilling: Partial) => { - updateLab({ - billing: { - ...lab.billing, - ...partialBilling, - }, - }); - }; - if (!lab.plan || lab.plan === 'entry') return null; + const updateBilling = () => {}; return (

Billing

, FieldType> = { +const FIELDS: Record, FieldType> = { organization: { required: true, label: 'Organization',