1
1
import { merge } from 'lodash' ;
2
- import React , { CSSProperties } from 'react' ;
2
+ import React , { CSSProperties , FC , useEffect } from 'react' ;
3
3
// eslint-disable-next-line no-restricted-imports
4
4
import { useDispatch , useSelector } from 'react-redux' ;
5
5
@@ -23,31 +23,48 @@ const FnText: React.FC = () => {
23
23
return < > { FNDashboard ? < span style = { { ...FN_TEXT_STYLE , color : theme . colors . warning . main } } > UTC</ span > : '' } </ > ;
24
24
} ;
25
25
26
- export const TimePickerWithHistory : React . FC < Props > = ( props ) => {
26
+ export const TimePickerWithHistory : FC < Props > = ( props ) => (
27
+ < LocalStorageValueProvider < TimeRange [ ] > storageKey = { LOCAL_STORAGE_KEY } defaultValue = { [ ] } >
28
+ { ( values , onSaveToStore ) => {
29
+ return < Picker values = { values } onSaveToStore = { onSaveToStore } pickerProps = { props } /> ;
30
+ } }
31
+ </ LocalStorageValueProvider >
32
+ ) ;
33
+
34
+ export interface PickerProps {
35
+ values : TimeRange [ ] ;
36
+ onSaveToStore : ( value : TimeRange [ ] ) => void ;
37
+ pickerProps : Props ;
38
+ }
39
+
40
+ export const Picker : FC < PickerProps > = ( { values, onSaveToStore, pickerProps } ) => {
27
41
const { fnGlobalTimeRange } = useSelector < StoreState , FnGlobalState > ( ( { fnGlobalState } ) => fnGlobalState ) ;
28
42
const dispatch = useDispatch ( ) ;
29
43
44
+ useEffect ( ( ) => {
45
+ if ( ! fnGlobalTimeRange ) {
46
+ return ;
47
+ }
48
+ onAppendToHistory ( fnGlobalTimeRange , values , onSaveToStore ) ;
49
+ pickerProps . onChange ( fnGlobalTimeRange ) ;
50
+ // eslint-disable-next-line react-hooks/exhaustive-deps
51
+ } , [ ] ) ;
52
+
30
53
return (
31
- < LocalStorageValueProvider < TimeRange [ ] > storageKey = { LOCAL_STORAGE_KEY } defaultValue = { [ ] } >
32
- { ( values , onSaveToStore ) => {
33
- return (
34
- < TimeRangePicker
35
- { ...merge ( { } , props , { value : fnGlobalTimeRange || props . value } ) }
36
- history = { convertIfJson ( values ) }
37
- onChange = { ( value ) => {
38
- dispatch (
39
- updatePartialFnStates ( {
40
- fnGlobalTimeRange : value ,
41
- } )
42
- ) ;
43
- onAppendToHistory ( value , values , onSaveToStore ) ;
44
- props . onChange ( value ) ;
45
- } }
46
- fnText = { < FnText /> }
47
- />
54
+ < TimeRangePicker
55
+ { ...merge ( { } , pickerProps , { value : fnGlobalTimeRange || pickerProps . value } ) }
56
+ history = { convertIfJson ( values ) }
57
+ onChange = { ( value ) => {
58
+ dispatch (
59
+ updatePartialFnStates ( {
60
+ fnGlobalTimeRange : value ,
61
+ } )
48
62
) ;
63
+ onAppendToHistory ( value , values , onSaveToStore ) ;
64
+ pickerProps . onChange ( value ) ;
49
65
} }
50
- </ LocalStorageValueProvider >
66
+ fnText = { < FnText /> }
67
+ />
51
68
) ;
52
69
} ;
53
70
@@ -69,6 +86,7 @@ function onAppendToHistory(toAppend: TimeRange, values: TimeRange[], onSaveToSto
69
86
if ( ! isAbsolute ( toAppend ) ) {
70
87
return ;
71
88
}
89
+
72
90
const toStore = limit ( [ toAppend , ...values ] ) ;
73
91
onSaveToStore ( toStore ) ;
74
92
}
0 commit comments