diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index ec601b2..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - env: { browser: true, es2020: true }, - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:react/jsx-runtime', - 'plugin:react-hooks/recommended', - ], - parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, - settings: { react: { version: '18.2' } }, - plugins: ['react-refresh'], - rules: { - 'react-refresh/only-export-components': 'warn', - }, -} diff --git a/.gitignore b/.gitignore index bb1cb6a..d44c963 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,9 @@ dist_working_backup/ # Zip files *.zip +# Unused files folder +unused/ + # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/BAT-FILES-GUIDE.md b/BAT-FILES-GUIDE.md deleted file mode 100644 index 4dc41d3..0000000 --- a/BAT-FILES-GUIDE.md +++ /dev/null @@ -1,293 +0,0 @@ -# 🚀 POZO - BAT Files Usage Guide - -## 📁 Available BAT Files - -### 🔨 BUILD-PROJECT.bat (RECOMMENDED) -**What it does:** -- Stops all running servers -- Installs npm dependencies if needed -- Runs complete build with `npm run convert-jsx-to-html` -- Copies server files to dist -- Generates SEO files -- Verifies all output files - -**When to use:** -- First time setup -- After making code changes -- When you need a fresh, complete build - -**How to use:** -1. Double-click `BUILD-PROJECT.bat` -2. Wait for completion (1-2 minutes) -3. Check for success message - ---- - -### ⚡ SIMPLE-BUILD.bat (ALTERNATIVE) -**What it does:** -- Same as BUILD-PROJECT but with better error handling -- Skips react-snap (faster) -- Still generates SEO files - -**When to use:** -- If BUILD-PROJECT.bat fails -- When you want faster builds -- When react-snap causes issues - -**How to use:** -1. Double-click `SIMPLE-BUILD.bat` -2. Wait for completion -3. Check output messages - ---- - -### 🚀 QUICK-START.bat (FASTEST) -**What it does:** -- Just starts the server (no build) -- Uses existing dist folder -- Installs dependencies if missing - -**When to use:** -- When you already have a build -- Just want to start/restart server -- Testing without rebuilding - -**How to use:** -1. Make sure you've built at least once -2. Double-click `QUICK-START.bat` -3. Server starts immediately - ---- - -### ▶️ START-SERVER.bat -**What it does:** -- Starts the Node.js server from dist folder -- Shows all test URLs -- Checks if dist/server.js exists - -**When to use:** -- After building -- When QUICK-START seems too minimal - -**How to use:** -1. Ensure build is complete -2. Double-click `START-SERVER.bat` -3. Browser-ல URLs open பண்ணு - ---- - -### ⏹️ STOP-SERVER.bat -**What it does:** -- Kills all Node.js processes -- Confirms servers stopped - -**When to use:** -- When you're done testing -- Before starting a new build -- When server is stuck - -**How to use:** -1. Double-click `STOP-SERVER.bat` -2. Wait for confirmation -3. Done! - ---- - -## 🎯 Recommended Workflow - -### First Time / Fresh Setup: -``` -1. BUILD-PROJECT.bat (Build everything) -2. START-SERVER.bat (Start server) -3. Test in browser (Verify SEO) -4. STOP-SERVER.bat (Stop when done) -``` - -### Regular Development: -``` -1. Make code changes -2. STOP-SERVER.bat (Stop old server) -3. BUILD-PROJECT.bat (Rebuild) -4. START-SERVER.bat (Start new server) -5. Test in browser -6. STOP-SERVER.bat (Stop when done) -``` - -### Quick Testing (No Changes): -``` -1. QUICK-START.bat (Just start server) -2. Test in browser -3. Press Ctrl+C in window (Stop server) -``` - ---- - -## 🐛 Troubleshooting - -### Issue: BUILD-PROJECT.bat fails - -**Solution 1:** Try SIMPLE-BUILD.bat instead -``` -Double-click: SIMPLE-BUILD.bat -``` - -**Solution 2:** Manual build -```powershell -npm install -npm run build -node scripts/jsx-to-html-converter.js -``` - -**Solution 3:** Check for errors -- Missing dependencies → Run `npm install` -- Syntax errors in code → Check error messages -- Port already in use → Run STOP-SERVER.bat first - ---- - -### Issue: START-SERVER.bat shows "dist/server.js not found" - -**Solution:** -``` -1. Run BUILD-PROJECT.bat first -2. Check if dist folder exists -3. Verify dist/server.js is present -``` - ---- - -### Issue: Server starts but shows blank page - -**Solution:** -``` -1. Check browser console (F12) -2. Verify URL is http://localhost:3000/home/ (with /home/) -3. Clear browser cache (Ctrl + Shift + Delete) -4. Rebuild: BUILD-PROJECT.bat -``` - ---- - -### Issue: Port 3000 already in use - -**Solution:** -``` -1. Run STOP-SERVER.bat -2. Or manually kill process: - Get-Process -Name node | Stop-Process -Force -3. Try starting again -``` - ---- - -### Issue: SEO tags not showing - -**Solution:** -``` -1. Verify you're viewing page source (Ctrl + U) -2. Check if scripts/generate-seo.js ran successfully -3. Rebuild with BUILD-PROJECT.bat -4. Check dist/home/pricing-pozoapp/index.html manually -``` - ---- - -## 📝 Quick Command Reference - -### To Build: -- **Full build:** `BUILD-PROJECT.bat` -- **Simple build:** `SIMPLE-BUILD.bat` - -### To Start: -- **Normal start:** `START-SERVER.bat` -- **Quick start:** `QUICK-START.bat` - -### To Stop: -- **Clean stop:** `STOP-SERVER.bat` -- **Force stop:** Press `Ctrl+C` in server window - -### To Test: -1. Start server (any method above) -2. Open: http://localhost:3000/home/ -3. View source: Press `Ctrl + U` -4. Check `
"+(s.trim()?s:r)+"
");const a=Object.keys(this.toolsTags).reduce(((e,t)=>(e[t.toLowerCase()]=this.toolsTags[t].sanitizationConfig??{},e)),{}),l=me(s,Object.assign({},a,o.getAllInlineToolsSanitizeConfig(),{br:{}}));l.trim()&&l.trim()!==r&&F.isHTMLString(l)?await this.processText(l,!0):await this.processText(r)}async processText(e,t=!1){const{Caret:o,BlockManager:n}=this.Editor,i=t?this.processHTML(e):this.processPlain(e);if(!i.length)return;if(1===i.length)return void(i[0].isBlock?this.processSingleBlock(i.pop()):this.processInlinePaste(i.pop()));const r=n.currentBlock&&n.currentBlock.tool.isDefault&&n.currentBlock.isEmpty;i.map((async(e,t)=>this.insertBlock(e,0===t&&r))),n.currentBlock&&o.setToBlock(n.currentBlock,o.positions.END)}setCallback(){this.listeners.on(this.Editor.UI.nodes.holder,"paste",this.handlePasteEvent)}unsetCallback(){this.listeners.off(this.Editor.UI.nodes.holder,"paste",this.handlePasteEvent)}processTools(){const e=this.Editor.Tools.blockTools;Array.from(e.values()).forEach(this.processTool)}collectTagNames(e){return w(e)?[e]:k(e)?Object.keys(e):[]}getTagsConfig(e){if(!1===e.pasteConfig)return;const t=e.pasteConfig.tags||[],o=[];t.forEach((t=>{const n=this.collectTagNames(t);o.push(...n),n.forEach((o=>{if(Object.prototype.hasOwnProperty.call(this.toolsTags,o))return void m(`Paste handler for «${e.name}» Tool on «${o}» tag is skipped because it is already used by «${this.toolsTags[o].tool.name}» Tool.`,"warn");const n=k(t)?t[o]:null;this.toolsTags[o.toUpperCase()]={tool:e,sanitizationConfig:n}}))})),this.tagsByTool[e.name]=o.map((e=>e.toUpperCase()))}getFilesConfig(e){if(!1===e.pasteConfig)return;const{files:t={}}=e.pasteConfig;let{extensions:o,mimeTypes:n}=t;!o&&!n||(o&&!Array.isArray(o)&&(m(`«extensions» property of the onDrop config for «${e.name}» Tool should be an array`),o=[]),n&&!Array.isArray(n)&&(m(`«mimeTypes» property of the onDrop config for «${e.name}» Tool should be an array`),n=[]),n&&(n=n.filter((t=>!!/^[-\w]+\/([-+\w]+|\*)$/.test(t)||(m(`MIME type value «${t}» for the «${e.name}» Tool is not a valid MIME type`,"warn"),!1)))),this.toolsFiles[e.name]={extensions:o||[],mimeTypes:n||[]})}getPatternsConfig(e){!1===e.pasteConfig||!e.pasteConfig.patterns||C(e.pasteConfig.patterns)||Object.entries(e.pasteConfig.patterns).forEach((([t,o])=>{o instanceof RegExp||m(`Pattern ${o} for «${e.name}» Tool is skipped because it should be a Regexp instance.`,"warn"),this.toolsPatterns.push({key:t,pattern:o,tool:e})}))}isNativeBehaviour(e){return F.isNativeInput(e)}async processFiles(e){const{BlockManager:t}=this.Editor;let o;o=await Promise.all(Array.from(e).map((e=>this.processFile(e)))),o=o.filter((e=>!!e));const n=t.currentBlock.tool.isDefault&&t.currentBlock.isEmpty;o.forEach(((e,o)=>{t.paste(e.type,e.event,0===o&&n)}))}async processFile(e){const t=e.name.split(".").pop(),o=Object.entries(this.toolsFiles).find((([o,{mimeTypes:n,extensions:i}])=>{const[r,s]=e.type.split("/"),a=i.find((e=>e.toLowerCase()===t.toLowerCase())),l=n.find((e=>{const[t,o]=e.split("/");return t===r&&(o===s||"*"===o)}));return!!a||!!l}));if(!o)return;const[n]=o;return{event:this.composePasteEvent("file",{file:e}),type:n}}processHTML(e){const{Tools:t}=this.Editor,o=F.make("DIV");return o.innerHTML=e,this.getNodes(o).map((e=>{let o,n=t.defaultTool,i=!1;switch(e.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:o=F.make("div"),o.appendChild(e);break;case Node.ELEMENT_NODE:o=e,i=!0,this.toolsTags[o.tagName]&&(n=this.toolsTags[o.tagName].tool)}const{tags:r}=n.pasteConfig||{tags:[]},s=r.reduce(((e,t)=>(this.collectTagNames(t).forEach((o=>{const n=k(t)?t[o]:null;e[o.toLowerCase()]=n||{}})),e)),{}),a=Object.assign({},s,n.baseSanitizeConfig);if("table"===o.tagName.toLowerCase()){const e=me(o.outerHTML,a);o=F.make("div",void 0,{innerHTML:e}).firstChild}else o.innerHTML=me(o.innerHTML,a);const l=this.composePasteEvent("tag",{data:o});return{content:o,isBlock:i,tool:n.name,event:l}})).filter((e=>{const t=F.isEmpty(e.content),o=F.isSingleTag(e.content);return!t||o}))}processPlain(e){const{defaultBlock:t}=this.config;if(!e)return[];const o=t;return e.split(/\r?\n/).filter((e=>e.trim())).map((e=>{const t=F.make("div");t.textContent=e;const n=this.composePasteEvent("tag",{data:t});return{content:t,tool:o,isBlock:!1,event:n}}))}async processSingleBlock(e){const{Caret:t,BlockManager:o}=this.Editor,{currentBlock:n}=o;n&&e.tool===n.name&&F.containsOnlyInlineElements(e.content.innerHTML)?t.insertContentAtCaretPosition(e.content.innerHTML):this.insertBlock(e,(null==n?void 0:n.tool.isDefault)&&n.isEmpty)}async processInlinePaste(t){const{BlockManager:o,Caret:n}=this.Editor,{content:i}=t;if(o.currentBlock&&o.currentBlock.tool.isDefault&&i.textContent.lengthQuick Links
@@ -330,34 +376,53 @@ const Blogs = () => {All Products
Pricing Plans
Contact Us
-FAQs
+FAQs
Support & Help
info@pozo.app
-73 24 00 00 11
-73 24 00 00 12
+ 73 24 00 00 11 + 73 24 00 00 12 + Let's get social -For queries contact us: Manager, No 51 Step Colony, Dharga,Hosur, Krishnagiri, Tamilnadu-635126, India
{post.excerpt}
+//Stay updated with the latest news, announcements, and blog posts from PozoApp. Discover insights on business management, technology trends, and more.
+//No blog posts available at the moment. Please check back later for updates.
+//Quick Links
+//About Pozo
+//All Products
+//Pricing Plans
+//Contact Us
+//FAQs
+//Support & Help
+//info@pozo.app
+//73 24 00 00 11
+//73 24 00 00 12
+// +// Let's get social +//+// For queries contact us: Manager, No 51 Step Colony, Dharga,Hosur, +// Krishnagiri, Tamilnadu-635126, India +//
+//Sub Total : {ModalTotalValues?.Price}
Tax Amount: {ModalTotalValues?.TaxAmount}
Total: {ModalTotalValues?.NetPrice}
FROM
+ +
+ Monthly Plan + + ₹{MontlyCarddata} billed monthly{" "} + +
++ Annual Plan + + ₹{YearlyCarddata} billed anually{" "} + +
+ + )}Current Plan Amount
:₹ {AppNetPrice}
Remaining days of current plan / per day amount :
{differenceDays} {differenceDays > 1 ? "days" : "day"} / ₹{" "} @@ -3987,10 +4011,12 @@ const InvoiceDetail = () => { style={{ display: "flex", justifyContent: "space-between", - }}> + }} + >
consumed Amount of current plan / consumed Days :
- ₹ {Math.abs(conumedAmountofCurrentplan).toFixed(2)}/{consumedDays}{" "} + ₹ {Math.abs(conumedAmountofCurrentplan).toFixed(2)}/ + {consumedDays}{" "} {/* ₹ {conumedAmountofCurrentplan}/{consumedDays}{" "} */} {consumedDays > 1 ? "days" : "day"}
@@ -4000,7 +4026,8 @@ const InvoiceDetail = () => { style={{ display: "flex", justifyContent: "space-between", - }}> + }} + >Remaining available amount from the current plan :
₹ {Math.abs(RemainingAmountFromCurrentPlan).toFixed(2)} @@ -4012,7 +4039,8 @@ const InvoiceDetail = () => { style={{ display: "flex", justifyContent: "space-between", - }}> + }} + >
This {selectedPlan} Plan includes :
{Math.floor(thisPlanIncludesNumberofdays)}{" "} @@ -4026,7 +4054,8 @@ const InvoiceDetail = () => { style={{ display: "flex", justifyContent: "space-between", - }}> + }} + >
Selected plan Amount
:₹ {SelectedplanAmount}
+ }} + > {" "} @@ -4052,15 +4083,16 @@ const InvoiceDetail = () => {
) : ( AppNetPrice - - (differenceDays - daysBetween) * perdayamount - - SelectedplanAmount != - 0 && ( + (differenceDays - daysBetween) * perdayamount - + SelectedplanAmount != + 0 && (+ }} + > Payable Amount @@ -4068,7 +4100,7 @@ const InvoiceDetail = () => { :₹{" "} {Math.abs( RemainingAmountFromCurrentPlan - - SelectedplanAmount + SelectedplanAmount ).toFixed(2)}
@@ -4079,10 +4111,11 @@ const InvoiceDetail = () => {1. Once the current billing period ends you will be billed - monthly. By choosing an annual subscription you save 17% on - the subscription fee.{" "} + monthly. By choosing an annual subscription you save 17% + on the subscription fee.{" "}
- 2. Please note, if you downgrade your plan, any reduction in the amount paid is your responsibility. Pozo is not responsible for any changes or refunds due to the plan change.{" "} + 2. Please note, if you downgrade your plan, any reduction + in the amount paid is your responsibility. Pozo is not + responsible for any changes or refunds due to the plan + change.{" "}
{" "} Flexible & transparent pricing{" "}
Pay less by using more
{" "} {
alignItems: "center",
gap: "0.2rem",
}}
- onClick={getViewFeatures}>
+ onClick={getViewFeatures}
+ >
Feature Details
| { border: "1px solid #ddd", padding: "8px", textAlign: "left", - }}> + }} + > Feature Name | { border: "1px solid #ddd", padding: "8px", textAlign: "left", - }}> + }} + > Constraint | {
border: "1px solid #ddd",
padding: "8px",
textAlign: "center",
- }}>
+ }}
+ >
{item?.FeatConstraint === 0 ? (
| {
border: "1px solid #ddd",
padding: "8px",
textAlign: "left",
- }}>
+ }}
+ >
Feature Name
|
{
border: "1px solid #ddd",
padding: "8px",
textAlign: "left",
- }}>
+ }}
+ >
Constraint
|
{item?.FeatName}
{
border: "1px solid #ddd",
padding: "8px",
textAlign: "center",
- }}>
+ }}
+ >
{item?.FeatConstraint === 0 ? (
| {
border: "1px solid #ddd",
padding: "8px",
textAlign: "left",
- }}>
+ }}
+ >
Feature Name
|
{
border: "1px solid #ddd",
padding: "8px",
textAlign: "left",
- }}>
+ }}
+ >
Constraint
|
{item?.FeatName}
{
border: "1px solid #ddd",
padding: "8px",
textAlign: "center",
- }}>
+ }}
+ >
{item?.FeatConstraint === 0 ? (
|
+ style={{ paddingTop: "185px" }}
+ >
)}
@@ -4533,7 +4592,7 @@ const InvoiceDetail = () => {
- {!Sadmins &&
+ {!Sadmins && (
{
display: "flex",
flexDirection: "row",
justifyContent: "space-around",
- }}>
+ }}
+ >
+ }}
+ >
{
flexDirection: "row",
rowGap: "2rem",
justifyContent: "space-between",
- }}>
+ }}
+ >
+ }}
+ >
{
borderRadius: "3px",
alignItems: "center",
columnGap: "0.2rem",
- }}>
+ }}
+ >
Monthly ++ Monthly + ) : (Yearly ) - ) : invoiceDetails && invoiceDetails.length > 0 ? ( + ) : invoiceDetails && + invoiceDetails.length > 0 ? ( invoiceDetails[0]?.NoOfDays === 30 ? ( -Monthly ++ Monthly + ) : (Yearly ) ) : null} -
- {Refferaldata?.length < 1 &&
+
- {Existplan?.[0]?.BalanceCommissionAmount > 0 ?
+ {Existplan?.[0]?.BalanceCommissionAmount > 0 ? (
+ {Refferaldata?.length < 1 && (
@@ -4624,73 +4719,126 @@ const InvoiceDetail = () => {
alignItems: "center",
columnGap: "0.5rem",
color: "green",
- }}>
+ }}
+ >
- {Reffereduser?.[0]?.UserName ?
Username : {Reffereduser?.[0]?.UserName} : ""} - {Reffereduser?.[0]?.MobileNo ?MobileNo : {Reffereduser?.[0]?.MobileNo} : ""} + )} +
+ {Reffereduser?.[0]?.UserName ? (
+
+ Username : {Reffereduser?.[0]?.UserName} + + ) : ( + "" + )} + {Reffereduser?.[0]?.MobileNo ? ( ++ MobileNo : {Reffereduser?.[0]?.MobileNo} + + ) : ( + "" + )}
- {
- (AddonPurchase || (invoiceDetails && invoiceDetails.length > 0)) ? (
- postfeaturedetails?.length > 0 ? (
- // Case: addon features exist
- <>₹ {(totalFeatureAmt || 0) + (PayableAmount || 0)}>
- ) : (
- <>
- ₹ {(PayableAmount - CommissionAmt) >= 0 ? (PayableAmount - CommissionAmt) : 0}
-
- {((PayableAmount - CommissionAmt) >= 0 && CommissionAmt > 0) && (
+ }}
+ >
+ {AddonPurchase ||
+ (invoiceDetails &&
+ invoiceDetails.length > 0) ? (
+ postfeaturedetails?.length > 0 ? (
+ // Case: addon features exist
+ <>
+ ₹{" "}
+ {(totalFeatureAmt || 0) +
+ (PayableAmount || 0)}
+ >
+ ) : (
+ <>
+ ₹{" "}
+ {PayableAmount - CommissionAmt >= 0
+ ? PayableAmount - CommissionAmt
+ : 0}
+ {PayableAmount - CommissionAmt >= 0 &&
+ CommissionAmt > 0 && (
<>
+
- to Pay
-
+ ) : (
+ ""
+ )}
- {AppExpDateDetails?.[0]?.PricingName != "Free" && : ""}
+
+ {AppExpDateDetails?.[0]?.PricingName !=
+ "Free" && (
+
-
-
+ {" "}
+
+ className={emailcondit ? "NoError" : "ShowError"}
+ >
{UserDetails?.[0]?.MailId ? (
@@ -4776,7 +4928,8 @@ const InvoiceDetail = () => {
flexWrap: "wrap",
gap: "1rem",
}}
- className="adduserinfo">
+ className="adduserinfo"
+ >
+ }} + > {UserDetails?.[0]?.MailId} ) : ( @@ -4713,7 +4861,8 @@ const InvoiceDetail = () => { color: "#FF4D4F", fontSize: "12px", marginTop: "28px", - }}> + }} + > Enter Valid Email )} @@ -4729,7 +4878,8 @@ const InvoiceDetail = () => { fontSize: "20px", fontWeight: "600", color: "green", - }}> + }} + > {
fontWeight: "500",
color: "green",
borderRadius: "3px",
- padding: "6px 0 0 0"
- }}>
+ padding: "6px 0 0 0",
+ }}
+ >
{" "}
{UserDetails?.length > 0
? UserDetails?.[0]?.MobileNo
@@ -4758,7 +4909,8 @@ const InvoiceDetail = () => {
columnGap: "0.2rem",
alignItems: "center",
}}
- onClick={getViewMore}>
+ onClick={getViewMore}
+ >
More Info {
addresscondit
? "NoError"
: "ShowError"
- }>
+ }
+ >
diff --git a/src/Pages/themeTemplate/TemplateComps/Pricing/Pricing3.jsx b/src/Pages/themeTemplate/TemplateComps/Pricing/Pricing3.jsx
index dcfb9bc..e4a6dd5 100644
--- a/src/Pages/themeTemplate/TemplateComps/Pricing/Pricing3.jsx
+++ b/src/Pages/themeTemplate/TemplateComps/Pricing/Pricing3.jsx
@@ -854,7 +854,8 @@ console.log(pricingData,"pricingTypeSelector")
style={{
backgroundColor: changeCurrentColorValues.darkColor ? changeCurrentColorValues.darkColor : '',
color: changeCurrentColorValues.lightcolor ? 'white' : '#fff'
- }}>
+ }}
+ onClick={() => navigate(`${subDirectory}contact-us`)}>
Contact Our Sales Team
+ gstcondit
+ ? "NoError"
+ : "ShowError"
+ }
+ >
diff --git a/src/Pages/RefferedEmployee/RefferedEmployeelist.jsx b/src/Pages/RefferedEmployee/RefferedEmployeelist.jsx
index e468d0b..bd5353f 100644
--- a/src/Pages/RefferedEmployee/RefferedEmployeelist.jsx
+++ b/src/Pages/RefferedEmployee/RefferedEmployeelist.jsx
@@ -109,7 +109,7 @@ const RefferedEmployeelist = () => {
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
render: (text, object, index) => (
@@ -211,7 +211,7 @@ const RefferedEmployeelist = () => {
const Ccolumns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
render: (text, object, index) => (
@@ -263,7 +263,7 @@ const RefferedEmployeelist = () => {
const Pcolumns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
render: (text, object, index) => (
diff --git a/src/Pages/ScheduleDemo/ScheduleDemo.jsx b/src/Pages/ScheduleDemo/ScheduleDemo.jsx
index fc32920..49412c5 100644
--- a/src/Pages/ScheduleDemo/ScheduleDemo.jsx
+++ b/src/Pages/ScheduleDemo/ScheduleDemo.jsx
@@ -1,100 +1,202 @@
-import React, { useEffect, useState } from "react";
+import React, { useEffect, useState, useRef } from "react";
import "./ScheduleDemo.scss";
import { FaArrowRight, FaCalendarAlt, FaClock, FaUser } from "react-icons/fa";
import Navbar from "../../PozoApp/Components/Navbar";
import SEO from "../../Components/SEO/SEO";
+import Footer from "../../PozoApp/Components/Footer";
+import IndustriesList from "../../PozoApp/Components/IndustriesList";
+import CompanyList from "../../PozoApp/Components/companyList";
+import { lazy, Suspense } from "react";
+import { useDispatch } from "react-redux";
+import { getAllApplicationData } from "../../features/publicHome/publicHome";
+import { sessionStore } from "../../Services/others";
+import { useNavigate } from "react-router-dom";
+import BookDemo from "../../PozoApp/Components/BookDemo";
+import Email from "../../PozoApp/Images/BookDemo/Email.webp";
+import Whatsapp from "../../PozoApp/Images/BookDemo/Whatsapp.webp";
+import CalendlyDemoBooking from "../../PozoApp/Components/CalendlyDemoBooking";
+
+const SolutionsList = lazy(() => import("../../PozoApp/Components/SolutionsList"));
+const subDirectory = import.meta.env.ENV_BASE_URL;
const ScheduleDemo = () => {
+ const dispatch = useDispatch();
+ const navigate = useNavigate();
const [isScrolled, setIsScrolled] = useState(false);
const [selectedTimeSlot, setSelectedTimeSlot] = useState(null);
- const [activeTab, setActiveTab] = useState('form'); // 'form' or 'calendly'
+ const [activeTab, setActiveTab] = useState("calendly");
+ const [industry, setIndustry] = useState(false);
+ const [closingIndustry, setClosingIndustry] = useState(false);
+ const industryRef = useRef(null);
+ const [company, setCompany] = useState(false);
+ const [closingCompany, setClosingCompany] = useState(false);
+ const companyRef = useRef(null);
+ const [solutionsOpen, setSolutionsOpen] = useState(false);
+ const [closingSolutions, setClosingSolutions] = useState(false);
+ const solutionsRef = useRef(null);
+ const [industries, setAppCategory] = useState([]);
+ const [demoModal, setDemoModal] = useState(false);
const [formData, setFormData] = useState({
- name: '',
- email: '',
- phone: '',
- company: '',
- businessType: '',
- message: ''
+ name: "",
+ email: "",
+ phone: "",
+ company: "",
+ businessType: "",
+ message: "",
});
+ const handleDemoModal = () => setDemoModal(true);
+ const handleDemoModalClose = () => setDemoModal(false);
+
+ useEffect(() => {
+ const handleScroll = () => {
+ setIsScrolled(window.scrollY > 50);
+ };
+ window.addEventListener("scroll", handleScroll);
+ getAppData();
+
+ // Auto-fill form if cookies accepted
+ const consent = localStorage.getItem("cookieConsent");
+ if (consent === "accepted") {
+ const savedData = localStorage.getItem("userFormData");
+ if (savedData) {
+ setFormData(JSON.parse(savedData));
+ }
+ }
+
+ return () => window.removeEventListener("scroll", handleScroll);
+ }, []);
+
+ const getAppData = async () => {
+ try {
+ const response = await dispatch(getAllApplicationData()).unwrap();
+ if (response?.data?.statusCode === 1) {
+ let finalsubCategory = response?.data?.data?.filter(
+ (value) => value.ActiveStatus === "A",
+ );
+ setAppCategory(finalsubCategory);
+ }
+ } catch (error) {
+ console.error('Error fetching app data:', error);
+ }
+ };
+
+ const redirectApp = (AppName, AppId) => {
+ sessionStore("AppId", AppId);
+ sessionStore("AppName", AppName);
+ if (industry) {
+ handleIndustry();
+ }
+ const cleanUrl = AppName
+ .replace(/[,]/g, '')
+ .replace(/\s+/g, '-')
+ .replace(/&/g, 'and')
+ .replace(/[^a-z0-9-]/gi, '')
+ .toLowerCase();
+ navigate(`${subDirectory}industries/${cleanUrl}`);
+ };
+
+ const handleIndustry = () => {
+ if (industry) {
+ setClosingIndustry(true);
+ setTimeout(() => {
+ setIndustry(false);
+ setClosingIndustry(false);
+ }, 200);
+ } else {
+ setIndustry(true);
+ }
+ };
+
+ const handleCompanyList = () => {
+ if (company) {
+ setClosingCompany(true);
+ setTimeout(() => {
+ setCompany(false);
+ setClosingCompany(false);
+ }, 200);
+ } else {
+ setCompany(true);
+ }
+ };
+
+ useEffect(() => {
+ if (industry || company || solutionsOpen) {
+ document.body.style.overflow = "hidden";
+ } else {
+ document.body.style.overflow = "unset";
+ }
+ return () => {
+ document.body.style.overflow = "unset";
+ };
+ }, [industry, company, solutionsOpen]);
+
const handleInputChange = (e) => {
- setFormData({
+ const newFormData = {
...formData,
- [e.target.name]: e.target.value
- });
+ [e.target.name]: e.target.value,
+ };
+ setFormData(newFormData);
+
+ // Save to localStorage if cookies accepted
+ const consent = localStorage.getItem("cookieConsent");
+ if (consent === "accepted") {
+ localStorage.setItem("userFormData", JSON.stringify(newFormData));
+ }
};
const handleSubmit = (e) => {
e.preventDefault();
-
- // Create demo request object
+
const demoRequest = {
id: Date.now(),
...formData,
- preferredTime: timeSlots.find(slot => slot.id === selectedTimeSlot)?.time || 'Not selected',
- status: 'pending',
- submittedAt: new Date().toISOString()
+ preferredTime:
+ timeSlots.find((slot) => slot.id === selectedTimeSlot)?.time ||
+ "Not selected",
+ status: "pending",
+ submittedAt: new Date().toISOString(),
};
-
- // Save to localStorage
- const existingRequests = JSON.parse(localStorage.getItem('demoRequests') || '[]');
+
+ const existingRequests = JSON.parse(
+ localStorage.getItem("demoRequests") || "[]"
+ );
existingRequests.push(demoRequest);
- localStorage.setItem('demoRequests', JSON.stringify(existingRequests));
-
- // Reset form
+ localStorage.setItem("demoRequests", JSON.stringify(existingRequests));
+
setFormData({
- name: '',
- email: '',
- phone: '',
- company: '',
- businessType: '',
- message: ''
+ name: "",
+ email: "",
+ phone: "",
+ company: "",
+ businessType: "",
+ message: "",
});
setSelectedTimeSlot(null);
-
- alert('Demo request submitted successfully! We will contact you soon.');
+
+ alert("Demo request submitted successfully! We will contact you soon.");
};
const timeSlots = [
- { id: 1, time: '10:00 AM', available: true },
- { id: 2, time: '11:00 AM', available: true },
- { id: 3, time: '2:00 PM', available: false },
- { id: 4, time: '3:00 PM', available: true },
- { id: 5, time: '4:00 PM', available: true },
- { id: 6, time: '5:00 PM', available: true }
+ { id: 1, time: "10:00 AM", available: true },
+ { id: 2, time: "11:00 AM", available: true },
+ { id: 3, time: "2:00 PM", available: false },
+ { id: 4, time: "3:00 PM", available: true },
+ { id: 5, time: "4:00 PM", available: true },
+ { id: 6, time: "5:00 PM", available: true },
];
const businessTypes = [
- 'Retail Store',
- 'Supermarket',
- 'Pharmacy',
- 'Restaurant',
- 'Grocery Store',
- 'Fashion Store',
- 'Electronics Store',
- 'Other'
+ "Retail Store",
+ "Supermarket",
+ "Pharmacy",
+ "Restaurant",
+ "Grocery Store",
+ "Fashion Store",
+ "Electronics Store",
+ "Other",
];
- const demoFeatures = [
- {
- icon:
+ zipcondit
+ ? "NoError"
+ : "ShowError"
+ }
+ >
@@ -5276,7 +5507,8 @@ const InvoiceDetail = () => {
@@ -5292,17 +5524,18 @@ const InvoiceDetail = () => {
paymentModeSelected === a.PaymentUPIDetailsId
? "activeData"
: null
- }>
+ }
+ >
{" "}
+ citycondit
+ ? "NoError"
+ : "ShowError"
+ }
+ >
-
+ ) : (
+
@@ -5048,60 +5246,76 @@ const InvoiceDetail = () => {
Payment options
{PaymentDetails?.map((item, index) => (
@@ -4996,15 +5185,23 @@ const InvoiceDetail = () => {
? " #52c41a2e"
: " ",
color:
- selectedOption === index ? " #000" : " ",
+ selectedOption === index
+ ? " #000"
+ : " ",
}}
onClick={() => {
setselectedOption(index);
setItemsdata(
PaymentDetails?.[index]?.Details
);
- setValue(PaymentDetails?.[index]?.MethodName == "UPI" ? index : undefined);
- }}>
+ setValue(
+ PaymentDetails?.[index]?.MethodName ==
+ "UPI"
+ ? index
+ : undefined
+ );
+ }}
+ >
{item?.MethodName == "EMI" && (
{selectedOption != undefined && (
) :
+
- {PaymentDetails?.[selectedOption]?.CardType !=
- "UPI" && (
-
-
- {PaymentDetails?.[selectedOption]?.CardType !=
- "UPI" && (
-
INR{" "}
- {
- (AddonPurchase || (invoiceDetails && invoiceDetails.length > 0))
- ? postfeaturedetails?.length > 0
- ? (totalFeatureAmt || 0) + (PayableAmount || 0)
- : (
- <>
- ₹ {(PayableAmount - CommissionAmt) >= 0 ? PayableAmount - CommissionAmt : 0}
- {((PayableAmount - CommissionAmt) >= 0 && CommissionAmt > 0) && (
- <>
- +
-
@@ -5109,12 +5323,17 @@ const InvoiceDetail = () => {
type="submit"
buttonText="PROCEED TO PAY"
className="sbmt-btn"
- handleSubmit={AddonPurchase ? onSubmitFeatureAddon : onSubmit}
- icon={
-
You No Need To Pay -
+
- }
-
+ )}
+ You No Need To Pay + +
-
-
+
{!open ? (
-
+
-
+
+
-
+
+
+ rules={[
+ {
+ required: true,
+ message: "Please Enter your New Pin!",
+ },
+ {
+ validator: async (_, value) => {
+ await validateSafeInput(value);
-
-
-
-
-
+
-
-
+ if (value && value.length > 4) {
+ return Promise.reject(
+ "Pin should not exceed 4 characters"
+ );
+ }
+
+ return Promise.resolve();
+ },
+ },
+ ]}
+ >
+
+
-
-
-
+
-
- Schedule Your Free Demo-See POZO in action! Book a personalized demo and discover how our POS solution can revolutionize your retail business. -
- {demoFeatures.map((feature, index) => (
-
-
- ))}
+ {feature.icon}
- {feature.title}-{feature.desc} -
+ {/*
+ */}
Schedule Your Free Demo++ Experience POZO in action. Book your personalized demo and + discover how our POS solution can transform your business. + +
-
-
- {activeTab === 'form' ? (
+
+ {activeTab === "form" ? (
Request Your Free Demo-Fill out the form and we'll contact you to schedule a personalized demo - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- + Fill out the form and we'll contact you to schedule a + personalized demo + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Book Your Demo InstantlyChoose your preferred time slot and book directly - -
- {/*
- MARKETING TEAM: Replace this URL with your actual Calendly link
- Example: https://calendly.com/your-username/demo-session
- */}
+ */}
-
+
+
+
+ {/*
- Preferred Time SlotsSelect your preferred time for the demo call @@ -279,31 +430,50 @@ const ScheduleDemo = () => {
-
+
+
+ {industry && (
+
-
- What to Expect in Your Demo-
-
-
-
-
-
-
- {breadCrumb?.length > 0 && (
-
-
-
- {UserName ? UserName : MobileNo ? MobileNo : "Guest"} {UserType}
-
-
-
-
-
-
+ return (
+
+
+ );
+};
+
+export default CenterPage;
diff --git a/src/Pages/appPriceFeatureMapping/appPriceFeatureMappingList.jsx b/src/Pages/appPriceFeatureMapping/appPriceFeatureMappingList.jsx
index 247580f..a29b807 100644
--- a/src/Pages/appPriceFeatureMapping/appPriceFeatureMappingList.jsx
+++ b/src/Pages/appPriceFeatureMapping/appPriceFeatureMappingList.jsx
@@ -121,7 +121,7 @@ const AppPriceFeatureMapping = () => {
const columns = [
{
- title: "SI.NO",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/application/applicationList.jsx b/src/Pages/application/applicationList.jsx
index ec4017f..fcfac5b 100644
--- a/src/Pages/application/applicationList.jsx
+++ b/src/Pages/application/applicationList.jsx
@@ -1,27 +1,36 @@
-import { useState, useEffect,useCallback} from 'react';
-import { useDispatch,useSelector } from 'react-redux';
-import { useNavigate,useLocation } from 'react-router-dom';
-import { Space} from "antd";
-import { EditFilled, DeleteFilled,PlusOutlined,ReloadOutlined} from "@ant-design/icons";
+import { useState, useEffect, useCallback } from "react";
+import { useDispatch, useSelector } from "react-redux";
+import { useNavigate, useLocation } from "react-router-dom";
+import { Space } from "antd";
+import {
+ EditFilled,
+ DeleteFilled,
+ PlusOutlined,
+ ReloadOutlined,
+} from "@ant-design/icons";
import { Tables } from "../../Components/Tables/Table";
import { Search } from "../../Components/Forms/Search";
-import Buttons from '../../Components/Forms/Buttons';
+import Buttons from "../../Components/Forms/Buttons";
import { Messages } from "../../Components/Notifications/Messages";
-import FormHeader from '../pageComponents/FormHeader.jsx';
+import FormHeader from "../pageComponents/FormHeader.jsx";
import { changeBreadCrumb } from "../../features/appPage/centerPage.js";
-import {applicationDataSelector, getApplicationData,deleteApplicationData} from "../../features/applicationPage/applicationPage.js"
+import {
+ applicationDataSelector,
+ getApplicationData,
+ deleteApplicationData,
+} from "../../features/applicationPage/applicationPage.js";
import { getSession } from "../../Services/others";
-import { SuperAdminUserAccessDataSelector } from '../../features/superAdminAccess/superAdminAccess.js';
+import { SuperAdminUserAccessDataSelector } from "../../features/superAdminAccess/superAdminAccess.js";
-const subDirectory = import.meta.env.ENV_BASE_URL
+const subDirectory = import.meta.env.ENV_BASE_URL;
const ApplicationList = () => {
const navigateTo = useNavigate();
const dispatch = useDispatch();
const location = useLocation();
- const applicationData=useSelector(applicationDataSelector)
- const SuperAdminUserAccess=useSelector(SuperAdminUserAccessDataSelector)
- const UserType = getSession("UserType")
+ const applicationData = useSelector(applicationDataSelector);
+ const SuperAdminUserAccess = useSelector(SuperAdminUserAccessDataSelector);
+ const UserType = getSession("UserType");
//local states
const [sortedInfo, setSortedInfo] = useState({});
@@ -29,64 +38,62 @@ const ApplicationList = () => {
const [messageType, setMessageType] = useState(null);
const [messageData, setMessageData] = useState(null);
const [page, setpage] = useState(1);
-
+
const items = [
{
name: "Home",
link: `${subDirectory}landing-page/home`,
},
-
+
{
name: "Application",
link: `${subDirectory}setting/application-master`,
},
-
];
-
+
useEffect(() => {
try {
dispatch(changeBreadCrumb({ items: items }));
dispatch(getApplicationData()).unwrap();
- if(location?.state?.Notiffy){
- setMessageType(location?.state?.Notiffy.messageType)
- setMessageData(location?.state?.Notiffy.messageData)
-
+ if (location?.state?.Notiffy) {
+ setMessageType(location?.state?.Notiffy.messageType);
+ setMessageData(location?.state?.Notiffy.messageData);
}
} catch (err) {
console.log(err, "err");
}
}, []);
-
const onComplete = useCallback(() => {
setMessageData(null);
setMessageType(null);
-
-
- }, [])
+ }, []);
- const actionsFormatter = async (row,rowIndex) => {
+ const actionsFormatter = async (row, rowIndex) => {
if (row.ActiveStatus !== "D") {
- navigateTo(`${subDirectory}setting/application-master/update`,
- {state:{editstate: row}},
- {key:rowIndex}
- )
-
+ navigateTo(
+ `${subDirectory}setting/application-master/update`,
+ { state: { editstate: row } },
+ { key: rowIndex }
+ );
}
-
};
-
+
const statusFormatter = async (row) => {
let deleteData = {
AppId: row.AppId,
ActiveStatus: row.ActiveStatus == "A" ? "D" : "A",
- UpdatedBy: getSession('UserId')
+ UpdatedBy: getSession("UserId"),
};
- let response=await dispatch(deleteApplicationData(deleteData)).unwrap()
- if (response?.data?.statusCode == 1){
- dispatch(getApplicationData()).unwrap()
- setMessageType("success")
- setMessageData(row.ActiveStatus == "A" ? "Application In-Activated Successfully": "Application Activated Successfully")
+ let response = await dispatch(deleteApplicationData(deleteData)).unwrap();
+ if (response?.data?.statusCode == 1) {
+ dispatch(getApplicationData()).unwrap();
+ setMessageType("success");
+ setMessageData(
+ row.ActiveStatus == "A"
+ ? "Application In-Activated Successfully"
+ : "Application Activated Successfully"
+ );
}
};
@@ -98,14 +105,14 @@ const ApplicationList = () => {
};
const onSearch = (value) => {
- setSearchedText(value)
- }
- const onSearchChange =(e) => {
- setSearchedText(e?.target?.value)
- }
+ setSearchedText(value);
+ };
+ const onSearchChange = (e) => {
+ setSearchedText(e?.target?.value);
+ };
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
@@ -124,22 +131,17 @@ const ApplicationList = () => {
{text}
),
filteredValue: [searchedText],
- onFilter: (value, record) => {return (
- String(record.AppName)
- .toLowerCase()
- .includes(value.toLowerCase()) ||
- String(record.CateName)
- .toLowerCase()
- .includes(value.toLowerCase()) ||
- String(record.SubCateName)
- .toLowerCase()
- .includes(value.toLowerCase())
- )},
-
- sorter: (a, b) =>a?.AppName?.localeCompare(b.AppName),
+ onFilter: (value, record) => {
+ return (
+ String(record.AppName).toLowerCase().includes(value.toLowerCase()) ||
+ String(record.CateName).toLowerCase().includes(value.toLowerCase()) ||
+ String(record.SubCateName).toLowerCase().includes(value.toLowerCase())
+ );
+ },
+
+ sorter: (a, b) => a?.AppName?.localeCompare(b.AppName),
sortOrder: sortedInfo.columnKey === "AppName" ? sortedInfo.order : null,
ellipsis: true,
-
},
{
title: "Module",
@@ -154,17 +156,17 @@ const ApplicationList = () => {
ellipsis: true,
},
{
- title: "Sub Module",
- dataIndex: "SubCategoryName",
- key: "SubCategoryName",
- align: "left",
- width: "200px",
- render: (text) => {text},
- sorter: (a, b) => a?.SubCategoryName?.localeCompare(b.SubCategoryName),
- sortOrder:
- sortedInfo.columnKey === "SubCategoryName" ? sortedInfo.order : null,
- ellipsis: true,
- },
+ title: "Sub Module",
+ dataIndex: "SubCategoryName",
+ key: "SubCategoryName",
+ align: "left",
+ width: "200px",
+ render: (text) => {text},
+ sorter: (a, b) => a?.SubCategoryName?.localeCompare(b.SubCategoryName),
+ sortOrder:
+ sortedInfo.columnKey === "SubCategoryName" ? sortedInfo.order : null,
+ ellipsis: true,
+ },
{
title: "Action",
@@ -172,97 +174,116 @@ const ApplicationList = () => {
dataIndex: "Action",
width: "200px",
align: "center",
- render: (_, record,index) =>
- applicationData.length >= 1 ? (
+ render: (_, record, index) =>
+ applicationData.length >= 1 ? (
+
-export default CenterPage;
\ No newline at end of file
+
+ {breadCrumb?.length > 0 && (
+
- )
-}
+
+
+
+ {UserName ? UserName : MobileNo ? MobileNo : "Guest"}{" "}
+ {UserType}
+
+
+
+
+
-
+
-
);
+};
-}
-
-export default ApplicationList;
\ No newline at end of file
+export default ApplicationList;
diff --git a/src/Pages/applicationImage/applicationImageForm.jsx b/src/Pages/applicationImage/applicationImageForm.jsx
index 1030e3a..a4aa056 100644
--- a/src/Pages/applicationImage/applicationImageForm.jsx
+++ b/src/Pages/applicationImage/applicationImageForm.jsx
@@ -228,7 +228,7 @@ const ApplicationImageForm = () => {
};
const columns = [
{
- title: "SI.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/branch/branchList.jsx b/src/Pages/branch/branchList.jsx
index 2bdb0b4..e4170aa 100644
--- a/src/Pages/branch/branchList.jsx
+++ b/src/Pages/branch/branchList.jsx
@@ -198,7 +198,7 @@ const BranchList = () => {
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "80px",
diff --git a/src/Pages/carousel/carouselForm.jsx b/src/Pages/carousel/carouselForm.jsx
index 4b1df6e..7039996 100644
--- a/src/Pages/carousel/carouselForm.jsx
+++ b/src/Pages/carousel/carouselForm.jsx
@@ -192,7 +192,7 @@ const CarouselForm = () => {
const columns = [
{
- title: 'SI.NO',
+ title: 'SL.NO',
key: 'sno',
align: 'center',
width: "100px",
diff --git a/src/Pages/ccavenueCustom/paymentDetails.jsx b/src/Pages/ccavenueCustom/paymentDetails.jsx
index 8db535d..939d22d 100644
--- a/src/Pages/ccavenueCustom/paymentDetails.jsx
+++ b/src/Pages/ccavenueCustom/paymentDetails.jsx
@@ -150,7 +150,7 @@ const PaymentDetails = () => {
}
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/ccavenueCustom/paymentMethod.jsx b/src/Pages/ccavenueCustom/paymentMethod.jsx
index 7d55b39..d2c6e8b 100644
--- a/src/Pages/ccavenueCustom/paymentMethod.jsx
+++ b/src/Pages/ccavenueCustom/paymentMethod.jsx
@@ -716,7 +716,7 @@ const PaymentMethod = () => {
}
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/commonMaster/CommonMaster.jsx b/src/Pages/commonMaster/CommonMaster.jsx
index 8cb2fe7..7a9030a 100644
--- a/src/Pages/commonMaster/CommonMaster.jsx
+++ b/src/Pages/commonMaster/CommonMaster.jsx
@@ -277,7 +277,7 @@ const CommonMaster = () => {
}
const columns = [
{
- title: 'SI.NO',
+ title: 'SL.NO',
key: 'sno',
align: 'center',
width: "60px",
diff --git a/src/Pages/company/companyList.jsx b/src/Pages/company/companyList.jsx
index 185e63d..16fa76e 100644
--- a/src/Pages/company/companyList.jsx
+++ b/src/Pages/company/companyList.jsx
@@ -190,7 +190,7 @@ const CompanyList = () => {
}
const columns = [
{
- title: "Si.No",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/configType/configtypeForm.jsx b/src/Pages/configType/configtypeForm.jsx
index dbc7d0a..2385825 100644
--- a/src/Pages/configType/configtypeForm.jsx
+++ b/src/Pages/configType/configtypeForm.jsx
@@ -165,7 +165,7 @@ const ConfigTypeForm = () => {
const columns = [
{
- title: 'SI.NO',
+ title: 'SL.NO',
align: "center",
key: 'sno',
width: "100px",
diff --git a/src/Pages/currency/currencyForm.jsx b/src/Pages/currency/currencyForm.jsx
index 57d47bb..f3da741 100644
--- a/src/Pages/currency/currencyForm.jsx
+++ b/src/Pages/currency/currencyForm.jsx
@@ -169,7 +169,7 @@ const CurrencyForm = () => {
const columns = [
{
- title: "SI.NO",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/feature/featureList.jsx b/src/Pages/feature/featureList.jsx
index 936ad99..77e85fc 100644
--- a/src/Pages/feature/featureList.jsx
+++ b/src/Pages/feature/featureList.jsx
@@ -113,7 +113,7 @@ const FeatureList = () => {
const columns = [
{
- title: "SI.NO",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "100px",
diff --git a/src/Pages/homeApp/appList.jsx b/src/Pages/homeApp/appList.jsx
index 91b8e28..ab722e6 100644
--- a/src/Pages/homeApp/appList.jsx
+++ b/src/Pages/homeApp/appList.jsx
@@ -30,7 +30,7 @@ import {
getfeatconstrains,
getallplanDtl,
postDowngrade,
- putFeaturechange
+ putFeaturechange,
} from "../../features/appAccessPage/appAccessPage.js";
import "../../Pages/homeApp/Homeapp.scss";
import { Messages } from "../../Components/Notifications/Messages.jsx";
@@ -45,8 +45,6 @@ import { IoIosSearch } from "react-icons/io";
import { FiFilter } from "react-icons/fi";
import { FaArrowRight } from "react-icons/fa6";
-
-
const subDirectory = import.meta.env.ENV_BASE_URL;
const AppList = () => {
@@ -55,7 +53,7 @@ const AppList = () => {
const [form] = Form.useForm();
const [purchasedApp, setPurchasedApp] = useState([]);
- console.log("purchasedApp", purchasedApp)
+ console.log("purchasedApp", purchasedApp);
const [allApps, setAllApps] = useState([]);
const [modalVisible, setModalVisible] = useState(false);
const [branchVisible, setBranchVisible] = useState(false);
@@ -77,9 +75,9 @@ const AppList = () => {
const companyData = useSelector(appCompanyDataSelector);
const branchData = useSelector(appBranchDataSelector);
- const [viewMode, setViewMode] = useState('list') // grid, list
+ const [viewMode, setViewMode] = useState("list"); // grid, list
- const UserType = getSession("UserType") ? getSession("UserType") : null
+ const UserType = getSession("UserType") ? getSession("UserType") : null;
const [DowngradeModal, setDowngradeModal] = useState(false);
const [Featconstrains, setFeatconstrains] = useState(null);
const [radioValue, setRadioValue] = useState("Company");
@@ -95,25 +93,25 @@ const AppList = () => {
const [UniqueId, setUniqueId] = useState();
const [page, setpage] = useState(1);
-
const handleCancel = () => {
form.resetFields();
setModalVisible(false);
setBranchVisible(false);
};
- const handleSubmit = useCallback((eachapps, DownGrade) => {
- setModalVisible(false);
- setBranchVisible(false);
+ const handleSubmit = useCallback(
+ (eachapps, DownGrade) => {
+ setModalVisible(false);
+ setBranchVisible(false);
- if ((eachapps?.AppName) && (DownGrade === false)) {
- sessionStore("AppId", eachApp.AppId);
- sessionStore("AppName", eachApp.AppName);
- navigate(`${eachApp.AppUrl}`);
- window.location.reload();
- }
- form.resetFields();
- },
+ if (eachapps?.AppName && DownGrade === false) {
+ sessionStore("AppId", eachApp.AppId);
+ sessionStore("AppName", eachApp.AppName);
+ navigate(`${eachApp.AppUrl}`);
+ window.location.reload();
+ }
+ form.resetFields();
+ },
[eachApp]
);
@@ -147,13 +145,14 @@ const AppList = () => {
}
if (res?.data?.statusCode) {
if (UserType === "Employee" || UserType === "Super Admin User") {
- const data = res?.data?.data?.filter(item => item?.ActiveStatus === 'A') || [];
- setPurchasedApp(data);
- setAllApps(data);
- } else {
- const data = res?.data?.data || [];
- setPurchasedApp(data);
- setAllApps(data);
+ const data =
+ res?.data?.data?.filter((item) => item?.ActiveStatus === "A") || [];
+ setPurchasedApp(data);
+ setAllApps(data);
+ } else {
+ const data = res?.data?.data || [];
+ setPurchasedApp(data);
+ setAllApps(data);
}
}
}
@@ -162,7 +161,9 @@ const AppList = () => {
}, []);
const navigateToPricing = (e) => {
- navigate(`${subDirectory}${e.AppName}`, { state: { AppName: e.AppName, AdminId: e.AdminId ? e.AdminId : UserId } });
+ navigate(`${subDirectory}${e.AppName}`, {
+ state: { AppName: e.AppName, AdminId: e.AdminId ? e.AdminId : UserId },
+ });
};
const getDefaultFun = async (AppId, AppName, eachApp, conditionDownGrade) => {
@@ -179,7 +180,8 @@ const AppList = () => {
sessionStore("BranchId", GetDefault?.data?.data?.[0]?.BranchId);
if (
(UserType != "Super Admin" || UserType != "Super Admin User") &&
- eachApp.ValidityEnd >= formattedDate && conditionDownGrade
+ eachApp.ValidityEnd >= formattedDate &&
+ conditionDownGrade
) {
navigate(`${eachApp.AppUrl}`);
window.location.reload();
@@ -214,8 +216,17 @@ const AppList = () => {
);
}
- if (eachApp?.RemainingDays < 0 && (UserType !== "Super Admin User" && UserType !== "Super Admin")) {
- navigate(`${subDirectory}${AppName}`, { state: { AppName: AppName, AdminId: eachApp?.AdminId ? eachApp?.AdminId : UserId } });
+ if (
+ eachApp?.RemainingDays < 0 &&
+ UserType !== "Super Admin User" &&
+ UserType !== "Super Admin"
+ ) {
+ navigate(`${subDirectory}${AppName}`, {
+ state: {
+ AppName: AppName,
+ AdminId: eachApp?.AdminId ? eachApp?.AdminId : UserId,
+ },
+ });
sessionStore("AppId", AppId);
sessionStore("AppName", AppName);
}
@@ -226,50 +237,67 @@ const AppList = () => {
let ActiveBranchCount = Featconstrains?.[0]?.BranchCount;
let ActiveUserCount = Featconstrains?.[0]?.UserCount;
- var NewplanComp = Featconstrains?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "Company")?.FeatConstraint;
- var NewplanBranch = Featconstrains?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "Branch")?.FeatConstraint;
- var NewplanUser = Featconstrains?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "User")?.FeatConstraint;
+ var NewplanComp = Featconstrains?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "Company"
+ )?.FeatConstraint;
+ var NewplanBranch = Featconstrains?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "Branch"
+ )?.FeatConstraint;
+ var NewplanUser = Featconstrains?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "User"
+ )?.FeatConstraint;
const OrganizationNewCreation = (data, ValidityEnd, conditionDownGrade) => {
- console.log(data, ValidityEnd, conditionDownGrade, "!!!!!!!!!!!!!!!!!!!!!!");
-
- const isBranchActive = data?.some(company =>
- company.BranchDetails?.some(branch => branch.ActiveStatus === "A")
+ console.log(
+ data,
+ ValidityEnd,
+ conditionDownGrade,
+ "!!!!!!!!!!!!!!!!!!!!!!"
);
- if (data?.length === 0 && UserType === "Admin" && ValidityEnd >= formattedDate) {
+ const isBranchActive = data?.some((company) =>
+ company.BranchDetails?.some((branch) => branch.ActiveStatus === "A")
+ );
+
+ if (
+ data?.length === 0 &&
+ UserType === "Admin" &&
+ ValidityEnd >= formattedDate
+ ) {
setModalVisible(false);
setMessageType("warning");
setMessageData("Please create an company to further process");
setTimeout(() => {
navigate(`${subDirectory}setting/company-master/new`);
}, 500);
- }
- else if (!isBranchActive) {
+ } else if (!isBranchActive) {
setModalVisible(false);
setMessageType("warning");
setMessageData("Please create or Activate a branch to further process");
setTimeout(() => {
navigate(`${subDirectory}setting/branch-master`);
}, 500);
- }
- else if (conditionDownGrade) {
+ } else if (conditionDownGrade) {
setModalVisible(false);
- }
- else {
+ } else {
setModalVisible(true);
}
};
const applicationNavigate = useCallback(async (eachApp) => {
-
- let res = await dispatch(getCompanyDataBasedOnApp({ AppId: eachApp?.AppId, UserId: UserId })).unwrap();
- let dataa = res?.data?.data
- const isBranchActive = dataa?.some(company =>
- company.BranchDetails?.some(branch => branch.ActiveStatus === "A")
+ let res = await dispatch(
+ getCompanyDataBasedOnApp({ AppId: eachApp?.AppId, UserId: UserId })
+ ).unwrap();
+ let dataa = res?.data?.data;
+ const isBranchActive = dataa?.some((company) =>
+ company.BranchDetails?.some((branch) => branch.ActiveStatus === "A")
);
console.log(res?.data?.data, !isBranchActive, "res?.data?.data");
- if (!isBranchActive && UserType != "Super Admin" && UserType != "Super Admin User") {
+ if (
+ !isBranchActive &&
+ UserType != "Super Admin" &&
+ UserType != "Super Admin User"
+ ) {
setModalVisible(false);
setMessageType("warning");
setMessageData("Please create or Activate a branch to further process");
@@ -277,28 +305,29 @@ const AppList = () => {
navigate(`${subDirectory}setting/branch-master`);
}, 500);
} else {
-
- setUniqueId(eachApp?.UniqueId)
- let Checkdata = []
+ setUniqueId(eachApp?.UniqueId);
+ let Checkdata = [];
let data = {
- 'AppId': eachApp?.AppId,
- 'UserId': UserType === 'Employee' ? eachApp?.AdminId : eachApp?.UserId,
- 'UniqueId': eachApp?.UniqueId,
- 'PricingId': eachApp?.PricingId
+ AppId: eachApp?.AppId,
+ UserId: UserType === "Employee" ? eachApp?.AdminId : eachApp?.UserId,
+ UniqueId: eachApp?.UniqueId,
+ PricingId: eachApp?.PricingId,
};
let Response = await dispatch(getfeatconstrains(data)).unwrap();
- if (Response?.data?.statusCode == 1, "Response") {
- setFeatconstrains(Response?.data?.data)
- Checkdata = Response?.data?.data
+ if ((Response?.data?.statusCode == 1, "Response")) {
+ setFeatconstrains(Response?.data?.data);
+ Checkdata = Response?.data?.data;
}
- let datas = { 'AppId': eachApp?.AppId, 'UserId': UserType === 'Employee' ? eachApp?.AdminId : UserId };
+ let datas = {
+ AppId: eachApp?.AppId,
+ UserId: UserType === "Employee" ? eachApp?.AdminId : UserId,
+ };
let Responses = await dispatch(getallplanDtl(datas)).unwrap();
let GetstatusCode = Responses?.data?.statusCode == 0;
- setStatuscode(GetstatusCode)
-
+ setStatuscode(GetstatusCode);
if (Responses?.data?.statusCode == 1) {
const Data = Responses?.data?.data;
@@ -327,13 +356,26 @@ const AppList = () => {
let ActiveBranchCount = Checkdata?.[0]?.BranchCount;
let ActiveUserCount = Checkdata?.[0]?.UserCount;
+ var NewplanComp = Checkdata?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "Company"
+ )?.FeatConstraint;
+ var NewplanBranch = Checkdata?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "Branch"
+ )?.FeatConstraint;
+ var NewplanUser = Checkdata?.[0]?.FeatureDetails?.find(
+ (detail) => detail.FeatName === "User"
+ )?.FeatConstraint;
- var NewplanComp = Checkdata?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "Company")?.FeatConstraint;
- var NewplanBranch = Checkdata?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "Branch")?.FeatConstraint;
- var NewplanUser = Checkdata?.[0]?.FeatureDetails?.find((detail) => detail.FeatName === "User")?.FeatConstraint;
-
- let conditionDownGrade = (NewplanComp < ActiveCompanyCount || NewplanBranch < ActiveBranchCount || NewplanUser < ActiveUserCount)
- getDefaultFun(eachApp.AppId, eachApp.AppName, eachApp, conditionDownGrade);
+ let conditionDownGrade =
+ NewplanComp < ActiveCompanyCount ||
+ NewplanBranch < ActiveBranchCount ||
+ NewplanUser < ActiveUserCount;
+ getDefaultFun(
+ eachApp.AppId,
+ eachApp.AppName,
+ eachApp,
+ conditionDownGrade
+ );
}
}, []);
@@ -390,11 +432,15 @@ const AppList = () => {
setChecked(e.target.checked);
};
- // Demo details based on purchasedApp data
- const totalApps = purchasedApp.length;
- const activeApps = purchasedApp.filter(app => app?.RemainingDays > 0).length;
- const expiredApps = purchasedApp.filter(app => app?.RemainingDays <= 0).length;
- const appTypes = [...new Set(purchasedApp.map(app => app.AppName))].length;
+ // Demo details based on purchasedApp data
+ const totalApps = purchasedApp.length;
+ const activeApps = purchasedApp.filter(
+ (app) => app?.RemainingDays > 0
+ ).length;
+ const expiredApps = purchasedApp.filter(
+ (app) => app?.RemainingDays <= 0
+ ).length;
+ const appTypes = [...new Set(purchasedApp.map((app) => app.AppName))].length;
const purchasedAppCard = purchasedApp?.map((eachApp) => {
let divColour = "appCard";
@@ -426,10 +472,12 @@ const AppList = () => {
}}
>
-
-
-
-
-
+
-
+
+
+
+
+
-
-
{
}}
>
{
}}
>
{
}}
>
{
>
- Your Eligible Company's For This Current Plan is :{" "}
- {NewplanComp} & Deactivate : {CompanyDeactive}{" "}
- Company's
-
- Your Eligible Branches For This Current Plan is:{" "}
- {NewplanBranch}
- Deactivate: {BranchDeactive} Branch's
- Your Eligible User's For This Current Plan is :{" "}
- {NewplanUser}{" "}
- Deactivate: {UserDeactive} User's
+ Your Eligible Company's For This Current Plan is :{" "}
+ {NewplanComp} & Deactivate : {CompanyDeactive} Company's
+
+ Your Eligible Branches For This Current Plan is:{" "}
+ {NewplanBranch}
+ Deactivate: {BranchDeactive} Branch's
+ Your Eligible User's For This Current Plan is :{" "}
+ {NewplanUser}{" "}
+ Deactivate: {UserDeactive} User's simple | speed | smart | secure Experience Now Experience Now Accounting
{" "}
- It is all about keeping tabs on all the money moving through the store - from sales to expenses - to ensure the business stays profitable and organized{" "}
+ It is all about keeping tabs on all the money moving through
+ the store - from sales to expenses - to ensure the business
+ stays profitable and organized{" "}
- POZO billing software simplifies billing processes by providing customization, automation, and integrated with payment gateways.
+ POZO billing software simplifies billing processes by providing
+ customization, automation, and integrated with payment gateways.
{a?.CategoryName}
MOBILE APPS
{templateData["Testimonials"]?.[0] == "Testimonials1" && (
-
{templateData["Features"]?.[0] == "Features1" && (
diff --git a/src/Pages/themeTemplate/TemplateComps/CTASection/CTASection.jsx b/src/Pages/themeTemplate/TemplateComps/CTASection/CTASection.jsx
index 361afe4..f343a1a 100644
--- a/src/Pages/themeTemplate/TemplateComps/CTASection/CTASection.jsx
+++ b/src/Pages/themeTemplate/TemplateComps/CTASection/CTASection.jsx
@@ -2,10 +2,12 @@ import React from 'react';
import { FaArrowRight } from 'react-icons/fa';
import './CTASection.scss';
import WebFont from 'webfontloader';
+import { useNavigate } from "react-router-dom";
const CTASection = () => {
-
+ const navigate = useNavigate();
+ const subDirectory = import.meta.env.BASE_URL || '';
useEffect(() => {
if (CurrentText["head"], CurrentText["para"]) {
@@ -47,11 +49,11 @@ const CTASection = () => {
@@ -730,12 +740,13 @@ const UserForm = ({ formType }) => {
ref={formRef}
className="formDivAnt"
onFinish={onFinish}
- initialValues={{ ...editstate, UserImage: editstate?.UserImage }}>
+ initialValues={{ ...editstate, UserImage: editstate?.UserImage }}
+ >
{/* UserType */}
{UserType === "Super Admin" ||
- UserType === "Super Admin User" ? (
+ UserType === "Super Admin User" ? (
diff --git a/src/Pages/user/userList.jsx b/src/Pages/user/userList.jsx
index 2542354..28ea770 100644
--- a/src/Pages/user/userList.jsx
+++ b/src/Pages/user/userList.jsx
@@ -27,7 +27,7 @@ import {
putResetUserData,
postResetPinPasswordSms,
postResetPinPasswordEmail,
- getAllUserData
+ getAllUserData,
} from "../../features/userPage/userPage.js";
import { getSession } from "../../Services/others";
import FormHeader from "../pageComponents/FormHeader.jsx";
@@ -45,9 +45,8 @@ let content = [
{ value: "Marketing", label: "Marketing" },
];
let radioContent = [
- { value: "Pin", label: "Pin", },
- { value: "Password", label: "Password", },
-
+ { value: "Pin", label: "Pin" },
+ { value: "Password", label: "Password" },
];
const items = [
@@ -57,7 +56,7 @@ const items = [
},
{
- name: "UserCreation",
+ name: "User Creation",
link: `${subDirectory}setting/user-master`,
},
];
@@ -89,29 +88,22 @@ const UserList = () => {
getSession("UserId") ? getSession("UserId") : null
);
-
-
const CommonData = useSelector(userDataSelector);
- const SuperAdminUserAccess = useSelector(SuperAdminUserAccessDataSelector)
-
+ const SuperAdminUserAccess = useSelector(SuperAdminUserAccessDataSelector);
useEffect(() => {
-
- fetchUser()
- }, [UserId])
+ fetchUser();
+ }, [UserId]);
const fetchUser = async () => {
-
let res = await dispatch(getUserBasedConstraint(UserId)).unwrap();
if (res?.data?.statusCode === 1) {
- console.log(res?.data?.data, "res?.data?.RemainingCompanyCount")
- setUserConstraintData(res?.data?.data?.RemainingUserCount)
- }
- else if (res?.data?.statusCode === 0) {
+ console.log(res?.data?.data, "res?.data?.RemainingCompanyCount");
+ setUserConstraintData(res?.data?.data?.RemainingUserCount);
+ } else if (res?.data?.statusCode === 0) {
setUserConstraintData(0);
}
- }
-
+ };
const handleChange = (pagination, filters, sorter) => {
setFilteredInfo(filters);
@@ -131,74 +123,60 @@ const UserList = () => {
const onChange = async (e) => {
const typeMap = {
- "Admin": "AF",
+ Admin: "AF",
"Super Admin User": "SF",
- "Employee": "EF",
- "Marketing": 'M'
+ Employee: "EF",
+ Marketing: "M",
};
const type = typeMap[e] || null;
// await dispatch(getUserData()).unwrap()
- let res = await dispatch(getAllUserData(type)).unwrap()
+ let res = await dispatch(getAllUserData(type)).unwrap();
setRadioDefalut(e);
- setAdminNames([])
+ setAdminNames([]);
if (res?.data?.statusCode == 1) {
if (e === "Super Admin User") {
- setSelectedAdminNames(null)
+ setSelectedAdminNames(null);
setShowAdminDropDown(false);
- setCommonDataFilter(res?.data?.data)
+ setCommonDataFilter(res?.data?.data);
} else if (e === "Employee") {
setShowAdminDropDown(true);
- setAdminNames(res?.data?.data)
- onChangeAdminNames(SelectedAdminNames)
- setCommonDataFilter(res?.data?.data)
+ setAdminNames(res?.data?.data);
+ onChangeAdminNames(SelectedAdminNames);
+ setCommonDataFilter(res?.data?.data);
} else {
- setSelectedAdminNames(null)
+ setSelectedAdminNames(null);
setShowAdminDropDown(false);
- setCommonDataFilter(res?.data?.data)
+ setCommonDataFilter(res?.data?.data);
}
+ } else {
+ setMessageType("error");
+ setMessageData(res?.data?.response);
}
- else {
- setMessageType("error")
- setMessageData(res?.data?.response)
- }
- }
+ };
const onChangeAdminNames = async (e) => {
- setSelectedAdminNames(e)
+ setSelectedAdminNames(e);
// /user?UserType=A&UserId=2
let userData = await dispatch(getBasedAdminUserData(e)).unwrap();
if (userData?.data?.statusCode == 1) {
- setCommonDataFilter(userData?.data?.data)
+ setCommonDataFilter(userData?.data?.data);
+ } else {
+ setCommonDataFilter([]);
}
- else {
- setCommonDataFilter([])
- }
-
-
- }
-
-
+ };
useEffect(() => {
if (RadioDefalut === null) {
- setCommonDataFilter(CommonData)
+ setCommonDataFilter(CommonData);
}
-
-
- }, [CommonData])
-
-
+ }, [CommonData]);
useEffect(() => {
if (RadioDefalut != null) {
- onChange(RadioDefalut)
+ onChange(RadioDefalut);
}
-
-
- }, [delHandel])
-
-
+ }, [delHandel]);
useEffect(() => {
try {
@@ -220,7 +198,6 @@ const UserList = () => {
const onComplete = useCallback(() => {
setMessageData(null);
setMessageType(null);
-
}, []);
const [form] = Form.useForm();
@@ -234,15 +211,30 @@ const UserList = () => {
}
};
-
const statusFormatter1 = async (row) => {
if (row?.BrActiveStatus !== "D") {
- let Response = await dispatch(checkTrialCompany({ UserId: UserType === "Admin" ? UserId : row?.UserTypeName == "Employee" ? row?.AdminId : row?.UserId, AppId: row?.AppId })).unwrap();
- let y = Response?.data?.data[0]?.UserCount + 1
- let x = Response?.data?.data[0]?.FeatureDetails?.filter((e) => e.FeatName == "User")[0]?.FeatConstraint;
+ let Response = await dispatch(
+ checkTrialCompany({
+ UserId:
+ UserType === "Admin"
+ ? UserId
+ : row?.UserTypeName == "Employee"
+ ? row?.AdminId
+ : row?.UserId,
+ AppId: row?.AppId,
+ })
+ ).unwrap();
+ let y = Response?.data?.data[0]?.UserCount + 1;
+ let x = Response?.data?.data[0]?.FeatureDetails?.filter(
+ (e) => e.FeatName == "User"
+ )[0]?.FeatConstraint;
//naresh
- if ((y < x) || (row?.PlanPurchase === "N" && row?.UserTypeName !== "Employee") || (row?.UserTypeName == "Admin")) {
- setdelHandel(false)
+ if (
+ y < x ||
+ (row?.PlanPurchase === "N" && row?.UserTypeName !== "Employee") ||
+ row?.UserTypeName == "Admin"
+ ) {
+ setdelHandel(false);
let deleteData = {
UserId: row.UserId,
ActiveStatus: row.ActiveStatus == "A" ? "D" : "A",
@@ -250,7 +242,7 @@ const UserList = () => {
};
let response = await dispatch(deleteUserData(deleteData)).unwrap();
if (response?.data?.statusCode == 1) {
- fetchUser()
+ fetchUser();
if (UserType === "Admin") {
await dispatch(getBasedUserData(UserId)).unwrap();
} else {
@@ -263,26 +255,22 @@ const UserList = () => {
: "User Activated Successfully"
);
- setdelHandel(true)
-
+ setdelHandel(true);
}
-
- }
- else {
+ } else {
setMessageType("error");
- setMessageData("You need to delete one user if you wanna add this user");
+ setMessageData(
+ "You need to delete one user if you wanna add this user"
+ );
}
-
- }
- else {
+ } else {
setMessageType("error");
setMessageData("You need to activate your branch");
}
-
};
const statusFormatter = async (row) => {
- setdelHandel(false)
+ setdelHandel(false);
let deleteData = {
UserId: row.UserId,
ActiveStatus: row.ActiveStatus == "A" ? "D" : "A",
@@ -290,7 +278,7 @@ const UserList = () => {
};
let response = await dispatch(deleteUserData(deleteData)).unwrap();
if (response?.data?.statusCode == 1) {
- fetchUser()
+ fetchUser();
if (UserType === "Admin") {
await dispatch(getBasedUserData(UserId)).unwrap();
} else {
@@ -303,18 +291,13 @@ const UserList = () => {
: "User Activated Successfully"
);
- setdelHandel(true)
-
+ setdelHandel(true);
}
-
};
-
-
-
const columns = [
{
- title: "SI.NO",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "80px",
@@ -348,9 +331,7 @@ const UserList = () => {
dataIndex: "UserTypeName",
key: "UserTypeName",
align: "left",
- render: (text) => (
- {text}
- ),
+ render: (text) => {text},
},
{
@@ -380,17 +361,24 @@ const UserList = () => {
key: "Password",
align: "right",
width: "100px",
- render: (text) => {UserType == "Super Admin User" ? (text ? "****" : "") : text},
+ render: (text) => (
+
+ {UserType == "Super Admin User" ? (text ? "****" : "") : text}
+
+ ),
},
{
title: "Pin",
dataIndex: "Pin",
key: "Pin",
align: "right",
- render: (text) => {UserType == "Super Admin User" ? (text ? "****" : "") : text},
+ render: (text) => (
+
+ {UserType == "Super Admin User" ? (text ? "****" : "") : text}
+
+ ),
},
-
{
title: "Action",
key: "Action",
@@ -401,13 +389,16 @@ const UserList = () => {
- {ApplicationDisabled || formType == "edit" && (
-
Application : {AppNames?.find(option => option.AppId === SelectedApp)?.AppName} - )} +
+ {ApplicationDisabled ||
+ (formType == "edit" && (
+
>
) : null}
{SelectedRoles != "Super Admin User" &&
- SelectedRoles != "Admin" &&
- SelectedRoles != "Marketing" &&
- formType != "edit" ? (
+ SelectedRoles != "Admin" &&
+ SelectedRoles != "Marketing" &&
+ formType != "edit" ? (
+ Application :{" "} + { + AppNames?.find( + (option) => option.AppId === SelectedApp + )?.AppName + } + + ))} {companyDisabled && SelectedCompany && ( -Company : {CompanyNames?.find(option => option.CompId === SelectedCompany)?.CompName} ++ Company :{" "} + { + CompanyNames?.find( + (option) => option.CompId === SelectedCompany + )?.CompName + } + )} - {(BranchDisabled && SelectedBranch) && ( -Branch : {BranchNames?.find(option => option.BrId === SelectedBranch)?.BrName} + {BranchDisabled && SelectedBranch && ( ++ Branch :{" "} + { + BranchNames?.find( + (option) => option.BrId === SelectedBranch + )?.BrName + } + )} */}
*/}
-
-
-
-
>
-
-
-
Upload Profile @@ -1086,24 +1152,19 @@ const UserForm = ({ formType }) => { ImageLink={formType == "edit" ? imageUrl : null} />Address Details
+
- {resignationReqModal && SelectedApp && SelectedBranch && SelectedCompany && (
-
-
-
-
-
- {showMap &&
-
+ {showMap && (
+
@@ -1361,80 +1420,110 @@ const UserForm = ({ formType }) => {
htmlType={true}
// disabled={Disable && UserType !== "Super Admin" && UserType !== "Super Admin User"}
disabled={
- UserType === "Super Admin" ? false :
- (Disable || SuperAdminUserAccess?.find((e) => e?.ConfigName === "User Creation")?.AddAccess === "N")
+ UserType === "Super Admin"
+ ? false
+ : Disable ||
+ SuperAdminUserAccess?.find(
+ (e) => e?.ConfigName === "User Creation"
+ )?.AddAccess === "N"
}
/>
User Already Registered-
-
-
-
- - This user is already registered with another company. - You can send a relieving request to the concerned company to transfer the user. - -
-
-
- User Information-Mobile No: {existUserData?.UserMobileNo}
- User Name: {existUserData?.UserName}
-
-
-
-
- Company Contact Information-Company Name: {existUserData?.CompanyName}
- {existUserData?.AdminUserName && (
- Proprietor: {existUserData?.AdminUserName}
- )}
- {existUserData?.AdminMobileNo && (
- Proprietor Mobile No: {existUserData?.AdminMobileNo}
- )}
-
-
+ >
+ }
+ />
+ )}
User Already Registered+
+
- >
- }
- />)
- }
+
+
-
-
-
-
- + This user is already registered with another company. + You can send a relieving request to the concerned + company to transfer the user. +
+
+
+ User Information+
+ Mobile No:{" "}
+ {existUserData?.UserMobileNo}
+
+
+ User Name: {existUserData?.UserName}
+
+
+
+
+ Company Contact Information+
+ Company Name:{" "}
+ {existUserData?.CompanyName}
+
+ {existUserData?.AdminUserName && (
+
+ Proprietor:{" "}
+ {existUserData?.AdminUserName}
+
+ )}
+ {existUserData?.AdminMobileNo && (
+
+ Proprietor Mobile No:{" "}
+
+ {existUserData?.AdminMobileNo}
+
+
+ )}
+
+
+
+
+
+
+
+ );
+ },
+ },
+ ]
+ : []),
];
const MessageSmsOnclick = async (row) => {
let postData = {
- "UserId": row?.UserId,
- "Type": radioValue.value
- }
- let response = await dispatch(postResetPinPasswordSms(postData))?.unwrap()
+ UserId: row?.UserId,
+ Type: radioValue.value,
+ };
+ let response = await dispatch(postResetPinPasswordSms(postData))?.unwrap();
if (response?.data?.statusCode == 1) {
- setMessageType("success")
- setMessageData(response?.data?.response)
+ setMessageType("success");
+ setMessageData(response?.data?.response);
}
-
- }
+ };
const MessageEmailOnclick = async (row) => {
let postData = {
- "UserId": row?.UserId,
- "Type": radioValue.value
- }
- let response = await dispatch(postResetPinPasswordEmail(postData))?.unwrap()
+ UserId: row?.UserId,
+ Type: radioValue.value,
+ };
+ let response = await dispatch(
+ postResetPinPasswordEmail(postData)
+ )?.unwrap();
if (response?.data?.statusCode == 1) {
- setMessageType("success")
- setMessageData(response?.data?.response)
+ setMessageType("success");
+ setMessageData(response?.data?.response);
}
-
- }
-
+ };
const selectValue = (e, row) => {
let data = {
value: e?.target?.value,
- id: row?.UserId
- }
- seradioValue(data)
- }
-
-
+ id: row?.UserId,
+ };
+ seradioValue(data);
+ };
const SendFun = (row) => {
if (row?.UserId == radioValue?.id) {
- if ((row?.Pin || row?.Password)) {
-
+ if (row?.Pin || row?.Password) {
// if (row.Pin && radioValue?.value || row.Password === radioValue?.value) {
// setIconsVisible({
// id: row.UserId,
@@ -553,100 +625,92 @@ const UserList = () => {
if (row.Pin) {
let data = {
id: row?.UserId,
- value: true
- }
- setIconsVisible(data)
- }
- else {
- setMessageType("warning")
- setMessageData("Please Reset pin")
+ value: true,
+ };
+ setIconsVisible(data);
+ } else {
+ setMessageType("warning");
+ setMessageData("Please Reset pin");
let data = {
id: row?.UserId,
- value: false
- }
- setIconsVisible(data)
+ value: false,
+ };
+ setIconsVisible(data);
}
- }
- else if (radioValue?.value == "Password") {
+ } else if (radioValue?.value == "Password") {
if (row.Password) {
let data = {
id: row?.UserId,
- value: true
- }
- setIconsVisible(data)
- }
- else {
- setMessageType("warning")
- setMessageData("Please Reset Password")
+ value: true,
+ };
+ setIconsVisible(data);
+ } else {
+ setMessageType("warning");
+ setMessageData("Please Reset Password");
let data = {
id: row?.UserId,
- value: false
- }
- setIconsVisible(data)
+ value: false,
+ };
+ setIconsVisible(data);
}
}
-
-
-
- }
- else {
- setMessageType("warning")
- setMessageData("Please Reset pin or password")
+ } else {
+ setMessageType("warning");
+ setMessageData("Please Reset pin or password");
}
+ } else {
+ setMessageType("warning");
+ setMessageData(" select pin or password");
}
- else {
- setMessageType("warning")
- setMessageData(" select pin or password")
- }
- }
+ };
const resetFun = async (row) => {
-
if (row?.UserId === radioValue?.id) {
let postData = {
- "UserId": row?.UserId,
- "Type": radioValue.value,
- "UpdatedBy": row?.UserId,
- }
- let response = await dispatch(putResetUserData(postData))?.unwrap()
+ UserId: row?.UserId,
+ Type: radioValue.value,
+ UpdatedBy: row?.UserId,
+ };
+ let response = await dispatch(putResetUserData(postData))?.unwrap();
if (response?.data?.statusCode == 1) {
- setMessageType("success")
- setMessageData(response?.data?.response)
+ setMessageType("success");
+ setMessageData(response?.data?.response);
let res = await dispatch(getUserData()).unwrap();
- let responseData = res?.data?.data
+ let responseData = res?.data?.data;
if (RadioDefalut == "Admin") {
- setSelectedAdminNames(null)
+ setSelectedAdminNames(null);
setShowAdminDropDown(false);
- setCommonDataFilter(responseData.filter((a) => a.UserTypeName === "Admin"))
+ setCommonDataFilter(
+ responseData.filter((a) => a.UserTypeName === "Admin")
+ );
}
if (RadioDefalut === "Super Admin User") {
- setSelectedAdminNames(null)
+ setSelectedAdminNames(null);
setShowAdminDropDown(false);
- setCommonDataFilter(responseData.filter((a) => a.UserTypeName === "Super Admin User"))
+ setCommonDataFilter(
+ responseData.filter((a) => a.UserTypeName === "Super Admin User")
+ );
} else if (RadioDefalut === "Employee") {
setShowAdminDropDown(true);
- setAdminNames(responseData.filter((a) => a.UserTypeName === "Admin"))
- onChangeAdminNames(SelectedAdminNames)
+ setAdminNames(responseData.filter((a) => a.UserTypeName === "Admin"));
+ onChangeAdminNames(SelectedAdminNames);
} else {
- setSelectedAdminNames(null)
+ setSelectedAdminNames(null);
setShowAdminDropDown(false);
- setCommonDataFilter(responseData.filter((a) => a.UserTypeName === "Admin"))
+ setCommonDataFilter(
+ responseData.filter((a) => a.UserTypeName === "Admin")
+ );
}
-
- }
- else {
- setMessageType("error")
- setMessageData(response?.data?.response)
+ } else {
+ setMessageType("error");
+ setMessageData(response?.data?.response);
}
+ } else {
+ setMessageType("warning");
+ setMessageData("Please select pin or password");
}
- else {
- setMessageType("warning")
- setMessageData("Please select pin or password")
- }
-
- }
-
+ };
const WhatsOnclicksendmsg = (row) => {
let postData = {
@@ -654,28 +718,31 @@ const UserList = () => {
Pin: row?.Pin,
Password: row?.Password,
};
- console.log(postData, "postDatajkhjksd5345")
+ console.log(postData, "postDatajkhjksd5345");
if (radioValue.value == "Pin" && postData?.Pin == undefined) {
setMessageType("error");
setMessageData("Please Reset pin ");
return;
- }
- else if (radioValue.value == "Password" && postData?.Password == undefined) {
+ } else if (
+ radioValue.value == "Password" &&
+ postData?.Password == undefined
+ ) {
setMessageType("error");
setMessageData("Please Reset password");
return;
}
let whatsappMessage = `Hello, your ${radioValue.value} is: ${postData.Pin}`;
- let whatsappURL = `https://wa.me/${postData.MobileNo
- }?text=${encodeURIComponent(whatsappMessage)}`;
+ let whatsappURL = `https://wa.me/${
+ postData.MobileNo
+ }?text=${encodeURIComponent(whatsappMessage)}`;
window.open(whatsappURL, "_blank");
- }
+ };
const data = CommonDataFilter;
const handelAddButton = () => {
- navigateTo(`${subDirectory}setting/user-master/new`)
- }
+ navigateTo(`${subDirectory}setting/user-master/new`);
+ };
return (
+
+ {/*
+
+
- return (
-
+ {object?.MobileNo && (
+ WhatsOnclicksendmsg(object)}>
+
+ ) : (
+
+ )}
+
+
-
- );
- },
- }] : []),
+ {/*
-
- {/*
-
-
-
- {/*
- {object?.MobileNo && WhatsOnclicksendmsg(object)}>
- : }
-
-
@@ -698,7 +765,7 @@ const UserList = () => {
onSearchChange={onSearchChange}
/>
- {UserType != "Admin" ?
+ {UserType != "Admin" ? (
- {showData &&
-
+ );
+};
+
+export default UserName;
diff --git a/src/Pages/userAccount/userAccount.jsx b/src/Pages/userAccount/userAccount.jsx
index 28f983a..7381dc9 100644
--- a/src/Pages/userAccount/userAccount.jsx
+++ b/src/Pages/userAccount/userAccount.jsx
@@ -1,147 +1,155 @@
-import { useEffect, useState } from 'react';
-import '../../styles/userAccount/userAccount.scss'
-import MyProfile from './myProfile';
-import { useDispatch } from 'react-redux';
-import { getUserDataByUserId } from '../../features/userAccount/userAccount'
-import { clearSession, getSession } from '../../Services/others';
-import SecurityPage from './securityPage';
-import LogsPage from './logsPage';
-import { GrClose } from 'react-icons/gr';
-import { AiOutlineMenu } from 'react-icons/ai'
-import { MdOutlineLogout } from 'react-icons/md'
-import { useNavigate, useLocation } from 'react-router-dom';
-import { GenerateLogout } from '../../features/signInPage/signInPage';
-import ReferalPage from './ReferalPage';
+import { useEffect, useState } from "react";
+import "../../styles/userAccount/userAccount.scss";
+import MyProfile from "./myProfile";
+import { useDispatch } from "react-redux";
+import { getUserDataByUserId } from "../../features/userAccount/userAccount";
+import { clearSession, getSession } from "../../Services/others";
+import SecurityPage from "./securityPage";
+import LogsPage from "./logsPage";
+import { GrClose } from "react-icons/gr";
+import { AiOutlineMenu } from "react-icons/ai";
+import { MdOutlineLogout } from "react-icons/md";
+import { useNavigate, useLocation } from "react-router-dom";
+import { GenerateLogout } from "../../features/signInPage/signInPage";
+import ReferalPage from "./ReferalPage";
-
-const subDirectory = import.meta.env.ENV_BASE_URL
+const subDirectory = import.meta.env.ENV_BASE_URL;
const UserAccount = (status) => {
+ const dispatch = useDispatch();
+ const navigate = useNavigate();
+ const location = useLocation();
- const dispatch = useDispatch()
- const navigate = useNavigate()
- const location = useLocation();
-
- const [userProfile, setUserProfile] = useState(true)
- const [security, setSecurity] = useState(false)
- const [logs, setLogs] = useState(false)
- const [close, setClose] = useState(true)
- const [referral, setreferral] = useState(false)
-
- useEffect(() => {
- callApi()
- async function callApi() {
- const userId = getSession('UserId')
- await dispatch(getUserDataByUserId({ userId })).unwrap()
- }
- if (location?.state?.Notiffy) {
- setUserProfile(false)
- setSecurity(false)
- setreferral(false)
- setLogs(true)
- }
- }, [])
-
- const logout = async () => {
- const UserId = getSession('UserId')
- const status = "N"; // replace with your actual status
- const res = await dispatch(GenerateLogout({ UserId, status })).unwrap();
- if (res?.data?.statusCode === 1) {
- clearSession()
- navigate(`${subDirectory}`)
- }
+ const [userProfile, setUserProfile] = useState(true);
+ const [security, setSecurity] = useState(false);
+ const [logs, setLogs] = useState(false);
+ const [close, setClose] = useState(true);
+ const [referral, setreferral] = useState(false);
+ useEffect(() => {
+ callApi();
+ async function callApi() {
+ const userId = getSession("UserId");
+ await dispatch(getUserDataByUserId({ userId })).unwrap();
}
+ if (location?.state?.Notiffy) {
+ setUserProfile(false);
+ setSecurity(false);
+ setreferral(false);
+ setLogs(true);
+ }
+ }, []);
- return (
-
-
- )
-}
+ )}
+
-
-
-
- {/* Full Name -{userData?.UserName} -
+ return (
+
+ }
+ fieldState={true}
+ fieldApi={true}
+ isOnChange={true}
+ inputMode="numeric"
+ onInput={handleMobileNo}
+ />
+
+
+ {showData && (
+
+ )}
- {editData &&
-
+
- }
+
+
+
+
+ {/* Full Name +{userData?.UserName} +Refferal Code {userData.ReferralCode}
-
- Email Address -{userData?.MailId} -
-
- Phone -{userData?.MobileNo} -
-
-
+
+ Email Address +{userData?.MailId} +
+
+ Phone +{userData?.MobileNo} +
+
+
-
- }
- {
- setShowData(true)
- setEditData(false)
- }}
- >
-
+ {editData && (
+
+
- }
- fieldState={true}
- fieldApi={true}
- isOnChange={true}
- inputMode="numeric"
- onInput={handleMobileNo}
- />
-
- {
+ setShowData(true);
+ setEditData(false);
+ }}
+ >
+
-
-
- Upload Profile -
-
-
-
- Enter 6-digit OTP: -
- {timeLeft > 0 ? `Resend OTP in ${timeLeft}s` : ""}
-
- >
- ) : (
+
-
- >
- )}
-
+
+ Upload Profile +
+
+
Enter 6-digit OTP: +
+ {timeLeft > 0 ? `Resend OTP in ${timeLeft}s` : ""}
+
+ >
+ ) : (
+ <>
+ {" "}
+ Actual Sales Report
+
+
+ >
+ )}
+
-
- setClose(false)}>
-
-
- Account Settings
-
-
- {
- setUserProfile(true)
- setSecurity(false)
- setLogs(false)
- setClose(false)
- setreferral(false)
- }}>
- My Profile
-
- {
- setUserProfile(false)
- setSecurity(true)
- setLogs(false)
- setClose(false)
- setreferral(false)
+ const logout = async () => {
+ const UserId = getSession("UserId");
+ const status = "N"; // replace with your actual status
+ const res = await dispatch(GenerateLogout({ UserId, status })).unwrap();
+ if (res?.data?.statusCode === 1) {
+ clearSession();
+ navigate(`${subDirectory}`);
+ }
+ };
- }}>Security
- {
- setUserProfile(false)
- setSecurity(false)
- setLogs(true)
- setClose(false)
- setreferral(false)
- }}>Logs
- {
- setUserProfile(false)
- setSecurity(false)
- setLogs(false)
- setClose(false)
- setreferral(true)
- }}>Referrals
- {/*
+ return (
+
+ )}
- {security &&
-
+
+ {userProfile && (
+
+
- {userProfile &&
- setClose(false)}>
+
+ Account Settings
+
+
- {
+ setUserProfile(true);
+ setSecurity(false);
+ setLogs(false);
+ setClose(false);
+ setreferral(false);
+ }}
+ >
+ My Profile
+
+ {
+ setUserProfile(false);
+ setSecurity(true);
+ setLogs(false);
+ setClose(false);
+ setreferral(false);
+ }}
+ >
+ Security
+
+ {
+ setUserProfile(false);
+ setSecurity(false);
+ setLogs(true);
+ setClose(false);
+ setreferral(false);
+ }}
+ >
+ Notifications
+
+ {
+ setUserProfile(false);
+ setSecurity(false);
+ setLogs(false);
+ setClose(false);
+ setreferral(true);
+ }}
+ >
+ Referrals
+
+ {/*
-
+ setClose(true)}>
-
+
+ }
+ setClose(true)}>
+
-
- }
+ {security && (
+ setClose(true)}>
-
-
+
+ )}
-
- {logs &&
- setClose(true)}>
+
+
-
- }
- {referral &&
- setClose(true)}>
-
-
-
+ );
+};
export default UserAccount;
-
diff --git a/src/Pages/userOtp/userotp.jsx b/src/Pages/userOtp/userotp.jsx
index 8c611e7..aab9209 100644
--- a/src/Pages/userOtp/userotp.jsx
+++ b/src/Pages/userOtp/userotp.jsx
@@ -130,7 +130,7 @@ const UserOTP = () => {
};
const columns = [
{
- title: "SI.NO",
+ title: "SL.NO",
key: "sno",
align: "center",
width: "80px",
diff --git a/src/PozoApp/Company/AboutUs.jsx b/src/PozoApp/Company/AboutUs.jsx
index 3f6add5..79bd1a5 100644
--- a/src/PozoApp/Company/AboutUs.jsx
+++ b/src/PozoApp/Company/AboutUs.jsx
@@ -121,7 +121,6 @@ const AboutUs = () => {
.replace(/[^a-z0-9-]/gi, '')
.toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
diff --git a/src/PozoApp/Company/AboutUs.scss b/src/PozoApp/Company/AboutUs.scss
index 02532cc..3a17a30 100644
--- a/src/PozoApp/Company/AboutUs.scss
+++ b/src/PozoApp/Company/AboutUs.scss
@@ -896,8 +896,8 @@
width: 48px;
height: 48px;
border-radius: 50%;
- right: 2rem;
- bottom: 6rem;
+ right: 1.5rem;
+ bottom: 5rem;
z-index: 500;
display: flex;
align-items: center;
diff --git a/src/PozoApp/Components/AISection.jsx b/src/PozoApp/Components/AISection.jsx
index 8d6a5fa..abcfdcc 100644
--- a/src/PozoApp/Components/AISection.jsx
+++ b/src/PozoApp/Components/AISection.jsx
@@ -33,7 +33,7 @@ const AISection = () => {
setClose(true)}>
+ {logs && (
+
- )
-}
-
+ )}
+
+
+ )}
+ {referral && (
+ setClose(true)}>
+
+
+
- }
-
-
-
- setClose(true)}>
- e.stopPropagation()}>
+ e.stopPropagation()}
+ onWheel={(e) => {
+ // Prevent modal scroll completely except chat messages
+ if (!e.target.closest('.chatMessages')) {
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ }}
+ style={{ overflow: 'hidden' }}
+ >
Book a Free Demo
@@ -42,17 +138,21 @@ const BookDemo = ({ onClose }) => {
hassle.
-
+
+
-
+ )}
+
-
+
window.open("https://wa.me/917324000014?text=Hi%20POZO%20Team!%20I%20would%20like%20to%20book%20a%20free%20demo%20of%20your%20POS%20software.%20Please%20let%20me%20know%20the%20available%20time%20slots.", "_blank")}
+ onClick={() => window.open("https://wa.me/917324000012?text=Hi%20POZO%20Team!%20I%20would%20like%20to%20book%20a%20free%20demo%20of%20your%20POS%20software.%20Please%20let%20me%20know%20the%20available%20time%20slots.", "_blank")}
style={{ cursor: "pointer" }}
>
window.open("mailto:support@pozoapp.com", "_blank")}
+ onClick={() => window.open("mailto:support@pozo.in", "_blank")}
style={{ cursor: "pointer" }}
>
-
+
+ {/* setShowCalendly(true)}
+ style={{ cursor: "pointer" }}
+ >
+ */}
+ {
- navigate(`${subDirectory}schedule-demo`);
+ navigate(`${subDirectory}book-demo`);
onClose();
}}
style={{ cursor: "pointer" }}
@@ -77,8 +194,157 @@ const BookDemo = ({ onClose }) => {
+ {
+ navigate(`${subDirectory}book-demo`);
+ onClose();
+ }}
+ style={{ cursor: "pointer" }}
+ >
+
+ {showChat && (
+
+
+ )}
+
+ {showCalendly && (
+
+ Chat Support
+
+ {
+ e.stopPropagation();
+ const element = e.currentTarget;
+ element.scrollTop += e.deltaY;
+ }}
+ >
+ {chatMessages.map((msg, index) => (
+
+
+ {msg.text && renderTextWithClickablePhone(msg.text)}
+ {msg.features && (
+
+ ))}
+
+ {msg.features.map((feature, fIndex) => (
+
+ )}
+ {msg.questions && (
+
+ ✓
+ {feature}
+
+ ))}
+ {renderTextWithClickablePhone(msg.contact)}
+
+ {msg.questions.map((question, qIndex) => (
+
+ )}
+
+ setMessage(e.target.value)}
+ placeholder="Type your message..."
+ onKeyPress={(e) => {
+ if (e.key === 'Enter' && message.trim()) {
+ const botResponse = getBotResponse(message);
+ setChatMessages([...chatMessages,
+ { type: "user", text: message },
+ { type: "bot", text: botResponse }
+ ]);
+ setMessage("");
+ // Auto scroll to bottom
+ setTimeout(() => {
+ const chatContainer = document.querySelector('.chatMessages');
+ if (chatContainer) {
+ chatContainer.scrollTop = chatContainer.scrollHeight;
+ }
+ }, 100);
+ }
+ }}
+ />
+
+
+
+ )}
+
+
+
+
+ Book Your Demo Instantly
+
+
+ {/*
+
+ */}
+ setShowChat(!showChat)}
+ style={{ cursor: "pointer" }}
+ >
diff --git a/src/PozoApp/Components/CalendlyDemoBooking.jsx b/src/PozoApp/Components/CalendlyDemoBooking.jsx
new file mode 100644
index 0000000..71df5ea
--- /dev/null
+++ b/src/PozoApp/Components/CalendlyDemoBooking.jsx
@@ -0,0 +1,40 @@
+import React, { useEffect, useState } from "react";
+import { InlineWidget } from "react-calendly";
+import Loader from "./Loader/PozoLoader";
+
+const CalendlyDemoBooking = () => {
+ const [loading, setLoading] = useState(true);
+ const getAppData = async () => {
+ try {
+ const response = await dispatch(getAllApplicationData()).unwrap();
+ if (response?.data?.statusCode === 1) {
+ let finalsubCategory = response?.data?.data?.filter(
+ (value) => value.ActiveStatus === "A"
+ );
+ setAppCategory(finalsubCategory);
+ }
+ } catch (error) {
+ console.error("Error fetching app data:", error);
+ }
+ };
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ setLoading(false);
+ }, 2000);
+ getAppData();
+ return () => clearTimeout(timer);
+ }, []);
+
+ if (loading) {
+ return Chat with Us for a Free Demo
+
+ );
+};
+
+export default CalendlyDemoBooking;
diff --git a/src/PozoApp/Components/ContactUs.jsx b/src/PozoApp/Components/ContactUs.jsx
index 7c3ec2f..ec99640 100644
--- a/src/PozoApp/Components/ContactUs.jsx
+++ b/src/PozoApp/Components/ContactUs.jsx
@@ -184,23 +184,7 @@ const ContactUs = () => {
return
-
- Contact Form
-
+
-
-
-
-
-
-
-
-
diff --git a/src/PozoApp/Components/CookieConsent.jsx b/src/PozoApp/Components/CookieConsent.jsx
new file mode 100644
index 0000000..b1248ec
--- /dev/null
+++ b/src/PozoApp/Components/CookieConsent.jsx
@@ -0,0 +1,46 @@
+import React, { useState, useEffect } from 'react';
+import './CookieConsent.scss';
+
+const CookieConsent = () => {
+ const [showConsent, setShowConsent] = useState(false);
+
+ useEffect(() => {
+ const consent = localStorage.getItem('cookieConsent');
+ if (!consent) {
+ setShowConsent(true);
+ }
+ }, []);
+
+ const handleAccept = () => {
+ localStorage.setItem('cookieConsent', 'accepted');
+ setShowConsent(false);
+ };
+
+ const handleReject = () => {
+ localStorage.setItem('cookieConsent', 'rejected');
+ setShowConsent(false);
+ };
+
+ if (!showConsent) return null;
+
+ return (
+
+
+ );
+};
+
+export default CookieConsent;
\ No newline at end of file
diff --git a/src/PozoApp/Components/CookieConsent.scss b/src/PozoApp/Components/CookieConsent.scss
new file mode 100644
index 0000000..439876f
--- /dev/null
+++ b/src/PozoApp/Components/CookieConsent.scss
@@ -0,0 +1,71 @@
+.cookie-consent {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: #fff;
+ border-top: 1px solid #e9ecef;
+ box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.1);
+ z-index: 1000;
+ font-family: "NeueMontreal";
+
+ .cookie-content {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 20px;
+
+ @media (max-width: 768px) {
+ flex-direction: column;
+ text-align: center;
+ gap: 15px;
+ }
+
+ p {
+ margin: 0;
+ font-size: 14px;
+ color: #333;
+ line-height: 1.5;
+ flex: 1;
+ }
+
+ .cookie-buttons {
+ display: flex;
+ gap: 12px;
+
+ button {
+ padding: 10px 20px;
+ border: none;
+ border-radius: 6px;
+ font-size: 14px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-family: "NeueMontreal";
+ }
+
+ .btn-reject {
+ background: transparent;
+ color: #666;
+ border: 1px solid #ddd;
+
+ &:hover {
+ background: #f8f9fa;
+ color: #333;
+ }
+ }
+
+ .btn-accept {
+ background: #000;
+ color: white;
+
+ &:hover {
+ background: #333;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/PozoApp/Components/FloatingChat.jsx b/src/PozoApp/Components/FloatingChat.jsx
new file mode 100644
index 0000000..bc4be33
--- /dev/null
+++ b/src/PozoApp/Components/FloatingChat.jsx
@@ -0,0 +1,898 @@
+import React, { useState, useEffect, useRef } from 'react';
+import './FloatingChat.scss';
+import { MdChat, MdSend, MdSupportAgent, MdOpenInNew, MdCake, MdLocalCafe, MdIcecream, MdRestaurant, MdLocalPharmacy, MdStore, MdShoppingBag, MdSpa, MdDevices, MdMenuBook, MdLocalHospital, MdBuild, MdLocalFlorist, MdLocalGasStation, MdFitnessCenter, MdStyle, MdDiamond, MdDirectionsWalk, MdCheckroom, MdElectricalServices, MdPhoneAndroid, MdComputer, MdShoppingCart, MdPrint, MdSchool, MdEngineering, MdCardGiftcard, MdFormatPaint, MdDirectionsCar, MdLiquor, MdSecurity, MdLocalLaundryService, MdSportsSoccer, MdLocalShipping, MdMic, MdMicOff, MdVolumeUp, MdVolumeOff } from 'react-icons/md';
+
+const FloatingChat = () => {
+ const subDirectory = import.meta.env.BASE_URL;
+ const [showChat, setShowChat] = useState(false);
+ const [agentMode, setAgentMode] = useState(false);
+ const [message, setMessage] = useState('');
+ const [isTyping, setIsTyping] = useState(false);
+ const [showDemoModal, setShowDemoModal] = useState(false);
+ const [isRecording, setIsRecording] = useState(false);
+ const [recognition, setRecognition] = useState(null);
+ const [isMuted, setIsMuted] = useState(false);
+ const messagesEndRef = useRef(null);
+ const [chatMessages, setChatMessages] = useState([
+ {
+ type: "bot",
+ text: "Hi! I'm here to help you with POZO demo scheduling. How can I assist you?",
+ timestamp: new Date()
+ },
+ {
+ type: "faq",
+ questions: [
+ "What is POZO?",
+ "Who is POZO for?",
+ "What industries?",
+ "Book a demo",
+ "Pricing plans",
+ "Support",
+ "Features",
+ "Offline support",
+ "Setup time",
+ "Data security",
+ "Multi-store ops",
+ "GST compliance",
+ "Mobile app",
+ "Reports & analytics"
+ ],
+ timestamp: new Date()
+ }
+ ]);
+
+ const scrollToBottom = () => {
+ if (messagesEndRef.current) {
+ messagesEndRef.current.scrollIntoView({ behavior: "smooth", block: "end" });
+ }
+ };
+
+ const speakText = (text) => {
+ if ('speechSynthesis' in window) {
+ const utterance = new SpeechSynthesisUtterance(text);
+ utterance.rate = 0.9; // Slightly slower for clarity
+ utterance.pitch = 1;
+ utterance.volume = 0.8;
+
+ // Try to use a female voice if available
+ const voices = speechSynthesis.getVoices();
+ const femaleVoice = voices.find(voice =>
+ voice.name.toLowerCase().includes('female') ||
+ voice.name.toLowerCase().includes('karen') ||
+ voice.name.toLowerCase().includes('samantha') ||
+ voice.name.toLowerCase().includes('zira')
+ );
+ if (femaleVoice) {
+ utterance.voice = femaleVoice;
+ }
+
+ speechSynthesis.speak(utterance);
+ }
+ };
+
+ const playTypingSound = () => {
+ // Create a simple typing sound using Web Audio API
+ if ('AudioContext' in window || 'webkitAudioContext' in window) {
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
+ const audioContext = new AudioContext();
+
+ // Create oscillator for typing sound
+ const oscillator = audioContext.createOscillator();
+ const gainNode = audioContext.createGain();
+
+ oscillator.connect(gainNode);
+ gainNode.connect(audioContext.destination);
+
+ // Configure sound
+ oscillator.frequency.setValueAtTime(800, audioContext.currentTime);
+ oscillator.frequency.exponentialRampToValueAtTime(400, audioContext.currentTime + 0.05);
+
+ gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);
+ gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.05);
+
+ oscillator.start(audioContext.currentTime);
+ oscillator.stop(audioContext.currentTime + 0.05);
+ }
+ };
+
+ const startVoiceRecording = () => {
+ if (recognition && !isRecording) {
+ recognition.start();
+ }
+ };
+
+ const stopVoiceRecording = () => {
+ if (recognition && isRecording) {
+ recognition.stop();
+ }
+ };
+
+ useEffect(() => {
+ scrollToBottom();
+ }, [chatMessages]);
+
+ // Initialize speech recognition only in agent mode
+ useEffect(() => {
+ if (agentMode && ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window)) {
+ const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+ const recognitionInstance = new SpeechRecognition();
+
+ recognitionInstance.continuous = false;
+ recognitionInstance.interimResults = false;
+ recognitionInstance.lang = 'en-US';
+
+ recognitionInstance.onstart = () => {
+ setIsRecording(true);
+ };
+
+ recognitionInstance.onresult = (event) => {
+ const transcript = event.results[0][0].transcript;
+ setMessage(transcript);
+ setIsRecording(false);
+ };
+
+ recognitionInstance.onerror = (event) => {
+ console.error('Speech recognition error:', event.error);
+ setIsRecording(false);
+ };
+
+ recognitionInstance.onend = () => {
+ setIsRecording(false);
+ };
+
+ setRecognition(recognitionInstance);
+ } else {
+ setRecognition(null);
+ }
+ }, [agentMode]);
+
+ const getBotResponse = (msg, isAgentMode = false) => {
+ const message = msg.toLowerCase();
+
+ // First, get the normal response for all messages
+ let response = null;
+
+ if (message.includes('hi') || message.includes('hello') || message.includes('hey')) {
+ response = "Hello! How can I help you with POZO today?";
+ } else if (message.includes('industries') || message.includes('business') || message.includes('sector')) {
+ return {
+ type: 'industryList',
+ text: 'POZO supports these industries:',
+ industries: [
+ { name: 'Ice Cream Parlour', icon:
+
+ + We use cookies to enhance your experience and auto-fill forms for your convenience. + By accepting, you allow us to store your preferences and contact information. + +
+
+ setShowChat(!showChat)}>
+
+
+ {showDemoModal && (
+ 1 }
+ setShowDemoModal(false)}>
+
+ )}
+
+ {showChat && (
+ e.stopPropagation()}>
+
+
+
+ Book a Free Demo+
+
+ Get a personalized demo of POZO POS system tailored to your business needs. +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Or contact us directly: +Call: window.open('tel:+917324000011')}>+91 7324000011 +WhatsApp: window.open('https://wa.me/917324000014')}>+91 7324000014 +
+
+ )}
+ >
+ );
+};
+
+export default FloatingChat;
\ No newline at end of file
diff --git a/src/PozoApp/Components/FloatingChat.scss b/src/PozoApp/Components/FloatingChat.scss
new file mode 100644
index 0000000..5b91e8f
--- /dev/null
+++ b/src/PozoApp/Components/FloatingChat.scss
@@ -0,0 +1,1106 @@
+.floating-chat-button {
+ position: fixed;
+ bottom: 20px;
+ right: 20px;
+ width: 50px;
+ height: 50px;
+ background: linear-gradient(135deg, #2b72fb 0%, #1e5bb8 100%);
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ box-shadow: 0 4px 20px rgba(43, 114, 251, 0.4);
+ z-index: 1000;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ animation: pulse 2s infinite;
+ color: white;
+
+ &:hover {
+ transform: scale(1.1) rotate(5deg);
+ box-shadow: 0 8px 30px rgba(43, 114, 251, 0.6);
+ }
+
+ &:active {
+ transform: scale(0.95);
+ }
+
+ .chat-notification {
+ position: absolute;
+ top: -5px;
+ right: -5px;
+ width: 20px;
+ height: 20px;
+ background: #ff4757;
+ color: white;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 12px;
+ font-weight: bold;
+ border: 2px solid white;
+ animation: bounce 1s infinite;
+ }
+}
+
+@keyframes pulse {
+ 0% {
+ box-shadow: 0 4px 20px rgba(43, 114, 251, 0.4);
+ }
+ 50% {
+ box-shadow: 0 4px 20px rgba(43, 114, 251, 0.6);
+ }
+ 100% {
+ box-shadow: 0 4px 20px rgba(43, 114, 251, 0.4);
+ }
+}
+
+@keyframes voicePulse {
+ 0% {
+ transform: scale(1);
+ opacity: 1;
+ }
+ 50% {
+ transform: scale(1.1);
+ opacity: 0.8;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+@keyframes bounce {
+ 0%, 20%, 50%, 80%, 100% {
+ transform: translateY(0);
+ }
+ 40% {
+ transform: translateY(-3px);
+ }
+ 60% {
+ transform: translateY(-1px);
+ }
+}
+
+.floating-chat-widget {
+ position: fixed;
+ bottom: 90px;
+ right: 20px;
+ width: 380px;
+ height: 500px;
+ background: transparent;
+ border-radius: 20px;
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
+ z-index: 1000;
+ display: flex;
+ flex-direction: column;
+ font-family: "Poppins", sans-serif;
+ border: 1px solid rgba(43, 114, 251, 0.1);
+ animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+
+ @media (max-width: 768px) {
+ width: calc(100vw - 40px);
+ height: 450px;
+ right: 20px;
+ bottom: 90px;
+ max-width: 380px;
+ }
+
+ @keyframes slideUp {
+ from {
+ opacity: 0;
+ transform: translateY(20px) scale(0.95);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+ }
+
+ .chat-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px;
+ background: linear-gradient(135deg, #2b72fb 0%, #1e5bb8 100%);
+ color: white;
+ border-radius: 20px 20px 0 0;
+ box-shadow: 0 2px 10px rgba(43, 114, 251, 0.2);
+ transition: background 0.3s ease;
+
+ &.agent-mode {
+ background: linear-gradient(135deg, #48bb78 0%, #38a169 100%);
+ box-shadow: 0 2px 10px rgba(72, 187, 120, 0.2);
+ }
+
+ .header-content {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+
+ .avatar {
+ width: 40px;
+ height: 40px;
+ background: rgba(255, 255, 255, 0.2);
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 18px;
+ border: 2px solid rgba(255, 255, 255, 0.3);
+ margin-left: 8px;
+ }
+
+ .header-info {
+ display: flex;
+ flex-direction: column;
+
+ .header-title {
+ font-weight: 600;
+ font-size: 16px;
+ line-height: 1.2;
+ }
+
+ .header-status {
+ font-size: 12px;
+ opacity: 0.9;
+ color: #4ade80;
+ font-weight: 500;
+ }
+ }
+ }
+
+ .header-controls {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+
+ .agent-mode-toggle {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+
+ .toggle-label {
+ font-size: 12px;
+ font-weight: 500;
+ color: rgba(255, 255, 255, 0.9);
+ }
+
+ .switch {
+ position: relative;
+ display: inline-block;
+ width: 34px;
+ height: 20px;
+
+ input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+
+ &:checked + .slider {
+ background-color: #4ade80;
+
+ &:before {
+ transform: translateX(14px);
+ }
+ }
+
+ &:focus + .slider {
+ box-shadow: 0 0 1px #4ade80;
+ }
+ }
+
+ .slider {
+ position: absolute;
+ cursor: pointer;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(255, 255, 255, 0.3);
+ transition: 0.4s;
+ border-radius: 20px;
+
+ &:before {
+ position: absolute;
+ content: "";
+ height: 14px;
+ width: 14px;
+ left: 3px;
+ bottom: 3px;
+ background-color: white;
+ transition: 0.4s;
+ border-radius: 50%;
+ }
+ }
+ }
+ }
+
+ .mute-button {
+ background: rgba(255, 255, 255, 0.2);
+ border: none;
+ color: white;
+ cursor: pointer;
+ padding: 8px;
+ border-radius: 50%;
+ width: 36px;
+ height: 36px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s ease;
+ margin-right: 8px;
+
+ &:hover {
+ background: rgba(255, 255, 255, 0.3);
+ transform: scale(1.1);
+ }
+ }
+
+ .close-button {
+ background: rgba(255, 255, 255, 0.2);
+ border: none;
+ color: white;
+ font-size: 18px;
+ cursor: pointer;
+ padding: 8px;
+ border-radius: 50%;
+ width: 36px;
+ height: 36px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background: rgba(255, 255, 255, 0.3);
+ transform: scale(1.1);
+ }
+ }
+ }
+ }
+
+ .chat-messages {
+ flex: 1;
+ padding: 20px;
+ overflow-y: auto;
+ pointer-events: auto;
+ background: #fafbfc;
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: #f1f3f4;
+ border-radius: 10px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #cbd3da;
+ border-radius: 10px;
+ transition: background 0.2s ease;
+
+ &:hover {
+ background: #a8b4bf;
+ }
+ }
+
+ .chat-message {
+ margin-bottom: 16px;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ animation: messageSlideIn 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+
+ &.bot {
+ align-items: flex-start;
+
+ .message-content {
+ background: #ffffff;
+ padding: 12px 16px;
+ border-radius: 18px 18px 18px 4px;
+ font-size: 14px;
+ line-height: 1.5;
+ color: #2d3748;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08), 0 1px 3px rgba(0, 0, 0, 0.12);
+ border: 1px solid #e2e8f0;
+ max-width: 280px;
+ word-wrap: break-word;
+ transition: all 0.2s ease;
+ position: relative;
+
+ &:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 6px rgba(0, 0, 0, 0.1);
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: -8px;
+ width: 0;
+ height: 0;
+ border-left: 8px solid #e2e8f0;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ }
+
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: -6px;
+ width: 0;
+ height: 0;
+ border-left: 6px solid #ffffff;
+ border-top: 6px solid transparent;
+ border-bottom: 6px solid transparent;
+ }
+ }
+
+ .message-time {
+ font-size: 11px;
+ color: #a0aec0;
+ margin-top: 4px;
+ margin-left: 16px;
+ opacity: 0.7;
+ }
+ }
+
+ &.user {
+ align-items: flex-end;
+
+ .message-content {
+ background: linear-gradient(135deg, #2b72fb 0%, #1e5bb8 100%);
+ color: white;
+ padding: 12px 16px;
+ border-radius: 18px 18px 4px 18px;
+ font-size: 14px;
+ line-height: 1.5;
+ box-shadow: 0 2px 8px rgba(43, 114, 251, 0.3);
+ max-width: 280px;
+ word-wrap: break-word;
+ transition: all 0.2s ease;
+ position: relative;
+
+ &:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(43, 114, 251, 0.4);
+ }
+
+ &::before {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ right: -8px;
+ width: 0;
+ height: 0;
+ border-right: 8px solid #1e5bb8;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ }
+ }
+
+ .message-time {
+ font-size: 11px;
+ color: #a0aec0;
+ margin-top: 4px;
+ margin-right: 16px;
+ opacity: 0.7;
+ }
+ }
+
+ &.faq {
+ align-items: flex-start;
+
+ .message-content {
+ width: 100%;
+
+ .faq-section {
+ .faq-title {
+ font-size: 13px;
+ font-weight: 600;
+ color: #4a5568;
+ margin-bottom: 12px;
+ }
+
+ .faq-buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+
+ .faq-button {
+ background: #ffffff;
+ border: 1px solid #e2e8f0;
+ color: #4a5568;
+ padding: 8px 14px;
+ border-radius: 20px;
+ font-size: 13px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ font-family: "Poppins", sans-serif;
+ font-weight: 500;
+ white-space: nowrap;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+
+ &:hover {
+ background: #2b72fb;
+ color: white;
+ border-color: #2b72fb;
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(43, 114, 251, 0.2);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &.featureList {
+ align-items: flex-start;
+
+ .message-content {
+ background: #f0fff4;
+ padding: 16px;
+ border-radius: 18px 18px 18px 4px;
+ border-left: 4px solid #48bb78;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ width: 100%;
+
+ .feature-list {
+ .feature-text {
+ font-weight: 600;
+ color: #2d3748;
+ margin-bottom: 12px;
+ font-size: 14px;
+ }
+
+ .feature-item {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 8px;
+ font-size: 13px;
+ color: #4a5568;
+
+ .feature-icon {
+ color: #48bb78;
+ font-weight: bold;
+ font-size: 16px;
+ }
+ }
+
+ .feature-contact {
+ margin-top: 12px;
+ padding-top: 12px;
+ border-top: 1px solid #c6f6d5;
+ font-size: 13px;
+ color: #2b72fb;
+ font-weight: 600;
+ }
+ }
+ }
+ }
+
+ &.industryList {
+ align-items: flex-start;
+
+ .message-content {
+ background: #f0f9ff;
+ padding: 16px;
+ border-radius: 18px 18px 18px 4px;
+ border-left: 4px solid #2b72fb;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ width: 100%;
+
+ .industry-list {
+ .industry-text {
+ font-weight: 600;
+ color: #2d3748;
+ margin-bottom: 12px;
+ font-size: 14px;
+ }
+
+ .industry-item {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 8px;
+ font-size: 13px;
+ color: #4a5568;
+
+ .industry-icon {
+ color: #2b72fb;
+ font-size: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+
+ .industry-contact {
+ margin-top: 12px;
+ padding-top: 12px;
+ border-top: 1px solid #bee3f8;
+ font-size: 13px;
+ color: #2b72fb;
+ font-weight: 600;
+ }
+ }
+ }
+ }
+
+ &.demoLinks {
+ align-items: flex-start;
+
+ .message-content {
+ background: #f0f9ff;
+ padding: 16px;
+ border-radius: 18px 18px 18px 4px;
+ border-left: 4px solid #2b72fb;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ width: 100%;
+
+ .demo-links-section {
+ .demo-text {
+ font-weight: 600;
+ color: #2d3748;
+ margin-bottom: 12px;
+ font-size: 14px;
+ }
+
+ .demo-buttons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-bottom: 12px;
+
+ .demo-button {
+ background: #ffffff;
+ border: 1px solid #e2e8f0;
+ color: #4a5568;
+ padding: 8px 12px;
+ border-radius: 20px;
+ font-size: 13px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ font-family: "Poppins", sans-serif;
+ font-weight: 500;
+ white-space: nowrap;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+ display: flex;
+ align-items: center;
+ gap: 6px;
+
+ .demo-icon {
+ font-size: 14px;
+ }
+
+ &:hover {
+ background: #2b72fb;
+ color: white;
+ border-color: #2b72fb;
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(43, 114, 251, 0.2);
+ }
+ }
+ }
+
+ .demo-contact {
+ font-size: 13px;
+ color: #2b72fb;
+ font-weight: 600;
+ }
+ }
+ }
+ }
+
+ &.demoLink {
+ align-items: flex-start;
+
+ .message-content {
+ background: #fef5e7;
+ padding: 16px;
+ border-radius: 18px 18px 18px 4px;
+ border-left: 4px solid #f59e0b;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ width: 100%;
+
+ .demo-link-section {
+ .demo-text {
+ font-weight: 600;
+ color: #2d3748;
+ margin-bottom: 12px;
+ font-size: 14px;
+ }
+
+ .demo-button.single {
+ background: #ffffff;
+ border: 1px solid #e2e8f0;
+ color: #4a5568;
+ padding: 10px 16px;
+ border-radius: 20px;
+ font-size: 13px;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ font-family: "Poppins", sans-serif;
+ font-weight: 500;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 12px;
+
+ .demo-icon {
+ font-size: 16px;
+ }
+
+ &:hover {
+ background: #f59e0b;
+ color: white;
+ border-color: #f59e0b;
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(245, 158, 11, 0.2);
+ }
+ }
+
+ .demo-contact {
+ font-size: 13px;
+ color: #2b72fb;
+ font-weight: 600;
+ }
+ }
+ }
+ }
+
+ &.typing {
+ align-items: flex-start;
+
+ .message-content {
+ background: #ffffff;
+ padding: 12px 16px;
+ border-radius: 18px 18px 18px 4px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ border: 1px solid #e2e8f0;
+
+ .typing-indicator {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+
+ span {
+ width: 6px;
+ height: 6px;
+ background: #cbd3da;
+ border-radius: 50%;
+ animation: typing 1.4s infinite ease-in-out;
+
+ &:nth-child(1) { animation-delay: -0.32s; }
+ &:nth-child(2) { animation-delay: -0.16s; }
+ &:nth-child(3) { animation-delay: 0s; }
+ }
+ }
+ }
+ }
+ }
+
+ .clickablePhone {
+ color: #2b72fb;
+ cursor: pointer;
+ text-decoration: underline;
+ font-weight: 600;
+ transition: color 0.2s ease;
+
+ &:hover {
+ color: #1e5bb8;
+ }
+ }
+ }
+
+ @keyframes typing {
+ 0%, 80%, 100% {
+ transform: scale(0.8);
+ opacity: 0.5;
+ }
+ 40% {
+ transform: scale(1);
+ opacity: 1;
+ }
+ }
+
+ @keyframes messageSlideIn {
+ 0% {
+ opacity: 0;
+ transform: translateY(20px) scale(0.95);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+ }
+
+ .chat-input {
+ display: flex;
+ padding: 16px 20px;
+ border-top: 1px solid #e2e8f0;
+ background: #ffffff;
+ gap: 12px;
+
+ input {
+ flex: 1;
+ padding: 12px 16px;
+ border: 2px solid #e2e8f0;
+ border-radius: 25px;
+ font-size: 14px;
+ outline: none;
+ font-family: "Poppins", sans-serif;
+ font-weight: 400;
+ color: #2d3748;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ background: #ffffff;
+ position: relative;
+
+ &::placeholder {
+ color: #a0aec0;
+ transition: color 0.3s ease;
+ }
+
+ &:focus {
+ border-color: #2b72fb;
+ box-shadow: 0 0 0 3px rgba(43, 114, 251, 0.1), 0 2px 8px rgba(43, 114, 251, 0.15);
+ transform: translateY(-1px);
+
+ &::placeholder {
+ color: #cbd3da;
+ }
+ }
+
+ &:hover:not(:focus) {
+ border-color: #cbd3da;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+ }
+
+ &:disabled {
+ background: #f7fafc;
+ color: #a0aec0;
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+
+ &:hover {
+ border-color: #e2e8f0;
+ }
+ }
+ }
+
+ .voice-button {
+ width: 44px;
+ height: 44px;
+ background: #28a745;
+ color: white;
+ border: none;
+ border-radius: 50%;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 0;
+ height: 0;
+ background: rgba(255, 255, 255, 0.3);
+ border-radius: 50%;
+ transform: translate(-50%, -50%);
+ transition: width 0.6s, height 0.6s;
+ }
+
+ &:hover {
+ background: #218838;
+ transform: scale(1.05);
+ box-shadow: 0 4px 16px rgba(40, 167, 69, 0.5);
+
+ &::before {
+ width: 120%;
+ height: 120%;
+ }
+ }
+
+ &:active {
+ transform: scale(0.95);
+ transition: all 0.1s ease;
+ }
+
+ &.recording {
+ background: #dc3545;
+ animation: voicePulse 1.5s infinite;
+
+ &:hover {
+ background: #c82333;
+ }
+ }
+ }
+
+ .send-button {
+ width: 44px;
+ height: 44px;
+ background: linear-gradient(135deg, #2b72fb 0%, #1e5bb8 100%);
+ color: white;
+ border: none;
+ border-radius: 50%;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-shadow: 0 2px 8px rgba(43, 114, 251, 0.3);
+ position: relative;
+ overflow: hidden;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 0;
+ height: 0;
+ background: rgba(255, 255, 255, 0.3);
+ border-radius: 50%;
+ transform: translate(-50%, -50%);
+ transition: width 0.6s, height 0.6s;
+ }
+
+ &:hover:not(:disabled) {
+ transform: scale(1.05) rotate(5deg);
+ box-shadow: 0 4px 16px rgba(43, 114, 251, 0.5);
+
+ &::before {
+ width: 120%;
+ height: 120%;
+ }
+ }
+
+ &:active:not(:disabled) {
+ transform: scale(0.95) rotate(0deg);
+ transition: all 0.1s ease;
+ }
+
+ &:disabled {
+ background: #cbd3da;
+ cursor: not-allowed;
+ box-shadow: none;
+ transform: none;
+
+ &:hover {
+ transform: none;
+ }
+ }
+ }
+ }
+}
+
+.demo-modal-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.6);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 2000;
+ animation: fadeIn 0.3s ease;
+
+ .demo-modal {
+ background: white;
+ border-radius: 16px;
+ width: 90%;
+ max-width: 500px;
+ max-height: 90vh;
+ overflow-y: auto;
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
+ animation: slideIn 0.3s ease;
+
+ @keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+ }
+
+ @keyframes slideIn {
+ from {
+ opacity: 0;
+ transform: translateY(-20px) scale(0.95);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0) scale(1);
+ }
+ }
+
+ .demo-modal-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 24px 24px 16px;
+ border-bottom: 1px solid #e2e8f0;
+
+ h3 {
+ margin: 0;
+ font-size: 24px;
+ font-weight: 600;
+ color: #2d3748;
+ font-family: "Poppins", sans-serif;
+ }
+
+ .demo-modal-close {
+ background: none;
+ border: none;
+ font-size: 24px;
+ color: #a0aec0;
+ cursor: pointer;
+ padding: 4px;
+ border-radius: 50%;
+ width: 32px;
+ height: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background: #f7fafc;
+ color: #2d3748;
+ }
+ }
+ }
+
+ .demo-modal-body {
+ padding: 24px;
+
+ p {
+ margin: 0 0 20px 0;
+ color: #4a5568;
+ font-size: 16px;
+ line-height: 1.5;
+ }
+
+ .demo-form {
+ .form-group {
+ margin-bottom: 16px;
+
+ input, select, textarea {
+ width: 100%;
+ padding: 12px 16px;
+ border: 2px solid #e2e8f0;
+ border-radius: 8px;
+ font-size: 14px;
+ font-family: "Poppins", sans-serif;
+ transition: all 0.2s ease;
+ background: #ffffff;
+ color: #2d3748;
+
+ &::placeholder {
+ color: #a0aec0;
+ }
+
+ &:focus {
+ border-color: #2b72fb;
+ box-shadow: 0 0 0 3px rgba(43, 114, 251, 0.1);
+ outline: none;
+ }
+ }
+
+ textarea {
+ resize: vertical;
+ min-height: 80px;
+ }
+ }
+
+ .demo-submit-btn {
+ width: 100%;
+ background: linear-gradient(135deg, #2b72fb 0%, #1e5bb8 100%);
+ color: white;
+ border: none;
+ padding: 14px;
+ border-radius: 8px;
+ font-size: 16px;
+ font-weight: 600;
+ font-family: "Poppins", sans-serif;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ box-shadow: 0 4px 12px rgba(43, 114, 251, 0.3);
+
+ &:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 6px 16px rgba(43, 114, 251, 0.4);
+ }
+
+ &:active {
+ transform: translateY(0);
+ }
+ }
+ }
+
+ .demo-contact-info {
+ margin-top: 24px;
+ padding-top: 20px;
+ border-top: 1px solid #e2e8f0;
+ text-align: center;
+
+ p {
+ margin: 8px 0;
+ font-size: 14px;
+ color: #4a5568;
+
+ strong {
+ color: #2d3748;
+ }
+ }
+
+ .clickablePhone {
+ color: #2b72fb;
+ cursor: pointer;
+ font-weight: 600;
+ text-decoration: none;
+ transition: color 0.2s ease;
+
+ &:hover {
+ color: #1e5bb8;
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+ }
+
+ @media (max-width: 768px) {
+ .demo-modal {
+ width: 95%;
+ margin: 20px;
+
+ .demo-modal-header {
+ padding: 20px 20px 12px;
+
+ h3 {
+ font-size: 20px;
+ }
+ }
+
+ .demo-modal-body {
+ padding: 20px;
+ }
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/src/PozoApp/Components/Footer.jsx b/src/PozoApp/Components/Footer.jsx
index a0db585..ef6bc0c 100644
--- a/src/PozoApp/Components/Footer.jsx
+++ b/src/PozoApp/Components/Footer.jsx
@@ -214,6 +214,13 @@ const Footer = ({ AppCategory = [] }) => {
const startIndex = currentCategoryPage * categoriesPerPage;
const visibleCategories = allCategories.slice(startIndex, startIndex + categoriesPerPage);
+ // Reset currentCategoryPage if it exceeds totalPages when categories change
+ useEffect(() => {
+ if (currentCategoryPage >= totalPages && totalPages > 0) {
+ setCurrentCategoryPage(0);
+ }
+ }, [totalPages]);
+
const handlePrevPage = () => {
setCurrentCategoryPage((prev) => Math.max(0, prev - 1));
};
@@ -357,7 +364,7 @@ const Footer = ({ AppCategory = [] }) => {
// Search Results
+
+
+
+
+
+
+
+ Pozo Assistant
+ ● Online
+
+
+
+
+ Agent Mode
+
+ {agentMode && (
+ e.stopPropagation()}>
+ {chatMessages.map((msg, index) => (
+
+
+
+
+ ))}
+
+ {isTyping && (
+
+ {msg.text && typeof msg.text === 'string' && msg.type !== 'demoLink' && renderTextWithClickablePhone(msg.text)}
+ {msg.features && (
+
+
+
+ )}
+ {msg.industries && (
+ {msg.text && typeof msg.text === 'string' ? msg.text : ''}
+ {msg.features.map((feature, fIndex) => (
+
+ ✓
+ {feature}
+
+ ))}
+ {msg.contact && renderTextWithClickablePhone(msg.contact)}
+
+
+ )}
+ {msg.questions && (
+ {msg.text && typeof msg.text === 'string' ? msg.text : ''}
+ {msg.industries.map((industry, iIndex) => (
+
+ {industry.icon}
+ {industry.name}
+
+ ))}
+ {msg.contact && renderTextWithClickablePhone(msg.contact)}
+
+
+ )}
+ {msg.demos && (
+ Quick Questions:
+
+ {msg.questions.map((question, qIndex) => (
+
+
+
+ )}
+ {msg.type === 'demoBooking' && (
+ {msg.text && typeof msg.text === 'string' ? msg.text : ''}
+
+ {msg.demos.map((demo, dIndex) => (
+
+ {msg.contact && renderTextWithClickablePhone(msg.contact)}
+
+
+ )}
+ {msg.url && (
+ {msg.text}
+ {msg.contact && renderTextWithClickablePhone(msg.contact)}
+
+
+ )}
+ {msg.text && typeof msg.text === 'string' ? renderTextWithClickablePhone(msg.text) : ''}
+
+
+
+ {msg.contact && renderTextWithClickablePhone(msg.contact)}
+
+ {formatTime(msg.timestamp)}
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+ {
+ if (e.key === 'Enter' && message.trim()) {
+ handleSendMessage(message);
+ }
+ }}
+ />
+ {agentMode && (
+
+
{filteredApps.map((app) => (
- redirectApp(app.AppName, app.AppId)} className="search-result-item" diff --git a/src/PozoApp/Components/Industries.jsx b/src/PozoApp/Components/Industries.jsx index 9166d6f..9a63a49 100644 --- a/src/PozoApp/Components/Industries.jsx +++ b/src/PozoApp/Components/Industries.jsx @@ -89,11 +89,19 @@ const Industries = () => { }, []); - const redirectApp = (AppName, AppId) => { + const redirectApp = (AppName, AppId) => { sessionStore("AppId", AppId); sessionStore("AppName", AppName); - navigate(`${subDirectory}${AppName}`); - window.location.reload(); + + // Convert app name to URL-friendly slug + const urlSlug = AppName.toLowerCase() + .replace(/&/g, 'and') + .replace(/\s+/g, '-') + .replace(/[^a-z0-9-]/g, '') + .replace(/-+/g, '-') + .replace(/^-|-$/g, ''); + + navigate(`${subDirectory}industries/${urlSlug}`); }; diff --git a/src/PozoApp/Components/IndustriesList.jsx b/src/PozoApp/Components/IndustriesList.jsx index 2f57412..0755431 100644 --- a/src/PozoApp/Components/IndustriesList.jsx +++ b/src/PozoApp/Components/IndustriesList.jsx @@ -146,7 +146,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -165,7 +165,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -184,7 +184,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -203,7 +203,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -222,7 +222,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -241,7 +241,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -260,7 +260,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -303,7 +303,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -330,7 +330,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -378,7 +378,7 @@ const IndustriesList = ({ - redirectApp(app.AppName?.toLowerCase(), app.AppId) + redirectApp(app.AppName, app.AppId) } > {app.AppName} @@ -405,7 +405,7 @@ const IndustriesList = ({
- redirectApp(app.AppName?.toLowerCase(), app.AppId)
+ redirectApp(app.AppName, app.AppId)
}
>
{app.AppName}
diff --git a/src/PozoApp/Components/Insiders.jsx b/src/PozoApp/Components/Insiders.jsx
index 348a4d4..cd09c05 100644
--- a/src/PozoApp/Components/Insiders.jsx
+++ b/src/PozoApp/Components/Insiders.jsx
@@ -105,7 +105,7 @@ const Insiders = () => {
Speaker-John Doe, Marketing Head +Ratan, Marketing Head
@@ -406,11 +431,17 @@ const Navbar = ({
+ {/* Solutions Dropdown */}
+ {solutionsOpen && (
+ Offerings
Solutions{" "}
- {solutionsOpen ?
Pricing Blog -navigate(`${subDirectory}case-studies`)}>Case Studies +navigate(`${subDirectory}case-studies`)}> + Case Studies + Contact Us
+
+ )}
+
+ {/* Industries Dropdown */}
+ {industry && (
+
+ navigate(`${subDirectory}solutions/retail-billing`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Retail Billing
+
+
+ navigate(`${subDirectory}solutions/inventory-purchase`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Inventory & Purchase
+
+
+ navigate(`${subDirectory}solutions/weighing-scale-pos`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Weighing Scale POS
+
+
+ navigate(`${subDirectory}solutions/multi-store-erp`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Multi-Store ERP
+
+
+ navigate(`${subDirectory}solutions/gst-billing-e-invoice`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ GST Billing & E-Invoice
+
+
+ navigate(`${subDirectory}solutions/offline-billing`)
+ }
+ style={{
+ padding: "0.75rem 1rem",
+ cursor: "pointer",
+ borderRadius: "4px",
+ transition: "background-color 0.2s",
+ fontSize: "14px",
+ fontWeight: "500",
+ }}
+ onMouseEnter={(e) => (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Offline Billing
+
+
+
+ )}
+
+ {/* Company Dropdown */}
+ {company && (
+
+
+ )}
+
(e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ About Us
+
+ (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Privacy Policy
+
+ (e.target.style.backgroundColor = "#f5f5f5")}
+ onMouseLeave={(e) =>
+ (e.target.style.backgroundColor = "transparent")
+ }
+ >
+ Testimonials
+
+
- Book Demo
+ navigate(`${subDirectory}book-demo`)}>
+ Book Demo
+
Store
BETA
- window.open("https://wa.me/917324000014", "_blank")}
- style={{ cursor: "pointer", display: "flex", alignItems: "center", gap: "0.5rem" }}
+ style={{
+ cursor: "pointer",
+ display: "flex",
+ alignItems: "center",
+ gap: "0.5rem",
+ }}
>
@@ -526,7 +809,13 @@ const Navbar = ({
Home
- { handleOfferings(); handleNavbarResponsive(); }} className="indusOpen">
+ {
+ handleOfferings();
+ handleNavbarResponsive();
+ }}
+ className="indusOpen"
+ >
Offerings
@@ -539,22 +828,54 @@ const Navbar = ({
{solutionsOpenRes && (
- navigate(`${subDirectory}solutions/retail-billing`)}>
+
+ navigate(`${subDirectory}solutions/retail-billing`)
+ }
+ >
Retail Billing
- navigate(`${subDirectory}solutions/inventory-purchase`)}>
+
+ navigate(`${subDirectory}solutions/inventory-purchase`)
+ }
+ >
Inventory & Purchase
- navigate(`${subDirectory}solutions/weighing-scale-pos`)}>
+
+ navigate(`${subDirectory}solutions/weighing-scale-pos`)
+ }
+ >
Weighing Scale POS
- navigate(`${subDirectory}solutions/multi-store-erp`)}>
+
+ navigate(`${subDirectory}solutions/multi-store-erp`)
+ }
+ >
Multi-Store ERP
- navigate(`${subDirectory}solutions/gst-billing-e-invoice`)}>
+
+ navigate(
+ `${subDirectory}solutions/gst-billing-e-invoice`
+ )
+ }
+ >
GST Billing & E-Invoice
- navigate(`${subDirectory}solutions/offline-billing`)}>
+
@@ -594,7 +915,10 @@ const Navbar = ({
Blog
- navigate(`${subDirectory}case-studies`)} className="indusOpen">
+ navigate(`${subDirectory}case-studies`)}
+ className="indusOpen"
+ >
Case Studies
@@ -602,14 +926,24 @@ const Navbar = ({
+ navigate(`${subDirectory}solutions/offline-billing`)
+ }
+ >
Offline Billing
- Book Demo
+ navigate(`${subDirectory}book-demo`)}>
+ Book Demo
+
Store
BETA
- window.open("https://wa.me/917324000014", "_blank")}
- style={{ cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", gap: "0.5rem" }}
+
+ window.open("https://wa.me/917324000014", "_blank")
+ }
+ style={{
+ cursor: "pointer",
+ display: "flex",
+ alignItems: "center",
+ justifyContent: "center",
+ gap: "0.5rem",
+ }}
>
@@ -629,10 +963,13 @@ const Navbar = ({
{/* Mobile Sticky Footer for Book Demo & WhatsApp */}
-
+ navigate(`${subDirectory}book-demo`)}
+ className="mobile-sticky-btn"
+ >
Book Demo
- window.open("https://wa.me/917324000014", "_blank")}
className="mobile-sticky-btn whatsapp-btn"
>
diff --git a/src/PozoApp/Components/NoLimt.jsx b/src/PozoApp/Components/NoLimt.jsx
index 2445e66..c3bcdb8 100644
--- a/src/PozoApp/Components/NoLimt.jsx
+++ b/src/PozoApp/Components/NoLimt.jsx
@@ -6,11 +6,13 @@ import "../Styles/NoLimt.scss";
import NoLimit from "../Images/NoLimit.png";
import { HiMiniArrowUpRight } from "react-icons/hi2";
import GSAPTextAnimation from "./GSAPTextAnimation";
+import { useNavigate } from "react-router-dom";
gsap.registerPlugin(ScrollTrigger, SplitText);
const NoLimt = ({ handleModalSignIn }) => {
+ const navigate = useNavigate();
const imageRef = useRef(null);
const titleRef = useRef(null);
const descRef = useRef(null);
@@ -111,7 +113,7 @@ const NoLimt = ({ handleModalSignIn }) => {
-
+ handleCardClick('inventory')}>
01 @@ -109,7 +123,7 @@ const Offering = () => { items available across locations.
+ handleCardClick('healthcare')}>
02 @@ -127,7 +141,7 @@ const Offering = () => { restaurants
+ handleCardClick('billing')}>
03 @@ -142,7 +156,7 @@ const Offering = () => { integration built-in.
+ handleCardClick('accounting')}>
04 @@ -230,9 +244,9 @@ const Offering = () => { {/* Book Demo CTA */}
-
{/* Background Video - Optimized loading */}
-
@@ -234,13 +248,18 @@ const OverView = ({
{/* AI Card */}
-
- {heroContent.description} - +{heroContent.description}
@@ -250,7 +269,7 @@ const OverView = ({
-
-
+ );
};
export default TrendingApp;
diff --git a/src/PozoApp/Components/TrustStrip.jsx b/src/PozoApp/Components/TrustStrip.jsx
index 043c16d..d297a30 100644
--- a/src/PozoApp/Components/TrustStrip.jsx
+++ b/src/PozoApp/Components/TrustStrip.jsx
@@ -5,7 +5,7 @@ const TrustStrip = () => {
return (
- What you need, right
- - when you need it. -
- {" "}
-
-
- {/*
+
+
+
- );
+
+
-
-
+ What you need, right
+ + when you need it. +
+ {" "}
+
+
+ {/*
-
-
+
- The right place for all your
-
-
-
-
+
+
+ The right place for all your
+
+
+
+
- Empowering Small Businesses Across India
+ Empowering Small Businesses Across #India
+
+ >
+ );
+};
+
+export default BookDemoPage;
diff --git a/src/PozoApp/Pages/CaseStudies.jsx b/src/PozoApp/Pages/CaseStudies.jsx
index 75ad3f1..ad55635 100644
--- a/src/PozoApp/Pages/CaseStudies.jsx
+++ b/src/PozoApp/Pages/CaseStudies.jsx
@@ -12,7 +12,7 @@ const SolutionsList = lazy(() => import("../Components/SolutionsList"));
const IndustriesList = lazy(() => import("../Components/IndustriesList"));
const CompanyList = lazy(() => import("../Components/companyList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
const CaseStudies = () => {
const dispatch = useDispatch();
@@ -60,7 +60,6 @@ const CaseStudies = () => {
.replace(/[^a-z0-9-]/gi, '')
.toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
const scrollToTop = () => {
diff --git a/src/PozoApp/Pages/HomePage.jsx b/src/PozoApp/Pages/HomePage.jsx
index 0832c60..880a3a8 100644
--- a/src/PozoApp/Pages/HomePage.jsx
+++ b/src/PozoApp/Pages/HomePage.jsx
@@ -4,7 +4,7 @@ import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import "./HomePage.scss";
import { IoClose } from "react-icons/io5";
- import LocalBusinessSchema from "../../Components/SEO/LocalBusinessSchema.jsx"
+import LocalBusinessSchema from "../../Components/SEO/LocalBusinessSchema.jsx";
import { FaWhatsapp } from "react-icons/fa";
import { useNavigate } from "react-router-dom";
import { FaChevronUp } from "react-icons/fa";
@@ -42,10 +42,11 @@ const CompanyList = lazy(() => import("../Components/companyList.jsx"));
const SolutionsList = lazy(() => import("../Components/SolutionsList.jsx"));
const BookDemo = lazy(() => import("../Components/BookDemo.jsx"));
const ModalSignIn = lazy(() => import("../Components/ModalSignIn.jsx"));
+const FloatingChat = lazy(() => import("../Components/FloatingChat.jsx"));
// import og from "../../../public/og/home.jpg"
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const HomePage = () => {
@@ -87,30 +88,36 @@ const HomePage = () => {
// App Data
dispatch(getAllApplicationData()).unwrap(),
// Token
- dispatch(PostToken({ username: "1000000001", password: "1234" })).unwrap()
+ dispatch(
+ PostToken({ username: "1000000001", password: "1234" })
+ ).unwrap(),
]);
// Process SEO data
if (seoConfigRes?.data?.statusCode === 1) {
const pages = seoConfigRes.data.data;
setAllpagesData(pages);
-
+
const SeoId = pages.find((e) => e.ConfigName === "home")?.ConfigId;
if (SeoId) {
// Fetch SEO details (non-blocking)
- dispatch(getSeo({ PageId: SeoId })).unwrap().then((response) => {
- if (response?.data?.statusCode === 1) {
- const data = response.data.data.find((e) => e.PageId === SeoId);
- if (data) {
- setSeoData({
- metaTitle: data?.MetaTitle,
- metaDescription: data?.MetaDesc,
- keywords: data?.Keywords,
- imageAltText: data?.ImgAltText,
- });
+ dispatch(getSeo({ PageId: SeoId }))
+ .unwrap()
+ .then((response) => {
+ if (response?.data?.statusCode === 1) {
+ const data = response.data.data.find(
+ (e) => e.PageId === SeoId
+ );
+ if (data) {
+ setSeoData({
+ metaTitle: data?.MetaTitle,
+ metaDescription: data?.MetaDesc,
+ keywords: data?.Keywords,
+ imageAltText: data?.ImgAltText,
+ });
+ }
}
- }
- });
+ });
}
}
@@ -121,9 +128,8 @@ const HomePage = () => {
);
setAppCategory(activeApps);
}
-
} catch (error) {
- console.error("Error fetching SEO data:", error);
+ console.error("Error initializing data:", error);
}
};
@@ -140,12 +146,11 @@ const HomePage = () => {
setAppCategory(finalsubCategory);
}
} catch (error) {
- console.error('Error fetching app data:', error);
+ console.error("Error fetching app data:", error);
}
};
console.log(AppCategory, "AppCategory");
-
useEffect(() => {
// Show page immediately - don't wait!
const timer = setTimeout(() => setLoading(false), 300);
@@ -180,7 +185,7 @@ const HomePage = () => {
};
}, []);
- // Separate useEffect for API calls
+ // 🚀 Optimized: Fetch categories in parallel with other data (if needed for navbar)
useEffect(() => {
const fetchCategoryData = async () => {
try {
@@ -188,10 +193,11 @@ const HomePage = () => {
if (response?.data?.statusCode === 1) {
const finalCategory = response?.data?.data;
setCategory(finalCategory);
-
+
// Auto-fetch first subcategory (non-blocking)
if (finalCategory?.[0]?.CateId) {
- dispatch(getSubCategoryData(finalCategory[0].CateId)).unwrap()
+ dispatch(getSubCategoryData(finalCategory[0].CateId))
+ .unwrap()
.then((subRes) => {
if (subRes?.data?.statusCode === 1) {
const activeSubCat = subRes?.data?.data?.filter(
@@ -200,7 +206,9 @@ const HomePage = () => {
setSubCategory(activeSubCat);
}
})
- .catch((err) => console.error("Error fetching subcategory:", err));
+ .catch((err) =>
+ console.error("Error fetching subcategory:", err)
+ );
}
}
} catch (error) {
@@ -214,9 +222,10 @@ const HomePage = () => {
} else {
fetchCategoryData();
}
- }, [Category]);
+ }, [AppCategory]);
// Auto-fetch apps when subcategories load
+ // Commented out - not needed with getAllApplicationData
// useEffect(() => {
// const getAppData = async (subcatId) => {
// const response = await dispatch(getApplicationData(subcatId)).unwrap();
@@ -233,33 +242,29 @@ const HomePage = () => {
// }
// }, [SubCategory]);
-
-
const scrollToTop = () => {
if (lenis) {
lenis.scrollTo(0, { duration: 1.5 });
} else {
- window.scrollTo({ top: 0, behavior: 'smooth' });
+ window.scrollTo({ top: 0, behavior: "smooth" });
}
- }
+ };
const redirectApp = async (AppName, AppId) => {
sessionStore("AppId", AppId);
sessionStore("AppName", AppName);
// Clean URL: Remove special chars, convert spaces to hyphens
- const cleanUrl = AppName
- .replace(/[,]/g, '') // Remove commas
- .replace(/\s+/g, '-') // Spaces to hyphens
- .replace(/&/g, 'and') // & to 'and'
- .replace(/[^a-z0-9-]/gi, '') // Remove other special chars
+ const cleanUrl = AppName.replace(/[,]/g, "") // Remove commas
+ .replace(/\s+/g, "-") // Spaces to hyphens
+ .replace(/&/g, "and") // & to 'and'
+ .replace(/[^a-z0-9-]/gi, "") // Remove other special chars
.toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
const handleNavigateLiveDemo = () => {
- navigate(`${subDirectory}live-Session`)
- }
+ navigate(`${subDirectory}live-Session`);
+ };
const handleDemoModal = () => setDemoModal(true);
const handleDemoModalClose = () => setDemoModal(false);
@@ -273,54 +278,51 @@ const HomePage = () => {
};
// Debug company state
- console.log('Company state:', company);
- console.log('Industry state:', industry);
+ console.log("Company state:", company);
+ console.log("Industry state:", industry);
// Moved loading check after all hooks
if (loading) {
return
+
+
+
+
{showHeadline && (
@@ -386,7 +387,7 @@ const HomePage = () => {
handleModalSignInClose={handleModalSignInClose}
/>
-
+
window.open("https://wa.me/917324000014", "_blank")}
- style={{ cursor: "pointer" }}
- >
-
+
@@ -425,7 +422,6 @@ const HomePage = () => {
)}
-
{industry && (
diff --git a/src/PozoApp/Pages/Solutions/HealthcareManagement.jsx b/src/PozoApp/Pages/Solutions/HealthcareManagement.jsx
new file mode 100644
index 0000000..9ce4b08
--- /dev/null
+++ b/src/PozoApp/Pages/Solutions/HealthcareManagement.jsx
@@ -0,0 +1,397 @@
+import React, { useEffect, useRef, useState, lazy, Suspense } from "react";
+import { useNavigate } from "react-router-dom";
+import { gsap } from "gsap";
+import { ScrollTrigger } from "gsap/ScrollTrigger";
+import { useDispatch } from "react-redux";
+import { getAllApplicationData } from "../../../features/publicHome/publicHome";
+import { sessionStore } from "../../../Services/others";
+import Navbar from "../../Components/Navbar";
+import Footer from "../../Components/Footer";
+import { FaHeartbeat, FaCheckCircle, FaRocket, FaShieldAlt, FaMobileAlt, FaChartLine, FaCreditCard, FaBarcode, FaCloud, FaFileAlt, FaEnvelope, FaLock } from "react-icons/fa";
+import { MdLocalHospital, MdHealthAndSafety, MdWorkspacePremium, MdMedicalServices, MdPublic, MdBarChart } from "react-icons/md";
+import { HiArrowRight, HiCheck } from "react-icons/hi";
+
+const healthcareHero = "https://images.unsplash.com/photo-1559757148-5c350d0d3c56?w=1200&h=800&fit=crop&q=90";
+const healthcareFeatures = "https://images.unsplash.com/photo-1576091160399-112ba8d25d1f?w=1200&h=800&fit=crop&q=90";
+const healthcareBenefits = "https://images.unsplash.com/photo-1551190822-a9333d879b1f?w=1200&h=800&fit=crop&q=90";
+import "./SolutionPage.scss";
+
+const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
+const CompanyList = lazy(() => import("../../Components/companyList"));
+const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
+
+const subDirectory = import.meta.env.ENV_BASE_URL;
+gsap.registerPlugin(ScrollTrigger);
+
+const HealthcareManagement = () => {
+ const navigate = useNavigate();
+ const dispatch = useDispatch();
+ const heroRef = useRef(null);
+ const featuresRef = useRef([]);
+ const [solutionsOpen, setSolutionsOpen] = useState(false);
+ const [closingSolutions, setClosingSolutions] = useState(false);
+ const solutionsRef = useRef(null);
+ const [openFaqIndex, setOpenFaqIndex] = useState(null);
+
+ const [industry, setIndustry] = useState(false);
+ const [closingIndustry, setClosingIndustry] = useState(false);
+ const industryRef = useRef(null);
+ const [company, setCompany] = useState(false);
+ const [closingCompany, setClosingCompany] = useState(false);
+ const companyRef = useRef(null);
+ const [AppCategory, setAppCategory] = useState([]);
+
+ const features = [
+ {
+ icon: FaHeartbeat,
+ title: "Patient Management",
+ description: "Complete patient records, appointment scheduling, and medical history tracking. Digital patient files with secure access controls. Automated appointment reminders and follow-up scheduling."
+ },
+ {
+ icon: FaShieldAlt,
+ title: "Medical Billing & Insurance",
+ description: "Streamlined billing processes with insurance claim management. Automated invoice generation and payment tracking. Integration with major insurance providers and claim processing systems."
+ },
+ {
+ icon: FaMobileAlt,
+ title: "Digital Prescriptions",
+ description: "Electronic prescription management with drug interaction alerts. Digital prescription pads with doctor signatures. Integration with pharmacy systems for seamless medication dispensing."
+ },
+ {
+ icon: FaChartLine,
+ title: "Healthcare Analytics",
+ description: "Comprehensive reporting on patient outcomes, treatment effectiveness, and operational metrics. Real-time dashboards for healthcare administrators and medical staff."
+ }
+ ];
+
+ const benefits = [
+ "Complete patient record management system",
+ "Appointment scheduling and calendar management",
+ "Digital prescription and medication tracking",
+ "Medical billing and insurance claim processing",
+ "Laboratory test result management",
+ "Doctor and staff scheduling system",
+ "Patient communication and reminder system",
+ "Medical inventory and equipment tracking",
+ "Healthcare compliance and audit trails",
+ "Telemedicine and virtual consultation support",
+ "Emergency contact and alert system",
+ "Medical report generation and sharing",
+ "Healthcare analytics and performance metrics",
+ "Multi-location clinic management",
+ "Patient feedback and satisfaction tracking",
+ "Medical equipment maintenance scheduling",
+ "Healthcare data security and privacy protection"
+ ];
+
+ const getAppData = async () => {
+ try {
+ const response = await dispatch(getAllApplicationData()).unwrap();
+ if (response?.data?.statusCode === 1) {
+ let finalsubCategory = response?.data?.data?.filter((value) => value.ActiveStatus === "A");
+ setAppCategory(finalsubCategory);
+ }
+ } catch (error) {
+ console.error('Error fetching app data:', error);
+ }
+ };
+
+ const redirectApp = (AppName, AppId) => {
+ sessionStore("AppId", AppId);
+ sessionStore("AppName", AppName);
+ const cleanUrl = AppName.replace(/[,]/g, '').replace(/\s+/g, '-').replace(/&/g, 'and').replace(/[^a-z0-9-]/gi, '').toLowerCase();
+ navigate(`${subDirectory}industries/${cleanUrl}`);
+ };
+
+ useEffect(() => {
+ getAppData();
+ }, []);
+
+ useEffect(() => {
+ if (heroRef.current) {
+ gsap.fromTo(heroRef.current.children, { opacity: 0, y: 30 }, { opacity: 1, y: 0, duration: 1, stagger: 0.2, ease: "power3.out" });
+ }
+ featuresRef.current.forEach((item, index) => {
+ if (item) {
+ gsap.fromTo(item, { opacity: 0, x: -30 }, { opacity: 1, x: 0, duration: 0.8, delay: index * 0.1, ease: "power3.out", scrollTrigger: { trigger: item, start: "top 85%", toggleActions: "play none none reverse" } });
+ }
+ });
+ return () => { ScrollTrigger.getAll().forEach(trigger => trigger.kill()); };
+ }, []);
+
+ return (
+
+
+ );
+};
+
+export default HealthcareManagement;
\ No newline at end of file
diff --git a/src/PozoApp/Pages/Solutions/InventoryPurchase.jsx b/src/PozoApp/Pages/Solutions/InventoryPurchase.jsx
index 779bb18..721a23a 100644
--- a/src/PozoApp/Pages/Solutions/InventoryPurchase.jsx
+++ b/src/PozoApp/Pages/Solutions/InventoryPurchase.jsx
@@ -20,7 +20,7 @@ const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
const CompanyList = lazy(() => import("../../Components/companyList"));
const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const InventoryPurchase = () => {
@@ -101,7 +101,6 @@ const InventoryPurchase = () => {
sessionStore("AppName", AppName);
const cleanUrl = AppName.replace(/[,]/g, '').replace(/\s+/g, '-').replace(/&/g, 'and').replace(/[^a-z0-9-]/gi, '').toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
@@ -202,9 +201,10 @@ const InventoryPurchase = () => {
Start Free Trial
+
+
+
+
+
+
+
+
+
+ Complete Healthcare Management Solution++ Streamline your healthcare operations with our comprehensive management system. + Manage patient records, appointments, billing, and medical workflows from one integrated platform. + Digital prescriptions, insurance claim processing, and healthcare analytics included. + HIPAA compliant with advanced security features. Perfect for clinics, hospitals, and healthcare providers. + Improve patient care while reducing administrative overhead. + +
+
+
+
+
+
+
+
+ Why Choose Healthcare Management?Complete healthcare operations in one platform
+
+
+
+
+
+
+ {features.map((feature, index) => {
+ const IconComponent = feature.icon;
+ return (
+
+ (featuresRef.current[index] = el)} className="feature-card">
+
+ );
+ })}
+ {feature.title}{feature.description} +
+
+
+
+
+
+
+
+ Complete Healthcare Features++ Comprehensive healthcare management tools to improve patient care and operational efficiency + +
+ {benefits.map((benefit, index) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+ 24/7
+ Support
+
+
+ HIPAA
+ Compliant
+
+
+
+
+ Perfect For+Ideal solution for healthcare providers and medical facilities +
+
+
+
+
+
+ Hospitals+Large healthcare facilities requiring comprehensive patient management and multi-department coordination +
+
+
+
+ Clinics+Private clinics and medical practices needing efficient appointment scheduling and patient record management +
+
+
+
+ Specialty Centers+Specialized medical centers requiring tailored workflows and treatment tracking systems +
+
+
+
+ Diagnostic Centers+Medical diagnostic facilities needing lab result management and report generation capabilities +
+
+
+
+ Telemedicine+Healthcare providers offering remote consultations and virtual patient care services +
+
+
+
+ Healthcare Networks+Multi-location healthcare networks requiring centralized management and reporting +
+
+
+
+ Frequently Asked Questions+Get answers to common questions about Healthcare Management +
+
+
+
+ setOpenFaqIndex(openFaqIndex === 0 ? null : 0)}>
+
+ Is the system HIPAA compliant?+ {openFaqIndex === 0 ? '−' : '+'} +
+
+ Yes, our healthcare management system is fully HIPAA compliant with advanced security features, data encryption, and audit trails to protect patient information. +
+
+ setOpenFaqIndex(openFaqIndex === 1 ? null : 1)}>
+
+ Can I manage multiple locations?+ {openFaqIndex === 1 ? '−' : '+'} +
+
+ Yes, manage multiple clinics or hospital locations from one centralized system with location-specific reporting and unified patient records. +
+
+ setOpenFaqIndex(openFaqIndex === 2 ? null : 2)}>
+
+ Does it support telemedicine?+ {openFaqIndex === 2 ? '−' : '+'} +
+
+ Yes, integrated telemedicine features allow virtual consultations, remote patient monitoring, and digital prescription management. +
+
+ setOpenFaqIndex(openFaqIndex === 3 ? null : 3)}>
+
+ How does insurance billing work?+ {openFaqIndex === 3 ? '−' : '+'} +
+
+ Automated insurance claim processing with integration to major insurance providers. Generate claims, track approvals, and manage reimbursements seamlessly. +
+
+ setOpenFaqIndex(openFaqIndex === 4 ? null : 4)}>
+
+ Can I customize medical forms?+ {openFaqIndex === 4 ? '−' : '+'} +
+
+ Yes, create custom medical forms, patient intake forms, and treatment templates tailored to your specialty and practice requirements. +
+
+ Ready to Transform Your Healthcare Practice?+Improve patient care and streamline operations with our healthcare management solution +
+
+
diff --git a/src/PozoApp/Pages/Solutions/MultiStoreERP.jsx b/src/PozoApp/Pages/Solutions/MultiStoreERP.jsx
index 6d6804a..113b0b1 100644
--- a/src/PozoApp/Pages/Solutions/MultiStoreERP.jsx
+++ b/src/PozoApp/Pages/Solutions/MultiStoreERP.jsx
@@ -20,7 +20,7 @@ const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
const CompanyList = lazy(() => import("../../Components/companyList"));
const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const MultiStoreERP = () => {
@@ -102,7 +102,6 @@ const MultiStoreERP = () => {
sessionStore("AppName", AppName);
const cleanUrl = AppName.replace(/[,]/g, '').replace(/\s+/g, '-').replace(/&/g, 'and').replace(/[^a-z0-9-]/gi, '').toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
@@ -165,7 +164,10 @@ const MultiStoreERP = () => {
const subDir = import.meta.env.ENV_BASE_URL || import.meta.env.BASE_URL || '';
navigate(`${subDir}signin`);
}}>Start Free Trial
diff --git a/src/PozoApp/Pages/Solutions/OfflineBilling.jsx b/src/PozoApp/Pages/Solutions/OfflineBilling.jsx
index aa6f2ea..2fad38b 100644
--- a/src/PozoApp/Pages/Solutions/OfflineBilling.jsx
+++ b/src/PozoApp/Pages/Solutions/OfflineBilling.jsx
@@ -20,7 +20,7 @@ const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
const CompanyList = lazy(() => import("../../Components/companyList"));
const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const OfflineBilling = () => {
@@ -101,7 +101,6 @@ const OfflineBilling = () => {
sessionStore("AppName", AppName);
const cleanUrl = AppName.replace(/[,]/g, '').replace(/\s+/g, '-').replace(/&/g, 'and').replace(/[^a-z0-9-]/gi, '').toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
@@ -162,7 +161,10 @@ const OfflineBilling = () => {
const subDir = import.meta.env.ENV_BASE_URL || import.meta.env.BASE_URL || '';
navigate(`${subDir}signin`);
}}>Start Free Trial
diff --git a/src/PozoApp/Pages/Solutions/RetailBilling.jsx b/src/PozoApp/Pages/Solutions/RetailBilling.jsx
index 74521dd..1e798c8 100644
--- a/src/PozoApp/Pages/Solutions/RetailBilling.jsx
+++ b/src/PozoApp/Pages/Solutions/RetailBilling.jsx
@@ -11,7 +11,7 @@ import { FaCashRegister, FaCheckCircle, FaRocket, FaShieldAlt, FaMobileAlt, FaCh
import { MdStore, MdShoppingCart, MdLocalPharmacy, MdPhoneIphone, MdCheckroom, MdBusiness } from "react-icons/md";
import { HiArrowRight, HiCheck } from "react-icons/hi";
// Related images - Retail Billing & POS
-const retailBillingHero = "https://images.unsplash.com/photo-1556742031-c6961e8560b0?w=1200&h=800&fit=crop&q=90";
+const retailBillingHero = "https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?w=1200&h=800&fit=crop&q=90";
const retailBillingFeatures = "https://images.unsplash.com/photo-1556740738-b6a63e27c4df?w=1200&h=800&fit=crop&q=90";
const retailBillingBenefits = "https://images.unsplash.com/photo-1556741568-055d848f8bfd?w=1200&h=800&fit=crop&q=90";
import "./SolutionPage.scss";
@@ -20,7 +20,7 @@ const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
const CompanyList = lazy(() => import("../../Components/companyList"));
const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const RetailBilling = () => {
@@ -111,7 +111,6 @@ const RetailBilling = () => {
.replace(/[^a-z0-9-]/gi, '')
.toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
diff --git a/src/PozoApp/Pages/Solutions/WeighingScalePOS.jsx b/src/PozoApp/Pages/Solutions/WeighingScalePOS.jsx
index 0e28247..871f938 100644
--- a/src/PozoApp/Pages/Solutions/WeighingScalePOS.jsx
+++ b/src/PozoApp/Pages/Solutions/WeighingScalePOS.jsx
@@ -20,7 +20,7 @@ const IndustriesList = lazy(() => import("../../Components/IndustriesList"));
const CompanyList = lazy(() => import("../../Components/companyList"));
const SolutionsList = lazy(() => import("../../Components/SolutionsList"));
-const subDirectory = import.meta.env.BASE_URL;
+const subDirectory = import.meta.env.ENV_BASE_URL;
gsap.registerPlugin(ScrollTrigger);
const WeighingScalePOS = () => {
@@ -100,7 +100,6 @@ const WeighingScalePOS = () => {
sessionStore("AppName", AppName);
const cleanUrl = AppName.replace(/[,]/g, '').replace(/\s+/g, '-').replace(/&/g, 'and').replace(/[^a-z0-9-]/gi, '').toLowerCase();
navigate(`${subDirectory}industries/${cleanUrl}`);
- window.location.reload();
};
useEffect(() => {
@@ -162,7 +161,10 @@ const WeighingScalePOS = () => {
const subDir = import.meta.env.ENV_BASE_URL || import.meta.env.BASE_URL || '';
navigate(`${subDir}signin`);
}}>Start Free Trial
diff --git a/src/PozoApp/Styles/BookDemo.scss b/src/PozoApp/Styles/BookDemo.scss
index b80f395..9485334 100644
--- a/src/PozoApp/Styles/BookDemo.scss
+++ b/src/PozoApp/Styles/BookDemo.scss
@@ -1,223 +1,571 @@
.BookDemo-Master {
- width: 100%;
- height: 100vh;
- background-color: #00000086;
- display: flex;
- align-items: center;
- justify-content: center;
- position: fixed;
- inset: 0;
- z-index: 1001;
- font-family: "NeueMontreal";
- backdrop-filter: blur(5px);
- animation: fadeIn 0.3s ease forwards;
+ width: 100%;
+ height: 100vh;
+ background-color: #00000086;
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ position: fixed;
+ inset: 0;
+ z-index: 1001;
+ font-family: "NeueMontreal";
+ backdrop-filter: blur(5px);
+ animation: fadeIn 0.3s ease forwards;
- &.closing {
- animation: fadeOut 0.5s ease forwards;
- }
+ &.closing {
+ animation: fadeOut 0.5s ease forwards;
+ }
+
+ &.page-view {
+ position: static;
+ background-color: transparent;
+ backdrop-filter: none;
+ height: auto;
+ min-height: 100vh;
+ padding: 2rem 0;
+ animation: none;
.BookDemoMain {
- width: 600px;
- font-family: "NeueMontreal";
- background-color: #fff;
- border-radius: 12px;
- padding: 2rem;
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
+ width: 100%;
+ // max-width: 1200px;
+ margin: 0 auto;
+ box-shadow: none;
+ border-radius: 0;
+ padding: 2rem;
+ animation: none;
+ }
+ }
+
+ .BookDemoMain {
+ width: 800px;
+ max-height: 80vh;
+ overflow: hidden;
+ font-family: "NeueMontreal";
+ background-color: #fff;
+ border-radius: 12px;
+ padding: 1.5rem;
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
+ display: flex;
+ flex-direction: column;
+ gap: 1.5rem;
+ animation: slideInRightpage 0.5s ease forwards;
+ margin-top: 5rem;
+
+ &.closing {
+ animation: slideInRightpage 0.5s ease forwards;
+ }
+
+ @media (max-width: 768px) {
+ width: 95vw;
+ padding: 1rem;
+ }
+
+ .closing & {
+ animation: slideInRightpage 0.5s ease forwards;
+ }
+
+ .BookDemoHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ font-family: "NeueMontreal";
+
+ .BookDemoHeaderLeft {
display: flex;
flex-direction: column;
- gap: 2rem;
- animation: slideInRightpage 0.5s ease forwards;
+ gap: 0.3rem;
+ font-family: "NeueMontreal";
- &.closing {
- animation: slideInRightpage 0.5s ease forwards;
+ div {
+ font-size: 1.6rem;
+ font-weight: 500;
+ color: #000;
}
- @media (max-width: 768px) {
- width: 90vw;
- padding: 1rem;
+ p {
+ font-size: 0.9rem;
+ color: #1e1e1e;
+ margin: 0;
+ }
+ }
+
+ .BookDemoHeaderRight {
+ font-family: "NeueMontreal";
+ font-size: 1.2rem;
+ color: #fff;
+ padding: 8px;
+ border-radius: 50%;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: all 0.2s ease;
+
+ .icon-container {
+ position: relative;
+ background-color: #000;
+ height: 40px;
+ width: 40px;
+ border-radius: 50%;
+ margin-left: 2rem;
+ overflow: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
- .closing & {
- animation: slideInRightpage 0.5s ease forwards;
+ &:hover .icon-container {
+ transform: scale(0.9);
}
- .BookDemoHeader {
- display: flex;
- justify-content: space-between;
- align-items: flex-start;
- font-family: "NeueMontreal";
+ .icon-main,
+ .icon-hover {
+ position: absolute;
+ color: #fff;
+ font-size: 16px;
+ transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
+ }
- .BookDemoHeaderLeft {
- display: flex;
- flex-direction: column;
- gap: 0.3rem;
- font-family: "NeueMontreal";
+ .icon-main {
+ transform: translate(0, 0);
+ }
- div {
- font-size: 1.6rem;
- font-weight: 500;
- color: #000;
- }
+ .icon-hover {
+ transform: translate(-35px, 0);
+ }
- p {
- font-size: 0.9rem;
- color: #1e1e1e;
- margin: 0;
- }
- }
-
- .BookDemoHeaderRight {
- font-family: "NeueMontreal";
- font-size: 1.2rem;
- color: #fff;
- padding: 8px;
- border-radius: 50%;
- cursor: pointer;
- display: flex;
- align-items: center;
- justify-content: center;
- transition: all 0.2s ease;
-
- .icon-container {
- position: relative;
- background-color: #000;
- height: 40px;
- width: 40px;
- border-radius: 50%;
- margin-left: 2rem;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- }
-
- &:hover .icon-container {
- transform: scale(0.9);
- }
-
- .icon-main,
- .icon-hover {
- position: absolute;
- color: #fff;
- font-size: 16px;
- transition: transform 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- }
-
- .icon-main {
- transform: translate(0, 0);
- }
-
- .icon-hover {
- transform: translate(-35px, 0);
- }
-
- &:hover .icon-main {
- transform: translate(35px, 0);
- }
-
- &:hover .icon-hover {
- transform: translate(0, 0);
- }
+ &:hover .icon-main {
+ transform: translate(35px, 0);
+ }
+
+ &:hover .icon-hover {
+ transform: translate(0, 0);
+ }
+ }
+ }
+
+ .DemoTypesMain {
+ display: flex;
+ gap: 1rem;
+ justify-content: flex-start;
+ margin-top: 1rem;
+ flex-wrap: wrap;
+ font-family: "NeueMontreal";
+
+ .DemoType {
+ background: #f4f4f4;
+ border-radius: 8px;
+ padding: 0.8rem 1rem;
+ color: #000;
+ font-family: "NeueMontreal";
+ display: flex;
+ align-items: center;
+ gap: 0.6rem;
+ font-size: 0.95rem;
+ font-weight: 400;
+ cursor: pointer;
+ transition: background 0.2s ease;
+ width: max-content;
+ height: max-content;
+ white-space: nowrap;
+
+ img {
+ width: 25px;
+ height: 25px;
+ }
+
+ svg {
+ color: #3588fd;
+ font-size: 20px;
+ }
+
+ // Override Calendly popup widget default styles
+ .calendly-popup-widget {
+ font-family: "NeueMontreal" !important;
+ font-size: 0.95rem !important;
+ font-weight: 400 !important;
+ color: #000 !important;
+ background: transparent !important;
+ border: none !important;
+ padding: 0 !important;
+ cursor: pointer !important;
+ display: flex !important;
+ align-items: center !important;
+ gap: 0.6rem !important;
+ width: auto !important;
+ height: auto !important;
+ white-space: nowrap !important;
+ text-decoration: none !important;
+ box-shadow: none !important;
+
+ &:hover {
+ background: transparent !important;
+ color: #000 !important;
+ }
+
+ span,
+ div {
+ font-family: "NeueMontreal" !important;
+ font-size: 0.95rem !important;
+ font-weight: 400 !important;
+ color: #000 !important;
+ }
+ }
+
+ &:hover {
+ background: #e6e6e6;
+ }
+ }
+
+ .recommended-badge {
+ background: #ff6b35;
+ color: white;
+ font-size: 0.7rem;
+ font-weight: 600;
+ padding: 0.2rem 0.5rem;
+ border-radius: 12px;
+ margin-left: 0.5rem;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ box-shadow: 0 2px 4px rgba(255, 107, 53, 0.3);
+ animation: pulse 2s infinite;
+ }
+
+ @keyframes pulse {
+ 0% {
+ box-shadow: 0 2px 4px rgba(255, 107, 53, 0.3);
+ }
+ 50% {
+ box-shadow: 0 2px 8px rgba(255, 107, 53, 0.5);
+ }
+ 100% {
+ box-shadow: 0 2px 4px rgba(255, 107, 53, 0.3);
+ }
+ }
+
+ @media (max-width: 768px) {
+ justify-content: center;
+ gap: 0.8rem;
+ }
+ }
+
+ .demoChat {
+ margin-top: 0.5rem;
+ display: flex;
+ justify-content: flex-end;
+ align-items: flex-end;
+ gap: 0.6rem;
+ font-size: 0.85rem;
+ font-family: "NeueMontreal";
+ color: #333;
+ flex-direction: column;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ padding: 0.5rem;
+ border-radius: 8px;
+
+ &:hover {
+ background: #f8f8f8;
+ transform: scale(1.02);
+ }
+
+ img {
+ width: 35px;
+ height: 35px;
+ cursor: pointer;
+ }
+ }
+
+ .chatInterface {
+ margin-bottom: 1rem;
+ border: 1px solid #e0e0e0;
+ border-radius: 8px;
+ background: #fff;
+
+ .calendlyInterface {
+ margin-bottom: 1rem;
+ border: 1px solid #e0e0e0;
+ border-radius: 8px;
+ background: #fff;
+ overflow: hidden;
+
+ .calendlyHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.8rem;
+ border-bottom: 1px solid #e0e0e0;
+ background: #f8f9fa;
+ border-radius: 8px 8px 0 0;
+
+ span {
+ font-size: 0.9rem;
+ font-weight: 500;
+ color: #333;
+ }
+
+ .calendlyClose {
+ background: none;
+ border: none;
+ font-size: 16px;
+ cursor: pointer;
+ color: #666;
+ padding: 4px 8px;
+ border-radius: 4px;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background: #e9ecef;
+ color: #333;
}
+ }
}
- .DemoTypesMain {
- display: flex;
- gap: 1rem;
- justify-content: flex-start;
- margin-top: 1rem;
- flex-wrap: wrap;
- font-family: "NeueMontreal";
+ .calendlyEmbed {
+ height: 600px;
+ overflow: hidden;
- .DemoType {
- background: #f4f4f4;
- border-radius: 8px;
- padding: 0.8rem 1rem;
- color: #000;
+ iframe {
+ width: 100%;
+ height: 100%;
+ border: none;
+ }
+ }
+ }
+
+ .chatHeader {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.8rem;
+ border-bottom: 1px solid #e0e0e0;
+ background: #f8f9fa;
+ border-radius: 8px 8px 0 0;
+
+ span {
+ font-size: 0.9rem;
+ font-weight: 500;
+ color: #333;
+ }
+
+ .chatClose {
+ background: none;
+ border: none;
+ font-size: 16px;
+ cursor: pointer;
+ color: #666;
+ padding: 4px 8px;
+ border-radius: 4px;
+ transition: all 0.2s ease;
+
+ &:hover {
+ background: #e9ecef;
+ color: #333;
+ }
+ }
+ }
+
+ .chatMessages {
+ height: 180px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 0.8rem;
+ border: 1px solid #eee;
+ touch-action: auto;
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ display: block;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: #f1f1f1;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #ccc;
+ border-radius: 3px;
+
+ &:hover {
+ background: #999;
+ }
+ }
+
+ .chatMessage {
+ margin-bottom: 0.8rem;
+ padding: 0.7rem;
+ border-radius: 8px;
+ font-size: 0.9rem;
+ line-height: 1.4;
+ word-wrap: break-word;
+
+ &.bot {
+ background: #f0f0f0;
+ text-align: left;
+ margin-right: 2rem;
+ }
+
+ &.user {
+ background: #3588fd;
+ color: white;
+ text-align: right;
+ margin-left: 2rem;
+ }
+
+ &.faq {
+ background: none;
+ padding: 0.5rem;
+
+ .faqButtons {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin-top: 0.5rem;
+
+ .faqButton {
+ background: #e3f2fd;
+ border: 1px solid #3588fd;
+ color: #3588fd;
+ padding: 0.4rem 0.8rem;
+ border-radius: 20px;
+ font-size: 0.8rem;
font-family: "NeueMontreal";
- display: flex;
- align-items: center;
- gap: 0.6rem;
- font-size: 0.95rem;
font-weight: 400;
cursor: pointer;
- transition: background 0.2s ease;
- width: max-content;
- height: max-content;
- white-space: nowrap;
-
- img {
- width: 25px;
- height: 25px;
- }
+ transition: all 0.2s ease;
&:hover {
- background: #e6e6e6;
+ background: #3588fd;
+ color: white;
}
+ }
}
+ }
+
+ &.featureList {
+ background: #f8f9fa;
+ padding: 0.8rem;
+ border-left: 3px solid #28a745;
+
+ .featureList {
+ .featureItem {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ margin-bottom: 0.4rem;
+ font-size: 0.85rem;
+
+ .featureIcon {
+ color: #28a745;
+ font-weight: bold;
+ font-size: 0.9rem;
+ }
+ }
+
+ .featureContact {
+ margin-top: 0.8rem;
+ padding-top: 0.8rem;
+ border-top: 1px solid #dee2e6;
+ font-size: 0.85rem;
+ color: #3588fd;
+ font-weight: 500;
+ }
+ }
+ }
}
- .demoChat {
- margin-top: 5rem;
- display: flex;
- justify-content: flex-end;
- align-items: flex-end;
- gap: 0.6rem;
- font-size: 0.85rem;
- font-family: "NeueMontreal";
- color: #333;
- flex-direction: column;
+ .clickablePhone {
+ color: #3588fd;
+ cursor: pointer;
+ text-decoration: underline;
+ font-weight: 500;
+ transition: all 0.2s ease;
- img {
- width: 35px;
- height: 35px;
- cursor: pointer;
- }
+ &:hover {
+ color: #2c7ae0;
+ text-decoration: none;
+ }
}
+ }
+
+ .chatInput {
+ display: flex;
+ padding: 0.5rem;
+ border-top: 1px solid #e0e0e0;
+
+ input {
+ flex: 1;
+ padding: 0.5rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 0.85rem;
+ outline: none;
+
+ &:focus {
+ border-color: #3588fd;
+ }
+ }
+
+ button {
+ margin-left: 0.5rem;
+ padding: 0.5rem 1rem;
+ background: #3588fd;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 0.85rem;
+
+ &:hover {
+ background: #2c7ae0;
+ }
+ }
+ }
}
+ }
}
/* ---------- Animations ---------- */
@keyframes fadeIn {
- from {
- opacity: 0;
- // transform: translateX(0);
- }
- to {
- opacity: 1;
- // transform: translateX(0);
- }
+ from {
+ opacity: 0;
+ // transform: translateX(0);
+ }
+ to {
+ opacity: 1;
+ // transform: translateX(0);
+ }
}
@keyframes fadeOut {
- from {
- opacity: 1;
- // transform: translateX(0);
- }
- to {
- opacity: 0;
- // transform: translateX(0);
- }
+ from {
+ opacity: 1;
+ // transform: translateX(0);
+ }
+ to {
+ opacity: 0;
+ // transform: translateX(0);
+ }
}
@keyframes slideInRight {
- from {
- // transform: translateX(100%);
- opacity: 0;
- }
- to {
- // transform: translateX(0);
- opacity: 1;
- }
+ from {
+ // transform: translateX(100%);
+ opacity: 0;
+ }
+ to {
+ // transform: translateX(0);
+ opacity: 1;
+ }
}
@keyframes slideInRightpage {
- from {
- opacity: 1;
- }
- to {
- // transform: translateX(100%);
- opacity: 1;
- }
+ from {
+ opacity: 1;
+ }
+ to {
+ // transform: translateX(100%);
+ opacity: 1;
+ }
}
diff --git a/src/PozoApp/Styles/Offering.scss b/src/PozoApp/Styles/Offering.scss
index 36ce346..a5f946f 100644
--- a/src/PozoApp/Styles/Offering.scss
+++ b/src/PozoApp/Styles/Offering.scss
@@ -58,6 +58,13 @@
color: #fff;
background-size: cover;
background-position: center;
+ cursor: pointer;
+ transition: all 0.3s ease;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ }
}
// Background images for each card
diff --git a/src/PozoApp/Styles/OverView.scss b/src/PozoApp/Styles/OverView.scss
index e1da993..0d0137a 100644
--- a/src/PozoApp/Styles/OverView.scss
+++ b/src/PozoApp/Styles/OverView.scss
@@ -3,6 +3,7 @@
height: 100vh;
background: #000;
display: flex;
+ justify-content: space-around;
flex-direction: column;
font-family: "NeueMontreal", sans-serif;
color: #fff;
diff --git a/src/check.js b/src/check.js
deleted file mode 100644
index e69de29..0000000
diff --git a/src/check.jsx b/src/check.jsx
new file mode 100644
index 0000000..8611e49
--- /dev/null
+++ b/src/check.jsx
@@ -0,0 +1,61 @@
+import { Outlet, Link } from "react-router-dom";
+import { Breadcrumb } from "antd";
+import { useSelector } from "react-redux";
+import { breadCrumbSelector } from "../../features/appPage/centerPage";
+import { getSession } from "../../Services/others";
+
+const CenterPage = () => {
+ const breadCrumb = useSelector(breadCrumbSelector);
+ const MobileNo = getSession("MobileNo");
+ const UserName = getSession("userName");
+ const UserType = getSession("UserType");
+
+ return (
+
+
+ );
+};
+
+export default CenterPage;
diff --git a/src/features/AuthenticationTokens/AuthenticationToken.js b/src/features/AuthenticationTokens/AuthenticationToken.js
index 1dba8f4..f277573 100644
--- a/src/features/AuthenticationTokens/AuthenticationToken.js
+++ b/src/features/AuthenticationTokens/AuthenticationToken.js
@@ -12,6 +12,10 @@ const EmailApiUrl = import.meta.env.ENV_EMAIL_API;
const axiosInstance = axios.create({
baseURL: apiUrl,
+ timeout: 30000,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
});
const axiosRetailInstance = axios.create({
diff --git a/src/main.jsx b/src/main.jsx
index 411fd0f..2f3180e 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -21,18 +21,13 @@ import "./theme/pozo.css";
// }
ReactDOM.createRoot(document.getElementById("root")).render(
- //
+
+
+
+ {breadCrumb?.length > 0 && (
+
+
+
+
+ {UserName ? UserName : MobileNo ? MobileNo : "Guest"}{" "}
+ {UserType}
+
+
+
+
+ |
|---|