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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agroptima-design-system",
3
- "version": "0.29.1",
3
+ "version": "0.29.2-beta.1",
4
4
  "scripts": {
5
5
  "dev": "npm run storybook",
6
6
  "storybook": "storybook dev -p 6006 --ci",
@@ -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
  }
@@ -8,6 +8,7 @@ describe('DateRangePicker', () => {
8
8
  <DateRangePicker
9
9
  selected={{ from: new Date(2025, 0, 1), to: new Date(2025, 0, 15) }}
10
10
  onSelect={() => jest.fn()}
11
+ type="range"
11
12
  lng={'es'}
12
13
  />,
13
14
  )