@@ -2,60 +2,20 @@ import { h } from 'preact';
2
2
import styles from './App.module.css' ;
3
3
import { useEnv } from '../../../../shared/components/EnvironmentProvider.js' ;
4
4
import { Header } from './Header.js' ;
5
- import { batch , useSignal , useSignalEffect } from '@preact/signals' ;
6
5
import { Results } from './Results.js' ;
7
6
import { useRef } from 'preact/hooks' ;
8
- import { useHistory } from '../HistoryProvider.js' ;
9
- import { generateHeights } from '../utils.js' ;
10
7
import { Sidebar } from './Sidebar.js' ;
11
-
12
- /**
13
- * @typedef {object } Results
14
- * @property {import('../../types/history').HistoryItem[] } items
15
- * @property {number[] } heights
16
- */
8
+ import { useGlobalState } from '../global-state/GlobalStateProvider.js' ;
9
+ import { useSelected } from '../global-state/SelectionProvider.js' ;
10
+ import { useGlobalHandlers } from '../global-state/HistoryServiceProvider.js' ;
17
11
18
12
export function App ( ) {
19
13
const { isDarkMode } = useEnv ( ) ;
20
14
const containerRef = useRef ( /** @type {HTMLElement|null } */ ( null ) ) ;
21
- const { initial, service } = useHistory ( ) ;
22
-
23
- // NOTE: These states will get extracted out later, once I know all the use-cases
24
- const ranges = useSignal ( initial . ranges . ranges ) ;
25
- const term = useSignal ( 'term' in initial . query . info . query ? initial . query . info . query . term : '' ) ;
26
- const results = useSignal ( {
27
- items : initial . query . results ,
28
- heights : generateHeights ( initial . query . results ) ,
29
- } ) ;
30
-
31
- useSignalEffect ( ( ) => {
32
- const unsub = service . onResults ( ( data ) => {
33
- batch ( ( ) => {
34
- if ( 'term' in data . info . query && data . info . query . term !== null ) {
35
- term . value = data . info . query . term ;
36
- }
37
- results . value = {
38
- items : data . results ,
39
- heights : generateHeights ( data . results ) ,
40
- } ;
41
- } ) ;
42
- } ) ;
43
-
44
- // Subscribe to changes in the 'ranges' data and reflect the updates into the UI
45
- const unsubRanges = service . onRanges ( ( data ) => {
46
- ranges . value = data . ranges ;
47
- } ) ;
48
- return ( ) => {
49
- unsub ( ) ;
50
- unsubRanges ( ) ;
51
- } ;
52
- } ) ;
15
+ const { ranges, term, results } = useGlobalState ( ) ;
16
+ const selected = useSelected ( ) ;
53
17
54
- useSignalEffect ( ( ) => {
55
- term . subscribe ( ( t ) => {
56
- containerRef . current ?. scrollTo ( 0 , 0 ) ;
57
- } ) ;
58
- } ) ;
18
+ useGlobalHandlers ( ) ;
59
19
60
20
return (
61
21
< div class = { styles . layout } data-theme = { isDarkMode ? 'dark' : 'light' } >
@@ -66,7 +26,7 @@ export function App() {
66
26
< Sidebar ranges = { ranges } />
67
27
</ aside >
68
28
< main class = { styles . main } ref = { containerRef } data-main-scroller data-term = { term } >
69
- < Results results = { results } />
29
+ < Results results = { results } selected = { selected } />
70
30
</ main >
71
31
</ div >
72
32
) ;
0 commit comments