Export/Import open edition token metadata

This commit is contained in:
Serkan Reis 2023-08-17 14:20:37 +03:00
parent 3fbebbe03d
commit 71e539a0b4
2 changed files with 43 additions and 4 deletions

View File

@ -13,6 +13,8 @@ export interface MetadataInputProps {
selectedAssetFile: File selectedAssetFile: File
selectedMetadataFile: File selectedMetadataFile: File
updateMetadataToUpload: (metadataFile: File) => void updateMetadataToUpload: (metadataFile: File) => void
onChange?: (metadata: any) => void
importedMetadata?: any
} }
export const MetadataInput = (props: MetadataInputProps) => { export const MetadataInput = (props: MetadataInputProps) => {
@ -151,8 +153,11 @@ export const MetadataInput = (props: MetadataInputProps) => {
useEffect(() => { useEffect(() => {
console.log(props.selectedMetadataFile?.name) console.log(props.selectedMetadataFile?.name)
if (props.selectedMetadataFile) void parseMetadata(props.selectedMetadataFile) if (props.selectedMetadataFile) {
else void parseMetadata(emptyMetadataFile) void parseMetadata(props.selectedMetadataFile)
} else if (!props.importedMetadata) {
void parseMetadata(emptyMetadataFile)
}
}, [props.selectedMetadataFile?.name]) }, [props.selectedMetadataFile?.name])
const nameStateMemo = useMemo(() => nameState, [nameState.value]) const nameStateMemo = useMemo(() => nameState, [nameState.value])
@ -163,7 +168,10 @@ export const MetadataInput = (props: MetadataInputProps) => {
useEffect(() => { useEffect(() => {
console.log('Update metadata') console.log('Update metadata')
if (metadata) generateUpdatedMetadata() if (metadata) {
generateUpdatedMetadata()
if (props.onChange) props.onChange(metadata)
}
console.log(metadata) console.log(metadata)
}, [ }, [
nameStateMemo.value, nameStateMemo.value,
@ -173,6 +181,31 @@ export const MetadataInput = (props: MetadataInputProps) => {
attributesStateMemo.entries, attributesStateMemo.entries,
]) ])
useEffect(() => {
if (props.importedMetadata) {
console.log('Imported metadata: ', props.importedMetadata)
nameState.onChange(props.importedMetadata.name || '')
descriptionState.onChange(props.importedMetadata.description || '')
externalUrlState.onChange(props.importedMetadata.external_url || '')
youtubeUrlState.onChange(props.importedMetadata.youtube_url || '')
if (props.importedMetadata?.attributes && props.importedMetadata?.attributes?.length > 0) {
attributesState.reset()
props.importedMetadata?.attributes?.forEach((attribute: { trait_type: string; value: string }) => {
attributesState.add({
trait_type: attribute.trait_type,
value: attribute.value,
})
})
} else {
attributesState.reset()
attributesState.add({
trait_type: '',
value: '',
})
}
}
}, [props.importedMetadata])
return ( return (
<div> <div>
<div className="grid grid-cols-2 mt-4 mr-4 ml-8 w-full max-w-6xl max-h-full no-scrollbar"> <div className="grid grid-cols-2 mt-4 mr-4 ml-8 w-full max-w-6xl max-h-full no-scrollbar">

View File

@ -42,6 +42,7 @@ export interface OffChainMetadataUploadDetailsDataProps {
tokenURI?: string tokenURI?: string
imageUrl?: string imageUrl?: string
openEditionMinterMetadataFile?: File openEditionMinterMetadataFile?: File
exportedMetadata?: any
} }
export const OffChainMetadataUploadDetails = ({ export const OffChainMetadataUploadDetails = ({
@ -55,6 +56,7 @@ export const OffChainMetadataUploadDetails = ({
const [uploadService, setUploadService] = useState<UploadServiceType>('nft-storage') const [uploadService, setUploadService] = useState<UploadServiceType>('nft-storage')
const [metadataFileArrayIndex, setMetadataFileArrayIndex] = useState(0) const [metadataFileArrayIndex, setMetadataFileArrayIndex] = useState(0)
const [refreshMetadata, setRefreshMetadata] = useState(false) const [refreshMetadata, setRefreshMetadata] = useState(false)
const [exportedMetadata, setExportedMetadata] = useState(undefined)
const [openEditionMinterMetadataFile, setOpenEditionMinterMetadataFile] = useState<File | undefined>() const [openEditionMinterMetadataFile, setOpenEditionMinterMetadataFile] = useState<File | undefined>()
@ -206,6 +208,7 @@ export const OffChainMetadataUploadDetails = ({
.replace(regex, '') .replace(regex, '')
.trim(), .trim(),
openEditionMinterMetadataFile, openEditionMinterMetadataFile,
exportedMetadata,
} }
onChange(data) onChange(data)
} catch (error: any) { } catch (error: any) {
@ -224,6 +227,7 @@ export const OffChainMetadataUploadDetails = ({
coverImageUrlState.value, coverImageUrlState.value,
refreshMetadata, refreshMetadata,
openEditionMinterMetadataFile, openEditionMinterMetadataFile,
exportedMetadata,
]) ])
useEffect(() => { useEffect(() => {
@ -246,7 +250,7 @@ export const OffChainMetadataUploadDetails = ({
setUploadMethod(importedOffChainMetadataUploadDetails.uploadMethod) setUploadMethod(importedOffChainMetadataUploadDetails.uploadMethod)
tokenUriState.onChange(importedOffChainMetadataUploadDetails.tokenURI || '') tokenUriState.onChange(importedOffChainMetadataUploadDetails.tokenURI || '')
coverImageUrlState.onChange(importedOffChainMetadataUploadDetails.imageUrl || '') coverImageUrlState.onChange(importedOffChainMetadataUploadDetails.imageUrl || '')
setOpenEditionMinterMetadataFile(importedOffChainMetadataUploadDetails.openEditionMinterMetadataFile) //setOpenEditionMinterMetadataFile(importedOffChainMetadataUploadDetails.openEditionMinterMetadataFile)
} }
}, [importedOffChainMetadataUploadDetails]) }, [importedOffChainMetadataUploadDetails])
@ -464,6 +468,8 @@ export const OffChainMetadataUploadDetails = ({
/> />
</div> </div>
<MetadataInput <MetadataInput
importedMetadata={importedOffChainMetadataUploadDetails?.exportedMetadata}
onChange={setExportedMetadata}
selectedAssetFile={assetFilesArray[0]} selectedAssetFile={assetFilesArray[0]}
selectedMetadataFile={metadataFilesArray[0]} selectedMetadataFile={metadataFilesArray[0]}
updateMetadataToUpload={updateOpenEditionMinterMetadataFile} updateMetadataToUpload={updateOpenEditionMinterMetadataFile}