Skip to content

Commit

Permalink
fix: handled attachment upload filename size error in the issue detail (
Browse files Browse the repository at this point in the history
makeplane#3485)

* fix: handled attachment upload filename size error in the issue detail

* ui: profile detail sidebar border
  • Loading branch information
gurusainath committed Jan 28, 2024
1 parent 212f2b5 commit 532da80
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 19 deletions.
1 change: 0 additions & 1 deletion web/components/issues/attachment/attachment-detail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ export const IssueAttachmentsDetail: FC<TIssueAttachmentsDetail> = (props) => {
const attachment = attachmentId && getAttachmentById(attachmentId);

if (!attachment) return <></>;

return (
<>
<IssueAttachmentDeleteModal
Expand Down
12 changes: 8 additions & 4 deletions web/components/issues/attachment/attachment-upload.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { useDropzone } from "react-dropzone";
import { useApplication } from "hooks/store";
// constants
import { MAX_FILE_SIZE } from "constants/common";
// helpers
import { generateFileName } from "helpers/attachment.helper";
// types
import { TAttachmentOperations } from "./root";

Expand All @@ -26,15 +28,17 @@ export const IssueAttachmentUpload: React.FC<Props> = observer((props) => {
const [isLoading, setIsLoading] = useState(false);

const onDrop = useCallback((acceptedFiles: File[]) => {
if (!acceptedFiles[0] || !workspaceSlug) return;
const currentFile: File = acceptedFiles[0];
if (!currentFile || !workspaceSlug) return;

const uploadedFile: File = new File([currentFile], generateFileName(currentFile.name), { type: currentFile.type });
const formData = new FormData();
formData.append("asset", acceptedFiles[0]);
formData.append("asset", uploadedFile);
formData.append(
"attributes",
JSON.stringify({
name: acceptedFiles[0].name,
size: acceptedFiles[0].size,
name: uploadedFile.name,
size: uploadedFile.size,
})
);
setIsLoading(true);
Expand Down
2 changes: 1 addition & 1 deletion web/components/profile/sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export const ProfileSidebar = observer(() => {
];

return (
<div className="w-full flex-shrink-0 overflow-y-auto shadow-custom-shadow-sm md:h-full md:w-80">
<div className="w-full flex-shrink-0 overflow-y-auto shadow-custom-shadow-sm md:h-full md:w-80 border-l border-custom-border-100">
{userProjectsData ? (
<>
<div className="relative h-32">
Expand Down
11 changes: 11 additions & 0 deletions web/helpers/attachment.helper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
export const generateFileName = (fileName: string) => {
const date = new Date();
const timestamp = date.getTime();

const _fileName = getFileName(fileName);
const nameWithoutExtension = _fileName.length > 80 ? _fileName.substring(0, 80) : _fileName;
const extension = getFileExtension(fileName);

return `${nameWithoutExtension}-${timestamp}.${extension}`;
};

export const getFileExtension = (filename: string) => filename.slice(((filename.lastIndexOf(".") - 1) >>> 0) + 2);

export const getFileName = (fileName: string) => {
Expand Down
35 changes: 22 additions & 13 deletions web/store/issue/issue-details/attachment.store.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { action, computed, makeObservable, observable, runInAction } from "mobx";
import set from "lodash/set";
import update from "lodash/update";
import concat from "lodash/concat";
import uniq from "lodash/uniq";
import pull from "lodash/pull";
// services
import { IssueAttachmentService } from "services/issue";
// types
Expand Down Expand Up @@ -83,10 +87,13 @@ export class IssueAttachmentStore implements IIssueAttachmentStore {
try {
const response = await this.issueAttachmentService.getIssueAttachment(workspaceSlug, projectId, issueId);

runInAction(() => {
this.attachments[issueId] = response.map((attachment) => attachment.id);
response.forEach((attachment) => set(this.attachmentMap, attachment.id, attachment));
});
if (response && response.length > 0) {
const _attachmentIds = response.map((attachment) => attachment.id);
runInAction(() => {
update(this.attachments, [issueId], (attachmentIds = []) => uniq(concat(attachmentIds, _attachmentIds)));
response.forEach((attachment) => set(this.attachmentMap, attachment.id, attachment));
});
}

return response;
} catch (error) {
Expand All @@ -98,10 +105,11 @@ export class IssueAttachmentStore implements IIssueAttachmentStore {
try {
const response = await this.issueAttachmentService.uploadIssueAttachment(workspaceSlug, projectId, issueId, data);

runInAction(() => {
this.attachments[issueId].push(response.id);
set(this.attachmentMap, response.id, response);
});
if (response && response.id)
runInAction(() => {
update(this.attachments, [issueId], (attachmentIds = []) => uniq(concat(attachmentIds, [response.id])));
set(this.attachmentMap, response.id, response);
});

return response;
} catch (error) {
Expand All @@ -118,12 +126,13 @@ export class IssueAttachmentStore implements IIssueAttachmentStore {
attachmentId
);

const reactionIndex = this.attachments[issueId].findIndex((_comment) => _comment === attachmentId);
if (reactionIndex >= 0)
runInAction(() => {
this.attachments[issueId].splice(reactionIndex, 1);
delete this.attachmentMap[attachmentId];
runInAction(() => {
update(this.attachments, [issueId], (attachmentIds = []) => {
if (attachmentIds.includes(attachmentId)) pull(attachmentIds, attachmentId);
return attachmentIds;
});
delete this.attachmentMap[attachmentId];
});

return response;
} catch (error) {
Expand Down

0 comments on commit 532da80

Please sign in to comment.