Redmind_GPT_API / templates /sidepane.html
Redmind's picture
Update templates/sidepane.html
83cf9a4 verified
<!-- sidepane.html -->
<!-- This file represents the sidepane component of a web application. It contains the navigation menu and sidebar. -->
<!-- <!DOCTYPE html>
<html lang="en"> -->
<head>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- Include Bootstrap JS -->
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>
<style>
/* Sidebar Styles */
.main-sidebar {
background: #222; /* Dark background for sidebar */
color: #fff;
width: 250px; /* Default width */
height: 600px !important;
position: fixed;
top: 0;
left: 0;
transition: all 0.3s ease;
/* Ensure sidebar content scrolls if needed */
}
.main-sidebar.toggled {
width: 60px; /* Minimized width */
}
.sidebar-header {
text-align: center;
padding: 15px;
background: #333; /* Dark background for header */
color: #fff;
border-radius: 5px;
margin-bottom: 15px;
display: flex;
align-items: center;
justify-content: center;
}
.sidebar-header i {
font-size: 1.5rem;
}
.sidebar-header .menu-text {
font-size: 14px;
font-weight: bold;
}
/* Navigation Menu */
.nav-link {
display: flex;
align-items: center;
color: #fff;
padding: 10px;
border-radius: 5px;
transition: background-color 0.3s ease;
text-decoration: none;
}
.nav-link:hover {
background-color: #F8BE12; /* Highlight color on hover */
color: #fff;
}
.menu-text {
margin-left: 10px;
font-weight: bold;
color: #fff;
}
/* Sidebar Icon Sizes */
.nav-icon {
font-size: 20px;
}
/* Hide menu text when sidebar is collapsed */
.main-sidebar.toggled .menu-text {
display: none;
}
/* Content Wrapper */
#content-wrapper {
margin-left: 250px;
padding: 15px;
height: 700px !important;
transition: margin-left 0.3s ease;
}
#content-wrapper.toggled {
margin-left: 60px;
}
/* Responsive Design */
@media (max-width: 991px) {
.main-sidebar {
width: 60px; /* Default to minimized on small screens */
}
#content-wrapper {
margin-left: 60px;
}
.main-sidebar.toggled + #content-wrapper {
margin-left: 0;
}
}
</style>
<nav class="main-header navbar navbar-expand navbar-light bg-white shadow-sm" style="padding: 15px; ">
<div class="container-fluid d-flex justify-content-between align-items-center">
<!-- Toggle Sidebar Button -->
<button class="btn btn-outline-secondary" id="sidebarToggle" style="margin-right: 15px;">
<i class="fas fa-bars"></i>
</button>
<!-- Logo and Title Section -->
<div class="d-flex align-items-center">
<img src="/static/img/redmindlogo3.jpg" alt="Logo" style="width: 70px; height: auto; margin-right: 15px;">
<h3 class="m-0" style="font-weight: 500;">RedMindGPT - {{title}}</h3>
</div>
<!-- Buttons Section -->
<div>
<button class="btn btn-primary me-3" id="add">Add</button>
<button class="btn btn-primary" onclick="logout()">Logout</button>
</div>
</div>
</nav>
<div id="wrapper">
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-custom elevation-4" id="sidebarPanel">
<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false" id="sidebarMenu">
<input type="hidden" id="userRole" name="userRole" value={{role}}>
<input type="hidden" id="company_id" name="company_id" value={{company_id}}>
<div class="form-group"style="display: none;">
<label for="llm_tools" >LLM Tools<span class="text-danger">*</span></label>
<select class="form-control" id="llm_tools" name="llm_tools" multiple required style="display: none;">
<option value="Database">Database</option>
<option value="Static Documents">Static Documents</option>
<option value="API">API</option>
</select>
<div class="invalid-feedback">
Please select at least one LLM tool.
</div>
</div>
<li class="nav-item">
<a href="{{url_for('dashboard')}}" class="nav-link">
<i class="nav-icon fas fa-home"></i>
<p>Dashboard</p>
</a>
</li>
<li class="nav-item">
<div class="sidebar-header">
<i class="nav-icon fas fa-building"></i>
<span class="menu-text" id="selectedCompany">Select a company</span> <!-- Initial text as fallback -->
<!-- <span class="menu-text" id="selectedCompany">{{company_name}}</span> -->
</div>
</li>
<li class="nav-item" >
<a href="{{ url_for('company_profile') }}" class="nav-link">
<i class="nav-icon fas fa-users"></i>
<p>Company Profile</p>
</a>
</li>
<li class="nav-item" id="knowledgebase_link">
<a href="{{ url_for('knowledgebase') }}" class="nav-link">
<i class="nav-icon fas fa-cogs"></i>
<p>KnowledgeBase</p>
</a>
</li>
<li class="nav-item" id="data_connectors_link">
<a href="{{ url_for('data_connectors') }}" class="nav-link">
<i class="nav-icon fas fa-cogs"></i>
<p>Data Connectors</p>
</a>
</li>
<li class="nav-item" id="api_connectors_link">
<a href="{{ url_for('API_connectors') }}" class="nav-link">
<i class="nav-icon fas fa-cogs"></i>
<p>API Connectors</p>
</a>
</li>
<li class="nav-item">
<a href="{{url_for('prompt_template')}}" class="nav-link">
<i class="nav-icon fas fa-cogs"></i>
<p>Prompt Templates</p>
</a>
</li>
<!--<li class="nav-item">
<a href="#" class="nav-link">
<i class="nav-icon fas fa-cogs"></i>
<p>LLM Settings</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item">
<a href="#" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Sublink 1</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">
<i class="far fa-circle nav-icon"></i>
<p>Sublink 2</p>
</a>
</li>
</ul>
</li> -->
<!-- Add more navigation links here -->
</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>
<input type="hidden" id="userRole" name="userRole" value={{role}}>
<input type="hidden" id="company_id" name="company_id" value={{company_id}}>
<div class="form-group"style="display: none;">
<label for="llm_tools" >LLM Tools<span class="text-danger">*</span></label>
<select class="form-control" id="llm_tools" name="llm_tools" multiple required style="display: none;">
<option value="Database">Database</option>
<option value="Static Documents">Static Documents</option>
<option value="API">API</option>
</select>
<div class="invalid-feedback">
Please select at least one LLM tool.
</div>
</div>
</div>
<!-- AdminLTE JS -->
<script >
function logout() {
sessionStorage.removeItem('role');
sessionStorage.clear();
window.location.href = '/';
}
document.addEventListener("DOMContentLoaded", function() {
const company_id1 = document.getElementById("company_id").value;
const role1 = document.getElementById("userRole").value;
sessionStorage.setItem('siderole1',role1);
sessionStorage.setItem('sidecompanyId1',company_id1);
const sidecompanyId = sessionStorage.getItem('sidecompanyId1');
const siderole = sessionStorage.getItem('siderole1');
if (siderole==='admin') {
console.log("Company ID inside sidepane:", sidecompanyId);
console.log("Role inside sidepane:",siderole);
editCompany(sidecompanyId,siderole);
console.log("inside admin after edit");
updateLinkVisibility(siderole);
}
});
async function updateLinkVisibility(siderole) {
//const role = sessionStorage.getItem('role');
if(siderole==='admin')
{
const displayState = JSON.parse(sessionStorage.getItem('displayState'));
// Update the visibility of links based on the stored state
document.getElementById('api_connectors_link').style.display = displayState.apiConnectors;
document.getElementById('knowledgebase_link').style.display = displayState.knowledgeBase;
document.getElementById('data_connectors_link').style.display = displayState.dataConnectors
}
}
async function editCompany(sidecompanyId,siderole) {
console.log("inside edit company id", sidecompanyId);
console.log("inside edit role role",siderole);
$.getJSON(`/api/getcompanydetails/${sidecompanyId}`, function (company) {
// Set the value of #llm_tools and trigger change event
$('#llm_tools').val(company.llm_tools.split(',')).trigger('change');
// Get the selected values from #llm_tools
const llmTools = $('#llm_tools').val(); // This is an array
console.log("inside sidepane edit llmTools", llmTools);
//const role =sessionStorage.getItem('role');
if (llmTools && llmTools.length > 0) {
console.log("inside if");
// Example: Conditionally display some links based on llm_tools
if (api_connectors_link) {
api_connectors_link.style.display = llmTools.includes('API') ? 'block' : 'none';
console.log("state api",api_connectors_link.style.display );
}
if (knowledgebase_link) {
knowledgebase_link.style.display = llmTools.includes('Static Documents') ? 'block' : 'none';
console.log("state know", knowledgebase_link.style.display);
}
if (data_connectors_link) {
data_connectors_link.style.display = llmTools.includes('Database') ? 'block' : 'none';
console.log("state dataconn", data_connectors_link.style.display);
}
console.log("inside storageadmin");
sessionStorage.setItem('displayState', JSON.stringify({
apiConnectors: api_connectors_link.style.display,
knowledgeBase: knowledgebase_link.style.display ,
dataConnectors: data_connectors_link.style.display
}));
updateLinkVisibility(siderole);
}
}).fail(function () {
alert("Error retrieving company details.");
});
}
document.getElementById('sidebarToggle').addEventListener('click', function() {
const sidebar = document.getElementById('sidebarPanel');
const contentWrapper = document.getElementById('content-wrapper');
// Toggle sidebar width and content margin
sidebar.classList.toggle('toggled');
contentWrapper.classList.toggle('toggled');
});
</script>
</head>
<!-- </html> -->