osg / templates /manage.html
devindia's picture
Upload 29 files
df53738 verified
Raw
History Blame Contribute Delete
4.22 kB
{% extends "base.html" %}
{% block content %}
<div class="top-bar">
<a href="/dashboard" style="color: var(--color-text); text-decoration: none;">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M19 12H5M12 19l-7-7 7-7"/>
</svg>
</a>
<h2>Delete users</h2>
<a href="/dashboard" class="top-bar-logo-wrap">
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="One Step Greener" class="top-bar-logo top-bar-logo-sm" />
</a>
</div>
<section class="manage-section">
<p class="manage-intro">Remove registered users. Deleted users can no longer check in until registered again.</p>
<div id="manageList" class="manage-list">
<span class="manage-loading" id="manageLoading">Loading…</span>
<ul id="manageUl" class="manage-ul" style="display: none;"></ul>
<p id="manageEmpty" class="manage-empty" style="display: none;">No registered users.</p>
</div>
</section>
{% endblock %}
{% block scripts %}
<script>
(function() {
var loading = document.getElementById('manageLoading');
var ul = document.getElementById('manageUl');
var empty = document.getElementById('manageEmpty');
function loadList() {
loading.style.display = 'block';
ul.style.display = 'none';
empty.style.display = 'none';
fetch('/api/employees')
.then(function(r) { return r.json(); })
.then(function(data) {
loading.style.display = 'none';
if (data.employees && data.employees.length > 0) {
ul.style.display = 'block';
ul.innerHTML = '';
data.employees.forEach(function(emp) {
var li = document.createElement('li');
li.className = 'manage-item';
li.innerHTML = '<span class="manage-item-name">' + (emp.name || emp.id) + ' <span class="manage-item-id">' + (emp.id || '') + '</span></span><button type="button" class="manage-delete-btn" data-id="' + (emp.id || '') + '">Delete</button>';
ul.appendChild(li);
});
ul.querySelectorAll('.manage-delete-btn').forEach(function(btn) {
btn.addEventListener('click', function() {
var id = this.getAttribute('data-id');
if (!id) return;
if (!confirm('Delete this user? They will need to register again to check in.')) return;
var row = this.closest('li');
fetch('/api/employees/' + encodeURIComponent(id), { method: 'DELETE' })
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.status === 'ok') {
if (typeof showSnackbar === 'function') showSnackbar('User deleted.', 'success');
row.remove();
if (ul.children.length === 0) {
ul.style.display = 'none';
empty.style.display = 'block';
}
} else {
if (typeof showSnackbar === 'function') showSnackbar(data.message || 'Delete failed', 'error');
}
})
.catch(function() {
if (typeof showSnackbar === 'function') showSnackbar('Request failed', 'error');
});
});
});
} else {
empty.style.display = 'block';
}
})
.catch(function() {
loading.textContent = 'Could not load list.';
loading.style.display = 'block';
});
}
loadList();
})();
</script>
{% endblock %}