summaryrefslogtreecommitdiff
path: root/packages/client/src/widgets/online-users.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/client/src/widgets/online-users.vue')
-rw-r--r--packages/client/src/widgets/online-users.vue80
1 files changed, 46 insertions, 34 deletions
diff --git a/packages/client/src/widgets/online-users.vue b/packages/client/src/widgets/online-users.vue
index 5b889f4816..2d47688697 100644
--- a/packages/client/src/widgets/online-users.vue
+++ b/packages/client/src/widgets/online-users.vue
@@ -1,48 +1,60 @@
<template>
-<div class="mkw-onlineUsers" :class="{ _panel: !props.transparent, pad: !props.transparent }">
+<div class="mkw-onlineUsers" :class="{ _panel: !widgetProps.transparent, pad: !widgetProps.transparent }">
<I18n v-if="onlineUsersCount" :src="$ts.onlineUsersCount" text-tag="span" class="text">
<template #n><b>{{ onlineUsersCount }}</b></template>
</I18n>
</div>
</template>
-<script lang="ts">
-import { defineComponent } from 'vue';
-import define from './define';
+<script lang="ts" setup>
+import { onMounted, onUnmounted, ref } from 'vue';
+import { GetFormResultType } from '@/scripts/form';
+import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
import * as os from '@/os';
-const widget = define({
- name: 'onlineUsers',
- props: () => ({
- transparent: {
- type: 'boolean',
- default: true,
- },
- })
-});
+const name = 'onlineUsers';
-export default defineComponent({
- extends: widget,
- data() {
- return {
- onlineUsersCount: null,
- clock: null,
- };
- },
- created() {
- this.tick();
- this.clock = setInterval(this.tick, 1000 * 15);
+const widgetPropsDef = {
+ transparent: {
+ type: 'boolean' as const,
+ default: true,
},
- beforeUnmount() {
- clearInterval(this.clock);
- },
- methods: {
- tick() {
- os.api('get-online-users-count').then(res => {
- this.onlineUsersCount = res.count;
- });
- }
- }
+};
+
+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 onlineUsersCount = ref(0);
+
+const tick = () => {
+ os.api('get-online-users-count').then(res => {
+ onlineUsersCount.value = res.count;
+ });
+};
+
+onMounted(() => {
+ tick();
+ const intervalId = setInterval(tick, 1000 * 15);
+ onUnmounted(() => {
+ clearInterval(intervalId);
+ });
+});
+
+defineExpose<WidgetComponentExpose>({
+ name,
+ configure,
+ id: props.widget ? props.widget.id : null,
});
</script>