Skip to main content
Glama
duplicate_components.rs1.66 kB
use axum::{ Json, extract::Path, }; use dal::{ ChangeSet, Component, ComponentId, }; use serde::{ Deserialize, Serialize, }; use super::{ ViewParam, ViewResult, }; use crate::{ extract::{ PosthogEventTracker, change_set::ChangeSetDalContext, }, service::force_change_set_response::ForceChangeSetResponse, }; #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct PasteComponentsRequest { pub components: Vec<ComponentId>, pub name: String, } /// Duplicate a set of [`Component`](Component)s via their componentIds. Creates change-set if on head pub async fn duplicate_components( ChangeSetDalContext(ref mut ctx): ChangeSetDalContext, tracker: PosthogEventTracker, Path(ViewParam { view_id }): Path<ViewParam>, Json(request): Json<PasteComponentsRequest>, ) -> ViewResult<ForceChangeSetResponse<()>> { let force_change_set_id = ChangeSet::force_new(ctx).await?; let pasted_component_ids = Component::duplicate(ctx, view_id, request.components, &request.name).await?; // Emit posthog events for pasted_component_id in pasted_component_ids { let schema = Component::schema_for_component_id(ctx, pasted_component_id).await?; tracker.track( ctx, "paste_component", serde_json::json!({ "how": "/v2/view/paste_component", "component_id": pasted_component_id, "component_schema_name": schema.name(), }), ); } ctx.commit().await?; Ok(ForceChangeSetResponse::empty(force_change_set_id)) }

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