import * as React from 'react';
import { useState, useEffect } from 'react';
import './inventory.css'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faLock, faLockOpen, faBook, faHammer, faBan } from '@fortawesome/free-solid-svg-icons'
import Markdown from './Markdown';
import { useLoadDocQuery, ComputedInventoryItem } from '../state/api';
export function Inventory({ tactics, lemmas, definitions, setInventoryDoc } :
{lemmas: ComputedInventoryItem[],
tactics: ComputedInventoryItem[],
definitions: ComputedInventoryItem[],
setInventoryDoc: (inventoryDoc: {name: string, type: string}) => void}) {
function openDoc(name, type) {
setInventoryDoc({name, type})
}
return (
{/* TODO: Click on Tactic: show info
TODO: click on paste icon -> paste into command line */}
Tactics
Definitions
Lemmas
)
}
function InventoryList({items, docType, openDoc} : {items: ComputedInventoryItem[], docType: string, openDoc(name: string, type: string): void}) {
const categorySet = new Set()
for (let item of items) {
categorySet.add(item.category)
}
const categories = Array.from(categorySet).sort()
const [tab, setTab] = useState(categories[0]);
return <>
{categories.length > 1 &&
{categories.map((cat) =>
{ setTab(cat) }}>{cat}
)}
}
{ [...items].sort(
// sort unavailable tactics/lemmas/def to the back.
(x, y) => +x.locked - +y.locked || +x.disabled - +y.disabled
).map(item => {
if (tab == item.category) {
return {openDoc(item.name, docType)}}
name={item.name} displayName={item.displayName} locked={item.locked} disabled={item.disabled} />
}
}) }
>
}
function InventoryItem({name, displayName, locked, disabled, showDoc}) {
const icon = locked ? :
disabled ? : ""
const className = locked ? "locked" : disabled ? "disabled" : ""
const handleClick = () => {
if (!locked && !disabled) {
showDoc()
}
}
return {icon} {displayName}
}
export function Documentation({name, type}) {
const doc = useLoadDocQuery({type: type, name: name})
return <>
{doc.data?.displayName}
{doc.data?.text}
>
}