summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-11-03 16:44:05 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-11-03 16:44:05 +0900
commite88f7ca7b2c06cac067c54dd18695ab27f303fab (patch)
treeb8fa1d6b38f406a82b69fd60da6b4831449abde6
parent[API] Increase chart limit (diff)
downloadmisskey-e88f7ca7b2c06cac067c54dd18695ab27f303fab.tar.gz
misskey-e88f7ca7b2c06cac067c54dd18695ab27f303fab.tar.bz2
misskey-e88f7ca7b2c06cac067c54dd18695ab27f303fab.zip
[Client] Fix some charts
-rw-r--r--src/client/app/desktop/views/components/activity.calendar.vue14
-rw-r--r--src/client/app/desktop/views/components/activity.vue12
-rw-r--r--src/client/app/mobile/views/components/activity.vue111
3 files changed, 101 insertions, 36 deletions
diff --git a/src/client/app/desktop/views/components/activity.calendar.vue b/src/client/app/desktop/views/components/activity.calendar.vue
index 1a88d1a994..4306aa9282 100644
--- a/src/client/app/desktop/views/components/activity.calendar.vue
+++ b/src/client/app/desktop/views/components/activity.calendar.vue
@@ -32,9 +32,21 @@ export default Vue.extend({
this.data.forEach(d => d.total = d.notes + d.replies + d.renotes);
const peak = Math.max.apply(null, this.data.map(d => d.total));
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = now.getMonth();
+ const day = now.getDate();
+
let x = 0;
- this.data.slice().reverse().forEach(d => {
+ this.data.slice().reverse().forEach((d, i) => {
d.x = x;
+
+ const date = new Date(year, month, day - i);
+ d.date = {
+ year: date.getFullYear(),
+ month: date.getMonth(),
+ day: date.getDate()
+ };
d.date.weekday = (new Date(d.date.year, d.date.month - 1, d.date.day)).getDay();
d.v = peak == 0 ? 0 : d.total / (peak / 2);
diff --git a/src/client/app/desktop/views/components/activity.vue b/src/client/app/desktop/views/components/activity.vue
index bd952c39d2..e9ed532a3e 100644
--- a/src/client/app/desktop/views/components/activity.vue
+++ b/src/client/app/desktop/views/components/activity.vue
@@ -43,11 +43,17 @@ export default Vue.extend({
};
},
mounted() {
- (this as any).api('aggregation/users/activity', {
+ (this as any).api('charts/user/notes', {
userId: this.user.id,
- limit: 20 * 7
+ span: 'day',
+ limit: 7 * 20
}).then(activity => {
- this.activity = activity;
+ this.activity = activity.diffs.normal.map((_, i) => ({
+ total: activity.diffs.normal[i] + activity.diffs.reply[i] + activity.diffs.renote[i],
+ notes: activity.diffs.normal[i],
+ replies: activity.diffs.reply[i],
+ renotes: activity.diffs.renote[i]
+ }));
this.fetching = false;
});
},
diff --git a/src/client/app/mobile/views/components/activity.vue b/src/client/app/mobile/views/components/activity.vue
index dcd319cb69..627bebbd32 100644
--- a/src/client/app/mobile/views/components/activity.vue
+++ b/src/client/app/mobile/views/components/activity.vue
@@ -1,23 +1,13 @@
<template>
<div class="mk-activity">
- <svg v-if="data" ref="canvas" viewBox="0 0 30 1" preserveAspectRatio="none">
- <g v-for="(d, i) in data">
- <rect width="0.8" :height="d.notesH"
- :x="i + 0.1" :y="1 - d.notesH - d.repliesH - d.renotesH"
- fill="#41ddde"/>
- <rect width="0.8" :height="d.repliesH"
- :x="i + 0.1" :y="1 - d.repliesH - d.renotesH"
- fill="#f7796c"/>
- <rect width="0.8" :height="d.renotesH"
- :x="i + 0.1" :y="1 - d.renotesH"
- fill="#a1de41"/>
- </g>
- </svg>
+ <div ref="chart"></div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
+import * as ApexCharts from 'apexcharts';
+
export default Vue.extend({
props: ['user'],
data() {
@@ -28,19 +18,84 @@ export default Vue.extend({
};
},
mounted() {
- (this as any).api('aggregation/users/activity', {
+ (this as any).api('charts/user/notes', {
userId: this.user.id,
- limit: 30
- }).then(data => {
- data.forEach(d => d.total = d.notes + d.replies + d.renotes);
- this.peak = Math.max.apply(null, data.map(d => d.total));
- data.forEach(d => {
- d.notesH = d.notes / this.peak;
- d.repliesH = d.replies / this.peak;
- d.renotesH = d.renotes / this.peak;
+ span: 'day',
+ limit: 21
+ }).then(stats => {
+ const normal = [];
+ const reply = [];
+ const renote = [];
+
+ const now = new Date();
+ const y = now.getFullYear();
+ const m = now.getMonth();
+ const d = now.getDate();
+
+ for (let i = 0; i < 21; i++) {
+ const x = new Date(y, m, d - i);
+ normal.push([
+ x,
+ stats.diffs.normal[i]
+ ]);
+ reply.push([
+ x,
+ stats.diffs.reply[i]
+ ]);
+ renote.push([
+ x,
+ stats.diffs.renote[i]
+ ]);
+ }
+
+ const chart = new ApexCharts(this.$refs.chart, {
+ chart: {
+ type: 'bar',
+ stacked: true,
+ height: 100,
+ sparkline: {
+ enabled: true
+ },
+ },
+ plotOptions: {
+ bar: {
+ columnWidth: '90%',
+ endingShape: 'rounded'
+ }
+ },
+ grid: {
+ clipMarkers: false,
+ padding: {
+ top: 0,
+ right: 8,
+ bottom: 0,
+ left: 8
+ }
+ },
+ tooltip: {
+ shared: true,
+ intersect: false
+ },
+ series: [{
+ name: 'Normal',
+ data: normal
+ }, {
+ name: 'Reply',
+ data: reply
+ }, {
+ name: 'Renote',
+ data: renote
+ }],
+ xaxis: {
+ type: 'datetime',
+ crosshairs: {
+ width: 1,
+ opacity: 1
+ }
+ }
});
- data.reverse();
- this.data = data;
+
+ chart.render();
});
}
});
@@ -51,12 +106,4 @@ export default Vue.extend({
max-width 600px
margin 0 auto
- > svg
- display block
- width 100%
- height 80px
-
- > rect
- transform-origin center
-
</style>