{calendarHeader}
{status === 'date' && calendarTable}
{status === 'year' &&
}
From aeb37a0863b11610b69ce1adccf4d4d3d5e49f67 Mon Sep 17 00:00:00 2001
From: Morty Lu <15620954611@163.com>
Date: Tue, 14 Mar 2023 17:45:13 +0800
Subject: [PATCH 13/14] fix unit test
---
.../src/tests/calendar/index.test.ts | 30 +++++++++++++++++--
.../src/widgets/Calendar/focusControl.tsx | 10 ++++---
.../neuron-ui/src/widgets/Calendar/index.tsx | 2 +-
3 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/packages/neuron-ui/src/tests/calendar/index.test.ts b/packages/neuron-ui/src/tests/calendar/index.test.ts
index 6cfca09a14..ca492f217f 100644
--- a/packages/neuron-ui/src/tests/calendar/index.test.ts
+++ b/packages/neuron-ui/src/tests/calendar/index.test.ts
@@ -5,6 +5,7 @@ import {
isDateEqual,
getMonthCalendar,
getLocalMonthNames,
+ getLocalMonthShortNames,
getLocalWeekNames,
} from '../../widgets/Calendar/utils'
@@ -93,14 +94,39 @@ describe('Generate monthly calendar data', () => {
})
})
-describe('Get Local Month Names', () => {
+describe('Get Local Month Short Names', () => {
it('Chinese', () => {
const names = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
+ expect(getLocalMonthShortNames('zh')).toEqual(names)
+ })
+
+ it('English', () => {
+ const names = ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.']
+ expect(getLocalMonthShortNames('en')).toEqual(names)
+ })
+})
+
+describe('Get Local Month Names', () => {
+ it('Chinese', () => {
+ const names = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
expect(getLocalMonthNames('zh')).toEqual(names)
})
it('English', () => {
- const names = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+ const names = [
+ 'January',
+ 'February',
+ 'March',
+ 'April',
+ 'May',
+ 'June',
+ 'July',
+ 'August',
+ 'September',
+ 'October',
+ 'November',
+ 'December',
+ ]
expect(getLocalMonthNames('en')).toEqual(names)
})
})
diff --git a/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx b/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
index 372555c18b..f15c73ceab 100644
--- a/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
+++ b/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
@@ -7,8 +7,10 @@ export const ButtonHasFocus = ({ isFocus, children, ...props }: ButtonHasFocusPr
useEffect(() => {
if (isFocus && ref.current) {
ref.current.focus()
+ } else {
+ // ignore
}
- }, [isFocus])
+ }, [isFocus, ref])
return (
// eslint-disable-next-line react/button-has-type
@@ -29,7 +31,7 @@ export const useSelectorFocusControl = (value: number, options: Option[], onChan
useEffect(() => {
setFocusIndex(options.findIndex(option => option.value === value))
- }, [value])
+ }, [value, options])
function moveBackward() {
const index = focusIndex - 1
@@ -110,11 +112,11 @@ export const useTableFocusControl = (
useEffect(() => {
const instance = value || new Date()
moveDate(instance.getFullYear(), instance.getMonth() + 1, instance.getDate())
- }, [value?.toDateString()])
+ }, [value?.toDateString(), minDate?.toDateString(), maxDate?.toDateString()])
useEffect(() => {
moveDate(calendarYear, calendarMonth, focusDate.getDate())
- }, [calendarYear, calendarMonth])
+ }, [calendarYear, calendarMonth, minDate?.toDateString(), maxDate?.toDateString()])
const onKeyDown = (e: KeyboardEvent
) => {
const keyEventMap = {
diff --git a/packages/neuron-ui/src/widgets/Calendar/index.tsx b/packages/neuron-ui/src/widgets/Calendar/index.tsx
index 326b0a0550..1dd7962bb7 100644
--- a/packages/neuron-ui/src/widgets/Calendar/index.tsx
+++ b/packages/neuron-ui/src/widgets/Calendar/index.tsx
@@ -75,7 +75,7 @@ const Calendar: React.FC = ({
setMonth((value?.getMonth() ?? new Date().getMonth()) + 1)
}, [value?.toDateString()])
- const [uId] = useState(Math.floor(Math.random() * 1e4))
+ const [uId] = useState(() => (+new Date()).toString(16).slice(-4))
const [t, { language }] = useTranslation()
const monthNames = useMemo(() => getLocalMonthNames(language), [language])
From 833a85d7f57a504b62b88a5359d5794ea29c2ad5 Mon Sep 17 00:00:00 2001
From: Morty Lu <15620954611@163.com>
Date: Wed, 15 Mar 2023 01:02:03 +0800
Subject: [PATCH 14/14] not move focus when outside the table
---
.../src/widgets/Calendar/focusControl.tsx | 22 ++++++++----
.../neuron-ui/src/widgets/Calendar/index.tsx | 34 ++++++++++++-------
2 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx b/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
index f15c73ceab..7b2eaae4cd 100644
--- a/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
+++ b/packages/neuron-ui/src/widgets/Calendar/focusControl.tsx
@@ -1,20 +1,23 @@
import React, { useState, useRef, useEffect, KeyboardEvent } from 'react'
import { isMonthInRange, isDayInRange } from './utils'
-type ButtonHasFocusProps = React.ButtonHTMLAttributes & { isFocus: boolean }
-export const ButtonHasFocus = ({ isFocus, children, ...props }: ButtonHasFocusProps) => {
+type ButtonHasFocusProps = React.ButtonHTMLAttributes & {
+ isFocusable: boolean
+ isMoveFocus: boolean
+}
+export const ButtonHasFocus = ({ isFocusable, isMoveFocus, children, ...props }: ButtonHasFocusProps) => {
const ref = useRef(null)
useEffect(() => {
- if (isFocus && ref.current) {
+ if (isFocusable && isMoveFocus && ref.current) {
ref.current.focus()
} else {
// ignore
}
- }, [isFocus, ref])
+ }, [isFocusable, isMoveFocus])
return (
// eslint-disable-next-line react/button-has-type
-