Add input field for user selection when >10 users

- Show dropdown for ≤10 users, input field for >10 users
- Backend accepts username parameter and resolves to user ID
- JavaScript handles both dropdown and input field submission
- Enter key support for input field
- Maintains all existing functionality
parent d04fb9c1
...@@ -333,13 +333,35 @@ ...@@ -333,13 +333,35 @@
// Handle user selector change (for admins) // Handle user selector change (for admins)
function handleUserChange() { function handleUserChange() {
const userSelector = document.getElementById('userSelector'); const userSelector = document.getElementById('userSelector');
const userInput = document.getElementById('userInput');
const userSubmitBtn = document.getElementById('userSubmitBtn');
if (userSelector) { if (userSelector) {
// Handle dropdown change
userSelector.addEventListener('change', function() { userSelector.addEventListener('change', function() {
const selectedUserId = this.value; const selectedUserId = this.value;
// Reload the page with the new user_id parameter // Reload the page with the new user_id parameter
window.location.href = `/jobs?user_id=${selectedUserId}`; window.location.href = `/jobs?user_id=${selectedUserId}`;
}); });
} }
if (userSubmitBtn && userInput) {
// Handle input field submission
userSubmitBtn.addEventListener('click', function() {
const username = userInput.value.trim();
if (username) {
// Reload the page with the username parameter
window.location.href = `/jobs?username=${encodeURIComponent(username)}`;
}
});
// Allow Enter key to submit
userInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
userSubmitBtn.click();
}
});
}
} }
// Update every 5 seconds // Update every 5 seconds
...@@ -382,6 +404,7 @@ ...@@ -382,6 +404,7 @@
{% if current_user.get('role') == 'admin' and all_users %} {% if current_user.get('role') == 'admin' and all_users %}
<div style="display: flex; align-items: center; gap: 0.5rem;"> <div style="display: flex; align-items: center; gap: 0.5rem;">
<label for="userSelector" style="font-size: 0.9rem; color: #374151; font-weight: 500;">View jobs for:</label> <label for="userSelector" style="font-size: 0.9rem; color: #374151; font-weight: 500;">View jobs for:</label>
{% if use_dropdown %}
<select id="userSelector" style="border: 1px solid #d1d5db; border-radius: 6px; padding: 0.375rem 0.75rem; font-size: 0.875rem; background: white;"> <select id="userSelector" style="border: 1px solid #d1d5db; border-radius: 6px; padding: 0.375rem 0.75rem; font-size: 0.875rem; background: white;">
{% for user_option in all_users %} {% for user_option in all_users %}
<option value="{{ user_option.id }}" {% if user_option.id == selected_user_id %}selected{% endif %}> <option value="{{ user_option.id }}" {% if user_option.id == selected_user_id %}selected{% endif %}>
...@@ -389,6 +412,12 @@ ...@@ -389,6 +412,12 @@
</option> </option>
{% endfor %} {% endfor %}
</select> </select>
{% else %}
<div style="display: flex; gap: 0.5rem;">
<input type="text" id="userInput" placeholder="Enter username" style="border: 1px solid #d1d5db; border-radius: 6px; padding: 0.375rem 0.75rem; font-size: 0.875rem; background: white; min-width: 150px;" value="{% for user_option in all_users %}{% if user_option.id == selected_user_id %}{{ user_option.username }}{% endif %}{% endfor %}">
<button id="userSubmitBtn" style="background: #3b82f6; color: white; border: none; border-radius: 6px; padding: 0.375rem 0.75rem; font-size: 0.875rem; cursor: pointer;">Go</button>
</div>
{% endif %}
</div> </div>
{% endif %} {% endif %}
</div> </div>
......
...@@ -320,7 +320,15 @@ def analyze(): ...@@ -320,7 +320,15 @@ def analyze():
def jobs(): def jobs():
"""Active jobs page - shows queued, processing, and recently cancelled jobs.""" """Active jobs page - shows queued, processing, and recently cancelled jobs."""
user = get_current_user_session() user = get_current_user_session()
all_queue_items = get_user_queue_items(user['id']) target_user_id = user['id']
# Check if admin is viewing another user's jobs
if user['role'] == 'admin':
requested_user_id = request.args.get('user_id')
if requested_user_id and requested_user_id.isdigit():
target_user_id = int(requested_user_id)
all_queue_items = get_user_queue_items(target_user_id)
# Filter for active jobs: queued, processing, and cancelled jobs from last 24 hours # Filter for active jobs: queued, processing, and cancelled jobs from last 24 hours
import time import time
...@@ -348,10 +356,23 @@ def jobs(): ...@@ -348,10 +356,23 @@ def jobs():
# If no timestamp, include it # If no timestamp, include it
active_jobs.append(job) active_jobs.append(job)
# Get all users for admin selector
all_users = []
use_dropdown = False
if user['role'] == 'admin':
from .database import get_all_users
all_users = get_all_users()
# Use dropdown if 10 or fewer users, otherwise use input field
use_dropdown = len(all_users) <= 10
return render_template('jobs.html', return render_template('jobs.html',
user=user, user=user,
tokens=get_user_tokens(user["id"]), tokens=get_user_tokens(user["id"]),
queue_items=active_jobs, queue_items=active_jobs,
all_users=all_users,
selected_user_id=target_user_id,
current_user=user,
use_dropdown=use_dropdown,
active_page='jobs') active_page='jobs')
...@@ -509,9 +530,26 @@ def api_job_status(job_id): ...@@ -509,9 +530,26 @@ def api_job_status(job_id):
def api_job_status_updates(): def api_job_status_updates():
"""API endpoint for job status updates.""" """API endpoint for job status updates."""
user = get_current_user_session() user = get_current_user_session()
target_user_id = user['id']
# Get all active jobs for the user (not completed/failed) # Check if admin is viewing another user's jobs
queue_items = get_user_queue_items(user['id']) if user['role'] == 'admin':
requested_user_id = request.args.get('user_id')
username = request.args.get('username')
if requested_user_id and requested_user_id.isdigit():
target_user_id = int(requested_user_id)
elif username:
# Resolve username to user ID by searching all users
from .database import get_all_users
all_users_list = get_all_users()
for u in all_users_list:
if u['username'] == username:
target_user_id = u['id']
break
# Get all active jobs for the target user (not completed/failed)
queue_items = get_user_queue_items(target_user_id)
updates = [] updates = []
for job in queue_items: for job in queue_items:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment