Redmind_GPT_API / templates /API_connectors.html
lakshmivairamani's picture
Upload 14 files
6952a04 verified
raw
history blame
20.9 kB
<!DOCTYPE html>
<html>
<head>
<title>API Connectors</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<!-- Include AdminLTE CSS -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/adminlte.min.css">
<!-- Include DataTables CSS -->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/dataTables.bootstrap4.min.css">
<script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
<style>
.form-group{
margin-top: -10px;
}
.header-row {
display: flex;
justify-content: space-between;
align-items: center;
}
.table-container {
width: 100%;
overflow-x: auto;
}
.wrapper {
display: flex;
flex-direction: column;
height: 100vh;
}
.content-wrapper {
flex: 1;
overflow-y: auto;
}
.content-header {
padding: 1rem;
}
.footer {
text-align: right;
padding: 10px;
}
.center-align {
padding-top: 20px;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
}
th,
td {
white-space: nowrap;
}
th:nth-child(1),
td:nth-child(1) {
/* Sno column */
width: 5%;
}
th:nth-child(2),
td:nth-child(2) {
/* API Name column */
width: 20%;
}
th:nth-child(3),
td:nth-child(3) {
/* API Endpoint column */
width: 40%;
}
th:nth-child(4),
td:nth-child(4) {
/* Auth/Bearer token column */
width: 20%;
}
th:nth-child(5),
td:nth-child(5) {
/* View column */
width: 15%;
}
.reduced-width{
width:25%;
}
</style>
</head>
<body>
{% include 'sidepane.html' %}
<div class="wrapper">
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<div class="content-header">
<div class="container-fluid">
<div class="container mt-2">
<div class="form-group center-align">
<label for="company" class="mr-2">Company Name <span class="text-danger">*</span></label>
<select type="text" id="company" name="company" class="form-control reduced-width" required>
<option value="" selected>Select</option>
</select>
<div class="col-8 d-flex justify-content-end mb-3">
<button class="btn btn-primary" style="margin-top: 20px;" id="add">Add</button>
</div>
</div>
<div class="row">
<div id="message-container" style="margin-left: 200px;"></div>
</div>
</div>
</div>
</div>
<section class="content" id="contentSection" style="display: none;">
<div class="container-fluid">
<div class="form-group">
<!-- <label for="company_id">company_id</label>--->
<input type="hidden" id="company_id" name="company_id" class="form-control" required>
</div>
</div>
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body table-container">
<table id="apiTable" class="table table-bordered table-striped">
<thead>
<tr>
<th>Sno</th>
<th>API Name</th>
<th>API Endpoint</th>
<th>View</th>
</tr>
</thead>
<tbody>
<!-- <tr>
<td>1</td>
<td>Warehouse</td>
<td>http://193.203.162.39:9090/nxt-wms/userWarehouse/fetchWarehouseForUserId
</td>
<td><button class="btn btn-primary viewButton">View</button></td>
</tr>
<tr>
<td>2</td>
<td>customer</td>
<td>http://193.203.162.39:9090/nxt-wms/userCustomer/fetchCustomerForUserId
</td>
<td><button class="btn btn-primary viewButton">View</button></td>
</tr>
<tr>
<td>3</td>
<td>SKU</td>
<td>http://193.203.162.39:9090/nxt-wms/sku/autoComplete?</td>
<td><button class="btn btn-primary viewButton">View</button></td>
</tr>
<tr>
<td>4</td>
<td>ASN</td>
<td>http://193.203.162.39:9090/nxt-wms/trnHeader</td>
<td><button class="btn btn-primary viewButton">View</button></td>
</tr> -->
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="addModalLabel"
aria-hidden="true">
<div class="modal-dialog" style="margin-top: -10px;" role="document">
<div class="modal-content" >
<div class="modal-header">
<h5 class="modal-title" id="addModalLabel">Add API Details</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true" data-backdrop="static" data-keyboard="false">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<!-- <label for="company_id">company_id</label>--->
<input type="hidden" id="company_id" name="company_id" class="form-control" required>
</div>
<form id="documentForm">
<div class="form-group">
<label for="APIName">API Name <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="APIName" name="APIName" required>
</div>
<div class="form-group">
<label for="APIEndpoint">API Endpoint <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="APIEndpoint" name="APIEndpoint" required>
</div>
<div class="form-group">
<label for="Auth_Bearer">Auth/Bearer token <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="Auth_Bearer" name="Auth_Bearer" required>
</div>
<div class="form-group">
<label for="Inputjson">Input parameter <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="Inputjson" name="Inputjson" required>
</div>
<div class="form-group">
<label for="OutputJson">Output Json <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="OutputJson" name="OutputJson" required>
</div>
<div class="form-group">
<label for="Description">Description <span class="text-danger">*</span></label>
<textarea class="form-control" id="Description" name="Description" rows="3"
required></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<!-- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> -->
<button type="button" id="save" onclick="save_file()" class="btn btn-primary">Save</button>
</div>
</div>
</div>
</div>
<!-- Include DataTables JS and your custom script -->
<script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.25/js/dataTables.bootstrap4.min.js"></script>
<script>
$(document).ready(function () {
// Show modal function
$('#add').on('click', function () {
clearFormFields();
$('#message-container').empty(); // Clear the message container
$('#addModal').modal('show');
});
$('.modal-footer .btn-secondary, .modal-header .close').on('click', function () {
$('#addModal').modal('hide');
});
// $('#apiTable').DataTable({
// autoWidth: false
// });
});
document.addEventListener("DOMContentLoaded", function () {
// clearFormFields();
fetchCompanies();
const companySelect = document.getElementById('company');
const documentForm = document.getElementById('documentForm');
const table = $('#apiTable').DataTable();
// Initialize DataTable at the start
companySelect.addEventListener('change', async function () {
$("#message-container").empty();
const selectedCompanyName = companySelect.options[companySelect.selectedIndex].text;
console.log(`Selected Company Name: ${selectedCompanyName}`);
if (selectedCompanyName !== "Select") {
try {
const response = await fetch(`/api/company_id?company_name=${encodeURIComponent(selectedCompanyName)}`);
if (!response.ok) {
contentSection.style.display = 'none';
("Document details does not exist for name does not exist. Please fill in the details.");
const messageContainer = document.getElementById('message-container');
if (messageContainer) {
messageContainer.innerHTML = "<div class='alert alert-danger'>Document details do not exist for this company. Please fill in the details.</div>";
}
throw new Error('Network response was not ok');
}
const data = await response.json();
console.log('data returned', data);
console.log(`Company ID: ${data.company_id}`);
const companyId = data.company_id;
document.getElementById('company_id').value = companyId;
if (companyId) {
try {
const Response = await fetch(`/api/get_api_connectors?company_id=${companyId}&company_name=${selectedCompanyName}`);
const connectorsResponse = await Response.json();
console.log("api connector data table after connecting to table", connectorsResponse);
table.clear();
if (!Array.isArray(connectorsResponse)) {
throw new TypeError('Expected an array of companies');
displayErrorMessage("Document details do not exist for this company. Please fill in the details.");
contentSection.style.display = 'none';
} else {
connectorsResponse.forEach((company, index) => {
table.row.add([
index+1,
company.APIName,
company.APIEndpoint,
"<a href='#' class='btn btn-info btn-sm'><i class='fas fa-eye' fa-eye'></i></a>",
]).draw(false);
});
contentSection.style.display = 'block';
}
} catch (error) {
console.error('Error fetching company documents:', error);
//displayEmptyTable();
displayErrorMessage("Document details1 do not exist for this company. Please fill in the details.");
contentSection.style.display = 'none';
}
}
else {
// displayEmptyTable();
displayErrorMessage("Document details2 for knowledge do not exist for this company. Please fill in the details.");
}
} catch (error) {
console.error('No details for this company ID or data documents:', error);
// displayEmptyTable();
displayErrorMessage("Document details3 do not exist for this company. Please fill in the details.");
contentSection.style.display = 'none';
}
} else {
table.clear().draw();
document.getElementById('contentSection').style.display = 'none';
// Optionally, you might want to clear the form fields as well
clearFormFields();
}
});
function displayErrorMessage(message) {
const messageContainer = document.getElementById('message-container');
if (messageContainer) {
messageContainer.innerHTML = `<div class='alert alert-danger'>${message}</div>`;
}
}
});
function save_file() {
const form = document.getElementById('documentForm');
// Check if the form is valid
if (!form.checkValidity()) {
// If the form is invalid, show validation messages and stop the submission
form.reportValidity();
return;
}
const company_id=$('#company_id').val();
const APIName = $('#APIName').val();
const APIEndpoint = $('#APIEndpoint').val();
const Auth_Bearer = $('#Auth_Bearer').val();
const Inputjson = $('#Inputjson').val();
const OutputJson = $('#OutputJson').val();
const Description = $('#Description').val();
const view= "<a href='#' class='btn btn-info btn-sm'><i class='fas fa-eye'></i></a>";
var formData = new FormData($('#documentForm')[0]);
formData.append("company_id",company_id),
formData.append("api_name", APIName),
formData.append("api_endpoint", APIEndpoint),
formData.append("auth_bearer", Auth_Bearer),
formData.append("input_json", Inputjson),
formData.append("output_json", OutputJson),
formData.append("description", Description)
//const formData = new FormData();
fetch('/api/save_api_details', {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.text();
})
.then(data => {
var table = $('#apiTable').DataTable();
var rowCount = table.rows().count();
table.row.add([
rowCount + 1,
APIName,
APIEndpoint,
Auth_Bearer,
Inputjson,
OutputJson,
Description,
view
]).draw(false);
alert('Document saved successfully');
$('#addModal').modal('hide');
document.getElementById('contentSection').style.display = 'block'; // Show the table section
})
.catch(error => console.error('Error:', error));
}
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>