summaryrefslogtreecommitdiff
path: root/packages/client/src/widgets/rss.vue
diff options
context:
space:
mode:
Diffstat (limited to 'packages/client/src/widgets/rss.vue')
-rw-r--r--packages/client/src/widgets/rss.vue26
1 files changed, 12 insertions, 14 deletions
diff --git a/packages/client/src/widgets/rss.vue b/packages/client/src/widgets/rss.vue
index fc65f11813..72f6249820 100644
--- a/packages/client/src/widgets/rss.vue
+++ b/packages/client/src/widgets/rss.vue
@@ -6,7 +6,7 @@
<div class="ekmkgxbj">
<MkLoading v-if="fetching"/>
<div v-else class="feed">
- <a v-for="item in items" :href="item.link" rel="nofollow noopener" target="_blank" :title="item.title">{{ item.title }}</a>
+ <a v-for="item in items" class="item" :href="item.link" rel="nofollow noopener" target="_blank" :title="item.title">{{ item.title }}</a>
</div>
</div>
</MkContainer>
@@ -14,22 +14,23 @@
<script lang="ts" setup>
import { onMounted, onUnmounted, ref, watch } from 'vue';
-import { GetFormResultType } from '@/scripts/form';
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
+import { GetFormResultType } from '@/scripts/form';
import * as os from '@/os';
import MkContainer from '@/components/ui/container.vue';
+import { useInterval } from '@/scripts/use-interval';
const name = 'rss';
const widgetPropsDef = {
- showHeader: {
- type: 'boolean' as const,
- default: true,
- },
url: {
type: 'string' as const,
default: 'http://feeds.afpbb.com/rss/afpbb/afpbbnews',
},
+ showHeader: {
+ type: 'boolean' as const,
+ default: true,
+ },
};
type WidgetProps = GetFormResultType<typeof widgetPropsDef>;
@@ -50,7 +51,7 @@ const items = ref([]);
const fetching = ref(true);
const tick = () => {
- fetch(`https://api.rss2json.com/v1/api.json?rss_url=${widgetProps.url}`, {}).then(res => {
+ fetch(`/api/fetch-rss?url=${widgetProps.url}`, {}).then(res => {
res.json().then(feed => {
items.value = feed.items;
fetching.value = false;
@@ -60,12 +61,9 @@ const tick = () => {
watch(() => widgetProps.url, tick);
-onMounted(() => {
- tick();
- const intervalId = window.setInterval(tick, 60000);
- onUnmounted(() => {
- window.clearInterval(intervalId);
- });
+useInterval(tick, 60000, {
+ immediate: true,
+ afterMounted: true,
});
defineExpose<WidgetComponentExpose>({
@@ -81,7 +79,7 @@ defineExpose<WidgetComponentExpose>({
padding: 0;
font-size: 0.9em;
- > a {
+ > .item {
display: block;
padding: 8px 16px;
color: var(--fg);