Skip to main content
Glama

mcp-google-sheets

props.ts6.07 kB
import { DropdownOption, DynamicPropsValue, PiecePropValueSchema, Property, } from '@activepieces/pieces-framework'; import { WebflowApiClient } from './client'; import { webflowAuth } from '../..'; export const webflowProps = { site_id: Property.Dropdown({ displayName: 'Site', required: true, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, options: [], placeholder: 'Please connect account first.', }; } const authValue = auth as PiecePropValueSchema<typeof webflowAuth>; const client = new WebflowApiClient(authValue.access_token); const sites = await client.listSites(); const options: DropdownOption<string>[] = []; for (const site of sites) { options.push({ label: site.name, value: site._id }); } return { disabled: false, options, }; }, }), collection_id: Property.Dropdown({ displayName: 'Collection', required: true, refreshers: ['site_id'], options: async ({ auth, site_id }) => { if (!auth || !site_id) { return { disabled: true, options: [], placeholder: 'Please connect account first.', }; } const authValue = auth as PiecePropValueSchema<typeof webflowAuth>; const client = new WebflowApiClient(authValue.access_token); const collections = await client.listCollections(site_id as string); const options: DropdownOption<string>[] = []; for (const collection of collections) { options.push({ label: collection.name, value: collection._id }); } return { disabled: false, options, }; }, }), collection_fields: Property.DynamicProperties({ displayName: 'Collection Fields', required: true, refreshers: ['collection_id'], props: async ({ auth, collection_id }) => { if (!auth) return {}; if (!collection_id) return {}; const collectionFields: DynamicPropsValue = {}; const authValue = auth as PiecePropValueSchema<typeof webflowAuth>; const client = new WebflowApiClient(authValue.access_token); const { fields } = await client.getCollection(collection_id as unknown as string); for (const field of fields) { if (field.editable && field.slug !== '_archived' && field.slug !== '_draft') { switch (field.type) { case 'Option': collectionFields[field.slug] = Property.StaticDropdown({ displayName: field.name, required: field.required, options: { disabled: false, options: field.validations.options.map((option: { name: string }) => { return { label: option.name, value: option.name, }; }), }, }); break; case 'RichText': case 'Email': case 'PlainText': case 'Phone': case 'Link': case 'Video': case 'Color': case 'ItemRef': case 'FileRef': collectionFields[field.slug] = Property.ShortText({ displayName: field.name, required: field.required, }); break; case 'ImageRef': collectionFields[field.slug] = Property.ShortText({ displayName: field.name, required: field.required, description: 'Images must be hosted on a publicly accessible URL to be uploaded via the API.The maximum file size for images is 4MB.', }); break; case 'Set': collectionFields[field.slug] = Property.Array({ displayName: field.name, required: field.required, description: ' Images must be hosted on a publicly accessible URL to be uploaded via the API.The maximum file size for images is 4MB.', }); break; case 'ItemRefSet': collectionFields[field.slug] = Property.Array({ displayName: field.name, required: field.required, }); break; case 'Number': collectionFields[field.slug] = Property.Number({ displayName: field.name, required: field.required, }); break; case 'Date': collectionFields[field.slug] = Property.DateTime({ displayName: field.name, required: field.required, }); break; case 'Bool': collectionFields[field.slug] = Property.Checkbox({ displayName: field.name, required: false, }); break; } } } return collectionFields; }, }), collection_item_id: Property.Dropdown({ displayName: 'Collection Item', required: true, refreshers: ['collection_id'], options: async ({ auth, collection_id }) => { if (!auth || !collection_id) { return { disabled: true, options: [], placeholder: 'Please connect account first.', }; } const authValue = auth as PiecePropValueSchema<typeof webflowAuth>; const client = new WebflowApiClient(authValue.access_token); const options: DropdownOption<string>[] = []; let page = 0; let response; do { response = await client.listCollectionItems(collection_id as string, page, 100); page += 100; for (const item of response.items) { options.push({ label: item.name, value: item._id }); } } while (response.items.length > 0); return { disabled: false, options, }; }, }), order_id: Property.Dropdown({ displayName: 'Order', required: true, refreshers: ['site_id'], options: async ({ auth, site_id }) => { if (!auth || !site_id) { return { disabled: true, options: [], placeholder: 'Please connect account first.', }; } const authValue = auth as PiecePropValueSchema<typeof webflowAuth>; const client = new WebflowApiClient(authValue.access_token); const options: DropdownOption<string>[] = []; let page = 0; let response; do { response = await client.listOrders(site_id as string, page, 100); page += 100; for (const order of response) { options.push({ label: order.orderId, value: order.orderId }); } } while (response.length > 0); return { disabled: false, options, }; }, }), };

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/activepieces/activepieces'

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