Skip to content

Commit

Permalink
Active le rendu côté serveur
Browse files Browse the repository at this point in the history
Non activé car cela pose un problème bizarre avec la première animation.
Sans doute lié à sveltejs/kit#2301
  • Loading branch information
mquandalle committed Nov 21, 2021
1 parent 1508510 commit 1de5a27
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 23 deletions.
6 changes: 3 additions & 3 deletions src/lib/components/Details.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
import { slide } from 'svelte/transition';
import DetailsLine from './DetailsLine.svelte';
import Emoji from './Emoji.svelte';
import { emoji, engine, title } from './Results.svelte';
import { emoji, title } from './Results.svelte';
import { localisationPublicodesSituation } from '$lib/stores/localisation';
import RevenuSelector from './RevenuSelector.svelte';
const formatValue = typeof window !== 'undefined' && window.publicodes.formatValue;
import { engine, formatValue } from '$lib/engine';
const veloCat = $page.query.get('velo');
const categoryDescription = engine?.getRule(`vélo . ${veloCat}`).rawNode?.description ?? '';
const categoryDescription = engine.getRule(`vélo . ${veloCat}`).rawNode?.description ?? '';
let bikePrice;
let revenu = 0;
Expand Down
12 changes: 3 additions & 9 deletions src/lib/components/Results.svelte
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
<script context="module">
import aides from '$lib/../aides.yaml';
// HACK : Le paquet publicodes ne peut pas être importé normallement avec un
// `import Engine from "publicodes"`, vraisembablement car le paquet n'est pas sous
// le bon format ES Module
export const engine = typeof window !== 'undefined' ? new window.publicodes.default(aides) : null;
export function title(category) {
if (category === 'motorisation') {
return 'Motorisation d’un vélo classique';
Expand All @@ -25,8 +18,9 @@
import Emoji from '$lib/components/Emoji.svelte';
import { localisation, localisationPublicodesSituation } from '$lib/stores/localisation';
import { goto } from '$app/navigation';
import { engine, formatValue } from '$lib/engine';
const bikeKinds = engine?.getRule('vélo . type').rawNode['possibilités'];
const bikeKinds = engine.getRule('vélo . type').rawNode['possibilités'];
$: aidesPerBikeKind = bikeKinds
.map((type) => {
Expand All @@ -43,7 +37,7 @@
{
label: title(cat),
emoji: emoji(cat),
montant: window.publicodes.formatValue(node, { precision: 0 })
montant: formatValue(node, { precision: 0 })
}
]);
</script>
Expand Down
5 changes: 2 additions & 3 deletions src/lib/components/RevenuSelector.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<script context="module">
import { engine } from '$lib/components/Results.svelte';
import { engine, formatValue, reduceAST } from '$lib/engine';
import Emoji from './Emoji.svelte';
const formatValue = typeof window !== 'undefined' && window.publicodes.formatValue;
// We do a static analysis of the rules AST to search for a particular rule name.
// When in find it in a comparaison expression we retreive the value of the other
Expand Down Expand Up @@ -43,7 +42,7 @@
}
};
return window.publicodes.reduceAST(accumulateThresholds, [], engine.getRule(dottedName));
return reduceAST(accumulateThresholds, [], engine.getRule(dottedName));
}
</script>
Expand Down
19 changes: 19 additions & 0 deletions src/lib/engine.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import publicodes, {
formatValue as formatValueImport,
reduceAST as reduceASTImport
} from 'publicodes';
import aides from '$lib/../aides.yaml';

// HACK : Côté client Le paquet publicodes ne peut pas être importé normalement
// avec un `import publicodes from "publicodes"`, vraisemblablement car le
// paquet n'est pas sous le bon format ES Module. Pour contourner le problème
// temporairement on passe par `unpkg.com` qui ajoute une variable globale côté
// client.
const Publicodes = typeof window !== 'undefined' ? window.publicodes.default : publicodes;

export const engine = new Publicodes(aides);

export const formatValue =
typeof window !== 'undefined' ? window.publicodes.formatValue : formatValueImport;
export const reduceAST =
typeof window !== 'undefined' ? window.publicodes.reduceAST : reduceASTImport;
5 changes: 5 additions & 0 deletions src/routes/__layout.svelte
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
<script>
import { prefetchRoutes } from '$app/navigation';
import { page } from '$app/stores';
import Emoji from '$lib/components/Emoji.svelte';
import Footer from '$lib/components/Footer.svelte';
import Search from '$lib/components/Search.svelte';
import { onMount } from 'svelte';
import 'virtual:windi.css';
onMount(() => prefetchRoutes(['/', '/ville/*']));
</script>

<div class="px-4 sm:px-8 h-screen flex flex-col">
Expand Down
13 changes: 5 additions & 8 deletions src/routes/ville/[slug].svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@
import { browser } from '$app/env';
import { localisation } from '$lib/stores/localisation';
export const ssr = false;
// This pattern is explained here:
// https://github.com/sveltejs/kit/issues/2851
export async function load({ page, fetch }) {
if (browser && get(localisation)?.slug === page.params.slug) {
if (browser && get(localisation)?.slug === page.params?.slug) {
return { props: { ville: get(localisation) } };
} else {
const res = await fetch(`/api/collectivites?slug=${page.params.slug}`);
const res = await fetch(`/api/collectivites?slug=${page.params?.slug}`);
return { props: { ville: await res.json() } };
}
}
Expand All @@ -21,12 +19,11 @@
import Details from '$lib/components/Details.svelte';
import Results from '$lib/components/Results.svelte';
import { fly } from 'svelte/transition';
import { onMount } from 'svelte';
import { get } from 'svelte/store';
export let ville;
onMount(() => localisation.set(ville));
localisation.set(ville);
</script>
<svelte:head>
Expand All @@ -42,14 +39,14 @@
{#if $page.query.get('velo')}
<div
class="col-start-1 col-end-1 row-start-1 row-end-1"
transition:fly|local={{ x: 600, duration: 400 }}
transition:fly|local={{ x: 800, duration: 400 }}
>
<Details {ville} />
</div>
{:else}
<div
class="col-start-1 col-end-1 row-start-1 row-end-1"
transition:fly|local={{ x: -600, duration: 400 }}
transition:fly|local={{ x: -800, duration: 400 }}
>
<Results {ville} />
</div>
Expand Down

0 comments on commit 1de5a27

Please sign in to comment.