import React, { useState } from "react";
import { useSnapshot } from "valtio";
import { useTheme } from "next-themes";
import { useRouter } from "next/router";
import NextLink from "next/link";
import ReactTimeAgo from "react-time-ago";
import filesize from "filesize";
import Box from "./Box";
import Container from "./Container";
import state from "../state";
import wat from "../utils/wat-highlight";
import EditorNavigation from "./EditorNavigation";
import { Button, Text, Link, Flex, Tabs, Tab } from ".";
import Monaco from "./Monaco";
const FILESIZE_BREAKPOINTS: [number, number] = [2 * 1024, 5 * 1024];
const DeployEditor = () => {
const snap = useSnapshot(state);
const router = useRouter();
const { theme } = useTheme();
const [showContent, setShowContent] = useState(false);
const compiledFiles = snap.files.filter(file => file.compiledContent);
const activeFile = compiledFiles[snap.activeWat];
const renderNav = () => (
(state.activeWat = idx)}
>
{compiledFiles.map((file, index) => {
return ;
})}
);
const compiledSize = activeFile?.compiledContent?.byteLength || 0;
const color =
compiledSize > FILESIZE_BREAKPOINTS[1]
? "$error"
: compiledSize > FILESIZE_BREAKPOINTS[0]
? "$warning"
: "$success";
const isContentChanged =
activeFile && activeFile.compiledValueSnapshot !== activeFile.content;
// const hasDeployErrors = activeFile && activeFile.containsErrors;
const CompiledStatView = activeFile && (
Compiled {activeFile.name.split(".")[0] + ".wasm"}
{activeFile?.lastCompiled && (
)}
{activeFile.compiledContent?.byteLength && (
({filesize(activeFile.compiledContent.byteLength)})
)}
{activeFile.compiledContent?.byteLength &&
activeFile.compiledContent?.byteLength >= 64000 && (
File size is larger than 64kB, cannot set hook!
)}
{isContentChanged && (
File contents were changed after last compile, compile again to
incorporate your latest changes in the build.
)}
);
const NoContentView = !snap.loading && router.isReady && (
{`You haven't compiled any files yet, compile files on `}
develop view
);
const isContent =
snap.files?.filter(file => file.compiledWatContent).length > 0 &&
router.isReady;
return (
{!isContent ? (
NoContentView
) : !showContent ? (
CompiledStatView
) : (
{
monaco.languages.register({ id: "wat" });
monaco.languages.setLanguageConfiguration("wat", wat.config);
monaco.languages.setMonarchTokensProvider("wat", wat.tokens);
}}
onMount={editor => {
editor.updateOptions({
glyphMargin: true,
readOnly: true,
});
}}
theme={theme === "dark" ? "dark" : "light"}
overlay={
setShowContent(false)}>
Exit editor mode
}
/>
)}
);
};
export default DeployEditor;