Update to v0.7.0 #30
@@ -163,6 +163,25 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Deploy / Bench Toggle -->
|
||||
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center gap-3">
|
||||
<svg class="w-5 h-5 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z"></path>
|
||||
</svg>
|
||||
<div>
|
||||
<span class="font-medium text-gray-900 dark:text-white">Deployment Status</span>
|
||||
<p id="slm-settings-deploy-desc" class="text-xs text-gray-500 dark:text-gray-400">Unit is currently deployed in the field</p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" id="slm-settings-deploy-btn"
|
||||
onclick="toggleSLMDeployed()"
|
||||
class="px-3 py-1.5 text-sm rounded-lg font-medium transition-colors">
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FTP Enable Toggle -->
|
||||
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-4">
|
||||
<label class="flex items-center justify-between cursor-pointer">
|
||||
@@ -264,6 +283,9 @@ async function openSLMSettingsModal(unitId) {
|
||||
// FTP enabled from SLMM
|
||||
document.getElementById('slm-settings-ftp-enabled').checked = slmmData.ftp_enabled === true;
|
||||
|
||||
// Deploy/bench status from Terra-View
|
||||
updateDeployButton(unitData.deployed !== false);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Failed to load SLM settings:', error);
|
||||
errorDiv.textContent = 'Failed to load configuration: ' + error.message;
|
||||
@@ -525,6 +547,77 @@ async function saveFTPSettings(event) {
|
||||
return saveSLMSettings(event);
|
||||
}
|
||||
|
||||
// Update the deploy/bench button appearance based on current deployed state
|
||||
function updateDeployButton(isDeployed) {
|
||||
const btn = document.getElementById('slm-settings-deploy-btn');
|
||||
const desc = document.getElementById('slm-settings-deploy-desc');
|
||||
const icon = btn.closest('.border').querySelector('svg');
|
||||
|
||||
if (isDeployed) {
|
||||
btn.textContent = 'Bench Unit';
|
||||
btn.className = 'px-3 py-1.5 text-sm rounded-lg font-medium transition-colors bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-600';
|
||||
desc.textContent = 'Unit is currently deployed in the field';
|
||||
icon.classList.remove('text-gray-400');
|
||||
icon.classList.add('text-green-500');
|
||||
} else {
|
||||
btn.textContent = 'Deploy Unit';
|
||||
btn.className = 'px-3 py-1.5 text-sm rounded-lg font-medium transition-colors bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300 hover:bg-green-200 dark:hover:bg-green-900/50';
|
||||
desc.textContent = 'Unit is currently benched (not in field)';
|
||||
icon.classList.remove('text-green-500');
|
||||
icon.classList.add('text-gray-400');
|
||||
}
|
||||
// Store current state on button for toggle reference
|
||||
btn.dataset.deployed = isDeployed ? '1' : '0';
|
||||
}
|
||||
|
||||
// Toggle deploy/bench status
|
||||
async function toggleSLMDeployed() {
|
||||
const unitId = document.getElementById('slm-settings-unit-id').value;
|
||||
const btn = document.getElementById('slm-settings-deploy-btn');
|
||||
const errorDiv = document.getElementById('slm-settings-error');
|
||||
const successDiv = document.getElementById('slm-settings-success');
|
||||
|
||||
const currentlyDeployed = btn.dataset.deployed === '1';
|
||||
const newDeployed = !currentlyDeployed;
|
||||
|
||||
btn.disabled = true;
|
||||
btn.textContent = newDeployed ? 'Deploying...' : 'Benching...';
|
||||
errorDiv.classList.add('hidden');
|
||||
successDiv.classList.add('hidden');
|
||||
|
||||
try {
|
||||
const formData = new FormData();
|
||||
formData.append('deployed', newDeployed ? 'true' : 'false');
|
||||
|
||||
const response = await fetch(`/api/roster/set-deployed/${unitId}`, {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errData = await response.json().catch(() => ({}));
|
||||
throw new Error(errData.detail || 'Failed to update deployment status');
|
||||
}
|
||||
|
||||
updateDeployButton(newDeployed);
|
||||
successDiv.textContent = newDeployed ? 'Unit marked as deployed.' : 'Unit marked as benched.';
|
||||
successDiv.classList.remove('hidden');
|
||||
setTimeout(() => successDiv.classList.add('hidden'), 3000);
|
||||
|
||||
// Refresh any SLM list on the page
|
||||
if (typeof htmx !== 'undefined') {
|
||||
htmx.trigger('#slm-list', 'load');
|
||||
}
|
||||
} catch (error) {
|
||||
btn.disabled = false;
|
||||
updateDeployButton(currentlyDeployed); // restore button state
|
||||
errorDiv.textContent = 'Error: ' + error.message;
|
||||
errorDiv.classList.remove('hidden');
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Close modal on background click
|
||||
document.getElementById('slm-settings-modal')?.addEventListener('click', function(e) {
|
||||
if (e.target === this) {
|
||||
|
||||
Reference in New Issue
Block a user