summaryrefslogtreecommitdiff
path: root/packages/client/src/pages/settings/drive.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /packages/client/src/pages/settings/drive.vue
parentupdate deps (diff)
downloadmisskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
misskey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'packages/client/src/pages/settings/drive.vue')
-rw-r--r--packages/client/src/pages/settings/drive.vue147
1 files changed, 147 insertions, 0 deletions
diff --git a/packages/client/src/pages/settings/drive.vue b/packages/client/src/pages/settings/drive.vue
new file mode 100644
index 0000000000..ed5282e23d
--- /dev/null
+++ b/packages/client/src/pages/settings/drive.vue
@@ -0,0 +1,147 @@
+<template>
+<FormBase class="">
+ <FormGroup v-if="!fetching">
+ <template #label>{{ $ts.usageAmount }}</template>
+ <div class="_debobigegoItem uawsfosz">
+ <div class="_debobigegoPanel">
+ <div class="meter"><div :style="meterStyle"></div></div>
+ </div>
+ </div>
+ <FormKeyValueView>
+ <template #key>{{ $ts.capacity }}</template>
+ <template #value>{{ bytes(capacity, 1) }}</template>
+ </FormKeyValueView>
+ <FormKeyValueView>
+ <template #key>{{ $ts.inUse }}</template>
+ <template #value>{{ bytes(usage, 1) }}</template>
+ </FormKeyValueView>
+ </FormGroup>
+
+ <div class="_debobigegoItem">
+ <div class="_debobigegoLabel">{{ $ts.statistics }}</div>
+ <div class="_debobigegoPanel">
+ <div ref="chart"></div>
+ </div>
+ </div>
+
+ <FormButton :center="false" @click="chooseUploadFolder()" primary>
+ {{ $ts.uploadFolder }}
+ <template #suffix>{{ uploadFolder ? uploadFolder.name : '-' }}</template>
+ <template #suffixIcon><i class="fas fa-folder-open"></i></template>
+ </FormButton>
+</FormBase>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import * as tinycolor from 'tinycolor2';
+import FormButton from '@/components/debobigego/button.vue';
+import FormGroup from '@/components/debobigego/group.vue';
+import FormKeyValueView from '@/components/debobigego/key-value-view.vue';
+import FormBase from '@/components/debobigego/base.vue';
+import * as os from '@/os';
+import bytes from '@/filters/bytes';
+import * as symbols from '@/symbols';
+
+// TODO: render chart
+
+export default defineComponent({
+ components: {
+ FormBase,
+ FormButton,
+ FormGroup,
+ FormKeyValueView,
+ },
+
+ emits: ['info'],
+
+ data() {
+ return {
+ [symbols.PAGE_INFO]: {
+ title: this.$ts.drive,
+ icon: 'fas fa-cloud',
+ bg: 'var(--bg)',
+ },
+ fetching: true,
+ usage: null,
+ capacity: null,
+ uploadFolder: null,
+ }
+ },
+
+ computed: {
+ meterStyle(): any {
+ return {
+ width: `${this.usage / this.capacity * 100}%`,
+ background: tinycolor({
+ h: 180 - (this.usage / this.capacity * 180),
+ s: 0.7,
+ l: 0.5
+ })
+ };
+ }
+ },
+
+ async created() {
+ os.api('drive').then(info => {
+ this.capacity = info.capacity;
+ this.usage = info.usage;
+ this.fetching = false;
+ this.$nextTick(() => {
+ this.renderChart();
+ });
+ });
+
+ if (this.$store.state.uploadFolder) {
+ this.uploadFolder = await os.api('drive/folders/show', {
+ folderId: this.$store.state.uploadFolder
+ });
+ }
+ },
+
+ mounted() {
+ this.$emit('info', this[symbols.PAGE_INFO]);
+ },
+
+ methods: {
+ chooseUploadFolder() {
+ os.selectDriveFolder(false).then(async folder => {
+ this.$store.set('uploadFolder', folder ? folder.id : null);
+ os.success();
+ if (this.$store.state.uploadFolder) {
+ this.uploadFolder = await os.api('drive/folders/show', {
+ folderId: this.$store.state.uploadFolder
+ });
+ } else {
+ this.uploadFolder = null;
+ }
+ });
+ },
+
+ bytes
+ }
+});
+</script>
+
+<style lang="scss" scoped>
+
+@use "sass:math";
+
+.uawsfosz {
+ > div {
+ padding: 24px;
+
+ > .meter {
+ $size: 12px;
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: math.div($size, 2);
+ overflow: hidden;
+
+ > div {
+ height: $size;
+ border-radius: math.div($size, 2);
+ }
+ }
+ }
+}
+</style>