| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // Lightweight composable that fetches the node list once on mount and
- // exposes id→name + id→online lookups. Used by the Inbounds page so it
- // can render a Node selector and a Node column without pulling the
- // full pages/nodes/useNodes.js (which polls and owns CRUD state).
- import { onMounted, ref, computed } from 'vue';
- import { HttpUtil } from '@/utils';
- export function useNodeList() {
- const nodes = ref([]);
- const fetched = ref(false);
- async function refresh() {
- const msg = await HttpUtil.get('/panel/api/nodes/list');
- if (msg?.success) {
- nodes.value = Array.isArray(msg.obj) ? msg.obj : [];
- }
- fetched.value = true;
- }
- // Indexed by id for O(1) UI lookups (Node column on N-row tables).
- const byId = computed(() => {
- const m = new Map();
- for (const n of nodes.value) m.set(n.id, n);
- return m;
- });
- function nameFor(id) {
- if (id == null) return null;
- return byId.value.get(id)?.name || null;
- }
- function isOnline(id) {
- if (id == null) return true;
- const n = byId.value.get(id);
- return n != null && n.enable && n.status === 'online';
- }
- onMounted(refresh);
- return { nodes, fetched, refresh, byId, nameFor, isOnline };
- }
|