import RadioButtonGroup from "./RadioButtonGroup.tsx"; import React, {useContext, useEffect, useState} from "react"; import CloseIcon from "../assets/close.svg?react" import BookmarkTreeNode = browser.bookmarks.BookmarkTreeNode; import {Settings} from "./Body.tsx"; import {getBrowser} from "../main.tsx"; /** * A component for the settings sidebar * * @param props.tree The full bookmarks tree (for use in the root selector) * @param props.isOpen State for weather the menu is open */ function SettingsEditor(props: {isOpen: [boolean, React.Dispatch>]}) { const [settings, setSettings] = useContext(Settings) const [open, setOpen] = props.isOpen; const [folders, setFolders] = useState() useEffect(() => { getFoldersFromTree().then(r => setFolders(r)); }, []); if (!folders) return; return (

Settings

Sort

{ setSettings({...settings, sort: e}) }}>

Background Type

setSettings({...settings, backgroundMode: e})}> {(() => { switch (settings.backgroundMode) { case "image": return (<>

Background Image URL

setSettings({...settings, backgroundImage: e.target.value})}/> ) case "color": return (<>

Background Color

setSettings({...settings, backgroundColor: e.target.value})}/> ) } })()}

Foreground Color

setSettings({...settings, foregroundColor: e.target.value})}/>

Root folder

Icon Cache

Editing

Open Folders

) } /** * Walks the tree and creates a list of the folders */ async function getFoldersFromTree() { let tree = await getBrowser().bookmarks.getTree(); let folderList: BookmarkTreeNode[] = []; rec(tree); function rec(tree: BookmarkTreeNode[]) { tree.forEach(item => { if (item.children) { folderList.push(item); rec(item.children); } }) } return folderList; } export default SettingsEditor;