Skip to content

Commit 895f058

Browse files
feat(frontend): extract Satellites picker (#1677)
1 parent ffb0089 commit 895f058

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed
Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
<script lang="ts">
2-
import { Principal } from '@dfinity/principal';
3-
import { nonNullish } from '@dfinity/utils';
4-
import { onMount } from 'svelte';
2+
import type { Principal } from '@dfinity/principal';
3+
import SatellitesPicker, {
4+
type SatellitePickerProps
5+
} from '$lib/components/satellites/SatellitesPicker.svelte';
56
import { orbiterSatellitesConfig } from '$lib/derived/orbiter-satellites.derived';
6-
import { pageSatelliteId } from '$lib/derived/page.derived.svelte';
7-
import { i18n } from '$lib/stores/i18n.store';
8-
import type { SatelliteIdText } from '$lib/types/satellite';
97
import { navigateToAnalytics } from '$lib/utils/nav.utils';
108
119
interface Props {
@@ -14,14 +12,10 @@
1412
1513
let { disabled = false }: Props = $props();
1614
17-
const navigate = async () =>
18-
await navigateToAnalytics(
19-
nonNullish(satelliteIdText) ? Principal.fromText(satelliteIdText) : undefined
20-
);
15+
const navigate = async (satelliteId: Principal | undefined) =>
16+
await navigateToAnalytics(satelliteId);
2117
22-
let satelliteIdText: SatelliteIdText | undefined = $state();
23-
24-
let satellites: { satelliteId: string; satName: string }[] = $derived(
18+
let satellites = $derived<SatellitePickerProps['satellites']>(
2519
Object.entries($orbiterSatellitesConfig).reduce(
2620
(acc, [satelliteId, { name: satName, enabled }]) => [
2721
...acc,
@@ -38,27 +32,6 @@
3832
[] as { satelliteId: string; satName: string }[]
3933
)
4034
);
41-
42-
onMount(() => {
43-
satelliteIdText =
44-
nonNullish($pageSatelliteId) &&
45-
satellites.find(({ satelliteId }) => satelliteId === $pageSatelliteId)
46-
? $pageSatelliteId
47-
: undefined;
48-
});
4935
</script>
5036

51-
<select
52-
id="satellite"
53-
name="satellite"
54-
class="big"
55-
bind:value={satelliteIdText}
56-
onchange={navigate}
57-
{disabled}
58-
>
59-
<option value={undefined}>{$i18n.analytics.all_satellites}</option>
60-
61-
{#each satellites as { satelliteId, satName } (satName)}
62-
<option value={satelliteId}>{satName}</option>
63-
{/each}
64-
</select>
37+
<SatellitesPicker {disabled} {satellites} {navigate} />
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<script module lang="ts">
2+
export interface SatellitePickerProps {
3+
disabled?: boolean;
4+
navigate: (satelliteId: Principal | undefined) => Promise<void>;
5+
satellites: { satelliteId: string; satName: string }[];
6+
}
7+
</script>
8+
9+
<script lang="ts">
10+
import { Principal } from '@dfinity/principal';
11+
import { nonNullish } from '@dfinity/utils';
12+
import { onMount } from 'svelte';
13+
import { pageSatelliteId } from '$lib/derived/page.derived.svelte';
14+
import { i18n } from '$lib/stores/i18n.store';
15+
import type { SatelliteIdText } from '$lib/types/satellite';
16+
17+
let { disabled = false, navigate, satellites }: SatellitePickerProps = $props();
18+
19+
let satelliteIdText: SatelliteIdText | undefined = $state(undefined);
20+
21+
const onchange = async () =>
22+
await navigate(nonNullish(satelliteIdText) ? Principal.fromText(satelliteIdText) : undefined);
23+
24+
onMount(() => {
25+
satelliteIdText =
26+
nonNullish($pageSatelliteId) &&
27+
satellites.find(({ satelliteId }) => satelliteId === $pageSatelliteId)
28+
? $pageSatelliteId
29+
: undefined;
30+
});
31+
</script>
32+
33+
<select
34+
id="satellite"
35+
name="satellite"
36+
class="big"
37+
bind:value={satelliteIdText}
38+
{onchange}
39+
{disabled}
40+
>
41+
<option value={undefined}>{$i18n.analytics.all_satellites}</option>
42+
43+
{#each satellites as { satelliteId, satName } (satName)}
44+
<option value={satelliteId}>{satName}</option>
45+
{/each}
46+
</select>

0 commit comments

Comments
 (0)