From 2579e449be21f5fb36ce09e43501acb68e5be78a Mon Sep 17 00:00:00 2001 From: Serkan Reis Date: Fri, 4 Nov 2022 14:53:11 +0300 Subject: [PATCH] Clean up whitelist file contents prior to collection creation --- components/WhitelistUpload.tsx | 24 +++++++++++++++---- .../collections/creation/WhitelistDetails.tsx | 8 +++---- package.json | 2 +- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/components/WhitelistUpload.tsx b/components/WhitelistUpload.tsx index 3a8c115..dcf70b5 100644 --- a/components/WhitelistUpload.tsx +++ b/components/WhitelistUpload.tsx @@ -2,6 +2,8 @@ import clsx from 'clsx' import React from 'react' import { toast } from 'react-hot-toast' +import { isValidAddress } from '../utils/isValidAddress' + interface WhitelistUploadProps { onChange: (data: string[]) => void } @@ -9,16 +11,30 @@ interface WhitelistUploadProps { export const WhitelistUpload = ({ onChange }: WhitelistUploadProps) => { const onFileChange = (event: React.ChangeEvent) => { if (!event.target.files) return toast.error('Error opening file') - if (event.target.files[0].type !== 'text/plain') return toast.error('Invalid file type') + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (event.target.files[0]?.type !== 'text/plain') { + toast.error('Invalid file type') + return onChange([]) + } + if (event.target.files.length === 0) { + toast.error('No file selected') + return onChange([]) + } const reader = new FileReader() reader.onload = (e: ProgressEvent) => { const text = e.target?.result?.toString() let newline = '\n' if (text?.includes('\r')) newline = '\r' if (text?.includes('\r\n')) newline = '\r\n' - const data = text?.split(newline) - return onChange([...new Set(data?.filter((address) => address !== '') || [])]) + const cleanText = text?.toLowerCase().replace(/,/g, '').replace(/"/g, '').replace(/'/g, '').replace(/ /g, '') + const data = cleanText?.split(newline) + + return onChange([ + ...new Set( + data?.filter((address) => address !== '' && isValidAddress(address) && address.startsWith('stars')) || [], + ), + ]) } reader.readAsText(event.target.files[0]) } @@ -37,7 +53,7 @@ export const WhitelistUpload = ({ onChange }: WhitelistUploadProps) => { 'before:absolute before:inset-0 before:hover:bg-white/5 before:transition', )} id="whitelist-file" - multiple + multiple={false} onChange={onFileChange} type="file" /> diff --git a/components/collections/creation/WhitelistDetails.tsx b/components/collections/creation/WhitelistDetails.tsx index 19496b2..04cad0f 100644 --- a/components/collections/creation/WhitelistDetails.tsx +++ b/components/collections/creation/WhitelistDetails.tsx @@ -39,7 +39,7 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => { defaultValue: '', }) - const uniPriceState = useNumberInputState({ + const unitPriceState = useNumberInputState({ id: 'unit-price', name: 'unitPrice', title: 'Unit Price', @@ -72,7 +72,7 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => { whitelistType: whitelistState, contractAddress: whitelistAddressState.value, members: whitelistArray, - unitPrice: uniPriceState.value ? (Number(uniPriceState.value) * 1_000_000).toString() : '', + unitPrice: unitPriceState.value ? (Number(unitPriceState.value) * 1_000_000).toString() : '', startTime: startDate ? (startDate.getTime() * 1_000_000).toString() : '', endTime: endDate ? (endDate.getTime() * 1_000_000).toString() : '', perAddressLimit: perAddressLimitState.value, @@ -82,7 +82,7 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [ whitelistAddressState.value, - uniPriceState.value, + unitPriceState.value, memberLimitState.value, perAddressLimitState.value, startDate, @@ -160,7 +160,7 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
- +