Add monthly wish graph

pull/1/head
Made Baruna 2021-03-21 17:32:56 +08:00
parent d9315f3ff7
commit f0d4beb543
3 changed files with 115 additions and 3 deletions

View File

@ -0,0 +1,88 @@
<script>
import Chart from 'chart.js';
export let data = {};
let chart;
function createGraph() {
if (Object.keys(data).length === 0 || chart === undefined) return;
Chart.defaults.global.defaultFontColor = '#cbd5e0';
Chart.defaults.global.defaultFontFamily = 'Poppins';
const labels = [];
const total = [];
const legendary = [];
const rare = [];
const entries = Object.entries(data);
for (let [time, value] of entries) {
labels.push(time);
total.push(value.total);
legendary.push(value.legendary);
rare.push(value.rare);
}
new Chart(chart, {
type: 'line',
data: {
labels,
datasets: [
{
label: '5* pulls',
data: legendary,
backgroundColor: 'rgba(255, 177, 63, 0.7)',
borderColor: '#FFB13F',
borderWidth: 1,
},
{
label: '4* pulls',
data: rare,
backgroundColor: 'rgba(210, 143, 214, 0.7)',
borderColor: '#D28FD6',
borderWidth: 1,
},
{
label: 'Total pulls',
data: total,
backgroundColor: 'rgba(107, 161, 192, 0.7)',
borderColor: '#6BA1C0',
borderWidth: 1,
},
],
},
options: {
responsive: true,
maintainAspectRatio: false,
legend: {
display: false,
},
tooltips: {
mode: 'index',
intersect: false,
},
elements: {
line: {
tension: 0.2,
},
},
scales: {
xAxes: [
{
ticks: {
minRotation: 45,
maxRotation: 70,
},
},
],
},
},
});
}
$: data, createGraph();
</script>
<div class="flex flex-col bg-item rounded-xl p-4 w-full mt-4" style="height: 200px;">
<canvas width="500" height="200" bind:this={chart} />
</div>

View File

@ -2,6 +2,8 @@
import { t } from 'svelte-i18n';
import { onMount } from 'svelte';
import dayjs from 'dayjs';
import { characters } from '../../data/characters';
import { weaponList } from '../../data/weaponList';
@ -11,6 +13,8 @@
let numberFormat = Intl.NumberFormat();
export let monthlyData = {};
const types = [
{
name: 'Character Event',
@ -84,13 +88,27 @@
currentType = 'weapon';
}
const time = dayjs.unix(pull.time).format('YYYY-MM');
if (monthlyData[time] === undefined) {
monthlyData[time] = {
total: 0,
legendary: 0,
rare: 0,
}
}
monthlyData[time].total++;
if (rarity === 5) {
legendary++;
legendaryPity += pull.pity;
monthlyData[time].legendary++;
legendaryPulls.push({ name: itemName, pity: pull.pity });
} else if (rarity === 4) {
rare++;
rarePity += pull.pity;
monthlyData[time].rare++;
if (currentType === 'character') {
rareCharacter++;

View File

@ -1,5 +1,5 @@
<script>
import { t } from 'svelte-i18n'
import { t } from 'svelte-i18n';
import { mdiDatabaseImport, mdiHelpCircle } from '@mdi/js';
import { getContext, onMount } from 'svelte';
@ -13,9 +13,12 @@
import Summary from './_summary.svelte';
import Counter from './_counter.svelte';
import FirstTimePopup from './_firstTime.svelte';
import MonthlyGraph from './_monthlyGraph.svelte';
const { open: openModal, close: closeModal } = getContext('simple-modal');
let monthlyData = {};
let counter1;
let counter2;
let counter3;
@ -155,7 +158,10 @@
legendaryPity={80}
/>
<Counter bind:this={counter3} manualInput={settings.manualInput} id="standard" name="Standard" />
<Counter bind:this={counter4} manualInput={settings.manualInput} id="beginners" name="Beginners' Wish" />
<Summary bind:this={summary} />
<div class="flex flex-col w-full">
<Counter bind:this={counter4} manualInput={settings.manualInput} id="beginners" name="Beginners' Wish" />
<MonthlyGraph bind:data={monthlyData} />
</div>
<Summary bind:this={summary} bind:monthlyData />
</div>
</div>