Supra_App/src/routes/(authed)/departments/+page.svelte

88 lines
2.8 KiB
Svelte
Raw Normal View History

2026-02-17 14:30:02 +07:00
<script lang="ts">
import { asset } from '$app/paths';
import { permission as currentPerms } from '$lib/core/stores/permissions';
2026-03-26 14:23:12 +07:00
import { page } from '$app/stores';
2026-02-17 14:30:02 +07:00
import { get } from 'svelte/store';
import Spinner from '$lib/components/ui/spinner/spinner.svelte';
import { departmentStore } from '$lib/core/stores/departments';
import { socketStore } from '$lib/core/stores/websocketStore';
import { goto } from '$app/navigation';
import { addNotification } from '$lib/core/stores/noti';
import { browser } from '$app/environment';
import { setCookieOnNonBrowser } from '$lib/helpers/cookie';
import { referenceFromPage } from '$lib/core/stores/recipeStore';
2026-02-17 14:30:02 +07:00
let enabledAccessibleCountries: string[] = $state([]);
2026-03-26 14:23:12 +07:00
const refPage = get(referenceFromPage);
2026-02-17 14:30:02 +07:00
function onCountrySelected(cnt: string) {
departmentStore.set(cnt);
if (browser && 'cookieStore' in window) cookieStore.set('department', cnt);
else setCookieOnNonBrowser('department', cnt);
addNotification(`INFO:Selected ${cnt}`);
setTimeout(async () => {
console.log(get(departmentStore));
departmentStore.set(cnt);
2026-03-26 14:23:12 +07:00
if (refPage === 'sheet') {
2026-06-09 10:50:59 +07:00
await goto(`/sheet/overview/${cnt}`);
2026-03-26 14:23:12 +07:00
} else {
await goto('/recipe/overview');
}
2026-02-17 14:30:02 +07:00
}, 1000);
}
// read or write permission
2026-03-26 14:23:12 +07:00
let userCurrentPerms = get(currentPerms).filter((x) => {
if (refPage === 'sheet') {
return x.startsWith('document.write');
}
return x.startsWith('document.read');
});
2026-02-17 14:30:02 +07:00
// show country by enabled `document.read.{country}`
2026-03-26 14:23:12 +07:00
enabledAccessibleCountries = userCurrentPerms.map((x) => x.split('.')[2]);
2026-02-17 14:30:02 +07:00
// update every 30s
if (enabledAccessibleCountries.length == 0) {
setTimeout(() => {
// read or write permission
2026-03-26 14:23:12 +07:00
let userCurrentPerms = get(currentPerms).filter((x) => {
if (refPage === 'sheet') {
return x.startsWith('document.write');
}
return x.startsWith('document.read');
});
2026-02-17 14:30:02 +07:00
// show country by enabled `document.read.{country}`
2026-03-26 14:23:12 +07:00
enabledAccessibleCountries = userCurrentPerms.map((x) => x.split('.')[2]);
if (enabledAccessibleCountries.length == 1) {
onCountrySelected(enabledAccessibleCountries[0]);
}
2026-02-17 14:30:02 +07:00
}, 1000);
}
if (enabledAccessibleCountries.length == 1) {
onCountrySelected(enabledAccessibleCountries[0]);
}
2026-02-17 14:30:02 +07:00
</script>
<h1 class="m-8 text-4xl font-bold">Country Selection</h1>
<p class="m-8 text-muted-foreground">Select country to view/edit recipe</p>
{#if enabledAccessibleCountries.length == 0}
<div class="flex h-max w-max items-center justify-center">
<Spinner class="size-48" />
</div>
{:else}
<div class="m-8 grid grid-flow-dense grid-cols-5 gap-4">
{#each enabledAccessibleCountries as country}
<div>
<button class="hover:cursor-pointer" onclick={() => onCountrySelected(country)}>
<img src={asset(`/departments/logo/${country}_plate.png`)} alt={country} loading="lazy" />
</button>
</div>
{/each}
</div>
{/if}