feat(*): Add basic example estimation page

This commit is contained in:
Josh Creek
2023-06-30 14:08:59 +00:00
parent c7f1c6c652
commit 1815b08e88
5 changed files with 128 additions and 1 deletions
+77
View File
@@ -0,0 +1,77 @@
<script lang="ts">
import { onMount } from 'svelte';
import UsersList from '../../components/UsersList.svelte';
import EstimateGroupsList from '../../components/EstimateGroupsList.svelte';
import AverageEstimate from '../../components/AverageEstimate.svelte';
let estimates = [
{ name: 'User 1', estimate: 8 },
{ name: 'User 2', estimate: 8 },
{ name: 'User 3', estimate: 13 },
{ name: 'User 4', estimate: 13 },
{ name: 'User 5', estimate: 13 },
{ name: 'User 6', estimate: 21 },
{ name: 'User 7', estimate: 21 },
{ name: 'User 8', estimate: 21 },
{ name: 'User 9', estimate: 34 },
{ name: 'User 10', estimate: 34 },
{ name: 'User 11', estimate: 34 },
{ name: 'User 12', estimate: 34 },
{ name: 'User 13', estimate: 55 },
{ name: 'User 14', estimate: 55 },
{ name: 'User 15', estimate: 55 }
];
// Group users by their estimates
let estimateGroups: { [key: number]: string[] } = {};
function groupEstimates() {
estimateGroups = {};
estimates.forEach((estimate) => {
if (estimate.estimate !== null) {
if (estimateGroups[estimate.estimate]) {
estimateGroups[estimate.estimate].push(estimate.name);
} else {
estimateGroups[estimate.estimate] = [estimate.name];
}
}
});
}
function calculateAverageEstimate() {
let total = 0;
estimates.forEach((estimate) => {
if (estimate.estimate !== null) {
total += estimate.estimate;
}
});
return total / estimates.length;
}
let average = calculateAverageEstimate();
onMount(() => {
groupEstimates();
});
function handleEstimateChange(event: any, user: any) {
const { value } = event.target;
user.estimate = value !== '' ? Number(value) : null;
groupEstimates();
average = calculateAverageEstimate();
}
</script>
<h1>Estimation Page</h1>
<UsersList {estimates} {handleEstimateChange} />
{#if Object.keys(estimateGroups).length > 0}
<EstimateGroupsList {estimateGroups} />
<AverageEstimate {average} />
{/if}
<style>
/* CSS styles */
/* ... */
</style>