From 8def463d80c4135424b84250a961a6ac10b31878 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Fri, 14 Jul 2023 17:54:44 +0100 Subject: [PATCH 01/16] card listing added --- src/components/Settings/Tabs/CardList.jsx | 91 ++++++++++++++ .../Settings/Tabs/PaymentMathodsTab.jsx | 111 +----------------- 2 files changed, 95 insertions(+), 107 deletions(-) create mode 100644 src/components/Settings/Tabs/CardList.jsx diff --git a/src/components/Settings/Tabs/CardList.jsx b/src/components/Settings/Tabs/CardList.jsx new file mode 100644 index 0000000..c08ca0f --- /dev/null +++ b/src/components/Settings/Tabs/CardList.jsx @@ -0,0 +1,91 @@ +import React, {useEffect, useState} from 'react' +import method1 from "../../../assets/images/payment-method-1.png"; +import LoadingSpinner from '../../Spinners/LoadingSpinner'; +import usersService from "../../../services/UsersService"; +import { handlePagingFunc } from '../../Pagination'; +import PaginatedList from '../../Pagination/PaginatedList'; + +function CardList() { + const api = new usersService(); + const [cardList, setCardList] = useState({loading: true, data: []}) + + const [currentPage, setCurrentPage] = useState(0); + const indexOfFirstItem = Number(currentPage); + const indexOfLastItem = + Number(indexOfFirstItem) + Number(process.env.REACT_APP_ITEM_PER_PAGE); + const currentCardList = cardList?.data?.slice(indexOfFirstItem, indexOfLastItem); + + const handlePagination = (e) => { + handlePagingFunc(e, setCurrentPage); + }; + + useEffect(()=>{ + api.payListCard().then(res=>{ + setCardList({loading: false, data:res.data?.result_list}) + }).catch(err => { + setCardList({loading: false, data:[]}) + console.log('ERROR', err) + }) + },[]) + return ( +
+ + + {/* PAGINATION BUTTON */} + = + cardList?.data?.length + ? true + : false + } + data={cardList?.data} + start={indexOfFirstItem} + stop={indexOfLastItem} + /> + {/* END OF PAGINATION BUTTON */} +
+ ) +} + +export default CardList \ No newline at end of file diff --git a/src/components/Settings/Tabs/PaymentMathodsTab.jsx b/src/components/Settings/Tabs/PaymentMathodsTab.jsx index 2e34a82..540aa2d 100644 --- a/src/components/Settings/Tabs/PaymentMathodsTab.jsx +++ b/src/components/Settings/Tabs/PaymentMathodsTab.jsx @@ -1,120 +1,17 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import method1 from "../../../assets/images/payment-method-1.png"; import method2 from "../../../assets/images/payment-method-2.png"; import method3 from "../../../assets/images/payment-method-3.png"; import method4 from "../../../assets/images/payment-method-4.png"; +import CardList from "./CardList"; + export default function PaymentMathodsTab() { return ( <>
-
    -
  • -
    -
    - payment -
    -
    -

    - Datch Bangla Bank Ltd -

    -

    - Bank **********5535 -

    -

    - Verified -

    -
    -
    -
    - -
    -
  • -
  • -
    -
    - payment -
    -
    -

    - Master Card -

    -

    - Bank **********5535 -

    -

    - Verified -

    -
    -
    -
    - -
    -
  • -
  • -
    -
    - payment -
    -
    -

    - Paypal Account -

    -

    - Bank **********5535 -

    -

    - Verified -

    -
    -
    -
    - -
    -
  • -
  • -
    -
    - payment -
    -
    -

    - Visa Card -

    -

    - Bank **********5535 -

    -

    - Unverified -

    -
    -
    -
    - -
    -
  • -
+
: cardList.data.length ? - currentCardList.map(item =>( -
  • -
    -
    - payment + currentCardList.map(item =>{ + let image = item.description && localImgLoad(`images/payment-cards/${item.description.toLowerCase()}-card.svg`) + return( +
  • +
    +
    + payment +
    +
    +

    + Added: {item.added} +

    +

    + {item.description} **********{item.digits} +

    + {/*

    + Verified +

    */} +
    -

    - Added: {item.added} -

    -

    - {item.description} **********{item.digits} -

    - {/*

    - Verified -

    */} +
    -
  • -
    - -
    - - )) + + )} + ) :

    No Cards Found

    } diff --git a/src/components/Settings/Tabs/PaymentMathodsTab.jsx b/src/components/Settings/Tabs/PaymentMathodsTab.jsx index 540aa2d..e58e8ac 100644 --- a/src/components/Settings/Tabs/PaymentMathodsTab.jsx +++ b/src/components/Settings/Tabs/PaymentMathodsTab.jsx @@ -12,20 +12,6 @@ export default function PaymentMathodsTab() {
    -
    - - -
    diff --git a/src/components/Settings/index.jsx b/src/components/Settings/index.jsx index b96e6a7..64917b7 100644 --- a/src/components/Settings/index.jsx +++ b/src/components/Settings/index.jsx @@ -58,7 +58,7 @@ export default function Settings({ faq }) { { id: 2, name: "payment", - title: "Payment Method", + title: "Payment Cards", iconName: "bank-card", }, { From 1d5875d4e29728b646d40fb09e23c81f9a1edfc1 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Fri, 14 Jul 2023 20:28:22 +0100 Subject: [PATCH 04/16] reset profile password implemented --- .../Settings/Tabs/ChangePasswordTab.jsx | 138 ++++++++++++++++-- src/services/UsersService.js | 12 ++ 2 files changed, 137 insertions(+), 13 deletions(-) diff --git a/src/components/Settings/Tabs/ChangePasswordTab.jsx b/src/components/Settings/Tabs/ChangePasswordTab.jsx index b3e5236..a4c5eaf 100644 --- a/src/components/Settings/Tabs/ChangePasswordTab.jsx +++ b/src/components/Settings/Tabs/ChangePasswordTab.jsx @@ -3,11 +3,39 @@ import React, { useState } from "react"; import Icons from "../../Helpers/Icons"; import PasswordSvg from "../PasswordSvg"; +import LoadingSpinner from "../../Spinners/LoadingSpinner"; +import usersService from "../../../services/UsersService"; +import { useNavigate } from "react-router-dom"; export default function ChangePasswordTab() { + const apiUrl = new usersService() + const navigate = useNavigate() + const [oldPass, setOldPass] = useState("hide-password"); const [newPass, setNewPass] = useState("hide-password"); const [confirmPass, setConfirmPass] = useState("hide-password"); + + const [requestStatus, setRequestStatus] = useState({loading: false, status: false, message: ''}) + + const [inputEmpty, setInputEmpty] = useState(false) + let [inputs, setInputs] = useState({ + old_pwd: '', + new_pwd: '', + confirm_new_pwd: '' + }) + + const handleInputChange = ({target:{name, value}}) => { // FUNCTION TO HANDLE WHEN AN INPUT CHANGES + setInputs(prev => ({...prev, [name]:value})) + } + + const handleCancel = () => { // FUNCTION TO CLEAR ALL TYPED INPUTS + setInputs({ + old_pwd: '', + new_pwd: '', + confirm_new_pwd: '' + }) + } + const showPassword = (value) => { const password = document.getElementById(`${value}`); if (value && value === "old_password") { @@ -38,16 +66,61 @@ export default function ChangePasswordTab() { } } }; + + const handlePwdUpdate = () => { + setInputEmpty(false) // SETS THE STATE OF ANY INPUT IS EMPTY TO FALSE + if(!inputs.old_pwd || !inputs.new_pwd || !inputs.confirm_new_pwd){ // CHECKS IF ANY INPUT FIELD IS EMPTY AND SETS INPUT EMPTY TO TRUE + setInputEmpty(true) + return setTimeout(()=>{setInputEmpty(false)},3000) + } + + if(inputs.new_pwd != inputs.confirm_new_pwd){ // CHECKS IF PASSWORD MATCHES CONFIRM PASSWORD + setRequestStatus({loading: false, status: false, message: 'new password must match confirm password'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + if(/^[a-zA-Z0-9]*$/.test(inputs.new_pwd) == false){ // CHECKS IF PASSWORD IS ALPHANUMERIC + setRequestStatus({loading: false, status: false, message: 'password must be alphanumeric'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + if(inputs.new_pwd.length < 6){ // CHECKS IF PASSWORD IS UPTO SIX CHARACTERS + setRequestStatus({loading: false, status: false, message: 'password must be upto six characters'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + + let reqData = { // REQUEST PAYLOAD + current_pass: inputs.old_pwd, + new_pass: inputs.new_pwd + } + + + setRequestStatus({loading: true, status: false, message: ''}) + + apiUrl.profilePassChange(reqData).then(res => { + if(res.status != 200 || res.data.internal_return < 0){ + setRequestStatus({loading: false, status: false, message: 'unable to complete request'}) + return + } + setRequestStatus({loading: false, status: true, message: 'password update was successful'}) + setTimeout(()=>{navigate('/settings', {replace: true})}, 5000) + }).catch(err => { + setRequestStatus({loading: false, status: false, message: 'unable to complete request'}) + }).finally(()=>{ + setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},4000) + }) + } return (
    -
    +
    @@ -58,6 +131,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="old_password" + value={inputs.old_pwd} + name='old_pwd' + onChange={handleInputChange} + autoComplete='false' />
    - New Password + New Password {(inputEmpty && !inputs.new_pwd) && 'required'}
    @@ -83,6 +160,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="new_password" + value={inputs.new_pwd} + name='new_pwd' + onChange={handleInputChange} + autoComplete='false' />
    - Confirm Password + Confirm Password {(inputEmpty && !inputs.confirm_new_pwd) && 'required'}
    @@ -108,6 +189,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="confirm_password" + value={inputs.confirm_new_pwd} + name='confirm_new_pwd' + onChange={handleInputChange} + autoComplete='false' />
    - + {requestStatus.loading ? + + : + + }
    + + {/* error or success display */} + {requestStatus.message != "" && + (!requestStatus.status ? ( +
    + {requestStatus.message} +
    + ) : ( + requestStatus.status && ( +
    + {requestStatus.message} +
    + ) + ))} + {/* End of error or success display */}
    diff --git a/src/services/UsersService.js b/src/services/UsersService.js index bf27810..79cb4a4 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -921,6 +921,18 @@ class usersService { return this.postAuxEnd("/familysuggestlist", postData); } + // FUNCTION TO CHANGE PROFILE PASSWORD + profilePassChange(reqData) { + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + action: 11005, + ...reqData, + }; + return this.postAuxEnd("/profilepasschange", postData); + } + /* - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username) - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password) From 494c1f3271c810430fe34ae24bdf5b54d5502032 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 08:00:25 +0100 Subject: [PATCH 05/16] account settings API added --- .../Settings/Tabs/NotificationSettingTab.jsx | 301 +++++------------- src/services/UsersService.js | 11 + 2 files changed, 86 insertions(+), 226 deletions(-) diff --git a/src/components/Settings/Tabs/NotificationSettingTab.jsx b/src/components/Settings/Tabs/NotificationSettingTab.jsx index 85dffc8..c8571a2 100644 --- a/src/components/Settings/Tabs/NotificationSettingTab.jsx +++ b/src/components/Settings/Tabs/NotificationSettingTab.jsx @@ -1,237 +1,86 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import SwitchCom from "../../Helpers/SwitchCom"; +import LoadingSpinner from "../../Spinners/LoadingSpinner"; +import usersService from "../../../services/UsersService"; +import localImgLoad from "../../../lib/localImgLoad"; + +import defaultImage from '../../../assets/images/banner-job-due.jpg' + + export default function NotificationSettingTab() { - const [updateNotification, setUpdateNotification] = useState(false); - const [uploadProduct, setUploadProduct] = useState(true); - const [saleProduct, setSaleProduct] = useState(true); - const [getProduct, setGetProduct] = useState(false); - const [authLevel, setAuthLevel] = useState(true); + const api = new usersService(); + + const [accSettings, setAccSettings] = useState({loading: true, data: []}) // STATE TO HOLD ACCOUNT SETTINGS + + // const [updateNotification, setUpdateNotification] = useState(false); + // const [uploadProduct, setUploadProduct] = useState(true); + // const [saleProduct, setSaleProduct] = useState(true); + // const [getProduct, setGetProduct] = useState(false); + // const [authLevel, setAuthLevel] = useState(true); + + const handleNotificationChange = (item) => { + setAccSettings(prev => { + let newAccSettings = prev.data.map(data => { + if(data.uid == item.uid){ + let newPrefValue = data.pref_value == null || data.pref_value == false ? true : false + return {...data, pref_value: newPrefValue} + }else{ + return data + } + }) + return {...prev, data: newAccSettings} + }) + } + + useEffect(()=>{ + api.getAccSettings().then(res => { + setAccSettings({loading: false, data: res.data?.result_list || []}) + }).catch(errer => { + setAccSettings({loading: false, data: []}) + }) + },[]) + return (
    -
      -
    • -
      -
      - - - - - - - - - - - - +
        + {accSettings.loading ? + + : + accSettings.data.length ? + accSettings.data.map(item =>{ + console.log(item) + let image = '' //item.banner && localImgLoad(`images/payment-cards/${item.banner.toLowerCase()}`) + return( +
      • +
        +
        + account-settings +
        +
        +

        + {item.title} +

        +

        + {item.description} +

        +
        -
        -

        - All Notifcation update off -

        -

        - Unlockable content, only revealed by the owner of the item. -

        +
        + handleNotificationChange(item)} + // value={updateNotification} + // handler={() => setUpdateNotification(!updateNotification)} + />
        -
        -
        - setUpdateNotification(!updateNotification)} - /> -
        -
      • -
      • -
        -
        - - - - - - -
        -
        -

        - When you upload prodcuts -

        -

        - Evey new prodcuts upload seccessfullly doen you can get - notifcation -

        -
        -
        -
        - setUploadProduct(!uploadProduct)} - /> -
        -
      • -
      • -
        -
        - - - - - - - - -
        -
        -

        - You got sell your prodcuts -

        -

        - Evey new prodcuts sell you can get notifcation -

        -
        -
        -
        - setSaleProduct(!saleProduct)} - /> -
        -
      • -
      • -
        -
        - - - - - - -
        -
        -

        - Got new follower -

        -

        - Evey new follower you can get notifcation -

        -
        -
        -
        - setGetProduct(!getProduct)} - /> -
        -
      • -
      • -
        -
        - - - - -
        -
        -

        - Auther leavel up -

        -

        - Evey new prodcuts sell you can get notifcation -

        -
        -
        -
        - setAuthLevel(!authLevel)} - /> -
        -
      • + + )} + ) + : +

        No Cards Found

        + }
      diff --git a/src/services/UsersService.js b/src/services/UsersService.js index 79cb4a4..b143d6b 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -933,6 +933,17 @@ class usersService { return this.postAuxEnd("/profilepasschange", postData); } + // FUNCTION TO GET ACCOUNT SETTINGS + getAccSettings() { + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + action: 11059, + }; + return this.postAuxEnd("/getaccsettings", postData); + } + /* - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username) - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password) From c1af2b7fc93135fb952212458f21ac7fd3a27be1 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 08:06:44 +0100 Subject: [PATCH 06/16] logged info removed --- src/components/Settings/Tabs/NotificationSettingTab.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Settings/Tabs/NotificationSettingTab.jsx b/src/components/Settings/Tabs/NotificationSettingTab.jsx index c8571a2..07e2a44 100644 --- a/src/components/Settings/Tabs/NotificationSettingTab.jsx +++ b/src/components/Settings/Tabs/NotificationSettingTab.jsx @@ -50,7 +50,6 @@ export default function NotificationSettingTab() { : accSettings.data.length ? accSettings.data.map(item =>{ - console.log(item) let image = '' //item.banner && localImgLoad(`images/payment-cards/${item.banner.toLowerCase()}`) return(
    • From 9cf6d137161c5690e8c19f68cbdc71f8fcef31a4 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 04:37:52 -0400 Subject: [PATCH 07/16] images --- src/assets/images/payment-cards/american-express-card.svg | 1 + src/assets/images/settings/settings.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 src/assets/images/payment-cards/american-express-card.svg create mode 100644 src/assets/images/settings/settings.svg diff --git a/src/assets/images/payment-cards/american-express-card.svg b/src/assets/images/payment-cards/american-express-card.svg new file mode 100644 index 0000000..bbb0364 --- /dev/null +++ b/src/assets/images/payment-cards/american-express-card.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/settings/settings.svg b/src/assets/images/settings/settings.svg new file mode 100644 index 0000000..c608904 --- /dev/null +++ b/src/assets/images/settings/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file From b81e62988cb6c0ecdbdf62efd53a55ca174b40c6 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 09:48:14 +0100 Subject: [PATCH 08/16] delete popout added --- src/components/Settings/Tabs/CardList.jsx | 11 +- .../Settings/Tabs/DeleteCardPopout.jsx | 143 ++++++++++++++++++ 2 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 src/components/Settings/Tabs/DeleteCardPopout.jsx diff --git a/src/components/Settings/Tabs/CardList.jsx b/src/components/Settings/Tabs/CardList.jsx index a6139dc..f019018 100644 --- a/src/components/Settings/Tabs/CardList.jsx +++ b/src/components/Settings/Tabs/CardList.jsx @@ -7,10 +7,17 @@ import usersService from "../../../services/UsersService"; import { handlePagingFunc } from '../../Pagination'; import PaginatedList from '../../Pagination/PaginatedList'; +import DeleteCardPopout from './DeleteCardPopout'; + function CardList() { const api = new usersService(); const [cardList, setCardList] = useState({loading: true, data: []}) + const [deleteCardModal, setDeleteCardModal] = useState({show: false, data: {}}) // STATE TO HOLD WHEN DELETE MODAL POPS UP + const handleDeleteCardModal = () => { + setDeleteCardModal(prev => ({...prev, show:!prev.show})) + } + const [currentPage, setCurrentPage] = useState(0); const indexOfFirstItem = Number(currentPage); const indexOfLastItem = @@ -23,7 +30,6 @@ function CardList() { useEffect(()=>{ api.payListCard().then(res=>{ - console.log('TESTING', res.data?.result_list) setCardList({loading: false, data:res.data?.result_list}) }).catch(err => { setCardList({loading: false, data:[]}) @@ -62,6 +68,7 @@ function CardList() {
      ) } diff --git a/src/components/Settings/Tabs/DeleteCardPopout.jsx b/src/components/Settings/Tabs/DeleteCardPopout.jsx new file mode 100644 index 0000000..709381d --- /dev/null +++ b/src/components/Settings/Tabs/DeleteCardPopout.jsx @@ -0,0 +1,143 @@ +import React, { useState } from 'react' +import ModalCom from '../../Helpers/ModalCom' +import LoadingSpinner from '../../Spinners/LoadingSpinner' +import usersService from '../../../services/UsersService' + +function DeleteCardPopout({action, situation, data}) { + const api = new usersService() + + const [requestStatus, setRequestStatus] = useState({loading: false, status:false, message: ''}) + + let handleDeleteCard = () => { // FUNCTION TO DELETE A CARD + setRequestStatus(prev => ({...prev, loading: true})) + api.payRemCard({card_uid:data.card_uid}).then(res=>{ + if(res.status != 200 || res.data.internal_return < 0){ + setRequestStatus({loading: false, status:false, message: 'unable to delete card. Try Again'}) + } + setRequestStatus({loading: false, status:true, message: 'Card deleted'}) + // setTimeout(()=>{action()},3000) // CLOSES MODAL AFTER SOME SECONDS + }).catch(err => { + setRequestStatus({loading: false, status:false, message: 'network error. Try Again'}) + }).finally(()=>{ + setTimeout(()=>{ + setRequestStatus(prev => ({...prev, message: ''})) + if(requestStatus.status){ + action() // CLOSES MODAL AFTER SOME SECONDS + } + },4000) + }) + } + return ( + +
      +
      +

      + Confirm Card Delete +

      + +
      +
      +
      + + + + + +
      +
      +

      + Are you sure you want to delete? +

      +
      +

      + Added: {data.added} +

      +

      + {data.description} **********{data.digits} +

      +
      +
      + {/* error or success display */} + {requestStatus.message != "" && + (!requestStatus.status ? ( +
      + {requestStatus.message} +
      + ) : ( + requestStatus.status && ( +
      + {requestStatus.message} +
      + ) + ))} + {/* End of error or success display */} +
      + + {requestStatus.loading ? + + : + + } +
      +
      +
      +
      + ) +} + +export default DeleteCardPopout \ No newline at end of file From 85ca2cb15a1668ecff033b18ad3876a02cc6b4d3 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 10:15:14 +0100 Subject: [PATCH 09/16] reloads card list on successful card delete --- src/components/Settings/Tabs/CardList.jsx | 10 ++++++++-- src/components/Settings/Tabs/DeleteCardPopout.jsx | 9 ++++----- src/services/UsersService.js | 12 ++++++++++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/components/Settings/Tabs/CardList.jsx b/src/components/Settings/Tabs/CardList.jsx index f019018..7d02eaa 100644 --- a/src/components/Settings/Tabs/CardList.jsx +++ b/src/components/Settings/Tabs/CardList.jsx @@ -11,6 +11,9 @@ import DeleteCardPopout from './DeleteCardPopout'; function CardList() { const api = new usersService(); + + const [reloadCardList, setReloadCardList] = useState(false) // STATE TO DETERMINE WHEN CARD LIST RELOADS. EG: WHEN USER DELETES A CARD + const [cardList, setCardList] = useState({loading: true, data: []}) const [deleteCardModal, setDeleteCardModal] = useState({show: false, data: {}}) // STATE TO HOLD WHEN DELETE MODAL POPS UP @@ -29,13 +32,14 @@ function CardList() { }; useEffect(()=>{ + setCardList({loading: true, data: []}) api.payListCard().then(res=>{ setCardList({loading: false, data:res.data?.result_list}) }).catch(err => { setCardList({loading: false, data:[]}) console.log('ERROR', err) }) - },[]) + },[reloadCardList]) return (
        @@ -98,7 +102,9 @@ function CardList() { /> {/* END OF PAGINATION BUTTON */} - {deleteCardModal.show && } + {deleteCardModal.show && + + }
      ) } diff --git a/src/components/Settings/Tabs/DeleteCardPopout.jsx b/src/components/Settings/Tabs/DeleteCardPopout.jsx index 709381d..899981b 100644 --- a/src/components/Settings/Tabs/DeleteCardPopout.jsx +++ b/src/components/Settings/Tabs/DeleteCardPopout.jsx @@ -3,7 +3,7 @@ import ModalCom from '../../Helpers/ModalCom' import LoadingSpinner from '../../Spinners/LoadingSpinner' import usersService from '../../../services/UsersService' -function DeleteCardPopout({action, situation, data}) { +function DeleteCardPopout({action, situation, data, setReloadCardList}) { const api = new usersService() const [requestStatus, setRequestStatus] = useState({loading: false, status:false, message: ''}) @@ -13,17 +13,16 @@ function DeleteCardPopout({action, situation, data}) { api.payRemCard({card_uid:data.card_uid}).then(res=>{ if(res.status != 200 || res.data.internal_return < 0){ setRequestStatus({loading: false, status:false, message: 'unable to delete card. Try Again'}) + return } setRequestStatus({loading: false, status:true, message: 'Card deleted'}) - // setTimeout(()=>{action()},3000) // CLOSES MODAL AFTER SOME SECONDS + setReloadCardList(prev => !prev) // RELOADS PAY CARD LIST + setTimeout(()=>{action()},3000) // CLOSES MODAL AFTER SOME SECONDS }).catch(err => { setRequestStatus({loading: false, status:false, message: 'network error. Try Again'}) }).finally(()=>{ setTimeout(()=>{ setRequestStatus(prev => ({...prev, message: ''})) - if(requestStatus.status){ - action() // CLOSES MODAL AFTER SOME SECONDS - } },4000) }) } diff --git a/src/services/UsersService.js b/src/services/UsersService.js index b143d6b..a699a6d 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -944,6 +944,18 @@ class usersService { return this.postAuxEnd("/getaccsettings", postData); } + // FUNCTION TO DELETE PAY CARD + payRemCard(reqData) { + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + action: 11057, + ...reqData, + }; + return this.postAuxEnd("/payremcard", postData); + } + /* - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username) - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password) From 6b712089d1966d436ae6e531c2ea29a589631388 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 10:49:46 +0100 Subject: [PATCH 10/16] notification icons added --- src/components/Settings/Tabs/NotificationSettingTab.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Settings/Tabs/NotificationSettingTab.jsx b/src/components/Settings/Tabs/NotificationSettingTab.jsx index 07e2a44..a49c817 100644 --- a/src/components/Settings/Tabs/NotificationSettingTab.jsx +++ b/src/components/Settings/Tabs/NotificationSettingTab.jsx @@ -50,11 +50,11 @@ export default function NotificationSettingTab() { : accSettings.data.length ? accSettings.data.map(item =>{ - let image = '' //item.banner && localImgLoad(`images/payment-cards/${item.banner.toLowerCase()}`) + let image = item.banner && localImgLoad(`images/settings/${item.banner.toLowerCase()}`) return(
    • -
      +
      account-settings
      From a9f671eeaa17e0d41215677e58d5ab0f36fe6b15 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 08:55:48 -0400 Subject: [PATCH 11/16] active task messaghe --- src/components/MyActiveJobs/ActiveJobMessage.jsx | 2 +- src/index.css | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/components/MyActiveJobs/ActiveJobMessage.jsx b/src/components/MyActiveJobs/ActiveJobMessage.jsx index 8bc4abd..9feb091 100644 --- a/src/components/MyActiveJobs/ActiveJobMessage.jsx +++ b/src/components/MyActiveJobs/ActiveJobMessage.jsx @@ -32,7 +32,7 @@ export default function ActiveJobMessage({ activeJobMesList }) { {currentActiveJobMesList.map((item, index) => ( -
      +
      {item.msg_date} {item.msg_firstname}
      diff --git a/src/index.css b/src/index.css index 15e7d7c..0bc0a72 100644 --- a/src/index.css +++ b/src/index.css @@ -11,6 +11,14 @@ font-family: "Product Sans"; src: url("./assets/fonts/Product Sans Bold.ttf"); } +.SENDER{ + margin-left: 60px !important; + background-color: azure; +} +.RECIPIENT{ + margin-right: 60px !important; + background-color: lightblue; +} .wallet-box{ background-color: aliceblue; border-radius: 20px; @@ -47,9 +55,11 @@ border-radius: 15px; } .msg_header{ - background-color: #1a3544; - color: white; + background-color: white; + color: black; font-weight: bold; + border-radius: 9px; + font-family: Circular, Helvetica Neue, Helvetica, Roboto, Arial, sans-serif; } .siderCardDescription{ background-color: aliceblue; From 940a12a2e9f60ae2dd26a4a73e17b780d0464a3d Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 09:51:53 -0400 Subject: [PATCH 12/16] actio panel --- .../MyActiveJobs/JobActions/CurrentJobAction.jsx | 8 ++++---- .../MyActiveJobs/JobActions/CurrentTaskAction.jsx | 8 ++++---- .../MyActiveJobs/JobActions/PastDueJobAction.jsx | 6 +++--- .../MyActiveJobs/JobActions/PastDueTaskAction.jsx | 6 +++--- .../MyActiveJobs/JobActions/ReviewJobAction.jsx | 6 +++--- .../MyActiveJobs/JobActions/ReviewTaskAction.jsx | 2 +- src/index.css | 9 ++++++++- 7 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/components/MyActiveJobs/JobActions/CurrentJobAction.jsx b/src/components/MyActiveJobs/JobActions/CurrentJobAction.jsx index 9081c8b..5c954d5 100644 --- a/src/components/MyActiveJobs/JobActions/CurrentJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/CurrentJobAction.jsx @@ -4,15 +4,15 @@ function CurrentJobAction() { return (

      - +
      diff --git a/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx b/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx index d68c1c6..78a8759 100644 --- a/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx +++ b/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx @@ -62,14 +62,14 @@ function CurrentTaskAction({jobDetails}) { return (
      -
      -
      +
      -

      +
      Waiting for the completion message from the client before you can approve. -

      +
      {/*
      */}
      +
      diff --git a/src/components/MyActiveJobs/JobActions/PastDueTaskAction.jsx b/src/components/MyActiveJobs/JobActions/PastDueTaskAction.jsx index d742b73..5bd83f3 100644 --- a/src/components/MyActiveJobs/JobActions/PastDueTaskAction.jsx +++ b/src/components/MyActiveJobs/JobActions/PastDueTaskAction.jsx @@ -8,11 +8,11 @@ function PastDueTaskAction() { diff --git a/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx b/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx index f12fe39..6f808ff 100644 --- a/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx @@ -96,11 +96,11 @@ function ReviewJobAction({jobDetails}) { diff --git a/src/components/MyActiveJobs/JobActions/ReviewTaskAction.jsx b/src/components/MyActiveJobs/JobActions/ReviewTaskAction.jsx index 9163dcd..0e90332 100644 --- a/src/components/MyActiveJobs/JobActions/ReviewTaskAction.jsx +++ b/src/components/MyActiveJobs/JobActions/ReviewTaskAction.jsx @@ -2,7 +2,7 @@ import React from 'react' function ReviewTaskAction() { return ( -
      +

      Waiting for the completion message from the client before you can approve. Worker True & Review Job

      diff --git a/src/index.css b/src/index.css index 0bc0a72..273b8f0 100644 --- a/src/index.css +++ b/src/index.css @@ -32,6 +32,12 @@ .referral{ margin-bottom: 20px } +.task_action_panel{ + font-family: sans; color: white; + font-weight: bolder; + font-size: 14px; + font-family: Circular, Helvetica Neue, Helvetica, Roboto, Arial, sans-serif; +} .heroSilderTitle{ text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; font-family: sans; color: white; @@ -42,7 +48,7 @@ min-width: 280px !important; } .job-action{ - background-color: aliceblue; + background-color: #4687ba; height: 100px; border-radius: 15px; padding: 5px; @@ -59,6 +65,7 @@ color: black; font-weight: bold; border-radius: 9px; + font-size: 14px; font-family: Circular, Helvetica Neue, Helvetica, Roboto, Arial, sans-serif; } .siderCardDescription{ From 8fc61a62893093beea505c683cc33bc073a024dd Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Sat, 15 Jul 2023 14:53:34 +0100 Subject: [PATCH 13/16] API for set account settings added --- .../Settings/Tabs/NotificationSettingTab.jsx | 31 +++++++++++++++++-- src/services/UsersService.js | 12 +++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/components/Settings/Tabs/NotificationSettingTab.jsx b/src/components/Settings/Tabs/NotificationSettingTab.jsx index a49c817..dfd98f1 100644 --- a/src/components/Settings/Tabs/NotificationSettingTab.jsx +++ b/src/components/Settings/Tabs/NotificationSettingTab.jsx @@ -4,6 +4,7 @@ import SwitchCom from "../../Helpers/SwitchCom"; import LoadingSpinner from "../../Spinners/LoadingSpinner"; import usersService from "../../../services/UsersService"; import localImgLoad from "../../../lib/localImgLoad"; +import { toast } from "react-toastify"; import defaultImage from '../../../assets/images/banner-job-due.jpg' @@ -13,13 +14,15 @@ export default function NotificationSettingTab() { const [accSettings, setAccSettings] = useState({loading: true, data: []}) // STATE TO HOLD ACCOUNT SETTINGS + let [notificationChange, setNotificationChange] = useState({loading: false, uid: ''}) + // const [updateNotification, setUpdateNotification] = useState(false); // const [uploadProduct, setUploadProduct] = useState(true); // const [saleProduct, setSaleProduct] = useState(true); // const [getProduct, setGetProduct] = useState(false); // const [authLevel, setAuthLevel] = useState(true); - const handleNotificationChange = (item) => { + const NotificationInterfaceChange = (item) => { setAccSettings(prev => { let newAccSettings = prev.data.map(data => { if(data.uid == item.uid){ @@ -33,6 +36,26 @@ export default function NotificationSettingTab() { }) } + let handleNotificationChange = (item) => { // FUNCTION TO SET ACCOUNT SETTING + setNotificationChange({loading: true, uid: item.uid}) + let reqData = { // API PAYLOADS + pref_id: item.pref_id, + status: '100' + } + api.setAccSettings(reqData).then(res => { + if(res.status != 200 || res.data.internal_return < 0){ + toast.error("unable to complete"); + } + toast.success("successful"); + NotificationInterfaceChange(item) // CHANGES NOTIFICATION UI INTERFACE + }).catch(errer => { + toast.error("unable to complete"); + }).finally(()=>{ + setNotificationChange({loading: false, uid: {}}) + // setTimeout(()=>{setNotificationChange({loading: false, uid: {}})},2000) + }) + } + useEffect(()=>{ api.getAccSettings().then(res => { setAccSettings({loading: false, data: res.data?.result_list || []}) @@ -67,12 +90,16 @@ export default function NotificationSettingTab() {
      + {notificationChange.loading && notificationChange.uid == item.uid ? + + : handleNotificationChange(item)} + handler={ notificationChange.loading ? ()=>{} : () => handleNotificationChange(item)} // value={updateNotification} // handler={() => setUpdateNotification(!updateNotification)} /> + }
      )} diff --git a/src/services/UsersService.js b/src/services/UsersService.js index a699a6d..f78ad17 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -944,6 +944,18 @@ class usersService { return this.postAuxEnd("/getaccsettings", postData); } + // FUNCTION TO SET ACCOUNT SETTINGS + setAccSettings(reqdata) { + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + action: 11058, + ...reqdata, + }; + return this.postAuxEnd("/setaccsettings", postData); + } + // FUNCTION TO DELETE PAY CARD payRemCard(reqData) { var postData = { From 3a479b357376ffebe0d0ae44bfd3d1683b70c4a7 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 11:06:04 -0400 Subject: [PATCH 14/16] action txt --- yarn.lock | 70 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index bfcbcff..4aa0c7f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2504,7 +2504,12 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -2516,7 +2521,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2526,27 +2531,37 @@ ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@^6.12.2: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.8.0: +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -7685,6 +7700,11 @@ q@^1.1.2: resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== +qr.js@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz" + integrity sha512-c4iYnWb+k2E+vYpRimHqSu575b1/wKl4XFeJGpFmrJQz5I88v9aY2czh7s0w36srfCM1sXgC/xpoJz5dJfq+OQ== + qs@6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" @@ -7748,6 +7768,11 @@ react-app-polyfill@^3.0.0: regenerator-runtime "^0.13.9" whatwg-fetch "^3.6.2" +react-apple-login@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/react-apple-login/-/react-apple-login-1.1.6.tgz" + integrity sha512-ySV6ax0aB+ksA7lKzhr4MvsgjwSH068VtdHJXS+7rL380IJnNQNl14SszR31k3UqB8q8C1H1oyjJFGq4MyO6tw== + react-chartjs-2@^4.1.0: version "4.3.1" resolved "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz" @@ -7824,6 +7849,14 @@ react-is@^18.0.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-qr-code@^2.0.11: + version "2.0.11" + resolved "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.11.tgz" + integrity sha512-P7mvVM5vk9NjGdHMt4Z0KWeeJYwRAtonHTghZT2r+AASinLUUKQ9wfsGH2lPKsT++gps7hXmaiMGRvwTDEL9OA== + dependencies: + prop-types "^15.8.1" + qr.js "0.0.0" + react-redux@^8.0.5: version "8.0.5" resolved "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz" @@ -7922,6 +7955,13 @@ react-slick@^0.29.0: lodash.debounce "^4.0.8" resize-observer-polyfill "^1.5.0" +react-to-print@^2.14.12: + version "2.14.12" + resolved "https://registry.npmjs.org/react-to-print/-/react-to-print-2.14.12.tgz" + integrity sha512-qFJAwvDFd95Z+FWNqitt+HaB1/z+Zdd0MMrNOPUSus3fG32vqv512yB+HXhQ94J3HKoyqaIg44v0Zfc6xUBqlg== + dependencies: + prop-types "^15.8.1" + react-toastify@^9.0.1: version "9.1.1" resolved "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz" From 5edecb646469060e20ef13bac89559d3017ea9bd Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 11:46:55 -0400 Subject: [PATCH 15/16] jib actions --- src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx | 5 ++--- src/index.css | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx index c6829d0..972c048 100644 --- a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx @@ -109,17 +109,16 @@ function PastDueJobAction({jobDetails}) {
      -
      -

      +
      +
      I completed this task and ready for review and acceptance. -

      +
      {/*
      */} {/*
      */} diff --git a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx index f943d7c..c6829d0 100644 --- a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx @@ -107,11 +107,11 @@ function PastDueJobAction({jobDetails}) {
      -
      +
      -

      +
      Time allocated has passed -

      +
      {/*
      */}
      -
      +
      -

      +
      You have missed the allocated time -

      +
      {/*
      */}
      -
      +
      -

      +
      This Job is Ready for your review -

      +
      {/*
      */}
      -
      +
      Time allocated has passed
      - {/*
      */}
      -
      diff --git a/src/index.css b/src/index.css index 273b8f0..67aab4d 100644 --- a/src/index.css +++ b/src/index.css @@ -37,6 +37,7 @@ font-weight: bolder; font-size: 14px; font-family: Circular, Helvetica Neue, Helvetica, Roboto, Arial, sans-serif; + padding: 0px 10px 5px 10px } .heroSilderTitle{ text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; From 80b2abf9e35122594b1342941e4b263d95f0d628 Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Sat, 15 Jul 2023 12:07:42 -0400 Subject: [PATCH 16/16] glog page --- src/components/Blogs/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Blogs/index.jsx b/src/components/Blogs/index.jsx index 7656650..7d10246 100644 --- a/src/components/Blogs/index.jsx +++ b/src/components/Blogs/index.jsx @@ -31,7 +31,7 @@ export default function BlogItem(props) {
      - Blog Items Details + Blog Items Details need implenet