diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-01-08 20:30:01 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-08 20:30:01 +0900 |
| commit | 0bbde336b3636f4135de54c0ed75c7aa208534fe (patch) | |
| tree | 45bb6a5c1e5397b3de351068d0eb1eeb6e3ec6c9 /packages/client/src/widgets/trends.vue | |
| parent | bye room (diff) | |
| download | misskey-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.vue | 86 |
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> |