Add rotating reload icon

This commit is contained in:
Fred Boniface 2024-07-05 01:12:56 +01:00
parent b779429346
commit a3bf2af68d
4 changed files with 22 additions and 3 deletions

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { fade } from "svelte/transition"; import { fade } from "svelte/transition";
import type { CardConfig } from "./Card.types"; import type { CardConfig } from "./Card.types";
import { IconHelpCircle, IconRefresh } from "@tabler/icons-svelte"; import { IconHelpCircle, IconReload } from "@tabler/icons-svelte";
import Tooltip from "$lib/Tooltip.svelte"; import Tooltip from "$lib/Tooltip.svelte";
export let config: CardConfig; export let config: CardConfig;
@ -19,8 +19,8 @@
</Tooltip> </Tooltip>
{/if} {/if}
{#if config.showRefresh} {#if config.showRefresh}
<button on:click={config.onRefresh} aria-label="Refresh"> <button class:refreshing={config.refreshing} on:click={config.onRefresh} aria-label="Refresh">
<IconRefresh /> <IconReload />
</button> </button>
{/if} {/if}
</div> </div>
@ -67,6 +67,10 @@
gap: 0px; gap: 0px;
} }
.refreshing {
animation: spin 1s linear infinite;
}
.content { .content {
margin-top: 5px; margin-top: 5px;
} }
@ -82,4 +86,13 @@
button:hover { button:hover {
color: var(--island-header-color); color: var(--island-header-color);
} }
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
</style> </style>

View File

@ -4,6 +4,7 @@ export interface CardConfig {
showRefresh: boolean; showRefresh: boolean;
helpText: string; helpText: string;
onRefresh: () => void; onRefresh: () => void;
refreshing: boolean;
} }
export interface LookupCardConfig { export interface LookupCardConfig {

View File

@ -10,6 +10,7 @@
showRefresh: false, showRefresh: false,
helpText: config.helpText, helpText: config.helpText,
onRefresh: () => {}, onRefresh: () => {},
refreshing: false,
}; };
</script> </script>

View File

@ -19,6 +19,7 @@
showRefresh: true, showRefresh: true,
helpText: "Your location may not be accurate on desktop and laptop devices.", helpText: "Your location may not be accurate on desktop and laptop devices.",
onRefresh: refresh, onRefresh: refresh,
refreshing: false,
}; };
function turnOnLocation() { function turnOnLocation() {
@ -28,6 +29,7 @@
} }
function refresh() { function refresh() {
config.refreshing = true;
stations = []; stations = [];
getNearestStations(); getNearestStations();
} }
@ -41,6 +43,8 @@
stations = apiResponse; stations = apiResponse;
} catch (err) { } catch (err) {
errorMessage = err as string; errorMessage = err as string;
} finally {
config.refreshing = false;
} }
} }