Skip to main content
Glama
AssetEditor.vue3.75 kB
<template> <RequestStatusMessage v-if="!loadAssetReqStatus || loadAssetReqStatus.isPending" :requestStatus="loadAssetReqStatus" /> <div v-else-if="loadAssetReqStatus.isError" class="p-2 text-center text-neutral-400 dark:text-neutral-300" > <template v-if="schemaVariantId"> Asset "{{ schemaVariantId }}" Function does not exist! </template> <template v-else>Select an asset to view it.</template> </div> <ScrollArea v-else-if="selectedAsset && editingAsset" class="flex flex-col h-full border border-t-0 border-neutral-300 dark:border-neutral-600" > <template #top> <AssetEditorHeader :selectedAsset="selectedAsset" /> </template> <CodeEditor :id=" changeSetsStore.headChangeSetId === changeSetsStore.selectedChangeSetId ? undefined : `asset-${schemaVariantId}` " v-model="editingAsset" :disabled="selectedAsset.isLocked" :recordId="selectedAsset.schemaVariantId" :typescript="editorTs || ''" @change="onChange" /> </ScrollArea> <LoadingMessage v-else /> </template> <script lang="ts" setup> import { ref, watch, computed, onMounted, ComputedRef } from "vue"; import { ApiRequestStatus } from "@si/vue-lib/pinia"; import * as _ from "lodash-es"; import { RequestStatusMessage, ScrollArea, LoadingMessage, } from "@si/vue-lib/design-system"; import { useAssetStore } from "@/store/asset.store"; import { useFuncStore } from "@/store/func/funcs.store"; import { useChangeSetsStore } from "@/store/change_sets.store"; import { editor_ts, loadEditorTs } from "@/utils/load_editor_ts"; import { SchemaVariantId } from "@/api/sdf/dal/schema"; import CodeEditor from "./CodeEditor.vue"; import AssetEditorHeader from "./AssetEditorHeader.vue"; const changeSetsStore = useChangeSetsStore(); const editorTs = ref<string | null>(null); const props = defineProps<{ schemaVariantId?: SchemaVariantId; }>(); const assetStore = useAssetStore(); const funcStore = useFuncStore(); const selectedAsset = computed(() => props.schemaVariantId ? assetStore.variantFromListById[props.schemaVariantId] : undefined, ); const selectedAssetFuncCode = computed(() => { const fId = selectedAsset.value?.assetFuncId; if (!fId) return null; return funcStore.funcCodeById[fId]?.code; }); const editingAsset = ref<string>(selectedAssetFuncCode.value ?? ""); let loadAssetReqStatus: ComputedRef<ApiRequestStatus>; watch( () => selectedAsset.value, () => { loadAssetReqStatus = funcStore.getRequestStatus( "FETCH_CODE", selectedAsset.value?.assetFuncId, ); }, { immediate: true }, ); watch( [() => editingAsset.value, () => selectedAssetFuncCode.value], async () => { if (editingAsset.value !== selectedAssetFuncCode.value) { editingAsset.value = selectedAssetFuncCode.value ?? ""; } }, { immediate: true }, ); const updatedHead = ref(false); watch( () => changeSetsStore.selectedChangeSetId, () => { updatedHead.value = false; }, ); const onChange = ( _schemaVariantId: string, code: string, debounce: boolean, ) => { if ( !selectedAsset.value || selectedAsset.value.isLocked || selectedAssetFuncCode.value === editingAsset.value || updatedHead.value ) { return; } updatedHead.value = changeSetsStore.selectedChangeSetId === changeSetsStore.headChangeSetId; if (!updatedHead.value) { const asset = _.cloneDeep(selectedAsset.value); assetStore.enqueueVariantSave( { ...asset, }, code, debounce, ); } }; onMounted(async () => { if (!editor_ts) { editorTs.value = await loadEditorTs(); } else { editorTs.value = editor_ts; } }); </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