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 25

Preguntas 2

Ordenar por:

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

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” />

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 “[ ]”

El endpoint https://api.escuelajs.co/api/v1/products esta siendo muy manipulado.

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.
    Recomiendo usar React Icons [React icons preview for hi (react-icons.github.io)](https://react-icons.github.io/react-icons/icons/hi/)

    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>