diff --git a/apps/chat/src/components/Chat/Chat.tsx b/apps/chat/src/components/Chat/Chat.tsx index 9c34ac4eb7..2ab20a86f5 100644 --- a/apps/chat/src/components/Chat/Chat.tsx +++ b/apps/chat/src/components/Chat/Chat.tsx @@ -43,6 +43,7 @@ import { DEFAULT_ASSISTANT_SUBMODEL_ID } from '@/src/constants/default-ui-settin import Loader from '../Common/Loader'; import { NotFoundEntity } from '../Common/NotFoundEntity'; +import ApplicationDetails from '../Marketplace/ApplicationDetails/ApplicationDetails'; import { ChatCompareRotate } from './ChatCompareRotate'; import { ChatCompareSelect } from './ChatCompareSelect'; import ChatExternalControls from './ChatExternalControls'; @@ -1015,5 +1016,11 @@ export function Chat() { /> ); } - return ; + return ( + + ); } diff --git a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationContent.tsx b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationContent.tsx index ebdae3fc78..98574e71dc 100644 --- a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationContent.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationContent.tsx @@ -2,10 +2,7 @@ import { IconCheck, IconChevronLeft, IconChevronRight, - IconMessageStar, - IconStarFilled, } from '@tabler/icons-react'; -import { useSession } from 'next-auth/react'; import { useRef, useState } from 'react'; import { useTranslation } from 'next-i18next'; @@ -19,12 +16,7 @@ import { isSmallScreen } from '@/src/utils/app/mobile'; import { Translation } from '@/src/types/translation'; -import UserIcon from '../../../../public/images/icons/user.svg'; import FullScreenImage from '../../Common/FullScreenImages'; -import { RatingHandler } from '../Rating/RatingHandler'; -import { RatingProgressBar } from '../Rating/RatingProgressBar'; - -import round from 'lodash-es/round'; interface Props { application: { @@ -69,13 +61,15 @@ const calculateTranslateX = ( export const ApplicationDetailsContent = ({ application }: Props) => { const { t } = useTranslation(Translation.Marketplace); - const { data: session } = useSession(); + // const dispatch = useAppDispatch(); + + // const { data: session } = useSession(); const sliderRef = useRef(null); const [activeSlide, setActiveSlide] = useState(0); const [fullScreenSlide, setFullScreenSlide] = useState(); - const [isRate, setIsRate] = useState(false); + // const [isRate, setIsRate] = useState(false); const swipeHandlers = useMobileSwipe({ onSwipedLeft: () => { @@ -89,18 +83,18 @@ export const ApplicationDetailsContent = ({ application }: Props) => { }); const previewImgsCount = application.previewImages.length; - const totalRating = Object.values(application.rating).reduce( - (totalRating, rating) => totalRating + rating, - 0, - ); - const ratingEntries = Object.entries(application.rating); - const averageRating = round( - ratingEntries.reduce( - (acc, [rating, count]) => acc + Number(rating) * count, - 0, - ) / totalRating, - 1, - ); + // const totalRating = Object.values(application.rating).reduce( + // (totalRating, rating) => totalRating + rating, + // 0, + // ); + // const ratingEntries = Object.entries(application.rating); + // const averageRating = round( + // ratingEntries.reduce( + // (acc, [rating, count]) => acc + Number(rating) * count, + // 0, + // ) / totalRating, + // 1, + // ); return (
@@ -180,7 +174,7 @@ export const ApplicationDetailsContent = ({ application }: Props) => { ))} -
+ {/*

{t('Rating')}

+ dispatch(UIActions.showSuccessToast(t('Rate sent'))) + } onClose={() => setIsRate(false)} />
)} - + */}

{t('Details')}

@@ -269,7 +263,7 @@ export const ApplicationDetailsContent = ({ application }: Props) => { */}
-
+ {/*

{t('Author')}

{ /> {application.author.name}
-
+
*/}

{t('Release date')}

{application.releaseDate} diff --git a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationDetails.tsx b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationDetails.tsx index ba8f6fefe2..fff679c4bc 100644 --- a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationDetails.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationDetails.tsx @@ -1,9 +1,9 @@ import { ModalState } from '@/src/types/modal'; import Modal from '../../Common/Modal'; -import { ApplicationDetailsContent } from './Content'; -import { ApplicationDetailsFooter } from './Footer'; -import { ApplicationDetailsHeader } from './Header'; +import { ApplicationDetailsContent } from './ApplicationContent'; +import { ApplicationDetailsFooter } from './ApplicationFooter'; +import { ApplicationDetailsHeader } from './ApplicationHeader'; const appHeader = { tags: ['Development', 'SQL'], diff --git a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx index 4260fde19f..512a7bbfe7 100644 --- a/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx +++ b/apps/chat/src/components/Marketplace/ApplicationDetails/ApplicationHeader.tsx @@ -1,10 +1,10 @@ import { IconBrandFacebook, - IconBrandLinkedin, IconBrandX, IconLink, IconShare, } from '@tabler/icons-react'; +import { useMemo } from 'react'; import { useTranslation } from 'next-i18next'; import Image from 'next/image'; @@ -14,7 +14,10 @@ import { translate } from '@/src/utils/app/translation'; import { Translation } from '@/src/types/translation'; -import { Menu } from '../../Common/DropdownMenu'; +import { useAppDispatch } from '@/src/store/hooks'; +import { UIActions } from '@/src/store/ui/ui.reducers'; + +import { Menu, MenuItem } from '../../Common/DropdownMenu'; interface Props { application: { @@ -26,16 +29,44 @@ interface Props { const src = 'https://i.pravatar.cc/300?img=3'; -const contextMenuItems = [ - { BrandIcon: IconLink, text: translate('Copy link') }, - { BrandIcon: IconBrandFacebook, text: translate('Share via Facebook') }, - { BrandIcon: IconBrandX, text: translate('Share via X') }, - { BrandIcon: IconBrandLinkedin, text: translate('Share via LinkedIn') }, -]; - export const ApplicationDetailsHeader = ({ application }: Props) => { const { t } = useTranslation(Translation.Marketplace); + const dispatch = useAppDispatch(); + + const contextMenuItems = useMemo( + () => [ + { + BrandIcon: IconLink, + text: translate('Copy link'), + onClick: () => { + dispatch(UIActions.showInfoToast(t('Link copied'))); + }, + }, + { + BrandIcon: IconBrandFacebook, + text: translate('Share via Facebook'), + onClick: () => { + const shareUrl = encodeURIComponent(window.location.href); + window.open(`https://m.me/?link=${shareUrl}`, '_blank'); + }, + }, + { + BrandIcon: IconBrandX, + text: translate('Share via X'), + onClick: () => { + const shareText = encodeURIComponent( + 'Check out this awesome content!', + ); + const twitterUrl = `https://twitter.com/messages/compose?text=${shareText}`; + + window.open(twitterUrl, '_blank'); + }, + }, + ], + [dispatch, t], + ); + return (
{ listClassName="bg-layer-1 !z-[60] w-[290px]" placement="bottom-end" type="contextMenu" + data-qa="application-share-type-select" trigger={
- {contextMenuItems.map(({ BrandIcon, text }) => ( - + {...props} + /> ))}
diff --git a/apps/chat/src/components/Marketplace/Rating/RatingProgressBar.tsx b/apps/chat/src/components/Marketplace/Rating/RatingProgressBar.tsx index 99e4bf2b2a..6a2ca001f6 100644 --- a/apps/chat/src/components/Marketplace/Rating/RatingProgressBar.tsx +++ b/apps/chat/src/components/Marketplace/Rating/RatingProgressBar.tsx @@ -5,11 +5,11 @@ interface Props { export const RatingProgressBar = ({ total, count }: Props) => { return ( -
- +
+ >
); };