= ({
const item = adjacent.current.item;
const itemStyle = adjacent.current.itemStyle;
const activeDateStatus = adjacent.current.activeDateStatus;
+ const isToday = getIsToday(getItemDate(item));
return (
= ({
adjacent.current.itemStyle === "primary"
)}
>
-
diff --git a/packages/wiz-ui-react/src/components/base/calendar/stories/calendar.stories.tsx b/packages/wiz-ui-react/src/components/base/calendar/stories/calendar.stories.tsx
index 7b1d22f42..32dcd8302 100644
--- a/packages/wiz-ui-react/src/components/base/calendar/stories/calendar.stories.tsx
+++ b/packages/wiz-ui-react/src/components/base/calendar/stories/calendar.stories.tsx
@@ -107,3 +107,29 @@ export const FilledWeeks: Story = {
},
},
};
+
+export const Today: Story = {
+ ...Template,
+ args: {
+ currentMonth: new Date("2023-03"),
+ _today: new Date("2023-03-05"),
+ },
+};
+
+export const DisabledToday: Story = {
+ ...Template,
+ args: {
+ currentMonth: new Date("2023-03"),
+ _today: new Date("2023-03-05"),
+ disabledDate: (date: Date) => date.getDate() === 5,
+ },
+};
+
+export const SelectedToday: Story = {
+ ...Template,
+ args: {
+ currentMonth: new Date("2023-03"),
+ _today: new Date("2023-03-05"),
+ activeDates: [{ date: new Date("2023-03-05"), state: "primary" }],
+ },
+};
diff --git a/packages/wiz-ui-react/src/components/base/inputs/date-picker/components/date-picker.tsx b/packages/wiz-ui-react/src/components/base/inputs/date-picker/components/date-picker.tsx
index 8455dcbee..b1b43ea76 100644
--- a/packages/wiz-ui-react/src/components/base/inputs/date-picker/components/date-picker.tsx
+++ b/packages/wiz-ui-react/src/components/base/inputs/date-picker/components/date-picker.tsx
@@ -6,9 +6,22 @@ import {
inputBorderStyle,
} from "@wizleap-inc/wiz-ui-styles/commons";
import clsx from "clsx";
-import { FC, KeyboardEvent, useContext, useRef, useState } from "react";
+import {
+ FC,
+ KeyboardEvent,
+ MouseEvent,
+ useContext,
+ useRef,
+ useState,
+} from "react";
-import { WizCalendar, WizPopup, WizText } from "@/components";
+import {
+ WizCalendar,
+ WizDivider,
+ WizPopup,
+ WizText,
+ WizTextButton,
+} from "@/components";
import { WizIcon } from "@/components/base/icon";
import { WizHStack, WizVStack } from "@/components/base/stack";
import { FormControlContext } from "@/components/custom/form/components/form-control-context";
@@ -26,6 +39,7 @@ type Props = BaseProps & {
disabled?: boolean;
error?: boolean;
isDirectionFixed?: boolean;
+ _today?: Date;
onChangeDate: (selectedValue: Date | null) => void;
/**
* @description 日付が無効かどうかを判定する関数です。無効な日付はクリック不可になります。
@@ -60,6 +74,7 @@ const DatePicker: FC = ({
formatYear = (year) => `${year}`,
formatDate = (date) =>
`${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`,
+ _today,
}: Props) => {
const [isOpen, setIsOpen] = useState(false);
const cancelButtonVisible = !disabled && !!date;
@@ -73,6 +88,7 @@ const DatePicker: FC = ({
)
);
};
+ const [tempDate, setTempDate] = useState(date);
const handleKeyDown = (e: KeyboardEvent) => {
e.preventDefault();
@@ -108,6 +124,26 @@ const DatePicker: FC = ({
return "default";
})();
const wrapperButtonRef = useRef(null);
+
+ const onCancel = (e: MouseEvent) => {
+ e.stopPropagation();
+ setTempDate(null);
+ setCurrentMonth(new Date());
+ onChangeDate(null);
+ setIsOpen(false);
+ };
+
+ const onClose = () => {
+ setTempDate(date);
+ setCurrentMonth(date || new Date());
+ setIsOpen(false);
+ };
+
+ const onSubmit = () => {
+ onChangeDate(tempDate);
+ setIsOpen(false);
+ };
+
return (
<>
setIsOpen(false)}
+ onClose={onClose}
direction="bottomLeft"
isDirectionFixed={isDirectionFixed}
anchorElement={wrapperButtonRef}
@@ -238,13 +274,23 @@ const DatePicker: FC = ({
onChangeDate(date)}
+ onClickDate={(date) => setTempDate(date)}
currentMonth={currentMonth}
filledWeeks
+ _today={_today || new Date()}
disabledDate={disabledDate}
/>
+
+
+
+ {ARIA_LABELS.CANCEL}
+
+
+ {ARIA_LABELS.APPLY}
+
+
>
diff --git a/packages/wiz-ui-react/src/components/base/inputs/date-picker/stories/date-picker.stories.tsx b/packages/wiz-ui-react/src/components/base/inputs/date-picker/stories/date-picker.stories.tsx
index 077bd642e..74bfccacc 100644
--- a/packages/wiz-ui-react/src/components/base/inputs/date-picker/stories/date-picker.stories.tsx
+++ b/packages/wiz-ui-react/src/components/base/inputs/date-picker/stories/date-picker.stories.tsx
@@ -98,3 +98,26 @@ export const Playground: Story = {
return ;
},
};
+
+export const Today: Story = {
+ args: {
+ date: new Date(2023, 0, 1),
+ _today: new Date("2023-01-15"),
+ },
+ play: async ({ canvasElement }) => {
+ const canvas = within(canvasElement);
+ canvas.getByLabelText(ARIA_LABELS.DATE_PICKER_INPUT).click();
+ },
+};
+
+export const DisabledToday: Story = {
+ args: {
+ date: new Date(2023, 0, 1),
+ disabledDate: (date: Date) => date.getDate() >= 10 && date.getDate() < 17,
+ _today: new Date("2023-01-15"),
+ },
+ play: async ({ canvasElement }) => {
+ const canvas = within(canvasElement);
+ canvas.getByLabelText(ARIA_LABELS.DATE_PICKER_INPUT).click();
+ },
+};
diff --git a/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/components/date-range-picker.tsx b/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/components/date-range-picker.tsx
index 0d986b58b..9ff0ecaeb 100644
--- a/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/components/date-range-picker.tsx
+++ b/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/components/date-range-picker.tsx
@@ -5,6 +5,7 @@ import clsx from "clsx";
import {
FC,
KeyboardEvent,
+ MouseEvent,
useCallback,
useContext,
useMemo,
@@ -15,6 +16,7 @@ import {
import {
WizCalendar,
WizCard,
+ WizDivider,
WizHStack,
WizICalendar,
WizICancel,
@@ -24,6 +26,7 @@ import {
WizIExpandMore,
WizIcon,
WizPopup,
+ WizTextButton,
} from "@/components";
import { DateStatus } from "@/components/base/calendar/components/types";
import { FormControlContext } from "@/components/custom/form/components/form-control-context";
@@ -40,6 +43,7 @@ type Props = BaseProps & {
selectBoxValue?: string;
isDirectionFixed?: boolean;
error?: boolean;
+ _today?: Date;
onChangeDateRange: (dateRange: DateRange) => void;
onChangeSelectBoxValue?: (value: string) => void;
disabledDate?: (date: Date) => boolean;
@@ -60,6 +64,7 @@ const DateRangePicker: FC = ({
selectBoxValue,
isDirectionFixed = false,
error,
+ _today,
onChangeDateRange,
onChangeSelectBoxValue,
disabledDate = () => false,
@@ -68,6 +73,7 @@ const DateRangePicker: FC = ({
}: Props) => {
const [isOpen, setIsOpen] = useState(false);
const [isSelectBoxOpen, setIsSelectBoxOpen] = useState(false);
+ const [tempDateRange, setTempDateRange] = useState(dateRange);
const cancelButtonVisible = !disabled && !!dateRange.start;
const [rightCalendarDate, setRightCalendarDate] = useState(
(() => {
@@ -90,7 +96,6 @@ const DateRangePicker: FC = ({
),
[rightCalendarDate]
);
- const onClickCancel = () => onChangeDateRange({ start: null, end: null });
const moveCalendar = (command: "nextMonth" | "prevMonth") => {
const dm = command === "nextMonth" ? 1 : -1;
setRightCalendarDate(
@@ -102,6 +107,19 @@ const DateRangePicker: FC = ({
);
};
+ const initiaizeRightCalendarDate = () => {
+ const [start, end] = [dateRange.start, dateRange.end];
+ if (end) {
+ setRightCalendarDate(new Date(end));
+ } else if (start) {
+ setRightCalendarDate(
+ new Date(start.getFullYear(), start.getMonth() + 1, 1)
+ );
+ } else {
+ setRightCalendarDate(new Date());
+ }
+ };
+
const selectedDates = useMemo(() => {
const getDateStatus = (
date: Date,
@@ -110,7 +128,7 @@ const DateRangePicker: FC = ({
date,
state,
});
- const [start, end] = [dateRange.start, dateRange.end];
+ const [start, end] = [tempDateRange.start, tempDateRange.end];
if (start && end) {
const secondaries: DateStatus[] = [];
const tomorrowOfStart = new Date(start);
@@ -128,7 +146,7 @@ const DateRangePicker: FC = ({
return [getDateStatus(start, "primary")];
}
return [];
- }, [dateRange]);
+ }, [tempDateRange]);
const handleKeyDown = (e: KeyboardEvent) => {
e.preventDefault();
@@ -144,18 +162,18 @@ const DateRangePicker: FC = ({
const onClickDate = useCallback(
(date: Date) => {
- const [start, end] = [dateRange.start, dateRange.end];
+ const [start, end] = [tempDateRange.start, tempDateRange.end];
if (start && end) {
- onChangeDateRange({ start: date, end: null });
+ setTempDateRange({ start: date, end: null });
} else if (start) {
const [nextStart, nextEnd] =
start > date ? [date, start] : [start, date];
- onChangeDateRange({ start: nextStart, end: nextEnd });
+ setTempDateRange({ start: nextStart, end: nextEnd });
} else {
- onChangeDateRange({ start: date, end: null });
+ setTempDateRange({ start: date, end: null });
}
},
- [dateRange, onChangeDateRange]
+ [tempDateRange]
);
const selectedOption = (() => {
@@ -182,6 +200,26 @@ const DateRangePicker: FC = ({
if (isOpen && !disabled) return "active";
return "default";
})();
+
+ const onClickCancel = (e: MouseEvent) => {
+ e.stopPropagation();
+ initiaizeRightCalendarDate();
+ setTempDateRange({ start: null, end: null });
+ onChangeDateRange({ start: null, end: null });
+ setIsOpen(false);
+ };
+
+ const onClose = () => {
+ initiaizeRightCalendarDate();
+ setTempDateRange(dateRange);
+ setIsOpen(false);
+ };
+
+ const onSubmit = () => {
+ onChangeDateRange(tempDateRange);
+ setIsOpen(false);
+ };
+
return (
<>
setIsOpen(false)}
+ onClose={onClose}
isDirectionFixed={isDirectionFixed}
anchorElement={anchor}
>
@@ -321,6 +359,7 @@ const DateRangePicker: FC = ({
onClickDate={onClickDate}
disabledDate={disabledDate}
filledWeeks={true}
+ _today={_today || new Date()}
/>
@@ -350,9 +389,19 @@ const DateRangePicker: FC = ({
onClickDate={onClickDate}
disabledDate={disabledDate}
filledWeeks={true}
+ _today={_today || new Date()}
/>
+
+
+
+ {ARIA_LABELS.CANCEL}
+
+
+ {ARIA_LABELS.APPLY}
+
+
diff --git a/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/stories/date-range-picker.stories.tsx b/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/stories/date-range-picker.stories.tsx
index 43ef9505e..3ca2c245a 100644
--- a/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/stories/date-range-picker.stories.tsx
+++ b/packages/wiz-ui-react/src/components/base/inputs/date-range-picker/stories/date-range-picker.stories.tsx
@@ -185,3 +185,32 @@ export const Playground: Story = {
);
},
};
+
+export const Today: Story = {
+ args: {
+ dateRange: {
+ start: new Date("2021-01-15"),
+ end: new Date("2021-02-15"),
+ },
+ _today: new Date("2021-01-28"),
+ },
+ play: async ({ canvasElement }) => {
+ const canvas = within(canvasElement);
+ canvas.getByLabelText(ARIA_LABELS.RANGE_DATE_PICKER_INPUT).click();
+ },
+};
+
+export const DisabledWithToday: Story = {
+ args: {
+ dateRange: {
+ start: new Date("2021-01-01"),
+ end: new Date("2021-01-31"),
+ },
+ disabledDate: (date: Date) => date.getDate() >= 10 && date.getDate() < 17,
+ _today: new Date("2021-01-15"),
+ },
+ play: async ({ canvasElement }) => {
+ const canvas = within(canvasElement);
+ canvas.getByLabelText(ARIA_LABELS.RANGE_DATE_PICKER_INPUT).click();
+ },
+};
|