Spaces:
Sleeping
Sleeping
<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">×</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> |