Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f1285c54d6 | |||
| 870709c947 | |||
| ca5a036e80 | |||
| fe1ab675a4 | |||
| 40614427f1 | |||
| 7eddfdf973 | |||
| feca311e7f | |||
| bd8f25b9e8 | |||
| b26c0a238e | |||
| 8841e36136 | |||
| 7f534556be | |||
| 2bf8b2fe06 | |||
| 4718b7962e | |||
| 9cbf797ab0 | |||
| 4b132b0499 | |||
| a3320724de | |||
| ab8320a846 | |||
| 4fc109926c | |||
| e3399d4b95 | |||
| 4a732ab1e3 | |||
| 0b598e88ba | |||
| 29ce4dd933 | |||
| 17c8573031 | |||
| 368148ef61 | |||
| 3cdea696e8 | |||
| 0c96441f84 | |||
| dff610b749 | |||
| d234bb6747 | |||
| d6b6e34132 | |||
| a0f0a6cf07 | |||
| b3ae0c42c3 |
@@ -18,7 +18,7 @@ REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api
|
||||
REACT_APP_ENDPOINT_KEY="WRENCH-BOARD-2024"
|
||||
|
||||
#SOCKETS ENDS
|
||||
REACT_APP_PRIMARY_SOCKET="https://socket-dev.wrenchboard.com"
|
||||
REACT_APP_PRIMARY_SOCKET="https://socket-qa.wrenchboard.com"
|
||||
|
||||
#"https://devapi.mermsemr.com/en/desktop/api/v2/myfituser"
|
||||
|
||||
@@ -129,4 +129,10 @@ REACT_APP_FAM_GAME_LINK='https://games.wrenchboard.com'
|
||||
REACT_APP_CUSTOMTIMER=90
|
||||
|
||||
#SHOW OR HIDE MY PAGE LINK ROUTE
|
||||
REACT_APP_SHOW_USER_PAGE=1
|
||||
REACT_APP_SHOW_USER_PAGE=1
|
||||
|
||||
# login footer links
|
||||
REACT_APP_HOME_LINK='https://dev-www.wrenchboard.com/'
|
||||
REACT_APP_ABOUT_LINK='https://dev-www.wrenchboard.com/about-us'
|
||||
REACT_APP_CONTACTS_LINK='https://dev-www.wrenchboard.com/contact'
|
||||
REACT_APP_TERMS_LINK='https://dev-www.wrenchboard.com/terms'
|
||||
+8
-2
@@ -18,7 +18,7 @@ REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api
|
||||
REACT_APP_ENDPOINT_KEY="WRENCH-BOARD-2024"
|
||||
|
||||
#SOCKETS ENDS
|
||||
REACT_APP_PRIMARY_SOCKET="https://socket-dev.wrenchboard.com"
|
||||
REACT_APP_PRIMARY_SOCKET="https://socket-qa.wrenchboard.com"
|
||||
|
||||
#"https://devapi.mermsemr.com/en/desktop/api/v2/myfituser"
|
||||
|
||||
@@ -98,4 +98,10 @@ REACT_APP_FAM_GAME_LINK='https://games.wrenchboard.com'
|
||||
REACT_APP_CUSTOMTIMER=90
|
||||
|
||||
#SHOW OR HIDE MY PAGE LINK ROUTE
|
||||
REACT_APP_SHOW_USER_PAGE=1
|
||||
REACT_APP_SHOW_USER_PAGE=1
|
||||
|
||||
# login footer links
|
||||
REACT_APP_HOME_LINK='https://dev-www.wrenchboard.com/'
|
||||
REACT_APP_ABOUT_LINK='https://dev-www.wrenchboard.com/about-us'
|
||||
REACT_APP_CONTACTS_LINK='https://dev-www.wrenchboard.com/contact'
|
||||
REACT_APP_TERMS_LINK='https://dev-www.wrenchboard.com/terms'
|
||||
+7
-1
@@ -104,4 +104,10 @@ REACT_APP_FAM_GAME_LINK='https://games.wrenchboard.com'
|
||||
REACT_APP_CUSTOMTIMER=90
|
||||
|
||||
#SHOW OR HIDE MY PAGE LINK ROUTE
|
||||
REACT_APP_SHOW_USER_PAGE=0
|
||||
REACT_APP_SHOW_USER_PAGE=0
|
||||
|
||||
# login footer links
|
||||
REACT_APP_HOME_LINK='https://www.wrenchboard.com/'
|
||||
REACT_APP_ABOUT_LINK='https://www.wrenchboard.com/about-us'
|
||||
REACT_APP_CONTACTS_LINK='https://www.wrenchboard.com/contact'
|
||||
REACT_APP_TERMS_LINK='https://www.wrenchboard.com/terms'
|
||||
+3
-2
@@ -25,8 +25,9 @@ services:
|
||||
- apigate.orion.g1.wrenchboard.com:10.10.33.15
|
||||
- socket-dev.wrenchboard.com:10.10.33.15
|
||||
- socket.wrenchboard.com:10.10.33.15
|
||||
- apigateway.wrenchboard.app.dev.fluxtra.net:10.20.30.19
|
||||
- apigateway.wrenchboard.app.lotus.fluxtra.net:172.31.4.19
|
||||
- media.wrenchboard.com:10.10.33.15
|
||||
- www.wrenchboard.com:10.10.33.15
|
||||
- blog.wrenchboard.com:10.10.33.15
|
||||
environment:
|
||||
- CHOKIDAR_USEPOLLING=true
|
||||
- NODE_ENV=${NODE_ENV:-production}
|
||||
|
||||
+1
-3
@@ -19,9 +19,7 @@
|
||||
content="Empower families to reward accomplishment, set goals, and encourage kids to understand goals, earning, and the benefit of savings – in one app experience."
|
||||
/>
|
||||
<link rel="manifest" href="/manifest.json"/>
|
||||
<script>
|
||||
!function(e,a,t,n,g,c,o){e.GoogleAnalyticsObject=g,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,c=a.createElement(t),o=a.getElementsByTagName(t)[0],c.async=1,c.src="https://www.google-analytics.com/analytics.js",o.parentNode.insertBefore(c,o)}(window,document,"script",0,"ga"),ga("create","UA-54829827-4","auto"),ga("send","pageview")</script><script defer="defer" src="/static/js/main.787e423f.js"></script><link href="/static/css/main.418eaf65.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body><script>var LHC_API=LHC_API||{};LHC_API.args={mode:"widget",lhc_base_url:"//chat.live.wrenchboard.com/",wheight:450,wwidth:350,pheight:520,pwidth:500,leaveamessage:!0,check_messages:!1},function(){var e=document.createElement("script");e.type="text/javascript",e.setAttribute("crossorigin","anonymous"),e.async=!0;var t=new Date;e.src="//chat.live.wrenchboard.com/design/defaulttheme/js/widgetv2/index.js?"+t.getFullYear()+t.getMonth()+t.getDate();var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(e,a)}()
|
||||
</script>
|
||||
|
||||
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
|
||||
+31
-23
@@ -1,31 +1,48 @@
|
||||
import { Route, Routes } from "react-router-dom";
|
||||
import { lazy } from "react";
|
||||
|
||||
import LoginLandingPage from './views/LoginLandingPage'
|
||||
import LoginPage from "./views/LoginPage";
|
||||
import SocketConnection from "./middleware/SocketConnection";
|
||||
|
||||
// AUTH PAGES
|
||||
import LoginLandingPage from './views/LoginLandingPage';
|
||||
import LoginPage from "./views/LoginPage";
|
||||
import LoginPageTwo from "./views/LoginPageTwo";
|
||||
import FourZeroFour from "./components/FourZeroFour";
|
||||
import AppDownloadPage from "./views/AppDownloadPage";
|
||||
import AppleRedirectPage from "./views/AppleRedirectPage";
|
||||
import AuthRedirect from "./views/AuthRedirect";
|
||||
import ForgotPasswordPages from "./views/ForgotPasswordPages";
|
||||
import ForgotPasswordPagesTwo from "./views/ForgotPasswordPagesTwo";
|
||||
import LndPage from "./views/LndPage";
|
||||
import SignupPage from "./views/SignupPage";
|
||||
import SignupPageTwo from "./views/SignupPageTwo";
|
||||
import UpdatePasswordPages from "./views/UpdatePasswordPages";
|
||||
import UpdatePasswordPagesTwo from "./views/UpdatePasswordPagesTwo";
|
||||
import VerifyLinkPages from "./views/VerifyLinkPages";
|
||||
import VerifyLinkPagesTwo from "./views/VerifyLinkPagesTwo";
|
||||
import VerifyPasswordPages from "./views/VerifyPasswordPages";
|
||||
import VerifyPasswordPagesTwo from "./views/VerifyPasswordPagesTwo";
|
||||
import VerifyYouPages from "./views/VerifyYouPages";
|
||||
import VerifyYouPagesTwo from "./views/VerifyYouPagesTwo";
|
||||
import FacebookRedirect from "./views/FacebookRedirect";
|
||||
import PromoPage from "./views/PromoPage";
|
||||
import PromoRefer from './views/PromoRefer';
|
||||
import InviteRefer from './views/InviteRefer';
|
||||
import MyRefer from './views/MyRefer';
|
||||
|
||||
|
||||
const HomePages = lazy(() => import("./views/HomePages"));
|
||||
const FourZeroFour = lazy(() => import("./components/FourZeroFour"));
|
||||
const ScrollToTop = lazy(() => import("./components/Helpers/ScrollToTop"));
|
||||
const StartJob = lazy(() => import("./components/MyJobs/StartJob"));
|
||||
const Notification = lazy(() => import("./components/Notification"));
|
||||
const AuthRoute = lazy(() => import("./middleware/AuthRoute"));
|
||||
const AppDownloadPage = lazy(() => import("./views/AppDownloadPage"));
|
||||
const AppleRedirectPage = lazy(() => import("./views/AppleRedirectPage"));
|
||||
const AuthProfilePage = lazy(() => import("./views/AuthProfilePage"));
|
||||
const AuthRedirect = lazy(() => import("./views/AuthRedirect"));
|
||||
const BlogPage = lazy(() => import("./views/BlogPage"));
|
||||
const FacebookRedirect = lazy(() => import("./views/FacebookRedirect"));
|
||||
const FamilyManagePage = lazy(() => import("./views/FamilyManagePage"));
|
||||
const FamilyMarketPage = lazy(() => import("./views/FamilyMarketPage"));
|
||||
|
||||
const ForgotPasswordPages = lazy(()=> import("./views/ForgotPasswordPages"));
|
||||
const ForgotPasswordPagesTwo = lazy(()=> import("./views/ForgotPasswordPagesTwo"));
|
||||
const HistoryPage = lazy(()=> import("./views/HistoryPage"));
|
||||
const JobGroupsPage = lazy(()=> import("./views/JobGroupsPage"));
|
||||
const LndPage = lazy(()=> import("./views/LndPage"));
|
||||
const LoginPageTwo = lazy(()=> import("./views/LoginPageTwo"));
|
||||
const ManageActiveJobs = lazy(()=> import("./views/ManageActiveJobs"));
|
||||
const ManageInterestOfferPage = lazy(()=> import("./views/ManageInterestOfferPage"));
|
||||
const MarketPlacePage = lazy(()=> import("./views/MarketPlacePage"));
|
||||
@@ -43,19 +60,9 @@ const ReferralPage = lazy(()=> import("./views/ReferralPage"));
|
||||
const RemindersPage = lazy(()=> import("./views/RemindersPage"));
|
||||
const ResourcePage = lazy(()=> import("./views/ResourcePage"));
|
||||
const SettingsPage = lazy(()=> import("./views/SettingsPage"));
|
||||
const SignupPage = lazy(()=> import("./views/SignupPage"));
|
||||
const SignupPageTwo = lazy(()=> import("./views/SignupPageTwo"));
|
||||
const TrackingPage = lazy(()=> import("./views/TrackingPage"));
|
||||
const UpdatePasswordPages = lazy(()=> import("./views/UpdatePasswordPages"));
|
||||
const UpdatePasswordPagesTwo = lazy(()=> import("./views/UpdatePasswordPagesTwo"));
|
||||
const UploadProductPage = lazy(()=> import("./views/UploadProductPage"));
|
||||
const UserProfilePage = lazy(()=> import("./views/UserProfilePage"));
|
||||
const VerifyLinkPages = lazy(()=> import("./views/VerifyLinkPages"));
|
||||
const VerifyLinkPagesTwo = lazy(()=> import("./views/VerifyLinkPagesTwo"));
|
||||
const VerifyPasswordPages = lazy(()=> import("./views/VerifyPasswordPages"));
|
||||
const VerifyPasswordPagesTwo = lazy(()=> import("./views/VerifyPasswordPagesTwo"));
|
||||
const VerifyYouPages = lazy(()=> import("./views/VerifyYouPages"));
|
||||
const VerifyYouPagesTwo = lazy(()=> import("./views/VerifyYouPagesTwo"));
|
||||
const YourPages = lazy(()=> import("./views/YourPage_"));
|
||||
const ParentWaitingPage = lazy(()=> import("./views/ParentWaitingPage"));
|
||||
const FamilyPendingOfferPage = lazy(()=> import("./views/FamilyPendingOfferPage"));
|
||||
@@ -68,7 +75,6 @@ const FamilyWalletPage = lazy(()=> import("./views/FamilyWalletPage"));
|
||||
const LearnMorePage = lazy(()=> import("./views/LearnMorePage"));
|
||||
const FamGamesPage = lazy(()=> import("./views/FamGamesPage"));
|
||||
const FamilyRoutesPage = lazy(()=> import("./views/FamilyRoutesPage"));
|
||||
const PromoPage = lazy(()=> import("./views/PromoPage"));
|
||||
|
||||
export default function Routers() {
|
||||
return (
|
||||
@@ -94,8 +100,10 @@ export default function Routers() {
|
||||
<Route path="/complereset" element={<VerifyPasswordPagesTwo />} />
|
||||
<Route exact path="/outmessage" element={<VerifyYouPagesTwo />} />
|
||||
<Route exact path="/eoffer" element={<LoginPageTwo />} />
|
||||
<Route exact path="/invite" element={<SignupPageTwo />} />
|
||||
<Route exact path="/promo/:name/:id" element={<PromoPage />} />
|
||||
<Route exact path="/promoref" element={<PromoRefer />} />
|
||||
<Route exact path="/invite" element={<InviteRefer />} />
|
||||
<Route exact path="/myrefer/:refer_link" element={<MyRefer />} />
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="add-friend" x="0" y="0" enable-background="new 0 0 56 56" version="1.1" viewBox="0 0 56 56">
|
||||
<g id="_x34_">
|
||||
<path fill="#ff614b" d="M20.1520596 48.5122223c-6.969367.6334381-16.1360435-2.538559-16.1360435-9.5089226 0-6.7552567 9.3379993-12.8340607 19.1365566-10.1025429C11.6365042 32.0076103 8.5797586 43.9628181 20.1520596 48.5122223zM23.2281342 21.9498482c-1.3167553 1.6189995-3.0113163 2.7414837-4.8678036 2.7414837-4.155407 0-7.544529-5.6017437-7.544529-9.7464113 0-6.0081682 6.6323166-9.4670734 11.4841213-6.4004383-1.3815784 1.4355316-2.223423 3.389122-2.223423 5.5477886C20.0764999 16.6826973 21.3177586 19.8127232 23.2281342 21.9498482z"></path>
|
||||
<path d="M36.0304298 47.965065c-4.6939316 1.9150925-10.9132786 1.956356-15.6842041.0958252-.0213013-.0090942-.0412598-.0187378-.0639648-.0250244-11.5273151-4.5492096-7.7401743-16.8518009 4.2484741-18.9360332.30867.8989487 1.012928 1.4676666 1.9118042 1.8097534l-2.2802734 9.73419c-.1025391.4355469.03125.9023438.3491211 1.2177734l3.8803711 3.8544922c.2107143.2096252.5543423.188858.7397461-.0380859l3.3261719-4.0585938c.2789803-.3397827.3200912-.5983696.1914063-1.0166016-1.1257496-3.7452698.1548195.6061249-2.7582397-9.5864239.9509258-.3161449 1.663147-.9907551 2.2283325-1.8195801 3.4285889.5916748 6.3656006 2.1239014 8.2872314 4.3503399.1802521.2088089.496357.2312813.7050781.0517578.2089844-.1806641.2324219-.4970703.0517578-.7060547-2.1342773-2.4716778-5.3999023-4.1562481-9.1958008-4.7431622-.0008545-.0001221-.0016479.0002441-.0025024.0001221-.2167149-.0316906-.4131889.0921535-.4998169.2335205-.0004272.0006714-.0011597.0010376-.0015869.001709-.4018555.6640625-.8833008 1.1640625-1.4296875 1.4873047-1.3619595.8058376-4.409462.3548889-4.6435547-1.3857422-.0373135-.2786045-.2598305-.4986324-.766119-.4238281-.5176334.0825806-1.0214176.1906738-1.5172062.3118896C13.0129108 25.6687794 3.5157814 31.9572849 3.5157814 39.0031509c0 7.2062569 9.1560717 10.6395416 16.5500488 10.015564 4.9281864 1.9016037 11.3733406 1.899971 16.3425293-.1278687.2553711-.1044922.378418-.3964844.2739258-.6513672C36.5777931 47.9826431 36.2858009 47.8605728 36.0304298 47.965065zM28.9718361 31.4416294l.4660034 1.6382427c-.1742687.0852623.0627537-.0866661-3.2201538 3.1741943l1.1130371-4.7518902C27.8272762 31.4898281 28.4199524 31.4561787 28.9718361 31.4416294zM25.1358986 40.8722916l.649231-2.7717896 3.9557495-3.9552612.9927979 3.4902954-4.7506104 4.2474976c-.0058594.005249-.0079346.0126343-.0134888.0180664l-.7536011-.7485352C25.1432228 41.0793228 25.1124611 40.9728775 25.1358986 40.8722916zM31.6827736 40.9875259l-2.9765625 3.6318359-2.0285645-2.0148926 4.3604736-3.8986816c.7511387 2.5571251.4453716 1.4923744.6549072 2.1899414C31.7027931 40.9279556 31.7159767 40.9601822 31.6827736 40.9875259zM4.5157814 39.0031509c0-5.8982773 7.6678896-11.4824982 16.6328735-10.0299053-9.6517429 3.5520725-12.3788052 14.0203838-3.1348267 19.1047955C10.2978249 47.9708633 4.5157814 44.1104507 4.5157814 39.0031509zM23.2516823 22.6767979c1.3936768 1.3889771 3.0743408 2.2960815 4.8578491 2.2960815 3.8608398 0 6.9887695-4.0351563 8.0830078-8.0214844.0732422-.2666016-.0834961-.5419922-.3496094-.6152344-.2675781-.0703125-.5419922.0839844-.6142578.3496094-.9697266 3.5332031-3.7944336 7.2871094-7.1191406 7.2871094-4.1438522 0-7.5332031-5.7720966-7.5332031-9.8808603 0-4.1711521 3.4018421-7.5205073 7.5214844-7.5205073 3.9272461 0 7.2163086 3.0712886 7.487793 6.9912105.0195313.2753906.2602539.4755859.5336914.4648438.2753906-.0195313.4833984-.2578125.4643555-.5332031-.4944992-7.1314373-9.1289673-10.5536861-14.3618164-5.558105-5.3048058-2.9869342-11.90625.8975091-11.90625 7.0083003C10.3155861 21.4710331 17.3002548 29.2743626 23.2516823 22.6767979zM21.5162697 8.6711206c-3.2331066 3.9059381-2.063303 9.517417 1.0541992 13.2802744-5.3480682 6.0405064-11.2548828-1.5758038-11.2548828-7.0068369C11.3155861 9.6542807 16.9414864 6.3203502 21.5162697 8.6711206zM49.5030861 33.2590103l-1.8736572-.184082c.0150757-.0079346.0324707-.0045166.0469971-.0141602 6.2281075-4.1175671 6.166069-13.8392754 1.1938477-16.9414043-.0844727-2.0888681-.8623047-3.9804697-2.1958008-5.243165-1.9521484-1.8457031-5.0620117-2.0644531-6.934082-.4853516-.2114258.1777344-.237793.4931641-.0600586.7041016.1782227.2109375.4931641.2373047.7045898.0595703 1.4697266-1.2392578 4.034668-1.0351563 5.6020508.4482422 1.0302734.9746094 1.6738281 2.4042969 1.8452148 4.0136719-3.2912941-1.1423397-6.6737289 1.6315832-5.0351563 4.7509775 1.415638 2.6920357 5.6048317 2.0048065 6.0458984-3.0429688 3.8890877 3.1670475 3.621582 11.1923389-1.5643311 14.7892437l.4412842-.9708843c.2745361-.6030388-.6399498-1.0150375-.9101563-.4140625l-.824707 1.8144512c-.3768578.8212128.0631943 1.3852425.9770508 1.4716797l2.4433594.2402344C50.0908356 34.2954216 50.1399155 33.3223534 49.5030861 33.2590103zM43.6822853 19.9015903c-1.2788124-2.4307442 1.6810646-4.3558064 4.1933594-3.1884766C47.761219 21.1266956 44.6973381 21.8336697 43.6822853 19.9015903z"></path>
|
||||
<g>
|
||||
<circle cx="41.237" cy="41.649" r="8.435" fill="#f7d01c" transform="rotate(-76.717 41.237 41.649)"></circle>
|
||||
</g>
|
||||
<path d="M44.2379494,41.1486588H42.244297v-1.9941406c0-0.2763672-0.2236328-0.5-0.5-0.5s-0.5,0.2236328-0.5,0.5v1.9941406
|
||||
h-1.9936523c-0.2763672,0-0.5,0.2236328-0.5,0.5s0.2236328,0.5,0.5,0.5h1.9936523v1.9941406c0,0.2763672,0.2236328,0.5,0.5,0.5
|
||||
s0.5-0.2236328,0.5-0.5v-1.9941406h1.9936523c0.2763672,0,0.5-0.2236328,0.5-0.5S44.5143166,41.1486588,44.2379494,41.1486588z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="resources" enable-background="new 0 0 48 48" viewBox="0 0 48 48">
|
||||
<ellipse cx="9.1" cy="5.4" fill="#ffd499" rx="4.4" ry="4.9"></ellipse>
|
||||
<path fill="#b0f0a8" d="M20.2,22.2c0.5,0,1-0.2,1.4-0.6l5-5c0.8-0.8,0.8-2,0-2.8c-0.8-0.8-2-0.8-2.8,0l-3.7,3.7L15.1,13c-0.1-0.1-0.2-0.2-0.4-0.3c-1.2-1-2.8-1.5-4.4-1.5H7.9c-4.1,0-7.4,3.4-7.4,7.5v11.3h3.1v14.6c0,1.6,1.2,2.8,2.8,2.8c1.3,0,2.4-0.9,2.7-2.2c0.3,1.3,1.4,2.2,2.7,2.2c1.5,0,2.8-1.3,2.8-2.8V17.9l4.4,3.9C19.3,22.1,19.8,22.2,20.2,22.2z"></path>
|
||||
<path fill="#c1e5ff" d="M39.8 45.1c1.8-.9 3.4-2.2 4.7-3.8h-2.8C41.2 42.8 40.6 44.1 39.8 45.1zM34.8 46.4c1.7-.6 3.2-2.5 4.3-5h-4.3V46.4zM42.4 38.9h3.6c.8-1.5 1.3-3.2 1.4-5h-4.4C43 35.7 42.8 37.4 42.4 38.9zM44.5 24c-1.3-1.6-2.8-2.9-4.7-3.8.7 1.1 1.4 2.4 1.9 3.8H44.5zM39.9 26.4h-5.1v5h5.8C40.6 29.7 40.3 28 39.9 26.4zM43.1 31.5h4.4c-.2-1.8-.7-3.5-1.4-5h-3.6C42.8 28 43 29.7 43.1 31.5zM34.8 19v5h4.3C38 21.4 36.5 19.6 34.8 19zM40.7 33.9h-5.8v5h5.1C40.3 37.4 40.6 35.7 40.7 33.9zM28.1 24h4.3v-5C30.7 19.6 29.2 21.4 28.1 24zM22.7 41.4c1.3 1.6 2.8 2.9 4.7 3.8-.7-1.1-1.4-2.4-1.9-3.8H22.7zM24.1 33.9h-4.4c.2 1.8.7 3.5 1.4 5h3.6C24.4 37.4 24.2 35.7 24.1 33.9zM26.6 31.5h5.8v-5h-5.1C26.9 28 26.7 29.7 26.6 31.5zM32.4 46.4v-5h-4.3C29.2 43.9 30.7 45.8 32.4 46.4zM27.4 20.2c-1.8.9-3.4 2.2-4.7 3.8h2.8C26 22.6 26.7 21.3 27.4 20.2zM27.3 38.9h5.1v-5h-5.8C26.7 35.7 26.9 37.4 27.3 38.9zM19.7 31.5h4.4c.1-1.8.3-3.5.7-5h-3.6C20.4 28 19.9 29.7 19.7 31.5z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 672 672" id="waiting">
|
||||
<path fill="#4d4d4d" d="M497 595H175a7 7 0 0 1-7-7v-79.237a112.163 112.163 0 0 1 37.076-83.249L304.536 336l-99.46-89.515A112.163 112.163 0 0 1 168 163.236V119a7 7 0 0 1 14 0v44.236a98.142 98.142 0 0 0 32.441 72.843L319.683 330.8a7 7 0 0 1 0 10.406L214.441 435.92A98.142 98.142 0 0 0 182 508.763V581h308v-72.237a98.142 98.142 0 0 0-32.441-72.843L352.317 341.2a7 7 0 0 1 0-10.406l105.242-94.718A98.142 98.142 0 0 0 490 163.236V119a7 7 0 0 1 14 0v44.236a112.163 112.163 0 0 1-37.076 83.249L367.464 336l99.46 89.514A112.163 112.163 0 0 1 504 508.763V588a7 7 0 0 1-7 7Z"></path>
|
||||
<path fill="#5b96ff" d="M440.679 207.553a7 7 0 0 0-6.535-4.492H237.856a7 7 0 0 0-4.682 12.2l98.143 88.339a7 7 0 0 0 9.366 0l98.143-88.334a7 7 0 0 0 1.853-7.713Z"></path>
|
||||
<path fill="#5b95ff" d="M330.475 469.1 238 588h196l-92.475-118.9a7 7 0 0 0-11.05 0Z"></path>
|
||||
<rect width="420" height="35" x="126" y="49" fill="#ebeff2" rx="17.5"></rect>
|
||||
<rect width="420" height="35" x="126" y="588" fill="#ebeff2" rx="17.5"></rect>
|
||||
<path fill="#4d4d4d" d="M528.5 91h-385a24.5 24.5 0 0 1 0-49h385a24.5 24.5 0 0 1 0 49zm-385-35a10.5 10.5 0 0 0 0 21h385a10.5 10.5 0 0 0 0-21zm385 574h-385a24.5 24.5 0 0 1 0-49h385a24.5 24.5 0 0 1 0 49zm-385-35a10.5 10.5 0 0 0 0 21h385a10.5 10.5 0 0 0 0-21z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -39,7 +39,7 @@ function AddJob({ popUpHandler, categories }) {
|
||||
|
||||
try {
|
||||
const res = await ApiCall.jobManagerCreateJob(reqData);
|
||||
if (res.data.internal_return < 1) {
|
||||
if (res?.data?.internal_return < 1) {
|
||||
setRequestStatus({
|
||||
loading: false,
|
||||
status: false,
|
||||
@@ -75,7 +75,7 @@ function AddJob({ popUpHandler, categories }) {
|
||||
// For form initial values
|
||||
const initialValues = {
|
||||
// initial values for formik
|
||||
country: walletDetails.data.length === 1 ? walletDetails.data[0].country : '',
|
||||
country: walletDetails?.data?.length === 1 ? walletDetails.data[0].country : '',
|
||||
price: "",
|
||||
title: "",
|
||||
description: "",
|
||||
@@ -117,18 +117,18 @@ function AddJob({ popUpHandler, categories }) {
|
||||
className={`input-field p-2 mt-3 rounded-full placeholder:text-base text-dark-gray w-full h-[42px] bg-slate-100 focus:ring-0 focus:outline-none border`}
|
||||
onChange={props.handleChange}
|
||||
onBlur={props.handleBlur}
|
||||
disabled={walletDetails.data.length === 1}
|
||||
disabled={walletDetails?.data?.length === 1}
|
||||
>
|
||||
{walletDetails?.loading ? (
|
||||
<option className="text-slate-500 text-lg" value="">
|
||||
Loading...
|
||||
</option>
|
||||
) : walletDetails.data.length > 1 ? (
|
||||
) : walletDetails?.data?.length > 1 ? (
|
||||
<>
|
||||
<option className="text-slate-500 text-lg" value="">
|
||||
Select a currency
|
||||
</option>
|
||||
{walletDetails.data?.map((item, index) => (
|
||||
{walletDetails?.data?.map((item, index) => (
|
||||
<option
|
||||
key={index}
|
||||
className="text-slate-500 text-lg"
|
||||
@@ -138,9 +138,9 @@ function AddJob({ popUpHandler, categories }) {
|
||||
</option>
|
||||
))}
|
||||
</>
|
||||
) : walletDetails.data.length === 1 ?
|
||||
) : walletDetails?.data?.length === 1 ?
|
||||
<>
|
||||
{walletDetails.data?.map((item, index) => (
|
||||
{walletDetails?.data?.map((item, index) => (
|
||||
<option
|
||||
key={index}
|
||||
className="text-slate-500 text-lg"
|
||||
@@ -184,10 +184,10 @@ function AddJob({ popUpHandler, categories }) {
|
||||
className="job-label job-label-flex"
|
||||
htmlFor="timeline_days"
|
||||
>
|
||||
Timeline
|
||||
<span className="text-green-700 text-[12px] tracking-wide">
|
||||
Delivery Timeline
|
||||
{/* <span className="text-green-700 text-[12px] tracking-wide">
|
||||
- Duration
|
||||
</span>
|
||||
</span> */}
|
||||
</label>
|
||||
|
||||
<Field
|
||||
|
||||
@@ -47,8 +47,16 @@ export default function AuthLayout2({ slogan, children }) {
|
||||
<div className="w-full flex flex-col md:flex-row justify-center items-center px-10 py-2">
|
||||
<div className="flex justify-center items-center">
|
||||
<div className="flex items-center">
|
||||
<a
|
||||
href={process.env.REACT_APP_HOME_LINK}
|
||||
className='text-[#a1a5b7] text-[15px] px-2 font-medium hover:text-[#009ef7]'
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Home
|
||||
</a>
|
||||
<a
|
||||
href="https://www.wrenchboard.com/about-us"
|
||||
href={process.env.REACT_APP_ABOUT_LINK}
|
||||
className="text-[#a1a5b7] text-[15px] px-2 font-medium hover:text-[#009ef7]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
@@ -56,15 +64,16 @@ export default function AuthLayout2({ slogan, children }) {
|
||||
About
|
||||
</a>
|
||||
<a
|
||||
href="https://www.wrenchboard.com/service"
|
||||
// href="https://www.wrenchboard.com/service"
|
||||
href={process.env.REACT_APP_TERMS_LINK}
|
||||
className="text-[#a1a5b7] text-[15px] px-2 font-medium hover:text-[#009ef7]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Services
|
||||
Terms
|
||||
</a>
|
||||
<a
|
||||
href="https://www.wrenchboard.com/contact"
|
||||
href={process.env.REACT_APP_CONTACTS_LINK}
|
||||
className="text-[#a1a5b7] text-[15px] px-2 font-medium hover:text-[#009ef7]"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
|
||||
@@ -95,15 +95,26 @@ export default function LoginLanding() {
|
||||
|
||||
<div className="text-gray-400 font-medium text-[16.25px] leading-[24.375px]">
|
||||
Don't have an account?{" "}
|
||||
<Link
|
||||
{/* <Link
|
||||
to="/signup"
|
||||
className="font-semibold text-[#4687ba] hover:text-[#009ef7] transition"
|
||||
>
|
||||
Sign Up
|
||||
</Link>
|
||||
</Link> */}
|
||||
<div
|
||||
className="font-semibold text-[#4687ba] hover:text-[#009ef7] transition"
|
||||
>
|
||||
Sign Up in App Store
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/* <div className="login-links mt-10 flex justify-center text-gray-400 divide-x-4">
|
||||
<a className='text-sm font-bold px-5' href={process.env.REACT_APP_HOME_LINK}>Home</a>
|
||||
<a className='text-sm font-bold px-5' href={process.env.REACT_APP_ABOUT_LINK}>About</a>
|
||||
<a className='text-sm font-bold px-5' href={process.env.REACT_APP_CONTACTS_LINK}>Contact</a>
|
||||
<a className='text-sm font-bold px-5' href={process.env.REACT_APP_TERMS_LINK}>Terms</a>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -526,8 +526,8 @@ export default function Login() {
|
||||
)
|
||||
// END of family login compoenent
|
||||
}
|
||||
<div className='w-full text-center'>
|
||||
<Link className='text-center block font-semibold text-lg pt-3 tracking-wide' to='/login'>Return</Link>
|
||||
<div className='mt-4 w-full flex justify-center items-center text-center'>
|
||||
<Link className='px-4 py-2 rounded-full text-xl text-white bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center text-[15px]' to='/login'>Return</Link>
|
||||
</div>
|
||||
{/* END of login component */}
|
||||
|
||||
@@ -621,7 +621,7 @@ const BrandBtn = ({
|
||||
className="w-full border border-light-purple rounded-[0.475rem] h-[48px] flex justify-center bg-[#FAFAFA] hover:bg-[#eff2f5] hover:text-[#7e8299] transition duration-300 items-center font-medium cursor-pointer"
|
||||
>
|
||||
<img className="mr-3 h-6" src={imgSrc} alt="logo-icon(s)" />
|
||||
<span className="text-lg text-thin-light-gray font-normal text-[15px]">
|
||||
<span className="text-thin-light-gray font-normal text-sm">
|
||||
Continue with {brand}
|
||||
</span>
|
||||
</a>
|
||||
@@ -632,7 +632,7 @@ const BrandBtn = ({
|
||||
className="w-full border border-light-purple rounded-[0.475rem] h-[48px] flex justify-center bg-[#FAFAFA] hover:bg-[#eff2f5] hover:text-[#7e8299] transition duration-300 items-center font-medium cursor-pointer"
|
||||
>
|
||||
<img className="mr-3 h-6" src={imgSrc} alt="logo-icon(s)" />
|
||||
<span className="text-lg text-thin-light-gray font-normal text-[15px]">
|
||||
<span className="text-thin-light-gray font-normal text-sm">
|
||||
Continue with {brand}
|
||||
</span>
|
||||
</button>
|
||||
|
||||
@@ -8,7 +8,13 @@ import AuthLayout from "../AuthLayout2";
|
||||
import GoogleDownload from '../../../assets/images/download/andriod.jpg'
|
||||
import IOSDownload from '../../../assets/images/download/apple.jpg'
|
||||
|
||||
export default function SignUp({details}) {
|
||||
/* Note
|
||||
The Props in this component
|
||||
1. refer_link holds the value to be sent as the referral code
|
||||
2. details holds the value of the person either referred via invite or promo
|
||||
*/
|
||||
|
||||
export default function SignUp({refer_link, details}) {
|
||||
const location = useLocation();
|
||||
|
||||
// eslint-disable-next-line no-restricted-globals
|
||||
@@ -28,8 +34,8 @@ export default function SignUp({details}) {
|
||||
|
||||
const [formData, setFormData] = useState({
|
||||
country: country ? country : "",
|
||||
first_name: details ? details.first_name : "",
|
||||
last_name: details ? details.last_name : "",
|
||||
first_name: details ? details.firstname : "",
|
||||
last_name: details ? details.lastname : "",
|
||||
email: details ? details.email : "",
|
||||
password: "",
|
||||
});
|
||||
@@ -104,6 +110,7 @@ export default function SignUp({details}) {
|
||||
}
|
||||
|
||||
setSignUpLoading(true);
|
||||
let referral_link = refer_link ? {refer_link} : {} // FOR USER COMING FROM REFERRAL PROCESS
|
||||
const reqData = {
|
||||
country: country,
|
||||
firstname: first_name,
|
||||
@@ -113,6 +120,7 @@ export default function SignUp({details}) {
|
||||
password: password,
|
||||
terms: 1,
|
||||
news: 1,
|
||||
...referral_link
|
||||
};
|
||||
|
||||
const res = await userApi.CreateUser(reqData);
|
||||
@@ -202,7 +210,7 @@ export default function SignUp({details}) {
|
||||
type="text"
|
||||
value={formData.first_name}
|
||||
inputHandler={handleInputChange}
|
||||
disable={details.first_name}
|
||||
disable={details ? true : false}
|
||||
/>
|
||||
</div>
|
||||
<div className="input-item flex-1">
|
||||
@@ -214,7 +222,7 @@ export default function SignUp({details}) {
|
||||
type="text"
|
||||
value={formData.last_name}
|
||||
inputHandler={handleInputChange}
|
||||
disable={details.last_name}
|
||||
disable={details ? true : false}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -227,7 +235,7 @@ export default function SignUp({details}) {
|
||||
type="email"
|
||||
value={formData.email}
|
||||
inputHandler={handleInputChange}
|
||||
disable={details.email}
|
||||
disable={details ? true : false}
|
||||
/>
|
||||
</div>
|
||||
<div className="input-item mb-4">
|
||||
@@ -274,16 +282,17 @@ export default function SignUp({details}) {
|
||||
)}
|
||||
</button>
|
||||
<span
|
||||
onClick={rememberMe}
|
||||
// onClick={rememberMe}
|
||||
className="cursor-default text-gray-400 font-medium text-[16.25px] leading-[24.375px] group-checked:text-white transition-all duration-200 group-checked:cursor-default"
|
||||
>
|
||||
I agree with all
|
||||
<Link
|
||||
href="#"
|
||||
<a
|
||||
target='_blank'
|
||||
href={process.env.REACT_APP_TERMS_LINK}
|
||||
className="font-semibold text-[#4687ba] hover:text-[#009ef7] transition mx-1 inline-block"
|
||||
>
|
||||
terms and condition
|
||||
</Link>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -78,25 +78,7 @@ const AccountDashboard = ({ className, bannerList, offersList, imageServer }) =>
|
||||
{/* for flat banner section */}
|
||||
<div className="w-full grid-cols-1 md:grid-cols-2 2xl:grid-cols-3 grid items-center justify-center gap-2 md:gap-4">
|
||||
{/* OFFER LIST DISPLAY */}
|
||||
{/* <>
|
||||
{(offersList && offersList?.length > 0) &&
|
||||
offersList.map((item, index) => {
|
||||
let thePrice = PriceFormatter(
|
||||
item?.price * 0.01,
|
||||
item?.currency_code,
|
||||
item?.currency
|
||||
);
|
||||
|
||||
let image = `${imageServer}${localStorage.getItem("session_token")}/job/${item.job_uid}`
|
||||
if(index >= 3) {
|
||||
return(
|
||||
<div key={item.offer_uid}>
|
||||
<NewOfferCardFlat datas={item} image={image} price={thePrice} setOfferPopout={setOfferPopout} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})}
|
||||
</> */}
|
||||
|
||||
{getLowerBanner?.map((props, idx) => {
|
||||
let image = getImage(props);
|
||||
|
||||
@@ -150,15 +132,15 @@ const TopBanner = ({ image, title = "", desc = "", btn, link_path, key }) => {
|
||||
</Link>
|
||||
<div className="rounded-b-xl bg-white dark:bg-dark-white">
|
||||
<div className="border-b border-slate-300 px-2 py-1 h-[5.4rem] flex flex-col gap-2 dark:text-white">
|
||||
<Link to={link_path} className="font-bold text-lg line-clamp-1">
|
||||
<Link to={link_path} className="font-bold text-xl line-clamp-1">
|
||||
{title}
|
||||
</Link>
|
||||
<Link to={link_path} className="text-sm">
|
||||
<Link to={link_path} className="text-base line-clamp-1">
|
||||
{desc}
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex justify-between w-full p-1 items-center">
|
||||
<Link to={link_path} className="text-slate-300 font-semibold text-sm">
|
||||
<Link to={link_path} className="text-slate-300 font-semibold text-base">
|
||||
{btn}
|
||||
</Link>
|
||||
<button className="flex items-center justify-center gap-2">
|
||||
@@ -201,7 +183,7 @@ const NewOfferCard = ({ datas, hidden = false, price, setOfferPopout, image }) =
|
||||
</div>
|
||||
<div className="rounded-b-xl bg-transparent dark:bg-dark-transparent">
|
||||
<div className="border-b border-slate-300 px-2 py-1 h-[5.4rem] flex flex-col gap-2 dark:text-white">
|
||||
<h1 className="font-bold text-lg line-clamp-1 text-center">
|
||||
<h1 className="font-bold text-xl line-clamp-1 text-center">
|
||||
{datas?.title}
|
||||
</h1>
|
||||
<div className="card-buttons flex justify-center items-center space-x-2">
|
||||
@@ -210,7 +192,7 @@ const NewOfferCard = ({ datas, hidden = false, price, setOfferPopout, image }) =
|
||||
onClick={() =>
|
||||
setOfferPopout({ show: true, data: { ...datas, image } })
|
||||
}
|
||||
className="btn-shine w-2/3 h-[40px] text-white rounded-full text-sm bg-pink flex justify-center items-center"
|
||||
className="btn-shine w-2/3 h-[40px] text-white rounded-full text-base bg-pink flex justify-center items-center"
|
||||
>
|
||||
Start Now
|
||||
</button>
|
||||
@@ -240,7 +222,7 @@ const NewOfferCardFlat = ({ datas, hidden = false, price, setOfferPopout, image
|
||||
<div className="w-full xxs:flex justify-between items-center border-b border-slate-300 p-2">
|
||||
<div className="min-h-[130px] sm:min-h-[100px] flex justify-between items-center">
|
||||
<div className="px-2 flex flex-col gap-2 dark:text-white">
|
||||
<h1 className="font-bold text-lg line-clamp-1 text-center">
|
||||
<h1 className="font-bold text-xl line-clamp-1 text-center">
|
||||
{datas?.title}
|
||||
</h1>
|
||||
<div className="card-buttons flex items-center space-x-2">
|
||||
@@ -249,7 +231,7 @@ const NewOfferCardFlat = ({ datas, hidden = false, price, setOfferPopout, image
|
||||
onClick={() =>
|
||||
setOfferPopout({ show: true, data: { ...datas, image } })
|
||||
}
|
||||
className="btn-shine w-28 h-[40px] text-white rounded-full text-sm bg-pink flex justify-center items-center"
|
||||
className="btn-shine w-28 h-[40px] text-white rounded-full text-base bg-pink flex justify-center items-center"
|
||||
>
|
||||
Start Now
|
||||
</button>
|
||||
@@ -301,10 +283,10 @@ const LowerBanner = ({ image, title = "", desc = "", btn, link_path, card_type,
|
||||
<div className="w-full xxs:flex justify-between items-center border-b border-slate-300 p-2">
|
||||
<div className="min-h-[130px] sm:min-h-[100px] flex justify-between items-center">
|
||||
<div className="px-2 flex flex-col gap-2 dark:text-white">
|
||||
<Link to={newLinkPath} className="text-lg font-bold">
|
||||
<Link to={newLinkPath} className="text-xl font-bold line-clamp-1">
|
||||
{title}
|
||||
</Link>
|
||||
<p to={newLinkPath} className="text-sm">
|
||||
<p to={newLinkPath} className="text-base line-clamp-1">
|
||||
{desc}
|
||||
</p>
|
||||
</div>
|
||||
@@ -319,7 +301,7 @@ const LowerBanner = ({ image, title = "", desc = "", btn, link_path, card_type,
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex justify-between w-full p-1 items-center">
|
||||
<Link to={newLinkPath} className="text-slate-300 font-semibold text-sm">
|
||||
<Link to={newLinkPath} className="text-slate-300 font-semibold text-base">
|
||||
{btn}
|
||||
</Link>
|
||||
<button className="flex items-center justify-center gap-2">
|
||||
@@ -370,10 +352,10 @@ const BannerSection = ({ banners, variant }) => {
|
||||
}`}
|
||||
>
|
||||
<div className="border-b border-slate-300 px-2 py-1 h-[5.4rem] flex flex-col gap-2">
|
||||
<Link to={link_path} className="font-bold text-lg">
|
||||
<Link to={link_path} className="font-bold text-xl">
|
||||
{short_title}
|
||||
</Link>
|
||||
<Link to={link_path} className="text-sm">
|
||||
<Link to={link_path} className="text-base">
|
||||
{short_description}
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@@ -22,22 +22,6 @@ export default function FamilyDash() {
|
||||
|
||||
const { userDetails } = useSelector((state) => state?.userDetails);
|
||||
|
||||
// let [reloadBanner, setReloadBanner] = useState(0)
|
||||
|
||||
// useEffect(()=>{
|
||||
// if(reloadBanner >= 2){
|
||||
// dispatch(tableReload({ type: "FAMILYBANNERSLIST" })); // RELOAD FAMILY BANNERS LIST EVERY 10 MINS
|
||||
// setReloadBanner(0)
|
||||
// }
|
||||
// const timer = setInterval(()=>{
|
||||
// setReloadBanner(prev => prev+1)
|
||||
// },300000)
|
||||
|
||||
// return ()=>{
|
||||
// clearInterval(timer)
|
||||
// }
|
||||
// },[reloadBanner])
|
||||
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
@@ -46,13 +30,13 @@ export default function FamilyDash() {
|
||||
<div className="text-white mb-4 min-h-[3rem] px-2 w-full flex justify-between items-center rounded-xl bg-family-header-bg">
|
||||
<div className="w-full">
|
||||
<div className="w-full flex flex-wrap gap-x-4 ">
|
||||
<p className="text-lg font-normal leading-5">Welcome</p>
|
||||
<p className="text-xl font-normal leading-5">Welcome</p>
|
||||
<div className="">
|
||||
<h1 className="text-lg font-normal leading-5">{`${userDetails?.firstname} ${userDetails?.lastname}`}</h1>
|
||||
<h1 className="text-xl font-normal leading-5">{`${userDetails?.firstname} ${userDetails?.lastname}`}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="py-1 w-full text-sm text-right self-end">
|
||||
<div className="py-1 w-full text-base text-right self-end">
|
||||
<p className="leading-4">Last Login: {`${userDetails?.last_login.split(' ')[0]}`}</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -76,8 +60,8 @@ export default function FamilyDash() {
|
||||
<img className="w-full h-[10rem] object-cover rounded-t-xl" src={content.banner.image} alt='banner image' />
|
||||
<div className="flex flex-col justify-between">
|
||||
<div className="px-2 py-2 border-b border-transparent min-h-[4rem] flex flex-col gap-1">
|
||||
<h1 className="text-lg text-[#083e21] dark:text-white font-bold tracking-wide">{content.banner.text}</h1>
|
||||
<p className="text-sm text-black dark:text-white">{content.banner.description}</p>
|
||||
<h1 className="text-xl text-[#083e21] dark:text-white font-bold tracking-wide">{content.banner.text}</h1>
|
||||
<p className="text-base text-black dark:text-white">{content.banner.description}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -104,7 +88,7 @@ export default function FamilyDash() {
|
||||
</div>
|
||||
<div className="flex flex-col justify-between">
|
||||
<div className="px-2 py-1 border-b border-transparent min-h-[2rem] flex justify-between items-center gap-1">
|
||||
<h1 className="text-lg text-[#083e21] dark:text-white font-bold tracking-wide">{item?.content}</h1>
|
||||
<h1 className="text-xl text-[#083e21] dark:text-white font-bold tracking-wide">{item?.content}</h1>
|
||||
<div className="flex justify-center gap-1">
|
||||
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
|
||||
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
|
||||
@@ -121,22 +105,6 @@ export default function FamilyDash() {
|
||||
}
|
||||
</>
|
||||
}
|
||||
|
||||
{/* {familyOffers?.result_list && familyOffers?.result_list.length > 0 && (
|
||||
<MyOffersFamilyTable
|
||||
familyOffers={familyOffers?.result_list}
|
||||
image_server={familyOffers?.session_image_server}
|
||||
className="mb-10"
|
||||
/>
|
||||
)} */}
|
||||
|
||||
{/* {trending && trending.length > 0 && (
|
||||
<FamilyActiveLSlde
|
||||
trending={trending}
|
||||
className="mb-10"
|
||||
image_server={serverImg}
|
||||
/>
|
||||
)} */}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import {Navigate} from 'react-router-dom'
|
||||
import datas from "../../data/product_data.json";
|
||||
import Layout from "../Partials/Layout";
|
||||
import usersService from "../../services/UsersService";
|
||||
@@ -43,9 +44,10 @@ export default function Home(props) {
|
||||
}
|
||||
</>
|
||||
) : (
|
||||
<div>
|
||||
You are not logged in or your account type is not supported.
|
||||
</div>
|
||||
// <div>
|
||||
// You are not logged in or your account type is not supported.
|
||||
// </div>
|
||||
<Navigate to='/login' />
|
||||
)}
|
||||
</>
|
||||
</div>
|
||||
|
||||
@@ -66,17 +66,17 @@ export default function LearnMore() {
|
||||
})
|
||||
|
||||
//FUNCTION TO GET LEARN MORE TOPIC
|
||||
|
||||
useEffect(()=>{
|
||||
apiCall.getLearnmoreTopics().then((res)=>{
|
||||
if(res.data.internal_return < 0){ // success but no data
|
||||
setTopics(prev => ({...prev, loading: false}))
|
||||
return
|
||||
}
|
||||
const resData = res?.data?.result_list
|
||||
const resData = res?.data?.result_list || []
|
||||
console.log('resData', resData)
|
||||
setTopics(prev => ({...prev, loading: false, data: resData}))
|
||||
setTabs(prev => {
|
||||
return prev.map((item, index) => ({...item, title:resData[index].topic}))
|
||||
return prev?.map((item, index) => ({...item, title:resData[index]?.topic}))
|
||||
})
|
||||
setSelectedTab(resData[0].topic)
|
||||
// console.log('RES', resData)
|
||||
@@ -130,7 +130,7 @@ export default function LearnMore() {
|
||||
<>
|
||||
{(topics?.data && topics?.data?.length > 0) ?
|
||||
<div dangerouslySetInnerHTML={{
|
||||
__html: topics?.data?.filter(item => item.topic == selectedTab)[0]?.contents,
|
||||
__html: topics?.data?.filter(item => item?.topic == selectedTab)[0]?.contents,
|
||||
}} className='prose dark:text-white dark:bg-dark-white'
|
||||
>
|
||||
{/* {topics?.data?.filter(item => item.topic == selectedTab)[0]?.contents} */}
|
||||
|
||||
@@ -57,6 +57,7 @@ export default function LockJob({
|
||||
</div>
|
||||
) : (
|
||||
<>
|
||||
<div className='md:grid md:grid-cols-4'>
|
||||
<div className="px-4 py-2 w-full md:col-span-3 md:border-r-1">
|
||||
<div className="min-h-[200px]">
|
||||
<h2 className="w-full flex gap-1 items-center font-semibold text-slate-900 dark:text-white tracking-wide">
|
||||
@@ -277,6 +278,7 @@ export default function LockJob({
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
|
||||
@@ -133,11 +133,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt, marketPlaceProduc
|
||||
// let addedIntDate = marketInt?.added?.split(" ")[0];
|
||||
// let expireIntDate = marketInt?.expire?.split(" ")[0];
|
||||
|
||||
let cleanedText = details?.job_description
|
||||
?.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/&/g, "&");
|
||||
let cleanedText = details?.job_description?.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/&/g, "&");
|
||||
|
||||
return (
|
||||
<ModalCom action={onClose} situation={situation}>
|
||||
@@ -149,7 +145,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt, marketPlaceProduc
|
||||
<CloseIcon onClose={onClose} />
|
||||
</div>
|
||||
|
||||
<div className="md:grid md:grid-cols-4 bg-white dark:bg-dark-white text-slate-900 dark:text-white rounded-lg">
|
||||
<div className="bg-white dark:bg-dark-white text-slate-900 dark:text-white rounded-lg">
|
||||
{details?.offer_depend_uid ?
|
||||
<LockJob
|
||||
marketPlaceProduct={marketPlaceProduct}
|
||||
@@ -164,7 +160,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt, marketPlaceProduc
|
||||
/>
|
||||
:
|
||||
<>
|
||||
<div className="px-4 py-2 w-full md:col-span-3 md:border-r-1">
|
||||
<div className="px-4 py-2 w-full">
|
||||
<div className="min-h-[300px]">
|
||||
<h2 className="w-full flex gap-1 items-center font-semibold text-slate-900 dark:text-white tracking-wide">
|
||||
{details?.offer_depend_uid && <i className="fa-solid fa-lock p-1 text-red-500 text-[12px]"></i>}
|
||||
@@ -190,15 +186,15 @@ const MarketPopUp = ({ details, onClose, situation, marketInt, marketPlaceProduc
|
||||
danger: true,
|
||||
},
|
||||
].map(({ name, content, danger }, idx) => (
|
||||
<div className={`my-3 md:flex items-start`} key={idx}>
|
||||
<div className={`my-3 flex-col gap-1`} key={idx}>
|
||||
<label className="py-2 job-label w-full md:w-[19%]">
|
||||
{name}
|
||||
</label>
|
||||
<div
|
||||
className={`w-full p-2 md:w-3/4 text-slate-900 dark:text-white market-pop rounded-2xl ${
|
||||
className={`w-full p-2 text-slate-900 dark:text-white market-pop rounded-2xl ${
|
||||
name == "Description"
|
||||
? "min-h-[150px] max-h-[150px] h-full overflow-y-auto break-words bg-slate-50"
|
||||
: name == "Delivery Detail" ? " overflow-y-auto h-full min-h-[150px] max-h-[150px] bg-slate-50"
|
||||
? "min-h-[60px] max-h-[75px] h-full overflow-y-auto break-words bg-slate-50"
|
||||
: name == "Delivery Detail" ? " overflow-y-auto h-full min-h-[200px] max-h-[200px] bg-slate-50"
|
||||
: "h-full flex items-center"
|
||||
}`}
|
||||
>
|
||||
@@ -237,122 +233,111 @@ const MarketPopUp = ({ details, onClose, situation, marketInt, marketPlaceProduc
|
||||
))}
|
||||
</div>
|
||||
<hr className='my-1' />
|
||||
<div className='w-full'>
|
||||
<label className="job-label w-full flex gap-2 items-center">
|
||||
If you have any questions about this task:
|
||||
<span className={`text-sm ${marketMsg.state ? 'text-[#57cd89]' : 'text-red-500'}`}>
|
||||
{marketMsg.state && "Message Sent!"}
|
||||
{errMsg.market && "Failed to send"}
|
||||
</span>
|
||||
</label>
|
||||
<div className="w-full flex items-center gap-3">
|
||||
<div className="w-full">
|
||||
<textarea
|
||||
className={`p-1 w-full text-sm text-slate-900 dark:text-white ${
|
||||
marketMsg.loading && "italic text-[#9CA3AF]"
|
||||
} bg-transparent outline-none border-2 border-slate-300 rounded-md`}
|
||||
rows="3"
|
||||
style={{ resize: "none" }}
|
||||
placeholder="Enter message here ..."
|
||||
value={marketMsg.loading ? "Sending..." : textValue}
|
||||
onChange={handleInputChange}
|
||||
/>
|
||||
</div>
|
||||
<div className="relative flex flex-col">
|
||||
<button
|
||||
className="rounded-full flex justify-center items-center w-12 h-11 bg-yellow-500 text-white"
|
||||
name="market-message"
|
||||
onClick={MarketDetail}
|
||||
disabled={marketMsg.loading}
|
||||
>
|
||||
{marketMsg.loading ? (
|
||||
<LoadingSpinner size={5} color="white" />
|
||||
) : (
|
||||
// "Send Message"
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 11 20"
|
||||
id="Arrow"
|
||||
className="w-[0.7rem]"
|
||||
<div className='w-full grid grid-cols-1 md:grid-cols-3 gap-4 md:gap-8 items-center'>
|
||||
<div className='col-span-1 md:col-span-2 flex flex-col justify-center gap-2'>
|
||||
<label className="job-label w-full flex gap-2 items-center">
|
||||
If you have any questions about this task:
|
||||
<span className={`text-sm ${marketMsg.state ? 'text-[#57cd89]' : 'text-red-500'}`}>
|
||||
{marketMsg.state && "Message Sent!"}
|
||||
{errMsg.market && "Failed to send"}
|
||||
</span>
|
||||
</label>
|
||||
<div className="w-full flex items-center gap-3">
|
||||
<div className="w-full">
|
||||
<textarea
|
||||
className={`p-1 w-full text-sm text-slate-900 dark:text-white ${
|
||||
marketMsg.loading && "italic text-[#9CA3AF]"
|
||||
} bg-transparent outline-none border-2 border-slate-300 rounded-md`}
|
||||
rows="3"
|
||||
style={{ resize: "none" }}
|
||||
placeholder="Enter message here ..."
|
||||
value={marketMsg.loading ? "Sending..." : textValue}
|
||||
onChange={handleInputChange}
|
||||
/>
|
||||
</div>
|
||||
<div className="relative flex flex-col">
|
||||
<button
|
||||
className="rounded-full flex justify-center items-center w-12 h-11 bg-yellow-500 text-white"
|
||||
name="market-message"
|
||||
onClick={MarketDetail}
|
||||
disabled={marketMsg.loading}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M.366 19.708c.405.39 1.06.39 1.464 0l8.563-8.264a1.95 1.95 0 0 0 0-2.827L1.768.292A1.063 1.063 0 0 0 .314.282a.976.976 0 0 0-.011 1.425l7.894 7.617a.975.975 0 0 1 0 1.414L.366 18.295a.974.974 0 0 0 0 1.413"
|
||||
// fill=""
|
||||
className="color000000 svgShape fill-[#fff]"
|
||||
></path>
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
{/* <span className="text-sm text-[#57cd89]">
|
||||
{marketMsg.state && "Sent!"}
|
||||
{errMsg.market && "Failed"}
|
||||
</span> */}
|
||||
{marketMsg.loading ? (
|
||||
<LoadingSpinner size={5} color="white" />
|
||||
) : (
|
||||
// "Send Message"
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 11 20"
|
||||
id="Arrow"
|
||||
className="w-[0.7rem]"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M.366 19.708c.405.39 1.06.39 1.464 0l8.563-8.264a1.95 1.95 0 0 0 0-2.827L1.768.292A1.063 1.063 0 0 0 .314.282a.976.976 0 0 0-.011 1.425l7.894 7.617a.975.975 0 0 1 0 1.414L.366 18.295a.974.974 0 0 0 0 1.413"
|
||||
// fill=""
|
||||
className="color000000 svgShape fill-[#fff]"
|
||||
></path>
|
||||
</svg>
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="py-2 w-full md:col-span-1 h-full flex flex-col rounded-2xl">
|
||||
<div className="mx-auto bg-[#f1f8ff] dark:bg-[#C2C8D3] px-4 rounded-md w-full h-full md:min-h-[420px] flex flex-col justify-between">
|
||||
<div className="w-full flex flex-col justify-center pb-4 gap-2">
|
||||
<p className="job-label w-full">
|
||||
Interested?
|
||||
|
||||
<div className="span-1 flex flex-col justify-center mb-4 gap-2">
|
||||
<p className="flex items-center tracking-wide">
|
||||
<span className="job-label">Interest Count: </span> <b className="ml-1">{interestCount.length > 0 ? interestCount[0].interest_count : '0'}</b>
|
||||
</p>
|
||||
<hr />
|
||||
{/* <hr /> */}
|
||||
<button
|
||||
className="btn-gradient text-white px-2 py-2 border-4 border-slate-300 text-lg lg:text-xl font-medium rounded-2xl"
|
||||
className="btn-gradient text-white p-1 border-4 border-slate-300 text-lg lg:text-xl font-medium rounded-2xl"
|
||||
name="market-interest"
|
||||
onClick={ManageInterest}
|
||||
>
|
||||
{" "}
|
||||
<div className="flex md:flex-col justify-center gap-2">
|
||||
<span>Notify</span>
|
||||
<span>Owner</span>
|
||||
<span>I am Interested</span>
|
||||
{/* <span>Owner</span> */}
|
||||
</div>
|
||||
</button>
|
||||
<>
|
||||
{manageInt.loading ? (
|
||||
<p className="text-sm italic">please wait...</p>
|
||||
) : (
|
||||
<>
|
||||
{manageInt?.msg !== "" && (
|
||||
<p
|
||||
className={`text-sm italic ${
|
||||
manageInt?.state ? "text-green-500" : "text-red-500"
|
||||
}`}
|
||||
>
|
||||
{manageInt?.msg}
|
||||
</p>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
</div>
|
||||
|
||||
<div className="text-slate-900">
|
||||
<p className="flex items-center tracking-wide">
|
||||
<span className="job-label">Interest: </span> <b className="ml-1">{interestCount.length > 0 ? interestCount[0].interest_count : '0'}</b>
|
||||
</p>
|
||||
<hr />
|
||||
<p className="my-1 flex flex-col">
|
||||
<span className="job-label">Expire: </span>
|
||||
<span> {new Date(details.expire).toLocaleString()} </span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
{manageInt.loading ? (
|
||||
<p className="text-sm italic">please wait...</p>
|
||||
) : (
|
||||
<>
|
||||
{manageInt?.msg !== "" && (
|
||||
<p
|
||||
className={`text-sm italic ${
|
||||
manageInt?.state ? "text-green-500" : "text-red-500"
|
||||
}`}
|
||||
>
|
||||
{manageInt?.msg}
|
||||
</p>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div className="modal-footer-wrapper">
|
||||
<div className="modal-footer-wrapper flex justify-between gap-2 items-center">
|
||||
<div className="text-slate-900">
|
||||
<p className="my-1 flex flex-col">
|
||||
<span className="job-label">Expire: </span>
|
||||
<span> {new Date(details.expire).toLocaleString()} </span>
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
className="custom-btn bg-transparent border border-red-500 text-red-500 ml-auto"
|
||||
name="cancel"
|
||||
onClick={onClose}
|
||||
>
|
||||
Cancel
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -480,7 +480,7 @@ export default function Header({ logoutModalHandler, sidebarHandler }) {
|
||||
{/* end Language list items*/}
|
||||
</li>
|
||||
<li className="content-item my-2 hover:bg-slate-100 transition duration-500 rounded-lg">
|
||||
<Link to="#" className="notifications">
|
||||
<Link to="/settings" className="notifications">
|
||||
<div className="name">
|
||||
<p className="text-sm py-2 px-4 text-dark-gray dark:text-white hover:text-sky-blue transition font-medium">
|
||||
Account Settings
|
||||
|
||||
@@ -86,7 +86,7 @@ export default function RightSideBar({ myJobList }) {
|
||||
<div className="item flex space-x-3 items-center">
|
||||
{/* image */}
|
||||
<div className="w-8 h-8 rounded-full flex items-center justify-center">
|
||||
<Icons name="pending-job" />
|
||||
<img src={localImgLoad('images/icons/waiting.svg')} alt='refer a friend' />
|
||||
</div>
|
||||
{/* name */}
|
||||
<div>
|
||||
@@ -99,29 +99,7 @@ export default function RightSideBar({ myJobList }) {
|
||||
<div className="item flex space-x-3 items-center">
|
||||
{/* image */}
|
||||
<div className="w-8 h-8 rounded-full">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
id="add-user"
|
||||
>
|
||||
<path
|
||||
fill="#9bcb5b"
|
||||
d="M12 13.4c-2 0-3.7-1.6-3.7-3.6s1.6-3.7 3.6-3.7 3.7 1.6 3.7 3.6-1.6 3.6-3.6 3.7zm0-6.2c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6s2.6-1.1 2.6-2.6c-.1-1.5-1.2-2.6-2.6-2.6z"
|
||||
></path>
|
||||
<path
|
||||
fill="#9bcb5b"
|
||||
d="M16.6 17.9c-.3 0-.5-.2-.6-.5 0-2.2-1.8-4-4-4s-4 1.8-4 4c0 .3-.3.5-.6.5-.2 0-.4-.2-.5-.5 0-2.8 2.3-5.1 5.1-5.1s5.1 2.3 5.1 5.1c0 .3-.2.5-.5.5z"
|
||||
></path>
|
||||
<path
|
||||
fill="#0376bc"
|
||||
d="M12 23.7C5.5 23.7.3 18.4.3 12 .3 5.5 5.6.3 12 .3c2.6 0 5.1.9 7.2 2.5.2.2.2.6 0 .8-.2.2-.4.2-.7.1-1.9-1.4-4.1-2.2-6.5-2.2C6.2 1.4 1.4 6.2 1.4 12S6.2 22.6 12 22.6 22.6 17.8 22.6 12c0-2.4-.8-4.6-2.2-6.5-.2-.3-.1-.6.2-.8.2-.1.5-.1.7.1 1.6 2 2.5 4.6 2.4 7.2 0 6.4-5.3 11.7-11.7 11.7z"
|
||||
></path>
|
||||
<circle cx="20.2" cy="20.3" r="2.4" fill="#fff"></circle>
|
||||
<path
|
||||
fill="#9bcb5b"
|
||||
d="M18 18.1c.6-.6 1.4-.9 2.2-.9.8 0 1.6.3 2.2.9s1 1.4.9 2.2c0 .8-.3 1.6-.9 2.2s-1.4 1-2.2.9c-.8 0-1.6-.3-2.2-.9s-1-1.4-.9-2.2c-.1-.8.3-1.7.9-2.2zm3.8 2.5V20h-1.3v-1.3h-.6V20h-1.3v.6h1.3v1.3h.6v-1.3h1.3z"
|
||||
></path>
|
||||
</svg>
|
||||
<img src={localImgLoad('images/icons/refer-a-friend.svg')} alt='refer a friend' />
|
||||
</div>
|
||||
{/* name */}
|
||||
<div>
|
||||
@@ -157,32 +135,7 @@ export default function RightSideBar({ myJobList }) {
|
||||
<div className="item flex space-x-3 items-center">
|
||||
{/* image */}
|
||||
<div className="w-8 h-8 rounded-full">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 48 48"
|
||||
id="InternationalUser"
|
||||
>
|
||||
<path
|
||||
fill="#e6e7f9"
|
||||
d="M38.5 31.1c2.1-1.1 3.9-2.5 5.4-4.4h-3.2c-.6 1.6-1.3 3.1-2.2 4.4zm-5.8 1.4c2-.7 3.7-2.8 4.9-5.8h-4.9v5.8zm8.8-8.6h4.2c.9-1.8 1.5-3.7 1.7-5.8h-5.1c-.1 2-.4 4-.8 5.8zm2.4-17.3c-1.5-1.8-3.3-3.3-5.4-4.4.8 1.2 1.6 2.7 2.2 4.4h3.2zm-5.3 2.9h-5.9v5.8h6.7c-.1-2.1-.4-4.1-.8-5.8zm3.7 5.8h5.1c-.2-2.1-.8-4-1.7-5.8h-4.2c.4 1.8.7 3.7.8 5.8zM32.7.8v5.8h4.9c-1.2-2.9-2.9-5.1-4.9-5.8zm6.7 17.3h-6.7v5.8h5.9c.4-1.8.7-3.8.8-5.8zM25 6.6h4.9V.8c-2 .7-3.7 2.9-4.9 5.8zm-1.8 8.7h6.7V9.5H24c-.4 1.7-.7 3.7-.8 5.8zm6.7 17.2v-5.8H25c1.2 3 2.9 5.1 4.9 5.8zM24.1 2.3c-2.1 1.1-3.9 2.5-5.4 4.4H22c.5-1.7 1.3-3.2 2.1-4.4zM24 23.9h5.9v-5.8h-6.7c.1 2 .4 4 .8 5.8z"
|
||||
className="colorc1e5ff svgShape"
|
||||
></path>
|
||||
<path
|
||||
fill="#ff6699"
|
||||
d="M3.7 44.7c0 1.6 1.2 2.8 2.8 2.8 1.3 0 2.4-.9 2.7-2.2.3 1.3 1.4 2.2 2.7 2.2 1.5 0 2.8-1.3 2.8-2.8V30.1h3.1V18.8c0-4.2-3.3-7.5-7.4-7.5H8c-4.1 0-7.4 3.4-7.4 7.5v11.3h3.1v14.6z"
|
||||
className="colorff99b0 svgShape"
|
||||
></path>
|
||||
<path
|
||||
fill="#998da0"
|
||||
d="M9.2 10.3c2.4 0 4.4-2.2 4.4-4.9S11.6.5 9.2.5C6.8.5 4.8 2.7 4.8 5.4s2 4.9 4.4 4.9z"
|
||||
className="colorffd499 svgShape"
|
||||
></path>
|
||||
<path
|
||||
fill="#e6e7f9"
|
||||
d="M16.9 9.5c-.3.6-.5 1.2-.8 1.8 1.3 1 2.3 2.4 2.9 4h1.3c.1-2 .3-4 .8-5.8h-4.2zm2.9 9.3v5.1h1.4c-.4-1.8-.7-3.8-.8-5.8h-.6c-.1.2 0 .4 0 .7zm2.2 7.9h-2.2v1.2c1.3 1.3 2.7 2.4 4.4 3.2-.9-1.3-1.7-2.8-2.2-4.4z"
|
||||
className="colorc1e5ff svgShape"
|
||||
></path>
|
||||
</svg>
|
||||
<img src={localImgLoad('images/icons/resources.svg')} alt='refer a friend' />
|
||||
</div>
|
||||
{/* name */}
|
||||
<div>
|
||||
|
||||
@@ -294,7 +294,7 @@ const EditJobPopoutNew = ({
|
||||
className="job-label"
|
||||
htmlFor="timeline_days"
|
||||
>
|
||||
Timeline -
|
||||
Delivery Timeline -
|
||||
{/* <span className="w-full text-center text-green-700 text-sm tracking-wide">
|
||||
Expected duration of this task
|
||||
</span> */}
|
||||
|
||||
@@ -225,11 +225,17 @@ function PendingJobsPopout({ details, onClose, situation }) {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="my-2 md:flex">
|
||||
<Detail
|
||||
<div className="my-2">
|
||||
{/* <Detail
|
||||
label="Detail"
|
||||
value={details.job_description || details.description}
|
||||
/>
|
||||
/> */}
|
||||
<>
|
||||
<label className='job-label w-full'>Detail</label>
|
||||
<p className={`p-1 w-full text-sm text-slate-900 dark:text-white overflow-y-auto min-h-[100px]`}>
|
||||
{details.job_description || details.description}
|
||||
</p>
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -70,14 +70,14 @@ export default function AssignToPublic({
|
||||
</div>
|
||||
|
||||
<div className='mb-3 w-full flex flex-col xxs:flex-row items-center gap-1'>
|
||||
<label className='w-full xxs:max-w-[120px] xxs:text-right'>Duration:</label>
|
||||
<label className='w-full xxs:max-w-[120px] xxs:text-right'>Available for:</label>
|
||||
<div className='w-full'>
|
||||
<JobFieldInput
|
||||
select={true}
|
||||
inputName="public"
|
||||
value={props?.values.public}
|
||||
data={publicArray}
|
||||
optionText="Select Duration"
|
||||
optionText="Select Availability"
|
||||
parentClass="w-full flex flex-col gap-4"
|
||||
inputClass={(props.errors.public && props.touched.public) && 'border-red-500 dark:border-red-500'}
|
||||
/>
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
/* Regular Weight */
|
||||
@font-face {
|
||||
font-family: "Product Sans";
|
||||
font-family: Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif,"Product Sans";
|
||||
src: url("./assets/fonts/Product Sans Regular.ttf");
|
||||
}
|
||||
.nft-main-container {
|
||||
@@ -8,7 +8,7 @@
|
||||
}
|
||||
/* Bold Weight */
|
||||
@font-face {
|
||||
font-family: "Product Sans";
|
||||
font-family: Roboto,"Product Sans";
|
||||
src: url("./assets/fonts/Product Sans Bold.ttf");
|
||||
}
|
||||
.SENDER {
|
||||
|
||||
@@ -59,6 +59,7 @@ export const apiConst = {
|
||||
WRENCHBOARD_RESET_PASSWORD: 11013 ,
|
||||
WRENCHBOARD_ACCOUNT_JOBLIST:11014 ,
|
||||
WRENCHBOARD_VERIFY_PENDING_LINK: 11015,
|
||||
WRENCHBOARD_LOAD_REFERLINK: 11072,
|
||||
WRENCHBOARD_ACCOUNT_RESETPASS: 11016,
|
||||
WRENCHBOARD_ACCOUNT_SETPASSWD: 11017,
|
||||
WRENCHBOARD_DELETE_PENDING_LINK: 11018,
|
||||
|
||||
@@ -90,7 +90,7 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
|
||||
apiCall
|
||||
.loadProfile()
|
||||
.then((res) => {
|
||||
if (res?.data?.internal_return < 0) {
|
||||
if (!res?.data) {
|
||||
setIsLogin({ loading: false, status: false });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1032,6 +1032,14 @@ class usersService {
|
||||
return this.postAuxEnd("/verifysignuplink", reqData);
|
||||
}
|
||||
|
||||
loadRefer(reqData) { // GETS THE INFORMATION OF A USER REFERRED VIA PROMO
|
||||
const postData = {
|
||||
action: apiConst.WRENCHBOARD_LOAD_REFERLINK,
|
||||
...reqData
|
||||
};
|
||||
return this.postAuxEnd("/loadrefer", postData);
|
||||
}
|
||||
|
||||
// END POINT FOR OFFER RESPONSE (i.e TO ACCEPT, REJECT, CANCEL, ETC OFFER)
|
||||
offersResponse(reqData) {
|
||||
var postData = {
|
||||
@@ -1687,7 +1695,7 @@ class usersService {
|
||||
if(localStorage && localStorage.getItem('myloc')){
|
||||
reqData.loc = localStorage.getItem('myloc')
|
||||
}
|
||||
return Axios.post(endPoint, reqData)
|
||||
return Axios.post(endPoint, reqData,{timeout: 7000 })
|
||||
.then((response) => {
|
||||
// console.log(response);
|
||||
// console.log("~~~~~~~ WrenchBoard::POST ~~~~~~~~");
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import React, {useState, useEffect} from "react";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import usersService from '../services/UsersService'
|
||||
|
||||
import SignUp from "../components/AuthPages/SignUp/index2";
|
||||
import LoadingSpinner from '../components/Spinners/LoadingSpinner'
|
||||
import AuthLayout from '../components/AuthPages/AuthLayout2'
|
||||
|
||||
function InviteRefer() {
|
||||
const api = new usersService()
|
||||
|
||||
const location = useLocation();
|
||||
|
||||
const queryParams = new URLSearchParams(location?.search);
|
||||
const refer_link = queryParams.get("refer_link")?.toUpperCase();
|
||||
|
||||
const [reload, setReload] = useState(false)
|
||||
|
||||
let [details, setDetails] = useState({loading:true, error:false, data:{}})
|
||||
|
||||
useEffect(()=>{
|
||||
setDetails({loading:true, error:false, data:{}})
|
||||
if(refer_link){
|
||||
const reqData = {
|
||||
refer_link: refer_link,
|
||||
path: ''
|
||||
}
|
||||
api.loadRefer(reqData).then(res => {
|
||||
if(res?.data?.internal_return < 0){
|
||||
return setDetails({loading:false, error:true, data:{}})
|
||||
}
|
||||
setDetails({loading:false, error:false, data:res.data})
|
||||
}).catch(err => {
|
||||
setDetails({loading:false, error:true, data:{}})
|
||||
})
|
||||
}else{
|
||||
setDetails({loading:false, error:false, data:{}})
|
||||
}
|
||||
},[reload])
|
||||
return (
|
||||
<>
|
||||
{details.loading ?
|
||||
<LoadingSpinner size="32" color="sky-blue" height="h-screen" />
|
||||
: details.error ?
|
||||
<AuthLayout>
|
||||
<ErrorComponent onClick={()=>setReload(prev => !prev)} />
|
||||
</AuthLayout>
|
||||
:
|
||||
<SignUp details={details.data} />
|
||||
}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default InviteRefer;
|
||||
|
||||
|
||||
const ErrorComponent = ({ onClick }) => (
|
||||
<div className="input-area">
|
||||
<div className="my-5">
|
||||
<p className="text-[14px] leading-[19px] text-center text-[#181c32]">
|
||||
This error occurs because you have already verified this link or the
|
||||
link has expired. Try login or reset password. If none worked, try to
|
||||
create the account from the start.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="signin-area flex justify-center mb-3.5">
|
||||
<button
|
||||
onClick={onClick}
|
||||
type="button"
|
||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-[#009ef7] hover:text-white flex justify-center bg-[#f1faff] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
||||
>
|
||||
<span>Try Again</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
@@ -0,0 +1,17 @@
|
||||
import React, {useState, useEffect} from "react";
|
||||
import { useParams } from "react-router-dom";
|
||||
|
||||
import SignUp from "../components/AuthPages/SignUp/index2";
|
||||
|
||||
function MyRefer() {
|
||||
|
||||
const {refer_link} = useParams()
|
||||
|
||||
return (
|
||||
<>
|
||||
<SignUp refer_link={refer_link ? refer_link : ''} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default MyRefer;
|
||||
@@ -0,0 +1,78 @@
|
||||
import React, {useState, useEffect} from "react";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import usersService from '../services/UsersService'
|
||||
|
||||
import SignUp from "../components/AuthPages/SignUp/index2";
|
||||
import LoadingSpinner from '../components/Spinners/LoadingSpinner'
|
||||
import AuthLayout from '../components/AuthPages/AuthLayout2'
|
||||
|
||||
function PromoRefer() {
|
||||
const api = new usersService()
|
||||
|
||||
const location = useLocation();
|
||||
|
||||
const queryParams = new URLSearchParams(location?.search);
|
||||
const refer_link = queryParams.get("refer_link")?.toUpperCase();
|
||||
|
||||
const [reload, setReload] = useState(false)
|
||||
|
||||
let [details, setDetails] = useState({loading:true, error:false, data:{}})
|
||||
|
||||
useEffect(()=>{
|
||||
setDetails({loading:true, error:false, data:{}})
|
||||
if(refer_link){
|
||||
const reqData = {
|
||||
refer_link: refer_link,
|
||||
path: 'promoref'
|
||||
}
|
||||
api.loadRefer(reqData).then(res => {
|
||||
if(res?.data?.internal_return < 0){
|
||||
return setDetails({loading:false, error:true, data:{}})
|
||||
}
|
||||
setDetails({loading:false, error:false, data:res.data})
|
||||
}).catch(err => {
|
||||
setDetails({loading:false, error:true, data:{}})
|
||||
})
|
||||
}else{
|
||||
setDetails({loading:false, error:false, data:{}})
|
||||
}
|
||||
},[reload])
|
||||
return (
|
||||
<>
|
||||
{details.loading ?
|
||||
<LoadingSpinner size="32" color="sky-blue" height="h-screen" />
|
||||
: details.error ?
|
||||
<AuthLayout>
|
||||
<ErrorComponent onClick={()=>setReload(prev => !prev)} />
|
||||
</AuthLayout>
|
||||
:
|
||||
<SignUp details={details.data} />
|
||||
}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default PromoRefer;
|
||||
|
||||
|
||||
const ErrorComponent = ({ onClick }) => (
|
||||
<div className="input-area">
|
||||
<div className="my-5">
|
||||
<p className="text-[14px] leading-[19px] text-center text-[#181c32]">
|
||||
This error occurs because you have already verified this link or the
|
||||
link has expired. Try login or reset password. If none worked, try to
|
||||
create the account from the start.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="signin-area flex justify-center mb-3.5">
|
||||
<button
|
||||
onClick={onClick}
|
||||
type="button"
|
||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-[#009ef7] hover:text-white flex justify-center bg-[#f1faff] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
||||
>
|
||||
<span>Try Again</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
@@ -1,79 +1,13 @@
|
||||
import React, {useState, useEffect} from "react";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import usersService from '../services/UsersService'
|
||||
import React from "react";
|
||||
|
||||
import SignUp from "../components/AuthPages/SignUp/index2";
|
||||
import LoadingSpinner from '../components/Spinners/LoadingSpinner'
|
||||
import AuthLayout from '../components/AuthPages/AuthLayout2'
|
||||
|
||||
function SignupPageTwo() {
|
||||
const api = new usersService()
|
||||
|
||||
const location = useLocation();
|
||||
|
||||
const queryParams = new URLSearchParams(location?.search);
|
||||
const refer_link = queryParams.get("refer_link")?.toUpperCase();
|
||||
|
||||
const [reload, setReload] = useState(false)
|
||||
|
||||
let [details, setDetails] = useState({loading:true, error:false, data:{}})
|
||||
|
||||
useEffect(()=>{
|
||||
setDetails({loading:true, error:false, data:{}})
|
||||
if(refer_link){
|
||||
// const timer = setTimeout(()=>{
|
||||
// setDetails({loading:false, data:{
|
||||
// first_name: 'Emeka',
|
||||
// last_name: 'John',
|
||||
// email: 'example@example.com'
|
||||
// }})
|
||||
// },[1000])
|
||||
api.verifyEmail(refer_link).then(res => {
|
||||
setDetails({loading:false, error:false, data:{}})
|
||||
console.log('RES', rres)
|
||||
}).catch(err => {
|
||||
setDetails({loading:false, error:true, data:{}})
|
||||
})
|
||||
}else{
|
||||
setDetails({loading:false, error:false, data:{}})
|
||||
}
|
||||
},[reload])
|
||||
return (
|
||||
<>
|
||||
{details.loading ?
|
||||
<LoadingSpinner size="32" color="sky-blue" height="h-screen" />
|
||||
: details.error ?
|
||||
<AuthLayout>
|
||||
<ErrorComponent onClick={()=>setReload(prev => !prev)} />
|
||||
</AuthLayout>
|
||||
:
|
||||
<SignUp details={details.data} />
|
||||
}
|
||||
<SignUp />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default SignupPageTwo;
|
||||
|
||||
|
||||
const ErrorComponent = ({ onClick }) => (
|
||||
<div className="input-area">
|
||||
<div className="my-5">
|
||||
<p className="text-[14px] leading-[19px] text-center text-[#181c32]">
|
||||
This error occurs because you have already verified this link or the
|
||||
link has expired. Try login or reset password. If none worked, try to
|
||||
create the account from the start.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="signin-area flex justify-center mb-3.5">
|
||||
<button
|
||||
onClick={onClick}
|
||||
type="button"
|
||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-[#009ef7] hover:text-white flex justify-center bg-[#f1faff] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
||||
>
|
||||
<span>Try Again</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
export default SignupPageTwo;
|
||||
Reference in New Issue
Block a user