ordering-ui-admin-external 1.43.20 → 1.43.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/_bundles/{ordering-ui-admin.93ac710b95858715130d.js → ordering-ui-admin.3f67563d0aa434e9729f.js} +2 -2
  2. package/_modules/components/Delivery/DriverGroupSelectorHeader/index.js +130 -0
  3. package/_modules/components/Delivery/DriverGroupSelectorHeader/styles.js +32 -0
  4. package/_modules/components/Delivery/DriversGroupGeneralForm/index.js +14 -5
  5. package/_modules/components/Delivery/DriversTimeDisplay/DriverBlockAddForm.js +212 -0
  6. package/_modules/components/Delivery/DriversTimeDisplay/UserList.js +226 -0
  7. package/_modules/components/Delivery/DriversTimeDisplay/index.js +485 -0
  8. package/_modules/components/Delivery/DriversTimeDisplay/styles.js +198 -0
  9. package/_modules/components/Delivery/index.js +8 -1
  10. package/_modules/components/Settings/SettingsLogs/index.js +28 -16
  11. package/_modules/components/SidebarMenu/index.js +30 -24
  12. package/_modules/components/Stores/BusinessDetails/index.js +2 -0
  13. package/_modules/components/Stores/BusinessSummary/index.js +16 -1
  14. package/_modules/index.js +6 -0
  15. package/_modules/utils/index.js +4 -2
  16. package/package.json +3 -2
  17. package/src/components/Delivery/DriverGroupSelectorHeader/index.js +124 -0
  18. package/src/components/Delivery/DriverGroupSelectorHeader/styles.js +97 -0
  19. package/src/components/Delivery/DriversGroupGeneralForm/index.js +12 -2
  20. package/src/components/Delivery/DriversTimeDisplay/DriverBlockAddForm.js +271 -0
  21. package/src/components/Delivery/DriversTimeDisplay/UserList.js +292 -0
  22. package/src/components/Delivery/DriversTimeDisplay/index.js +535 -0
  23. package/src/components/Delivery/DriversTimeDisplay/styles.js +853 -0
  24. package/src/components/Delivery/index.js +2 -0
  25. package/src/components/Settings/SettingsLogs/index.js +13 -0
  26. package/src/components/SidebarMenu/index.js +9 -1
  27. package/src/components/Stores/BusinessDetails/index.js +2 -0
  28. package/src/components/Stores/BusinessSummary/index.js +29 -8
  29. package/src/index.js +2 -0
  30. package/src/utils/index.js +54 -0
  31. package/template/app.js +4 -1
  32. package/template/components/ListenPageChanges/index.js +1 -0
  33. package/template/helmetdata.json +7 -0
  34. package/template/pages/DriverTimeDisplay/index.js +12 -0
  35. /package/_bundles/{ordering-ui-admin.93ac710b95858715130d.js.LICENSE.txt → ordering-ui-admin.3f67563d0aa434e9729f.js.LICENSE.txt} +0 -0
@@ -0,0 +1,535 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { useLanguage, useConfig, CalendarDriversList as CalendarDriversListController } from 'ordering-components-admin-external'
3
+ import { List as MenuIcon, ChevronRight } from 'react-bootstrap-icons'
4
+ import { Button, IconButton } from '../../../styles'
5
+ import { useInfoShare } from '../../../contexts/InfoShareContext'
6
+ import { Alert, Modal, SpinnerLoader } from '../../Shared'
7
+ import { DeliveryUsersListing } from './UserList'
8
+ import { DriverGroupSelectHeader } from '../DriverGroupSelectorHeader'
9
+ import { AnalyticsCalendar } from '../../BusinessIntelligence/AnalyticsCalendar'
10
+ import { DriverBlockAddFormUI } from './DriverBlockAddForm'
11
+ import { RRule } from 'rrule'
12
+ import moment from 'moment'
13
+
14
+ import {
15
+ Container,
16
+ SpinnerLoaderWrapper,
17
+ Header,
18
+ HeaderTitleContainer,
19
+ DriverGroupName,
20
+ DriverGroupSelectorWrapper,
21
+ HeaderWrapper,
22
+ DriversGroupCalendarWrapper,
23
+ TimeOptions,
24
+ DeleteBlock,
25
+ DeleteButtons,
26
+ DeleteWrapper,
27
+ OrderStatusTypeSelectWrapper,
28
+ StackedBlock
29
+ } from './styles'
30
+ import { Select } from '../../../styles/Select'
31
+
32
+ const DriversTimeDisplayUI = (props) => {
33
+ const {
34
+ driversList,
35
+ paginationProps,
36
+ getDrivers,
37
+ setSelectedGroup,
38
+ setIsTimeChangeError,
39
+ isTimeChangeError,
40
+ handleChangeScheduleTime,
41
+ scheduleState,
42
+ selectedGroup,
43
+ setScheduleState,
44
+ setDate,
45
+ setSelectedUntilDate,
46
+ selectedDate,
47
+ selectedUntilDate,
48
+ setSelectedDate,
49
+ setSelectedBlock,
50
+ selectedBlock,
51
+ timeErrorList,
52
+ openModal,
53
+ setOpenModal,
54
+ handleAddBlockTime,
55
+ deleteBlockTime,
56
+ setOpenDeleteModal,
57
+ openDeleteModal,
58
+ setPropagation,
59
+ propagation,
60
+ setShowBreakBlock,
61
+ showBreakBlock,
62
+ date,
63
+ editBlockTime,
64
+ setOpenEditModal,
65
+ openEditModal,
66
+ setStackEventsState,
67
+ stackEventsState,
68
+ setAlertState,
69
+ alertState,
70
+ handleSelectedUntilDate,
71
+ ruleState,
72
+ setRuleState,
73
+ handleSetInitialStates
74
+ } = props
75
+
76
+ const [, t] = useLanguage()
77
+ const [{ configs }] = useConfig()
78
+
79
+ const [{ isCollapse }, { handleMenuCollapse }] = useInfoShare()
80
+ const [showSelectHeader, setShowSelectHeader] = useState(false)
81
+ const [scheduleOptions, setScheduleOptions] = useState([])
82
+ const [scheduleOptionValues, setScheduleOptionValues] = useState([])
83
+
84
+ const rule = ruleState?.freq ? new RRule(ruleState).toString() : null
85
+ const is12Hours = configs?.general_hour_format?.value?.includes('hh:mm')
86
+ const hourFormat = configs?.general_hour_format?.value
87
+
88
+ const rruleList = [
89
+ { value: null, name: t('NONE', 'None') },
90
+ { value: RRule.WEEKLY, name: t('WEEKLY', 'Weekly') },
91
+ { value: RRule.DAILY, name: t('DAILY', 'Daily') }
92
+ ]
93
+
94
+ const rruleDayList = [
95
+ { value: RRule.SU, name: t('SUN', 'Sun') },
96
+ { value: RRule.MO, name: t('MON', 'Mon') },
97
+ { value: RRule.TU, name: t('TUE', 'Tue') },
98
+ { value: RRule.WE, name: t('WED', 'Wed') },
99
+ { value: RRule.TH, name: t('THU', 'Thu') },
100
+ { value: RRule.FR, name: t('FRI', 'Fri') },
101
+ { value: RRule.SA, name: t('SAT', 'Sat') }
102
+ ]
103
+
104
+ const propagationList = [
105
+ {
106
+ value: 'none',
107
+ content: t('NONE', 'None')
108
+ },
109
+ {
110
+ value: 'all',
111
+ content: t('ALL', 'All')
112
+ },
113
+ {
114
+ value: 'from_now',
115
+ content: t('FROM_NOW', 'From now')
116
+ },
117
+ {
118
+ value: 'from_event',
119
+ content: t('FROM_EVENT', 'From event')
120
+ }
121
+ ]
122
+
123
+ const changeDriverGroupState = (_driverGroup) => {
124
+ setShowSelectHeader(false)
125
+ setSelectedGroup(_driverGroup)
126
+ }
127
+
128
+ const handleChangeDate = (date1, date2) => {
129
+ const diff = moment(date2).diff(date1, 'days')
130
+ if (diff > 31) {
131
+ setIsTimeChangeError({
132
+ state: true,
133
+ error: 4
134
+ })
135
+ } else {
136
+ setDate([moment(date1).startOf('day').utc().format('YYYY-MM-DD HH:mm:ss'), moment(date2).endOf('day').utc().format('YYYY-MM-DD HH:mm:ss')])
137
+ }
138
+ }
139
+
140
+ const handleUntilDate = (_date) => {
141
+ const diff = moment(_date).diff(selectedDate, 'months', true)
142
+ if (moment(_date) < moment(selectedDate) || diff > 2) {
143
+ setIsTimeChangeError({
144
+ state: true,
145
+ error: 5
146
+ })
147
+ } else {
148
+ handleSelectedUntilDate(_date)
149
+ setSelectedUntilDate(_date)
150
+ }
151
+ }
152
+
153
+ const closeAlert = () => {
154
+ setIsTimeChangeError({
155
+ state: false,
156
+ error: null
157
+ })
158
+ setAlertState({
159
+ open: false,
160
+ content: []
161
+ })
162
+ }
163
+
164
+ const generateHourList = () => {
165
+ const _scheduleOptions = []
166
+ const isTodayOrPastDate = moment(selectedDate).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD')
167
+ const now = new Date()
168
+ for (let hour = 0; hour < 24; hour++) {
169
+ /**
170
+ * Continue if is today and hour is smaller than current hour
171
+ */
172
+ if (isTodayOrPastDate && hour < now?.getHours()) continue
173
+ let hh = ''
174
+ let meridian = ''
175
+ if (!is12Hours) hh = hour < 10 ? `0${hour}` : hour
176
+ else {
177
+ if (hour === 0) {
178
+ hh = '12'
179
+ meridian = ' ' + t('AM', 'AM')
180
+ } else if (hour > 0 && hour < 12) {
181
+ hh = (hour < 10 ? '0' + hour : hour)
182
+ meridian = ' ' + t('AM', 'AM')
183
+ } else if (hour === 12) {
184
+ hh = '12'
185
+ meridian = ' ' + t('PM', 'PM')
186
+ } else {
187
+ hh = ((hour - 12 < 10) ? '0' + (hour - 12) : (hour - 12))
188
+ meridian = ' ' + t('PM', 'PM')
189
+ }
190
+ }
191
+ for (let min = 0; min < 4; min++) {
192
+ /**
193
+ * Continue if is today and hour is equal to current hour and minutes is smaller than current minute
194
+ */
195
+ if (isTodayOrPastDate && hour === now?.getHours() && (min * 15) <= now.getMinutes()) continue
196
+ _scheduleOptions.push({
197
+ value: (hour < 10 ? `0${hour}` : hour) + ':' + (min === 0 ? '00' : min * 15),
198
+ content: (
199
+ <TimeOptions>
200
+ {is12Hours ? (
201
+ <>
202
+ {hh}:{min === 0 ? '00' : min * 15} {meridian}
203
+ </>
204
+ ) : (
205
+ <>
206
+ {hh} : {min === 0 ? '00' : min * 15}
207
+ </>
208
+ )}
209
+ </TimeOptions>
210
+ )
211
+ })
212
+ }
213
+ }
214
+
215
+ _scheduleOptions.push({
216
+ value: '23:59',
217
+ content: (
218
+ <TimeOptions>{is12Hours ? '11:59 PM' : '23 : 59'}</TimeOptions>
219
+ )
220
+ })
221
+ const breakEnd = selectedBlock?.block?.break_end || selectedBlock?.block?.end
222
+ const breakStart = selectedBlock?.block?.break_start || selectedBlock?.block?.start
223
+ if (selectedBlock?.block?.end && !_scheduleOptions.some(option => option?.name === 'end')) {
224
+ _scheduleOptions.unshift({
225
+ value: moment(selectedBlock?.block?.end).format('HH:mm'),
226
+ name: 'end',
227
+ content: (
228
+ <TimeOptions>{is12Hours ? `${moment(selectedBlock?.block?.end).format('hh:mm A')}` : `${moment(selectedBlock?.block?.end).format('HH : mm')}`}</TimeOptions>
229
+ )
230
+ })
231
+ }
232
+ if (showBreakBlock && selectedBlock?.block?.end && !_scheduleOptions.some(option => option?.name === 'break_end')) {
233
+ _scheduleOptions.unshift({
234
+ value: moment(breakEnd).format('HH:mm'),
235
+ name: 'break_end',
236
+ content: (
237
+ <TimeOptions>{is12Hours ? `${moment(breakEnd).format('hh:mm A')}` : `${moment(breakEnd).format('HH : mm')}`}</TimeOptions>
238
+ )
239
+ })
240
+ }
241
+
242
+ if (showBreakBlock && selectedBlock?.block?.start) {
243
+ _scheduleOptions.unshift({
244
+ value: moment(breakStart).format('HH:mm'),
245
+ name: 'break_start',
246
+ content: (
247
+ <TimeOptions>{is12Hours ? `${moment(breakStart).format('hh:mm A')}` : `${moment(breakStart).format('HH : mm')}`}</TimeOptions>
248
+ )
249
+ })
250
+ }
251
+ if (selectedBlock?.block?.start && !_scheduleOptions.some(option => option?.name === 'start')) {
252
+ _scheduleOptions.unshift({
253
+ value: moment(selectedBlock?.block?.start).format('HH:mm'),
254
+ name: 'start',
255
+ content: (
256
+ <TimeOptions>{is12Hours ? `${moment(selectedBlock?.block?.start).format('hh:mm A')}` : `${moment(selectedBlock?.block?.start).format('HH : mm')}`}</TimeOptions>
257
+ )
258
+ })
259
+ }
260
+ setScheduleOptionValues(_scheduleOptions.map(option => option?.value))
261
+ setScheduleOptions(_scheduleOptions)
262
+ }
263
+
264
+ useEffect(() => {
265
+ const isTodayOrPastDate = moment(selectedDate).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD')
266
+ const date = moment(selectedDate).format('YYYY-MM-DD')
267
+ if (scheduleOptions?.length > 0 && isTodayOrPastDate) {
268
+ const state = {
269
+ ...scheduleState.state,
270
+ start: `${date} ${scheduleOptions?.find(option => option?.name === 'start')?.value ?? scheduleOptions[0]?.value}:00`
271
+ }
272
+ if (showBreakBlock) {
273
+ state.break_start = `${date} ${scheduleOptions?.find(option => option?.name === 'break_start')?.value ?? scheduleOptions[0]?.value}:00`
274
+ }
275
+ if (!scheduleState?.block?.end && !selectedBlock) {
276
+ state.end = `${date} 23:59:00`
277
+ }
278
+ if (!scheduleState?.block?.rrule && !selectedBlock) {
279
+ delete state.until
280
+ }
281
+
282
+ setScheduleState({
283
+ ...scheduleState,
284
+ state: state,
285
+ loading: false,
286
+ error: null
287
+ })
288
+ }
289
+ }, [JSON.stringify(scheduleOptions), selectedDate, showBreakBlock, selectedBlock, date])
290
+
291
+ useEffect(() => {
292
+ if (!isTimeChangeError?.state) return
293
+ setAlertState({
294
+ open: true,
295
+ content: timeErrorList[isTimeChangeError.error]
296
+ })
297
+ }, [isTimeChangeError?.state])
298
+
299
+ useEffect(() => {
300
+ const interval = setInterval(() => {
301
+ generateHourList()
302
+ }, 1000)
303
+ return () => clearInterval(interval)
304
+ }, [selectedDate, selectedBlock, showBreakBlock])
305
+
306
+ useEffect(() => {
307
+ setScheduleState({
308
+ ...scheduleState,
309
+ state: {
310
+ ...scheduleState.state,
311
+ rrule: rule,
312
+ until: scheduleState?.state?.until || `${moment(selectedDate).format('YYYY-MM-DD')} 23:59:00`
313
+ }
314
+ })
315
+ }, [rule])
316
+
317
+ useEffect(() => {
318
+ if (!selectedBlock?.block) return
319
+
320
+ if (selectedBlock?.block?.rrule) {
321
+ const _date = RRule.fromString(`DTSTART:${moment(selectedBlock?.block?.start).toISOString().replaceAll('-', '').replaceAll(':', '').replaceAll('.', '')}` + '\n' + selectedBlock?.block?.rrule?.includes('RRULE:') ? selectedBlock?.block?.rrule : `RRULE:${selectedBlock?.block?.rrule}`)
322
+ setRuleState({
323
+ freq: _date.options.freq,
324
+ byweekday: _date.options.byweekday
325
+ })
326
+ }
327
+ }, [selectedBlock?.block])
328
+
329
+ const handleSelectDriver = (_driver, _block, date) => {
330
+ setSelectedBlock({
331
+ user: _driver,
332
+ block: _block
333
+ })
334
+
335
+ const isTodayOrPastDate = moment(date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD')
336
+ if (_block || (date && !isTodayOrPastDate)) {
337
+ setSelectedDate(new Date(_block?.start || `${date} 00:00:00`))
338
+ setScheduleState({
339
+ ...scheduleState,
340
+ state: {
341
+ start: _block?.start || `${date} 00:00:00`,
342
+ end: _block?.end || `${date} 23:59:00`
343
+ }
344
+ })
345
+ }
346
+ !_block && generateHourList()
347
+ setOpenModal(true)
348
+ }
349
+
350
+ const onCloseModal = () => {
351
+ setOpenModal(false)
352
+ setScheduleOptionValues([])
353
+ handleSetInitialStates()
354
+ }
355
+
356
+ const handleCloseSecondModal = () => {
357
+ setOpenDeleteModal(false)
358
+ setOpenEditModal(false)
359
+ }
360
+
361
+ return (
362
+ <>
363
+ <Container>
364
+ {driversList.loading && (
365
+ <SpinnerLoaderWrapper>
366
+ <SpinnerLoader />
367
+ </SpinnerLoaderWrapper>
368
+ )}
369
+ <Header>
370
+ <HeaderTitleContainer>
371
+ {isCollapse && (
372
+ <IconButton
373
+ color='black'
374
+ onClick={() => handleMenuCollapse(false)}
375
+ >
376
+ <MenuIcon />
377
+ </IconButton>
378
+ )}
379
+ <HeaderWrapper>
380
+ <div>
381
+ <h1>{t('DRIVERS_TIME_DISPLAY', 'Drivers time display')}</h1>
382
+ <DriverGroupSelectorWrapper>
383
+ <DriverGroupName onClick={() => setShowSelectHeader(!showSelectHeader)}>
384
+ {t('SELECT_DRIVER_GROUP', 'Select a driver group')}
385
+ </DriverGroupName>
386
+ {showSelectHeader && (
387
+ <DriverGroupSelectHeader
388
+ close={() => setShowSelectHeader(false)}
389
+ isOpen={showSelectHeader}
390
+ changeDriverGroupState={changeDriverGroupState}
391
+ />
392
+ )}
393
+ <ChevronRight />
394
+ <span className='calendar'>{t('CALENDAR', 'Calendar')}</span>
395
+ {selectedGroup && (
396
+ <>
397
+ <ChevronRight />
398
+ <span>{selectedGroup?.name}</span>
399
+ </>
400
+ )}
401
+ </DriverGroupSelectorWrapper>
402
+ </div>
403
+ <DriversGroupCalendarWrapper>
404
+ <AnalyticsCalendar {...props} handleChangeDate={handleChangeDate} />
405
+ </DriversGroupCalendarWrapper>
406
+ </HeaderWrapper>
407
+ </HeaderTitleContainer>
408
+ </Header>
409
+ <DeliveryUsersListing
410
+ date={date}
411
+ getDrivers={getDrivers}
412
+ driversList={driversList}
413
+ paginationProps={paginationProps}
414
+ selectedGroup={selectedGroup}
415
+ handleSelectDriver={handleSelectDriver}
416
+ setStackEventsState={setStackEventsState}
417
+ />
418
+ </Container>
419
+ <Modal
420
+ width='700px'
421
+ padding='30px'
422
+ title={selectedBlock?.block ? t('EDIT_BLOCK', 'Edit block') : t('ADD_NEW_BLOCK', 'Add new block')}
423
+ open={openModal}
424
+ onClose={onCloseModal}
425
+ >
426
+ <DriverBlockAddFormUI
427
+ rruleList={rruleList}
428
+ ruleState={ruleState}
429
+ setRuleState={setRuleState}
430
+ rruleDayList={rruleDayList}
431
+ selectedDate={selectedDate}
432
+ scheduleState={scheduleState}
433
+ showBreakBlock={showBreakBlock}
434
+ isEdit={!!selectedBlock?.block}
435
+ handleUntilDate={handleUntilDate}
436
+ scheduleOptions={scheduleOptions}
437
+ deleteBlockTime={deleteBlockTime}
438
+ setScheduleState={setScheduleState}
439
+ setOpenEditModal={setOpenEditModal}
440
+ selectedBlock={selectedBlock?.block}
441
+ setShowBreakBlock={setShowBreakBlock}
442
+ selectedUntilDate={selectedUntilDate}
443
+ handleChangeStartDate={setSelectedDate}
444
+ setOpenDeleteModal={setOpenDeleteModal}
445
+ handleAddBlockTime={handleAddBlockTime}
446
+ handleChangeScheduleTime={handleChangeScheduleTime}
447
+ onCloseModal={onCloseModal}
448
+ scheduleOptionValues={scheduleOptionValues}
449
+ />
450
+ </Modal>
451
+ <Modal
452
+ width='500px'
453
+ height='40vh'
454
+ padding='30px'
455
+ title={openEditModal ? t('EDIT_BLOCK', 'Edit block') : t('DELETE_BLOCK', 'Delete block')}
456
+ open={openDeleteModal || openEditModal}
457
+ onClose={handleCloseSecondModal}
458
+ >
459
+ <DeleteWrapper>
460
+ {openDeleteModal && <DeleteBlock>{t('DELETE_BLOCK_CONFIRMATION', 'Are you sure that you want to delete this block?')}</DeleteBlock>}
461
+ {openEditModal && <DeleteBlock>{t('EDIT_BLOCK_CONFIRMATION', 'Are you sure that you want to edit this block?')}</DeleteBlock>}
462
+
463
+ <OrderStatusTypeSelectWrapper>
464
+ <p>{t('SELECT_PROPAGATION', 'Select a propagation option')}</p>
465
+ <Select
466
+ defaultValue={propagation}
467
+ options={propagationList}
468
+ onChange={(option) => setPropagation(option)}
469
+ placeholder={t('CHANGE_PROPAGATION', 'Change Propagation')}
470
+ notAsync
471
+ />
472
+ </OrderStatusTypeSelectWrapper>
473
+ </DeleteWrapper>
474
+
475
+ <DeleteButtons>
476
+ <Button
477
+ color='lightPrimary'
478
+ borderRadius='8px'
479
+ onClick={() => handleCloseSecondModal()}
480
+ >
481
+ {t('CANCEL', 'Cancel')}
482
+ </Button>
483
+ <Button
484
+ color='primary'
485
+ borderRadius='8px'
486
+ disabled={scheduleState.loading}
487
+ onClick={() => openDeleteModal ? deleteBlockTime() : editBlockTime()}
488
+ >
489
+ {scheduleState.loading ? t('LOADING', 'Loading') : openDeleteModal ? t('DELETE', 'Delete') : t('ACCEPT', 'Accept')}
490
+ </Button>
491
+ </DeleteButtons>
492
+ </Modal>
493
+ <Modal
494
+ width='500px'
495
+ height='40vh'
496
+ padding='30px'
497
+ title={t('STACKED_BLOCKS', 'Stacked blocks')}
498
+ open={stackEventsState?.open}
499
+ onClose={onCloseModal}
500
+ >
501
+ <DeleteWrapper>
502
+ {stackEventsState?.events?.map((event, i) => (
503
+ <StackedBlock key={i} onClick={() => handleSelectDriver(stackEventsState?.user, event)}>
504
+ <p>{moment(event.start).format(hourFormat)} - {moment(event.end).format(hourFormat)}</p>
505
+ </StackedBlock>
506
+ ))}
507
+ </DeleteWrapper>
508
+ </Modal>
509
+ <Alert
510
+ title={t('WEB_APPNAME', 'Ordering')}
511
+ content={alertState.content}
512
+ acceptText={t('ACCEPT', 'Accept')}
513
+ open={alertState.open}
514
+ onClose={() => closeAlert()}
515
+ onAccept={() => closeAlert()}
516
+ closeOnBackdrop={false}
517
+ />
518
+ </>
519
+ )
520
+ }
521
+
522
+ export const DriversTimeDisplay = (props) => {
523
+ const driversTimeDisplayProps = {
524
+ ...props,
525
+ UIComponent: DriversTimeDisplayUI,
526
+ paginationSettings: {
527
+ initialPage: 1,
528
+ pageSize: 10,
529
+ controlType: 'pages'
530
+ }
531
+ }
532
+ return (
533
+ <CalendarDriversListController {...driversTimeDisplayProps} />
534
+ )
535
+ }