Skip to content

Commit 967104d

Browse files
committed
refactor(emcn): retire legacy DatePicker; migrate all consumers to the chip calendar
Removes the parallel DatePicker component (its own dual-month CalendarMonth, hardcoded colors, non-chip chrome) so the chip Calendar is the single date surface. Migrates every consumer: - tables row modal -> ChipDatePicker (single) - tables inline grid editor, logs filter, ee audit-logs filter -> canonical Calendar inside an emcn Popover (the same headless/anchored pattern DatePicker rendered internally; single for the grid cell, range+time for the log filters) - playground -> ChipDatePicker showcase (single, range, range+time) The range bounds keep the exact YYYY-MM-DD / YYYY-MM-DDTHH:mm wire format, so the log filters' parsing is unchanged. Calendar is imported via its component path (the emcn barrel already exports a Calendar icon).
1 parent 3c5b5b5 commit 967104d

7 files changed

Lines changed: 76 additions & 914 deletions

File tree

apps/sim/app/playground/page.tsx

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import {
1616
Card as CardIcon,
1717
Checkbox,
1818
ChevronDown,
19+
ChipDatePicker,
1920
Code,
2021
Combobox,
2122
Connections,
2223
Cursor,
23-
DatePicker,
2424
DocumentAttachment,
2525
Download,
2626
Duplicate,
@@ -772,43 +772,57 @@ export default function PlaygroundPage() {
772772
</VariantRow>
773773
</Section>
774774

775-
{/* DatePicker */}
776-
<Section title='DatePicker'>
775+
{/* ChipDatePicker */}
776+
<Section title='ChipDatePicker'>
777777
<VariantRow label='single date'>
778778
<div className='w-56'>
779-
<DatePicker value={dateValue} onChange={setDateValue} placeholder='Select date' />
779+
<ChipDatePicker
780+
value={dateValue}
781+
onChange={setDateValue}
782+
placeholder='Select date'
783+
fullWidth
784+
/>
780785
</div>
781786
<span className='text-[var(--text-secondary)] text-sm'>
782787
{dateValue || 'No date'}
783788
</span>
784789
</VariantRow>
785-
<VariantRow label='size sm'>
786-
<div className='w-56'>
787-
<DatePicker placeholder='Small size' size='sm' onChange={() => {}} />
790+
<VariantRow label='range mode'>
791+
<div className='w-72'>
792+
<ChipDatePicker
793+
mode='range'
794+
startDate={dateRangeStart}
795+
endDate={dateRangeEnd}
796+
onRangeChange={(start, end) => {
797+
setDateRangeStart(start)
798+
setDateRangeEnd(end)
799+
}}
800+
placeholder='Select date range'
801+
fullWidth
802+
/>
788803
</div>
789804
</VariantRow>
790-
<VariantRow label='range mode'>
805+
<VariantRow label='range mode (with time)'>
791806
<div className='w-72'>
792-
<DatePicker
807+
<ChipDatePicker
793808
mode='range'
809+
showTime
794810
startDate={dateRangeStart}
795811
endDate={dateRangeEnd}
796812
onRangeChange={(start, end) => {
797813
setDateRangeStart(start)
798814
setDateRangeEnd(end)
799815
}}
800816
placeholder='Select date range'
817+
fullWidth
801818
/>
802819
</div>
803820
</VariantRow>
804821
<VariantRow label='disabled'>
805822
<div className='w-56'>
806-
<DatePicker value='2025-01-15' disabled />
823+
<ChipDatePicker value='2025-01-15' disabled fullWidth />
807824
</div>
808825
</VariantRow>
809-
<VariantRow label='inline'>
810-
<DatePicker inline value={dateValue} onChange={setDateValue} />
811-
</VariantRow>
812826
</Section>
813827

814828
{/* Tooltip */}

apps/sim/app/workspace/[workspaceId]/logs/logs.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ import {
1717
Button,
1818
ChipCombobox,
1919
type ComboboxOption,
20-
DatePicker,
2120
Library,
21+
Popover,
22+
PopoverAnchor,
23+
PopoverContent,
2224
RefreshCw,
2325
toast,
2426
} from '@/components/emcn'
27+
import { Calendar } from '@/components/emcn/components/calendar/calendar'
2528
import { Download, Workflow } from '@/components/emcn/icons'
2629
import type {
2730
WorkflowLogDetail,
@@ -1425,10 +1428,7 @@ function LogsFilterPanel({ searchQuery, onSearchQueryChange }: LogsFilterPanelPr
14251428
className='w-full'
14261429
maxHeight={320}
14271430
/>
1428-
<DatePicker
1429-
mode='range'
1430-
showTrigger={false}
1431-
showTime
1431+
<Popover
14321432
open={datePickerOpen}
14331433
onOpenChange={(isOpen) => {
14341434
if (!isOpen) {
@@ -1439,11 +1439,19 @@ function LogsFilterPanel({ searchQuery, onSearchQueryChange }: LogsFilterPanelPr
14391439
}
14401440
}
14411441
}}
1442-
startDate={startDate}
1443-
endDate={endDate}
1444-
onRangeChange={handleDateRangeApply}
1445-
onCancel={handleDatePickerCancel}
1446-
/>
1442+
>
1443+
<PopoverAnchor className='absolute inset-0' />
1444+
<PopoverContent align='start' sideOffset={4} className='w-auto p-0'>
1445+
<Calendar
1446+
mode='range'
1447+
showTime
1448+
startDate={startDate}
1449+
endDate={endDate}
1450+
onRangeChange={handleDateRangeApply}
1451+
onCancel={handleDatePickerCancel}
1452+
/>
1453+
</PopoverContent>
1454+
</Popover>
14471455
</div>
14481456
</div>
14491457

apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/row-modal/row-modal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { useParams } from 'next/navigation'
77
import {
88
Checkbox,
99
ChipConfirmModal,
10+
ChipDatePicker,
1011
ChipModal,
1112
ChipModalBody,
1213
ChipModalError,
1314
ChipModalField,
1415
ChipModalFooter,
1516
ChipModalHeader,
16-
DatePicker,
1717
Label,
1818
} from '@/components/emcn'
1919
import type { ColumnDefinition, TableInfo, TableRow } from '@/lib/table'
@@ -238,11 +238,11 @@ function ColumnField({ column, value, onChange }: ColumnFieldProps) {
238238
if (column.type === 'date') {
239239
return (
240240
<ChipModalField type='custom' title={title} required={column.required} hint={hint}>
241-
<DatePicker
242-
mode='single'
241+
<ChipDatePicker
243242
value={formatValueForInput(value, column.type) || undefined}
244-
onChange={(dateStr) => onChange(dateStr)}
243+
onChange={onChange}
245244
placeholder='Select date'
245+
fullWidth
246246
/>
247247
</ChipModalField>
248248
)

apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/cells/inline-editors.tsx

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use client'
22

33
import { useCallback, useEffect, useRef, useState } from 'react'
4-
import { DatePicker } from '@/components/emcn'
4+
import { Popover, PopoverAnchor, PopoverContent } from '@/components/emcn'
5+
import { Calendar } from '@/components/emcn/components/calendar/calendar'
56
import { cn } from '@/lib/core/utils/cn'
67
import type { ColumnDefinition } from '@/lib/table'
78
import type { SaveReason } from '../../../types'
@@ -20,7 +21,7 @@ interface InlineEditorProps {
2021
onCancel: () => void
2122
}
2223

23-
/** Inline editor for `date` columns — text input + popover DatePicker. */
24+
/** Inline editor for `date` columns — text input + popover calendar. */
2425
function InlineDateEditor({
2526
value,
2627
column,
@@ -116,17 +117,12 @@ function InlineDateEditor({
116117
'w-full min-w-0 select-text border-none bg-transparent p-0 text-[var(--text-primary)] text-small outline-none'
117118
)}
118119
/>
119-
<div className='absolute top-full left-0 size-0'>
120-
<DatePicker
121-
mode='single'
122-
value={pickerValue}
123-
onChange={handlePickerChange}
124-
open={true}
125-
onOpenChange={handlePickerOpenChange}
126-
showTrigger={false}
127-
size='sm'
128-
/>
129-
</div>
120+
<Popover open onOpenChange={handlePickerOpenChange}>
121+
<PopoverAnchor className='absolute top-full left-0 size-0' />
122+
<PopoverContent align='start' sideOffset={4} className='w-auto p-0'>
123+
<Calendar value={pickerValue} onChange={handlePickerChange} />
124+
</PopoverContent>
125+
</Popover>
130126
</>
131127
)
132128
}

0 commit comments

Comments
 (0)