🍎 Updates ui
This commit is contained in:
+116
-113
@@ -1,52 +1,52 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { closeModal } from 'svelte-modals';
|
import { closeModal } from 'svelte-modals';
|
||||||
import { focusTrap } from 'svelte-focus-trap';
|
import { focusTrap } from 'svelte-focus-trap';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
|
|
||||||
import { onMount, onDestroy } from 'svelte';
|
|
||||||
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
|
||||||
import type { NetworkItem, NetworkList } from '$lib/types/models';
|
|
||||||
import { api } from '$lib/api';
|
|
||||||
import { AP, Network, Reload, Cancel } from '$lib/components/icons';
|
|
||||||
|
|
||||||
// provided by <Modals />
|
import { onMount, onDestroy } from 'svelte';
|
||||||
export let isOpen: boolean;
|
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
||||||
export let storeNetwork: any;
|
import type { NetworkItem, NetworkList } from '$lib/types/models';
|
||||||
|
import { api } from '$lib/api';
|
||||||
|
import { AP, Network, Reload, Cancel } from '$lib/components/icons';
|
||||||
|
|
||||||
const encryptionType = [
|
// provided by <Modals />
|
||||||
'Open',
|
export let isOpen: boolean;
|
||||||
'WEP',
|
export let storeNetwork: any;
|
||||||
'WPA PSK',
|
|
||||||
'WPA2 PSK',
|
|
||||||
'WPA WPA2 PSK',
|
|
||||||
'WPA2 Enterprise',
|
|
||||||
'WPA3 PSK',
|
|
||||||
'WPA2 WPA3 PSK',
|
|
||||||
'WAPI PSK'
|
|
||||||
];
|
|
||||||
|
|
||||||
let listOfNetworks: NetworkItem[] = [];
|
const encryptionType = [
|
||||||
|
'Open',
|
||||||
|
'WEP',
|
||||||
|
'WPA PSK',
|
||||||
|
'WPA2 PSK',
|
||||||
|
'WPA WPA2 PSK',
|
||||||
|
'WPA2 Enterprise',
|
||||||
|
'WPA3 PSK',
|
||||||
|
'WPA2 WPA3 PSK',
|
||||||
|
'WAPI PSK'
|
||||||
|
];
|
||||||
|
|
||||||
let scanActive = false;
|
let listOfNetworks: NetworkItem[] = [];
|
||||||
|
|
||||||
let pollingId: number;
|
let scanActive = false;
|
||||||
|
|
||||||
async function scanNetworks() {
|
let pollingId: number;
|
||||||
scanActive = true;
|
|
||||||
if ((await pollingResults()) == false) {
|
|
||||||
pollingId = setInterval(() => pollingResults(), 1000);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function pollingResults() {
|
async function scanNetworks() {
|
||||||
if (result.isErr()){
|
scanActive = true;
|
||||||
await api.get('/api/wifi/scan');
|
await api.get('/api/wifi/scan');
|
||||||
const result = await api.get<NetworkList>('/api/wifi/networks');
|
if ((await pollingResults()) == false) {
|
||||||
console.error(`Error occurred while fetching: `, result.inner);
|
pollingId = setInterval(() => pollingResults(), 1000);
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
let response = result.inner
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function pollingResults() {
|
||||||
|
const result = await api.get<NetworkList>('/api/wifi/networks');
|
||||||
|
if (result.isErr()) {
|
||||||
|
console.error(`Error occurred while fetching: `, result.inner);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let response = result.inner;
|
||||||
listOfNetworks = response.networks;
|
listOfNetworks = response.networks;
|
||||||
scanActive = false;
|
scanActive = false;
|
||||||
if (listOfNetworks.length) {
|
if (listOfNetworks.length) {
|
||||||
@@ -54,86 +54,89 @@
|
|||||||
pollingId = 0;
|
pollingId = 0;
|
||||||
}
|
}
|
||||||
return listOfNetworks.length;
|
return listOfNetworks.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
scanNetworks();
|
scanNetworks();
|
||||||
});
|
});
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
if (pollingId) {
|
if (pollingId) {
|
||||||
clearInterval(pollingId);
|
clearInterval(pollingId);
|
||||||
pollingId = 0;
|
pollingId = 0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if isOpen}
|
{#if isOpen}
|
||||||
<div
|
<div
|
||||||
role="dialog"
|
role="dialog"
|
||||||
class="pointer-events-none fixed inset-0 z-50 flex items-center justify-center"
|
class="pointer-events-none fixed inset-0 z-50 flex items-center justify-center"
|
||||||
transition:fly={{ y: 50 }}
|
transition:fly={{ y: 50 }}
|
||||||
on:introstart
|
on:introstart
|
||||||
on:outroend
|
on:outroend
|
||||||
use:focusTrap
|
use:focusTrap
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="bg-base-100 rounded-box pointer-events-auto flex max-h-full min-w-fit max-w-md flex-col justify-between p-4 shadow-lg"
|
class="bg-base-100 rounded-box pointer-events-auto flex max-h-full min-w-fit max-w-md flex-col justify-between p-4 shadow-lg"
|
||||||
>
|
>
|
||||||
<h2 class="text-base-content text-start text-2xl font-bold">Scan Networks</h2>
|
<h2 class="text-base-content text-start text-2xl font-bold">Scan Networks</h2>
|
||||||
<div class="divider my-2" />
|
<div class="divider my-2" />
|
||||||
<div class="overflow-y-auto">
|
<div class="overflow-y-auto">
|
||||||
{#if scanActive}<div class="bg-base-100 flex flex-col items-center justify-center p-6">
|
{#if scanActive}<div
|
||||||
<AP class="text-secondary h-32 w-32 shrink animate-ping stroke-2" />
|
class="bg-base-100 flex flex-col items-center justify-center p-6"
|
||||||
<p class="mt-8 text-2xl">Scanning ...</p>
|
>
|
||||||
</div>
|
<AP class="text-secondary h-32 w-32 shrink animate-ping stroke-2" />
|
||||||
{:else}
|
<p class="mt-8 text-2xl">Scanning ...</p>
|
||||||
<ul class="menu">
|
</div>
|
||||||
{#each listOfNetworks as network, i}
|
{:else}
|
||||||
<li>
|
<ul class="menu">
|
||||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
{#each listOfNetworks as network, i}
|
||||||
<div
|
<li>
|
||||||
class="bg-base-200 rounded-btn my-1 flex items-center space-x-3 hover:scale-[1.02] active:scale-[0.98]"
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||||
on:click={() => {
|
<div
|
||||||
storeNetwork(network.ssid);
|
class="bg-base-200 rounded-btn my-1 flex items-center space-x-3 hover:scale-[1.02] active:scale-[0.98]"
|
||||||
}}
|
on:click={() => {
|
||||||
|
storeNetwork(network.ssid);
|
||||||
|
}}
|
||||||
role="button"
|
role="button"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
<div class="mask mask-hexagon bg-primary h-auto w-10 shrink-0">
|
<div class="mask mask-hexagon bg-primary h-auto w-10 shrink-0">
|
||||||
<Network class="text-primary-content h-auto w-full scale-75" />
|
<Network
|
||||||
</div>
|
class="text-primary-content h-auto w-full scale-75"
|
||||||
<div>
|
/>
|
||||||
<div class="font-bold">{network.ssid}</div>
|
</div>
|
||||||
<div class="text-sm opacity-75">
|
<div>
|
||||||
Security: {encryptionType[network.encryption_type]}, Channel: {network.channel}
|
<div class="font-bold">{network.ssid}</div>
|
||||||
</div>
|
<div class="text-sm opacity-75">
|
||||||
</div>
|
Security: {encryptionType[network.encryption_type]},
|
||||||
<div class="flex-grow" />
|
Channel: {network.channel}
|
||||||
<RssiIndicator
|
</div>
|
||||||
showDBm={true}
|
</div>
|
||||||
rssi={network.rssi}
|
<div class="flex-grow" />
|
||||||
/>
|
<RssiIndicator showDBm={true} rssi={network.rssi} />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
</ul>
|
</ul>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="divider my-2" />
|
<div class="divider my-2" />
|
||||||
<div class="flex flex-wrap justify-end gap-2">
|
<div class="flex flex-wrap justify-end gap-2">
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary inline-flex flex-none items-center"
|
class="btn btn-primary inline-flex flex-none items-center"
|
||||||
disabled={scanActive}
|
disabled={scanActive}
|
||||||
on:click={scanNetworks}><Reload class="mr-2 h-5 w-5" /><span>Scan again</span></button
|
on:click={scanNetworks}
|
||||||
>
|
><Reload class="mr-2 h-5 w-5" /><span>Scan again</span></button
|
||||||
|
>
|
||||||
|
|
||||||
<div class="flex-grow" />
|
<div class="flex-grow" />
|
||||||
<button
|
<button
|
||||||
class="btn btn-warning text-warning-content inline-flex flex-none items-center"
|
class="btn btn-warning text-warning-content inline-flex flex-none items-center"
|
||||||
on:click={closeModal}><Cancel class="mr-2 h-5 w-5" /><span>Cancel</span></button
|
on:click={closeModal}><Cancel class="mr-2 h-5 w-5" /><span>Cancel</span></button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
+748
-707
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user