Skip to content

Commit

Permalink
a bit of cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
fhennig committed Sep 30, 2024
1 parent bbc2bf1 commit 9ba53e3
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 45 deletions.
28 changes: 19 additions & 9 deletions website/src/components/Group/GroupForm.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
import { useState, type FC, type FormEvent } from "react";
import type { NewGroup } from "../../types/backend";
import { useState, type FC, type FormEvent } from 'react';

import {
AddressLineOneInput,
AddressLineTwoInput,
CityInput,
CountryInput,
EmailContactInput,
GroupNameInput,
InstitutionNameInput,
PostalCodeInput,
StateInput,
} from './Inputs';
import useClientFlag from '../../hooks/isClient';
import type { NewGroup } from '../../types/backend';
import { ErrorFeedback } from '../ErrorFeedback.tsx';
import { AddressLineOneInput, AddressLineTwoInput, CityInput, CountryInput, EmailContactInput, GroupNameInput, InstitutionNameInput, PostalCodeInput, StateInput } from "./Inputs";
import useClientFlag from "../../hooks/isClient";

interface GroupFormProps {
title: string;
buttonText: string;
defaultGroupData?: NewGroup;
onSubmit: (group: NewGroup) => Promise<GroupSubmitResult>;

}

export type GroupSubmitSuccess = {
Expand All @@ -24,7 +34,7 @@ export type GroupSubmitResult = GroupSubmitSuccess | GroupSubmitError;

const chooseCountry = 'Choose a country...';

export const GroupForm: FC<GroupFormProps> = ({title, buttonText, defaultGroupData, onSubmit}) => {
export const GroupForm: FC<GroupFormProps> = ({ title, buttonText, defaultGroupData, onSubmit }) => {
const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);

const internalOnSubmit = async (e: FormEvent<HTMLFormElement>) => {
Expand Down Expand Up @@ -80,15 +90,15 @@ export const GroupForm: FC<GroupFormProps> = ({title, buttonText, defaultGroupDa
</p>

<div className='mt-5 grid grid-cols-1 gap-x-6 gap-y-4 sm:grid-cols-6'>
<GroupNameInput defaultValue={defaultGroupData?.groupName}/>
<GroupNameInput defaultValue={defaultGroupData?.groupName} />
<EmailContactInput defaultValue={defaultGroupData?.contactEmail} />
<InstitutionNameInput defaultValue={defaultGroupData?.institution} />
<AddressLineOneInput defaultValue={defaultGroupData?.address.line1} />
<AddressLineTwoInput defaultValue={defaultGroupData?.address.line2} />
<CityInput defaultValue={defaultGroupData?.address.city} />
<StateInput defaultValue={defaultGroupData?.address.state} />
<PostalCodeInput defaultValue={defaultGroupData?.address.postalCode} />
<CountryInput defaultValue={defaultGroupData?.address.country} />
<CountryInput defaultValue={defaultGroupData?.address.country} />
</div>

<div className='flex justify-end py-8 gap-4 '>
Expand All @@ -104,7 +114,7 @@ export const GroupForm: FC<GroupFormProps> = ({title, buttonText, defaultGroupDa
</form>
</div>
);
}
};

const fieldMapping = {
groupName: {
Expand Down
3 changes: 1 addition & 2 deletions website/src/components/Group/Inputs.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type ComponentProps, type FC, type FormEvent, type PropsWithChildren, useState } from 'react';
import { type ComponentProps, type FC, type PropsWithChildren } from 'react';

import { listOfCountries } from './listOfCountries.ts';

Expand Down Expand Up @@ -220,7 +220,6 @@ export const StateInput: FC<StateInputProps> = ({ defaultValue }) => (
/>
);


type PostalCodeInputProps = {
defaultValue?: string;
};
Expand Down
16 changes: 5 additions & 11 deletions website/src/components/User/GroupCreationForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { type FC } from 'react';

import { useGroupCreation } from '../../hooks/useGroupOperations.ts';
import { routes } from '../../routes/routes.ts';
import type { NewGroup } from '../../types/backend.ts';
import { type ClientConfig } from '../../types/runtimeConfig.ts';
import { withQueryProvider } from '../common/withQueryProvider.tsx';
import { GroupForm, type GroupSubmitError, type GroupSubmitSuccess } from '../Group/GroupForm.tsx';
import type { NewGroup } from '../../types/backend.ts';
import { withQueryProvider } from '../common/withQueryProvider.tsx';

interface GroupManagerProps {
clientConfig: ClientConfig;
Expand All @@ -25,22 +25,16 @@ const InnerGroupCreationForm: FC<GroupManagerProps> = ({ clientConfig, accessTok
return {
succeeded: true,
nextPageHref: routes.groupOverviewPage(result.group.groupId),
} as GroupSubmitSuccess
} as GroupSubmitSuccess;
} else {
return {
succeeded: false,
errorMessage: result.errorMessage,
} as GroupSubmitError
} as GroupSubmitError;
}
};

return (
<GroupForm
title='Create a new submitting group'
buttonText='Create group'
onSubmit={handleCreateGroup}
/>
);
return <GroupForm title='Create a new submitting group' buttonText='Create group' onSubmit={handleCreateGroup} />;
};

export const GroupCreationForm = withQueryProvider(InnerGroupCreationForm);
12 changes: 6 additions & 6 deletions website/src/components/User/GroupEditForm.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { type FC } from 'react';

import { useGroupCreation, useGroupEdit } from '../../hooks/useGroupOperations.ts';
import { useGroupEdit } from '../../hooks/useGroupOperations.ts';
import { routes } from '../../routes/routes.ts';
import type { GroupDetails, NewGroup } from '../../types/backend.ts';
import { type ClientConfig } from '../../types/runtimeConfig.ts';
import { withQueryProvider } from '../common/withQueryProvider.tsx';
import { GroupForm, type GroupSubmitError, type GroupSubmitSuccess } from '../Group/GroupForm.tsx';
import type { Group, GroupDetails, NewGroup } from '../../types/backend.ts';
import { withQueryProvider } from '../common/withQueryProvider.tsx';

interface GroupEditFormProps {
prefetchedGroupDetails: GroupDetails;
Expand All @@ -14,7 +14,7 @@ interface GroupEditFormProps {
}

const InnerGroupEditForm: FC<GroupEditFormProps> = ({ prefetchedGroupDetails, clientConfig, accessToken }) => {
const {groupId, ...groupInfo} = prefetchedGroupDetails.group;
const { groupId, ...groupInfo } = prefetchedGroupDetails.group;

const { editGroup } = useGroupEdit({
clientConfig,
Expand All @@ -28,12 +28,12 @@ const InnerGroupEditForm: FC<GroupEditFormProps> = ({ prefetchedGroupDetails, cl
return {
succeeded: true,
nextPageHref: routes.groupOverviewPage(result.group.groupId),
} as GroupSubmitSuccess
} as GroupSubmitSuccess;
} else {
return {
succeeded: false,
errorMessage: result.errorMessage,
} as GroupSubmitError
} as GroupSubmitError;
}
};

Expand Down
14 changes: 4 additions & 10 deletions website/src/hooks/useGroupOperations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,7 @@ export const useGroupCreation = ({
};
};

export const useGroupEdit = ({
clientConfig,
accessToken,
}: {
clientConfig: ClientConfig;
accessToken: string;
}) => {
export const useGroupEdit = ({ clientConfig, accessToken }: { clientConfig: ClientConfig; accessToken: string }) => {
const { zodios } = useGroupManagementClient(clientConfig);

const editGroup = useCallback(
Expand Down Expand Up @@ -141,13 +135,13 @@ function callEditGroup(accessToken: string, zodios: ZodiosInstance<typeof groupM
const groupResult = await zodios.editGroup(group, {
headers: createAuthorizationHeader(accessToken),
params: {
groupId
}
groupId,
},
});
return {
succeeded: true,
group: groupResult,
} as CreateGroupSuccess; // TODO change type
} as CreateGroupSuccess; // TODO change type
} catch (error) {
const message = `Failed to create group: ${stringifyMaybeAxiosError(error)}`;
return {
Expand Down
8 changes: 1 addition & 7 deletions website/src/pages/group/[groupId]/edit.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import BaseLayout from '../../../layouts/BaseLayout.astro';
import { GroupManagementClient } from '../../../services/groupManagementClient';
import { getAccessToken } from '../../../utils/getAccessToken';
const session = Astro.locals.session!;
const accessToken = getAccessToken(session)!;
const groupId = parseInt(Astro.params.groupId!, 10);
Expand All @@ -23,12 +22,7 @@ const groupManagementClient = GroupManagementClient.create();
const groupDetailsResult = await groupManagementClient.getGroupDetails(accessToken, groupId);
---

<BaseLayout
title={groupDetailsResult.match(
(groupDetails) => 'Edit group',
() => 'Group error',
)}
>
<BaseLayout title='Edit group'>
{
!accessToken ? (
<NeedToLogin message='You need to be logged in to edit this group.' />
Expand Down

0 comments on commit 9ba53e3

Please sign in to comment.