@@ -25,6 +25,15 @@ import {
2525 DatePickerModalContent ,
2626 TimePickerModal ,
2727} from '../../src' ;
28+ import { addMonths } from '../../src/Date/dateUtils' ;
29+
30+ const baseDate = new Date ( ) ;
31+ const rangeExcludeDateStart = new Date (
32+ baseDate . getFullYear ( ) ,
33+ baseDate . getMonth ( ) ,
34+ baseDate . getDate ( )
35+ ) ;
36+ const rangeExcludeDateEnd = addMonths ( new Date ( ) , 3 ) ;
2837
2938function App ( {
3039 onToggleDarkMode,
@@ -49,12 +58,15 @@ function App({
4958 startDate : Date | undefined ;
5059 endDate : Date | undefined ;
5160 } > ( { startDate : undefined , endDate : undefined } ) ;
61+ const [ excludedDates , setExcludedDates ] = React . useState < Date [ ] > ( [ ] ) ;
5262 const [ time , setTime ] = React . useState < {
5363 hours : number | undefined ;
5464 minutes : number | undefined ;
5565 } > ( { hours : undefined , minutes : undefined } ) ;
5666 const [ timeOpen , setTimeOpen ] = React . useState ( false ) ;
5767 const [ rangeOpen , setRangeOpen ] = React . useState ( false ) ;
68+ const [ rangeExcludeOpen , setRangeExcludeOpen ] = React . useState ( false ) ;
69+
5870 const [ singleOpen , setSingleOpen ] = React . useState ( false ) ;
5971
6072 const onDismissTime = React . useCallback ( ( ) => {
@@ -65,6 +77,10 @@ function App({
6577 setRangeOpen ( false ) ;
6678 } , [ setRangeOpen ] ) ;
6779
80+ const onDismissExcludeRange = React . useCallback ( ( ) => {
81+ setRangeExcludeOpen ( false ) ;
82+ } , [ setRangeExcludeOpen ] ) ;
83+
6884 const onDismissSingle = React . useCallback ( ( ) => {
6985 setSingleOpen ( false ) ;
7086 } , [ setSingleOpen ] ) ;
@@ -77,6 +93,14 @@ function App({
7793 [ setRangeOpen , setRange ]
7894 ) ;
7995
96+ const onChangeExcludeRange = React . useCallback (
97+ ( { excludedDates } : { excludedDates : Date [ ] } ) => {
98+ setRangeExcludeOpen ( false ) ;
99+ setExcludedDates ( excludedDates ) ;
100+ } ,
101+ [ setRangeExcludeOpen , setExcludedDates ]
102+ ) ;
103+
80104 const onChangeSingle = React . useCallback (
81105 ( params ) => {
82106 setSingleOpen ( false ) ;
@@ -102,7 +126,7 @@ function App({
102126 theme . dark && theme . mode === 'adaptive'
103127 ? overlay ( 3 , theme . colors . surface )
104128 : ( theme . colors . surface as any ) ;
105-
129+ console . log ( { excludedDates } ) ;
106130 return (
107131 < >
108132 < ScrollView
@@ -197,6 +221,7 @@ function App({
197221 onPress = { ( ) => setSingleOpen ( true ) }
198222 uppercase = { false }
199223 mode = "outlined"
224+ style = { styles . pickButton }
200225 >
201226 Pick single date
202227 </ Button >
@@ -205,23 +230,30 @@ function App({
205230 onPress = { ( ) => setRangeOpen ( true ) }
206231 uppercase = { false }
207232 mode = "outlined"
233+ style = { styles . pickButton }
208234 >
209235 Pick range
210236 </ Button >
211237 < View style = { styles . buttonSeparator } />
238+ < Button
239+ onPress = { ( ) => setRangeExcludeOpen ( true ) }
240+ uppercase = { false }
241+ mode = "outlined"
242+ style = { styles . pickButton }
243+ >
244+ Exclude dates in range
245+ </ Button >
246+ < View style = { styles . buttonSeparator } />
212247 < Button
213248 onPress = { ( ) => setTimeOpen ( true ) }
214249 uppercase = { false }
215250 mode = "outlined"
251+ style = { styles . pickButton }
216252 >
217253 Pick time
218254 </ Button >
219255 </ View >
220256 < Enter />
221-
222- { /*<DatePickerInput />*/ }
223- { /*<Enter />*/ }
224- { /*<DateRangeInput />*/ }
225257 </ Animated . View >
226258 < View style = { styles . content } >
227259 < Title > Inside page</ Title >
@@ -237,8 +269,8 @@ function App({
237269 < DatePickerModalContent
238270 mode = "range"
239271 onDismiss = { onDismissRange }
240- startDate = { undefined }
241- endDate = { undefined }
272+ startDate = { range . startDate }
273+ endDate = { range . endDate }
242274 onConfirm = { onChangeRange }
243275 />
244276 </ Animated . View >
@@ -250,13 +282,25 @@ function App({
250282 mode = "range"
251283 visible = { rangeOpen }
252284 onDismiss = { onDismissRange }
253- startDate = { undefined }
254- endDate = { undefined }
285+ startDate = { range . startDate }
286+ endDate = { range . endDate }
255287 onConfirm = { onChangeRange }
256- saveLabel = "Opslaan" // optional
257- label = "Selecteer periode" // optional
258- startLabel = "Van" // optional
259- endLabel = "Tot" // optional
288+ // saveLabel="Save" // optional
289+ // label="Select period" // optional
290+ // startLabel="From" // optional
291+ // endLabel="To" // optional
292+ // animationType="slide" // optional, default is slide on ios/android and none on web
293+ />
294+ < DatePickerModal
295+ mode = "excludeInRange"
296+ visible = { rangeExcludeOpen }
297+ onDismiss = { onDismissExcludeRange }
298+ startDate = { rangeExcludeDateStart }
299+ endDate = { rangeExcludeDateEnd }
300+ excludedDates = { excludedDates }
301+ onConfirm = { onChangeExcludeRange }
302+ // sunday, saturday
303+ disableWeekDays = { disabledWeekDays }
260304 // animationType="slide" // optional, default is slide on ios/android and none on web
261305 />
262306 < DatePickerModal
@@ -265,8 +309,8 @@ function App({
265309 onDismiss = { onDismissSingle }
266310 date = { undefined }
267311 onConfirm = { onChangeSingle }
268- saveLabel = "Save" // optional
269- label = "Select date" // optional
312+ // saveLabel="Save" // optional
313+ // label="Select date" // optional
270314 // animationType="slide" // optional, default is 'slide' on ios/android and 'none' on web
271315 />
272316
@@ -276,15 +320,17 @@ function App({
276320 onConfirm = { onConfirmTime }
277321 hours = { time . hours } // optional, default: current hours
278322 minutes = { time . minutes } // optional, default: current minutes
279- label = "Select time" // optional, default 'Select time'
280- cancelLabel = "Cancel" // optional, default: 'Cancel'
281- confirmLabel = "Ok" // optional, default: 'Ok'
323+ // label="Select time" // optional, default 'Select time'
324+ // cancelLabel="Cancel" // optional, default: 'Cancel'
325+ // confirmLabel="Ok" // optional, default: 'Ok'
282326 // animationType="fade" // optional, default is 'none'
283327 />
284328 </ >
285329 ) ;
286330}
287331
332+ const disabledWeekDays = [ 0 , 6 ] ;
333+
288334function Enter ( ) {
289335 return < View style = { styles . enter } /> ;
290336}
@@ -398,7 +444,8 @@ const styles = StyleSheet.create({
398444 } ,
399445 switchSpace : { flex : 1 } ,
400446 switchLabel : { fontSize : 16 } ,
401- buttons : { flexDirection : 'row' , marginTop : 24 } ,
447+ buttons : { flexDirection : 'row' , flexWrap : 'wrap' , marginTop : 24 } ,
448+ pickButton : { marginTop : 6 } ,
402449 buttonSeparator : { width : 6 } ,
403450 enter : { height : 12 } ,
404451 label : { width : 100 , fontSize : 16 } ,
0 commit comments