Redmind_GPT_API / templates /dashboard.html
Redmind's picture
Update templates/dashboard.html
4155428 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard</title>
<!-- CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
<link rel="stylesheet" type="text/css" href="../static/css/style.css" />
<link rel="stylesheet" type="text/css" href="../static/css/dashboard.css" />
<link rel="stylesheet" type="text/css" href="../static/css/perfect-scrollbar.css" />
<style>
.btn-primary {
background-color: #0d6efd;
border-radius:5px;
border-color: #0d6efd;
}
#sidebarToggle
{
border-radius:4px;
margin-left:250px;
}
.main-sidebar.toggled .menu-text {
display: none;
}
#selectedCompany.toggled .menu-text {
display: none;
}
.wrapper {
flex: 1;
padding: 10px;
margin-left: 300px; /* Default sidebar width */
transition: margin-left 0.3s ease;
}
.main-header {
border-bottom: none;
border-top: none;
}
.card {
margin-bottom: 15px;
border-radius: 8px;
overflow: hidden;
transition: background-color 0.3s ease;
}
.card-body {
padding: 15px;
}
.feature-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
}
.sidebarPanel
{
display:none;
}
.media-body {
text-align: right;
}
.fs-30 {
font-size: 1.875rem;
}
.fs-48 {
font-size: 3rem;
}
/* Responsive Styles */
@media (max-width: 992px) {
.wrapper {
margin-left: 200px;
}
.main-header {
padding: 15px;
}
}
@media (max-width: 768px) {
.feature-icon {
width: 40px;
height: 40px;
}
.fs-30 {
font-size: 1.5rem;
}
.fs-48 {
font-size: 2.5rem;
}
}
</style>
</head>
<body>
{% set company_name = company_name %}
{% include 'sidepane.html' %}
<div class="wrapper">
<section class="main-header">
<div class="container-fluid">
<div id="company-block" class="form-group left-align" style="display: none;">
<label for="company" class="ml-3" style="display: inline-block; margin-right: 10px;">
Select the Company Name to view the details <span class="text-danger">*</span>
</label>
<select type="text" id="company" name="company" class="ml-3 form-control"
style="display: inline-block; width: 20%;" required>
<option value="" selected>Select</option>
</select>
</div>
<div class="row">
<div class="col-md-6">
<div class="card bg-primary">
<div class="card-body">
<div class="media align-items-center">
<span class="p-3 mr-3 feature-icon rounded">
<img src="../static/logos/calendar-silhouette.svg" />
</span>
<div class="media-body">
<p class="fs-30 text-white mb-2">KnowledgeBase</p>
<span id="knowledgeBaseCount" class="fs-48 text-white font-w600">{{table_count_of_each_table.knowledge_base}}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card bg-info">
<div class="card-body">
<div class="media align-items-center">
<span class="p-3 mr-3 feature-icon rounded">
<img src="../static/logos/calendar-silhouette.svg" />
</span>
<div class="media-body">
<p class="fs-30 text-white mb-2">Data connectors</p>
<span id="dataConnectorsCount" class="fs-48 text-white font-w600">{{table_count_of_each_table.data_connectors}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 ">
<div class="card bg-success">
<div class="card-body">
<div class="media align-items-center">
<span class="p-3 mr-3 feature-icon rounded">
<img src="../static/logos/email.svg" />
</span>
<div class="media-body">
<p class="fs-30 text-white mb-2">API Connectors</p>
<span id="apiConnectorsCount" class="fs-48 text-white font-w600">{{table_count_of_each_table.api_connectors}}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-6 ">
<div class="card bg-secondary">
<div class="card-body">
<div class="media align-items-center">
<span class="p-3 mr-3 feature-icon rounded">
<img src="../static/logos/dots.svg" />
</span>
<div class="media-body">
<p class="fs-30 text-white mb-2">Prompt_Templates</p>
<span id="promptTemplatesCount" class="fs-48 text-white font-w600">{{table_count_of_each_table.prompt_templates}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<input type="hidden" id="userRole" name="userRole" value={{role}}>
<input type="hidden" id="company_id" name="company_id" value={{company_id}}>
<input type="hidden" id="username" name="username" value={{username}}>
<input type="hidden" id="company_name" name="company_name" value={{company_name}}>
</div>
{% include 'footer.html' %}
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/adminlte.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.getElementById("add").style.display = "none";
// function updateCompanyName(newCompanyName) {
// sessionStorage.setItem('company_name', newCompanyName);
// document.getElementById('selectedCompany').innerText = `Company name: ${newCompanyName}`;
// const sidePaneCompanyName = document.querySelector('.sidebar .company-name');
// if (sidePaneCompanyName) {
// sidePaneCompanyName.innerText = newCompanyName;
// }
// }
function updateSidepane(companyName) {
const sidepaneCompanyElement = document.getElementById('selectedCompany');
if (sidepaneCompanyElement) {
sidepaneCompanyElement.innerText = `Company Name: ${companyName}`;
}
}
window.addEventListener('pageshow', function (event) {
if (event.persisted || (window.performance && window.performance.navigation.type === 2)) {
window.location.reload();
}
});
document.addEventListener('DOMContentLoaded', function () {
var role1 = document.getElementById("userRole").value;
var company_id1 = document.getElementById("company_id").value;
var company_name1=document.getElementById("company_name").value;
var username1=document.getElementById("username").value;
console.log("companyid in dasshboard",username1);
sessionStorage.setItem('userRole', role1);
// sessionStorage.setItem('siderole',role1);
// sessionStorage.setItem('sidecompanyId',company_id1);
sessionStorage.setItem('company_id', company_id1);
sessionStorage.setItem('company_name',company_name1);
sessionStorage.setItem('username',username1);
const companyName = sessionStorage.getItem('company_name');
if (companyName) {
updateSidepane(companyName);
}
else{
document.getElementById(selectedCompany).value="Select a company";
}
if (!role1) {
var roleFromInput = sessionStorage.getItem('userRole');
sessionStorage.setItem('userRole', roleFromInput);
console.log("Role set in sessionStorage:", roleFromInput);
} else {
sessionStorage.setItem('userRole', role1);
console.log("Retrieved user role from input:", role1); // Debugging
}
if (role1 === "superadmin") {
document.getElementById('company-block').style.display = 'block';
fetchCompanies();
}
});
document.getElementById('company').addEventListener('change', async function () {
const selectedCompany = this.value;
sessionStorage.setItem("company_name",selectedCompany);
// Update the sidepane immediately
updateSidepane(selectedCompany);
if (selectedCompany!== "Select") {
try {
const response = await fetch(`/api/company_id?company_name=${encodeURIComponent(selectedCompany)}`);
if (!response.ok) {
contentSection.style.display = 'none';
displayErrorMessage("Document details do not exist for this company. Please fill in the details.");
throw new Error('Network response was not ok');
}
const data = await response.json();
console.log('data returned', data);
const companyId = data.company_id;
sessionStorage.setItem("company_id",companyId);
console.log("company id for superadmin", company_id);
//document.getElementById('company_id').value = companyId;
if (companyId) {
try {
const countResponse = await fetch(`/api/company_record_count/${companyId}`);
if (!countResponse.ok) {
throw new Error('Network response was not ok');
}
const countData = await countResponse.json();
console.log('Count data:', countData); // Log the response data
updateRecordCounts(countData.table_counts);
} catch (error) {
console.error('Error fetching record counts:', error);
}
} else {
clearRecordCounts();
}
} catch (error) {
console.error('No details for this company ID or data documents:', error);
// displayEmptyTable();
displayErrorMessage("company details do not exist for this company.");
}
}
});
function updateRecordCounts(counts) {
// Update the counts displayed in the dashboard
document.getElementById('knowledgeBaseCount').textContent = counts.knowledge_base || 0;
document.getElementById('dataConnectorsCount').textContent = counts.data_connectors || 0;
document.getElementById('apiConnectorsCount').textContent = counts.api_connectors || 0;
document.getElementById('promptTemplatesCount').textContent = counts.prompt_templates || 0;
}
function clearRecordCounts() {
document.getElementById('knowledgeBaseCount').textContent = 0;
document.getElementById('dataConnectorsCount').textContent = 0;
document.getElementById('apiConnectorsCount').textContent = 0;
document.getElementById('promptTemplatesCount').textContent = 0;
}
async function fetchCompanies() {
try {
const response = await fetch('/api/companies');
if (!response.ok) {
throw new Error('Network response was not ok');
}
const data = await response.json();
displayCompanies(data.companies);
} catch (error) {
console.error('Error fetching companies:', error);
}
}
function displayCompanies(companies) {
const companySelect = document.getElementById('company');
companySelect.innerHTML = '<option value="" selected>Select</option>'; // Reset the dropdown
companies.forEach(company => {
const option = document.createElement('option');
option.value = company.name;
option.textContent = company.name;
companySelect.appendChild(option);
});
}
function clearFormFields() {
document.getElementById('APIName').value = "";
document.getElementById('APIEndpoint').value = "";
document.getElementById('Auth_Bearer').value = "";
document.getElementById('Inputjson').value = "";
document.getElementById('OutputJson').value = "";
document.getElementById('Description').value = "";
}
</script>
</body>
</html>