7740841168
* Initial preview & upload logic * Refactor image & metadata selection & preview logic * Refactor image & metadata selection & preview logic - 2 * Establish metadata-modal connection * Metadata attribute manipulation * Successful metadata attribute removal & update * Successful metadata attribute addition & update * Update existing attributes success * Display image uri among metadata following the upload * Fix: buttons being displayed without an image overlay * Separate upload logic & incorporate useRefs * Clean up: removed unused imports and structures * Add radio buttons for upload service selection * Remove package-lock.json (duplicate .lock files) * Refactor upload logic & metadata modal * Utilize serviceType enum in upload logic * Utilize serviceType enum in upload logic - 2 * Implement user input for NFT.Storage & Pinata API keys * Update use an existing URI text * Remove upload_old.tsx * Fix: reset main metadata fields on metadata modal refresh * Fix: reset main metadata fields on metadata modal refresh - 2 * Make linter happy * Make linter happy - 2 * Move upload file under collections * Post-review update - 1 * Source Pinata endpoint URL from environment variables * Replace regular file arrays with states Co-authored-by: findolor <anakisci@gmail.com>
34 lines
904 B
TypeScript
34 lines
904 B
TypeScript
import { useMemo, useState } from 'react'
|
|
import { uid } from 'utils/random'
|
|
|
|
import type { Attribute } from './MetadataAttributes'
|
|
|
|
export function useMetadataAttributesState() {
|
|
const [record, setRecord] = useState<Record<string, Attribute>>(() => ({}))
|
|
|
|
const entries = useMemo(() => Object.entries(record), [record])
|
|
const values = useMemo(() => Object.values(record), [record])
|
|
|
|
function add(attribute: Attribute = { trait_type: '', value: '' }) {
|
|
setRecord((prev) => ({ ...prev, [uid()]: attribute }))
|
|
}
|
|
|
|
function update(key: string, attribute = record[key]) {
|
|
setRecord((prev) => ({ ...prev, [key]: attribute }))
|
|
}
|
|
|
|
function remove(key: string) {
|
|
return setRecord((prev) => {
|
|
const latest = { ...prev }
|
|
delete latest[key]
|
|
return latest
|
|
})
|
|
}
|
|
|
|
function reset() {
|
|
setRecord({})
|
|
}
|
|
|
|
return { entries, values, add, update, remove, reset }
|
|
}
|