Skip to content

Commit c2afd82

Browse files
committed
fix: handle properly several files
1 parent 8b0f106 commit c2afd82

File tree

4 files changed

+25
-11
lines changed

4 files changed

+25
-11
lines changed

src/components/ConfirmNFTMintModal/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
setShouldRefetchNFTItems,
2424
} from "@/features/nft/nftSlice";
2525
import { shortenAddress } from "@/helpers/shortenAddress";
26-
import { convertStringToAny, convertStringToDataDynamic, convertStringToUint8Array } from "@/helpers/convertStringToAny";
26+
import { convertStringToAny, convertStringToDataDynamic } from "@/helpers/convertStringToAny";
2727

2828
export const ConfirmNFTMintModal = () => {
2929
const isConfirmNFTMintModalOpen = useAppSelector(state => state.general.isConfirmNFTMintModalOpen);

src/components/FileUpload/index.tsx

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { GeneralIcon } from "@/assets/GeneralIcon";
22
import { AlertType, ButtonType, GeneralIconType } from "@/shared/types";
33
import { Button } from "../Button";
4-
import { ChangeEvent, FC, useCallback, useMemo, useRef, useState } from "react";
4+
import { ChangeEvent, FC, useCallback, useEffect, useMemo, useRef, useState } from "react";
55
import Big from "big.js";
66
import classNames from "classnames";
77
import { useAppDispatch } from "@/store/hooks";
@@ -20,6 +20,7 @@ export const FileUpload: FC<FileUploadProps> = ({
2020
const [files, setFiles] = useState<{ name: string; content: string }[]>([]);
2121
const inputFileRef = useRef<HTMLInputElement>(null);
2222
const dispatch = useAppDispatch();
23+
const refFilesLength = useRef<number>(0);
2324

2425
const onUploadFile = useCallback(async (event: ChangeEvent<HTMLInputElement>) => {
2526
let { files: selectedFiles } = event.target;
@@ -90,16 +91,23 @@ export const FileUpload: FC<FileUploadProps> = ({
9091
}
9192

9293
const newFiles = await Promise.all(filesToHandle.map(readFile));
94+
9395
setFiles((prev) => isDataEditable ? [...prev, ...newFiles] : [...newFiles]);
94-
dispatch(setNFTMultipleDataFiles(newFiles.map((file) => file.content)));
9596
} catch (error) {
9697
console.error("Error reading files", error);
9798
}
9899
}, [files, isDataEditable]);
99100

101+
useEffect(() => {
102+
if (files.length !== refFilesLength.current) {
103+
dispatch(setNFTMultipleDataFiles(files.map(item => item.content)));
104+
105+
refFilesLength.current = files.length;
106+
}
107+
}, [files]);
108+
100109
const removeFile = useCallback((name: string) => {
101110
setFiles((prev) => prev.filter((file) => file.name !== name));
102-
dispatch(setNFTMultipleDataFiles(files.filter((file) => file.name !== name).map((file) => file.content)));
103111
}, [files]);
104112

105113
const renderContent = useMemo(() => {
@@ -114,14 +122,14 @@ export const FileUpload: FC<FileUploadProps> = ({
114122
</div>
115123
))}
116124
<Button
117-
label="Choose more files"
125+
label={isDataEditable ? "Choose more files" : "Choose another file"}
118126
type={ButtonType.Secondary}
119127
onClick={() => !disabled && inputFileRef?.current?.click()}
120128
className="text-sm !py-2 px-6 rounded-[10px] font-medium w-[160px] !bg-transparent group-hover:opacity-50"
121129
/>
122130
</div>
123131
<div className="flex items-center gap-2 text-xs mt-1 text-[#5E6773]">
124-
<GeneralIcon type={GeneralIconType.Warning} /> The max file size is 5KB per file
132+
<GeneralIcon type={GeneralIconType.Warning} /> The max size of files is 250KB
125133
</div>
126134
</>
127135
);
@@ -141,11 +149,11 @@ export const FileUpload: FC<FileUploadProps> = ({
141149
/>
142150
</div>
143151
<div className="flex items-center gap-2 text-xs mt-1 text-[#5E6773]">
144-
<GeneralIcon type={GeneralIconType.Warning} /> The max file size is 5KB per file
152+
<GeneralIcon type={GeneralIconType.Warning} /> The max size of files is 250KB
145153
</div>
146154
</>
147155
);
148-
}, [files, disabled, removeFile]);
156+
}, [files, disabled, removeFile, isDataEditable]);
149157

150158
return (
151159
<div

src/components/NFTMultipleData/index.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const NFTMultipleData: FC<NFTMultipleDataProps> = ({ isDataEditable }: NF
4343

4444
const handleValidateEnteredData = useCallback((value: string) => {
4545
try {
46-
const data = btoa(value);
46+
btoa(value);
4747

4848
return undefined;
4949
} catch (error) {
@@ -118,7 +118,14 @@ export const NFTMultipleData: FC<NFTMultipleDataProps> = ({ isDataEditable }: NF
118118
})}
119119
</>
120120
);
121-
}, [isDataEditable, nftMultipleData, handleUpdateDataInList, nftMultipleDataFiles.length, handleRemoveDataFromList]);
121+
}, [
122+
isDataEditable,
123+
nftMultipleData,
124+
handleUpdateDataInList,
125+
nftMultipleDataFiles.length,
126+
handleRemoveDataFromList,
127+
handleValidateEnteredData,
128+
]);
122129

123130
const filledInData = useMemo(() => {
124131
return nftMultipleData.filter((item) => item.length > 0);

src/features/nft/nftSlice.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ const nftsSlice = createSlice({
382382
if (action.payload.owner) {
383383
roles.push(DataEditor.owner);
384384
}
385-
console.log(roles);
386385
state.roles = roles;
387386
},
388387
addDataToMultipleData(state) {

0 commit comments

Comments
 (0)