added family wallet redeem options
This commit was merged in pull request #629.
This commit is contained in:
@@ -7,6 +7,7 @@ import { PriceFormatter } from "../Helpers/PriceFormatter";
|
|||||||
import SearchCom from "../Helpers/SearchCom";
|
import SearchCom from "../Helpers/SearchCom";
|
||||||
import { localImgLoad } from "../../lib";
|
import { localImgLoad } from "../../lib";
|
||||||
import background from "../../assets/images/bg-sky-blue.jpg";
|
import background from "../../assets/images/bg-sky-blue.jpg";
|
||||||
|
import FamilyWalletRedeemOptions from "./FamilyWalletRedeemOptions";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders a list of wallet items or a loading spinner depending on the state of the `wallet` object.
|
* Renders a list of wallet items or a loading spinner depending on the state of the `wallet` object.
|
||||||
@@ -23,21 +24,6 @@ export default function FamilyWalletBox({ wallet, payment, countries }) {
|
|||||||
const currentWalletSelected = data?.filter((item) => item.code === name);
|
const currentWalletSelected = data?.filter((item) => item.code === name);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [redeemData, setRedeemData] = useState({loading: true, data: []});
|
|
||||||
|
|
||||||
const [filteredRedeemData, setFilteredRedeemData] = useState({value: '', data:[]}) // State to hold filter blog
|
|
||||||
|
|
||||||
const handleFilterRedeemData = ({target}) => {
|
|
||||||
// let filterWord = target.value
|
|
||||||
// let filteredData = []
|
|
||||||
// if(!filterWord){
|
|
||||||
// filteredData = redeemData?.data?.redeemData
|
|
||||||
// }else{
|
|
||||||
// filteredData = redeemData?.data?.redeemData?.filter(item => item.post_title.toLowerCase().startsWith(filterWord.toLowerCase()))
|
|
||||||
// }
|
|
||||||
// setFilteredRedeemData({value:target.value, data: filteredData})
|
|
||||||
}
|
|
||||||
|
|
||||||
const image = selectedWallet.code
|
const image = selectedWallet.code
|
||||||
? `${selectedWallet.code.toLowerCase()}.svg`
|
? `${selectedWallet.code.toLowerCase()}.svg`
|
||||||
: "default.png";
|
: "default.png";
|
||||||
@@ -91,25 +77,7 @@ export default function FamilyWalletBox({ wallet, payment, countries }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<div className="w-full sm:flex items-center gap-4">
|
<FamilyWalletRedeemOptions />
|
||||||
<h1 className="text-2xl font-bold text-black dark:text-white">Redeem Options</h1>
|
|
||||||
<div className="sm:w-1/2 w-full sm:pr-20 pr-0 mb-5 sm:mb-0">
|
|
||||||
<SearchCom
|
|
||||||
placeholder='Search Blog Items...'
|
|
||||||
value={filteredRedeemData.value}
|
|
||||||
handleSearch={handleFilterRedeemData}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* redeem options */}
|
|
||||||
<div className="mt-5 grid sm:grid-cols-2 lg:grid-cols-3 xxl:grid-cols-4 gap-4">
|
|
||||||
{[1,2,3,4,5,6,7].map(item => (
|
|
||||||
<div key={item} className="p-5 h-60 bg-white dark:bg-dark-white text-black dark:text-white rounded-2xl shadow-md hover:shadow-none transition-all duration-300">
|
|
||||||
Dummy
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
import React, { useEffect, useState } from 'react'
|
||||||
|
import SearchCom from '../Helpers/SearchCom'
|
||||||
|
import LoadingSpinner from '../Spinners/LoadingSpinner';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
|
||||||
|
export default function FamilyWalletRedeemOptions() {
|
||||||
|
|
||||||
|
const { familyWalletRedeemOptList } = useSelector((state) => state.familyWalletRedeemOptList); // FAMILY WALLET REDDEM OPTIONS LIST
|
||||||
|
|
||||||
|
const [filteredRedeemData, setFilteredRedeemData] = useState({value: '', data:{}}) // State to hold filtered redeem banner option
|
||||||
|
|
||||||
|
const handleFilterRedeemData = ({target}) => {
|
||||||
|
// thiskey01
|
||||||
|
let filterWord = target.value
|
||||||
|
let filteredData = {}
|
||||||
|
if(!filterWord){
|
||||||
|
filteredData = {...familyWalletRedeemOptList?.data}
|
||||||
|
}else{
|
||||||
|
let matchedData = Object.keys(familyWalletRedeemOptList?.data)?.filter(item => (item.toLowerCase().startsWith(filterWord.toLowerCase())))
|
||||||
|
filteredData = matchedData.map(item => familyWalletRedeemOptList.data[item])
|
||||||
|
}
|
||||||
|
setFilteredRedeemData({value:target.value, data: {...filteredData}})
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
setFilteredRedeemData(prev => ({...prev, data:{...familyWalletRedeemOptList?.data}}))
|
||||||
|
}, [familyWalletRedeemOptList.image])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="w-full">
|
||||||
|
<div className="w-full sm:flex items-center gap-4">
|
||||||
|
<h1 className="text-2xl font-bold text-black dark:text-white">Redeem Options</h1>
|
||||||
|
<div className="sm:w-1/2 w-full sm:pr-20 pr-0 mb-5 sm:mb-0">
|
||||||
|
<SearchCom
|
||||||
|
placeholder='Search...'
|
||||||
|
value={filteredRedeemData.value}
|
||||||
|
handleSearch={handleFilterRedeemData}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* redeem options */}
|
||||||
|
{familyWalletRedeemOptList.loading ?
|
||||||
|
<div className='mt-5 w-full h-[20rem] rounded-2xl bg-white dark:bg-dark-white text-black dark:text-white flex justify-center items-center'>
|
||||||
|
<LoadingSpinner size='10' color='sky-blue' height='h-[30rem]' />
|
||||||
|
</div>
|
||||||
|
: Object.keys(familyWalletRedeemOptList?.data)?.length > 0 ?
|
||||||
|
Object.keys(filteredRedeemData?.data)?.length ?
|
||||||
|
<div className="mt-5 grid sm:grid-cols-2 lg:grid-cols-3 xxl:grid-cols-4 gap-4">
|
||||||
|
{ Object.keys(filteredRedeemData?.data)?.map((item)=>{
|
||||||
|
// text, image, description, action
|
||||||
|
let newData = filteredRedeemData?.data[item].banner
|
||||||
|
let bgImage = `url(${newData?.image})`
|
||||||
|
return (
|
||||||
|
<Link to={''} key={item}>
|
||||||
|
<div className={`group relative h-60 text-black dark:text-white rounded-2xl shadow-md hover:shadow-none transition-all duration-300 overflow-hidden`}
|
||||||
|
style={{
|
||||||
|
// background: `#ffffff ${bgImage} no-repeat center center / cover`
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<img src={newData?.image} alt='Redeem Image' className='w-full h-full bg-cover rounded-2xl group-hover:scale-110 transition-all duration-300' />
|
||||||
|
<div className='absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 p-2 bg-white/80 rounded-2xl w-[80%] flex flex-col justify-center items-center gap-2'>
|
||||||
|
<h1 className='text-lg font-bold text-[#083e21]'>{newData.text}</h1>
|
||||||
|
<p className='text-base text-black'>{newData.description}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<div className='mt-5 w-full h-[20rem] rounded-2xl bg-white dark:bg-dark-white text-black dark:text-white flex justify-center items-center'>
|
||||||
|
<p>Search Item not Found!</p>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<div className='mt-5 w-full h-[20rem] rounded-2xl bg-white dark:bg-dark-white text-black dark:text-white flex justify-center items-center'>
|
||||||
|
<p>No Redeem Options Found!</p>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ import { updateUserJobList } from "../store/userJobList";
|
|||||||
import { updateWalletDetails } from "../store/walletDetails";
|
import { updateWalletDetails } from "../store/walletDetails";
|
||||||
import { familyBannersList } from "../store/FamilyBannerList";
|
import { familyBannersList } from "../store/FamilyBannerList";
|
||||||
import { familyResources } from "../store/FamilyResources";
|
import { familyResources } from "../store/FamilyResources";
|
||||||
|
import {familyWalletRedeemOptList} from '../store/FamilyWalletRedeemOpt'
|
||||||
|
|
||||||
const AuthRoute = ({ redirectPath = "/login", children }) => {
|
const AuthRoute = ({ redirectPath = "/login", children }) => {
|
||||||
const apiCall = useMemo(() => new usersService(), []);
|
const apiCall = useMemo(() => new usersService(), []);
|
||||||
@@ -291,6 +292,24 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
|
|||||||
}, [isLogin.status]);
|
}, [isLogin.status]);
|
||||||
|
|
||||||
|
|
||||||
|
//FUNCTION TO GET FAMILY WALLET REDEEM OPTIONS
|
||||||
|
useEffect(() => {
|
||||||
|
if((!loggedIn && !isLogin.status) || account_type == 'FULL'){ // DO NOT CALL THIS, IF USER ACCOUNT TYPE IS FULL
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const familyWalletRedeemOptions = async () => { // FUNCTION TO GET FAMILY WALLET REDDEM OPTIONS
|
||||||
|
dispatch(familyWalletRedeemOptList({loading: true, image: '', data:{}}))
|
||||||
|
apiCall.getFamilyWalletRedeemOptions().then((res)=>{
|
||||||
|
dispatch(familyWalletRedeemOptList({loading: false, image: res?.data?.session_image_server, data:res?.data?.result_list}))
|
||||||
|
}).catch((err)=>{
|
||||||
|
console.log(err)
|
||||||
|
dispatch(familyWalletRedeemOptList({loading: false, image: '', data:{}}))
|
||||||
|
})
|
||||||
|
};
|
||||||
|
familyWalletRedeemOptions()
|
||||||
|
}, [isLogin.status]);
|
||||||
|
|
||||||
|
|
||||||
// RENDER PAGE
|
// RENDER PAGE
|
||||||
return isLogin.loading && !loggedIn ? (
|
return isLogin.loading && !loggedIn ? (
|
||||||
<LoadingSpinner size="32" color="sky-blue" height="h-screen" />
|
<LoadingSpinner size="32" color="sky-blue" height="h-screen" />
|
||||||
|
|||||||
@@ -1305,6 +1305,19 @@ class usersService {
|
|||||||
};
|
};
|
||||||
return this.postAuxEnd("/blogdata", postData);
|
return this.postAuxEnd("/blogdata", postData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// API FUNCTION FOR FAMILY WALLET REDEEM OPTIONS
|
||||||
|
getFamilyWalletRedeemOptions() {
|
||||||
|
var postData = {
|
||||||
|
uuid: localStorage.getItem("uid"),
|
||||||
|
member_id: localStorage.getItem("member_id"),
|
||||||
|
sessionid: localStorage.getItem("session_token"),
|
||||||
|
action: apiConst.WRENCHBOARD_JOB_ACTIVE,
|
||||||
|
offset: 0,
|
||||||
|
limit: 30,
|
||||||
|
};
|
||||||
|
return this.postAuxEnd("/familywallet/redeem/options", postData);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
|
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { createSlice } from "@reduxjs/toolkit";
|
||||||
|
|
||||||
|
const initialState = {
|
||||||
|
familyWalletRedeemOptList: {loading: true, image: '', data: {}}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const familyWalletRedeemOptListSlice = createSlice({
|
||||||
|
name: "familyWalletRedeemOptList",
|
||||||
|
initialState,
|
||||||
|
reducers: {
|
||||||
|
familyWalletRedeemOptList: (state,action) => {
|
||||||
|
state.familyWalletRedeemOptList = {...action.payload}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Action creators are generated for each case reducer function
|
||||||
|
export const { familyWalletRedeemOptList } = familyWalletRedeemOptListSlice.actions;
|
||||||
|
|
||||||
|
export default familyWalletRedeemOptListSlice.reducer;
|
||||||
+3
-1
@@ -10,6 +10,7 @@ import userJobListReducer from "./userJobList";
|
|||||||
import walletDetails from "./walletDetails";
|
import walletDetails from "./walletDetails";
|
||||||
import familyBannerListReducer from "./FamilyBannerList"
|
import familyBannerListReducer from "./FamilyBannerList"
|
||||||
import familyResourcesReducer from './FamilyResources'
|
import familyResourcesReducer from './FamilyResources'
|
||||||
|
import familyWalletRedeemOptListReducer from './FamilyWalletRedeemOpt'
|
||||||
|
|
||||||
export default configureStore({
|
export default configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
@@ -22,6 +23,7 @@ export default configureStore({
|
|||||||
notifications: notificationsReducer,
|
notifications: notificationsReducer,
|
||||||
walletDetails: walletDetails,
|
walletDetails: walletDetails,
|
||||||
familyBannersList: familyBannerListReducer,
|
familyBannersList: familyBannerListReducer,
|
||||||
familyResources: familyResourcesReducer
|
familyResources: familyResourcesReducer,
|
||||||
|
familyWalletRedeemOptList: familyWalletRedeemOptListReducer
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user