post_enrollment_app/web/index.html
2025-07-08 16:32:48 +05:30

291 lines
9.1 KiB
HTML
Executable File

<!DOCTYPE html>
<html lang="">
<head>
<base href="$FLUTTER_BASE_HREF">
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="Nhance App Flutter">
<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="nhance_app_pwa">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<!-- Favicon -->
<link rel="icon" type="image/png" href="favicon.png"/>
<title>Nhance</title>
<link rel="manifest" href="manifest.json">
<style>
#botmanWidgetRoot {
display: none !important;
}
body.show-botman #botmanWidgetRoot {
display: block !important;
}
#botmanWidgetRoot > div{
bottom: 80px !important;
right: 10px !important;
z-index: 9999 !important;
min-width: 80px !important;
min-height: 100px !important;
}
.content {
width: 10%;
height: 10vh;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #FFFCE5; /* Overlay background color with opacity */
display: flex;
justify-content: center;
align-items: center;
}
/* Styles for the loading indicator */
.indicator {
width: 5vw;
}
</style>
<script>
const hiddenRoutes = ['/#login'];
function toggleBotmanVisibility() {
const currentHash = window.location.hash;
const shouldShow = hiddenRoutes.includes(currentHash);
document.body.classList.toggle('show-botman', shouldShow);
console.log('Current hash:', currentHash, '| Botman visible:', shouldShow);
}
// Initial check after load
setTimeout(toggleBotmanVisibility, 500);
// React to route changes (Flutter uses hash-based routing)
window.addEventListener('hashchange', () => {
setTimeout(toggleBotmanVisibility, 300);
});
</script>
<!-- This script adds the flutter initialization JS code -->
<script src="flutter.js" defer></script>
<script src='https://cdn.jsdelivr.net/npm/botman-web-widget@0/build/js/widget.js'></script>
</head>
<body style="overflow:hidden">
<div id="loading_indicator" class="container overlay">
<img class="indicator" src="assets/nhance-loader.gif" alt="">
</div>
<script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-auth.js"></script>
<script type="module">
// Import the functions you need from the SDKs you need
import { initializeApp } from "https://www.gstatic.com/firebasejs/10.12.4/firebase-app.js";
const firebaseConfig = {
apiKey: "AIzaSyC4yHbCX4mQu0jO81pJrDwxKLQlTQWofrc",
authDomain: "nhance-ee8d1.firebaseapp.com",
projectId: "nhance-ee8d1",
storageBucket: "nhance-ee8d1.firebasestorage.app",
messagingSenderId: "1084115316849",
appId: "1:1084115316849:web:8fc3b1c886349ae86c6bd0"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
</script>
<script>
window.addEventListener('load', function(ev) {
// Download main.dart.js
_flutter.loader.loadEntrypoint({
onEntrypointLoaded: function(engineInitializer) {
engineInitializer.initializeEngine().then(function(appRunner) {
appRunner.runApp();
});
}
});
});
</script>
<script>
window.onLoad = function(){
setTimeout(function () {
var loadingIndicator = document.getElementById("loading_indicator");
if(loadingIndicator){
loadingIndicator.remove();
}
});
};
</script>
<script>
function generateSessionId(length = 15) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let sessionId = '';
for (let i = 0; i < length; i++) {
sessionId += characters.charAt(Math.floor(Math.random() * characters.length));
}
return sessionId;
}
function getUpdatedParameters() {
return {
employee_id: localStorage.getItem('empPrimaryId') || '',
session_id: generateSessionId(15),
origin: "mobile",
emp_code: localStorage.getItem('empCode') || '',
client_id: localStorage.getItem('client_id') || '',
client_branch_id: localStorage.getItem('empClientBranchId') || ''
};
}
function initializeBotman() {
console.log("Initializing Botman Chat");
window.botmanWidget = {
chatServer: 'https://venbait.in/nhance/dev/chat',
frameEndpoint: 'https://venbait.in/nhance/dev/widget',
title: "Ask ILA",
introMessage: "",
bubbleBackground: "#007bff",
mainColor: "#007bff",
placeholderText: "Type your message here...",
aboutText: "Insurance Assistant ILA",
enableAttachments: false,
parameters: getUpdatedParameters()
};
setTimeout(() => {
watchBotmanState();
}, 2000);
}
function repositionBotmanWidget() {
const widget = document.querySelector('#botmanWidgetRoot > div');
if (widget) {
widget.style.bottom = "80px";
widget.style.right = "10px";
widget.style.minWidth = "90px";
widget.style.minHeight = "120px";
widget.style.zIndex = "9999";
widget.style.pointerEvents = "auto";
}
}
function watchBotmanState() {
const interval = setInterval(() => {
const chatFrame = document.querySelector('iframe.botman-widget-frame');
const widget = document.querySelector('#botmanWidgetRoot > div');
if (widget && chatFrame) {
// Reposition on load (chat open)
chatFrame.addEventListener('load', () => {
setTimeout(repositionBotmanWidget, 300);
});
// Observe DOM changes (chat close or resize)
const observer = new MutationObserver(() => {
repositionBotmanWidget();
});
observer.observe(widget, {
attributes: true,
childList: true,
subtree: true,
});
repositionBotmanWidget(); // Also call initially
clearInterval(interval);
}
}, 500);
}
function updateBotmanParameters() {
console.log("Updating Botman parameters...");
const updatedParams = getUpdatedParameters();
// Update Botman parameters
if (window.botmanWidget) {
window.botmanWidget.parameters = updatedParams;
}
// Reload the Botman iframe with new parameters
const chatFrame = document.querySelector('iframe.botman-widget-frame');
if (chatFrame) {
console.log("Reloading Botman iframe with new parameters...");
chatFrame.src = `https://venbait.in/nhance/dev/widget?employee_id=${updatedParams.employee_id}&session_id=${updatedParams.session_id}&origin=mobile&emp_code=${updatedParams.emp_code}&client_id=${updatedParams.client_id}&client_branch_id=${updatedParams.client_branch_id}`;
}
}
function openBotmanChat() {
const hiddenRoutes = ['/#login'];
function toggleBotmanVisibility() {
const currentHash = window.location.hash;
const shouldShow = !hiddenRoutes.includes(currentHash);
document.body.classList.toggle('show-botman', shouldShow);
console.log('Current hash:', currentHash, '| Botman visible:', shouldShow);
}
// Initial check after load
setTimeout(toggleBotmanVisibility, 500);
// React to route changes (Flutter uses hash-based routing)
window.addEventListener('hashchange', () => {
setTimeout(toggleBotmanVisibility, 300);
});
console.log("Opening chat...");
// First, update Botman parameters with new values from localStorage
updateBotmanParameters();
var checkBotman = setInterval(function () {
if (typeof botmanChatWidget !== "undefined" && botmanChatWidget.open) {
clearInterval(checkBotman);
const widget = document.getElementById('botmanWidgetRoot');
if (widget) {
widget.style.pointerEvents = 'auto'; // ✅ Enable interaction now
}
botmanChatWidget.open();
setTimeout(function () {
const emp_name = localStorage.getItem('gpaEmpName') || 'User';
botmanChatWidget.sayAsBot(`Hi ${emp_name}, This is ILA, your Insurance Assistant. Please choose the following options.`);
}, 2000);
} else {
console.log("Waiting for Botman to initialize...");
}
}, 500);
}
// Initialize Botman on first load
initializeBotman();
// Optional: expose reposition function to Flutter
window.repositionBotmanWidget = repositionBotmanWidget;
</script>
</body>
</html>