add first version of product

hotfix/hotfix-catalog-filter
Ernest Litvinenko 2024-03-18 00:49:29 +03:00
parent ed0f16e6c1
commit 2f4ee7021e
5 changed files with 40 additions and 13 deletions

3
.gitignore vendored
View File

@ -36,5 +36,4 @@ yarn-error.log*
next-env.d.ts next-env.d.ts
.idea/ .idea/
./docker-compose.yml Dockerfile
./Dockerfile

View File

@ -34,7 +34,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
{ {
// FIO // FIO
orderPropsId: 103, orderPropsId: 103,
value: body.fullName,E value: body.fullName
}, },
{ {
// Phone // Phone

View File

@ -180,7 +180,8 @@ const OilCard = ({product}: InferGetStaticPropsType<typeof getStaticProps>) => {
export default OilCard export default OilCard
export const getStaticPaths = async () => { export const getStaticPaths = async () => {
const {data} = await axios.get<ResponseData[]>("http://localhost:8000/api/v1/catalog") const service = new LocalAPI()
const data = await service.getCatalogItems() as {code: string}[]
const codes = data.map(item => ({params: {code: item.code}})) const codes = data.map(item => ({params: {code: item.code}}))
return { return {
paths: [ paths: [
@ -192,7 +193,8 @@ export const getStaticPaths = async () => {
} }
export const getStaticProps = async ({params: {code}}: { params: { code: string } }) => { export const getStaticProps = async ({params: {code}}: { params: { code: string } }) => {
const {data} = await axios.get<ResponseData>(`http://localhost:8000/api/v1/catalog/${code}`) const service = new LocalAPI()
const data = await service.getCatalogItemByCode(code)
return { return {
props: { props: {
product: data product: data

View File

@ -5,12 +5,9 @@ import {
Checkbox, Checkbox,
Button, Skeleton Button, Skeleton
} from "@nextui-org/react"; } from "@nextui-org/react";
import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import axios from "axios"; import axios from "axios";
import {InferGetStaticPropsType} from "next"; import {InferGetStaticPropsType} from "next";
import {ResponseData} from "@/pages/api/v1/catalog/properties"
import {ResponseData as ResponseDataProduct} from "@/pages/api/v1/catalog"
import FavouriteIcon from "@/../public/favourites_icon.svg"; import FavouriteIcon from "@/../public/favourites_icon.svg";
import {Dispatch, SetStateAction, useEffect, useState} from "react"; import {Dispatch, SetStateAction, useEffect, useState} from "react";
import {toggleFavourite} from "@/store/favourites"; import {toggleFavourite} from "@/store/favourites";
@ -80,7 +77,7 @@ const CatalogCard = (product: CardProps) => {
imageIsLoading && <Skeleton className={"absolute top-0 left-0 right-3/4 rounded-[20px] h-full"} /> imageIsLoading && <Skeleton className={"absolute top-0 left-0 right-3/4 rounded-[20px] h-full"} />
} }
{ {
product.properties.main_image && <Image src={`http://relynolli.elitvinenko.tech/upload/${product.properties.main_image[0]}`} alt={product.properties.viscosity!} className={"col-auto mx-auto mb-4 sm:col-span-2 sm:row-span-2"} width={300} height={430} onLoad={onImageLoad}/> product.properties.main_image && <img src={`/upload/${product.properties.main_image[0]}`} alt={product.name} className={"col-auto mx-auto mb-4 sm:col-span-2 sm:row-span-2"} width={300} height={430} onLoad={onImageLoad}/>
} }
<div className="col-auto sm:col-start-4 sm:col-span-6 h-full flex flex-col justify-center"> <div className="col-auto sm:col-start-4 sm:col-span-6 h-full flex flex-col justify-center">
<span className={"text-[#52525C] font-normal text-subtitle-4 mb-2 block"}>Стандарт API: {product.properties.api_standart} Тип: {product.properties.oil_type}</span> <span className={"text-[#52525C] font-normal text-subtitle-4 mb-2 block"}>Стандарт API: {product.properties.api_standart} Тип: {product.properties.oil_type}</span>
@ -137,11 +134,24 @@ const Catalog = (props: InferGetStaticPropsType<typeof getStaticProps>) => {
export default Catalog; export default Catalog;
export const getStaticProps = async () => { export const getStaticProps = async () => {
const {data} = await axios.get<ResponseData[]>("http://localhost:8000/api/v1/catalog/filters") const service = new LocalAPI()
const {data: catalogData} = await axios.get<ResponseDataProduct[]>("http://localhost:8000/api/v1/catalog") const filterData = await service.getFilters() as {id: number, name: string, values: {id: number, value: string}[]}[]
const catalogData = await service.getCatalogItems() as {
id: number
code: string,
name: string,
properties: {
[key: string]: string | string[]
}
detailText: string,
price: {
[key: string]: number | null
}
}[]
return { return {
props: { props: {
filterPropertiesData: data, filterPropertiesData: filterData,
catalog: catalogData catalog: catalogData
} }
} }

View File

@ -1,4 +1,5 @@
import axios, {AxiosInstance} from "axios"; import axios, {AxiosInstance} from "axios";
import {ResponseData} from "@/pages/api/v1/catalog";
type createFUserType = { type createFUserType = {
@ -22,10 +23,25 @@ class LocalAPI {
constructor() { constructor() {
this.instance = axios.create({ this.instance = axios.create({
baseURL: 'http://localhost:8000' baseURL: process.env.NODE_ENV === "development" ? "http://localhost:8000": "https://relynolli.ru"
}) })
} }
async getCatalogItems() {
const {data} = await this.instance.get('/api/v1/catalog')
return data
}
async getFilters() {
const {data} = await this.instance.get("/api/v1/catalog/filters")
return data
}
async getCatalogItemByCode(code: string) {
const {data} = await this.instance.get<ResponseData>(`/api/v1/catalog/${code}`)
return data
}
async getFuserId() { async getFuserId() {
let fuserId: string | number | null = localStorage.getItem('fuserId') let fuserId: string | number | null = localStorage.getItem('fuserId')