summaryrefslogtreecommitdiff
path: root/packages/client/src/widgets/trends.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-01-08 20:30:01 +0900
committerGitHub <noreply@github.com>2022-01-08 20:30:01 +0900
commit0bbde336b3636f4135de54c0ed75c7aa208534fe (patch)
tree45bb6a5c1e5397b3de351068d0eb1eeb6e3ec6c9 /packages/client/src/widgets/trends.vue
parentbye room (diff)
downloadmisskey-0bbde336b3636f4135de54c0ed75c7aa208534fe.tar.gz
misskey-0bbde336b3636f4135de54c0ed75c7aa208534fe.tar.bz2
misskey-0bbde336b3636f4135de54c0ed75c7aa208534fe.zip
refactor: Widgetのcomposition api移行 (#8125)
* wip * wip * wip * wip * wip * wip * fix
Diffstat (limited to 'packages/client/src/widgets/trends.vue')
-rw-r--r--packages/client/src/widgets/trends.vue86
1 files changed, 48 insertions, 38 deletions
diff --git a/packages/client/src/widgets/trends.vue b/packages/client/src/widgets/trends.vue
index ffad93c02b..3905daa673 100644
--- a/packages/client/src/widgets/trends.vue
+++ b/packages/client/src/widgets/trends.vue
@@ -1,5 +1,5 @@
<template>
-<MkContainer :show-header="props.showHeader">
+<MkContainer :show-header="widgetProps.showHeader">
<template #header><i class="fas fa-hashtag"></i>{{ $ts._widgets.trends }}</template>
<div class="wbrkwala">
@@ -17,49 +17,59 @@
</MkContainer>
</template>
-<script lang="ts">
-import { defineComponent } from 'vue';
+<script lang="ts" setup>
+import { onMounted, onUnmounted, ref } from 'vue';
+import { GetFormResultType } from '@/scripts/form';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
import MkContainer from '@/components/ui/container.vue';
-import define from './define';
import MkMiniChart from '@/components/mini-chart.vue';
import * as os from '@/os';
-const widget = define({
- name: 'hashtags',
- props: () => ({
- showHeader: {
- type: 'boolean',
- default: true,
- },
- })
-});
+const name = 'hashtags';
-export default defineComponent({
- components: {
- MkContainer, MkMiniChart
- },
- extends: widget,
- data() {
- return {
- stats: [],
- fetching: true,
- };
- },
- mounted() {
- this.fetch();
- this.clock = setInterval(this.fetch, 1000 * 60);
- },
- beforeUnmount() {
- clearInterval(this.clock);
+const widgetPropsDef = {
+ showHeader: {
+ type: 'boolean' as const,
+ default: true,
},
- methods: {
- fetch() {
- os.api('hashtags/trend').then(stats => {
- this.stats = stats;
- this.fetching = false;
- });
- }
- }
+};
+
+type WidgetProps = GetFormResultType<typeof widgetPropsDef>;
+
+// 現時点ではvueの制限によりimportしたtypeをジェネリックに渡せない
+//const props = defineProps<WidgetComponentProps<WidgetProps>>();
+//const emit = defineEmits<WidgetComponentEmits<WidgetProps>>();
+const props = defineProps<{ widget?: Widget<WidgetProps>; }>();
+const emit = defineEmits<{ (e: 'updateProps', props: WidgetProps); }>();
+
+const { widgetProps, configure } = useWidgetPropsManager(name,
+ widgetPropsDef,
+ props,
+ emit,
+);
+
+const stats = ref([]);
+const fetching = ref(true);
+
+const fetch = () => {
+ os.api('hashtags/trend').then(stats => {
+ stats.value = stats;
+ fetching.value = false;
+ });
+};
+
+onMounted(() => {
+ fetch();
+ const intervalId = setInterval(fetch, 1000 * 60);
+ onUnmounted(() => {
+ clearInterval(intervalId);
+ });
+});
+
+defineExpose<WidgetComponentExpose>({
+ name,
+ configure,
+ id: props.widget ? props.widget.id : null,
});
</script>