diff --git a/apps/portal/src/components/questions/AddToListDropdown.tsx b/apps/portal/src/components/questions/AddToListDropdown.tsx
index 4ae9da46..d19dcf4c 100644
--- a/apps/portal/src/components/questions/AddToListDropdown.tsx
+++ b/apps/portal/src/components/questions/AddToListDropdown.tsx
@@ -3,22 +3,52 @@ import type { PropsWithChildren } from 'react';
import { useMemo } from 'react';
import { Fragment, useRef, useState } from 'react';
import { Menu, Transition } from '@headlessui/react';
-import { CheckIcon, HeartIcon } from '@heroicons/react/20/solid';
+import { CheckIcon, HeartIcon, PlusIcon } from '@heroicons/react/20/solid';
+import {
+ useAddQuestionToListAsync,
+ useCreateListAsync,
+ useRemoveQuestionFromListAsync,
+} from '~/utils/questions/mutations';
import { useProtectedCallback } from '~/utils/questions/useProtectedCallback';
import { trpc } from '~/utils/trpc';
+import CreateListDialog from './CreateListDialog';
+
export type AddToListDropdownProps = {
questionId: string;
};
+export type DropdownButtonProps = PropsWithChildren<{
+ onClick: () => void;
+}>;
+
+function DropdownButton({ onClick, children }: DropdownButtonProps) {
+ return (
+
+ {({ active }) => (
+
+ )}
+
+ );
+}
+
export default function AddToListDropdown({
questionId,
}: AddToListDropdownProps) {
const [menuOpened, setMenuOpened] = useState(false);
const ref = useRef(null);
+ const [show, setShow] = useState(false);
- const utils = trpc.useContext();
+ const createListAsync = useCreateListAsync();
const { data: lists } = trpc.useQuery(['questions.lists.getListsByUser']);
const listsWithQuestionData = useMemo(() => {
@@ -30,25 +60,8 @@ export default function AddToListDropdown({
}));
}, [lists, questionId]);
- const { mutateAsync: addQuestionToList } = trpc.useMutation(
- 'questions.lists.createQuestionEntry',
- {
- // TODO: Add optimistic update
- onSuccess: () => {
- utils.invalidateQueries(['questions.lists.getListsByUser']);
- },
- },
- );
-
- const { mutateAsync: removeQuestionFromList } = trpc.useMutation(
- 'questions.lists.deleteQuestionEntry',
- {
- // TODO: Add optimistic update
- onSuccess: () => {
- utils.invalidateQueries(['questions.lists.getListsByUser']);
- },
- },
- );
+ const addQuestionToList = useAddQuestionToListAsync();
+ const removeQuestionFromList = useRemoveQuestionFromListAsync();
const addClickOutsideListener = () => {
document.addEventListener('click', handleClickOutside, true);
@@ -101,63 +114,75 @@ export default function AddToListDropdown({
);
return (
-