agroptima-design-system 0.29.1 → 0.29.2-beta.1
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.
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { translations } from './translations'
|
|
12
12
|
|
|
13
13
|
export type Variant = 'primary'
|
|
14
|
+
export type DateType = 'single' | 'range' | 'multiple'
|
|
14
15
|
|
|
15
16
|
type DivPropsWithoutOnSelect = Omit<
|
|
16
17
|
React.ComponentPropsWithoutRef<'div'>,
|
|
@@ -31,6 +32,7 @@ export interface DateRangePickerProps extends DivPropsWithoutOnSelect {
|
|
|
31
32
|
onSelect: (dateRange: DateRange | undefined) => void
|
|
32
33
|
selected?: DateRange
|
|
33
34
|
lng: keyof typeof availableLocales
|
|
35
|
+
type: DateType
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
export function DateRangePicker({
|
|
@@ -39,6 +41,7 @@ export function DateRangePicker({
|
|
|
39
41
|
onSelect = () => {},
|
|
40
42
|
selected: preselected,
|
|
41
43
|
lng,
|
|
44
|
+
type,
|
|
42
45
|
}: DateRangePickerProps): React.JSX.Element {
|
|
43
46
|
const manageFooterText = (): string => {
|
|
44
47
|
const hasDatesFilter = selected && selected.from && selected.to
|
|
@@ -92,6 +95,7 @@ export function DateRangePicker({
|
|
|
92
95
|
locale={availableLocales[lng]}
|
|
93
96
|
mode="range"
|
|
94
97
|
min={1}
|
|
98
|
+
max={type === 'single' ? 1 : undefined}
|
|
95
99
|
selected={selected}
|
|
96
100
|
onSelect={(dateRange) => selectDate(dateRange)}
|
|
97
101
|
footer={footer}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import 'react-day-picker/style.css'
|
|
2
|
+
import './DateRangePicker.scss'
|
|
3
|
+
import { useEffect, useState } from 'react'
|
|
4
|
+
import { type DateRange, DayPicker, type Locale } from 'react-day-picker'
|
|
5
|
+
import { enGB, es } from 'react-day-picker/locale'
|
|
6
|
+
import { classNames } from '../../utils/classNames'
|
|
7
|
+
import {
|
|
8
|
+
formatDatePickerFooterDate,
|
|
9
|
+
formatDatePickerParamsDate,
|
|
10
|
+
} from '../../utils/dateHelpers'
|
|
11
|
+
import { translations } from './translations'
|
|
12
|
+
|
|
13
|
+
export type Variant = 'primary'
|
|
14
|
+
|
|
15
|
+
export type DateType = 'single' | 'range' | 'multiple'
|
|
16
|
+
|
|
17
|
+
type DivPropsWithoutOnSelect = Omit<
|
|
18
|
+
React.ComponentPropsWithoutRef<'div'>,
|
|
19
|
+
'onSelect'
|
|
20
|
+
>
|
|
21
|
+
|
|
22
|
+
interface AvailableLocale {
|
|
23
|
+
[index: string]: Locale
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const availableLocales: AvailableLocale = {
|
|
27
|
+
es: es,
|
|
28
|
+
en: enGB,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface DateSinglePickerProps extends DivPropsWithoutOnSelect {
|
|
32
|
+
variant?: Variant
|
|
33
|
+
onSelect: (date: Date | undefined) => void
|
|
34
|
+
selected?: Date
|
|
35
|
+
lng: keyof typeof availableLocales
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function DateSinglePicker({
|
|
39
|
+
onSelect = () => {},
|
|
40
|
+
selected: preselected,
|
|
41
|
+
lng,
|
|
42
|
+
}: DateSinglePickerProps): React.JSX.Element {
|
|
43
|
+
const manageFooterText = (): string => {
|
|
44
|
+
return translations[lng].selectedDate.replace(
|
|
45
|
+
'${date}',
|
|
46
|
+
formatDatePickerFooterDate(singleSelected, lng as string),
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const [singleSelected, setSingleSelected] = useState<Date | undefined>(
|
|
51
|
+
preselected,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
const [footer, setFooter] = useState<string>(() => {
|
|
55
|
+
return manageFooterText()
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
setSingleSelected(preselected)
|
|
60
|
+
setFooter(manageFooterText())
|
|
61
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
62
|
+
}, [preselected])
|
|
63
|
+
|
|
64
|
+
function selectDate(date: Date | undefined) {
|
|
65
|
+
setSingleSelected(date)
|
|
66
|
+
onSelect(date)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<DayPicker
|
|
72
|
+
locale={availableLocales[lng]}
|
|
73
|
+
mode="single"
|
|
74
|
+
selected={singleSelected}
|
|
75
|
+
onSelect={(date) => selectDate(date)}
|
|
76
|
+
footer={footer}
|
|
77
|
+
defaultMonth={singleSelected}
|
|
78
|
+
/>
|
|
79
|
+
</>
|
|
80
|
+
)
|
|
81
|
+
}
|
|
@@ -18,6 +18,9 @@ const meta = {
|
|
|
18
18
|
selected: {
|
|
19
19
|
description: 'Selected date or date range',
|
|
20
20
|
},
|
|
21
|
+
type: {
|
|
22
|
+
description: 'Type of date picker',
|
|
23
|
+
},
|
|
21
24
|
lng: {
|
|
22
25
|
description: 'String with the locale to be used on the translations',
|
|
23
26
|
},
|
|
@@ -39,6 +42,7 @@ export const Primary: Story = {
|
|
|
39
42
|
variant: 'primary',
|
|
40
43
|
onSelect: (date) => console.log('onSelect date:', date),
|
|
41
44
|
lng: 'en',
|
|
45
|
+
type: 'range',
|
|
42
46
|
},
|
|
43
47
|
parameters: figmaPrimaryDesign,
|
|
44
48
|
}
|
|
@@ -49,6 +53,7 @@ export const WithDateRangeSelected: Story = {
|
|
|
49
53
|
onSelect: (date) => console.log('onSelect date:', date),
|
|
50
54
|
selected: { from: new Date(2024, 1, 2), to: new Date(2024, 1, 15) },
|
|
51
55
|
lng: 'en',
|
|
56
|
+
type: 'range',
|
|
52
57
|
},
|
|
53
58
|
parameters: figmaPrimaryDesign,
|
|
54
59
|
}
|
|
@@ -59,6 +64,7 @@ export const WithSingleDaySelected: Story = {
|
|
|
59
64
|
onSelect: (date) => console.log('onSelect date:', date),
|
|
60
65
|
selected: { from: new Date(2024, 1, 2), to: new Date(2024, 1, 2) },
|
|
61
66
|
lng: 'en',
|
|
67
|
+
type: 'single',
|
|
62
68
|
},
|
|
63
69
|
parameters: figmaPrimaryDesign,
|
|
64
70
|
}
|