60 lines
1.5 KiB
Svelte
60 lines
1.5 KiB
Svelte
|
<script lang="ts">
|
||
|
import Chart from 'svelte-frappe-charts';
|
||
|
|
||
|
let className = '';
|
||
|
export { className as class };
|
||
|
|
||
|
export let question = null;
|
||
|
|
||
|
function refreshProposals() {
|
||
|
let req = question.getProposals();
|
||
|
|
||
|
req.then((proposals) => {
|
||
|
const proposal_idx = { };
|
||
|
for (const proposal of proposals) {
|
||
|
data.labels.push(proposal.label);
|
||
|
data.datasets[0].values.push(0);
|
||
|
proposal_idx[proposal.id] = new String(data.labels.length - 1);
|
||
|
}
|
||
|
|
||
|
req_responses = refreshResponses();
|
||
|
req_responses.then((responses) => {
|
||
|
for (const res of responses) {
|
||
|
data.datasets[0].values[proposal_idx[res.value]] += 1;
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return req;
|
||
|
}
|
||
|
let req_proposals = refreshProposals();
|
||
|
let req_responses = null;
|
||
|
|
||
|
let data = {
|
||
|
labels: [],
|
||
|
datasets: [
|
||
|
{
|
||
|
values: []
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<div class="{className}">
|
||
|
{#await req_proposals}
|
||
|
<div class="text-center mt-4">
|
||
|
<div class="spinner-border text-primary mx-3" role="status"></div>
|
||
|
<span>Récupération des propositions…</span>
|
||
|
</div>
|
||
|
{:then}
|
||
|
{#await req_responses}
|
||
|
<div class="text-center mt-4">
|
||
|
<div class="spinner-border text-primary mx-3" role="status"></div>
|
||
|
<span>Récupération des réponses…</span>
|
||
|
</div>
|
||
|
{:then}
|
||
|
<Chart data={data} type="pie" maxSlices="9" />
|
||
|
{/await}
|
||
|
{/await}
|
||
|
</div>
|