Рефакторинг импорта dayjs и добавление утилиты форматирования дат. Все компоненты, использующие dayjs, теперь используют новую функцию formatDate для форматирования дат с учетом локали. Также добавлена поддержка обновления локали dayjs при изменении языка в i18next.

This commit is contained in:
2025-03-23 21:58:18 +03:00
parent 3d383f2e25
commit 2901f51862
15 changed files with 75 additions and 40 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useRef, useState } from 'react'
import dayjs from 'dayjs'
import { formatDate } from '../../../utils/dayjs-config'
import { Link } from 'react-router-dom'
import { getNavigationValue, getFeatures } from '@brojs/cli'
import {
@@ -133,7 +133,7 @@ export const Item: React.FC<ItemProps> = ({
<>
<Flex justify="space-between" align="center" mb={2}>
<Text fontWeight="medium">{name}</Text>
<Text fontSize="sm">{dayjs(date).format(groupByDate ? 'HH:mm' : 'HH:mm DD.MM.YY')}</Text>
<Text fontSize="sm">{formatDate(date, groupByDate ? 'HH:mm' : 'HH:mm DD.MM.YY')}</Text>
</Flex>
<Flex justify="space-between" align="center">
@@ -193,7 +193,7 @@ export const Item: React.FC<ItemProps> = ({
</Td>
)}
<Td textAlign="center">
{dayjs(date).format(groupByDate ? 'HH:mm' : 'HH:mm DD.MM.YY')}
{formatDate(date, groupByDate ? 'HH:mm' : 'HH:mm DD.MM.YY')}
</Td>
<Td>{name}</Td>
{isTeacher && (
@@ -1,5 +1,5 @@
import React from 'react'
import dayjs from 'dayjs'
import { formatDate } from '../../../utils/dayjs-config'
import {
Tr,
Td,
@@ -45,7 +45,7 @@ export const LessonItems: React.FC<LessonItemProps> = ({
borderRadius="md"
_dark={{ bg: "gray.700" }}
>
<Text fontWeight="bold">{dayjs(date).format('DD MMMM YYYY')}</Text>
<Text fontWeight="bold">{formatDate(date, 'DD MMMM YYYY')}</Text>
</Box>
)}
{lessons.map((lesson) => (
@@ -78,7 +78,7 @@ export const LessonItems: React.FC<LessonItemProps> = ({
{date && (
<Tr>
<Td colSpan={isTeacher ? 5 : 3}>
{dayjs(date).format('DD MMMM YYYY')}
{formatDate(date, 'DD MMMM YYYY')}
</Td>
</Tr>
)}
@@ -30,6 +30,7 @@ import { AddIcon, CheckIcon, WarningIcon, RepeatIcon } from '@chakra-ui/icons'
import { useTranslation } from 'react-i18next'
import { FaRobot } from 'react-icons/fa'
import dayjs from 'dayjs'
import { formatDate } from '../../../utils/dayjs-config'
import { dateToCalendarFormat } from '../../../utils/time'
import { Lesson } from '../../../__data__/model'
@@ -294,7 +295,7 @@ export const LessonForm = ({
{isSelected && <CheckIcon color="green.400" />}
</Flex>
<Text fontSize="sm" color={textSecondaryColor}>
{dayjs(suggestion.date).format('DD.MM.YYYY HH:mm')}
{formatDate(suggestion.date, 'DD.MM.YYYY HH:mm')}
</Text>
</Box>
);
@@ -1,5 +1,6 @@
import React, { useMemo } from 'react'
import dayjs from 'dayjs'
import { formatDate } from '../../../utils/dayjs-config'
import {
Box,
Heading,
@@ -45,7 +46,7 @@ export const CourseStatistics: React.FC<CourseStatisticsProps> = ({ lessons = []
// Вычисляем статистику курса
const stats = useMemo(() => {
if (!lessons.length) {
if (!lessons || lessons.length === 0) {
return {
totalLessons: 0,
completedLessons: 0,
@@ -215,10 +216,10 @@ export const CourseStatistics: React.FC<CourseStatisticsProps> = ({ lessons = []
{stats.attendanceTrend !== 0 && (
<Flex align="center">
<StatArrow
type={stats.attendanceTrend > 0 ? 'increase' : 'decrease'}
type={Number(stats.attendanceTrend) > 0 ? 'increase' : 'decrease'}
/>
<Text>
{Math.abs(Math.round(stats.attendanceTrend))}%
{Math.abs(Math.round(Number(stats.attendanceTrend)))}%
</Text>
</Flex>
)}
@@ -261,7 +262,7 @@ export const CourseStatistics: React.FC<CourseStatisticsProps> = ({ lessons = []
</Flex>
<StatNumber fontSize="xl">
{stats.nextLessonDate
? dayjs(stats.nextLessonDate).format('DD.MM.YYYY')
? formatDate(stats.nextLessonDate, 'DD.MM.YYYY')
: t('journal.pl.statistics.noUpcoming')
}
</StatNumber>
+2 -2
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useMemo, useRef, useState } from 'react'
import dayjs from 'dayjs'
import dayjs, { formatDate } from '../../utils/dayjs-config'
import { generatePath, Link, useParams } from 'react-router-dom'
import { getNavigationValue, getFeatures } from '@brojs/cli'
import {
@@ -277,7 +277,7 @@ const LessonList = () => {
<AlertDialogOverlay>
<AlertDialogContent>
<AlertDialogHeader fontSize="lg" fontWeight="bold">
{t('journal.pl.lesson.deleteConfirm', { date: dayjs(lessonToDelete?.date).format('DD.MM.YY') })}
{t('journal.pl.lesson.deleteConfirm', { date: formatDate(lessonToDelete?.date, 'DD.MM.YY') })}
</AlertDialogHeader>
<AlertDialogBody>