File size: 4,220 Bytes
df53738
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
{% 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 %}