From 9c6f720684fd290a52d1e8964adbac8c54c48356 Mon Sep 17 00:00:00 2001 From: Ota Prokopec Date: Thu, 30 Mar 2023 22:17:43 +0200 Subject: [PATCH 1/2] zaloha 30.3.2023 --- src/lib/utils/database/experience.ts | 17 +++++++++++++++++ src/routes/game/experience.svelte | 22 ++++++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/lib/utils/database/experience.ts b/src/lib/utils/database/experience.ts index 9e3e59f..a58b55e 100644 --- a/src/lib/utils/database/experience.ts +++ b/src/lib/utils/database/experience.ts @@ -37,6 +37,15 @@ export const load = async (pathName: string, previewQuestionsCount?: number, pre return experience } + +export const loadAsStore = (pathName: string, previewQuestionsCount?: number, preview?: Function) => { + const store = writable(null) + load(pathName, previewQuestionsCount, preview).then(experience => { + store.set(experience) + }) + return [store] +} + //Fetch of Rating const getRating = async (expId: string) => { const { documents, total } = await databases.listDocuments('63cef30d6da945dd4250', '63ee6353ebb174cf815d', [Query.equal('ExpID', expId)]) @@ -145,4 +154,12 @@ export const getUserProgressAsStore = (experienceId: string) => { return [store, loading] as const } +export const getExperienceByURL = async(url: string) => { + return (await databases.listDocuments("63cef30d6da945dd4250", "63cef4bd210fdf2e58880", [Query.equal("ExpURL", url)])).documents[0] +} +export const getExperienceByURLAsStore = (url: string) => { + const store = writable(null) + getExperienceByURL(url).then(exp => store.set(exp)) + return [store] as const +} // !pridat trideni podle kategorie! export const getExperiencesByCategory = async (category: string) => {} diff --git a/src/routes/game/experience.svelte b/src/routes/game/experience.svelte index 21a3dad..ee5f5d0 100644 --- a/src/routes/game/experience.svelte +++ b/src/routes/game/experience.svelte @@ -12,26 +12,36 @@ import Renderer from './Forms/Renderer.svelte' import Marker from '../../lib/components/Map/Marker.svelte' import { onMount } from 'svelte' - import { getUserProgressAsStore, load } from '$lib/utils/database/experience' + import { getExperienceByURLAsStore, getUserProgress, getUserProgressAsStore, load, loadAsStore } from '$lib/utils/database/experience' import { getLocationDataFromLatAndLong } from '$lib/utils/locations' import { navigate } from '$lib/router' import { Experience } from '$lib/TStypes/experiences' import Progressbar from '$lib/components/erant/Progressbar.svelte' + import { writable } from 'svelte/store' export let params: { gameurl: string } - let gameData: Experience // - $: [userProgress] = gameData ? getUserProgressAsStore(gameData?.$id) : [] + let gameData = writable(null) + let [exp] = getExperienceByURLAsStore(params.gameurl) + $: [userProgress] = gameData ? getUserProgressAsStore($exp?.$id) : [] - onMount(async () => { + + $gameData = loadAsStore(params.gameurl, $userProgress.length+4 || 8, (preview) => { + $gameData = preview + view = 'experience-preview' + }) + + /*onMount(async () => { try { - gameData = await load(params.gameurl, 2, (preview) => { + console.log($userProgress?.length || 8) + + gameData = await load(params.gameurl, (await getUserProgress(gameData?.$id)) || 8, (preview) => { gameData = preview view = 'experience-preview' }) } catch (error) { navigate('/error') } - }) + })*/ /*$: assets = gameData?.questions ?.filter((q) => q.thumbnail !== null) From b2721a9c37a41acd9f60f5608f7bb8a22cde1eb8 Mon Sep 17 00:00:00 2001 From: Ota Prokopec Date: Thu, 30 Mar 2023 22:33:56 +0200 Subject: [PATCH 2/2] loading experience as store => better --- src/lib/utils/database/experience.ts | 14 ++++---- src/routes/game/experience.svelte | 49 +++++++++++++--------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/lib/utils/database/experience.ts b/src/lib/utils/database/experience.ts index a58b55e..8028c69 100644 --- a/src/lib/utils/database/experience.ts +++ b/src/lib/utils/database/experience.ts @@ -2,7 +2,7 @@ import { databases, user as userStore } from '$lib/appwrite' import { Account, Models, Permission, Query, Role } from 'appwrite' import database from 'svelte-appwrite-client/src/lib/database' import { getLocationDataFromLatAndLong } from '../locations' -import { writable } from 'svelte/store' +import { Writable, writable } from 'svelte/store' import { CheckPoint, Experience } from '$lib/TStypes/experiences' import collections from '$lib/collections' @@ -154,12 +154,12 @@ export const getUserProgressAsStore = (experienceId: string) => { return [store, loading] as const } -export const getExperienceByURL = async(url: string) => { - return (await databases.listDocuments("63cef30d6da945dd4250", "63cef4bd210fdf2e58880", [Query.equal("ExpURL", url)])).documents[0] +export const getExperienceIdByUrl = async(url: string) => { + return (await databases.listDocuments("63cef30d6da945dd4250", "63cef4bd210fdf2e5888", [Query.equal("ExpURL", url)])).documents[0].$id } -export const getExperienceByURLAsStore = (url: string) => { - const store = writable(null) - getExperienceByURL(url).then(exp => store.set(exp)) - return [store] as const +export const getExperienceIdByUrlAsStore = (url: string): [Writable] => { + const store = writable(null) + getExperienceIdByUrl(url).then(exp => store.set(exp)) + return [store] } // !pridat trideni podle kategorie! export const getExperiencesByCategory = async (category: string) => {} diff --git a/src/routes/game/experience.svelte b/src/routes/game/experience.svelte index ee5f5d0..70fe047 100644 --- a/src/routes/game/experience.svelte +++ b/src/routes/game/experience.svelte @@ -12,7 +12,7 @@ import Renderer from './Forms/Renderer.svelte' import Marker from '../../lib/components/Map/Marker.svelte' import { onMount } from 'svelte' - import { getExperienceByURLAsStore, getUserProgress, getUserProgressAsStore, load, loadAsStore } from '$lib/utils/database/experience' + import { getExperienceIdByUrl, getExperienceIdByUrlAsStore, getUserProgress, getUserProgressAsStore, load, loadAsStore } from '$lib/utils/database/experience' import { getLocationDataFromLatAndLong } from '$lib/utils/locations' import { navigate } from '$lib/router' import { Experience } from '$lib/TStypes/experiences' @@ -21,29 +21,26 @@ export let params: { gameurl: string } let gameData = writable(null) - let [exp] = getExperienceByURLAsStore(params.gameurl) - $: [userProgress] = gameData ? getUserProgressAsStore($exp?.$id) : [] - - - $gameData = loadAsStore(params.gameurl, $userProgress.length+4 || 8, (preview) => { + let [id] = getExperienceIdByUrlAsStore(params.gameurl) + $: [userProgress] = $gameData ? getUserProgressAsStore($id) : [] + /* + $: [gameData] = loadAsStore(params.gameurl, $userProgress?.length + 4 || 8, (preview) => { $gameData = preview view = 'experience-preview' - }) + })*/ - /*onMount(async () => { + onMount(async () => { try { - console.log($userProgress?.length || 8) - - gameData = await load(params.gameurl, (await getUserProgress(gameData?.$id)) || 8, (preview) => { - gameData = preview + $gameData = await load(params.gameurl, (await getUserProgress(await getExperienceIdByUrl(params.gameurl))).length || 8, (preview) => { + $gameData = preview view = 'experience-preview' }) } catch (error) { navigate('/error') } - })*/ + }) - /*$: assets = gameData?.questions + /*$: assets = $gameData?.questions ?.filter((q) => q.thumbnail !== null) ?.slice(0, 8) ?.map((q) => q.thumbnail)*/ @@ -52,7 +49,7 @@ //is user already in game //const userInGame = JSON.parse(localStorage.getItem(location.pathname)) - //$: if (gameData && userInGame) view = 'game-play' + //$: if ($gameData && userInGame) view = 'game-play' {#if view === 'experience-loading'} @@ -61,27 +58,27 @@ {:else if view === 'experience-preview'} - +
- {gameData.ExpName} + {$gameData.ExpName}
- {gameData.rating} + {$gameData.rating} - {#await getLocationDataFromLatAndLong(gameData.ExpLocation[0], gameData.ExpLocation[1]) then { city }} + {#await getLocationDataFromLatAndLong($gameData.ExpLocation[0], $gameData.ExpLocation[1]) then { city }} {city} {/await}
- {#if gameData.ExpIntroduction} + {#if $gameData.ExpIntroduction}
- {@html gameData.ExpIntroduction} + {@html $gameData.ExpIntroduction}
{/if} @@ -94,25 +91,25 @@
- +
- - {#each gameData.checkPoints as { CPLocation: [lat, lng] }} + + {#each $gameData.checkPoints as { CPLocation: [lat, lng] }} {/each}
- {#if gameData.checkPoints.length} + {#if $gameData.checkPoints.length} {/if}
{:else if view === 'experience-play'} - + {/if}