Skip to content

Commit

Permalink
Fix issues
Browse files Browse the repository at this point in the history
  • Loading branch information
kplatis committed Apr 10, 2024
1 parent ab99ca5 commit c887e74
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 107 deletions.
37 changes: 5 additions & 32 deletions __tests__/__utils__/VirtualLab.ts
Original file line number Diff line number Diff line change
@@ -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>): VirtualLab => ({
id,
name: `Mock Lab ${id}`,
description: 'Sploosh',
referenceEMail: '[email protected]',
members: [
{
name: 'Sterling Archer',
email: '[email protected]',
role: 'user',
lastActive: Date.now(),
},
{
name: 'Malory Archer',
email: '[email protected]',
role: 'admin',
lastActive: Date.now(),
},
{
name: 'Algernop Krieger',
email: '[email protected]',
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: '[email protected]',
budget: 0,
created_at: '',
plan_id: 0,
...extra,
});
18 changes: 6 additions & 12 deletions src/components/VirtualLab/create/constants.ts
Original file line number Diff line number Diff line change
@@ -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<VirtualLabMember['role'], string> = {
Expand Down
38 changes: 2 additions & 36 deletions src/components/VirtualLab/create/hooks/current-virtual-lab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<VirtualLabWithOptionalId>(EMPTY_VIRTUAL_LAB);

Expand All @@ -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() {}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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 (
<Layout className={className}>
Expand All @@ -26,12 +25,12 @@ export function VirtualLabCreateMembers({ className, nextPage }: VirtualLabCreat
<MemberItem
key={member.email}
value={member}
onDelete={removeMember}
onDelete={() => {}}
readonly={member.email === session?.user.email}
/>
))}
</div>
<AddMember onNew={addMember} currentMembersEmails={members.map(({ email }) => email)} />
<AddMember onNew={() => {}} currentMembersEmails={members.map(({ email }) => email)} />
</Main>
</Layout>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -16,24 +14,14 @@ export interface InputBillingInfoProps {
}

export function InputBillingInfo({ className, onValidityChange }: InputBillingInfoProps) {
const [lab, updateLab] = useCurrentVirtualLab();
const { billing } = lab;
const updateBilling = (partialBilling: Partial<VirtualLab['billing']>) => {
updateLab({
billing: {
...lab.billing,
...partialBilling,
},
});
};
if (!lab.plan || lab.plan === 'entry') return null;
const updateBilling = () => {};

return (
<div className={classNames(styles.main, className)}>
<h1>Billing</h1>
<section>
<Form
value={billing}
value={{}}
onChange={updateBilling}
onValidityChange={onValidityChange}
fields={FIELDS}
Expand All @@ -45,7 +33,7 @@ export function InputBillingInfo({ className, onValidityChange }: InputBillingIn

const RX_NAME = '[\\p{L}].*';

const FIELDS: Record<KeysOfType<VirtualLab['billing'], string>, FieldType> = {
const FIELDS: Record<KeysOfType<MockBilling, string>, FieldType> = {
organization: {
required: true,
label: 'Organization',
Expand Down

0 comments on commit c887e74

Please sign in to comment.