1import { DatePicker, DatePickerComponents, DatePickerStyle, HStack, Image, List, Navigation, NavigationStack, Picker, Script, Section, Spacer, Text, Toggle, useMemo, useState, } from "scripting"
2
3const oneDay = 1000 * 60 * 60 * 24
4
5 function Example() {
6 const [date, setDate] = useState(() => Date.now())
7 const [startDateEnabled, setStartDateEnabled] = useState(false)
8 const [endDateEnabled, setEndDateEnabled] = useState(false)
9 const startDate = useMemo(() => Date.now() - oneDay * 7, [])
10 const endDate = useMemo(() => Date.now() + oneDay * 7, [])
11 const components = useMemo<DatePickerComponents[]>(() => [
12 'date',
13 'hourAndMinute'
14 ], [])
15 const [displayedComponents, setDisplayedComponents] = useState<DatePickerComponents[]>([
16 'date', 'hourAndMinute'
17 ])
18 const datePickerStyles = useMemo<DatePickerStyle[]>(() => [
19 'compact',
20 'graphical',
21 'wheel',
22 ], [])
23 const [selectedStyle, setSelectedStyle] = useState<DatePickerStyle>('graphical')
24
25 return <NavigationStack>
26 <List
27 navigationTitle={"DatePicker"}
28 navigationBarTitleDisplayMode={"inline"}
29 >
30 <Section>
31 <Toggle
32 title={"Use startDate"}
33 value={startDateEnabled}
34 onChanged={setStartDateEnabled}
35 />
36
37 <Toggle
38 title={"Use endDate"}
39 value={endDateEnabled}
40 onChanged={setEndDateEnabled}
41 />
42 {components.map(name =>
43 <HStack
44 contentShape={'rect'}
45 onTapGesture={() => {
46 if (displayedComponents.includes(name)) {
47 if (displayedComponents.length > 1) {
48 setDisplayedComponents(displayedComponents.filter(e => e !== name))
49 }
50 } else {
51 setDisplayedComponents([name, ...displayedComponents])
52 }
53 }}
54 >
55 <Text>Display: {name}</Text>
56 <Spacer />
57 {displayedComponents.includes(name)
58 ? <Image
59 systemName={"checkmark"}
60 foregroundStyle={"systemBlue"}
61 />
62 : undefined}
63 </HStack>
64 )}
65
66 <Picker
67 title={"DatePicker Style"}
68 value={selectedStyle}
69 onChanged={setSelectedStyle as any}
70 pickerStyle={'menu'}
71 >
72 {datePickerStyles.map(style =>
73 <Text tag={style}>{style}</Text>
74 )}
75 </Picker>
76 </Section>
77
78 <DatePicker
79 title={"DatePicker"}
80 value={date}
81 onChanged={setDate}
82 startDate={startDateEnabled ? startDate : undefined}
83 endDate={endDateEnabled ? endDate : undefined}
84 displayedComponents={displayedComponents}
85 datePickerStyle={selectedStyle}
86 />
87 </List>
88 </NavigationStack>
89}
90
91async function run() {
92 await Navigation.present({
93 element: <Example />
94 })
95
96 Script.exit()
97}
98
99run()