Refactor spyglass service and context

This commit is contained in:
Misode
2024-10-23 05:44:20 +02:00
parent c358c871da
commit a0f3e71000
6 changed files with 157 additions and 120 deletions

View File

@@ -1,11 +1,10 @@
import type { DocAndNode } from '@spyglassmc/core'
import { fileUtil } from '@spyglassmc/core'
import { useCallback, useEffect, useRef, useState } from 'preact/hooks'
import { useLocale, useVersion } from '../../contexts/index.js'
import { useDocAndNode } from '../../contexts/Spyglass.jsx'
import { useLocale } from '../../contexts/index.js'
import { useDocAndNode, useSpyglass } from '../../contexts/Spyglass.jsx'
import { useLocalStorage } from '../../hooks/index.js'
import { getSourceFormats, getSourceIndent, getSourceIndents, parseSource, sortData, stringifySource } from '../../services/index.js'
import type { Spyglass } from '../../services/Spyglass.js'
import { Store } from '../../Store.js'
import { message } from '../../Utils.js'
import { Btn, BtnMenu } from '../index.js'
@@ -18,7 +17,6 @@ interface Editor {
}
type SourcePanelProps = {
spyglass: Spyglass | undefined,
docAndNode: DocAndNode | undefined,
doCopy?: number,
doDownload?: number,
@@ -26,9 +24,9 @@ type SourcePanelProps = {
copySuccess: () => unknown,
onError: (message: string | Error) => unknown,
}
export function SourcePanel({ spyglass, docAndNode, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {
export function SourcePanel({ docAndNode, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {
const { locale } = useLocale()
const { version } = useVersion()
const { service } = useSpyglass()
const [indent, setIndent] = useState(Store.getIndent())
const [format, setFormat] = useState(Store.getFormat())
const [sort, setSort] = useLocalStorage('misode_output_sort', 'schema')
@@ -75,10 +73,10 @@ export function SourcePanel({ spyglass, docAndNode, doCopy, doDownload, doImport
if (!editor.current) return
const value = editor.current.getValue()
if (value.length === 0) return
if (!spyglass || !docAndNode) return
if (!service || !docAndNode) return
try {
const data = await parseSource(value, format)
await spyglass.writeFile(version, docAndNode.doc.uri, JSON.stringify(data))
await service.writeFile(docAndNode.doc.uri, JSON.stringify(data))
} catch (e) {
if (e instanceof Error) {
e.message = `Error importing: ${e.message}`
@@ -89,7 +87,7 @@ export function SourcePanel({ spyglass, docAndNode, doCopy, doDownload, doImport
console.error(e)
}
}
}, [spyglass, version, docAndNode, text, indent, format, sort, highlighting])
}, [service, docAndNode, text, indent, format, sort, highlighting])
useEffect(() => {
if (highlighting) {