feat: recipe version selector

- fix recipe not show on overview
- fix recipe show late after select country
- disable queue message on no connection ws
- fix infinite topping(s) list if moving between pages

Signed-off-by: pakintada@gmail.com <Pakin>
This commit is contained in:
pakintada@gmail.com 2026-05-04 16:50:15 +07:00
parent e25881d016
commit a29ff0be1a
19 changed files with 314 additions and 108 deletions

View file

@ -1,6 +1,7 @@
import { writable } from 'svelte/store';
import type { RecipeOverview } from '../../../routes/(authed)/recipe/overview/columns';
import type { Material } from '$lib/models/material.model';
import type { RecipeVersion } from '$lib/models/recipe_version.model';
export const recipeData = writable<any>(null);
export const recipeLoading = writable(false);
@ -10,8 +11,12 @@ export const recipeStreamMeta = writable<{
total_size: number;
chunk_size: number;
progress: number;
version?: string;
country?: string;
} | null>(null);
export const currentRecipeVersionsSelector = writable<RecipeVersion[]>([]);
// from server
export const recipeOverviewData = writable<RecipeOverview[] | null>(null);
export const materialData = writable<Material | undefined>();
@ -45,41 +50,3 @@ export const materialFromMachineQuery = writable<any>({});
export const referenceFromPage = writable<string>('');
export const currentEditingRecipeProductCode = writable<string>('');
let worker: Worker | null = null;
let initialized = false;
export function loadRecipe(url: string) {
if (initialized) return;
initialized = true;
recipeLoading.set(true);
worker = new Worker(new URL('../../workers/data.worker.ts', import.meta.url), {
type: 'module'
});
worker.onmessage = (e) => {
const { type, payload } = e.data;
if (type === 'data') {
recipeData.set(payload);
recipeLoading.set(false);
}
if (type === 'error') {
recipeDataError.set(payload);
recipeLoading.set(false);
}
};
worker.postMessage({ url });
}
export function getWorker() {
if (!worker) {
worker = new Worker(new URL('../../workers/data.worker.ts', import.meta.url), {
type: 'module'
});
}
return worker;
}

View file

@ -43,15 +43,15 @@ export function connectToWebsocket() {
}
// recover messages on connect, flushing
while (get(msgQueue).length) {
let queue = get(msgQueue);
let current = queue.shift();
if (current && socket) {
socket.send(current);
// set next
msgQueue.set(queue);
}
}
// while (get(msgQueue).length) {
// let queue = get(msgQueue);
// let current = queue.shift();
// if (current && socket) {
// socket.send(current);
// // set next
// msgQueue.set(queue);
// }
// }
// heartbeat 10s
setInterval(() => {