import { AppNavigator, AppStatusBar, AppViewProps, createApp, getEditor, NavigatorProps, useBit, useSearchState } from '@o/kit'
import { Breadcrumb, Breadcrumbs, Dock, DockButton, ProvideTreeList, randomAdjective, randomNoun, Stack, StatusBarText, TreeList, useCreateTreeList, useDebounce, useTreeList, View } from '@o/ui'
import { capitalize } from 'lodash'
import pluralize from 'pluralize'
import React, { memo, useCallback, useRef } from 'react'
import ListsApi from './api.node'
const Editor = getEditor()
export default createApp({
id: 'lists',
name: 'Lists',
icon: 'list',
iconColors: ['rgb(57, 204, 204)', 'rgb(61, 153, 112)'],
api: ListsApi,
app: () => {
const treeList = useCreateTreeList(id)
return (
)
},
})
const id = 'lists'
export function ListsAppIndex(props: NavigatorProps) {
const treeList = useTreeList()
useSearchState({
onChange(search) {
if (search.query.length) {
treeList.addFolder(search.query)
}
},
onEvent: 'enter',
})
return (
<>
{
treeList.addItem({
name: `${capitalize(randomAdjective())} ${capitalize(randomNoun())}`,
})
}, [])}
/>
>
)
}
function ListsAppMain(props: AppViewProps) {
const treeList = useTreeList()
const [bit, updateBit] = useBit(`main-content-${props.id}`, {
defaultValue: {
title: props.title,
},
})
const ignoreFirst = useRef(true)
const handleChange = useDebounce(getVal => {
if (ignoreFirst.current) {
ignoreFirst.current = false
return
}
const val = getVal()
updateBit(next => {
next.body = val
const title = val.split('\n')[0].slice(2, Infinity)
next.title = title
treeList.updateSelectedItem({ name: title })
})
}, 300)
if (props.subType === 'folder') {
return
}
return (
{/* TODO put this in a modal when you click a plus here */}
{/* */}
)
}
function ListsAppMainFolder(props: AppViewProps) {
const treeList = useCreateTreeList(id, {
rootItemID: props.subId ? +props.subId : 0,
persist: 'tree',
})
return (
{
console.log('dropped an item', items)
treeList.addItemsFromDrop(items)
}, [])}
/>
)
}
const ListAppStatusBar = memo(() => {
const treeList = useCreateTreeList(id)
const numItems = treeList.state.currentItem.children
? treeList.state.currentItem.children.length
: 0
return (
{treeList.state.history.map(item => (
{item.name}
))}
{numItems} {pluralize('item', numItems)}
)
})