feat: add account selection support in web UI
Add support for multiple MyIce accounts in the web interface: - Create /accounts endpoint to fetch available accounts from config files - Update index.html to dynamically show available accounts - Modify /schedule and /game endpoints to accept account parameter - Store selected account in localStorage for persistence
This commit is contained in:
+53
-5
@@ -16,6 +16,12 @@
|
||||
<div id="apikeyContainer" class="mb-3"></div>
|
||||
|
||||
<div id="eventFilters" style="display: none;">
|
||||
<div class="mb-3">
|
||||
<label for="account" class="form-label">Sélectionner un compte</label>
|
||||
<select id="account" class="form-select">
|
||||
<option value="default">Compte par défaut</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="agegroup" class="form-label">Filtrer par groupe d'âge</label>
|
||||
<select id="agegroup" class="form-select">
|
||||
@@ -46,6 +52,7 @@
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const apikeyContainer = document.getElementById("apikeyContainer");
|
||||
const eventFilters = document.getElementById("eventFilters");
|
||||
const accountSelect = document.getElementById("account");
|
||||
const agegroupSelect = document.getElementById("agegroup");
|
||||
const eventList = document.getElementById("eventList");
|
||||
const fetchButton = document.getElementById("fetchEvents");
|
||||
@@ -54,16 +61,20 @@
|
||||
|
||||
let storedApiKey = localStorage.getItem("apikey");
|
||||
let lastFetchedEvents = [];
|
||||
let storedAccount = localStorage.getItem("account") || "default";
|
||||
|
||||
function renderApiKeyInput() {
|
||||
if (storedApiKey) {
|
||||
apikeyContainer.innerHTML = `<button id="disconnect" class="btn btn-danger">Déconnecter</button>`;
|
||||
document.getElementById("disconnect").addEventListener("click", () => {
|
||||
localStorage.removeItem("apikey");
|
||||
localStorage.removeItem("account");
|
||||
location.reload();
|
||||
});
|
||||
eventFilters.style.display = "block";
|
||||
fetchEvents(storedApiKey);
|
||||
// Load available accounts from server or use predefined ones
|
||||
updateAccountOptions();
|
||||
fetchEvents(storedApiKey, storedAccount);
|
||||
} else {
|
||||
apikeyContainer.innerHTML = `
|
||||
<label for="apikey" class="form-label">API Key</label>
|
||||
@@ -90,22 +101,58 @@
|
||||
}
|
||||
}
|
||||
|
||||
function updateAccountOptions() {
|
||||
// Fetch available accounts from the server
|
||||
fetch(`${apiBaseUrl}/accounts`, {
|
||||
headers: { "Authorization": `Bearer ${storedApiKey}` }
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(accounts => {
|
||||
accountSelect.innerHTML = '';
|
||||
accounts.forEach(account => {
|
||||
const option = document.createElement("option");
|
||||
option.value = account.name;
|
||||
option.textContent = account.label;
|
||||
if (account.name === storedAccount) {
|
||||
option.selected = true;
|
||||
}
|
||||
accountSelect.appendChild(option);
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Erreur lors du chargement des comptes:", error);
|
||||
// Fallback to default options
|
||||
accountSelect.innerHTML = `
|
||||
<option value="default" ${storedAccount === "default" ? "selected" : ""}>Compte par défaut</option>
|
||||
`;
|
||||
});
|
||||
}
|
||||
|
||||
renderApiKeyInput();
|
||||
|
||||
accountSelect.addEventListener("change", () => {
|
||||
const selectedAccount = accountSelect.value;
|
||||
localStorage.setItem("account", selectedAccount);
|
||||
if (storedApiKey) {
|
||||
fetchEvents(storedApiKey, selectedAccount);
|
||||
}
|
||||
});
|
||||
|
||||
fetchButton.addEventListener("click", () => {
|
||||
if (!storedApiKey) {
|
||||
alert("Veuillez entrer une clé API");
|
||||
return;
|
||||
}
|
||||
fetchEvents(storedApiKey);
|
||||
const selectedAccount = accountSelect.value;
|
||||
fetchEvents(storedApiKey, selectedAccount);
|
||||
});
|
||||
|
||||
agegroupSelect.addEventListener("change", () => {
|
||||
displayEvents(lastFetchedEvents);
|
||||
});
|
||||
|
||||
function fetchEvents(apiKey) {
|
||||
fetch(`${apiBaseUrl}/schedule`, {
|
||||
function fetchEvents(apiKey, account) {
|
||||
fetch(`${apiBaseUrl}/schedule?account=${account}`, {
|
||||
headers: { "Authorization": `Bearer ${apiKey}` }
|
||||
})
|
||||
.then(response => response.json())
|
||||
@@ -156,7 +203,8 @@
|
||||
}
|
||||
|
||||
function fetchEventDetails(eventId) {
|
||||
fetch(`${apiBaseUrl}/game/${eventId}`, {
|
||||
const selectedAccount = accountSelect.value;
|
||||
fetch(`${apiBaseUrl}/game/${eventId}?account=${selectedAccount}`, {
|
||||
headers: { "Authorization": `Bearer ${storedApiKey}` }
|
||||
})
|
||||
.then(response => response.json())
|
||||
|
||||
Reference in New Issue
Block a user