{
+}: CalendarProps) => {
+ const computedDisabled: Matcher[] = [...(disabledMatchers ?? [])];
+
+ if (availableDays) {
+ computedDisabled.push((date: Date) => !isAvailable(date));
+ }
+
+ if (availableDays) {
+ const isAvailable = (date: Date) => {
+ if (Array.isArray(availableDays)) {
+ return availableDays.some((d) => d.toDateString() === date.toDateString());
+ }
+ return availableDays(date);
+ };
+
+ computedDisabled.push((date: Date) => !isAvailable(date));
+ }
+
+ const isAvailable = (date: Date) => {
+ if (!availableDays) return true;
+
+ if (Array.isArray(availableDays)) {
+ return availableDays.some((d) => d.toDateString() === date.toDateString());
+ }
+
+ return availableDays(date);
+ };
+
return (
{(view === 'years' || calendarView === 'years') && (
@@ -147,7 +174,7 @@ export const DateCalendar = ({
month={currentMonth}
onMonthChange={setCurrentMonth}
showOutsideDays={showOutsideDays}
- disabled={disabledMatchers?.length ? disabledMatchers : undefined}
+ disabled={computedDisabled.length ? computedDisabled : undefined}
required={required}
components={{
MonthCaption: (props) => (
@@ -181,12 +208,11 @@ export const DateCalendar = ({
week_number: styles['tedi-date-calendar__week-number'],
}}
modifiers={{
- available:
- availableDays instanceof Function
- ? availableDays
- : (d) => availableDays?.some((day) => day.toDateString() === d.toDateString()) ?? false,
+ available: (date) => (availableDays ? isAvailable(date) : false),
+ }}
+ modifiersClassNames={{
+ available: styles['tedi-date-calendar__available-day'],
}}
- modifiersClassNames={{ available: styles['tedi-date-calendar__available-day'] }}
onSelect={handleSelect}
/>
)}
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.module.scss b/src/tedi/components/content/calendar/components/calendar-header/calendar-header.module.scss
similarity index 100%
rename from src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.module.scss
rename to src/tedi/components/content/calendar/components/calendar-header/calendar-header.module.scss
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.spec.tsx b/src/tedi/components/content/calendar/components/calendar-header/calendar-header.spec.tsx
similarity index 100%
rename from src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.spec.tsx
rename to src/tedi/components/content/calendar/components/calendar-header/calendar-header.spec.tsx
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.tsx b/src/tedi/components/content/calendar/components/calendar-header/calendar-header.tsx
similarity index 98%
rename from src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.tsx
rename to src/tedi/components/content/calendar/components/calendar-header/calendar-header.tsx
index fead0b918..d9d14ee93 100644
--- a/src/tedi/components/form/date-calendar/components/date-calendar-header/date-calendar-header.tsx
+++ b/src/tedi/components/content/calendar/components/calendar-header/calendar-header.tsx
@@ -5,7 +5,7 @@ import { useLabels } from '../../../../../providers/label-provider';
import { Icon } from '../../../../base/icon/icon';
import Button from '../../../../buttons/button/button';
import { Dropdown } from '../../../../overlays/dropdown';
-import styles from './date-calendar-header.module.scss';
+import styles from './calendar-header.module.scss';
export interface CalendarHeaderProps extends Pick {
/**
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.spec.tsx b/src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.spec.tsx
similarity index 97%
rename from src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.spec.tsx
rename to src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.spec.tsx
index a8f4ba227..724780980 100644
--- a/src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.spec.tsx
+++ b/src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.spec.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { MonthGrid } from './date-calendar-month-grid';
+import { MonthGrid } from './calendar-month-grid';
import '@testing-library/jest-dom';
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.tsx b/src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.tsx
similarity index 96%
rename from src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.tsx
rename to src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.tsx
index 6038fe946..636d95dab 100644
--- a/src/tedi/components/form/date-calendar/components/date-calendar-month-grid/date-calendar-month-grid.tsx
+++ b/src/tedi/components/content/calendar/components/calendar-month-grid/calendar-month-grid.tsx
@@ -1,6 +1,6 @@
import { useLabels } from '../../../../../providers/label-provider';
import { Text } from '../../../../base/typography/text/text';
-import { PickerGrid } from '../../date-calendar-grid';
+import { PickerGrid } from '../../calendar-grid';
export interface MonthGridProps {
/*
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.spec.tsx b/src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.spec.tsx
similarity index 97%
rename from src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.spec.tsx
rename to src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.spec.tsx
index 827e8c699..2fea11cf5 100644
--- a/src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.spec.tsx
+++ b/src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.spec.tsx
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
-import { YearGrid } from './date-calendar-year-grid';
+import { YearGrid } from './calendar-year-grid';
import '@testing-library/jest-dom';
diff --git a/src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.tsx b/src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.tsx
similarity index 96%
rename from src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.tsx
rename to src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.tsx
index 3fe51b634..96ce8c784 100644
--- a/src/tedi/components/form/date-calendar/components/date-calendar-year-grid/date-calendar-year-grid.tsx
+++ b/src/tedi/components/content/calendar/components/calendar-year-grid/calendar-year-grid.tsx
@@ -1,5 +1,5 @@
import { useLabels } from '../../../../../providers/label-provider';
-import { PickerGrid } from '../../date-calendar-grid';
+import { PickerGrid } from '../../calendar-grid';
export interface YearGridProps {
/*
diff --git a/src/tedi/components/form/date-field/date-field.module.scss b/src/tedi/components/form/date-field/date-field.module.scss
index fa5fa3f0e..76420cc58 100644
--- a/src/tedi/components/form/date-field/date-field.module.scss
+++ b/src/tedi/components/form/date-field/date-field.module.scss
@@ -43,4 +43,18 @@
}
}
}
+
+ &.tedi-date-field__icon--disabled {
+ button:not([data-name='closing-button']):last-child {
+ &:hover,
+ &:focus {
+ cursor: auto;
+ background: none;
+ }
+ }
+ }
+}
+
+.tedi-date-field__container {
+ width: 100%;
}
diff --git a/src/tedi/components/form/date-field/date-field.stories.tsx b/src/tedi/components/form/date-field/date-field.stories.tsx
index 576cd4e73..75b6146a6 100644
--- a/src/tedi/components/form/date-field/date-field.stories.tsx
+++ b/src/tedi/components/form/date-field/date-field.stories.tsx
@@ -107,6 +107,33 @@ export const States: StoryObj = {
},
};
+export const DefaultValue: Story = {
+ render: Template,
+ args: {
+ mode: 'single',
+ label: 'Default selected date',
+ defaultValue: new Date(),
+ },
+};
+
+export const InputOnly: Story = {
+ render: Template,
+ args: {
+ mode: 'single',
+ label: 'Date',
+ required: true,
+ placeholder: 'dd.mm.yyyy',
+ enableCalendar: false,
+ },
+ parameters: {
+ docs: {
+ description: {
+ story: 'enableCalendar props allows you to show/hide calendar',
+ },
+ },
+ },
+};
+
export const Multiple: Story = {
render: (args) => {
const [value, setValue] = useState([]);
@@ -155,11 +182,87 @@ export const Multiple: Story = {
},
};
+export const AvailableDays: Story = {
+ render: () => {
+ const availableDays = [
+ new Date(),
+ new Date(new Date().setDate(new Date().getDate() + 4)),
+ new Date(new Date().setDate(new Date().getDate() + 5)),
+ new Date(new Date().setDate(new Date().getDate() + 6)),
+ ];
+
+ const [selected, setSelected] = useState();
+
+ return (
+ setSelected(date as Date)}
+ availableDays={availableDays}
+ id="available-days-shown"
+ />
+ );
+ },
+};
+
export const Range: Story = {
- render: Template,
- args: {
- mode: 'range',
- label: 'Select date range',
+ render: () => {
+ const [defaultRange, setDefaultRange] = useState();
+ const [rangeWithLimits, setRangeWithLimits] = useState();
+ const [startOnly, setStartOnly] = useState({ from: new Date(), to: undefined });
+ const [disablePastRange, setDisablePastRange] = useState();
+
+ const twoMonthsAgo = new Date();
+ twoMonthsAgo.setMonth(twoMonthsAgo.getMonth() - 2);
+ const maxDate = new Date();
+
+ return (
+
+
+ setDefaultRange(range as DateRange)}
+ id="range-default"
+ />
+
+
+
+ setRangeWithLimits(range as DateRange)}
+ minDate={twoMonthsAgo}
+ maxDate={maxDate}
+ id="range-with-limits"
+ />
+
+
+
+ setStartOnly(range as DateRange)}
+ id="range-with-start-only"
+ />
+
+
+
+ setDisablePastRange(range as DateRange)}
+ disablePast
+ id="range-with-disabled-past"
+ />
+
+
+ );
},
};
@@ -183,7 +286,7 @@ export const ShowWeekCount: Story = {
export const MultipleMonthsShown: Story = {
render: () => {
- return ;
+ return ;
},
};
@@ -201,11 +304,12 @@ export const CalendarFooter: Story = {