diff --git a/livestore/livestore/examples/linearlite/src/components/contextmenu/FilterMenu.tsx b/vulcan/linearite/src/components/contextmenu/FilterMenu.tsx index 337bee0..b2fc4f1 100644 --- a/livestore/livestore/examples/linearlite/src/components/contextmenu/FilterMenu.tsx +++ b/vulcan/linearite/src/components/contextmenu/FilterMenu.tsx @@ -4,9 +4,11 @@ import { ContextMenuTrigger } from '@firefox-devtools/react-contextmenu' import { BsCheck2 } from 'react-icons/bs' import { Menu } from './menu' import { PriorityOptions, PriorityType, StatusOptions, StatusType } from '../../types/issue' -import { querySQL, sql } from '@livestore/livestore' -import { FilterState } from '../../domain/schema' -import { useQuery, useStore } from '@livestore/livestore/react' +import { decodeFilterState } from '../../domain/SchemaType' +import { first, useDB, useQuery2 } from '@vlcn.io/react' +import { queries } from '../../domain/queries' +import { DBName } from '../../domain/Schema' +import { mutations } from '../../domain/mutations' interface Props { id: string @@ -14,16 +16,10 @@ interface Props { className?: string } -const filterState$ = querySQL<{ value: string }>((_) => sql`SELECT * FROM app_state WHERE "key" = 'filter_state'`) - .getFirstRow({ - defaultValue: { value: '{}' }, - }) - .pipe((row) => JSON.parse(row.value)) - function FilterMenu({ id, button, className }: Props) { const [keyword, setKeyword] = useState('') - const filterState = useQuery(filterState$) - const { store } = useStore() + const ctx = useDB(DBName) + const filterState = decodeFilterState(first(useQuery2(ctx, queries.filterState).data)) let priorities = PriorityOptions if (keyword !== '') { @@ -67,13 +63,10 @@ function FilterMenu({ id, button, className }: Props) { } else { newPriority.push(priority) } - store.applyEvent('upsertAppAtom', { - key: 'filter_state', - value: JSON.stringify({ - ...filterState, - priority: newPriority, - }), - }) + mutations.putFilterState(ctx.db, { + ...filterState, + priority: newPriority, + }); } const handleStatusSelect = (status: StatusType) => { @@ -84,13 +77,10 @@ function FilterMenu({ id, button, className }: Props) { } else { newStatus.push(status) } - store.applyEvent('upsertAppAtom', { - key: 'filter_state', - value: JSON.stringify({ - ...filterState, - status: newStatus, - }), - }) + mutations.putFilterState(ctx.db, { + ...filterState, + status: newStatus, + }); } return (