diff --git a/apps/portal/src/components/questions/ContributeQuestionForm.tsx b/apps/portal/src/components/questions/ContributeQuestionForm.tsx index 363cc987..73cca0fc 100644 --- a/apps/portal/src/components/questions/ContributeQuestionForm.tsx +++ b/apps/portal/src/components/questions/ContributeQuestionForm.tsx @@ -1,7 +1,6 @@ import { startOfMonth } from 'date-fns'; import { useState } from 'react'; import { Controller, useForm } from 'react-hook-form'; -import { CalendarDaysIcon, UserIcon } from '@heroicons/react/24/outline'; import type { QuestionsQuestionType } from '@prisma/client'; import { Button, @@ -9,10 +8,10 @@ import { HorizontalDivider, Select, TextArea, - TextInput, + Typeahead, } from '@tih/ui'; -import { QUESTION_TYPES } from '~/utils/questions/constants'; +import { LOCATIONS, QUESTION_TYPES, ROLES } from '~/utils/questions/constants'; import { useFormRegister, useSelectRegister, @@ -83,12 +82,25 @@ export default function ContributeQuestionForm({
- ( + {}} + onSelect={(option) => { + field.onChange(option.value); + }} + {...field} + value={LOCATIONS.find( + (location) => location.value === field.value, + )} + /> + )} />
@@ -97,10 +109,12 @@ export default function ContributeQuestionForm({ name="date" render={({ field }) => ( field.onChange(startOfMonth(new Date(year, month - 1))) } @@ -124,12 +138,23 @@ export default function ContributeQuestionForm({ />
- ( + {}} + onSelect={(option) => { + field.onChange(option.value); + }} + {...field} + value={ROLES.find((role) => role.value === field.value)} + /> + )} />
diff --git a/apps/portal/src/pages/questions/index.tsx b/apps/portal/src/pages/questions/index.tsx index f374553d..5f74c523 100644 --- a/apps/portal/src/pages/questions/index.tsx +++ b/apps/portal/src/pages/questions/index.tsx @@ -38,7 +38,12 @@ export default function QuestionsHomePage() { areQuestionTypesInitialized, ] = useSearchFilter('questionTypes', { queryParamToValue: (param) => { - return param.toUpperCase() as QuestionsQuestionType; + const uppercaseParam = param.toUpperCase(); + return ( + QUESTION_TYPES.find( + (questionType) => questionType.value.toUpperCase() === uppercaseParam, + )?.value ?? null + ); }, }); const [ @@ -47,6 +52,14 @@ export default function QuestionsHomePage() { isQuestionAgeInitialized, ] = useSearchFilterSingle('questionAge', { defaultValue: 'all', + queryParamToValue: (param) => { + const uppercaseParam = param.toUpperCase(); + return ( + QUESTION_AGES.find( + (questionAge) => questionAge.value.toUpperCase() === uppercaseParam, + )?.value ?? null + ); + }, }); const [selectedRoles, setSelectedRoles, areRolesInitialized] = diff --git a/apps/portal/src/server/router/questions-question-router.ts b/apps/portal/src/server/router/questions-question-router.ts index 75fb7d17..b7396a8d 100644 --- a/apps/portal/src/server/router/questions-question-router.ts +++ b/apps/portal/src/server/router/questions-question-router.ts @@ -80,6 +80,8 @@ export const questionsQuestionRouter = createProtectedRouter() }, }, }); + + console.log(input); return questionsData.map((data) => { const votes: number = data.votes.reduce( (previousValue: number, currentValue) => { diff --git a/apps/portal/src/utils/questions/constants.ts b/apps/portal/src/utils/questions/constants.ts index 2f44db06..d67fbcf4 100644 --- a/apps/portal/src/utils/questions/constants.ts +++ b/apps/portal/src/utils/questions/constants.ts @@ -76,7 +76,7 @@ export const LOCATIONS: FilterChoices = [ value: 'california', }, { - id: 'california', + id: 'Hong Kong', label: 'Hong Kong', value: 'Hong Kong', }, diff --git a/apps/portal/src/utils/questions/useSearchFilter.ts b/apps/portal/src/utils/questions/useSearchFilter.ts index 0b916261..f16d8a65 100644 --- a/apps/portal/src/utils/questions/useSearchFilter.ts +++ b/apps/portal/src/utils/questions/useSearchFilter.ts @@ -5,7 +5,7 @@ export const useSearchFilter = ( name: string, opts: { defaultValues?: Array; - queryParamToValue?: (param: string) => Value; + queryParamToValue?: (param: string) => Value | null; } = {}, ) => { const { defaultValues, queryParamToValue = (param) => param } = opts; @@ -20,7 +20,11 @@ export const useSearchFilter = ( const query = router.query[name]; if (query) { const queryValues = Array.isArray(query) ? query : [query]; - setFilters(queryValues.map(queryParamToValue) as Array); + setFilters( + queryValues + .map(queryParamToValue) + .filter((value) => value !== null) as Array, + ); } else { // Try to load from local storage const localStorageValue = localStorage.getItem(name); @@ -48,7 +52,7 @@ export const useSearchFilterSingle = ( name: string, opts: { defaultValue?: Value; - queryParamToValue?: (param: string) => Value; + queryParamToValue?: (param: string) => Value | null; } = {}, ) => { const { defaultValue, queryParamToValue } = opts;