diff --git a/src/controllers/index.ts b/src/controllers/index.ts index b30f972..53b7dd6 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -24,13 +24,9 @@ class Controller { throw new Error() } - let product = await productService.extractProductInformation(files[0]) - if (!product) { - product = '' - } - res.json({ product: JSON.parse(product) }) + const product = await productService.extractProductInformation(files[0]) + res.json(product) } catch (error) { - console.log(JSON.stringify(error)) next(error) } } diff --git a/src/services/product/index.ts b/src/services/product/index.ts index 709d425..cbd458f 100644 --- a/src/services/product/index.ts +++ b/src/services/product/index.ts @@ -17,7 +17,19 @@ class ProductService { extractProductInformation = async (audioFile: Express.Multer.File) => { const transcript = await openAiClient.whisper(audioFile) - const message = `Create a json object interface { name?: string price?: number description?: string image?: string | ArrayBuffer color?: string brand?: string model?: string category?: string subCategory?: string inventory?: number } of the transcript: ${transcript}` + + const message = `Create a json object interface { + name?: string + price?: number + description?: string + image?: string | ArrayBuffer + color?: + string brand?: string + model?: string + category?: string + subCategory?: string + inventory?: number } for the transcript: ${transcript} only for keys provided in transcript` + const response = await openAiClient.chatCompletions(message) if (!response || !response.content) { diff --git a/ui/src/components/organisms/edit-product-modal/components/edit-product-image-modal/index.tsx b/ui/src/components/organisms/edit-product-modal/components/edit-product-image-modal/index.tsx index 0229e0a..ba90943 100644 --- a/ui/src/components/organisms/edit-product-modal/components/edit-product-image-modal/index.tsx +++ b/ui/src/components/organisms/edit-product-modal/components/edit-product-image-modal/index.tsx @@ -19,7 +19,7 @@ const EditProductImageModal: FC = () => { const reader = new FileReader() reader.onload = () => { - productService.uploadProductIMages(image).then((response) => { + productService.uploadProductImages(image).then((response) => { const product = { ...productToEdit, color: response.data.find((res) => diff --git a/ui/src/components/organisms/edit-product-modal/index.tsx b/ui/src/components/organisms/edit-product-modal/index.tsx index 0546d48..fa99df9 100644 --- a/ui/src/components/organisms/edit-product-modal/index.tsx +++ b/ui/src/components/organisms/edit-product-modal/index.tsx @@ -7,22 +7,31 @@ import EditProductImageModal from './components/edit-product-image-modal' import { Box, Button, Card, CardMedia, TextField, Tooltip, Typography } from '@mui/material' import Grid from '@mui/material/Unstable_Grid2' import { Form, Formik } from 'formik' -import { Fragment } from 'react' +import { Fragment, useEffect, useState } from 'react' import { AudioRecorder } from 'react-audio-voice-recorder' const EditProductModal = () => { const { productToEdit, closeEditProductModal, updateProduct, openProductImageEditModal } = useProducts() + const [_productState, setProductState] = useState({} as IProduct) + + useEffect(() => { + if (productToEdit) { + setProductState(productToEdit) + } + }, [productToEdit]) + const onSubmit = (product: IProduct) => { updateProduct(product) closeEditProductModal() } - const addAudioElement = (blob: Blob) => { - const data = new FormData() - data.append('file', blob) - productService.uploadVoiceInput(data) + const addAudioElement = async (blob: Blob) => { + const formData = new FormData() + formData.append('file', blob) + const { data } = await productService.uploadVoiceInput(formData) + setProductState({ ...productToEdit, ...data }) } return ( @@ -32,11 +41,11 @@ const EditProductModal = () => { - Edit {productToEdit?.name} + Edit {_productState?.name} - - {({ values, dirty, handleChange }) => ( + + {({ values, handleChange }) => (
@@ -75,6 +84,7 @@ const EditProductModal = () => { }} > { label="Name" /> { { { value={values.brand} /> { { value={values.category} /> { { /> { - = ({ children } setLoading(true) productService - .uploadProductIMages(images) + .uploadProductImages(images) .then((response) => { Array.from(images).map((image) => { const reader = new FileReader() diff --git a/ui/src/services/product/index.ts b/ui/src/services/product/index.ts index 5e7b36a..a182342 100644 --- a/ui/src/services/product/index.ts +++ b/ui/src/services/product/index.ts @@ -1,13 +1,13 @@ import { axiosClient } from 'src/clients/axios' -import { IProductImageColor } from 'src/models/product' +import { IProduct, IProductImageColor } from 'src/models/product' class ProductService { - uploadProductIMages(images: FileList) { + uploadProductImages = async (images: FileList) => { return axiosClient.post('/images', images) } - uploadVoiceInput(audio: any) { - return axiosClient.post('/audio', audio) + uploadVoiceInput = async (audio: any) => { + return axiosClient.post('/audio', audio) } }