add docgen instance. move onload to class method

pull/3542/head
Joseph Izang 2 years ago
parent 1303f3122c
commit 61294b2a69
  1. 94
      apps/remixdocgen/src/app/App.tsx
  2. 12
      apps/remixdocgen/src/app/docgen-client.ts

@ -1,105 +1,43 @@
import React, { useState, useEffect, useRef } from "react"; import React, { useState, useEffect, useMemo } from 'react'
import { PluginClient } from "@remixproject/plugin";
import { createClient } from "@remixproject/plugin-webview";
import { import {
CompilationFileSources,
CompilationResult, CompilationResult,
} from "@remixproject/plugin-api/"; } from '@remixproject/plugin-api/'
import { Status } from "@remixproject/plugin-utils";
import { AppContext } from "./AppContext";
import { Routes } from "./routes";
import { useLocalStorage } from "./hooks/useLocalStorage"
import './App.css'
import "./App.css"; import { DocGenClient } from './docgen-client'
import { ContractName, Documentation } from "../types";
export const getNewContractNames = (compilationResult: CompilationResult) => { export const getNewContractNames = (compilationResult: CompilationResult) => {
const compiledContracts = compilationResult.contracts; const compiledContracts = compilationResult.contracts
let result: string[] = []; let result: string[] = []
for (const file of Object.keys(compiledContracts)) { for (const file of Object.keys(compiledContracts)) {
const newContractNames = Object.keys(compiledContracts[file]); const newContractNames = Object.keys(compiledContracts[file])
result = [...result, ...newContractNames]; result = [...result, ...newContractNames]
} }
return result
return result; }
};
const sampleMap = new Map<ContractName, Documentation>();
const App = () => { const App = () => {
const [clientInstance, setClientInstance] = useState(undefined as any); const client = useMemo(() => new DocGenClient(), [])
const [contracts, setContracts] = useState(sampleMap); const [themeType, setThemeType] = useState<string>('dark');
const [sites, setSites] = useLocalStorage("sites", []);
const clientInstanceRef = useRef(clientInstance);
clientInstanceRef.current = clientInstance;
const contractsRef = useRef(contracts);
contractsRef.current = contracts;
const [themeType, setThemeType] = useState<string>("dark");
useEffect(() => { useEffect(() => {
console.log("Remix EthDoc loading..."); const watchThemeSwitch = async () => {
const client = createClient(new PluginClient())
const loadClient = async () => {
await client.onload();
setClientInstance(client);
console.log("Remix EthDoc Plugin has been loaded");
//await client.call("manager" as any, "activatePlugin", "ethdoc-viewer"); //await client.call("manager" as any, "activatePlugin", "ethdoc-viewer");
client.solidity.on(
"compilationFinished",
(
fileName: string,
source: CompilationFileSources,
languageVersion: string,
data: CompilationResult
) => {
console.log("New compilation received");
const existingMap = contractsRef.current;
const newMap = new Map([
...existingMap,
]);
const status: Status = {
key: "succeed",
type: "success",
title: "New documentation ready",
};
clientInstanceRef.current.emit("statusChanged", status);
setContracts(new Map());
}
);
const currentTheme = await client.call("theme", "currentTheme"); const currentTheme = await client.call('theme', 'currentTheme');
console.log("Current theme", currentTheme);
setThemeType(currentTheme.brightness || currentTheme.quality); setThemeType(currentTheme.brightness || currentTheme.quality);
client.on("theme", "themeChanged", (theme: any) => { client.on("theme", "themeChanged", (theme: any) => {
console.log("themeChanged");
setThemeType(theme.quality); setThemeType(theme.quality);
}); });
}; };
loadClient(); watchThemeSwitch();
}, []); }, [client]);
return ( return (
// <AppContext.Provider
// value={{
// clientInstance,
// contracts,
// setContracts,
// sites,
// setSites,
// themeType,
// }}
// >
// <Routes />
// </AppContext.Provider>
<div> <div>
<h1>Remix Docgen</h1> <h1>Remix Docgen</h1>
</div> </div>

@ -1,25 +1,25 @@
import { PluginClient } from '@remixproject/plugin' import { PluginClient } from '@remixproject/plugin'
import { createClient } from '@remixproject/plugin-webview' import { createClient } from '@remixproject/plugin-webview'
import { DocGen } from './plugins/docgen'
export class DocGenClient extends PluginClient { export class DocGenClient extends PluginClient {
private client private client
private docgen
constructor() { constructor() {
super() super()
this.client = createClient(this) this.client = createClient(this)
// this.docgen = new DocGen()
this.methods = ['generateDocs', 'publishDocs'] this.methods = ['generateDocs', 'publishDocs']
this.client.onload(async () => {
})
} }
loadClient() {
this.client.onload()
}
async generateDocs() { async generateDocs() {
console.log('docgen client generateDocs') console.log('docgen client generateDocs')
// await this.client.call('docgen', 'docgen', [])
} }
async publishDocs() { async publishDocs() {
console.log('docgen client publishDocs') console.log('docgen client publishDocs')
// await this.client.call('docgen', 'docgen', [])
} }
} }
Loading…
Cancel
Save