Aller au contenu principal

Composants Svelte

Les composants Svelte Wast-o permettent d'intégrer nativement les fonctionnalités Wast-o dans votre application Svelte.

Installation

npm install @wasto/svelte-components

Prérequis

  • Svelte 4.0 ou supérieur

Composant Calendar

Le composant Calendar affiche un calendrier mensuel avec les jours de collecte par type de déchet.

Utilisation de base

<script>
import { Calendar } from '@wasto/svelte-components';
</script>

<Calendar
cityId="city-uuid"
lang="fr"
theme="light"
/>

Props

PropTypeRequisDéfautDescription
cityIdstringOui-Identifiant unique de la ville (UUID)
placeIdstringNon-Identifiant du lieu de collecte spécifique
apiBaseUrlstringNon'https://api.wast-o.org'URL de base de l'API
lang'fr' | 'en'Non'fr'Langue d'affichage
theme'light' | 'dark'Non'light'Thème d'affichage
classNamestringNon''Classe CSS supplémentaire

Exemple avec gestion d'événements

<script>
import { Calendar } from '@wasto/svelte-components';
import { onMount } from 'svelte';

let selectedDate = null;
let wasteTypes = [];

function handleDayClick(event) {
selectedDate = event.detail.date;
wasteTypes = event.detail.wasteTypes;
console.log('Jour sélectionné:', selectedDate, wasteTypes);
}
</script>

<Calendar
cityId="city-uuid"
placeId="place-uuid"
lang="fr"
on:dayClick={handleDayClick}
/>

{#if selectedDate}
<div>
<h3>Collecte le {selectedDate.toLocaleDateString('fr-FR')}</h3>
<p>Types de déchets: {wasteTypes.join(', ')}</p>
</div>
{/if}

Composant Challenges

Le composant Challenges affiche la liste des challenges disponibles pour une ville.

Utilisation de base

<script>
import { Challenges } from '@wasto/svelte-components';
</script>

<Challenges
cityId="city-uuid"
lang="fr"
theme="light"
/>

Props

PropTypeRequisDéfautDescription
cityIdstringOui-Identifiant unique de la ville (UUID)
apiBaseUrlstringNon'https://api.wast-o.org'URL de base de l'API
lang'fr' | 'en'Non'fr'Langue d'affichage
theme'light' | 'dark'Non'light'Thème d'affichage
classNamestringNon''Classe CSS supplémentaire

Composant Quiz

Le composant Quiz affiche un quiz interactif pour un challenge spécifique.

Utilisation de base

<script>
import { Quiz } from '@wasto/svelte-components';
import { onMount } from 'svelte';

let deviceId = '';

onMount(() => {
const storedId = localStorage.getItem('wasto_device_id');
if (storedId) {
deviceId = storedId;
} else {
const newId = 'web_' + crypto.randomUUID();
localStorage.setItem('wasto_device_id', newId);
deviceId = newId;
}
});

function handleComplete(event) {
const score = event.detail.score;
console.log('Quiz terminé avec un score de', score, '%');
}
</script>

<Quiz
cityId="city-uuid"
challengeId="challenge-uuid"
{deviceId}
lang="fr"
on:complete={handleComplete}
/>

Props

PropTypeRequisDéfautDescription
cityIdstringOui-Identifiant unique de la ville (UUID)
challengeIdstringOui-Identifiant du challenge
serieIdstringNon-Identifiant de la série de questions
apiBaseUrlstringNon'https://api.wast-o.org'URL de base de l'API
lang'fr' | 'en'Non'fr'Langue d'affichage
theme'light' | 'dark'Non'light'Thème d'affichage
deviceIdstringNon-Identifiant de l'appareil pour sauvegarder la progression
classNamestringNon''Classe CSS supplémentaire

Exemple d'application complète

<script>
import { Calendar, Challenges, Quiz } from '@wasto/svelte-components';
import { onMount } from 'svelte';

let view = 'calendar';
let selectedChallenge = null;
let deviceId = '';
const cityId = 'city-uuid';

onMount(() => {
const storedId = localStorage.getItem('wasto_device_id');
if (storedId) {
deviceId = storedId;
} else {
const newId = 'web_' + crypto.randomUUID();
localStorage.setItem('wasto_device_id', newId);
deviceId = newId;
}
});

function handleDayClick(event) {
console.log('Jour sélectionné:', event.detail.date, event.detail.wasteTypes);
}

function handleChallengeClick(event) {
selectedChallenge = event.detail.challengeId;
view = 'quiz';
}

function handleQuizComplete(event) {
console.log('Score:', event.detail.score);
view = 'challenges';
selectedChallenge = null;
}
</script>

<nav>
<button on:click={() => view = 'calendar'}>Calendrier</button>
<button on:click={() => view = 'challenges'}>Challenges</button>
</nav>

{#if view === 'calendar'}
<Calendar cityId={cityId} lang="fr" on:dayClick={handleDayClick} />
{/if}

{#if view === 'challenges'}
<Challenges cityId={cityId} lang="fr" on:challengeClick={handleChallengeClick} />
{/if}

{#if view === 'quiz' && selectedChallenge}
<Quiz
cityId={cityId}
challengeId={selectedChallenge}
{deviceId}
lang="fr"
on:complete={handleQuizComplete}
/>
{/if}

Support

Pour toute question ou problème, consultez la documentation API ou contactez le support technique.