No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Abriendo el detalle de cada producto

11/31
Recursos

Aportes 23

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para no usar archivo CSS en esta clase puedes adicionar esta clase.

top-[68px] w-[360px] h-[calc(100vh-68px)]

Muy importante nada de espacios dentro de los square brackets o “[ ]”

No hace falta instalar los iconos. Haciendo hover en cada uno de ellos tenemos la opción de copiar el SVG:

<button
          onClick={() => context.setCount(context.Count + 1)}
          className="absolute top-0 right-0 flex justify-center items-center bg-white w-6 h-6 rounded-full m-2 p-1"
        >
          <svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" className="w-6 h-6">
            <path fillRule="evenodd" d="M12 3.75a.75.75 0 01.75.75v6.75h6.75a.75.75 0 010 1.5h-6.75v6.75a.75.75 0 01-1.5 0v-6.75H4.5a.75.75 0 010-1.5h6.75V4.5a.75.75 0 01.75-.75z" clipRule="evenodd" />
          </svg>
        </button>

1- npm install @heroicons/react

2- import { BeakerIcon, ShoppingCartIcon } from ‘@heroicons/react/24/solid’

3- <ShoppingCartIcon className=“h-6 w-6 text-blue-500” />

Details hasta el momento

import React from 'react'
import { ArchiveBoxXMarkIcon } from '@heroicons/react/24/solid'

export const ProductDetail = () => {
  return (
    <aside className=" flex flex-col fixed right-0 border bg-white border-black rounded-lg w-[360px] h-[calc(100vh-80px)] bottom-4">
    <div className='flex justify-between items-center p-6'>
     <h2 className='font-medium text-xl'>Detail</h2>
     <div> <ArchiveBoxXMarkIcon  className="h-6 w-6 text-black-500 cursor-pointer" /></div>
    </div>
    </aside>
  )
}

Tailwind tiene una forma fácil de añadir valores específicos añadiendo w-[360px] e incluso usando calc dentro h-[calc(100vh-80px)]. Pero será esto pulcro para un código de producción?

<aside className="w-[360px] flex flex-col fixed right-0 border border-black rounded-lg bg-white h-[calc(100vh-80px)]">
      <div className="flex justify-between items-center p-6">
        <h2 className="font-medium text-xl">Details</h2>
        <div>
          <svg
            xmlns="https://www.w3.org/2000/svg"
            fill="none"
            viewBox="0 0 24 24"
            strokeWidth={1.5}
            stroke="currentColor"
            className="w-6 h-6"
          >
            <path
              strokeLinecap="round"
              strokeLinejoin="round"
              d="M6 18L18 6M6 6l12 12"
            />
          </svg>
        </div>
      </div>
    </aside>

Heroic icons

npm install @heroicons/react

Ver docs en: https://github.com/tailwindlabs/heroicons

Implementación de Iconos ![](https://static.platzi.com/media/user_upload/image-6851bd8c-3c94-4986-8556-dd29ff509d00.jpg) Método de como agregarlo a nuestro proyecto ![](https://static.platzi.com/media/user_upload/image-e6ddb3d6-ccba-405c-9df6-0d7c2c3bacbd.jpg)
Vengo cambiando todo lo que se me ocurre para practicar más lógica y TypeScript. Le puse un carrousel a las imagenes directamente y el botón de agregar al carrito en el hover de cada tarjeta. Como iconos uso los de la librería react-icons ![](https://i.imgur.com/lqrTTDf.png)![]()
Listo, Iconos agregados :)![](https://static.platzi.com/media/user_upload/Captura%20de%20pantalla%202024-05-15%20123646-3773113f-8cb4-4de8-8f61-d5c2dc99f2fd.jpg)
Mi humilde aporte: ```js import { ShoppingCartIcon as OutlineShoppingCartIcon } from '@heroicons/react/24/outline' import { ShoppingCartIcon as SolidShoppingCartIcon } from '@heroicons/react/24/solid' ....
  • {count === 0 ? <> <OutlineShoppingCartIcon className="h-6 w-6" />{count} : <> <SolidShoppingCartIcon className="h-6 w-6" />{count} }
  • ```
    En mi caso utilicé fontawesome para los íconos, les dejo la página por si les interesa: <https://fontawesome.com/> ![](https://static.platzi.com/media/user_upload/code-f573d9b4-c670-4d9f-b87f-3e3d0b8a6e2a.jpg)![](https://static.platzi.com/media/user_upload/view-53557cee-207a-4cdb-a568-d8c20714ff5a.jpg)
    Tarea de heroicons: ![](https://static.platzi.com/media/user_upload/image-4c6f082e-bbda-452f-b857-ba556e27958d.jpg)
    Use los svg y los importe al archivo que se necesita en una img cuyo src seria la de ese importe ![](https://static.platzi.com/media/user_upload/image-60a806ce-318e-4af6-921a-fb3c499f6941.jpg) ![](https://static.platzi.com/media/user_upload/image-2d2d060d-7dde-4c73-a377-3ed4dd486c88.jpg) ![](https://static.platzi.com/media/user_upload/image-dae4386a-359e-4492-ac21-d9b8db73cd1d.jpg)
    ![](https://static.platzi.com/media/user_upload/image-58c6578d-65d9-41b2-a752-715bb5511c57.jpg) No logro entender, por qué cuando aplico tailwind los estilos no se toman, como si se toman cuando los coloco con css nativo.

    Quiz realizado, Comparto avance en el cual cambie los logos e iconos que habiamos usados por unos que me llamaron la atencion

    A la hora de usarlo solo tengo que importar el UseContextGlobal y asi no tengo que importar todas las veces el usecontext

    import {UseContextGlobal} from '../../Context';
    const ProductDetails = () => {
        const context = UseContextGlobal()
        return ( 
            <aside className=" flex flex-col fixed right-3 border bg-white opacity-90   border-black rounded-lg top-[68px] w-[360px] h-[calc(100vh-80px)] bottom-4 ">
            <div className='flex justify-between items-center p-6'>
             <h2 className='font-medium text-xl'>Detail Order</h2> 
             <h3 className="font-medium text-xl" >Cantidad: {context.count}</h3>
             <div className="h-6 w-6 text-black-500 cursor-pointer"> </div>
            </div>
            </aside>
         );
    }
     
    export default ProductDetails;
    

    Asi quedo mi contexto global,

    import { createContext, useState,useContext} from 'react'
    export const ShoppingCartContext = createContext()
    
    export const ShoppingCartProvider = ({children}) => {
      const [count, setCount] = useState(0)
      return (
        <ShoppingCartContext.Provider value={{count,setCount }}>
          {children}
        </ShoppingCartContext.Provider>
      )
    }
    
    export const UseContextGlobal = () => {
      return useContext(ShoppingCartContext);
    }
    
    

    Asi vamos…

    ¡Oh no! El dominio de la API, ¡expiró!

    https://api.escuelajs.co/api/v1/products

    ¿O lo mudaron y no me he enterado? 😃

    Para los iconos, les recomiendo la libreria react-icons

    <div
    className='text-black text-lg font-bold absolute py-2 bottom-2 right-2 flex justify-center items-center bg-white w-8 h-8 p-1 rounded-full’
    onClick={() => context.setCount(context.count +1)}>
    +
    </div>