Skip to content

Commit 7733b3e

Browse files
committed
feat: update flow to mint nft with multiple data fields
1 parent 5b1196b commit 7733b3e

File tree

12 files changed

+288
-449
lines changed

12 files changed

+288
-449
lines changed

src/components/Button/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const Button: FC<ButtonProps> = ({
3030
const buttonCx = classNames('flex items-center justify-center gap-1 rounded-xl text-base py-3 px-12 w-full text-nowrap whitespace-nowrap font-noto-sans enabled:hover:opacity-50', {
3131
'bg-green-gradient text-[#21262E]': type === 'primary' && !disabled,
3232
'bg-green-opacity-10 text-[#25D695] backdrop-blur-sm': type === 'secondary' && !disabled,
33+
'text-[#25D695]': type === 'default' && !disabled,
3334
'bg-[#17191E] text-[#2B3138] gap-2 cursor-not-allowed': disabled,
3435
}, className);
3536

src/components/ConfirmNFTMintModal/index.tsx

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@ import { NFT } from "coreum-js-nightly";
1010
import { ModalInfoRow } from "../ModalInfoRow";
1111
import { dispatchAlert } from "@/features/alerts/alertsSlice";
1212
import {
13+
defaultNFTDataItem,
14+
NFTDataItem,
1315
setDataEditable,
1416
setNFTData,
1517
setNFTID,
16-
setNFTMultipleData,
17-
setNFTMultipleDataFiles,
18+
setNFTMultipleDataValues,
1819
setNFTRecipient,
1920
setNFTURI,
2021
setNFTURIHash,
21-
setRolesEditable,
2222
setSelectedNFTClass,
2323
setShouldRefetchNFTItems,
2424
} from "@/features/nft/nftSlice";
2525
import { shortenAddress } from "@/helpers/shortenAddress";
2626
import { convertStringToAny, convertStringToDataDynamic } from "@/helpers/convertStringToAny";
27+
import { DataEditor } from "coreum-js-nightly/dist/main/coreum/asset/nft/v1/types";
2728

2829
export const ConfirmNFTMintModal = () => {
2930
const isConfirmNFTMintModalOpen = useAppSelector(state => state.general.isConfirmNFTMintModalOpen);
@@ -36,9 +37,8 @@ export const ConfirmNFTMintModal = () => {
3637
const nftURIHash = useAppSelector(state => state.nfts.nftURIHash);
3738
const nftRecipient = useAppSelector(state => state.nfts.nftRecipient);
3839
const isDataEditable = useAppSelector(state => state.nfts.isDataEditable);
39-
const roles = useAppSelector(state => state.nfts.roles);
40-
const nftMultipleData = useAppSelector(state => state.nfts.nftMultipleData);
41-
const nftMultipleDataFiles = useAppSelector(state => state.nfts.nftMultipleDataFiles);
40+
41+
const nftMultipleDataValues = useAppSelector(state => state.nfts.nftMultipleDataValues);
4242

4343
const [isTxSuccessful, setIsTxSuccessful] = useState<boolean>(false);
4444

@@ -52,33 +52,38 @@ export const ConfirmNFTMintModal = () => {
5252
dispatch(setNFTRecipient(''));
5353
dispatch(setNFTData(''));
5454
dispatch(setDataEditable(false));
55-
dispatch(setRolesEditable({ admin: false, owner: false }));
55+
dispatch(setNFTMultipleDataValues([defaultNFTDataItem]));
5656
dispatch(setIsConfirmNFTMintModalOpen(false));
5757
dispatch(setSelectedNFTClass(null));
58-
dispatch(setNFTMultipleData(['']));
59-
dispatch(setNFTMultipleDataFiles([]));
6058
setIsTxSuccessful(false);
6159
}, []);
6260

6361
const dataList = useMemo(() => {
64-
return nftMultipleDataFiles.length ? nftMultipleDataFiles : nftMultipleData;
65-
}, [nftMultipleData, nftMultipleDataFiles]);
62+
return nftMultipleDataValues.map((item: NFTDataItem) => {
63+
return {
64+
editors: item.roles,
65+
data: item.contentValue.length
66+
? item.contentValue
67+
: item.fileValue,
68+
};
69+
}).filter((item: { editors: DataEditor[]; data: string; }) => !!item.data.length);
70+
}, [nftMultipleDataValues]);
6671

6772
const handleConfirm = useCallback(async () => {
6873
dispatch(setIsTxExecuting(true));
6974
try {
7075
let nftDataPayload: any;
7176

72-
if (isDataEditable && roles.length) {
77+
if (isDataEditable) {
7378
let payload = [];
7479

75-
for (const tempData of dataList) {
76-
payload.push({ editors: roles, data: btoa(tempData) });
80+
for (const dataItem of dataList) {
81+
payload.push({ editors: dataItem.editors, data: btoa(dataItem.data) });
7782
}
7883

7984
nftDataPayload = convertStringToDataDynamic(payload);
8085
} else {
81-
nftDataPayload = convertStringToAny(dataList[0]);
86+
nftDataPayload = convertStringToAny(dataList?.[0].data);
8287
}
8388

8489
const nftMintObj = {
@@ -121,14 +126,12 @@ export const ConfirmNFTMintModal = () => {
121126
dispatch(setIsTxExecuting(false));
122127
}, [
123128
account,
124-
dispatch,
125129
getTxFee,
126130
isDataEditable,
127131
nftId,
128132
nftRecipient,
129133
nftURI,
130134
nftURIHash,
131-
roles,
132135
selectedCollection?.id,
133136
signingClient,
134137
dataList,
@@ -179,10 +182,10 @@ export const ConfirmNFTMintModal = () => {
179182
className="flex-col !items-start !gap-1"
180183
valueClassName="!text-left"
181184
/>
182-
) : formatData(dataList[0]).length ? (
185+
) : formatData(dataList?.[0].data).length ? (
183186
<ModalInfoRow
184187
label="Data"
185-
value={formatData(dataList[0])}
188+
value={formatData(dataList?.[0].data)}
186189
className="flex-col !items-start !gap-1"
187190
valueClassName="!text-left"
188191
/>
@@ -234,10 +237,10 @@ export const ConfirmNFTMintModal = () => {
234237
className="flex-col !items-start !gap-1"
235238
valueClassName="!text-left"
236239
/>
237-
) : formatData(dataList[0]).length ? (
240+
) : formatData(dataList?.[0]?.data).length ? (
238241
<ModalInfoRow
239242
label="Data"
240-
value={formatData(dataList[0])}
243+
value={formatData(dataList?.[0]?.data)}
241244
className="flex-col !items-start !gap-1"
242245
valueClassName="!text-left"
243246
/>

src/components/FileUpload/index.tsx

Lines changed: 0 additions & 214 deletions
This file was deleted.

src/components/FileUploadSingle/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export const FileUploadSingle: FC<FileUploadSingleProps> = ({
8282
</div>
8383
<Button
8484
label="Choose another file"
85-
type={ButtonType.Secondary}
85+
type={ButtonType.Default}
8686
onClick={() => !disabled && inputFileRef?.current?.click()}
8787
className="text-sm !py-2 px-6 rounded-[10px] font-medium w-[160px] !bg-transparent group-hover:opacity-50"
8888
/>
@@ -100,7 +100,7 @@ export const FileUploadSingle: FC<FileUploadSingleProps> = ({
100100
<GeneralIcon type={GeneralIconType.File} />
101101
<Button
102102
label="Upload file"
103-
type={ButtonType.Secondary}
103+
type={ButtonType.Default}
104104
onClick={() => !disabled && inputFileRef?.current?.click()}
105105
className={classNames('text-sm !py-2 px-6 rounded-[10px] font-semibold w-[160px] !bg-transparent', {
106106
'cursor-not-allowed !enabled:hover:opacity-100': disabled,

0 commit comments

Comments
 (0)