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