2024-04-28 00:02:24 -05:00
|
|
|
import './snippet_emulator.css'
|
2024-04-28 01:39:29 -05:00
|
|
|
import React, {useCallback, useState, useRef, useEffect} from 'react'
|
|
|
|
|
import {basicSetup, EditorView} from 'codemirror'
|
|
|
|
|
import {gruvboxDark} from 'cm6-theme-gruvbox-dark'
|
2024-04-28 00:02:24 -05:00
|
|
|
|
|
|
|
|
export default function ForgeEditor({ src, updateSrc }) {
|
2024-04-28 01:39:29 -05:00
|
|
|
const editor = useRef(null)
|
|
|
|
|
const container = useRef(null)
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (container.current) {
|
|
|
|
|
editor.current = new EditorView({
|
|
|
|
|
doc: src,
|
|
|
|
|
extensions: [
|
|
|
|
|
basicSetup,
|
|
|
|
|
gruvboxDark,
|
|
|
|
|
EditorView.updateListener.of((update) => {
|
|
|
|
|
updateSrc(update.state.doc.text.join('\n'))
|
|
|
|
|
})
|
|
|
|
|
],
|
|
|
|
|
parent: container.current
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}, [container.current])
|
|
|
|
|
|
2024-04-28 00:02:24 -05:00
|
|
|
const onChangeSrc = useCallback((e) => { updateSrc(e.target.value) }, [updateSrc])
|
2024-04-28 01:39:29 -05:00
|
|
|
return <div className='editor' ref={container}/>
|
2024-04-28 00:02:24 -05:00
|
|
|
}
|