import React, { useContext, useEffect, useState } from 'react'; import { Alert, Button, Card, Col, Container, Form, InputGroup, Row, } from 'react-bootstrap'; import { ClientContext } from '../../contexts/clientProvider'; import { apiFetch } from '../../utils/helpers'; import Loading from '../bootstrap/Loading'; import { load } from '../../main'; import { InfinityMintScript, InfinityMintScriptArguments, } from 'infinitymint/dist/app/interfaces'; import { Dictionary } from 'infinitymint/dist/app/helpers'; import Execute from './Execute'; export default function Scripts() { const client = useContext(ClientContext); const [loading, setLoading] = useState(true); const [scripts, setScripts] = useState([]); const [searchTerm, setSearchTerm] = useState(''); const [selectedScript, setSelectedScript] = useState(''); const [args, setArgs] = useState>({}); useEffect(() => { if (!client.loaded || !client.controller?.apiAccess) return; let main = async () => { setLoading(true); let scripts = await apiFetch('/meta/scripts'); setScripts(scripts.scripts); setLoading(false); }; main(); }, [client]); let tempScripts = [...scripts]; let hidden = 0; if (searchTerm.length > 0) { tempScripts = tempScripts.filter((script) => { if (script.name.toLowerCase().includes(searchTerm.toLowerCase())) { return true; } hidden++; return false; }); tempScripts.forEach((script) => { script.arguments.sort((a, b) => { if (a.optional && !b.optional) return 1; if (!a.optional && b.optional) return -1; return 0; }); }); } return (

Scripts

You can use this page to execute scripts inside of InfinityMint using the power of web sockets.

{loading ? ( ) : ( <> {!selectedScript ? ( <> Search Term { if (e.key === 'Enter') { if ( e.currentTarget .value === '' ) setSearchTerm(''); e.preventDefault(); e.stopPropagation(); return false; } return true; }} onChange={(e) => { setSearchTerm(e.target.value); }} aria-describedby="basic-addon3" /> {tempScripts.map((script) => { return ( <> {script.name} { script.description } {script.arguments ? script.arguments.map( ( argument ) => { return ( {argument.optional ? ( Optional ) : ( Required )} {argument.type !== 'boolean' ? ( { let tempArgs = { ...args, }; if ( !tempArgs[ script .name ] ) tempArgs[ script.name ] = {}; tempArgs[ script.name ][ argument.name ] = e.target.value; setArgs( tempArgs ); }} value={ argument?.value } placeholder={ argument.name } /> ) : ( <>
)}
); } ) : null}
); })}
) : ( <> { let selectedArgs = args[selectedScript] || {}; let defaultScriptArgs = scripts.find( (script) => script.name === selectedScript ).arguments; if (selectedArgs) { return defaultScriptArgs.map( (arg) => { if ( selectedArgs[ arg.name ] === undefined ) { return { ...arg, }; } return { ...arg, value: selectedArgs[ arg.name ], }; } ); } return Object.values(selectedArgs); })()} />
)} )}
); }