update: websocket

- enable save button in overview

Signed-off-by: pakintada@gmail.com <Pakin>
This commit is contained in:
pakintada@gmail.com 2026-05-07 17:13:45 +07:00
parent a29ff0be1a
commit a0637c7d72
3 changed files with 37 additions and 18 deletions

View file

@ -22,11 +22,14 @@
import { auth } from '$lib/core/stores/auth'; import { auth } from '$lib/core/stores/auth';
import { isUserAdmin } from '$lib/core/admin/adminService'; import { isUserAdmin } from '$lib/core/admin/adminService';
import { referenceFromPage } from '$lib/core/stores/recipeStore'; import { referenceFromPage } from '$lib/core/stores/recipeStore';
import { env } from '$env/dynamic/public';
let sideBar: HTMLElement | null = $state(null); let sideBar: HTMLElement | null = $state(null);
let isSideBarOpen: boolean = $state(true); let isSideBarOpen: boolean = $state(true);
let isAdmin: boolean = $state(false); let isAdmin: boolean = $state(false);
const app_version = env.PUBLIC_APP_VERSION;
const data = { const data = {
navMain: [ navMain: [
{ {
@ -134,16 +137,17 @@
}); });
let authorizedNavMain = $derived( let authorizedNavMain = $derived(
data.navMain.map(nav => { data.navMain
const filteredItems = nav.items.filter(item => { .map((nav) => {
if (!item.requirePerm) return true; const filteredItems = nav.items.filter((item) => {
if (!item.requirePerm) return true;
return needPermission(item.requirePerm); return needPermission(item.requirePerm);
}); });
return { ...nav, items: filteredItems }; return { ...nav, items: filteredItems };
})
}).filter(nav => nav.items.length > 0) .filter((nav) => nav.items.length > 0)
); );
let { let {
@ -160,6 +164,9 @@
<TaobinLogo size={isSideBarOpen ? 96 : 24} fillColor={'#FFFFFF'} /> <TaobinLogo size={isSideBarOpen ? 96 : 24} fillColor={'#FFFFFF'} />
</button> </button>
</div> </div>
<p class="justify-center text-center font-mono text-[8px] text-muted-foreground">
{app_version ?? ''}
</p>
</Sidebar.Header> </Sidebar.Header>
<Sidebar.Content> <Sidebar.Content>
{#each authorizedNavMain as nav} {#each authorizedNavMain as nav}

View file

@ -213,17 +213,15 @@
<Tabs.Trigger value="info">Info</Tabs.Trigger> <Tabs.Trigger value="info">Info</Tabs.Trigger>
<Tabs.Trigger value="details">Details</Tabs.Trigger> <Tabs.Trigger value="details">Details</Tabs.Trigger>
</Tabs.List> </Tabs.List>
{#if refPage === 'brew'} <div>
<div> <Button type="button" variant="default" onclick={() => saveRecipe()}>Save</Button>
<Button type="button" variant="default" onclick={() => saveRecipe()}>Save</Button>
{#if $machineInfoStore?.status == 'IDLE' || $machineInfoStore?.status == ''} {#if refPage === 'brew' && ($machineInfoStore?.status == 'IDLE' || $machineInfoStore?.status == '')}
<Button type="button" variant="default" onclick={async () => sendTriggerBrewNow()} <Button type="button" variant="default" onclick={async () => sendTriggerBrewNow()}
>Test Brew</Button >Test Brew</Button
> >
{/if} {/if}
</div> </div>
{/if}
</div> </div>
<Tabs.Content value="info"> <Tabs.Content value="info">

View file

@ -17,6 +17,10 @@ export function connectToWebsocket() {
if (browser) { if (browser) {
// console.log('connecting to ', env.PUBLIC_WSS); // console.log('connecting to ', env.PUBLIC_WSS);
try { try {
if (socket != null) {
return;
}
socket = new WebSocket(`${env.PUBLIC_WSS}`); socket = new WebSocket(`${env.PUBLIC_WSS}`);
socket.addEventListener('open', () => { socket.addEventListener('open', () => {
@ -62,6 +66,16 @@ export function connectToWebsocket() {
}); });
} }
}, 10000); }, 10000);
if (auth.currentUser && socket == null) {
console.log('try reconnect websocket ...');
// retry again
setTimeout(() => {
if (socket == null) {
connectToWebsocket();
}
}, 5000);
}
}); });
socket.addEventListener('message', (event) => { socket.addEventListener('message', (event) => {