diff options
Diffstat (limited to 'packages/frontend/src/pages/admin/overview.instances.vue')
| -rw-r--r-- | packages/frontend/src/pages/admin/overview.instances.vue | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/packages/frontend/src/pages/admin/overview.instances.vue b/packages/frontend/src/pages/admin/overview.instances.vue new file mode 100644 index 0000000000..29848bf03b --- /dev/null +++ b/packages/frontend/src/pages/admin/overview.instances.vue @@ -0,0 +1,50 @@ +<template> +<div class="wbrkwale"> + <transition :name="$store.state.animation ? 'zoom' : ''" mode="out-in"> + <MkLoading v-if="fetching"/> + <div v-else class="instances"> + <MkA v-for="(instance, i) in instances" :key="instance.id" v-tooltip.mfm.noDelay="`${instance.name}\n${instance.host}\n${instance.softwareName} ${instance.softwareVersion}`" :to="`/instance-info/${instance.host}`" class="instance"> + <MkInstanceCardMini :instance="instance"/> + </MkA> + </div> + </transition> +</div> +</template> + +<script lang="ts" setup> +import { onMounted, onUnmounted, ref } from 'vue'; +import * as os from '@/os'; +import { useInterval } from '@/scripts/use-interval'; +import MkInstanceCardMini from '@/components/MkInstanceCardMini.vue'; + +const instances = ref([]); +const fetching = ref(true); + +const fetch = async () => { + const fetchedInstances = await os.api('federation/instances', { + sort: '+lastCommunicatedAt', + limit: 6, + }); + instances.value = fetchedInstances; + fetching.value = false; +}; + +useInterval(fetch, 1000 * 60, { + immediate: true, + afterMounted: true, +}); +</script> + +<style lang="scss" scoped> +.wbrkwale { + > .instances { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + grid-gap: 12px; + + > .instance:hover { + text-decoration: none; + } + } +} +</style> |