remix-project mirror
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
remix-project/src/App.tsx

103 lines
2.7 KiB

5 years ago
import React, { useState, useEffect, useRef } from "react";
5 years ago
import {
createIframeClient,
CompilationFileSources,
CompilationResult,
5 years ago
Status,
} from "@remixproject/plugin";
5 years ago
5 years ago
import { AppContext } from "./AppContext";
import { Routes } from "./routes";
import { useLocalStorage } from "./hooks/useLocalStorage";
import { createDocumentation } from "./utils/utils";
5 years ago
5 years ago
import "./App.css";
import { ContractName, Documentation } from "./types";
5 years ago
5 years ago
const devMode = { port: 8080 };
5 years ago
export const getNewContractNames = (compilationResult: CompilationResult) => {
5 years ago
const compiledContracts = compilationResult.contracts;
let result: string[] = [];
5 years ago
for (const file of Object.keys(compiledContracts)) {
5 years ago
const newContractNames = Object.keys(compiledContracts[file]);
result = [...result, ...newContractNames];
5 years ago
}
5 years ago
return result;
};
5 years ago
5 years ago
const sampleMap = new Map<ContractName, Documentation>();
5 years ago
const App = () => {
5 years ago
const [clientInstance, setClientInstance] = useState(undefined as any);
const [contracts, setContracts] = useState(sampleMap);
const [sites, setSites] = useLocalStorage("sites", []);
const clientInstanceRef = useRef(clientInstance);
clientInstanceRef.current = clientInstance;
const contractsRef = useRef(contracts);
contractsRef.current = contracts;
5 years ago
useEffect(() => {
5 years ago
console.log("Remix EthDoc loading...");
const client = createIframeClient({ devMode });
5 years ago
const loadClient = async () => {
5 years ago
await client.onload();
setClientInstance(client);
console.log("Remix EthDoc Plugin has been loaded");
client.solidity.on(
"compilationFinished",
(
fileName: string,
source: CompilationFileSources,
languageVersion: string,
data: CompilationResult
) => {
console.log("New compilation received");
const existingMap = contractsRef.current;
const newContractsMapWithDocumentation = createDocumentation(
fileName,
data
);
const newMap = new Map([
...existingMap,
...newContractsMapWithDocumentation,
]);
console.log("New Map", newMap);
const status: Status = {
key: "succeed",
type: "success",
title: "New documentation ready",
};
clientInstanceRef.current.emit("statusChanged", status);
setContracts(newMap);
}
);
};
loadClient();
}, []);
5 years ago
return (
<AppContext.Provider
value={{
clientInstance,
contracts,
setContracts,
sites,
5 years ago
setSites,
}}
>
5 years ago
<Routes />
</AppContext.Provider>
5 years ago
);
};
5 years ago
5 years ago
export default App;