From 886db27bbb563cb900e711635af8465fd763cff9 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Fri, 27 Jan 2023 18:53:03 +0330 Subject: [PATCH 01/22] loading added in all of panel pages --- src/pages/admin-login/admin-login.page.jsx | 3 ++- .../Inventory-and-price/inventory-price.page.jsx | 2 ++ src/pages/control-panel/goods/goods.page.jsx | 2 +- src/pages/control-panel/orders/orders.page.jsx | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pages/admin-login/admin-login.page.jsx b/src/pages/admin-login/admin-login.page.jsx index ae31a31..81addc8 100644 --- a/src/pages/admin-login/admin-login.page.jsx +++ b/src/pages/admin-login/admin-login.page.jsx @@ -35,7 +35,8 @@ const AdminLogin = () => { dispatch(setCredentials({ ...res })); navigate('/' + INTERNAL_PATHS.CONTROLPANEL); } catch (error) { - console.log('golam') + if (error.originalStatus === 401) + setError("هیچ کاربری با این اطلاعات یافت نشد") } } }) diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 3992cc3..61de703 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -9,6 +9,7 @@ import { useFetchProductsQuery } from '../../../store/products/productsApiSlice' import Pagination from '../../../components/pagination/Pagination.component'; import { useEffect } from 'react'; import { useLogoutadmin } from '../../../hooks/logoutadmin'; +import { Loading } from '../../../components/Loading/Loading.component'; const InventoryPrice = () => { const [paginationStop, setpaginationStop] = useState(false) const [pageNumberAndpage, setpageNumberAndpage] = useState({ @@ -55,6 +56,7 @@ const InventoryPrice = () => {
+ {isLoading && } {products.map((element) => { return ( {
{products.length >= 1 ? products.map((element) => { return - }) :
- setModalShow(false)} - /> +
+ setModalShow(false)} + /> + +
+
{products.length >= 1 && {pageNumberAndpage.page}} diff --git a/src/pages/control-panel/orders/orders.page.jsx b/src/pages/control-panel/orders/orders.page.jsx index 97f7726..53b754d 100644 --- a/src/pages/control-panel/orders/orders.page.jsx +++ b/src/pages/control-panel/orders/orders.page.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { useEffect } from 'react'; import { useState } from 'react'; import { Helmet } from 'react-helmet'; +import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; import { Loading } from '../../../components/Loading/Loading.component'; import Pagination from '../../../components/pagination/Pagination.component'; import PanelTopTitle from '../../../components/panel-top-title/PanelTopTitle.component'; @@ -51,19 +52,14 @@ const Orders = () => { function handelorderfilter(params) { if (params.target.id === 'Delivered') { setOrdersfillterAndPageNubmer(state => { - return { ...state, filter: 'true' } + return { ...state, filter: 'true', page: 1 } }) } if (params.target.id === 'waiting') { setOrdersfillterAndPageNubmer(state => { - return { ...state, filter: 'false' } + return { ...state, filter: 'false', page: 1 } }) } - setOrdersfillterAndPageNubmer( - state => { - return { ...state, page: 1 } - } - ) } return ( <> @@ -91,7 +87,7 @@ const Orders = () => {
{isLoading && } - + {orders.length >= 1 ? : }
Date: Sat, 28 Jan 2023 18:27:22 +0330 Subject: [PATCH 03/22] save button added and some bug fixed in panel page --- src/assets/styles/public.scss | 2 +- .../styles/some-componetns-style/saveBtn.scss | 97 +++++++++++++++++++ src/components/buttons/SaveBtn.component.jsx | 17 ++++ src/components/buttons/buttons.module.scss | 3 +- .../EditProduct.component.jsx | 4 +- .../InventoryPriceCard.component.jsx | 4 +- src/layouts/header/header.layout.jsx | 2 +- .../inventory-price.module.scss | 3 +- .../inventory-price.page.jsx | 37 ++++--- src/pages/control-panel/goods/goods.page.jsx | 23 +++-- .../control-panel/orders/orders.page.jsx | 19 +++- src/store/getSlice-rtk-query.js | 68 ------------- src/store/ui-slice.js | 4 + 13 files changed, 185 insertions(+), 98 deletions(-) create mode 100644 src/assets/styles/some-componetns-style/saveBtn.scss create mode 100644 src/components/buttons/SaveBtn.component.jsx delete mode 100644 src/store/getSlice-rtk-query.js diff --git a/src/assets/styles/public.scss b/src/assets/styles/public.scss index 7986506..181e072 100644 --- a/src/assets/styles/public.scss +++ b/src/assets/styles/public.scss @@ -1,5 +1,5 @@ @import 'reset.scss'; - +@import './some-componetns-style//saveBtn.scss'; @font-face { font-family: 'vazir'; src: url('../font/Vazir-Regular-FD.woff2'); diff --git a/src/assets/styles/some-componetns-style/saveBtn.scss b/src/assets/styles/some-componetns-style/saveBtn.scss new file mode 100644 index 0000000..f2e58bc --- /dev/null +++ b/src/assets/styles/some-componetns-style/saveBtn.scss @@ -0,0 +1,97 @@ +/* CSS */ +.button-82-pushable { + position: relative; + border: none; + background: transparent; + padding: 0; + cursor: pointer; + outline-offset: 4px; + transition: filter 250ms; + user-select: none; + -webkit-user-select: none; + touch-action: manipulation; + } + + .button-82-shadow { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 12px; + background: hsl(0deg 0% 0% / 0.25); + will-change: transform; + transform: translateY(2px); + transition: + transform + 600ms + cubic-bezier(.3, .7, .4, 1); + } + + .button-82-edge { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-radius: 12px; + background:linear-gradient(to left, hsl(197deg 85% 5%) 0%, hsl(174deg 96% 28%) 8%, hsl(178deg 85% 16%) 92%, hsl(340deg 60% 33%) 100%); + } + + .button-82-front { + display: block; + position: relative; + padding: 8px 27px; + border-radius: 12px; + font-size: 1.1rem; + color: white; + background: hsl(202deg 98% 47%); + will-change: transform; + transform: translateY(-4px); + transition: + transform + 600ms + cubic-bezier(.3, .7, .4, 1); + } + + @media (min-width: 768px) { + .button-82-front { + font-size: 1.25rem; + padding: 8px 42px; + } + } + + .button-82-pushable:hover { + filter: brightness(110%); + -webkit-filter: brightness(110%); + } + + .button-82-pushable:hover .button-82-front { + transform: translateY(-6px); + transition: + transform + 250ms + cubic-bezier(.3, .7, .4, 1.5); + } + + .button-82-pushable:active .button-82-front { + transform: translateY(-2px); + transition: transform 34ms; + } + + .button-82-pushable:hover .button-82-shadow { + transform: translateY(4px); + transition: + transform + 250ms + cubic-bezier(.3, .7, .4, 1.5); + } + + .button-82-pushable:active .button-82-shadow { + transform: translateY(1px); + transition: transform 34ms; + } + + .button-82-pushable:focus:not(:focus-visible) { + outline: none; + } \ No newline at end of file diff --git a/src/components/buttons/SaveBtn.component.jsx b/src/components/buttons/SaveBtn.component.jsx new file mode 100644 index 0000000..2265e68 --- /dev/null +++ b/src/components/buttons/SaveBtn.component.jsx @@ -0,0 +1,17 @@ +import React from 'react'; + +const SaveBtnComponent = () => { + return ( +
+ +
+ ); +} + +export default SaveBtnComponent; diff --git a/src/components/buttons/buttons.module.scss b/src/components/buttons/buttons.module.scss index 1b5aa58..55d490d 100644 --- a/src/components/buttons/buttons.module.scss +++ b/src/components/buttons/buttons.module.scss @@ -7,4 +7,5 @@ padding: 6px 0; display: flex; justify-content: center; -} \ No newline at end of file +} + diff --git a/src/components/inventory-price-card/EditProduct.component.jsx b/src/components/inventory-price-card/EditProduct.component.jsx index bb49368..11deefd 100644 --- a/src/components/inventory-price-card/EditProduct.component.jsx +++ b/src/components/inventory-price-card/EditProduct.component.jsx @@ -3,7 +3,7 @@ import TitleTextGroup from './TitleTextGroup.component'; import Button from 'react-bootstrap/Button'; import Styles from './InventoryPriceCard.module.scss' import { numberWithCommas } from '../../utils/functions.utils' -const EditProduct = ({ inventory, price }) => { +const EditProduct = ({ inventory, price, id }) => { const pricewithcomma = numberWithCommas(price) return (
@@ -15,7 +15,7 @@ const EditProduct = ({ inventory, price }) => { {inventory}
- +
); } diff --git a/src/components/inventory-price-card/InventoryPriceCard.component.jsx b/src/components/inventory-price-card/InventoryPriceCard.component.jsx index d58132b..d6ea5dc 100644 --- a/src/components/inventory-price-card/InventoryPriceCard.component.jsx +++ b/src/components/inventory-price-card/InventoryPriceCard.component.jsx @@ -3,11 +3,11 @@ import EditProduct from './EditProduct.component'; import TitleTextGroup from './TitleTextGroup.component'; import Styles from './InventoryPriceCard.module.scss' import { numberWithCommas } from '../../utils/functions.utils'; -const InventoryPriceCard = ({ img, title, price, inventory }) => { +const InventoryPriceCard = ({ img, title, price, inventory, id }) => { const pricewithcomma = numberWithCommas(price) return (
- +
diff --git a/src/layouts/header/header.layout.jsx b/src/layouts/header/header.layout.jsx index 459a1c7..374010c 100644 --- a/src/layouts/header/header.layout.jsx +++ b/src/layouts/header/header.layout.jsx @@ -27,7 +27,7 @@ const Header = () => {
- +
diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.module.scss b/src/pages/control-panel/Inventory-and-price/inventory-price.module.scss index c173c6e..3e55ab4 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.module.scss +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.module.scss @@ -1,10 +1,11 @@ .inventory_header{ display: flex; justify-content: flex-end; - padding: 17px 20px; + padding: 17px 32px; background-color: white; box-shadow: 0 1px 0 rgb(0 0 0 / 14%), 0 2px 0 rgb(0 0 0 / 5%); position: fixed; right: 0; left: 0; + justify-content: space-between; } \ No newline at end of file diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 8134669..6668112 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -11,13 +11,14 @@ import { useEffect } from 'react'; import { useLogoutadmin } from '../../../hooks/logoutadmin'; import { Loading } from '../../../components/Loading/Loading.component'; import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; +import SaveBtnComponent from '../../../components/buttons/SaveBtn.component'; const InventoryPrice = () => { const [paginationStop, setpaginationStop] = useState(false) const [pageNumberAndpage, setpageNumberAndpage] = useState({ page: 1, filter: "null" }) - const { data: products = [], isLoading, error } = useFetchProductsQuery(pageNumberAndpage) + const { data: products = [], isLoading, error, isSuccess } = useFetchProductsQuery(pageNumberAndpage) const inventoryError = useLogoutadmin(error) function handelPageHangeback() { setpageNumberAndpage(state => { @@ -45,29 +46,41 @@ const InventoryPrice = () => { } }, [products.length]); const appTittle = getAppTitle() + let requestAnswer = null + if (products.length > 0) { + requestAnswer = products.map((element) => { + return ( + + + ) + }) + } + if (isLoading) { + requestAnswer = + } + if (products.length === 0 && isSuccess) { + requestAnswer = + } + return ( <> پنل مدیریت {appTittle} | موجودی و قیمت
+ مدیریت موجودی و قیمت ها
- {isLoading && } - {products.length >= 1 ? products.map((element) => { - return ( - - ) - }) : } + {requestAnswer} {products.length >= 1 && {pageNumberAndpage.page}}
diff --git a/src/pages/control-panel/goods/goods.page.jsx b/src/pages/control-panel/goods/goods.page.jsx index cc311b4..71f03fe 100644 --- a/src/pages/control-panel/goods/goods.page.jsx +++ b/src/pages/control-panel/goods/goods.page.jsx @@ -25,7 +25,7 @@ const Goods = () => { page: 1, filter: "null" }) - const { data: products = [], isLoading, error } = useFetchProductsQuery(pageNumberAndpage) + const { data: products = [], isLoading, error, isSuccess } = useFetchProductsQuery(pageNumberAndpage) const appTittle = getAppTitle() const goodsError = useLogoutadmin(error) @@ -71,14 +71,26 @@ const Goods = () => { } //delete modal showing - const handleShow = () => setShowDeleteModal(true); + + //request answer setting + let requestAsnwer = null + if (products.length > 0) { + requestAsnwer = products.map((element) => { + return + }) + } + if (isLoading) { + requestAsnwer = + } + if (products.length === 0 && isSuccess) { + requestAsnwer = + } return (
پنل مدیریت {appTittle} | کالا ها - {isLoading && }
@@ -100,10 +112,7 @@ const Goods = () => {
- {products.length >= 1 ? products.map((element) => { - return - }) : - } + {requestAsnwer}
diff --git a/src/pages/control-panel/orders/orders.page.jsx b/src/pages/control-panel/orders/orders.page.jsx index 53b754d..d51bd4f 100644 --- a/src/pages/control-panel/orders/orders.page.jsx +++ b/src/pages/control-panel/orders/orders.page.jsx @@ -20,7 +20,7 @@ const Orders = () => { }) const { data: itemslengh } = useFetchOrdersLengthQuery(ordersfillterAndPageNubmer) console.log(itemslengh); - const { data: orders = [], isLoading, error } = useFetchOrdersQuery(ordersfillterAndPageNubmer) + const { data: orders = [], isLoading, error, isSuccess } = useFetchOrdersQuery(ordersfillterAndPageNubmer) const ordersError = useLogoutadmin(error) function handelPageHangeback() { setOrdersfillterAndPageNubmer(state => { @@ -61,6 +61,20 @@ const Orders = () => { }) } } + if (error) { + alert(error.message) + } + //request answer setting + let requestAsnwer = null + if (orders.length > 0) { + requestAsnwer = + } + if (isLoading) { + requestAsnwer = + } + if (orders.length === 0 && isSuccess) { + requestAsnwer = + } return ( <> @@ -86,8 +100,7 @@ const Orders = () => {
- {isLoading && } - {orders.length >= 1 ? : } + {requestAsnwer}
({ -// fetchProducts: builder.query({ -// query: (page) => { -// if (page.filter == "null") { -// return `products?_page=${page.page}`; -// } else { -// return `products?category=${page.filter}&_page=${page.page}`; -// } -// }, -// providesTags: ["Posts"], -// }), -// fetchsubcategory: builder.query({ -// query: () => "subcategory", -// providesTags: ["Posts"], -// }), -// fetchOrders: builder.query({ -// query: (page) => { -// if (page.filter == "null") { -// return `orders?_page=${page.page}&_limit=7`; -// } else { -// return `orders?delivered=${page.filter}&_page=${page.page}&_limit=7`; -// } -// }, -// providesTags: ["Posts"], -// }), -// fetchcategory: builder.query({ -// query: () => "category", -// providesTags: ["Posts"], -// }), -// fetchOrdersLength: builder.query({ -// query: (page) => { -// if (page.filter == "null") { -// return `orders`; -// } else { -// return `orders?delivered=${page.filter}`; -// } -// }, -// transformResponse: (res) => { -// return res.length; -// }, -// providesTags: ["Posts"], -// }), -// createProduct: builder.mutation({ -// query: (post) => ({ -// url: "products", -// method: "POST", -// body: post, -// }), -// invalidatesTags: ["Posts"], -// }), -// }), -// }); -// export const { -// useFetchProductsQuery, -// useCreateProductMutation, -// useFetchsubcategoryQuery, -// useFetchcategoryQuery, -// useFetchOrdersQuery, -// useFetchOrdersLengthQuery, -// } = fetchProducts; -// export default fetchProducts; diff --git a/src/store/ui-slice.js b/src/store/ui-slice.js index 9f8f97b..6c0995c 100644 --- a/src/store/ui-slice.js +++ b/src/store/ui-slice.js @@ -2,6 +2,10 @@ import { createSlice } from "@reduxjs/toolkit"; const initialState = { showMenu: false, showZoom: false, + editBtnToggle_id: { + btnshow: false, + dataId: null, + }, }; const uiSlice = createSlice({ name: "ui", From 3d02be7f1fc3e498b5d23dce4dc1f2657d498fb7 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sat, 28 Jan 2023 22:52:18 +0330 Subject: [PATCH 04/22] edit ui selection added --- src/components/buttons/SaveBtn.component.jsx | 1 + .../EditProduct.component.jsx | 57 ++++++++++++++++--- .../InventoryPriceCard.component.jsx | 10 +++- .../InventoryPriceCard.module.scss | 16 ++++++ .../TitleTextGroup.component.jsx | 2 +- .../modals/OrdersModal.component.jsx | 31 ++++++++++ src/pages/admin-login/admin-login.page.jsx | 13 ++++- .../inventory-price.page.jsx | 7 ++- src/store/ui-slice.js | 6 ++ 9 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 src/components/modals/OrdersModal.component.jsx diff --git a/src/components/buttons/SaveBtn.component.jsx b/src/components/buttons/SaveBtn.component.jsx index 2265e68..aefb48b 100644 --- a/src/components/buttons/SaveBtn.component.jsx +++ b/src/components/buttons/SaveBtn.component.jsx @@ -1,6 +1,7 @@ import React from 'react'; const SaveBtnComponent = () => { + return (
+
); } diff --git a/src/components/inventory-price-card/InventoryPriceCard.component.jsx b/src/components/inventory-price-card/InventoryPriceCard.component.jsx index d6ea5dc..ab10c70 100644 --- a/src/components/inventory-price-card/InventoryPriceCard.component.jsx +++ b/src/components/inventory-price-card/InventoryPriceCard.component.jsx @@ -3,8 +3,11 @@ import EditProduct from './EditProduct.component'; import TitleTextGroup from './TitleTextGroup.component'; import Styles from './InventoryPriceCard.module.scss' import { numberWithCommas } from '../../utils/functions.utils'; + const InventoryPriceCard = ({ img, title, price, inventory, id }) => { + const pricewithcomma = numberWithCommas(price) + return (
@@ -15,7 +18,12 @@ const InventoryPriceCard = ({ img, title, price, inventory, id }) => {
- {pricewithcomma} +
+ {"تومان"} + {pricewithcomma} + +
+
diff --git a/src/components/inventory-price-card/InventoryPriceCard.module.scss b/src/components/inventory-price-card/InventoryPriceCard.module.scss index a068c01..3f73955 100644 --- a/src/components/inventory-price-card/InventoryPriceCard.module.scss +++ b/src/components/inventory-price-card/InventoryPriceCard.module.scss @@ -46,4 +46,20 @@ display: flex; flex-direction: column; align-items: flex-end; +} +.inputparent{ +display: flex; + flex-direction: column; + align-items: flex-end; + input{ + + width: 90%; + border-radius: 5px; + outline: none; + border: 1px solid; + + } +} +.priceparent{ + display: flex; } \ No newline at end of file diff --git a/src/components/inventory-price-card/TitleTextGroup.component.jsx b/src/components/inventory-price-card/TitleTextGroup.component.jsx index dcfaf78..7c7941f 100644 --- a/src/components/inventory-price-card/TitleTextGroup.component.jsx +++ b/src/components/inventory-price-card/TitleTextGroup.component.jsx @@ -3,7 +3,7 @@ const TitleTextGroup = ({ title, children }) => { return (
- {children} + {children}
{title}
diff --git a/src/components/modals/OrdersModal.component.jsx b/src/components/modals/OrdersModal.component.jsx new file mode 100644 index 0000000..cfa4e72 --- /dev/null +++ b/src/components/modals/OrdersModal.component.jsx @@ -0,0 +1,31 @@ +import Button from 'react-bootstrap/Button'; +import Modal from 'react-bootstrap/Modal'; +import FormInput from '../form-input/FormInput.component'; +import Styles from './modals.module.scss' + +function OrsersModal(props) { + + return ( + + + + افزودن کالا + + + + + + + + + + ); +} + + +export default OrsersModal \ No newline at end of file diff --git a/src/pages/admin-login/admin-login.page.jsx b/src/pages/admin-login/admin-login.page.jsx index 039250a..4358b24 100644 --- a/src/pages/admin-login/admin-login.page.jsx +++ b/src/pages/admin-login/admin-login.page.jsx @@ -12,6 +12,7 @@ import axios from 'axios'; import { setCredentials } from '../../store/auth/authSlice'; import { useDispatch } from 'react-redux'; import { useLoginMutation } from '../../store/auth/authApiSlice'; +import { IoReturnDownBack } from 'react-icons/io5' const AdminLogin = () => { const [showPassword, setShowPassword] = useState(false) const navigate = useNavigate() @@ -93,7 +94,17 @@ const AdminLogin = () => {
- ورود + +
+ + + + بازگشت به سایت + +
+ + + ورود
diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 6668112..0eb4239 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -12,7 +12,10 @@ import { useLogoutadmin } from '../../../hooks/logoutadmin'; import { Loading } from '../../../components/Loading/Loading.component'; import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; import SaveBtnComponent from '../../../components/buttons/SaveBtn.component'; +import { useSelector } from 'react-redux'; const InventoryPrice = () => { + const saveBtn = useSelector(state => state.ui.editBtnToggle_id) + const [paginationStop, setpaginationStop] = useState(false) const [pageNumberAndpage, setpageNumberAndpage] = useState({ page: 1, @@ -72,8 +75,8 @@ const InventoryPrice = () => { پنل مدیریت {appTittle} | موجودی و قیمت -
- +
+ {saveBtn.btnshow ? : ''} مدیریت موجودی و قیمت ها diff --git a/src/store/ui-slice.js b/src/store/ui-slice.js index 6c0995c..b4a44a4 100644 --- a/src/store/ui-slice.js +++ b/src/store/ui-slice.js @@ -23,6 +23,12 @@ const uiSlice = createSlice({ hideZoom(state) { state.showZoom = false; }, + editOnClick(state, action) { + state.editBtnToggle_id = { + btnshow: true, + dataId: action.payload, + }; + }, }, }); From 9a1199b4e1227bbb55d1e57f21bffdf330728544 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sat, 28 Jan 2023 23:12:34 +0330 Subject: [PATCH 05/22] not fount page added --- src/assets/images/404.gif | Bin 0 -> 235953 bytes .../modals/OrdersModal.component.jsx | 4 ++-- src/components/tabel/Tabel.component.jsx | 4 ++-- src/components/tabel/Tr.component.jsx | 4 ++-- src/pages/Error/not-found.module.scss | 18 ++++++++++++++++++ src/pages/Error/not-found.page.jsx | 15 +++++++++++---- .../control-panel/orders/orders.page.jsx | 9 ++++++++- 7 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 src/assets/images/404.gif create mode 100644 src/pages/Error/not-found.module.scss diff --git a/src/assets/images/404.gif b/src/assets/images/404.gif new file mode 100644 index 0000000000000000000000000000000000000000..355f953f62685e65bbc271780d712e3845514112 GIT binary patch literal 235953 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�_V#=HrmIA#UoTW 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 { +const TabelComponent = ({ orders, setModalShow }) => { return ( @@ -16,7 +16,7 @@ const TabelComponent = ({ orders }) => { {orders.map((element) => { - return { +const TrComponent = ({ username, OrderRegistrationTime, prices, lastname, setModalShow }) => { const unix_timestamp = OrderRegistrationTime const date = new Date(unix_timestamp); @@ -17,7 +17,7 @@ const TrComponent = ({ username, OrderRegistrationTime, prices, lastname }) => { return ( diff --git a/src/pages/Error/not-found.module.scss b/src/pages/Error/not-found.module.scss new file mode 100644 index 0000000..27dc15a --- /dev/null +++ b/src/pages/Error/not-found.module.scss @@ -0,0 +1,18 @@ +.gifparent{ + width: 100%; + display: flex; + justify-content: center; + img{ + width: 21rem; + } +} +.notFoundtextParent{ + display: flex; + justify-content: center; + margin-top: 15%; + h1{ + + font-size: 28px; + } + +} \ No newline at end of file diff --git a/src/pages/Error/not-found.page.jsx b/src/pages/Error/not-found.page.jsx index 9d5a99b..2b8b244 100644 --- a/src/pages/Error/not-found.page.jsx +++ b/src/pages/Error/not-found.page.jsx @@ -1,7 +1,8 @@ import Helmet from "react-helmet"; import PageContainer from "../../layouts/pageContainer/pageContainer.layout"; import { getAppTitle } from "../../utils/functions.utils"; - +import notFoundGif from '../../assets/images/404.gif' +import Styles from './not-found.module.scss' const NotFound = () => { const appTitle = getAppTitle() return ( @@ -13,9 +14,15 @@ const NotFound = () => {
-

- صفحه ای که دنبال آن بودید پیدا نشد -

+
+

+ صفحه ای که دنبال آن بودید پیدا نشد +

+ +
+
+ notFoundGif +
diff --git a/src/pages/control-panel/orders/orders.page.jsx b/src/pages/control-panel/orders/orders.page.jsx index d51bd4f..4d26aad 100644 --- a/src/pages/control-panel/orders/orders.page.jsx +++ b/src/pages/control-panel/orders/orders.page.jsx @@ -4,6 +4,7 @@ import { useState } from 'react'; import { Helmet } from 'react-helmet'; import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; import { Loading } from '../../../components/Loading/Loading.component'; +import OrdersModal from '../../../components/modals/OrdersModal.component'; import Pagination from '../../../components/pagination/Pagination.component'; import PanelTopTitle from '../../../components/panel-top-title/PanelTopTitle.component'; import TabelComponent from '../../../components/tabel/Tabel.component'; @@ -12,6 +13,7 @@ import { useFetchOrdersLengthQuery, useFetchOrdersQuery, useFetchTestQuery } fro import { getAppTitle } from '../../../utils/functions.utils'; import Styles from './orders.module.scss' const Orders = () => { + const [modalShow, setModalShow] = React.useState(false); const appTittle = getAppTitle() const [paginationStop, setpaginationStop] = useState(false) const [ordersfillterAndPageNubmer, setOrdersfillterAndPageNubmer] = useState({ @@ -67,7 +69,7 @@ const Orders = () => { //request answer setting let requestAsnwer = null if (orders.length > 0) { - requestAsnwer = + requestAsnwer = } if (isLoading) { requestAsnwer = @@ -109,6 +111,11 @@ const Orders = () => { }}> {orders.length >= 1 && itemslengh > 8 ? {ordersfillterAndPageNubmer.page} : ''} + + setModalShow(false)} + /> ); } From 7abc85f724b78a5eda014b617cdc11f4c76967d9 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sun, 29 Jan 2023 11:48:53 +0330 Subject: [PATCH 06/22] orders modal ui complete --- .../modals/OrdersModal.component.jsx | 27 +++++++-- .../modals/OrdersTabel.component.jsx | 57 +++++++++++++++++++ src/components/modals/modals.module.scss | 47 ++++++++++++++- src/pages/admin-login/admin-login.module.scss | 2 +- 4 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 src/components/modals/OrdersTabel.component.jsx diff --git a/src/components/modals/OrdersModal.component.jsx b/src/components/modals/OrdersModal.component.jsx index ebe9595..24f97d4 100644 --- a/src/components/modals/OrdersModal.component.jsx +++ b/src/components/modals/OrdersModal.component.jsx @@ -1,7 +1,9 @@ import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; import FormInput from '../form-input/FormInput.component'; +import TitleTextGroup from '../inventory-price-card/TitleTextGroup.component'; import Styles from './modals.module.scss' +import OrdersTabel from './OrdersTabel.component'; function OrdersModal(props) { @@ -14,14 +16,31 @@ function OrdersModal(props) { > - افزودن کالا + بررسی سفارش - + +
+ + اکبر زمانی + + + تهران,خیابان طوس,کوچه عربی + + + 1400-5-20 + + + 1400-7-31 + +
+
+ +
- - + + ); diff --git a/src/components/modals/OrdersTabel.component.jsx b/src/components/modals/OrdersTabel.component.jsx new file mode 100644 index 0000000..935e35c --- /dev/null +++ b/src/components/modals/OrdersTabel.component.jsx @@ -0,0 +1,57 @@ +import React from 'react'; +import Styles from './modals.module.scss' + +const OrdersTabel = () => { + return ( +
- + {jalaliDate} {prices}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
تعدادقیمت کالا
1 100000روغن سرخ کردنی 12 کیلویی
1 100000 غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
1 100000غلام اب داد غلام ر غلام اب داد غلام رف غلام امد غلام کجایی
+ ); +} + +export default OrdersTabel; diff --git a/src/components/modals/modals.module.scss b/src/components/modals/modals.module.scss index 8dec1a1..80c0dfd 100644 --- a/src/components/modals/modals.module.scss +++ b/src/components/modals/modals.module.scss @@ -95,4 +95,49 @@ } .deletemodalbody{ direction: rtl; -} \ No newline at end of file +} +.ordermaninfo{ + display: flex; + flex-direction: column; + align-items: flex-end; + margin-right: 39%; +} + +table { + font-family: arial, sans-serif; + border-collapse: collapse; + + } + + td, th { + border: 1px solid #dddddd; + text-align: left; + padding: 8px; + } + + tr:nth-child(even) { + background-color: #dddddd; + } + + tr,th,td,tbody,thead{ + direction: rtl; + } + .tabelSection{ + display: flex; + flex-direction: column; + align-items: center; + } + .tabel{ + border: 1px solid + rgb(159, 159, 159); + margin-top: 1rem; + + } + .ordermodalfooter{ + + justify-content: center !important; + } + .ordersmodalbody{ + max-height: 22rem; + overflow: overlay; + } \ No newline at end of file diff --git a/src/pages/admin-login/admin-login.module.scss b/src/pages/admin-login/admin-login.module.scss index 29e2ff3..f73e338 100644 --- a/src/pages/admin-login/admin-login.module.scss +++ b/src/pages/admin-login/admin-login.module.scss @@ -69,7 +69,7 @@ outline:none; margin-top: 41px; align-items: center; /* width: 100%; */ - justify-content: center; + justify-content: space-between; position: relative; } .navigatetosignup{ From 4b14f815525a85f36c081671464f0826f93df86f Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sun, 29 Jan 2023 14:02:51 +0330 Subject: [PATCH 07/22] handel home lazy loading --- src/apis/apiSlice.js | 4 +- .../HomeProductionsCard.module.scss | 2 +- .../ProductionCardHome.component.jsx | 49 ++++++++++-- .../ProductionCardHome.module.css | 32 +++++++- src/pages/home/home.module.css | 4 + src/pages/home/home.page.jsx | 10 ++- .../ProductionCardHome.module.css | 75 +++++++++++++++++++ .../ProductionContainer.component.jsx | 71 +++++++++++++----- src/routes/index.routes.jsx | 1 + src/store/products/homeProductsApiSlice.js | 19 +++++ 10 files changed, 233 insertions(+), 34 deletions(-) create mode 100644 src/pages/home/production-card-home-container/ProductionCardHome.module.css create mode 100644 src/store/products/homeProductsApiSlice.js diff --git a/src/apis/apiSlice.js b/src/apis/apiSlice.js index 635f534..cd87d9f 100644 --- a/src/apis/apiSlice.js +++ b/src/apis/apiSlice.js @@ -8,7 +8,9 @@ const baseQuery = fetchBaseQuery({ credentials: "same-origin", prepareHeaders: (headers, { getState, endpoint }) => { const token = localStorage.getItem("token"); - console.log(endpoint); + if (endpoint === "fetchHomeProducts" || endpoint === "fetchHomecategory") { + return headers; + } if (endpoint === REFRESH_TOKEN_URL) { const token = localStorage.getItem("refreshToken"); headers.set("refreshToken", token); diff --git a/src/components/home-productions-card/HomeProductionsCard.module.scss b/src/components/home-productions-card/HomeProductionsCard.module.scss index bb969d2..0cf6b8d 100644 --- a/src/components/home-productions-card/HomeProductionsCard.module.scss +++ b/src/components/home-productions-card/HomeProductionsCard.module.scss @@ -17,7 +17,7 @@ justify-content: space-between; .imagecontainer{ - border: 1px solid #8080804f; + border-radius: 1px; width: 9rem; height: 9rem; diff --git a/src/components/production-card-home/ProductionCardHome.component.jsx b/src/components/production-card-home/ProductionCardHome.component.jsx index d3ef295..d8afc5e 100644 --- a/src/components/production-card-home/ProductionCardHome.component.jsx +++ b/src/components/production-card-home/ProductionCardHome.component.jsx @@ -1,16 +1,49 @@ import React from 'react'; +import Placeholder from 'react-bootstrap/Placeholder'; import Styles from './ProductionCardHome.module.css' export const ProductionCardHome = ({ name, price, image }) => { + return ( -
-
- {image} -
-
- {name} - {price} تومان + <> +
+
+ {image} +
+
+ {name} + {price} تومان +
-
+ ); } +{/*
+
+ {image} +
+
+ {name} + {price} تومان +
+
*/} + +// <> +// { +// fakeArray.map(() => { +//
+//
+// {image} +//
+//
+// +// +// +// +// +//
+ +//
+// }) +// } +// \ No newline at end of file diff --git a/src/components/production-card-home/ProductionCardHome.module.css b/src/components/production-card-home/ProductionCardHome.module.css index 820fe2a..8c794f2 100644 --- a/src/components/production-card-home/ProductionCardHome.module.css +++ b/src/components/production-card-home/ProductionCardHome.module.css @@ -11,14 +11,35 @@ background-color: rgb(255, 253, 253); justify-content: space-around; } +.ProductionCardHomefake{ + display: flex; + flex-direction: column; + width: 8.9rem; + height: 13rem; + align-items: center; + border: 1px solid #e7e7e763; + padding: 10px 15px; + cursor: pointer; + font-size: 14px; + background-color: rgb(255, 253, 253); + justify-content: space-around; +} .imagecontainer{ height:6rem; -width: 6rem; -border: 1px solid #e7e7e7; +width: 7rem; + border-radius: 5px; padding: 6px; margin-bottom: 10px; } +.imagecontainerplaceholder{ + height:6rem; + width: 9rem; + border: 1px solid #e7e7e7; + border-radius: 5px; + padding: 6px; + margin-bottom: 10px; + } .textflex{ display: flex; @@ -38,6 +59,13 @@ img{ text-align: initial; line-height: 1.5rem; color: #555252; + height: 53px; + display: -webkit-box; + max-width: 400px; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; } diff --git a/src/pages/home/home.module.css b/src/pages/home/home.module.css index 2063c02..3b329f7 100644 --- a/src/pages/home/home.module.css +++ b/src/pages/home/home.module.css @@ -22,4 +22,8 @@ .category_title{ text-align: center; margin-top: 3rem; +} +.categoryTitle{ + font-size: 24px; + font-weight: 700; } \ No newline at end of file diff --git a/src/pages/home/home.page.jsx b/src/pages/home/home.page.jsx index 1a85dc1..1c87b9f 100644 --- a/src/pages/home/home.page.jsx +++ b/src/pages/home/home.page.jsx @@ -9,6 +9,7 @@ import SecondCategory from "./second-category/SecondCategory.component"; import ProductionScroller from "../../components/productions-scroller/ProductionScroller"; + const Home = () => { @@ -22,18 +23,21 @@ const Home = () => { {appTitle} | صفحه اصلی - +
- +
-

دسته بندی های پوریا کالا

+
+ +
+
دسته بندی های پوریا کالا
diff --git a/src/pages/home/production-card-home-container/ProductionCardHome.module.css b/src/pages/home/production-card-home-container/ProductionCardHome.module.css new file mode 100644 index 0000000..8c794f2 --- /dev/null +++ b/src/pages/home/production-card-home-container/ProductionCardHome.module.css @@ -0,0 +1,75 @@ +.ProductionCardHome{ + display: flex; + flex-direction: column; + width: 9rem; + height: 13rem; + align-items: center; + border: 1px solid #e7e7e763; + padding: 10px 15px; + cursor: pointer; + font-size: 14px; + background-color: rgb(255, 253, 253); + justify-content: space-around; +} +.ProductionCardHomefake{ + display: flex; + flex-direction: column; + width: 8.9rem; + height: 13rem; + align-items: center; + border: 1px solid #e7e7e763; + padding: 10px 15px; + cursor: pointer; + font-size: 14px; + background-color: rgb(255, 253, 253); + justify-content: space-around; +} +.imagecontainer{ +height:6rem; +width: 7rem; + +border-radius: 5px; +padding: 6px; +margin-bottom: 10px; +} +.imagecontainerplaceholder{ + height:6rem; + width: 9rem; + border: 1px solid #e7e7e7; + border-radius: 5px; + padding: 6px; + margin-bottom: 10px; + } + +.textflex{ + display: flex; + flex-direction: column; + align-items: center; + +} +img{ + width: inherit; + +} +.name{ + margin-bottom: 15px; + vertical-align: baseline; + overflow: hidden; + direction: rtl; + text-align: initial; + line-height: 1.5rem; + color: #555252; + height: 53px; + display: -webkit-box; + max-width: 400px; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + + + .ProductionCardHome:hover { + background-color: white; + box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; + } \ No newline at end of file diff --git a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx index c146c43..a67304b 100644 --- a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx +++ b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx @@ -1,33 +1,66 @@ import React from 'react'; +import { useState } from 'react'; +import { Placeholder } from 'react-bootstrap'; import { ProductionCardHome } from '../../../components/production-card-home/ProductionCardHome.component'; +import { useFetchHomecategoryQuery, useFetchHomeProductsQuery } from '../../../store/products/homeProductsApiSlice'; import './ProductionContainer.scss' -const ProductionContainer = () => { +import Styles from './ProductionCardHome.module.css' +const ProductionContainer = ({ categoryId }) => { + const fakeArray = ['1', '2', '3', '4', '5', '6', '7', '8'] + const { data: someProducts = [], isLoading: someProductLoading, isSuccess } = useFetchHomeProductsQuery(categoryId) + const { data: filterName, isLoading: categoryisLoading = false } = useFetchHomecategoryQuery(categoryId) + console.log(filterName); + let categoryTitleAnswer = + + + console.log(categoryisLoading) + if (categoryisLoading) { + categoryTitleAnswer = + + + } else if (isSuccess) { + categoryTitleAnswer = {filterName[0].name} + } + let productAnswer = null + if (someProductLoading) { + productAnswer = fakeArray.map(() => { + return
+
+ +
+
+ + + + + +
+ +
+ }) + } + if (isSuccess) { + productAnswer = someProducts.map((element) => { + return + + }) + } return ( <>
- کالاهای پر فروش + + {categoryTitleAnswer}
- - - - - - - - - - - - - + { + productAnswer + } -
diff --git a/src/routes/index.routes.jsx b/src/routes/index.routes.jsx index 40fd594..a2e1f4d 100644 --- a/src/routes/index.routes.jsx +++ b/src/routes/index.routes.jsx @@ -10,6 +10,7 @@ import SignUp from '../pages/sign-up/sign-up.page' import { PrivateRoutes } from './private.routes' import { ProtectedRoutes } from './protected.routes' import { PublicRoutes } from './public.routes' +import Home from '../pages/home/home.page' const LazyHome = React.lazy(() => import('../pages/home/home.page')) const LazyCart = React.lazy(() => import('../pages/cart/cart.page')) const LazyNotFound = React.lazy(() => import('../pages/Error/not-found.page')) diff --git a/src/store/products/homeProductsApiSlice.js b/src/store/products/homeProductsApiSlice.js new file mode 100644 index 0000000..377f235 --- /dev/null +++ b/src/store/products/homeProductsApiSlice.js @@ -0,0 +1,19 @@ +import { apiSlice } from "../../apis/apiSlice"; + +export const productsHomeApiSlice = apiSlice.injectEndpoints({ + endpoints: (builder) => ({ + fetchHomeProducts: builder.query({ + query: (category) => { + return `products?category=${category}&_page=1&_limit=8`; + }, + providesTags: ["Posts"], + }), + fetchHomecategory: builder.query({ + query: (id) => `category?id=${id}`, + providesTags: ["Posts"], + }), + }), +}); + +export const { useFetchHomeProductsQuery, useFetchHomecategoryQuery } = + productsHomeApiSlice; From 32d3140b6e8e2b11ca1c121f8eda7749a403d59a Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sun, 29 Jan 2023 14:17:58 +0330 Subject: [PATCH 08/22] link category card to single page --- .../ProductionCardHome.module.css | 4 ++++ .../ProductionContainer.component.jsx | 6 +++++- .../ProductionContainer.scss | 20 ++++++++++++++++++- src/routes/index.routes.jsx | 4 +++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/pages/home/production-card-home-container/ProductionCardHome.module.css b/src/pages/home/production-card-home-container/ProductionCardHome.module.css index 8c794f2..99aa334 100644 --- a/src/pages/home/production-card-home-container/ProductionCardHome.module.css +++ b/src/pages/home/production-card-home-container/ProductionCardHome.module.css @@ -72,4 +72,8 @@ img{ .ProductionCardHome:hover { background-color: white; box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; + } + .link{ + color: black; + text-decoration: none; } \ No newline at end of file diff --git a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx index a67304b..f62ead8 100644 --- a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx +++ b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx @@ -5,6 +5,8 @@ import { ProductionCardHome } from '../../../components/production-card-home/Pro import { useFetchHomecategoryQuery, useFetchHomeProductsQuery } from '../../../store/products/homeProductsApiSlice'; import './ProductionContainer.scss' import Styles from './ProductionCardHome.module.css' +import { Link } from 'react-router-dom'; +import { INTERNAL_PATHS } from '../../../configs/routs.config'; const ProductionContainer = ({ categoryId }) => { const fakeArray = ['1', '2', '3', '4', '5', '6', '7', '8'] const { data: someProducts = [], isLoading: someProductLoading, isSuccess } = useFetchHomeProductsQuery(categoryId) @@ -44,7 +46,9 @@ const ProductionContainer = ({ categoryId }) => { } if (isSuccess) { productAnswer = someProducts.map((element) => { - return + return + + }) } diff --git a/src/pages/home/production-card-home-container/ProductionContainer.scss b/src/pages/home/production-card-home-container/ProductionContainer.scss index 6b09dc5..2f05880 100644 --- a/src/pages/home/production-card-home-container/ProductionContainer.scss +++ b/src/pages/home/production-card-home-container/ProductionContainer.scss @@ -1,4 +1,22 @@ .categorycontainrproductions{ overflow: auto; width: 100%; -} \ No newline at end of file +} +.categorycontainrproductions::-webkit-scrollbar { + width: 5px; + height: 4px; + } + + /* Track */ + .categorycontainrproductions::-webkit-scrollbar-track { + background: transparent; + } + ::-webkit-scrollbar-thumb { + background: #888; + border-radius: 1rem; + } + + /* Handle on hover */ + ::-webkit-scrollbar-thumb:hover { + background: #555; + } \ No newline at end of file diff --git a/src/routes/index.routes.jsx b/src/routes/index.routes.jsx index a2e1f4d..20d1def 100644 --- a/src/routes/index.routes.jsx +++ b/src/routes/index.routes.jsx @@ -25,7 +25,9 @@ export const AppRouting = () => { } /> } /> } /> - } /> + + } /> + }> } /> From 4fd0a488fea25f91a89e09ed5fe2998819823468 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sun, 29 Jan 2023 22:47:18 +0330 Subject: [PATCH 09/22] link all of card and menu item to another pages --- src/apis/apiSlice.js | 10 ++- src/assets/styles/public.scss | 8 +++ .../CategoryMenuBody.component.jsx | 23 +++--- .../category-menu-body/categoryData.js | 72 ------------------- .../HomeProductionsCard.component.jsx | 17 +++-- .../HomeProductionsCard.module.scss | 53 +++++++++++--- .../ProductionScroll.module.css | 2 +- .../ProductionScroller.jsx | 43 +++++++---- src/pages/category/category.module.scss | 5 +- src/pages/category/category.page.jsx | 46 +++++++++--- .../ProductionCardHome.module.css | 5 +- .../ProductionContainer.component.jsx | 25 +++---- .../SecondCategory.component.jsx | 39 ++++------ src/routes/index.routes.jsx | 4 +- .../products/categoryProductsApiSlice.js | 33 +++++++++ src/store/products/homeProductsApiSlice.js | 24 ++++++- 16 files changed, 243 insertions(+), 166 deletions(-) delete mode 100644 src/components/category-menu-body/categoryData.js create mode 100644 src/store/products/categoryProductsApiSlice.js diff --git a/src/apis/apiSlice.js b/src/apis/apiSlice.js index cd87d9f..d403fdf 100644 --- a/src/apis/apiSlice.js +++ b/src/apis/apiSlice.js @@ -8,7 +8,15 @@ const baseQuery = fetchBaseQuery({ credentials: "same-origin", prepareHeaders: (headers, { getState, endpoint }) => { const token = localStorage.getItem("token"); - if (endpoint === "fetchHomeProducts" || endpoint === "fetchHomecategory") { + if ( + endpoint === "fetchHomeProducts" || + endpoint === "fetchHomecategory" || + endpoint === "fetchCategorysProducts" || + endpoint === "fetchCategoryscategory" || + endpoint === "fetchSubcategory" || + endpoint === "categorysInHome" || + endpoint === "subcategoryHome" + ) { return headers; } if (endpoint === REFRESH_TOKEN_URL) { diff --git a/src/assets/styles/public.scss b/src/assets/styles/public.scss index 181e072..c82c732 100644 --- a/src/assets/styles/public.scss +++ b/src/assets/styles/public.scss @@ -177,4 +177,12 @@ input:focus + label { } label{ outline: none !important; +} + //delete dafault link style +.link-route{ + color: black; + text-decoration: none; + } + .link-route:hover{ +color: black; } \ No newline at end of file diff --git a/src/components/category-menu-body/CategoryMenuBody.component.jsx b/src/components/category-menu-body/CategoryMenuBody.component.jsx index 28fdb1a..3e65833 100644 --- a/src/components/category-menu-body/CategoryMenuBody.component.jsx +++ b/src/components/category-menu-body/CategoryMenuBody.component.jsx @@ -5,27 +5,32 @@ import { useSelector } from 'react-redux'; import Styles from './CategoryMenuBody.module.scss' import { uiActions } from '../../store/ui-slice' import { useDispatch } from 'react-redux'; -import { categoryItems } from './categoryData'; +import { useCategorysInHomeQuery, useSubcategoryHomeQuery } from '../../store/products/homeProductsApiSlice'; +import { Link } from 'react-router-dom'; +import { INTERNAL_PATHS } from '../../configs/routs.config'; const CategoryMenuBody = () => { const showModal = useSelector(state => state.ui.showMenu) const dispatch = useDispatch() function hideMenuHandler() { dispatch(uiActions.hideMenu()) } + const { data: category = [] } = useCategorysInHomeQuery() + const { data: subCategory = [] } = useSubcategoryHomeQuery() + return showModal ? ReactDOM.createPortal( <>
- {categoryItems.map((item) => { - - return - {item.name} + {category.length > 0 && category.map((category) => { + return + {category.name}
    - {item.items.map((item, index) => { - return (<> -
  1. {item}
  2. - ) + {subCategory && subCategory.filter((ele) => ele.category == category.id).map((item, index) => { + return ( + +
  3. {item.name}
  4. +
    ) })}
diff --git a/src/components/category-menu-body/categoryData.js b/src/components/category-menu-body/categoryData.js deleted file mode 100644 index be13669..0000000 --- a/src/components/category-menu-body/categoryData.js +++ /dev/null @@ -1,72 +0,0 @@ -export const categoryItems = [ - { - id: "0", - name: "مد و پوشاک", - items: ["زنانه", "مردانه", "بچگانه"], - }, - { - id: "1", - name: "خانه و آشپز خانه", - items: [ - "صوتی و تصویری", - "خواب", - "فرش و گلیم", - "روشنایی و الکتریکی", - "آشپزخانه", - ], - }, - { - id: "2", - name: "ابزار", - items: [ - "تجهیزات صنعتی و انبارداری", - "باغبانی و کشاورزی", - "لوازم یدکی ووسایل نقلیه", - "ابزار برقی", - "یراق آلات", - ], - }, - { - id: "3", - name: "موبایل", - items: ["آیفون", "سامسونگ", "شیاعومی", "نوکیا"], - }, - { - id: "4", - name: "کالا های دیجیتال", - items: [ - "تبلت", - "لپتاپ", - "دوربین", - " ساعت و مچ بند هوشمند", - "لوازم جانبی کالای دیجیتال", - ], - }, - { - id: "5", - name: "ورزش و سفر", - items: ["تجهیزات سفر", "لوازم ورزش", "لوازم سفر و کمپینگ"], - }, - { - id: "6", - name: "کالا های سوپر مارکتی", - items: [ - "لبنیات", - "پروتئینی", - "کالا های اساسی", - "میوه و سبزیجات", - "تنقلات", - "نوشیدنی های گرم", - ], - }, - { - id: "7", - name: "زیبایی و سلامت", - items: ["دخترانه", "مردانه"], - }, - { - id: "8", - name: "کتاب و لوازم تحریر", - items: ["کتاب", "لوازم تحریر"], - }, -]; diff --git a/src/components/home-productions-card/HomeProductionsCard.component.jsx b/src/components/home-productions-card/HomeProductionsCard.component.jsx index a6c0410..7226000 100644 --- a/src/components/home-productions-card/HomeProductionsCard.component.jsx +++ b/src/components/home-productions-card/HomeProductionsCard.component.jsx @@ -1,21 +1,24 @@ import React from 'react'; import companyicon from '../../assets/images/company.png' import Styles from './HomeProductionsCard.module.scss' -export const HomeProductionsCard = ({ name, price, image, className }) => { +export const HomeProductionsCard = ({ name, price, image, className, discount, priceWithDiscount }) => { return (
+
+ {discount}% +
{name} -
- میهن - companyicon -
- + + تومان - {price} + {priceWithDiscount}
+ + {price} +
{image}
diff --git a/src/components/home-productions-card/HomeProductionsCard.module.scss b/src/components/home-productions-card/HomeProductionsCard.module.scss index 0cf6b8d..237ede4 100644 --- a/src/components/home-productions-card/HomeProductionsCard.module.scss +++ b/src/components/home-productions-card/HomeProductionsCard.module.scss @@ -15,12 +15,13 @@ align-items: center; height: 13rem; justify-content: space-between; - +position: relative; .imagecontainer{ border-radius: 1px; width: 9rem; height: 9rem; + margin-bottom: 10px; img{ border-radius: 12px; width: inherit; @@ -45,17 +46,51 @@ margin-right: 8px; /* */ .name{ + margin-bottom: 15px; vertical-align: baseline; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - width: 8rem; - direction: rtl; - margin-bottom: 10px; - direction: rtl; - margin-top: 10px; + overflow: hidden; + direction: rtl; + text-align: initial; + line-height: 1.5rem; + color: #555252; + height: 53px; + display: -webkit-box; + max-width: 400px; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + min-width: 186px; } .homeproductioncard:hover{ background-color: #ffffffff; box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; +} +.discount{ + top: -4px; + right: 12px; + width: 2rem; + height: 3rem; + background-color: #d10a0aeb; + clip-path: polygon(50% 0%, 98% 0, 100% 38%, 100% 65%, 79% 91%, 50% 74%, 21% 91%, 0 62%, 0 31%, 0 0); + position: absolute; +color: white; +font-size: 17px; +display: flex; +align-items: center; +justify-content: center; + +} +.priceWithoutDiscount{ + position: absolute; + bottom: 4px; + color: gray; + font-size: 14px; + right: 40px; +} +.priceWithDiscount{ + span{ + + font-size: 17.5px; + } } \ No newline at end of file diff --git a/src/components/productions-scroller/ProductionScroll.module.css b/src/components/productions-scroller/ProductionScroll.module.css index 540ce99..f9bdf78 100644 --- a/src/components/productions-scroller/ProductionScroll.module.css +++ b/src/components/productions-scroller/ProductionScroll.module.css @@ -14,7 +14,7 @@ opacity: 100; } .scrollitemscontainet{ -white-space: nowrap; +/* white-space: nowrap; */ scroll-behavior: smooth; overflow-x: scroll; overflow-y: hidden; diff --git a/src/components/productions-scroller/ProductionScroller.jsx b/src/components/productions-scroller/ProductionScroller.jsx index 09fc61d..ab43a64 100644 --- a/src/components/productions-scroller/ProductionScroller.jsx +++ b/src/components/productions-scroller/ProductionScroller.jsx @@ -3,7 +3,13 @@ import { data } from '../../database/db.exampel' import { MdChevronLeft, MdChevronRight } from 'react-icons/md'; import { HomeProductionsCard } from '../home-productions-card/HomeProductionsCard.component'; import Styles from './ProductionScroll.module.css' +import { useProductsHasDiscountQuery } from '../../store/products/homeProductsApiSlice' +import { Link } from 'react-router-dom'; +import { INTERNAL_PATHS } from '../../configs/routs.config'; function ProductionScroller() { + const { data: productsHasDiscount5 } = useProductsHasDiscountQuery(5) + const { data: productsHasDiscount10 } = useProductsHasDiscountQuery(10) + console.log(productsHasDiscount5); const slideLeft = () => { const slider = document.getElementById('slider1'); slider.scrollLeft = slider.scrollLeft - 400; @@ -39,13 +45,17 @@ function ProductionScroller() { id='slider1' className={Styles.scrollitemscontainet} > - {data.map((item, index) => ( - + {productsHasDiscount5 && productsHasDiscount5.map((item, index) => ( + + + ))}
@@ -62,13 +72,18 @@ function ProductionScroller() { id='slider2' className={Styles.scrollitemscontainet} > - {data.map((item, index) => ( - < HomeProductionsCard - key={index} - price='20.000' - name={item.productName} - image={item.image} - /> + {productsHasDiscount10 && productsHasDiscount10.map((item, index) => ( + + + + ))}
diff --git a/src/pages/category/category.module.scss b/src/pages/category/category.module.scss index 3190b71..087defa 100644 --- a/src/pages/category/category.module.scss +++ b/src/pages/category/category.module.scss @@ -1,5 +1,5 @@ .categoryheader{ - display: block; +display: flex; font-size: 15px; color: #555252; @@ -15,6 +15,7 @@ display: flex; margin: 0 16px; position: relative; + min-height: 90vh; } .category_top{ margin-top:145px; @@ -24,4 +25,4 @@ display: flex; justify-content: space-between; flex-direction: row-reverse; -} \ No newline at end of file +} diff --git a/src/pages/category/category.page.jsx b/src/pages/category/category.page.jsx index 12076e9..7b551c8 100644 --- a/src/pages/category/category.page.jsx +++ b/src/pages/category/category.page.jsx @@ -1,13 +1,47 @@ + import React from 'react'; +import { useState } from 'react'; import { Helmet } from 'react-helmet'; +import { Link, useParams } from 'react-router-dom'; import CategoryFilter from '../../components/category-filter/CategoryFilter.component'; +import EmptyDataAnimation from '../../components/empty-data-animation/EmptyDataAnimation.component'; import MainCard from '../../components/main-card/MainCard.component'; +import { INTERNAL_PATHS } from '../../configs/routs.config'; import { data } from '../../database/db.exampel'; import PageContainer from '../../layouts/pageContainer/pageContainer.layout'; +import { useFetchCategoryscategoryQuery, useFetchCategorysProductsQuery, useFetchSubcategoryQuery } from '../../store/products/categoryProductsApiSlice'; import { getAppTitle } from '../../utils/functions.utils'; import Styles from './category.module.scss' const Category = () => { const appTitle = getAppTitle() + const param = useParams() + const paramsData = param.id.split('-') + const categoryId = paramsData[0] + const subcategoryId = paramsData[1] + const [fetchObj, setFetchObj] = useState({ + category: categoryId, + page: 1, + subcategory: subcategoryId + }); + //I set the param in two way , when I just need to show category:'categoryId-o' and when I need subcategory too :"categoryId-subcategoryId" then I split by (-) and get my data from backend + const { data: products = [], isLoading, isSuccess } = useFetchCategorysProductsQuery(fetchObj) + const { data: subcategory = [] } = useFetchSubcategoryQuery(fetchObj) + const { data: category = [] } = useFetchCategoryscategoryQuery(fetchObj.category) + console.log(category); + console.log(subcategory.length > 0 ? subcategory[0].name : ''); + + let categoryfetchAnswer = null + if (isSuccess && products.length > 0) { + categoryfetchAnswer = products.map((product) => { + return + + + }) + } + if (products.length === 0) { + categoryfetchAnswer = + } return (
@@ -17,20 +51,16 @@ const Category = () => {
- فروشگاه اینترنتی پوریاکالا / موبایل - 10 کالا + فروشگاه اینترنتی پوریاکالا/ {category.length > 0 && category[0].name} {subcategory.length > 0 ? '/' + subcategory[0].name : ''} + {products.length} کالا
- {data.map((product) => { - return - - })} + {categoryfetchAnswer}
- + {products.length > 0 ? : ''}
diff --git a/src/pages/home/production-card-home-container/ProductionCardHome.module.css b/src/pages/home/production-card-home-container/ProductionCardHome.module.css index 99aa334..4d52f12 100644 --- a/src/pages/home/production-card-home-container/ProductionCardHome.module.css +++ b/src/pages/home/production-card-home-container/ProductionCardHome.module.css @@ -76,4 +76,7 @@ img{ .link{ color: black; text-decoration: none; - } \ No newline at end of file + } + .link:hover{ +color: black; +} \ No newline at end of file diff --git a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx index f62ead8..c5df604 100644 --- a/src/pages/home/production-card-home-container/ProductionContainer.component.jsx +++ b/src/pages/home/production-card-home-container/ProductionContainer.component.jsx @@ -10,12 +10,12 @@ import { INTERNAL_PATHS } from '../../../configs/routs.config'; const ProductionContainer = ({ categoryId }) => { const fakeArray = ['1', '2', '3', '4', '5', '6', '7', '8'] const { data: someProducts = [], isLoading: someProductLoading, isSuccess } = useFetchHomeProductsQuery(categoryId) - const { data: filterName, isLoading: categoryisLoading = false } = useFetchHomecategoryQuery(categoryId) - console.log(filterName); + const { data: filterData, isLoading: categoryisLoading = false } = useFetchHomecategoryQuery(categoryId) + let categoryTitleAnswer = - console.log(categoryisLoading) + if (categoryisLoading) { categoryTitleAnswer = @@ -24,12 +24,12 @@ const ProductionContainer = ({ categoryId }) => { categoryTitleAnswer = {filterName[0].name} + }}> {filterData[0].name} } let productAnswer = null if (someProductLoading) { - productAnswer = fakeArray.map(() => { - return
+ productAnswer = fakeArray.map((e, index) => { + return
@@ -46,7 +46,7 @@ const ProductionContainer = ({ categoryId }) => { } if (isSuccess) { productAnswer = someProducts.map((element) => { - return + return @@ -66,11 +66,12 @@ const ProductionContainer = ({ categoryId }) => { }
- -
- - مشاهده -
+ +
+ + مشاهده +
+
); diff --git a/src/pages/home/second-category/SecondCategory.component.jsx b/src/pages/home/second-category/SecondCategory.component.jsx index 21e97c1..89bb4ee 100644 --- a/src/pages/home/second-category/SecondCategory.component.jsx +++ b/src/pages/home/second-category/SecondCategory.component.jsx @@ -1,36 +1,21 @@ import React from 'react'; +import { Link } from 'react-router-dom'; import { CategoryItem } from '../../../components'; +import { INTERNAL_PATHS } from '../../../configs/routs.config'; +import { useCategorysInHomeQuery } from '../../../store/products/homeProductsApiSlice'; import Styles from './SecondCategory.module.scss' const SecondCategory = () => { + const { data: category } = useCategorysInHomeQuery() return (
- - کالا های دیجیتال - - - موبایل - - - ابزار - - - خانه و آشپز خانه - - - مد و پوشاک - - - کتاب و لوازم تحریر - - - زیبایی و سلامت - - - کالا های سوپر مارکتی - - - ورزش و سفر - + {category && category.map((category) => { + return + + {category.name} + + + })} +
); } diff --git a/src/routes/index.routes.jsx b/src/routes/index.routes.jsx index 20d1def..e3ebdb0 100644 --- a/src/routes/index.routes.jsx +++ b/src/routes/index.routes.jsx @@ -23,7 +23,9 @@ export const AppRouting = () => { }> } /> } /> - } /> + + } /> + } /> } /> diff --git a/src/store/products/categoryProductsApiSlice.js b/src/store/products/categoryProductsApiSlice.js new file mode 100644 index 0000000..89b5f7a --- /dev/null +++ b/src/store/products/categoryProductsApiSlice.js @@ -0,0 +1,33 @@ +import { apiSlice } from "../../apis/apiSlice"; + +export const productsCategorysApiSlice = apiSlice.injectEndpoints({ + endpoints: (builder) => ({ + fetchCategorysProducts: builder.query({ + query: (fetchObj) => { + if (fetchObj.subcategory == 0) { + return `products?category=${fetchObj.category}&_page=${fetchObj.page}&_limit=12`; + } + if (fetchObj.subcategory != 0) { + return `products?category=${fetchObj.category}&subcategory=${fetchObj.subcategory}&_page=${fetchObj.page}&_limit=12`; + } + }, + providesTags: ["Posts"], + }), + fetchCategoryscategory: builder.query({ + query: (id) => `category?id=${id}`, + providesTags: ["Posts"], + }), + fetchSubcategory: builder.query({ + query: (fetchObj) => { + return `subcategory?id=${fetchObj.subcategory}`; + }, + providesTags: ["Posts"], + }), + }), +}); + +export const { + useFetchCategorysProductsQuery, + useFetchSubcategoryQuery, + useFetchCategoryscategoryQuery, +} = productsCategorysApiSlice; diff --git a/src/store/products/homeProductsApiSlice.js b/src/store/products/homeProductsApiSlice.js index 377f235..83d7d32 100644 --- a/src/store/products/homeProductsApiSlice.js +++ b/src/store/products/homeProductsApiSlice.js @@ -12,8 +12,28 @@ export const productsHomeApiSlice = apiSlice.injectEndpoints({ query: (id) => `category?id=${id}`, providesTags: ["Posts"], }), + categorysInHome: builder.query({ + query: () => "category", + providesTags: ["Posts"], + }), + productsHasDiscount: builder.query({ + query: (discount) => + `http://localhost:3001/products?Discount=${discount}&_page=1`, + providesTags: ["Posts"], + }), + subcategoryHome: builder.query({ + query: () => { + return `subcategory`; + }, + providesTags: ["Posts"], + }), }), }); -export const { useFetchHomeProductsQuery, useFetchHomecategoryQuery } = - productsHomeApiSlice; +export const { + useCategorysInHomeQuery, + useFetchHomeProductsQuery, + useFetchHomecategoryQuery, + useProductsHasDiscountQuery, + useSubcategoryHomeQuery, +} = productsHomeApiSlice; From c4c6035c6d92fae7b987939323955800e756f8d4 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Sun, 29 Jan 2023 23:17:56 +0330 Subject: [PATCH 10/22] add data to single product page --- .../AddToCartSector.component.jsx | 6 +- .../discription/discription.component.jsx | 4 +- .../discription/discription.module.scss | 2 +- .../image-slider/ImageSlider.component.jsx | 118 +++++++++--------- .../single-product/single-product.page.jsx | 22 ++-- src/store/products/singleProductApiSlice.js | 14 +++ 6 files changed, 97 insertions(+), 69 deletions(-) create mode 100644 src/store/products/singleProductApiSlice.js diff --git a/src/components/add-to-cart-sector/AddToCartSector.component.jsx b/src/components/add-to-cart-sector/AddToCartSector.component.jsx index 7095af6..cb45713 100644 --- a/src/components/add-to-cart-sector/AddToCartSector.component.jsx +++ b/src/components/add-to-cart-sector/AddToCartSector.component.jsx @@ -6,8 +6,8 @@ import { numberWithCommas } from '../../utils/functions.utils'; import Styles from './AddToCartSector.module.scss' import Hr from '../hr/Hr.component'; import AddToCartBtn from '../buttons/AddToCartBtn.component'; -const AddToCartSector = () => { - const price = numberWithCommas(10000000) +const AddToCartSector = ({ price }) => { + const priceWithComma = numberWithCommas(price) return (
@@ -38,7 +38,7 @@ const AddToCartSector = () => {
- {price} + {priceWithComma}
diff --git a/src/pages/single-product/discription/discription.component.jsx b/src/pages/single-product/discription/discription.component.jsx index f405dc0..a83a12b 100644 --- a/src/pages/single-product/discription/discription.component.jsx +++ b/src/pages/single-product/discription/discription.component.jsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import Styles from './discription.module.scss' import { IoIosArrowBack } from 'react-icons/io' import Discriptionshowingbtn from './discriptionshowingbtn.component'; -const Discription = () => { +const Discription = ({ description }) => { const [showCloseBtn, setShowCloseBtn] = useState(false); function showMore() { setShowCloseBtn(true) @@ -14,7 +14,7 @@ const Discription = () => {

معرفی اجمالی:

-

گوشی موبایل «iPhone 11» یکی از سه گوشی شرکت اپل است که در کنفرانس سال 2019 این شرکت معرفی شد. این گوشی نسبت به گوشی‌های Pro و Pro Max قیمت پایین‌تری دارد اما طراحی مشابهی با این محصولات دارد. یکی از اصلی‌ترین تفاوت‌های این گوشی با دو گوشی دیگر، نمایشگر آیفون 11 است به فناوری Liquid Retina مجهز ‌شده است تا قیمت تمام شده کم‌تری داشته باشد. البته این نمایشگر رزولوشن رضایت‌بخشی دارد؛ به‌طوری‌که در اندازه­‌ی 6.1 اینچی‌اش، حدود 326 پیکسل را در هر اینچ جا داده است که میزان مطلوبی به حساب می‌‍آید. قاب پشتی آیفون جدید هم از شیشه ساخته‌ شده تا هم گوشی مشکل آنتن‌‌دهی نداشته باشد و هم امکان شارژ بی‌‌سیم باتری در این گوشی وجود داشته باشد. البته قابی آلومینیومی این بدنه شیشه‌ای را در خود جای داده است. این بدنه­‌ی زیبا در مقابل خط‌‌وخش مقاومت زیادی دارد؛ پس خیالتان از این بابت که آب و گردوغبار به‌‌راحتی روی آیفون 11 تأثیر نمی‌‌گذارد، راحت باشد. علاوه‌براین لکه و چربی هم روی این صفحه‌نمایش باکیفیت تأثیر چندانی ندارند اما این هم پایان کار نیست، آیفون جدید می‌تواند به مدت 30 دقیقه در عمق 2 متری آب دوام بیاورد. تشخیص چهره با استفاده از دوربین جلو دیگر ویژگی است که در آیفون جدید اپل به کار گرفته شده است. اما جالب‌ترین و واضح‌ترین تفاوت در این محصول جدید، دوربین‌هایی است که به شکل دوگانه در قاب پشتی جا خوش کرده‌اند. دو دوربین با سنسورهای 12مگاپیکسلی عکس‌هایی با کیفیتِ کاملاً رضایت‌بخش را به کاربر هدیه می‌دهد. دو دوربین که یکی از آن‌ها SL سه‌بعدی است هم دیگر به‌روزرسانی در آیفون 11 است. قابلیت اتصال به شبکه­‌های 4G، بلوتوث نسخه‌ی 5، نسخه­‌ی 13 از iOS دیگر ویژگی‌های این گوشی هستند. ازنظر سخت‌‌افزاری هم این گوشی از تراشه­‌ی جدید A13 بهره می‌برد که تا بتواند علاوه بر کارهای معمول، از قابلیت‌های جدید واقعیت مجازی که اپل این روزها روی آن تمرکز خاصی دارد، پشتیبانی کند. گوشی جدید اپل به باتری 3110 میلی‌آمپرساعتی، فناوری شارژ سریع PD2.0، فناوری شارژ بی‎‌سیم و استاندارد صوتی دالبی هم مجهز شده است. این محصول در کشور هند اسمبل شده است.

+

{description}

{!showCloseBtn ? بیشتر diff --git a/src/pages/single-product/discription/discription.module.scss b/src/pages/single-product/discription/discription.module.scss index c710f81..ed635c6 100644 --- a/src/pages/single-product/discription/discription.module.scss +++ b/src/pages/single-product/discription/discription.module.scss @@ -13,7 +13,7 @@ direction: rtl; font-size: 15px; line-height: 2.17; - height: 20rem; + max-height: 20rem; overflow: overlay; font-weight: 400; } diff --git a/src/pages/single-product/image-slider/ImageSlider.component.jsx b/src/pages/single-product/image-slider/ImageSlider.component.jsx index f6d226a..ba30596 100644 --- a/src/pages/single-product/image-slider/ImageSlider.component.jsx +++ b/src/pages/single-product/image-slider/ImageSlider.component.jsx @@ -4,7 +4,7 @@ import ReactImageMagnify from 'react-image-magnify'; import { useDispatch, useSelector } from 'react-redux'; import Styles from './imageslider.module.scss' import { uiActions } from '../../../store/ui-slice' -const ImageSlider = () => { +const ImageSlider = ({ images, isLoading }) => { const dispatch = useDispatch() const showZoom = useSelector(state => state.ui.showZoom) function zoomInImage() { @@ -18,65 +18,71 @@ const ImageSlider = () => { - -
- {!showZoom ? Third slide : - } -
-
- -
- {!showZoom ? Third slide : - } -
+ { + !isLoading && images.length > 1 && images.map((image, index) => { -
- -
- Third slide -
-
+ return +
+ {!showZoom ? Third slide : + } +
+
+ }) + }
); } export default ImageSlider; + + // + //
+ // {!showZoom ? Third slide : + // } + //
+ + //
+ // + //
+ // Third slide + //
+ //
\ No newline at end of file diff --git a/src/pages/single-product/single-product.page.jsx b/src/pages/single-product/single-product.page.jsx index 907f7a7..e549c12 100644 --- a/src/pages/single-product/single-product.page.jsx +++ b/src/pages/single-product/single-product.page.jsx @@ -8,13 +8,21 @@ import Discription from './discription/discription.component' import Rate from './rate/Rate.component'; import AddToCartSector from '../../components/add-to-cart-sector/AddToCartSector.component'; import ShowZoom from './show-zoom/ShowZoom.component'; +import { useFetchSingleProductQuery } from '../../store/products/singleProductApiSlice'; +import { useParams } from 'react-router-dom'; +import { Loading } from '../../components'; const fillStrip = { pricevalue: 50, quality: 90, packing: 15 } const SingleProduct = () => { + const productId = useParams() + const { data: productData, isLoading } = useFetchSingleProductQuery(productId.id) const appTitle = getAppTitle() + + // we just need object in here + const productObj = !isLoading && productData.length > 0 ? productData[0] : '' return ( <> @@ -23,19 +31,19 @@ const SingleProduct = () => { -
-
-

گوشی موبایل اپل مدل iPhone 11 تک سیم‌ کارت ظرفیت 128 گیگابایت و رم 4 گیگابایت

- + {!isLoading ?
+
+

{productObj.name}

+
- +
- +
-
+
: } diff --git a/src/store/products/singleProductApiSlice.js b/src/store/products/singleProductApiSlice.js new file mode 100644 index 0000000..bf31e6d --- /dev/null +++ b/src/store/products/singleProductApiSlice.js @@ -0,0 +1,14 @@ +import { apiSlice } from "../../apis/apiSlice"; + +export const productsHomeApiSlice = apiSlice.injectEndpoints({ + endpoints: (builder) => ({ + fetchSingleProduct: builder.query({ + query: (categoryID) => { + return `products?id=${categoryID}`; + }, + providesTags: ["Posts"], + }), + }), +}); + +export const { useFetchSingleProductQuery } = productsHomeApiSlice; From beb9420168719131741a7fe90e554fbb08f8f43c Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Mon, 30 Jan 2023 19:31:41 +0330 Subject: [PATCH 11/22] modal can add product now --- .../Form-select/FormSelect.component.jsx | 11 +- src/components/buttons/SaveBtn.component.jsx | 6 +- .../form-input/FormInput.component.jsx | 4 +- .../goods-card/GoodsCard.component.jsx | 4 +- .../goods-card/GoodsCard.module.scss | 5 +- src/components/modals/FileInput.component.jsx | 27 ++- .../modals/GoodsModal.component.jsx | 205 ++++++++++++++---- src/components/modals/modals.module.scss | 49 ++++- src/pages/admin-login/admin-login.page.jsx | 1 - .../inventory-price.page.jsx | 5 +- src/pages/control-panel/goods/goods.page.jsx | 2 +- src/store/auth/authSlice.js | 1 - src/store/products/addProductApiSlice.js | 16 ++ src/store/products/productsApiSlice.js | 2 +- src/utils/functions.utils.js | 6 + 15 files changed, 282 insertions(+), 62 deletions(-) create mode 100644 src/store/products/addProductApiSlice.js diff --git a/src/components/Form-select/FormSelect.component.jsx b/src/components/Form-select/FormSelect.component.jsx index b0ae2b7..f2d07e9 100644 --- a/src/components/Form-select/FormSelect.component.jsx +++ b/src/components/Form-select/FormSelect.component.jsx @@ -2,17 +2,20 @@ import React from 'react'; import { useState } from 'react'; import Form from 'react-bootstrap/Form'; -import { useFetchcategoryQuery, useFetchProductsQuery } from '../../store/products/productsApiSlice'; +import { useFetchcategoryQuery, useFetchProductsQuery, useFetchsubcategoryQuery } from '../../store/products/productsApiSlice'; -const FormSelect = ({ pagenum, handelSelectChange }) => { +const FormSelect = ({ pagenum, handelSelectChange, subcategory = null, placeholder }) => { const { data: catrgory = [] } = useFetchcategoryQuery() + const { data: subcatrgoryData = [] } = useFetchsubcategoryQuery() return (
handelSelectChange(e.target.value)} style={{ width: '6rem' }} id='filtercategory' size="sm"> - - {catrgory.map((element) => { + + {!subcategory ? catrgory.map((element) => { + return + }) : subcatrgoryData.map((element) => { return })} diff --git a/src/components/buttons/SaveBtn.component.jsx b/src/components/buttons/SaveBtn.component.jsx index aefb48b..ed3c580 100644 --- a/src/components/buttons/SaveBtn.component.jsx +++ b/src/components/buttons/SaveBtn.component.jsx @@ -1,14 +1,14 @@ import React from 'react'; -const SaveBtnComponent = () => { +const SaveBtnComponent = ({ children, type }) => { return ( -
+
diff --git a/src/components/form-input/FormInput.component.jsx b/src/components/form-input/FormInput.component.jsx index d961034..fb879ee 100644 --- a/src/components/form-input/FormInput.component.jsx +++ b/src/components/form-input/FormInput.component.jsx @@ -1,9 +1,11 @@ import React from 'react'; import Styles from './FormInput.module.scss' -const FormInput = ({ autoFocus = false, id, className = Styles.FormInput, isvalid, name, type = 'text', placeholder, value, onBlur, onChange }) => { +const FormInput = ({ autoFocus = false, id, className = Styles.FormInput, isvalid, name, type = 'text', placeholder, value, onBlur, onChange, min, max }) => { return ( { const [category, setCategory] = useState('') const [subcategory, setsubCategory] = useState('') @@ -14,6 +15,7 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD const { data: categorydata = [] } = useFetchcategoryQuery() // console.log(subcategoryId); + const imageHasHttp = img.includes('https') // console.log(sub); useEffect(() => { if (subcategorydata.length !== 0) { @@ -58,7 +60,7 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD
- {title} + {title}
diff --git a/src/components/goods-card/GoodsCard.module.scss b/src/components/goods-card/GoodsCard.module.scss index 31fed77..3a75d1a 100644 --- a/src/components/goods-card/GoodsCard.module.scss +++ b/src/components/goods-card/GoodsCard.module.scss @@ -14,10 +14,13 @@ width: 10rem; height: 10rem; margin: 10px; - + display: flex; + align-items: center; + justify-content: center; img{ width: inherit; } + overflow: hidden; } .btns_container{ display: flex; diff --git a/src/components/modals/FileInput.component.jsx b/src/components/modals/FileInput.component.jsx index cce12f0..66cb17f 100644 --- a/src/components/modals/FileInput.component.jsx +++ b/src/components/modals/FileInput.component.jsx @@ -3,19 +3,38 @@ import plusicon from '../../assets/images/plus.png' import imageSrc from '../../assets/images/profile.png' import { AiOutlinePicture } from 'react-icons/ai' import Styles from './modals.module.scss' -const FileInput = () => { +import { useState } from 'react'; +const FileInput = ({ setFile }) => { + const [imageData, setImageData] = useState(undefined) + + function encodeImageFileAsURL(e) { + const filesSelected = e.target.files; + if (filesSelected.length > 0) { + const fileToLoad = filesSelected[0]; + setFile(fileToLoad) + const fileReader = new FileReader(); + fileReader.onload = function (fileLoadedEvent) { + const srcData = fileLoadedEvent.target.result; // <- data: base64 + setImageData(srcData) + const imageSizeInByte = new Blob([srcData]).size + const imageSizeInMegeByte = imageSizeInByte / 1000000 + } + fileReader.readAsDataURL(fileToLoad); + } + } + return (
- + {imageData ? productimage : }
- + +
); } diff --git a/src/components/modals/GoodsModal.component.jsx b/src/components/modals/GoodsModal.component.jsx index 236230d..b97faf2 100644 --- a/src/components/modals/GoodsModal.component.jsx +++ b/src/components/modals/GoodsModal.component.jsx @@ -1,3 +1,5 @@ +import * as Yup from 'yup' +import { useFormik } from 'formik' import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; import FormInput from '../form-input/FormInput.component'; @@ -5,8 +7,96 @@ import Styles from './modals.module.scss' import FileInput from './FileInput.component'; import FormSelect from '../Form-select/FormSelect.component'; import { BiCategory } from 'react-icons/bi' +import { useState } from 'react'; +import { API_BASE_URL } from '../../configs/variables.config'; +import axios from 'axios'; +import SaveBtnComponent from '../buttons/SaveBtn.component'; +import { useAddProductMutation } from '../../store/products/addProductApiSlice'; function GoodsModal(props) { - function handelSelectChange() { + const [file, setFile] = useState(false) + const [imageIds, setImageId] = useState([]) + const [category, setCategory] = useState(undefined); + const [subcategory, setSubcategory] = useState(undefined); + const [error, setError] = useState(''); + const REQUIRED_MASSEGE = 'این فیلد نباید خالی باشد' + const [addproduct, { isLoading }] = useAddProductMutation() + + const formik = useFormik({ + initialValues: { + name: "", + categoryId: "", + price: "", + quantity: "", + Discount: '', + description: "" + }, validationSchema: Yup.object({ + name: Yup.string().required(REQUIRED_MASSEGE).min(3, 'ورودی کمتر از حد مجاز است'), + description: Yup.string().required('این فیلد نباید خالی باشد').min(20, 'ورودی کمتر از حد مجاز است'), + price: Yup.string().required(REQUIRED_MASSEGE), + quantity: Yup.string().required(REQUIRED_MASSEGE) + + }), + onSubmit: async (value) => { + try { + if (imageIds.length > 0 && category && subcategory) { + console.log(value, imageIds); + const res = await addproduct({ + category: category, + subcategory: subcategory, + Discount: value.Discount, + name: value.name, + image: imageIds, + description: value.description, + createdAt: Date.now(), + price: value.price, + quantity: value.quantity, + store: "admin" + }).unwrap() + } else if (imageIds.length === 0) { + setError('عکس انتخاب آپلود نشده'); + } else if (category === undefined) { + setError('دسته بندی انتخاب نشده'); + } else if (subcategory === undefined) { + setError('زیر مجموعه دسته بندی انتخاب نشده'); + } + } catch (e) { + alert(e.message) + } + setError('') + } + }) + + function handelSelectChangeCategory(value) { + + setCategory(value) + } + const addProduct = async () => { + try { + if (file) { + if (imageIds.length === 3) { + return setError('فقط سه عدد عکس میتوانید اضافه کنید') + } + const formData = new FormData(); + formData.append("image", file); + await axios.post(`${API_BASE_URL}upload`, formData).then((res) => { + if (res.status == 200) { + alert('عکس با موفقیت آپلود شد') + } + setImageId(state => { + if (state.length < 3) { + return state = [...state, res.data.filename] + } + }) + }) + } + } catch (error) { + setError(error.message) + } + setError('') + } + + function handelSelectChangeSubcategory(value) { + setSubcategory(value) } return ( @@ -16,50 +106,89 @@ function GoodsModal(props) { aria-labelledby="contained-modal-title-vcenter" centered > - + + {error} افزودن کالا - - -
-
-
-
- - < BiCategory style={{ - width: '23px', - height: ' 24px' - }} /> -
-
- - -
-
-
+
+ {file ? < Button onClick={addProduct} type='button' style={{ width: '5rem' }} value={'primary'}>آپلود : ''} +
+ + -
- - -
-
- - + + + +
+
+
+
+
+
+ دسته بندی + +
+
+ زیرمجموعه + +
+
+ +
+
+ {formik.touched.name && formik.errors.name ? {formik.errors.name} : ''} + + +
-
- - +
+ +
+ + +
+
+ {formik.touched.quantity && formik.errors.quantity ? {formik.errors.quantity} : ''} + + +
+
+ {formik.touched.price && formik.errors.price ? {formik.errors.price} : ''} + + +
-
- - -
- - - - + {formik.touched.description && formik.errors.description ? {formik.errors.description} : ''} + + +
+
+ + + + ); } diff --git a/src/components/modals/modals.module.scss b/src/components/modals/modals.module.scss index 80c0dfd..8c29e58 100644 --- a/src/components/modals/modals.module.scss +++ b/src/components/modals/modals.module.scss @@ -27,6 +27,7 @@ .inputparent{ display: flex; align-items: center; + position: relative; label{ font-size:19px; outline: none; @@ -39,13 +40,13 @@ display: flex; flex-direction: column; align-items: flex-end; - margin-right: 4rem; + margin-right: 3rem; } .firstRowParent{ display: flex; justify-content: space-between; - width: 42rem; - align-items: center; + width: 44rem; + align-items: flex-end; margin: 0 6px; } .input:focus-visible{ @@ -140,4 +141,44 @@ table { .ordersmodalbody{ max-height: 22rem; overflow: overlay; - } \ No newline at end of file + } + + .selectparent{ + display: flex; + justify-content: space-between; + width: 19rem; + } + + .validation_message{ + display: flex; + margin-right: 21px; + justify-content: flex-end; + font-size: 11px; + margin-bottom: 9px; + position: absolute; + right: 49px; + color: #d90000; + bottom: -25px; +} +.textareahasError{ + @extend .textarea; + border-color: #d90000; +} +.selectionGroup{ + display: flex; + flex-direction: column; + align-items: flex-end; +} +.generalerror{ + position: absolute; + top: 10px; + color: red; + left: 42%; + top: 20px; +} +.uploadBtnParent{ + position: absolute; + top: 8rem; + right: 9rem; + z-index: 10; +} \ No newline at end of file diff --git a/src/pages/admin-login/admin-login.page.jsx b/src/pages/admin-login/admin-login.page.jsx index 4358b24..d0ef45a 100644 --- a/src/pages/admin-login/admin-login.page.jsx +++ b/src/pages/admin-login/admin-login.page.jsx @@ -8,7 +8,6 @@ import CompanyName from '../../components/company-name/CompanyName.component'; import { Link, useNavigate } from 'react-router-dom'; import BaseBtn from '../../components/buttons/AddToCartBtn.component' import { INTERNAL_PATHS } from '../../configs/routs.config'; -import axios from 'axios'; import { setCredentials } from '../../store/auth/authSlice'; import { useDispatch } from 'react-redux'; import { useLoginMutation } from '../../store/auth/authApiSlice'; diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 0eb4239..841d61b 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -3,7 +3,6 @@ import { Helmet } from 'react-helmet'; import { getAppTitle } from '../../../utils/functions.utils' import PanelTopTitle from '../../../components/panel-top-title/PanelTopTitle.component'; import Styles from './inventory-price.module.scss' -import { data } from '../../../database/db.exampel'; import InventoryPriceCard from '../../../components/inventory-price-card/InventoryPriceCard.component'; import { useFetchProductsQuery } from '../../../store/products/productsApiSlice'; import Pagination from '../../../components/pagination/Pagination.component'; @@ -52,6 +51,7 @@ const InventoryPrice = () => { let requestAnswer = null if (products.length > 0) { requestAnswer = products.map((element) => { + return ( { requestAnswer = } + return ( <> پنل مدیریت {appTittle} | موجودی و قیمت
- {saveBtn.btnshow ? : ''} + {saveBtn.btnshow ? ذخیره : ''} مدیریت موجودی و قیمت ها diff --git a/src/pages/control-panel/goods/goods.page.jsx b/src/pages/control-panel/goods/goods.page.jsx index 71f03fe..e5e409f 100644 --- a/src/pages/control-panel/goods/goods.page.jsx +++ b/src/pages/control-panel/goods/goods.page.jsx @@ -96,7 +96,7 @@ const Goods = () => {
- +
- {title} + {title}
diff --git a/src/components/inventory-price-card/InventoryPriceCard.module.scss b/src/components/inventory-price-card/InventoryPriceCard.module.scss index 3f73955..bdb9acc 100644 --- a/src/components/inventory-price-card/InventoryPriceCard.module.scss +++ b/src/components/inventory-price-card/InventoryPriceCard.module.scss @@ -27,6 +27,7 @@ width: 10rem; height: 10rem; margin: 10px; + overflow: hidden; img{ width: inherit; } diff --git a/src/components/main-card/MainCard.component.jsx b/src/components/main-card/MainCard.component.jsx index 63aa932..e1cfd84 100644 --- a/src/components/main-card/MainCard.component.jsx +++ b/src/components/main-card/MainCard.component.jsx @@ -9,6 +9,7 @@ const MainCard = (props) => { const colorsArray = [ "blue", "white", "black", "green" ] + const imageHasHttp = image.includes('https') const numberplit = numberWithCommas(price) return (
@@ -16,7 +17,7 @@ const MainCard = (props) => {
- {title.toString()} + {title.toString()}
- {/* */} - diff --git a/src/pages/category/category.page.jsx b/src/pages/category/category.page.jsx index 7b551c8..6b1fa67 100644 --- a/src/pages/category/category.page.jsx +++ b/src/pages/category/category.page.jsx @@ -27,8 +27,7 @@ const Category = () => { const { data: products = [], isLoading, isSuccess } = useFetchCategorysProductsQuery(fetchObj) const { data: subcategory = [] } = useFetchSubcategoryQuery(fetchObj) const { data: category = [] } = useFetchCategoryscategoryQuery(fetchObj.category) - console.log(category); - console.log(subcategory.length > 0 ? subcategory[0].name : ''); + let categoryfetchAnswer = null if (isSuccess && products.length > 0) { diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 841d61b..18aaff1 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -59,7 +59,6 @@ const InventoryPrice = () => { title={element.name} inventory={element.quantity} img={element.image[0]} key={element.id} /> - ) }) } diff --git a/src/pages/control-panel/goods/goods.page.jsx b/src/pages/control-panel/goods/goods.page.jsx index e5e409f..c792b77 100644 --- a/src/pages/control-panel/goods/goods.page.jsx +++ b/src/pages/control-panel/goods/goods.page.jsx @@ -48,7 +48,7 @@ const Goods = () => { }) } function handelSelectChange(value) { - console.log(value) + setpageNumberAndpage(state => { return { ...state, page: 1 } diff --git a/src/pages/single-product/discription/discription.module.scss b/src/pages/single-product/discription/discription.module.scss index ed635c6..e9c2554 100644 --- a/src/pages/single-product/discription/discription.module.scss +++ b/src/pages/single-product/discription/discription.module.scss @@ -30,7 +30,7 @@ font-size: 15px; direction: rtl; width: 100%; - height: 92px; + max-height: 92px; font-size: 15px; font-weight: 500; line-height: 2.17; diff --git a/src/pages/single-product/image-slider/ImageSlider.component.jsx b/src/pages/single-product/image-slider/ImageSlider.component.jsx index ba30596..c2de032 100644 --- a/src/pages/single-product/image-slider/ImageSlider.component.jsx +++ b/src/pages/single-product/image-slider/ImageSlider.component.jsx @@ -13,6 +13,7 @@ const ImageSlider = ({ images, isLoading }) => { function notZoomInImage() { dispatch(uiActions.hideZoom()) } + const imageHasHttp = images[0].includes('https') return ( <> @@ -25,18 +26,18 @@ const ImageSlider = ({ images, isLoading }) => {
{!showZoom ? Third slide : Date: Mon, 30 Jan 2023 23:09:58 +0330 Subject: [PATCH 13/22] fix refresh data bug in goods page --- .../goods-card/GoodsCard.component.jsx | 17 ++++++++++++----- .../goods-card-btn/GoodsCardBtn.component.jsx | 6 +++--- src/components/modals/GoodsModal.component.jsx | 5 ++--- src/pages/control-panel/goods/goods.page.jsx | 2 +- .../image-slider/ImageSlider.component.jsx | 4 ++-- src/store/products/addProductApiSlice.js | 16 ---------------- src/store/ui-slice.js | 4 ++++ 7 files changed, 24 insertions(+), 30 deletions(-) delete mode 100644 src/store/products/addProductApiSlice.js diff --git a/src/components/goods-card/GoodsCard.component.jsx b/src/components/goods-card/GoodsCard.component.jsx index 821a649..73df63a 100644 --- a/src/components/goods-card/GoodsCard.component.jsx +++ b/src/components/goods-card/GoodsCard.component.jsx @@ -6,16 +6,18 @@ import Styles from './GoodsCard.module.scss' import { useFetchcategoryQuery, useFetchsubcategoryQuery } from '../../store/products/productsApiSlice' import { useState } from 'react'; import { useEffect } from 'react'; +import { useDispatch } from 'react-redux'; +import { uiActions } from '../../store/ui-slice'; -const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowDeleteModal }) => { +const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowDeleteModal, dataId }) => { const [category, setCategory] = useState('') const [subcategory, setsubCategory] = useState('') const { data: subcategorydata = [] } = useFetchsubcategoryQuery() const { data: categorydata = [] } = useFetchcategoryQuery() - + const dispatch = useDispatch() const imageHasHttp = img.includes('https') - // console.log(sub); + useEffect(() => { if (subcategorydata.length !== 0) { const sub = subcategorydata.filter((element) => { @@ -33,13 +35,18 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD } }, [categorydata, subcategorydata]) + function deleteModalShowd(id) { + + dispatch(uiActions.setSelectedProductId(id)) + onShowDeleteModal() + } return (
- onShowModal(true)} variant={"primary"} icon={}> + onShowModal(true)} variant={"primary"} > ویرایش - }> + حذف
diff --git a/src/components/goods-card/goods-card-btn/GoodsCardBtn.component.jsx b/src/components/goods-card/goods-card-btn/GoodsCardBtn.component.jsx index 0158a67..a1beca7 100644 --- a/src/components/goods-card/goods-card-btn/GoodsCardBtn.component.jsx +++ b/src/components/goods-card/goods-card-btn/GoodsCardBtn.component.jsx @@ -1,10 +1,10 @@ import React from 'react'; import Button from 'react-bootstrap/Button'; -const GoodsCardBtn = ({ children, icon, variant = null, onclick = null }) => { +const GoodsCardBtn = ({ id, children, icon, variant = null, onclick = null }) => { return ( - ); diff --git a/src/components/modals/GoodsModal.component.jsx b/src/components/modals/GoodsModal.component.jsx index b97faf2..a503763 100644 --- a/src/components/modals/GoodsModal.component.jsx +++ b/src/components/modals/GoodsModal.component.jsx @@ -10,8 +10,7 @@ import { BiCategory } from 'react-icons/bi' import { useState } from 'react'; import { API_BASE_URL } from '../../configs/variables.config'; import axios from 'axios'; -import SaveBtnComponent from '../buttons/SaveBtn.component'; -import { useAddProductMutation } from '../../store/products/addProductApiSlice'; +import { useCreateProductMutation } from '../../store/products/productsApiSlice'; function GoodsModal(props) { const [file, setFile] = useState(false) const [imageIds, setImageId] = useState([]) @@ -19,7 +18,7 @@ function GoodsModal(props) { const [subcategory, setSubcategory] = useState(undefined); const [error, setError] = useState(''); const REQUIRED_MASSEGE = 'این فیلد نباید خالی باشد' - const [addproduct, { isLoading }] = useAddProductMutation() + const [addproduct, { isLoading }] = useCreateProductMutation() const formik = useFormik({ initialValues: { diff --git a/src/pages/control-panel/goods/goods.page.jsx b/src/pages/control-panel/goods/goods.page.jsx index c792b77..1744a89 100644 --- a/src/pages/control-panel/goods/goods.page.jsx +++ b/src/pages/control-panel/goods/goods.page.jsx @@ -77,7 +77,7 @@ const Goods = () => { let requestAsnwer = null if (products.length > 0) { requestAsnwer = products.map((element) => { - return + return }) } if (isLoading) { diff --git a/src/pages/single-product/image-slider/ImageSlider.component.jsx b/src/pages/single-product/image-slider/ImageSlider.component.jsx index c2de032..7626c1a 100644 --- a/src/pages/single-product/image-slider/ImageSlider.component.jsx +++ b/src/pages/single-product/image-slider/ImageSlider.component.jsx @@ -20,8 +20,8 @@ const ImageSlider = ({ images, isLoading }) => { { - !isLoading && images.length > 1 && images.map((image, index) => { - + !isLoading && images.length > 0 && images.map((image, index) => { + console.log(image); return
{!showZoom ? ({ - addProduct: builder.mutation({ - query: (credentials) => ({ - url: "products", - method: "POST", - body: { ...credentials }, - providesTags: ["Posts"], - }), - }), - }), -}); - -export const { useAddProductMutation } = addProductSlice; diff --git a/src/store/ui-slice.js b/src/store/ui-slice.js index b4a44a4..a00ee4c 100644 --- a/src/store/ui-slice.js +++ b/src/store/ui-slice.js @@ -2,6 +2,7 @@ import { createSlice } from "@reduxjs/toolkit"; const initialState = { showMenu: false, showZoom: false, + selectedProductId: null, editBtnToggle_id: { btnshow: false, dataId: null, @@ -29,6 +30,9 @@ const uiSlice = createSlice({ dataId: action.payload, }; }, + setSelectedProductId(state, action) { + state.selectedProductId = action.payload; + }, }, }); From 16d1624c76fa0fa152d5da6317248b9317107b90 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Mon, 30 Jan 2023 23:39:30 +0330 Subject: [PATCH 14/22] handel delete product from goods page --- src/components/goods-card/GoodsCard.component.jsx | 1 - src/components/goods-card/GoodsCard.module.scss | 3 +++ src/components/modals/DeleteModal.component.jsx | 14 +++++++++++--- src/components/modals/GoodsModal.component.jsx | 1 + src/components/pagination/Pagination.module.scss | 1 + src/store/products/productsApiSlice.js | 8 ++++++++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/components/goods-card/GoodsCard.component.jsx b/src/components/goods-card/GoodsCard.component.jsx index 73df63a..c0855d7 100644 --- a/src/components/goods-card/GoodsCard.component.jsx +++ b/src/components/goods-card/GoodsCard.component.jsx @@ -36,7 +36,6 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD }, [categorydata, subcategorydata]) function deleteModalShowd(id) { - dispatch(uiActions.setSelectedProductId(id)) onShowDeleteModal() } diff --git a/src/components/goods-card/GoodsCard.module.scss b/src/components/goods-card/GoodsCard.module.scss index 3a75d1a..05a313e 100644 --- a/src/components/goods-card/GoodsCard.module.scss +++ b/src/components/goods-card/GoodsCard.module.scss @@ -17,6 +17,9 @@ display: flex; align-items: center; justify-content: center; + border: 1px solid lightgray; + padding: 0px 7px; + border-radius: 7px; img{ width: inherit; } diff --git a/src/components/modals/DeleteModal.component.jsx b/src/components/modals/DeleteModal.component.jsx index 3760525..3d5c68b 100644 --- a/src/components/modals/DeleteModal.component.jsx +++ b/src/components/modals/DeleteModal.component.jsx @@ -1,11 +1,19 @@ -import React, { useState } from 'react'; +import React from 'react'; + import Button from 'react-bootstrap/Button'; import Modal from 'react-bootstrap/Modal'; import { TiWarning } from 'react-icons/ti' +import { useSelector } from 'react-redux'; +import { useDeleteProductMutation } from '../../store/products/productsApiSlice'; import Styles from './modals.module.scss' function DeleteModal({ show, setShow }) { - + const [deleteProduct] = useDeleteProductMutation() + const productId = useSelector(state => state.ui.selectedProductId) + function onDeleteProduct() { + deleteProduct(productId) + handleClose() + } const handleClose = () => setShow(false); @@ -24,7 +32,7 @@ function DeleteModal({ show, setShow }) { - diff --git a/src/components/modals/GoodsModal.component.jsx b/src/components/modals/GoodsModal.component.jsx index a503763..ecda199 100644 --- a/src/components/modals/GoodsModal.component.jsx +++ b/src/components/modals/GoodsModal.component.jsx @@ -12,6 +12,7 @@ import { API_BASE_URL } from '../../configs/variables.config'; import axios from 'axios'; import { useCreateProductMutation } from '../../store/products/productsApiSlice'; function GoodsModal(props) { + const [file, setFile] = useState(false) const [imageIds, setImageId] = useState([]) const [category, setCategory] = useState(undefined); diff --git a/src/components/pagination/Pagination.module.scss b/src/components/pagination/Pagination.module.scss index 10eda3b..ed23c7b 100644 --- a/src/components/pagination/Pagination.module.scss +++ b/src/components/pagination/Pagination.module.scss @@ -7,4 +7,5 @@ font-size: 25px; font-weight: 900; padding: 10px; + user-select: none; } \ No newline at end of file diff --git a/src/store/products/productsApiSlice.js b/src/store/products/productsApiSlice.js index 30b4f98..2338e63 100644 --- a/src/store/products/productsApiSlice.js +++ b/src/store/products/productsApiSlice.js @@ -52,6 +52,13 @@ export const productsApiSlice = apiSlice.injectEndpoints({ }), invalidatesTags: ["Posts"], }), + deleteProduct: builder.mutation({ + query: (id) => ({ + url: `products/${id}`, + method: "DELETE", + }), + invalidatesTags: ["Posts"], + }), }), }); @@ -62,4 +69,5 @@ export const { useFetchcategoryQuery, useFetchOrdersQuery, useFetchOrdersLengthQuery, + useDeleteProductMutation, } = productsApiSlice; From 7cbb8b80ce0560f2dcbda1f0f03e8071cc2010cc Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Tue, 31 Jan 2023 12:31:57 +0330 Subject: [PATCH 15/22] edit inventory and product handled --- .../styles/some-componetns-style/saveBtn.scss | 2 +- src/components/buttons/SaveBtn.component.jsx | 4 +-- .../EditProduct.component.jsx | 35 +++++++++++-------- .../inventory-price.page.jsx | 22 +++++++++--- src/store/products/productsApiSlice.js | 9 +++++ src/store/ui-slice.js | 24 +++++++++++++ 6 files changed, 73 insertions(+), 23 deletions(-) diff --git a/src/assets/styles/some-componetns-style/saveBtn.scss b/src/assets/styles/some-componetns-style/saveBtn.scss index f2e58bc..1348b14 100644 --- a/src/assets/styles/some-componetns-style/saveBtn.scss +++ b/src/assets/styles/some-componetns-style/saveBtn.scss @@ -57,7 +57,7 @@ @media (min-width: 768px) { .button-82-front { font-size: 1.25rem; - padding: 8px 42px; + padding: 5px 41px; } } diff --git a/src/components/buttons/SaveBtn.component.jsx b/src/components/buttons/SaveBtn.component.jsx index ed3c580..113a0b3 100644 --- a/src/components/buttons/SaveBtn.component.jsx +++ b/src/components/buttons/SaveBtn.component.jsx @@ -1,9 +1,9 @@ import React from 'react'; -const SaveBtnComponent = ({ children, type }) => { +const SaveBtnComponent = ({ children, type, onClick }) => { return ( -
+
- + {saveBtn.dataId != id ? :''}
); } export default EditProduct; +// +// (e) => setInputValue(state => { +// return { +// ...state, price: e.target.value +// } +// }) \ No newline at end of file diff --git a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx index 18aaff1..81843d7 100644 --- a/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx +++ b/src/pages/control-panel/Inventory-and-price/inventory-price.page.jsx @@ -4,18 +4,20 @@ import { getAppTitle } from '../../../utils/functions.utils' import PanelTopTitle from '../../../components/panel-top-title/PanelTopTitle.component'; import Styles from './inventory-price.module.scss' import InventoryPriceCard from '../../../components/inventory-price-card/InventoryPriceCard.component'; -import { useFetchProductsQuery } from '../../../store/products/productsApiSlice'; +import { useEditProductMutation, useFetchProductsQuery } from '../../../store/products/productsApiSlice'; import Pagination from '../../../components/pagination/Pagination.component'; import { useEffect } from 'react'; import { useLogoutadmin } from '../../../hooks/logoutadmin'; import { Loading } from '../../../components/Loading/Loading.component'; import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; import SaveBtnComponent from '../../../components/buttons/SaveBtn.component'; -import { useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; +import { uiActions } from '../../../store/ui-slice'; const InventoryPrice = () => { const saveBtn = useSelector(state => state.ui.editBtnToggle_id) - + const [editProduct] = useEditProductMutation() const [paginationStop, setpaginationStop] = useState(false) + const dispatch = useDispatch() const [pageNumberAndpage, setpageNumberAndpage] = useState({ page: 1, filter: "null" @@ -68,7 +70,17 @@ const InventoryPrice = () => { if (products.length === 0 && isSuccess) { requestAnswer = } - + function saveBtnHandler() { + const productInfo = { + id: saveBtn.dataId + , body: { + quantity: saveBtn.inventory, + price: saveBtn.price + } + } + editProduct(productInfo) + dispatch(uiActions.saveEditHandler()) + } return ( <> @@ -76,7 +88,7 @@ const InventoryPrice = () => { پنل مدیریت {appTittle} | موجودی و قیمت
- {saveBtn.btnshow ? ذخیره : ''} + {saveBtn.btnshow ? ذخیره : ''} مدیریت موجودی و قیمت ها diff --git a/src/store/products/productsApiSlice.js b/src/store/products/productsApiSlice.js index 2338e63..f91f9a3 100644 --- a/src/store/products/productsApiSlice.js +++ b/src/store/products/productsApiSlice.js @@ -59,6 +59,14 @@ export const productsApiSlice = apiSlice.injectEndpoints({ }), invalidatesTags: ["Posts"], }), + editProduct: builder.mutation({ + query: (productInfo) => ({ + url: `products/${productInfo.id}`, + method: "PATCH", + body: productInfo.body, + }), + invalidatesTags: ["Posts"], + }), }), }); @@ -70,4 +78,5 @@ export const { useFetchOrdersQuery, useFetchOrdersLengthQuery, useDeleteProductMutation, + useEditProductMutation, } = productsApiSlice; diff --git a/src/store/ui-slice.js b/src/store/ui-slice.js index a00ee4c..2ebb2ef 100644 --- a/src/store/ui-slice.js +++ b/src/store/ui-slice.js @@ -6,6 +6,8 @@ const initialState = { editBtnToggle_id: { btnshow: false, dataId: null, + price: null, + inventory: null, }, }; const uiSlice = createSlice({ @@ -26,10 +28,32 @@ const uiSlice = createSlice({ }, editOnClick(state, action) { state.editBtnToggle_id = { + ...state.editBtnToggle_id, btnshow: true, dataId: action.payload, }; }, + saveEditHandler(state, action) { + state.editBtnToggle_id = { + ...state.editBtnToggle_id, + btnshow: false, + dataId: null, + }; + }, + iputOnChange(state, action) { + if (action.payload.type == "price") { + state.editBtnToggle_id = { + ...state.editBtnToggle_id, + price: action.payload.value, + }; + } + if (action.payload.type == "inventory") { + state.editBtnToggle_id = { + ...state.editBtnToggle_id, + inventory: action.payload.value, + }; + } + }, setSelectedProductId(state, action) { state.selectedProductId = action.payload; }, From 7e62e9aa3eb735d7cac91a81b1838f6c87d156eb Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Tue, 31 Jan 2023 23:27:41 +0330 Subject: [PATCH 16/22] handel modal edit bugs --- src/apis/apiSlice.js | 4 +- src/components/Form-select/EditFormSelect.jsx | 43 +++ .../Form-select/FormSelect.component.jsx | 12 +- .../goods-card/GoodsCard.component.jsx | 12 +- .../goods-card/GoodsCard.module.scss | 4 + .../InventoryPriceCard.module.scss | 6 + src/components/modals/EditModal.component.jsx | 245 ++++++++++++++++++ .../modals/GoodsModal.component.jsx | 30 ++- src/components/modals/editfileinput.jsx | 42 +++ src/pages/admin-login/admin-login.page.jsx | 2 +- src/pages/control-panel/goods/goods.page.jsx | 39 ++- src/pages/login/login.page.jsx | 2 +- .../image-slider/ImageSlider.component.jsx | 2 +- src/store/products/productsApiSlice.js | 6 +- 14 files changed, 417 insertions(+), 32 deletions(-) create mode 100644 src/components/Form-select/EditFormSelect.jsx create mode 100644 src/components/modals/EditModal.component.jsx create mode 100644 src/components/modals/editfileinput.jsx diff --git a/src/apis/apiSlice.js b/src/apis/apiSlice.js index d403fdf..dda1e5b 100644 --- a/src/apis/apiSlice.js +++ b/src/apis/apiSlice.js @@ -32,15 +32,13 @@ const baseQuery = fetchBaseQuery({ const baseQueryWithReauth = async (args, api, extraOptions) => { let result = await baseQuery(args, api, extraOptions); if (result?.error?.originalStatus === 401) { - console.log("sending refresh token"); // send refresh token to get new access token const refreshResult = await baseQuery( { url: REFRESH_TOKEN_URL, method: "POST" }, { ...api, endpoint: REFRESH_TOKEN_URL }, extraOptions ); - console.log(result); - console.log(refreshResult); + if (refreshResult?.data) { // store the new token diff --git a/src/components/Form-select/EditFormSelect.jsx b/src/components/Form-select/EditFormSelect.jsx new file mode 100644 index 0000000..ada6480 --- /dev/null +++ b/src/components/Form-select/EditFormSelect.jsx @@ -0,0 +1,43 @@ + +import React, { useEffect } from 'react'; +import { useState } from 'react'; +import Form from 'react-bootstrap/Form'; +import { useFetchcategoryQuery, useFetchProductsQuery, useFetchsubcategoryQuery } from '../../store/products/productsApiSlice'; + +const EditFormSelect = ({ pagenum, handelSelectChange, subcategory = null, placeholder, initialValue, + setSubcategory, changeSubcategoryid }) => { + + const { data: catrgory = [] } = useFetchcategoryQuery() + const { data: subcatrgoryData = [] } = useFetchsubcategoryQuery() + const subcategoryDataFilter = subcatrgoryData.filter((sub) => { + return sub.category == changeSubcategoryid + }) + useEffect(() => { + console.log(subcategory); + if (subcategory && changeSubcategoryid) { + if (document.getElementById('filtercategory')) { + setSubcategory(subcategoryDataFilter[0].id) + console.log(subcategoryDataFilter[0].id) + } + } + }, [changeSubcategoryid]); + // if (document.getElementById('filtercategory')) { + // console.log(document.getElementById('filtercategory').value); + // } + return ( + +
+ handelSelectChange(e.target.value)} style={{ width: '6rem' }} id='filtercategory' size="sm"> + {!initialValue && } + {!subcategory ? catrgory.map((element) => { + return + }) : subcategoryDataFilter.map((element) => { + return + })} + +
+ + ); +} + +export default EditFormSelect; diff --git a/src/components/Form-select/FormSelect.component.jsx b/src/components/Form-select/FormSelect.component.jsx index f2d07e9..6f7cd18 100644 --- a/src/components/Form-select/FormSelect.component.jsx +++ b/src/components/Form-select/FormSelect.component.jsx @@ -4,18 +4,20 @@ import { useState } from 'react'; import Form from 'react-bootstrap/Form'; import { useFetchcategoryQuery, useFetchProductsQuery, useFetchsubcategoryQuery } from '../../store/products/productsApiSlice'; -const FormSelect = ({ pagenum, handelSelectChange, subcategory = null, placeholder }) => { +const FormSelect = ({ pagenum, handelSelectChange, subcategory = null, placeholder, initialValue, changeSubcategoryid }) => { const { data: catrgory = [] } = useFetchcategoryQuery() const { data: subcatrgoryData = [] } = useFetchsubcategoryQuery() - + const subcategoryDataFilter = subcatrgoryData.filter((sub) => { + return sub.category == changeSubcategoryid + }) return (
- handelSelectChange(e.target.value)} style={{ width: '6rem' }} id='filtercategory' size="sm"> - + handelSelectChange(e.target.value)} style={{ width: '6rem' }} id='filtercategory' size="sm"> + {!initialValue && } {!subcategory ? catrgory.map((element) => { return - }) : subcatrgoryData.map((element) => { + }) : subcategoryDataFilter.map((element) => { return })} diff --git a/src/components/goods-card/GoodsCard.component.jsx b/src/components/goods-card/GoodsCard.component.jsx index c0855d7..6d2bb93 100644 --- a/src/components/goods-card/GoodsCard.component.jsx +++ b/src/components/goods-card/GoodsCard.component.jsx @@ -8,6 +8,7 @@ import { useState } from 'react'; import { useEffect } from 'react'; import { useDispatch } from 'react-redux'; import { uiActions } from '../../store/ui-slice'; +import { Button } from 'react-bootstrap'; const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowDeleteModal, dataId }) => { const [category, setCategory] = useState('') @@ -34,7 +35,7 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD }) } - }, [categorydata, subcategorydata]) + }, [categorydata, subcategorydata, categoryId, subcategoryId]) function deleteModalShowd(id) { dispatch(uiActions.setSelectedProductId(id)) onShowDeleteModal() @@ -42,9 +43,14 @@ const GoodsCard = ({ img, title, categoryId, onShowModal, subcategoryId, onShowD return (
- onShowModal(true)} variant={"primary"} > + حذف diff --git a/src/components/goods-card/GoodsCard.module.scss b/src/components/goods-card/GoodsCard.module.scss index 05a313e..64810c9 100644 --- a/src/components/goods-card/GoodsCard.module.scss +++ b/src/components/goods-card/GoodsCard.module.scss @@ -5,6 +5,10 @@ justify-content: space-between; margin: 23px 0; border-radius: 10px; + background: #f9fafc; +} +.GoodsCard:hover{ + background-color:white; } .card_rigth_side{ display: flex; diff --git a/src/components/inventory-price-card/InventoryPriceCard.module.scss b/src/components/inventory-price-card/InventoryPriceCard.module.scss index bdb9acc..a8aa91a 100644 --- a/src/components/inventory-price-card/InventoryPriceCard.module.scss +++ b/src/components/inventory-price-card/InventoryPriceCard.module.scss @@ -27,6 +27,12 @@ width: 10rem; height: 10rem; margin: 10px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid lightgray; + padding: 0px 7px; + border-radius: 7px; overflow: hidden; img{ width: inherit; diff --git a/src/components/modals/EditModal.component.jsx b/src/components/modals/EditModal.component.jsx new file mode 100644 index 0000000..2758e33 --- /dev/null +++ b/src/components/modals/EditModal.component.jsx @@ -0,0 +1,245 @@ +import * as Yup from 'yup' +import { useFormik } from 'formik' +import Button from 'react-bootstrap/Button'; +import Modal from 'react-bootstrap/Modal'; +import FormInput from '../form-input/FormInput.component'; +import Styles from './modals.module.scss' +import FileInput from './editfileinput'; +import FormSelect from '../Form-select/EditFormSelect'; +import { BiCategory } from 'react-icons/bi' +import { Children, useState } from 'react'; +import { API_BASE_URL } from '../../configs/variables.config'; +import axios from 'axios'; +import { useEditProductMutation, useGetProductQuery } from '../../store/products/productsApiSlice'; +import { useEffect } from 'react'; + +function EditModal(props) { + const [imageData, setImageData] = useState(undefined) + const [file, setFile] = useState(false) + const [imageIds, setImageId] = useState([]) + const [category, setCategory] = useState(undefined); + const [subcategory, setSubcategory] = useState(undefined); + const [error, setError] = useState(''); + const REQUIRED_MASSEGE = 'این فیلد نباید خالی باشد' + const { data: productData, isSuccess, } = useGetProductQuery(props.editid) + const [selectTouched, setSelectTouched] = useState(false) + const [fileIsTouched, setFileIsTouched] = useState(false) + const [editproduct, { isLoading }] = useEditProductMutation() + const [changeSubcategory, setchangeSubcategory] = useState(null); + const formik = useFormik({ + initialValues: { + name: '', + categoryId: "", + price: "", + quantity: "", + Discount: '', + description: "" + }, validationSchema: Yup.object({ + name: Yup.string().required(REQUIRED_MASSEGE).min(3, 'ورودی کمتر از حد مجاز است'), + description: Yup.string().required('این فیلد نباید خالی باشد').min(20, 'ورودی کمتر از حد مجاز است'), + price: Yup.string().required(REQUIRED_MASSEGE), + quantity: Yup.string().required(REQUIRED_MASSEGE) + + }), + onSubmit: async (value) => { + try { + if (imageIds.length > 0 && category && subcategory) { + const res = await editproduct({ + id: props.editid, + body: { + category: +category, + subcategory: +subcategory, + Discount: value.Discount, + name: value.name, + description: value.description, + price: value.price, + quantity: value.quantity, + store: "admin", + image: imageIds + } + }).unwrap() + props.handelClose(state => { + return state = { + ...state, + show: false, + } + }) + } else if (!category) { + setError('دسته بندی انتخاب نشده'); + } else if (!subcategory) { + setError('زیر مجموعه دسته بندی انتخاب نشده'); + } + } catch (e) { + alert(e.message) + } + // setError('') + } + }) + useEffect(() => { + if (productData) { + + setImageId( + productData.image + ) + + } + }, [productData]) + function handelSelectChangeCategory(value) { + setSelectTouched(true) + setCategory(value) + setchangeSubcategory(value) + } + const addProduct = async () => { + try { + if (file) { + if (imageIds.length === 3) { + return setError('فقط سه عدد عکس میتوانید اضافه کنید') + } + const formData = new FormData(); + formData.append("image", file); + await axios.post(`${API_BASE_URL}upload`, formData).then((res) => { + if (res.status == 200) { + alert('عکس با موفقیت آپلود شد') + } + setImageId(state => { + if (state.length < 3) { + return state = [...state, res.data.filename] + } + }) + }) + } + } catch (error) { + setError(error.message) + } + setError('') + } + function handelSelectChangeSubcategory(value) { + setSubcategory(value) + setSelectTouched(true) + + } + + + if (productData && isSuccess == true) { + formik.initialValues.name = productData.name + formik.initialValues.Discount = productData.Discount + formik.initialValues.categoryId = productData.category + formik.initialValues.price = productData.price + formik.initialValues.description = productData.description + formik.initialValues.quantity = productData.quantity + } + + useEffect(() => { + if (productData && !selectTouched && !fileIsTouched) { + setCategory(productData.category) + setSubcategory(productData.subcategory) + setchangeSubcategory(productData.category) + } + if (productData) { + const imageHasHttp = productData.image[0].includes('https') + if (imageHasHttp) { + setImageData(productData.image[0]) + } else if (!imageHasHttp) { + setImageData(`http://localhost:3001/files/${productData.image[0]}`) + + } + + } + }) + + + return ( + + + {error} + + افزودن کالا + + +
+ {imageData ? < Button onClick={addProduct} type='button' style={{ width: '5rem' }} value={'primary'}>آپلود : ''} +
+ + + + +
+
+
+
+
+
+ دسته بندی + +
+
+ زیرمجموعه + +
+
+ +
+
+ {formik.touched.name && formik.errors.name ? {formik.errors.name} : ''} + + +
+
+
+ +
+ + +
+
+ {formik.touched.quantity && formik.errors.quantity ? {formik.errors.quantity} : ''} + + +
+
+ {formik.touched.price && formik.errors.price ? {formik.errors.price} : ''} + + +
+
+ {formik.touched.description && formik.errors.description ? {formik.errors.description} : ''} + + +
+
+ + + + +
+ ); +} + + +export default EditModal \ No newline at end of file diff --git a/src/components/modals/GoodsModal.component.jsx b/src/components/modals/GoodsModal.component.jsx index ecda199..bff9c71 100644 --- a/src/components/modals/GoodsModal.component.jsx +++ b/src/components/modals/GoodsModal.component.jsx @@ -11,6 +11,7 @@ import { useState } from 'react'; import { API_BASE_URL } from '../../configs/variables.config'; import axios from 'axios'; import { useCreateProductMutation } from '../../store/products/productsApiSlice'; +import { useEffect } from 'react'; function GoodsModal(props) { const [file, setFile] = useState(false) @@ -20,10 +21,10 @@ function GoodsModal(props) { const [error, setError] = useState(''); const REQUIRED_MASSEGE = 'این فیلد نباید خالی باشد' const [addproduct, { isLoading }] = useCreateProductMutation() - + const [changeSubcategory, setchangeSubcategory] = useState(null); const formik = useFormik({ initialValues: { - name: "", + name: '', categoryId: "", price: "", quantity: "", @@ -38,8 +39,7 @@ function GoodsModal(props) { }), onSubmit: async (value) => { try { - if (imageIds.length > 0 && category && subcategory) { - console.log(value, imageIds); + if (imageIds.length > 0 && category !== 'null' && subcategory !== 'null' && category !== undefined && subcategory !== undefined) { const res = await addproduct({ category: category, subcategory: subcategory, @@ -52,22 +52,30 @@ function GoodsModal(props) { quantity: value.quantity, store: "admin" }).unwrap() + props.handelClose(state => { + return state = { + ...state, + show: false, + } + }) } else if (imageIds.length === 0) { - setError('عکس انتخاب آپلود نشده'); - } else if (category === undefined) { + setError('عکس آپلود نشده'); + } else if (category == undefined || category == 'null') { setError('دسته بندی انتخاب نشده'); - } else if (subcategory === undefined) { + + } else if (subcategory == undefined || subcategory == 'null') { setError('زیر مجموعه دسته بندی انتخاب نشده'); } + } catch (e) { alert(e.message) } - setError('') + // setError('') } }) function handelSelectChangeCategory(value) { - + setchangeSubcategory(value) setCategory(value) } const addProduct = async () => { @@ -132,7 +140,7 @@ function GoodsModal(props) {
زیرمجموعه - +
@@ -152,7 +160,7 @@ function GoodsModal(props) {
- diff --git a/src/components/modals/editfileinput.jsx b/src/components/modals/editfileinput.jsx new file mode 100644 index 0000000..9be671d --- /dev/null +++ b/src/components/modals/editfileinput.jsx @@ -0,0 +1,42 @@ +import React from 'react'; +import plusicon from '../../assets/images/plus.png' +import imageSrc from '../../assets/images/profile.png' +import { AiOutlinePicture } from 'react-icons/ai' +import Styles from './modals.module.scss' +import { useState } from 'react'; +const FileInput = ({ setFile, imageData, setImageData, fileIsTouched, setFileIsTouched }) => { + + function encodeImageFileAsURL(e) { + setFileIsTouched(true) + const filesSelected = e.target.files; + if (filesSelected.length > 0) { + const fileToLoad = filesSelected[0]; + setFile(fileToLoad) + const fileReader = new FileReader(); + fileReader.onload = function (fileLoadedEvent) { + const srcData = fileLoadedEvent.target.result; // <- data: base64 + setImageData(srcData) + const imageSizeInByte = new Blob([srcData]).size + const imageSizeInMegeByte = imageSizeInByte / 1000000 + } + fileReader.readAsDataURL(fileToLoad); + } + } + + return ( +
+
+ {imageData ? productimage : } +
+ + + +
+ ); +} + +export default FileInput; diff --git a/src/pages/admin-login/admin-login.page.jsx b/src/pages/admin-login/admin-login.page.jsx index d0ef45a..dae9f48 100644 --- a/src/pages/admin-login/admin-login.page.jsx +++ b/src/pages/admin-login/admin-login.page.jsx @@ -31,7 +31,7 @@ const AdminLogin = () => { const password = value.password try { const res = await login({ username, password }).unwrap(); - console.log(res) + dispatch(setCredentials({ ...res })); navigate('/' + INTERNAL_PATHS.CONTROLPANEL); } catch (error) { diff --git a/src/pages/control-panel/goods/goods.page.jsx b/src/pages/control-panel/goods/goods.page.jsx index 1744a89..42a2795 100644 --- a/src/pages/control-panel/goods/goods.page.jsx +++ b/src/pages/control-panel/goods/goods.page.jsx @@ -17,6 +17,7 @@ import { useEffect } from 'react'; import { useLogoutadmin } from '../../../hooks/logoutadmin'; import EmptyDataAnimation from '../../../components/empty-data-animation/EmptyDataAnimation.component'; import DeleteModal from '../../../components/modals/DeleteModal.component'; +import EditModal from '../../../components/modals/EditModal.component'; const Goods = () => { const [showDeletemodal, setShowDeleteModal] = useState(false); @@ -29,7 +30,10 @@ const Goods = () => { const appTittle = getAppTitle() const goodsError = useLogoutadmin(error) - const [modalShow, setModalShow] = React.useState(false); + const [modalShow, setModalShow] = React.useState({ + show: false, + editId: null + }); // console.log(error.data) useEffect(() => { @@ -94,7 +98,14 @@ const Goods = () => {
- +
@@ -116,10 +127,26 @@ const Goods = () => {
- setModalShow(false)} - /> + {!modalShow.editId ? setModalShow(state => { + return state = { + ...state, + show: false, + } + })} + handelClose={setModalShow} + /> : setModalShow(state => { + return state = { + ...state, + show: false, + } + })} + handelClose={setModalShow} + />}
diff --git a/src/pages/login/login.page.jsx b/src/pages/login/login.page.jsx index 15f5dec..4a7fced 100644 --- a/src/pages/login/login.page.jsx +++ b/src/pages/login/login.page.jsx @@ -19,7 +19,7 @@ const Login = () => { password: Yup.string().max(16, "ورودی بیش از حد مجاز است").min(5, 'ورودی کمتر از حد مجاز است').required('این فیلد نباید خالی باشد') }), onSubmit: (value) => { - console.log(value); + } }) diff --git a/src/pages/single-product/image-slider/ImageSlider.component.jsx b/src/pages/single-product/image-slider/ImageSlider.component.jsx index 7626c1a..36f5de9 100644 --- a/src/pages/single-product/image-slider/ImageSlider.component.jsx +++ b/src/pages/single-product/image-slider/ImageSlider.component.jsx @@ -21,7 +21,7 @@ const ImageSlider = ({ images, isLoading }) => { { !isLoading && images.length > 0 && images.map((image, index) => { - console.log(image); + return
{!showZoom ? `products/${id}`, + keepUnusedDataFor: 0, + }), deleteProduct: builder.mutation({ query: (id) => ({ url: `products/${id}`, @@ -79,4 +82,5 @@ export const { useFetchOrdersLengthQuery, useDeleteProductMutation, useEditProductMutation, + useGetProductQuery, } = productsApiSlice; From 4499eb6b845334be858b7511362b1d03204b2962 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Wed, 1 Feb 2023 10:23:31 +0330 Subject: [PATCH 17/22] fix image edit bug in goods page --- src/components/modals/EditModal.component.jsx | 19 ++++++++++++------- src/components/modals/editfileinput.jsx | 5 ++++- .../image-slider/ImageSlider.component.jsx | 5 +++-- .../image-slider/imageslider.module.scss | 1 + 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/modals/EditModal.component.jsx b/src/components/modals/EditModal.component.jsx index 2758e33..08484f3 100644 --- a/src/components/modals/EditModal.component.jsx +++ b/src/components/modals/EditModal.component.jsx @@ -12,9 +12,10 @@ import { API_BASE_URL } from '../../configs/variables.config'; import axios from 'axios'; import { useEditProductMutation, useGetProductQuery } from '../../store/products/productsApiSlice'; import { useEffect } from 'react'; +import { callFluidObserver } from '@react-spring/shared'; function EditModal(props) { - const [imageData, setImageData] = useState(undefined) + const [imageData, setImageData] = useState("") const [file, setFile] = useState(false) const [imageIds, setImageId] = useState([]) const [category, setCategory] = useState(undefined); @@ -134,20 +135,24 @@ function EditModal(props) { setCategory(productData.category) setSubcategory(productData.subcategory) setchangeSubcategory(productData.category) + + } - if (productData) { + }) + + useEffect(() => { + const checkBase64 = imageData.split(':')[0] + console.log(checkBase64) + if (productData && checkBase64 !== 'data') { const imageHasHttp = productData.image[0].includes('https') if (imageHasHttp) { setImageData(productData.image[0]) } else if (!imageHasHttp) { setImageData(`http://localhost:3001/files/${productData.image[0]}`) - + console.log('hi') } - } - }) - - + }); return ( { function encodeImageFileAsURL(e) { + console.log(e.target.files) setFileIsTouched(true) const filesSelected = e.target.files; if (filesSelected.length > 0) { @@ -16,6 +17,8 @@ const FileInput = ({ setFile, imageData, setImageData, fileIsTouched, setFileIsT fileReader.onload = function (fileLoadedEvent) { const srcData = fileLoadedEvent.target.result; // <- data: base64 setImageData(srcData) + console.log(srcData) + console.log(imageData) const imageSizeInByte = new Blob([srcData]).size const imageSizeInMegeByte = imageSizeInByte / 1000000 } @@ -26,7 +29,7 @@ const FileInput = ({ setFile, imageData, setImageData, fileIsTouched, setFileIsT return (
- {imageData ? productimage : } + {imageData !== '' || imageData !== false ? productimage : }
- setfilterAsquantity(e.target.value)} className={Styles.radio_input} type="radio" id="all" name="existfilte" value="1" /> + setfilterAsquantity(e.target.value)} className={Styles.radio_input} type="radio" id="all" name="existfilte" value="1" />
diff --git a/src/components/category-filter/price-filter/PriceFilter.component.jsx b/src/components/category-filter/price-filter/PriceFilter.component.jsx index 33bbfc0..3810898 100644 --- a/src/components/category-filter/price-filter/PriceFilter.component.jsx +++ b/src/components/category-filter/price-filter/PriceFilter.component.jsx @@ -1,30 +1,42 @@ import React, { useState } from 'react'; +import { Button } from 'react-bootstrap'; import { numberWithCommas } from '../../../utils/functions.utils'; import Styles from './PriceFilter.module.scss' -const PriceFilter = () => { - const [price, setPrice] = useState(40); +const PriceFilter = ({ setFetchObj }) => { + const [price, setPrice] = useState(100000); // Triggered when the value gets updated while scrolling the slider: const handleInput = (e) => { - const priceWithComma = numberWithCommas(e.target.value) - setPrice(priceWithComma); + setPrice(e.target.value); + } + const priceWithComma = numberWithCommas(price) + + function handelRangeSubmit(e) { + e.preventDefault() + setFetchObj(state => { + return state = { + ...state, + filterRange: { + isFilter: true, + range: +price + } + } + }) } - const hotels = [ - { name: "A", price: 40 }, - { name: "B", price: 50 }, - { name: "C", price: 60 } - ]; return ( -
-
-

:محدوده قیمت

-
-
-
تومان {price}
- :از 0 تومان تا -
- +
+
+
+

:محدوده قیمت

+
+
+
تومان {priceWithComma}
+ :از 0 تومان تا +
+ -
+ +
+ ); } diff --git a/src/components/category-filter/price-filter/PriceFilter.module.scss b/src/components/category-filter/price-filter/PriceFilter.module.scss index 6afa1d2..d404255 100644 --- a/src/components/category-filter/price-filter/PriceFilter.module.scss +++ b/src/components/category-filter/price-filter/PriceFilter.module.scss @@ -26,5 +26,9 @@ background-color: rgb(232 243 255); padding: 23px; box-shadow: rgb(99 99 99 / 22%) 1px 1px 8px 1px; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 10rem; } diff --git a/src/components/main-card/MainCard.component.jsx b/src/components/main-card/MainCard.component.jsx index e1cfd84..dcb56d0 100644 --- a/src/components/main-card/MainCard.component.jsx +++ b/src/components/main-card/MainCard.component.jsx @@ -4,7 +4,7 @@ import ColorsGroup from '../colors-group/ColorsGroup.component'; import Styles from './maincard.module.scss' import { AiFillStar } from 'react-icons/ai' const MainCard = (props) => { - const { colors, image, title, price, discount } = props + const { colors, image, title, price, discount, quantity } = props // {colorsArray} is just a test for ui const colorsArray = [ "blue", "white", "black", "green" @@ -12,7 +12,7 @@ const MainCard = (props) => { const imageHasHttp = image.includes('https') const numberplit = numberWithCommas(price) return ( -
+
@@ -31,10 +31,10 @@ const MainCard = (props) => { 2.5
-
+ {quantity == 0 ? ناموجود :

تومان {numberplit}

{discount ? discount + "%" : ''}
-
+
}
); diff --git a/src/components/main-card/PlaceHolderCard.component.jsx b/src/components/main-card/PlaceHolderCard.component.jsx new file mode 100644 index 0000000..e177eb2 --- /dev/null +++ b/src/components/main-card/PlaceHolderCard.component.jsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { numberWithCommas } from '../../utils/functions.utils'; +import ColorsGroup from '../colors-group/ColorsGroup.component'; +import Styles from './maincard.module.scss' +import { AiFillStar } from 'react-icons/ai' +import { Placeholder } from 'react-bootstrap'; +const PlaceHolderCard = (props) => { + + return ( +
+ +
+
+ +
+
+
+
+
+
+
+ + + +
+ + + +
+
+
+ ); +} +export default PlaceHolderCard; \ No newline at end of file diff --git a/src/components/production-card-home/ProductionCardHome.component.jsx b/src/components/production-card-home/ProductionCardHome.component.jsx index d8afc5e..1d0b8d3 100644 --- a/src/components/production-card-home/ProductionCardHome.component.jsx +++ b/src/components/production-card-home/ProductionCardHome.component.jsx @@ -1,5 +1,4 @@ import React from 'react'; -import Placeholder from 'react-bootstrap/Placeholder'; import Styles from './ProductionCardHome.module.css' export const ProductionCardHome = ({ name, price, image }) => { @@ -18,32 +17,3 @@ export const ProductionCardHome = ({ name, price, image }) => { ); } -{/*
-
- {image} -
-
- {name} - {price} تومان -
-
*/} - -// <> -// { -// fakeArray.map(() => { -//
-//
-// {image} -//
-//
-// -// -// -// -// -//
- -//
-// }) -// } -// \ No newline at end of file diff --git a/src/pages/category/category.page.jsx b/src/pages/category/category.page.jsx index bf0fba9..1233be6 100644 --- a/src/pages/category/category.page.jsx +++ b/src/pages/category/category.page.jsx @@ -6,6 +6,7 @@ import { Link, useParams } from 'react-router-dom'; import CategoryFilter from '../../components/category-filter/CategoryFilter.component'; import EmptyDataAnimation from '../../components/empty-data-animation/EmptyDataAnimation.component'; import MainCard from '../../components/main-card/MainCard.component'; +import PlaceHolderCard from '../../components/main-card/PlaceHolderCard.component'; import Pagination from '../../components/pagination/Pagination.component'; import { INTERNAL_PATHS } from '../../configs/routs.config'; import { data } from '../../database/db.exampel'; @@ -19,14 +20,15 @@ const Category = () => { const paramsData = param.id.split('-') const categoryId = paramsData[0] const subcategoryId = paramsData[1] + const fakeArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] const [paginationStop, setpaginationStop] = useState(false) const [fetchObj, setFetchObj] = useState({ category: categoryId, page: 1, subcategory: subcategoryId, filterRange: { - isfilter: false, - range: 15000 + isFilter: false, + range: 319000 } }); @@ -38,14 +40,19 @@ const Category = () => { let categoryfetchAnswer = null - + if (isLoading) { + categoryfetchAnswer = fakeArray.map((num) => { + return + }) + } if (isSuccess && products.length > 0) { if (filterAsquantity == 0) { categoryfetchAnswer = products.filter((product) => { return product.quantity > 0 }).map((product) => { + return - }) @@ -53,17 +60,17 @@ const Category = () => { if (filterAsquantity == 1) { categoryfetchAnswer = products.map((product) => { return - }) } } - if (products.length === 0) { + if (isLoading == false && products.length === 0) { categoryfetchAnswer = } useEffect(() => { - if (products.length < 10) { + if (products.length < 12) { setpaginationStop(true) } else { setpaginationStop(false) @@ -105,10 +112,10 @@ const Category = () => { {categoryfetchAnswer}
- {products.length > 0 ? : ''} + {products.length > 0 ? : ''}
- {products.length >= 12 && {fetchObj.page}} + {products.length >= 1 && {fetchObj.page}}
); diff --git a/src/store/products/categoryProductsApiSlice.js b/src/store/products/categoryProductsApiSlice.js index 89b5f7a..fe89b32 100644 --- a/src/store/products/categoryProductsApiSlice.js +++ b/src/store/products/categoryProductsApiSlice.js @@ -5,9 +5,15 @@ export const productsCategorysApiSlice = apiSlice.injectEndpoints({ fetchCategorysProducts: builder.query({ query: (fetchObj) => { if (fetchObj.subcategory == 0) { + if (fetchObj.filterRange.isFilter) { + return `http://localhost:3001/products?category=${fetchObj.category}&_page=${fetchObj.page}&_limit=12&price_gte=0&price_lte=${fetchObj.filterRange.range}`; + } return `products?category=${fetchObj.category}&_page=${fetchObj.page}&_limit=12`; } if (fetchObj.subcategory != 0) { + if (fetchObj.filterRange.isFilter) { + return `http://localhost:3001/products?category=${fetchObj.category}&subcategory=${fetchObj.subcategory}&_page=${fetchObj.page}&_limit=12&price_gte=0&price_lte=${fetchObj.filterRange.range}`; + } return `products?category=${fetchObj.category}&subcategory=${fetchObj.subcategory}&_page=${fetchObj.page}&_limit=12`; } }, From b4c0226aefbc9099be9f4f5c831c10cb0248d5a1 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Wed, 1 Feb 2023 14:42:20 +0330 Subject: [PATCH 20/22] price discount handled in category page cards --- src/assets/styles/public.scss | 29 +++++++++++++++++++ .../AddToCartSector.component.jsx | 11 +++++-- .../HomeProductionsCard.component.jsx | 10 ++++--- .../main-card/MainCard.component.jsx | 17 +++++++++-- src/components/modals/EditModal.component.jsx | 7 ++++- .../modals/GoodsModal.component.jsx | 7 ++++- .../priceWithDiscountText.component.jsx | 12 ++++++++ .../ProductionScroller.jsx | 2 +- .../single-product/single-product.page.jsx | 8 +++-- 9 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 src/components/price-With-Discount-text/priceWithDiscountText.component.jsx diff --git a/src/assets/styles/public.scss b/src/assets/styles/public.scss index c82c732..f654ef8 100644 --- a/src/assets/styles/public.scss +++ b/src/assets/styles/public.scss @@ -185,4 +185,33 @@ label{ } .link-route:hover{ color: black; +} +.priceWithoutDiscount{ + + position: absolute; + bottom: 4px; + color: gray; + font-size: 14px; + right: 40px; + .priceWithoutDiscounthr{ + width: 48px; + height: 0.5px; + background: #a0a0a0; + position: absolute; + top: 9px; + } +} +.priceWithoutDiscountcategory{ + position: absolute; + bottom: -18px; + color: gray; + font-size: 14px; + left: 31px; + .priceWithoutDiscounthr{ + width: 48px; + height: 0.5px; + background: #a0a0a0; + position: absolute; + top: 9px; + } } \ No newline at end of file diff --git a/src/components/add-to-cart-sector/AddToCartSector.component.jsx b/src/components/add-to-cart-sector/AddToCartSector.component.jsx index cb45713..b9feb85 100644 --- a/src/components/add-to-cart-sector/AddToCartSector.component.jsx +++ b/src/components/add-to-cart-sector/AddToCartSector.component.jsx @@ -37,9 +37,14 @@ const AddToCartSector = ({ price }) => {
- - {priceWithComma} - +
+ + {priceWithComma} + + + تومان + +
قیمت مصرف کننده diff --git a/src/components/home-productions-card/HomeProductionsCard.component.jsx b/src/components/home-productions-card/HomeProductionsCard.component.jsx index 5fcbdff..cb9fae0 100644 --- a/src/components/home-productions-card/HomeProductionsCard.component.jsx +++ b/src/components/home-productions-card/HomeProductionsCard.component.jsx @@ -1,5 +1,6 @@ import React from 'react'; import companyicon from '../../assets/images/company.png' +import PriceWithDiscountText from '../price-With-Discount-text/priceWithDiscountText.component'; import Styles from './HomeProductionsCard.module.scss' export const HomeProductionsCard = ({ name, price, image, className, discount, priceWithDiscount }) => { const imageHasHttp = image.includes('https') @@ -14,11 +15,12 @@ export const HomeProductionsCard = ({ name, price, image, className, discount, p تومان - {priceWithDiscount} + + {priceWithDiscount} + +
- - {price} - +
{image}
diff --git a/src/components/main-card/MainCard.component.jsx b/src/components/main-card/MainCard.component.jsx index dcb56d0..38c4e1d 100644 --- a/src/components/main-card/MainCard.component.jsx +++ b/src/components/main-card/MainCard.component.jsx @@ -3,6 +3,8 @@ import { numberWithCommas } from '../../utils/functions.utils'; import ColorsGroup from '../colors-group/ColorsGroup.component'; import Styles from './maincard.module.scss' import { AiFillStar } from 'react-icons/ai' +import PriceWithDiscountText from '../price-With-Discount-text/priceWithDiscountText.component'; +import { useState } from 'react'; const MainCard = (props) => { const { colors, image, title, price, discount, quantity } = props // {colorsArray} is just a test for ui @@ -10,7 +12,12 @@ const MainCard = (props) => { "blue", "white", "black", "green" ] const imageHasHttp = image.includes('https') + let priceWithDiscount = price const numberplit = numberWithCommas(price) + if (discount) { + const numberplitwithdiscount = numberWithCommas(price - price * discount / 100) + priceWithDiscount = numberplitwithdiscount + } return (
@@ -31,10 +38,14 @@ const MainCard = (props) => { 2.5
- {quantity == 0 ? ناموجود :
-

تومان {numberplit}

+ {quantity == 0 ? ناموجود :
+

تومان {discount ? priceWithDiscount : numberplit}

{discount ? discount + "%" : ''}
-
} +
+ {discount ? : ''} + +
+ }
); diff --git a/src/components/modals/EditModal.component.jsx b/src/components/modals/EditModal.component.jsx index 08484f3..213fea5 100644 --- a/src/components/modals/EditModal.component.jsx +++ b/src/components/modals/EditModal.component.jsx @@ -56,7 +56,12 @@ function EditModal(props) { price: value.price, quantity: value.quantity, store: "admin", - image: imageIds + image: imageIds, + "fillStrip": { + "pricevalue": 70, + "quality": 50, + "packing": 60 + } } }).unwrap() props.handelClose(state => { diff --git a/src/components/modals/GoodsModal.component.jsx b/src/components/modals/GoodsModal.component.jsx index bff9c71..9873556 100644 --- a/src/components/modals/GoodsModal.component.jsx +++ b/src/components/modals/GoodsModal.component.jsx @@ -50,7 +50,12 @@ function GoodsModal(props) { createdAt: Date.now(), price: value.price, quantity: value.quantity, - store: "admin" + store: "admin", + "fillStrip": { + "pricevalue": 70, + "quality": 50, + "packing": 60 + } }).unwrap() props.handelClose(state => { return state = { diff --git a/src/components/price-With-Discount-text/priceWithDiscountText.component.jsx b/src/components/price-With-Discount-text/priceWithDiscountText.component.jsx new file mode 100644 index 0000000..5fe2d4e --- /dev/null +++ b/src/components/price-With-Discount-text/priceWithDiscountText.component.jsx @@ -0,0 +1,12 @@ +import React from 'react'; + +const PriceWithDiscountText = ({ price, category }) => { + return ( + + {price} +
+
+ ); +} + +export default PriceWithDiscountText; diff --git a/src/components/productions-scroller/ProductionScroller.jsx b/src/components/productions-scroller/ProductionScroller.jsx index ab43a64..e786bf8 100644 --- a/src/components/productions-scroller/ProductionScroller.jsx +++ b/src/components/productions-scroller/ProductionScroller.jsx @@ -50,7 +50,7 @@ function ProductionScroller() { { const productId = useParams() - const { data: productData, isLoading } = useFetchSingleProductQuery(productId.id) + const { data: productData, isLoading, isSuccess } = useFetchSingleProductQuery(productId.id) const appTitle = getAppTitle() - + if (isSuccess) { + fillStrip = productData[0].fillStrip + } // we just need object in here const productObj = !isLoading && productData.length > 0 ? productData[0] : '' return ( From 55aaa947f62367d0efb3cb87e090be30fc8373e5 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Thu, 2 Feb 2023 02:25:04 +0330 Subject: [PATCH 21/22] search added --- src/apis/apiSlice.js | 2 ++ src/assets/styles/public.scss | 8 +++++++ .../header-search/HeaderSearch.component.jsx | 11 +++++++++- src/configs/routs.config.js | 1 + src/pages/search/search.page.jsx | 21 +++++++++++++++++++ src/routes/index.routes.jsx | 2 ++ 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/pages/search/search.page.jsx diff --git a/src/apis/apiSlice.js b/src/apis/apiSlice.js index dda1e5b..e3d1997 100644 --- a/src/apis/apiSlice.js +++ b/src/apis/apiSlice.js @@ -15,6 +15,8 @@ const baseQuery = fetchBaseQuery({ endpoint === "fetchCategoryscategory" || endpoint === "fetchSubcategory" || endpoint === "categorysInHome" || + endpoint === "subcategoryHome" || + endpoint === "productsHasDiscount" || endpoint === "subcategoryHome" ) { return headers; diff --git a/src/assets/styles/public.scss b/src/assets/styles/public.scss index f654ef8..946379d 100644 --- a/src/assets/styles/public.scss +++ b/src/assets/styles/public.scss @@ -214,4 +214,12 @@ color: black; position: absolute; top: 9px; } +} + + +.centerevrything{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); } \ No newline at end of file diff --git a/src/components/header-search/HeaderSearch.component.jsx b/src/components/header-search/HeaderSearch.component.jsx index c062def..9c994f9 100644 --- a/src/components/header-search/HeaderSearch.component.jsx +++ b/src/components/header-search/HeaderSearch.component.jsx @@ -1,7 +1,16 @@ +import { useLocation, useNavigate } from 'react-router-dom'; import Styles from './HeaderSearch.module.css' export const HeaderSearchComponent = () => { + const currentLocation = useLocation() + console.log(currentLocation); + const navigate = useNavigate() + function searchOnClick(params) { + if (currentLocation.pathname) { + navigate('/search') + } + } return ( - + ); } diff --git a/src/configs/routs.config.js b/src/configs/routs.config.js index 11017a0..44306e5 100644 --- a/src/configs/routs.config.js +++ b/src/configs/routs.config.js @@ -10,6 +10,7 @@ export const INTERNAL_PATHS = { ORDERS: "orders", INVENTORY_PRICE: "Inventory&Price", ADMIN_LOGIN: "/admin-login", + SEARCH: "/search", }; export const EXTERNAL_PATHS = { LINKEDIN: "https://www.linkedin.com/in/pouria-asrzad-70a679253/", diff --git a/src/pages/search/search.page.jsx b/src/pages/search/search.page.jsx new file mode 100644 index 0000000..1026e58 --- /dev/null +++ b/src/pages/search/search.page.jsx @@ -0,0 +1,21 @@ +import React from 'react'; +import PageContainer from '../../layouts/pageContainer/pageContainer.layout'; +import { BsSearch } from 'react-icons/bs' +const SearchPage = () => { + return ( + +
+
+ +
+ +
+
+ ); +} + +export default SearchPage; diff --git a/src/routes/index.routes.jsx b/src/routes/index.routes.jsx index e3ebdb0..bdc71a3 100644 --- a/src/routes/index.routes.jsx +++ b/src/routes/index.routes.jsx @@ -11,6 +11,7 @@ import { PrivateRoutes } from './private.routes' import { ProtectedRoutes } from './protected.routes' import { PublicRoutes } from './public.routes' import Home from '../pages/home/home.page' +import SearchPage from '../pages/search/search.page' const LazyHome = React.lazy(() => import('../pages/home/home.page')) const LazyCart = React.lazy(() => import('../pages/cart/cart.page')) const LazyNotFound = React.lazy(() => import('../pages/Error/not-found.page')) @@ -23,6 +24,7 @@ export const AppRouting = () => { }> } /> } /> + } /> } /> From d79a33dba97e1ee76d7863cd6517df4b6b1af6d3 Mon Sep 17 00:00:00 2001 From: Pouria Asrzad Date: Thu, 2 Feb 2023 23:27:45 +0330 Subject: [PATCH 22/22] search logic handeled --- src/apis/apiSlice.js | 3 +- .../price-filter/PriceFilter.component.jsx | 6 -- .../header-search/HeaderSearch.component.jsx | 42 +++++++++++++- .../HomeProductionsCard.component.jsx | 4 +- .../ProductionCardHome.component.jsx | 5 +- .../ProductionScroller.jsx | 10 ++-- src/pages/category/category.page.jsx | 11 +++- src/pages/search/search.module.scss | 20 +++++++ src/pages/search/search.page.jsx | 55 ++++++++++++++++--- .../show-zoom/showzoom.module.scss | 2 +- src/store/index.js | 2 + src/store/search-slice.js | 36 ++++++++++++ 12 files changed, 167 insertions(+), 29 deletions(-) create mode 100644 src/pages/search/search.module.scss create mode 100644 src/store/search-slice.js diff --git a/src/apis/apiSlice.js b/src/apis/apiSlice.js index e3d1997..9de8bd0 100644 --- a/src/apis/apiSlice.js +++ b/src/apis/apiSlice.js @@ -17,7 +17,8 @@ const baseQuery = fetchBaseQuery({ endpoint === "categorysInHome" || endpoint === "subcategoryHome" || endpoint === "productsHasDiscount" || - endpoint === "subcategoryHome" + endpoint === "subcategoryHome" || + endpoint === "fetchSingleProduct" ) { return headers; } diff --git a/src/components/category-filter/price-filter/PriceFilter.component.jsx b/src/components/category-filter/price-filter/PriceFilter.component.jsx index 3810898..e348bc7 100644 --- a/src/components/category-filter/price-filter/PriceFilter.component.jsx +++ b/src/components/category-filter/price-filter/PriceFilter.component.jsx @@ -41,9 +41,3 @@ const PriceFilter = ({ setFetchObj }) => { } export default PriceFilter; -/*
- {hotels.filter(hotel => { return hotel.price < parseInt(price, 10) }).map(hotel => { - return

{hotel.name} | {hotel.price} €

- })} -
- */ \ No newline at end of file diff --git a/src/components/header-search/HeaderSearch.component.jsx b/src/components/header-search/HeaderSearch.component.jsx index 9c994f9..8d65ecf 100644 --- a/src/components/header-search/HeaderSearch.component.jsx +++ b/src/components/header-search/HeaderSearch.component.jsx @@ -1,16 +1,52 @@ +import axios from 'axios'; +import { useEffect, useState } from 'react'; +import { useDispatch } from 'react-redux'; import { useLocation, useNavigate } from 'react-router-dom'; +import { API_BASE_URL } from '../../configs/variables.config'; +import { searchActions } from '../../store/search-slice'; + import Styles from './HeaderSearch.module.css' export const HeaderSearchComponent = () => { + const dispatch = useDispatch() const currentLocation = useLocation() - console.log(currentLocation); const navigate = useNavigate() + const [searchValue, setsearchValue] = useState(''); + function searchOnClick(params) { - if (currentLocation.pathname) { + if (currentLocation.pathname !== '/search') { navigate('/search') } } + useEffect(() => { + const identifier = setTimeout(() => { + if (searchValue !== '') { + axios.get(`${API_BASE_URL}products?q=${searchValue}`).then((res) => { + dispatch(searchActions.seLoading(true)) + if (res.statusText == 'OK') { + dispatch(searchActions.searchAnswer(res.data)) + } + }).catch(err => { + alert(err.message) + }).finally(() => { + dispatch(searchActions.seLoading(false)) + }) + } + }, 600); + return () => { + clearTimeout(identifier); + }; + }, [searchValue]); + + + + function searchOnchange(e) { + if (currentLocation.pathname === '/search') { + setsearchValue(e.target.value) + } + } + return ( - + ); } diff --git a/src/components/home-productions-card/HomeProductionsCard.component.jsx b/src/components/home-productions-card/HomeProductionsCard.component.jsx index cb9fae0..4d0ae76 100644 --- a/src/components/home-productions-card/HomeProductionsCard.component.jsx +++ b/src/components/home-productions-card/HomeProductionsCard.component.jsx @@ -1,9 +1,11 @@ import React from 'react'; import companyicon from '../../assets/images/company.png' +import { numberWithCommas } from '../../utils/functions.utils'; import PriceWithDiscountText from '../price-With-Discount-text/priceWithDiscountText.component'; import Styles from './HomeProductionsCard.module.scss' export const HomeProductionsCard = ({ name, price, image, className, discount, priceWithDiscount }) => { const imageHasHttp = image.includes('https') + const pricenumberWithCommas = numberWithCommas(priceWithDiscount) return (
@@ -16,7 +18,7 @@ export const HomeProductionsCard = ({ name, price, image, className, discount, p تومان - {priceWithDiscount} + {pricenumberWithCommas}
diff --git a/src/components/production-card-home/ProductionCardHome.component.jsx b/src/components/production-card-home/ProductionCardHome.component.jsx index 1d0b8d3..376c1a5 100644 --- a/src/components/production-card-home/ProductionCardHome.component.jsx +++ b/src/components/production-card-home/ProductionCardHome.component.jsx @@ -1,7 +1,8 @@ import React from 'react'; +import { numberWithCommas } from '../../utils/functions.utils'; import Styles from './ProductionCardHome.module.css' export const ProductionCardHome = ({ name, price, image }) => { - + const priceWithcommas = numberWithCommas(price) return ( <>
@@ -10,7 +11,7 @@ export const ProductionCardHome = ({ name, price, image }) => {
{name} - {price} تومان + {priceWithcommas} تومان
diff --git a/src/components/productions-scroller/ProductionScroller.jsx b/src/components/productions-scroller/ProductionScroller.jsx index e786bf8..87ca9f9 100644 --- a/src/components/productions-scroller/ProductionScroller.jsx +++ b/src/components/productions-scroller/ProductionScroller.jsx @@ -72,19 +72,21 @@ function ProductionScroller() { id='slider2' className={Styles.scrollitemscontainet} > - {productsHasDiscount10 && productsHasDiscount10.map((item, index) => ( - + {productsHasDiscount10 && productsHasDiscount10.map((item, index) => { + console.log(item.Discount) + return - ))} + })}
diff --git a/src/pages/category/category.page.jsx b/src/pages/category/category.page.jsx index 1233be6..c3bdbd5 100644 --- a/src/pages/category/category.page.jsx +++ b/src/pages/category/category.page.jsx @@ -51,7 +51,7 @@ const Category = () => { return product.quantity > 0 }).map((product) => { - return + return @@ -59,7 +59,7 @@ const Category = () => { } if (filterAsquantity == 1) { categoryfetchAnswer = products.map((product) => { - return + return @@ -115,7 +115,12 @@ const Category = () => { {products.length > 0 ? : ''}
- {products.length >= 1 && {fetchObj.page}} + {products.length >= 1 &&
+ + {fetchObj.page}
}
); diff --git a/src/pages/search/search.module.scss b/src/pages/search/search.module.scss new file mode 100644 index 0000000..3c7d592 --- /dev/null +++ b/src/pages/search/search.module.scss @@ -0,0 +1,20 @@ +.cardContainerSection{ + display: flex; + flex-wrap: wrap; + margin-top: 10rem; + margin-left: 10px; +} +.indexanswer{ + display: flex; + justify-content: center; + direction: rtl; + font-size: 18px; + position: fixed; + left: 0; + right: 0; + background: white; + z-index: 2; + padding: 10px; + top: 7.1rem; + box-shadow: 0 1px 0 rgb(0 0 0 / 14%), 0 2px 0 rgb(207 3 3 / 23%); +} \ No newline at end of file diff --git a/src/pages/search/search.page.jsx b/src/pages/search/search.page.jsx index 1026e58..7443dbd 100644 --- a/src/pages/search/search.page.jsx +++ b/src/pages/search/search.page.jsx @@ -1,19 +1,58 @@ import React from 'react'; import PageContainer from '../../layouts/pageContainer/pageContainer.layout'; import { BsSearch } from 'react-icons/bs' +import { useEffect } from 'react'; +import { useSelector } from 'react-redux'; +import { Link } from 'react-router-dom'; +import MainCard from '../../components/main-card/MainCard.component'; +import { INTERNAL_PATHS } from '../../configs/routs.config'; +import Styles from './search.module.scss' +import { Loading } from '../../components'; const SearchPage = () => { + useEffect(() => { + document.body.scrollTop = 0; + document.documentElement.scrollTop = 0; + }, []) + const searchAnswer = useSelector(state => state.search.searchData) + const isLoading = useSelector(state => state.search.loading) + return ( -
-
- + {isLoading ? :
+
+ {!searchAnswer ?
+ + ...در پوریاکالا جستجو کنید +
+ : <> + {searchAnswer.length > 0 && searchAnswer.error !== 404 ? {`${searchAnswer.length} کالا یافت شد `} : ''} +
+ { + searchAnswer.length > 0 ? searchAnswer.map((product) => { + return + + + }) + : '' + + + } + { + searchAnswer.error == 404 &&

+ {searchAnswer.errorMessage} +

+ } +
+ + }
-
+
} ); } diff --git a/src/pages/single-product/show-zoom/showzoom.module.scss b/src/pages/single-product/show-zoom/showzoom.module.scss index c7a86c5..e7b2121 100644 --- a/src/pages/single-product/show-zoom/showzoom.module.scss +++ b/src/pages/single-product/show-zoom/showzoom.module.scss @@ -3,7 +3,7 @@ top: 119px; left: 4rem; background-color: #fffdfd; - + border: 1px solid orange; box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; padding: 50px; width: 54rem; diff --git a/src/store/index.js b/src/store/index.js index 4fa421b..788c11b 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,11 +1,13 @@ import { configureStore } from "@reduxjs/toolkit"; import { apiSlice } from "../apis/apiSlice"; import authSlice from "./auth/authSlice"; +import searchSlice from "./search-slice"; // import fetchProducts from "./getSlice-rtk-query"; import uiSlice from "./ui-slice"; const store = configureStore({ reducer: { + search: searchSlice.reducer, ui: uiSlice.reducer, [apiSlice.reducerPath]: apiSlice.reducer, auth: authSlice, diff --git a/src/store/search-slice.js b/src/store/search-slice.js new file mode 100644 index 0000000..c57d6a5 --- /dev/null +++ b/src/store/search-slice.js @@ -0,0 +1,36 @@ +import { createSlice } from "@reduxjs/toolkit"; +const initialState = { + searchData: null, + loading: false, +}; +const searchSlice = createSlice({ + name: "ui", + initialState, + reducers: { + searchAnswer(state, action) { + if (action.payload && action.payload.length > 0) { + state.searchData = action.payload; + } + + if (action.payload && action.payload.length == 0) { + state.searchData = { + error: 404, + errorMessage: + "پوریاکالا هیچ کالایی مطابق بر کلمات ورودی شما پیدا نکرد", + }; + } + if (action.payload == "isLoading") { + state.searchData = "isLoading"; + } + if (action.payload == "isLoading") { + state.searchData = "isLoading"; + } + }, + seLoading(state, action) { + state.loading = action.payload; + }, + }, +}); + +export const searchActions = searchSlice.actions; +export default searchSlice;