diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index ef3106fe..9dedec28 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -59,11 +59,12 @@ --> - Refresh (10s) + Refresh + ({{ countdownTimer }}s) - Refresh (10s) + Refresh + ({{ countdownTimer }}s) = []; + // Auto-refresh functionality + countdownTimer = 10; + autoRefreshInterval: NodeJS.Timeout | null = null; + lastRefreshTime = 0; + /** * Get the unnamed member constant */ @@ -264,6 +271,9 @@ export default class MembersList extends Vue { this.firstName = settings.firstName || ""; await this.fetchMembers(); await this.loadContacts(); + + // Start auto-refresh + this.startAutoRefresh(); } async refreshData() { @@ -576,6 +586,52 @@ export default class MembersList extends Vue { -1, ); // -1 means no auto-dismiss, stays open until user acts } + + startAutoRefresh() { + this.lastRefreshTime = Date.now(); + this.countdownTimer = 10; + + this.autoRefreshInterval = setInterval(() => { + const now = Date.now(); + const timeSinceLastRefresh = (now - this.lastRefreshTime) / 1000; + + if (timeSinceLastRefresh >= 10) { + // Time to refresh + this.fetchMembers(); + this.lastRefreshTime = now; + this.countdownTimer = 10; + } else { + // Update countdown + this.countdownTimer = Math.max( + 0, + Math.round(10 - timeSinceLastRefresh), + ); + } + }, 1000); // Update every second + } + + stopAutoRefresh() { + if (this.autoRefreshInterval) { + clearInterval(this.autoRefreshInterval); + this.autoRefreshInterval = null; + } + } + + manualRefresh() { + // Clear existing auto-refresh interval + if (this.autoRefreshInterval) { + clearInterval(this.autoRefreshInterval); + this.autoRefreshInterval = null; + } + + // Trigger immediate refresh and restart timer + this.fetchMembers(); + this.startAutoRefresh(); + } + + beforeDestroy() { + this.stopAutoRefresh(); + } }