diff --git a/apps/portal/src/pages/questions/[questionId]/[questionSlug]/index.tsx b/apps/portal/src/pages/questions/[questionId]/[questionSlug]/index.tsx
index 8e73f2f4..19479ae1 100644
--- a/apps/portal/src/pages/questions/[questionId]/[questionSlug]/index.tsx
+++ b/apps/portal/src/pages/questions/[questionId]/[questionSlug]/index.tsx
@@ -10,6 +10,7 @@ import FullScreenSpinner from '~/components/questions/FullScreenSpinner';
import createSlug from '~/utils/questions/createSlug';
import { useFormRegister } from '~/utils/questions/useFormRegister';
+import { useVote } from '~/utils/questions/useVote';
import { trpc } from '~/utils/trpc';
export type AnswerQuestionData = {
@@ -39,6 +40,7 @@ export default function QuestionPage() {
const commentRegister = useFormRegister(comRegister);
const { questionId } = router.query;
+ const [handleUpvote, handleDownvote, voteState] = useVote();
const { data: question } = trpc.useQuery([
'questions.questions.getQuestionById',
@@ -112,6 +114,9 @@ export default function QuestionPage() {
handleDownvote(questionId as string)}
+ onUpvote={() => handleUpvote(questionId as string)}
{...question}
receivedCount={0} // TODO: Change to actual value
showVoteButtons={true}
diff --git a/apps/portal/src/pages/questions/index.tsx b/apps/portal/src/pages/questions/index.tsx
index ac53be59..33eb7aa3 100644
--- a/apps/portal/src/pages/questions/index.tsx
+++ b/apps/portal/src/pages/questions/index.tsx
@@ -24,6 +24,7 @@ import {
useSearchFilter,
useSearchFilterSingle,
} from '~/utils/questions/useSearchFilter';
+import { useVote } from '~/utils/questions/useVote';
import { trpc } from '~/utils/trpc';
export default function QuestionsHomePage() {
@@ -144,7 +145,7 @@ export default function QuestionsHomePage() {
]);
const { pathname } = router;
-
+ const [handleDownvote, handleUpvote, voteState] = useVote();
useEffect(() => {
if (areFiltersInitialized) {
// Router.replace used instead of router.replace to avoid
@@ -292,14 +293,17 @@ export default function QuestionsHomePage() {
question.content,
)}`}
location={question.location}
- receivedCount={0} // TODO: Implement received count
+ receivedCount={0}
role={question.role}
timestamp={question.seenAt.toLocaleDateString(undefined, {
month: 'short',
year: 'numeric',
})}
- type={question.type}
+ type={question.type} // TODO: Implement received count
upvoteCount={question.numVotes}
+ voteState={voteState}
+ onDownvote={() => handleDownvote(question.id)}
+ onUpvote={() => handleUpvote(question.id)}
/>
))}
{questions?.length === 0 && (
diff --git a/apps/portal/src/utils/questions/useVote.ts b/apps/portal/src/utils/questions/useVote.ts
new file mode 100644
index 00000000..6b821c61
--- /dev/null
+++ b/apps/portal/src/utils/questions/useVote.ts
@@ -0,0 +1,19 @@
+import { useState } from 'react';
+
+export const enum VoteState {
+ NO_VOTE,
+ UPVOTE,
+ DOWNVOTE,
+}
+
+export const useVote = () => {
+ const [voteState, setVoteState] = useState(VoteState.NO_VOTE);
+
+ const handleUpvote = (id: string, voteState) => {
+ //
+ };
+
+ const handleDownvote = (id: string) => {};
+
+ return [handleUpvote, handleDownvote, voteState] as const;
+};