Skip to main content
Glama
ModuleListPanel.vue2.75 kB
<template> <div class="flex flex-col overflow-hidden h-full relative"> <SidebarSubpanelTitle icon="component"> <template #label>Modules</template> <div> <IconButton :requestStatus="installModuleFromFileReqStatus" icon="cloud-upload" loadingIcon="loader" size="sm" tooltip="Install from file" tooltipPlacement="top" @click="openFilePicker" /> </div> </SidebarSubpanelTitle> <input ref="specFileSelectorRef" class="hidden" type="file" @change="handleFileChange" /> <SiSearch v-model="textSearch" class="flex-none" placeholder="search modules" /> <ModuleList :loading="loadBuiltinsReqStatus" :modules="filteredBuiltins" :textSearch="textSearch" label="Builtin List" loadingMessage="Loading builtins..." noModulesMessage="No builtins found" /> <ModuleList :loading="searchRemoteModulesReqStatus" :modules="filteredRemoteList" :textSearch="textSearch" label="Remote" loadingMessage="Loading remote modules..." /> </div> </template> <script lang="ts" setup> import * as _ from "lodash-es"; import { computed, onMounted, ref } from "vue"; import { IconButton, SiSearch } from "@si/vue-lib/design-system"; import { useModuleStore } from "@/store/module.store"; import ModuleList from "./ModuleList.vue"; import SidebarSubpanelTitle from "../SidebarSubpanelTitle.vue"; const moduleStore = useModuleStore(); const loadBuiltinsReqStatus = moduleStore.getRequestStatus("LIST_BUILTINS"); const searchRemoteModulesReqStatus = moduleStore.getRequestStatus( "GET_REMOTE_MODULES_LIST", ); const specFileSelectorRef = ref(); const installModuleFromFileReqStatus = moduleStore.getRequestStatus( "INSTALL_MODULE_FROM_FILE", ); const openFilePicker = () => { specFileSelectorRef.value.click(); }; const handleFileChange = (e: Event) => { if (!(e.target instanceof HTMLInputElement)) { return; } if (e.target.files?.length !== 1) { return; } const file = e.target.files[0]; if (file) { moduleStore.INSTALL_MODULE_FROM_FILE(file); } }; const textSearch = ref(""); const filteredBuiltins = computed(() => { if (!textSearch.value) return moduleStore.builtins; return _.filter(moduleStore.builtins, (m) => m.name.toLowerCase().includes(textSearch.value.toLowerCase()), ); }); const filteredRemoteList = computed(() => { return _.filter(moduleStore.remoteModuleList, (m) => m.name.toLowerCase().includes(textSearch.value.toLowerCase()), ); }); onMounted(() => { moduleStore.GET_REMOTE_MODULES_LIST({ su: true }); moduleStore.LIST_BUILTINS(); }); </script>

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server