Skip to main content
Glama
ActionDetails.vue4.58 kB
<template> <div class="p-xs flex flex-col gap-xs"> <div class="text-neutral-700 type-bold-sm dark:text-neutral-50"> <SiCheckBox id="create" v-model="isCreate" title="This action creates a resource" :disabled="disabled || func?.isLocked" @update:model-value="setCreate" /> </div> <div class="text-neutral-700 type-bold-sm dark:text-neutral-50"> <SiCheckBox id="refresh" v-model="isRefresh" title="This action refreshes a resource" :disabled="disabled || func?.isLocked" @update:model-value="setRefresh" /> </div> <div class="text-neutral-700 type-bold-sm dark:text-neutral-50"> <SiCheckBox id="delete" v-model="isDelete" title="This action deletes a resource" :disabled="disabled || func?.isLocked" @update:model-value="setDelete" /> </div> <div class="text-neutral-700 type-bold-sm dark:text-neutral-50"> <SiCheckBox id="update" v-model="isUpdate" title="This action updates a resource" :disabled="disabled || func?.isLocked" @update:model-value="setUpdate" /> </div> </div> </template> <script lang="ts" setup> import { ref, watch, computed } from "vue"; import { storeToRefs } from "pinia"; import { Option } from "@/components/SelectMenu.vue"; import SiCheckBox from "@/components/SiCheckBox.vue"; import { toOptionValues } from "@/components/FuncEditor/utils"; import { useFuncStore } from "@/store/func/funcs.store"; import { useAssetStore } from "@/store/asset.store"; import { ActionKind } from "@/api/sdf/dal/action"; import { FuncId } from "@/api/sdf/dal/func"; import { SchemaVariantId } from "@/api/sdf/dal/schema"; import { nonNullable } from "@/utils/typescriptLinter"; const funcStore = useFuncStore(); const assetStore = useAssetStore(); const { schemaVariantOptions } = storeToRefs(assetStore); const props = defineProps<{ funcId: FuncId; schemaVariantId: SchemaVariantId; disabled?: boolean; }>(); const isCreate = ref(false); const isDelete = ref(false); const isRefresh = ref(false); const isUpdate = ref(false); const func = computed(() => { return funcStore.funcsById[props.funcId]; }); const binding = computed(() => { const bindings = funcStore.actionBindings[props.funcId]; const binding = bindings ?.filter((b) => b.schemaVariantId === props.schemaVariantId) .pop(); return binding; }); const validSchemaVariantIds = computed(() => { const bindings = funcStore.actionBindings[props.funcId]; return bindings?.map((b) => b.schemaVariantId).filter(nonNullable); }); watch( binding, () => { isCreate.value = binding.value?.kind === ActionKind.Create; isDelete.value = binding.value?.kind === ActionKind.Destroy; isRefresh.value = binding.value?.kind === ActionKind.Refresh; isUpdate.value = binding.value?.kind === ActionKind.Update; }, { immediate: true }, ); const setCreate = () => { if (!isCreate.value) return updateKind(); isDelete.value = false; isRefresh.value = false; isUpdate.value = false; updateKind(); }; const setRefresh = () => { if (!isRefresh.value) return updateKind(); isCreate.value = false; isDelete.value = false; isUpdate.value = false; updateKind(); }; const setDelete = () => { if (!isDelete.value) return updateKind(); isCreate.value = false; isRefresh.value = false; isUpdate.value = false; updateKind(); }; const setUpdate = () => { if (!isUpdate.value) return updateKind(); isCreate.value = false; isDelete.value = false; isRefresh.value = false; updateKind(); }; const selectedVariants = ref<Option[]>( toOptionValues(schemaVariantOptions.value, validSchemaVariantIds.value || []), ); watch( [validSchemaVariantIds, schemaVariantOptions], () => { selectedVariants.value = toOptionValues( schemaVariantOptions.value, validSchemaVariantIds.value || [], ); }, { immediate: true }, ); const updateKind = () => { if (binding.value) { binding.value.kind = ActionKind.Manual; if (isCreate.value) binding.value.kind = ActionKind.Create; if (isDelete.value) binding.value.kind = ActionKind.Destroy; if (isRefresh.value) binding.value.kind = ActionKind.Refresh; if (isUpdate.value) binding.value.kind = ActionKind.Update; funcStore.UPDATE_BINDING(props.funcId, [binding.value]); } }; const detachFunc = () => { if (binding.value) funcStore.DELETE_BINDING(props.funcId, [binding.value]); }; defineExpose({ detachFunc }); </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