/** * It's common (top-side) details object which exist on each object details view. * Here should be passed the gotten from API details. */ import type { ProductViewModel } from "@/core/types/dto"; import type { UploadedTexture } from "@/core/redux/customization"; import { useCallback, useState, type JSX } from "react"; import { addFavourites, removeFavourites } from "@/app/(visualization)/project/@modals/(.)customization/_actions/favourites"; import { useAppSession } from "@/core/utils/hooks/useAppSession"; import Image from "next/image"; import Favourite from "@/core/components/Icons/Favourite"; interface CommonDetailsProps extends Partial { uploaded?: UploadedTexture | null; isFavourite: boolean; } export default function CommonDetails(props: Readonly): JSX.Element { const name = props.uploaded?.uploaded ? props.uploaded.uploaded.textureName : props?.name; const image = props.uploaded?.uploaded ? props.uploaded.uploaded.loadUrl : props?.image; const [processing, setProcessing] = useState(false); const session = useAppSession(); const [favorite, setFavorite] = useState(props.isFavourite); const handleFavourites = useCallback(async (id: string) => { setProcessing(true); if (!props.isFavourite) { const response = await addFavourites(session.data?.user.id || "", id); setFavorite(response); } else { const response = await removeFavourites(session.data?.user.id || "", id); setFavorite(!response); } setProcessing(false); }, [props.isFavourite]); return (
{(image && name) && ( {name} )} {(!props.uploaded && props._id) && ( )} {!image && !name && (
)}
{/* TODO: the keys could be different, so it should be improved for independent displaying */}

Name: {name}

{props.uploaded?.uploaded && (

Size: {props.uploaded?.uploaded.width}x{props.uploaded?.uploaded.height}

)}

Brand: {props.brand}

Price: {props.price}

{/*{Object.keys(props.properties).map(p => (*/} {/*

*/} {/* {capitalize(p)}: */} {/* {props.properties[p]}*/} {/*

*/} {/*))}*/}
); }