[questions][ui] contribute questions form ui

pull/346/head
wlren 3 years ago
parent 588272830c
commit 101a01302b

@ -1,6 +1,8 @@
import { Fragment, useState } from 'react'; import { Fragment, useState } from 'react';
import { Dialog, Transition } from '@headlessui/react'; import { Dialog, Transition } from '@headlessui/react';
import { HorizontalDivider } from '~/../../../packages/ui/dist';
import ContributeQuestionForm from './ContributeQuestionForm'; import ContributeQuestionForm from './ContributeQuestionForm';
import DiscardDraftDialog from './DiscardDraftDialog'; import DiscardDraftDialog from './DiscardDraftDialog';
@ -55,14 +57,17 @@ export default function ContributeQuestionDialog({
leaveFrom="opacity-100 translate-y-0 sm:scale-100" leaveFrom="opacity-100 translate-y-0 sm:scale-100"
leaveTo="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"> leaveTo="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95">
<Dialog.Panel className="relative max-w-5xl transform overflow-hidden rounded-lg bg-white text-left shadow-xl transition-all sm:my-8 sm:w-full"> <Dialog.Panel className="relative max-w-5xl transform overflow-hidden rounded-lg bg-white text-left shadow-xl transition-all sm:my-8 sm:w-full">
<div className="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4"> <div className="bg-white p-6 pt-5 sm:pb-4">
<div className="sm:flex sm:items-start"> <div className="flex flex-1 items-stretch">
<div className="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> <div className="mt-3 w-full sm:mt-0 sm:ml-4 sm:text-left">
<Dialog.Title <Dialog.Title
as="h3" as="h3"
className="text-lg font-medium leading-6 text-gray-900"> className="text-lg font-medium leading-6 text-gray-900">
Question Draft Question Draft
</Dialog.Title> </Dialog.Title>
<div className="w-full">
<HorizontalDivider />
</div>
<div className="mt-2"> <div className="mt-2">
<ContributeQuestionForm <ContributeQuestionForm
onDiscard={() => setShowDiscardDialog(true)} onDiscard={() => setShowDiscardDialog(true)}

@ -3,20 +3,24 @@ import { useForm } from 'react-hook-form';
import { import {
BuildingOffice2Icon, BuildingOffice2Icon,
CalendarDaysIcon, CalendarDaysIcon,
QuestionMarkCircleIcon, // UserIcon,
UserIcon,
} from '@heroicons/react/24/outline'; } from '@heroicons/react/24/outline';
import { import {
Button, Button,
Collapsible, Collapsible,
HorizontalDivider, Select,
// HorizontalDivider,
TextArea, TextArea,
TextInput, TextInput,
} from '@tih/ui'; } from '@tih/ui';
import { useFormRegister } from '~/utils/questions/useFormRegister'; import { QUESTION_TYPES } from '~/utils/questions/constants';
import {
useFormRegister,
useSelectRegister,
} from '~/utils/questions/useFormRegister';
import SimilarQuestionCard from './card/SimilarQuestionCard'; // Import SimilarQuestionCard from './card/SimilarQuestionCard';
import Checkbox from './ui-patch/Checkbox'; import Checkbox from './ui-patch/Checkbox';
export type ContributeQuestionData = { export type ContributeQuestionData = {
@ -40,6 +44,7 @@ export default function ContributeQuestionForm({
const { register: formRegister, handleSubmit } = const { register: formRegister, handleSubmit } =
useForm<ContributeQuestionData>(); useForm<ContributeQuestionData>();
const register = useFormRegister(formRegister); const register = useFormRegister(formRegister);
const selectRegister = useSelectRegister(formRegister);
const [canSubmit, setCanSubmit] = useState<boolean>(false); const [canSubmit, setCanSubmit] = useState<boolean>(false);
const handleCheckSimilarQuestions = (checked: boolean) => { const handleCheckSimilarQuestions = (checked: boolean) => {
@ -47,35 +52,39 @@ export default function ContributeQuestionForm({
}; };
return ( return (
<form <form
className="mt-3 flex flex-col items-stretch justify-center pb-[100px]" className=" flex flex-1 flex-col items-stretch justify-center pb-[50px]"
onSubmit={handleSubmit(onSubmit)}> onSubmit={handleSubmit(onSubmit)}>
<TextArea <TextArea
isLabelHidden={true} label="Question Prompt"
label="Question"
placeholder="Contribute a question" placeholder="Contribute a question"
required={true}
rows={5} rows={5}
{...register('questionContent')} {...register('questionContent')}
/> />
<div className="mt-3 mb-2 flex flex-wrap items-end justify-center gap-2"> <div className="mt-3 mb-1 flex flex-wrap items-end gap-2">
<div className="min-w-[150px] flex-1"> <div className="mr-2 min-w-[113px] max-w-[113px] flex-1">
<Select
defaultValue="coding"
label="Type"
options={QUESTION_TYPES}
required={true}
{...selectRegister('questionType')}
/>
</div>
<div className="min-w-[150px] max-w-[300px] flex-1">
<TextInput <TextInput
label="Company" label="Company"
required={true}
startAddOn={BuildingOffice2Icon} startAddOn={BuildingOffice2Icon}
startAddOnType="icon" startAddOnType="icon"
{...register('company')} {...register('company')}
/> />
</div> </div>
<div className="min-w-[150px] flex-1">
<TextInput <div className="min-w-[150px] max-w-[300px] flex-1">
label="Type"
startAddOn={QuestionMarkCircleIcon}
startAddOnType="icon"
{...register('questionType')}
/>
</div>
<div className="min-w-[150px] flex-1">
<TextInput <TextInput
label="Date" label="Date"
required={true}
startAddOn={CalendarDaysIcon} startAddOn={CalendarDaysIcon}
startAddOnType="icon" startAddOnType="icon"
{...register('date')} {...register('date')}
@ -83,8 +92,8 @@ export default function ContributeQuestionForm({
</div> </div>
</div> </div>
<Collapsible defaultOpen={true} label="Additional info"> <Collapsible defaultOpen={true} label="Additional info">
<div className="flex flex-wrap items-end justify-center gap-2"> <div className="justify-left flex flex-wrap items-end gap-2">
<div className="min-w-[150px] flex-1"> <div className="min-w-[150px] max-w-[300px] flex-1">
<TextInput <TextInput
label="Location" label="Location"
startAddOn={CalendarDaysIcon} startAddOn={CalendarDaysIcon}
@ -92,17 +101,17 @@ export default function ContributeQuestionForm({
{...register('location')} {...register('location')}
/> />
</div> </div>
<div className="min-w-[150px] flex-1"> {/* <div className="min-w-[150px] max-w-[200px] flex-1">
<TextInput <TextInput
label="Position <TODO>" label="Position <TODO>"
startAddOn={UserIcon} startAddOn={UserIcon}
startAddOnType="icon" startAddOnType="icon"
{...register('position')} {...register('position')}
/> />
</div> </div> */}
</div> </div>
</Collapsible> </Collapsible>
<div className="w-full"> {/* <div className="w-full">
<HorizontalDivider /> <HorizontalDivider />
</div> </div>
<h1 className="mb-3"> <h1 className="mb-3">
@ -120,7 +129,7 @@ export default function ContributeQuestionForm({
console.log('hi!'); console.log('hi!');
}} }}
/> />
</div> </div> */}
<div className="bg-primary-50 fixed bottom-0 left-0 w-full px-4 py-3 sm:flex sm:flex-row sm:justify-between sm:px-6"> <div className="bg-primary-50 fixed bottom-0 left-0 w-full px-4 py-3 sm:flex sm:flex-row sm:justify-between sm:px-6">
<div className="mb-1 flex"> <div className="mb-1 flex">
<Checkbox <Checkbox

@ -97,7 +97,7 @@ export default function LandingComponent({
/> />
</div> </div>
<div> <div>
<p className="py-20 text-center text-black "> <p className="py-20 text-center text-white ">
TODO questions Carousel TODO questions Carousel
</p> </p>
</div> </div>

@ -19,3 +19,25 @@ export const useFormRegister = <TFieldValues extends FieldValues>(
); );
return formRegister; return formRegister;
}; };
export const useSelectRegister = <TFieldValues extends FieldValues>(
register: UseFormRegister<TFieldValues>,
) => {
const formRegister = useCallback(
(...args: Parameters<typeof register>) => {
const { onChange, ...rest } = register(...args);
return {
...rest,
onChange: (value: string) => {
onChange({
target: {
value,
},
});
},
};
},
[register],
);
return formRegister;
};

Loading…
Cancel
Save