diff --git a/apps/web/src/views/card/components/ActivityList.tsx b/apps/web/src/views/card/components/ActivityList.tsx
index f04b76d4..407fd46a 100644
--- a/apps/web/src/views/card/components/ActivityList.tsx
+++ b/apps/web/src/views/card/components/ActivityList.tsx
@@ -126,7 +126,6 @@ const getActivityIcon = (
fromIndex?: number | null,
toIndex?: number | null,
): React.ReactNode | null => {
- console.log({ fromIndex, toIndex });
if (type === "card.updated.list" && fromIndex != null && toIndex != null) {
return fromIndex > toIndex ? (
diff --git a/apps/web/src/views/card/components/LabelSelector.tsx b/apps/web/src/views/card/components/LabelSelector.tsx
index 8bf4bcf3..51c7eca9 100644
--- a/apps/web/src/views/card/components/LabelSelector.tsx
+++ b/apps/web/src/views/card/components/LabelSelector.tsx
@@ -4,6 +4,7 @@ import { HiMiniPlus } from "react-icons/hi2";
import Badge from "~/components/Badge";
import CheckboxDropdown from "~/components/CheckboxDropdown";
import { useModal } from "~/providers/modal";
+import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api";
interface LabelSelectorProps {
@@ -14,6 +15,7 @@ interface LabelSelectorProps {
selected: boolean;
leftIcon: React.ReactNode;
}[];
+ refetchCard: () => Promise;
handleSelectLabel: (labelPublicId: string) => void;
isLoading: boolean;
}
@@ -21,18 +23,25 @@ interface LabelSelectorProps {
export default function LabelSelector({
cardPublicId,
labels,
+ refetchCard,
handleSelectLabel,
isLoading,
}: LabelSelectorProps) {
const { openModal } = useModal();
- const utils = api.useUtils();
-
- const refetchCard = () => utils.card.byId.refetch({ cardPublicId });
+ const { showPopup } = usePopup();
const addOrRemoveLabel = api.card.addOrRemoveLabel.useMutation({
onSuccess: async () => {
await refetchCard();
},
+ onError: async () => {
+ await refetchCard();
+ showPopup({
+ header: "Unable to update labels",
+ message: "Please try again later, or contact customer support.",
+ icon: "error",
+ });
+ },
});
const selectedLabels = labels.filter((label) => label.selected);
diff --git a/apps/web/src/views/card/components/ListSelector.tsx b/apps/web/src/views/card/components/ListSelector.tsx
index ebba9353..99a0ae57 100644
--- a/apps/web/src/views/card/components/ListSelector.tsx
+++ b/apps/web/src/views/card/components/ListSelector.tsx
@@ -1,6 +1,7 @@
import { Menu } from "@headlessui/react";
import CheckboxDropdown from "~/components/CheckboxDropdown";
+import { usePopup } from "~/providers/popup";
import { api } from "~/utils/api";
interface ListSelectorProps {
@@ -10,6 +11,7 @@ interface ListSelectorProps {
value: string;
selected: boolean;
}[];
+ refetchCard: () => Promise;
handleChangeList: (newListPublicId: string, newListName: string) => void;
isLoading: boolean;
}
@@ -18,16 +20,23 @@ export default function ListSelector({
cardPublicId,
lists,
handleChangeList,
+ refetchCard,
isLoading,
}: ListSelectorProps) {
- const utils = api.useUtils();
-
- const refetchCard = () => utils.card.byId.refetch({ cardPublicId });
+ const { showPopup } = usePopup();
const updateCardList = api.card.reorder.useMutation({
onSuccess: async () => {
await refetchCard();
},
+ onError: async () => {
+ await refetchCard();
+ showPopup({
+ header: "Unable to update list",
+ message: "Please try again later, or contact customer support.",
+ icon: "error",
+ });
+ },
});
const selectedList = lists.find((list) => list.selected);
diff --git a/apps/web/src/views/card/components/MemberSelector.tsx b/apps/web/src/views/card/components/MemberSelector.tsx
index 6c5d724d..8a159640 100644
--- a/apps/web/src/views/card/components/MemberSelector.tsx
+++ b/apps/web/src/views/card/components/MemberSelector.tsx
@@ -18,6 +18,7 @@ interface MemberSelectorProps {
imageUrl: string | undefined;
}[];
handleSelectMember: (memberPublicId: string) => void;
+ refetchCard: () => Promise;
isLoading: boolean;
}
@@ -25,14 +26,12 @@ export default function MemberSelector({
cardPublicId,
members,
handleSelectMember,
+ refetchCard,
isLoading,
}: MemberSelectorProps) {
const router = useRouter();
const { openModal } = useModal();
const { showPopup } = usePopup();
- const utils = api.useUtils();
-
- const refetchCard = () => utils.card.byId.refetch({ cardPublicId });
const addOrRemoveMember = api.card.addOrRemoveMember.useMutation({
onSuccess: async () => {
diff --git a/apps/web/src/views/card/index.tsx b/apps/web/src/views/card/index.tsx
index ae57900f..ac64a16e 100644
--- a/apps/web/src/views/card/index.tsx
+++ b/apps/web/src/views/card/index.tsx
@@ -44,10 +44,20 @@ export default function CardPage() {
? router.query.cardId[0]
: router.query.cardId;
- const { data, isLoading } = api.card.byId.useQuery({
+ const { data, isLoading, refetch } = api.card.byId.useQuery({
cardPublicId: cardId ?? "",
});
+ const refetchCard = async () => {
+ try {
+ const { data: updatedCard } = await refetch();
+
+ if (updatedCard) setCard(updatedCard);
+ } catch (error) {
+ console.error({ error });
+ }
+ };
+
useEffect(() => {
setCard(data);
}, [data]);
@@ -180,9 +190,11 @@ export default function CardPage() {
const updateCard = api.card.update.useMutation({
onSuccess: async () => {
- await utils.card.byId.refetch();
+ await refetchCard();
},
- onError: () => {
+ onError: async () => {
+ await refetchCard();
+
showPopup({
header: "Unable to update card",
message: "Please try again later, or contact customer support.",
@@ -295,6 +307,7 @@ export default function CardPage() {
@@ -304,6 +317,7 @@ export default function CardPage() {
@@ -313,6 +327,7 @@ export default function CardPage() {
diff --git a/packages/db/seed.sql b/packages/db/seed.sql
index 4c2e4ecc..a03bd2b0 100644
--- a/packages/db/seed.sql
+++ b/packages/db/seed.sql
@@ -582,9 +582,11 @@ USING (
"workspaceMemberId" IN (
SELECT wm.id
FROM workspace_members wm
- JOIN workspace w ON wm."workspaceId" = w.id
- JOIN board b ON w.id = b."workspaceId"
- WHERE wm."userId" = auth.uid()
+ WHERE wm."workspaceId" IN (
+ SELECT "workspaceId"
+ FROM workspace_members
+ WHERE "userId" = auth.uid()
+ )
)
);