diff --git a/client/src/features/order-chat/ui/OrderChat.tsx b/client/src/features/order-chat/ui/OrderChat.tsx index ad07c43..7346365 100644 --- a/client/src/features/order-chat/ui/OrderChat.tsx +++ b/client/src/features/order-chat/ui/OrderChat.tsx @@ -9,7 +9,7 @@ import { fetchAdminAvatar } from '@/entities/user/api/user-api' import { $user } from '@/shared/model/auth' import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble' import { OrderMessageBody } from '@/shared/ui/OrderMessageBody' -import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor' +import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor.lazy' import { UserAvatar } from '@/shared/ui/UserAvatar' type Message = { diff --git a/client/src/features/order-detail/ui/OrderDetailContent.tsx b/client/src/features/order-detail/ui/OrderDetailContent.tsx index 36f5b0c..e935ae1 100644 --- a/client/src/features/order-detail/ui/OrderDetailContent.tsx +++ b/client/src/features/order-detail/ui/OrderDetailContent.tsx @@ -21,7 +21,7 @@ import { orderStatusLabelRu } from '@/shared/lib/order-status-labels' import { $user } from '@/shared/model/auth' import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble' import { OrderMessageBody } from '@/shared/ui/OrderMessageBody' -import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor' +import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor.lazy' import { UserAvatar } from '@/shared/ui/UserAvatar' import { DeliveryFeeAdjustmentForm } from './DeliveryFeeAdjustmentForm' diff --git a/client/src/features/product-review/ui/ProductReviewsList.tsx b/client/src/features/product-review/ui/ProductReviewsList.tsx index 130950f..db7167e 100644 --- a/client/src/features/product-review/ui/ProductReviewsList.tsx +++ b/client/src/features/product-review/ui/ProductReviewsList.tsx @@ -10,7 +10,7 @@ import { fetchPublicProductReviews } from '@/entities/review/api/reviews-api' import type { PublicProductReviewItem } from '@/entities/review/api/reviews-api' import { reviewsCountRu } from '@/shared/lib/reviews-count-ru' import { OptimizedImage } from '@/shared/ui/OptimizedImage' -import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' +import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent.lazy' import { UserAvatar } from '@/shared/ui/UserAvatar' function ReviewItem({ rv }: { rv: PublicProductReviewItem }) { diff --git a/client/src/features/product-review/ui/ReviewDialog.tsx b/client/src/features/product-review/ui/ReviewDialog.tsx index 959ad2c..257699d 100644 --- a/client/src/features/product-review/ui/ReviewDialog.tsx +++ b/client/src/features/product-review/ui/ReviewDialog.tsx @@ -10,7 +10,7 @@ import Rating from '@mui/material/Rating' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import axios from 'axios' -import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor' +import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor.lazy' type Props = { productTitle: string | null diff --git a/client/src/pages/admin-reviews/ui/AdminReviewsPage.tsx b/client/src/pages/admin-reviews/ui/AdminReviewsPage.tsx index e356f0f..9e8fdcf 100644 --- a/client/src/pages/admin-reviews/ui/AdminReviewsPage.tsx +++ b/client/src/pages/admin-reviews/ui/AdminReviewsPage.tsx @@ -15,7 +15,7 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { fetchAdminReviews, moderateReview } from '@/entities/review/api/admin-review-api' import { getErrorMessage } from '@/shared/lib/get-error-message' import { invalidateQueryKeys } from '@/shared/lib/invalidate-query-keys' -import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' +import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent.lazy' export function AdminReviewsPage() { const qc = useQueryClient() diff --git a/client/src/pages/me/ui/sections/MessagesPage.tsx b/client/src/pages/me/ui/sections/MessagesPage.tsx index b558264..e28df4c 100644 --- a/client/src/pages/me/ui/sections/MessagesPage.tsx +++ b/client/src/pages/me/ui/sections/MessagesPage.tsx @@ -20,8 +20,8 @@ import { usePageTitle } from '@/shared/lib/use-page-title' import { $user } from '@/shared/model/auth' import { ChatMessageBubble } from '@/shared/ui/ChatMessageBubble' import { OrderMessageBody } from '@/shared/ui/OrderMessageBody' -import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' -import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor' +import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent.lazy' +import { RichTextMessageEditor } from '@/shared/ui/RichTextMessageEditor.lazy' import { UserAvatar } from '@/shared/ui/UserAvatar' export function MessagesPage() { diff --git a/client/src/shared/ui/OrderMessageBody.tsx b/client/src/shared/ui/OrderMessageBody.tsx index ac98ba3..2ceb1d1 100644 --- a/client/src/shared/ui/OrderMessageBody.tsx +++ b/client/src/shared/ui/OrderMessageBody.tsx @@ -1,5 +1,5 @@ import Box from '@mui/material/Box' -import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' +import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent.lazy' type Props = { text: string diff --git a/client/src/shared/ui/RichTextMessageContent.lazy.tsx b/client/src/shared/ui/RichTextMessageContent.lazy.tsx new file mode 100644 index 0000000..b955c7d --- /dev/null +++ b/client/src/shared/ui/RichTextMessageContent.lazy.tsx @@ -0,0 +1,26 @@ +import { lazy, Suspense } from 'react' +import Box from '@mui/material/Box' +import CircularProgress from '@mui/material/CircularProgress' + +const RichTextMessageContentImpl = lazy(() => + import('./RichTextMessageContent').then((m) => ({ default: m.RichTextMessageContent })), +) + +type RichTextMessageContentProps = { + value: string + tone?: 'default' | 'review' | 'chat' +} + +export function RichTextMessageContent(props: RichTextMessageContentProps) { + return ( + + + + } + > + + + ) +} diff --git a/client/src/shared/ui/RichTextMessageEditor.lazy.tsx b/client/src/shared/ui/RichTextMessageEditor.lazy.tsx new file mode 100644 index 0000000..dd54cc6 --- /dev/null +++ b/client/src/shared/ui/RichTextMessageEditor.lazy.tsx @@ -0,0 +1,28 @@ +import { lazy, Suspense } from 'react' +import Box from '@mui/material/Box' +import CircularProgress from '@mui/material/CircularProgress' + +const RichTextMessageEditorImpl = lazy(() => + import('./RichTextMessageEditor').then((m) => ({ default: m.RichTextMessageEditor })), +) + +type RichTextMessageEditorProps = { + value: string + onChange: (next: string) => void + placeholder?: string + disabled?: boolean +} + +export function RichTextMessageEditor(props: RichTextMessageEditorProps) { + return ( + + + + } + > + + + ) +} diff --git a/client/src/widgets/reviews-block/ui/ReviewsBlock.tsx b/client/src/widgets/reviews-block/ui/ReviewsBlock.tsx index a288fca..20a4fb3 100644 --- a/client/src/widgets/reviews-block/ui/ReviewsBlock.tsx +++ b/client/src/widgets/reviews-block/ui/ReviewsBlock.tsx @@ -10,7 +10,7 @@ import { useQuery } from '@tanstack/react-query' import { Link as RouterLink } from 'react-router-dom' import { fetchLatestApprovedReviews } from '@/entities/review/api/reviews-api' import { OptimizedImage } from '@/shared/ui/OptimizedImage' -import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent' +import { RichTextMessageContent } from '@/shared/ui/RichTextMessageContent.lazy' import { UserAvatar } from '@/shared/ui/UserAvatar' function formatReviewDate(iso: string): string {