This repository has been archived on 2025-06-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
server/frontend/ui/src/lib/stores/teams.js

67 lines
1.6 KiB
JavaScript

import { derived, writable } from 'svelte/store';
import { stop_refresh } from './common';
let refresh_interval_teams = null;
function createTeamsStore() {
const { subscribe, set, update } = writable({teams:{}, teams_count: 0, rank: []});
function updateFunc(res_teams, cb=null) {
if (res_teams.status === 200) {
res_teams.json().then((teams) => {
const teams_count = Object.keys(teams).length
const rank = [];
for (const tid in teams) {
teams[tid].id = Number(tid);
rank.push(teams[tid]);
}
rank.sort((a, b) => (a.rank > b.rank ? 1 : (a.rank == b.rank ? 0 : -1)));
update((t) => (Object.assign(t, {teams, teams_count, rank})));
if (cb) {
cb(teams, teams_count, rank);
}
});
}
}
return {
subscribe,
refresh: async (cb=null, interval=null) => {
if (refresh_interval_teams)
clearInterval(refresh_interval_teams);
if (interval === null) {
interval = Math.floor(Math.random() * 24000) + 32000;
}
if (stop_refresh) {
return;
}
refresh_interval_teams = setInterval(refresh_teams, interval);
updateFunc(await fetch('teams.json', {headers: {'Accept': 'application/json'}}), cb);
},
update: updateFunc,
};
}
export const teamsStore = createTeamsStore();
export const teams = derived(
teamsStore,
($teamsStore) => ($teamsStore.teams)
);
export const teams_count = derived(
teamsStore,
($teamsStore) => ($teamsStore.teams_count)
);
export const rank = derived(
teamsStore,
($teamsStore) => ($teamsStore.rank)
);