Compare commits
13 Commits
fix/delete
...
feat/due-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0dbc3309d | ||
|
|
d2a1bbede9 | ||
|
|
8969a3a97f | ||
|
|
4d7c6770fb | ||
|
|
6d2ca9e250 | ||
|
|
f71fb63203 | ||
|
|
7e3d64a4ff | ||
|
|
3d5f4f63a2 | ||
|
|
7bc83e70a9 | ||
|
|
172f94949e | ||
|
|
cea9c89284 | ||
|
|
b664c566a1 | ||
|
|
48d3b43223 |
@@ -156,7 +156,6 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
|||||||
getModalState,
|
getModalState,
|
||||||
clearModalState,
|
clearModalState,
|
||||||
isOpen,
|
isOpen,
|
||||||
modalStates,
|
|
||||||
} = useModal();
|
} = useModal();
|
||||||
const { showPopup } = usePopup();
|
const { showPopup } = usePopup();
|
||||||
const { workspace } = useWorkspace();
|
const { workspace } = useWorkspace();
|
||||||
@@ -193,21 +192,6 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const addOrRemoveLabel = api.card.addOrRemoveLabel.useMutation({
|
|
||||||
onError: () => {
|
|
||||||
showPopup({
|
|
||||||
header: t`Unable to add label`,
|
|
||||||
message: t`Please try again later, or contact customer support.`,
|
|
||||||
icon: "error",
|
|
||||||
});
|
|
||||||
},
|
|
||||||
onSettled: async () => {
|
|
||||||
if (cardId) {
|
|
||||||
await utils.card.byId.invalidate({ cardPublicId: cardId });
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const { register, handleSubmit, setValue, watch } = useForm<FormValues>({
|
const { register, handleSubmit, setValue, watch } = useForm<FormValues>({
|
||||||
values: {
|
values: {
|
||||||
cardId: cardId ?? "",
|
cardId: cardId ?? "",
|
||||||
@@ -224,24 +208,6 @@ export default function CardPage({ isTemplate }: { isTemplate?: boolean }) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// this adds the new created label to selected labels
|
|
||||||
useEffect(() => {
|
|
||||||
const newLabelId = modalStates.NEW_LABEL_CREATED;
|
|
||||||
if (newLabelId && cardId) {
|
|
||||||
const isAlreadyAdded = card?.labels.some(
|
|
||||||
(label) => label.publicId === newLabelId,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!isAlreadyAdded) {
|
|
||||||
addOrRemoveLabel.mutate({
|
|
||||||
cardPublicId: cardId,
|
|
||||||
labelPublicId: newLabelId,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
clearModalState("NEW_LABEL_CREATED");
|
|
||||||
}
|
|
||||||
}, [modalStates.NEW_LABEL_CREATED, card, cardId]);
|
|
||||||
|
|
||||||
// Open the new item form after creating a new checklist
|
// Open the new item form after creating a new checklist
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!card) return;
|
if (!card) return;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { generateUID } from "@kan/shared/utils";
|
|||||||
|
|
||||||
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
import { createTRPCRouter, protectedProcedure } from "../trpc";
|
||||||
import { assertUserInWorkspace } from "../utils/auth";
|
import { assertUserInWorkspace } from "../utils/auth";
|
||||||
import { deleteObject, generateUploadUrl } from "../utils/s3";
|
import { generateUploadUrl } from "../utils/s3";
|
||||||
|
|
||||||
export const attachmentRouter = createTRPCRouter({
|
export const attachmentRouter = createTRPCRouter({
|
||||||
generateUploadUrl: protectedProcedure
|
generateUploadUrl: protectedProcedure
|
||||||
@@ -189,18 +189,6 @@ export const attachmentRouter = createTRPCRouter({
|
|||||||
|
|
||||||
await assertUserInWorkspace(ctx.db, userId, workspaceId);
|
await assertUserInWorkspace(ctx.db, userId, workspaceId);
|
||||||
|
|
||||||
const bucket = process.env.NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME;
|
|
||||||
if (bucket) {
|
|
||||||
try {
|
|
||||||
await deleteObject(bucket, attachment.s3Key);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(
|
|
||||||
`Failed to delete attachment from S3: ${attachment.s3Key}`,
|
|
||||||
error,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await cardAttachmentRepo.softDelete(ctx.db, {
|
await cardAttachmentRepo.softDelete(ctx.db, {
|
||||||
attachmentId: attachment.id,
|
attachmentId: attachment.id,
|
||||||
deletedAt: new Date(),
|
deletedAt: new Date(),
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {
|
import {
|
||||||
DeleteObjectCommand,
|
|
||||||
GetObjectCommand,
|
GetObjectCommand,
|
||||||
PutObjectCommand,
|
PutObjectCommand,
|
||||||
S3Client,
|
S3Client,
|
||||||
@@ -57,13 +56,3 @@ export async function generateDownloadUrl(
|
|||||||
{ expiresIn },
|
{ expiresIn },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteObject(bucket: string, key: string) {
|
|
||||||
const client = createS3Client();
|
|
||||||
await client.send(
|
|
||||||
new DeleteObjectCommand({
|
|
||||||
Bucket: bucket,
|
|
||||||
Key: key,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user