Skip to main content
Glama

mcp-google-sheets

update-company.ts7.9 kB
import { biginAuth } from '../../index'; import { createAction, InputPropertyMap, Property, } from '@activepieces/pieces-framework'; import { tagsDropdown, usersDropdown } from '../common/props'; import { biginApiService } from '../common/request'; import { handleDropdownError } from '../common/helpers'; export const updateCompany = createAction({ auth: biginAuth, name: 'updateCompany', displayName: 'Update Company', description: 'Updates an existing Company and prepopulates its fields for editing.', props: { companyId: Property.Dropdown({ displayName: 'Select Company', description: 'Choose a company to update', required: true, refreshers: ['auth'], options: async (context: any) => { if (!context.auth) return handleDropdownError('Please connect your account first'); const response = await biginApiService.fetchCompanies( context.auth.access_token, (context.auth as any).api_domain ); return { options: response.data.map((company: any) => ({ label: company.Account_Name, value: JSON.stringify(company), })), }; }, }), owner: usersDropdown, companyDetails: Property.DynamicProperties({ displayName: 'Company Details', description: 'These fields will be prepopulated with company data', refreshers: ['companyId', 'auth'], required: true, props: async ({ companyId, auth }: any): Promise<InputPropertyMap> => { if (!companyId) return {}; const company = JSON.parse(companyId); const { access_token, api_domain } = auth as any; const [fieldsResp, usersResp] = await Promise.all([ biginApiService.fetchModuleFields(access_token, api_domain, 'Accounts'), biginApiService.fetchUsers(access_token, api_domain), ]); const usersOptions = (usersResp.users || []).map((u: any) => ({ label: `${u.first_name ?? ''} ${u.last_name ?? ''}`.trim(), value: u.id, })); const props: InputPropertyMap = {}; const fields = (fieldsResp.fields || []) as any[]; for (const f of fields) { const apiName = f.api_name as string; if (f.read_only || f.field_read_only) continue; if (!f.view_type || f.view_type.edit !== true) continue; if (apiName === 'Tag' || apiName === 'id') continue; let defaultValue: any = company[apiName] ?? undefined; if (apiName === 'Owner') defaultValue = company.Owner?.id; switch ((f.data_type as string)?.toLowerCase()) { case 'picklist': { const options = (f.pick_list_values || []).map((pl: any) => ({ label: pl.display_value, value: pl.actual_value, })); props[apiName] = Property.StaticDropdown({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue, options: { options }, }); break; } case 'multiselectpicklist': { const options = (f.pick_list_values || []).map((pl: any) => ({ label: pl.display_value, value: pl.actual_value, })); props[apiName] = Property.StaticMultiSelectDropdown({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue, options: { options }, }); break; } case 'boolean': { props[apiName] = Property.Checkbox({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue: Boolean(defaultValue), }); break; } case 'date': { props[apiName] = Property.ShortText({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue, }); break; } case 'datetime': { props[apiName] = Property.DateTime({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue, }); break; } case 'integer': case 'long': case 'double': case 'decimal': case 'currency': case 'percent': { props[apiName] = Property.Number({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue, }); break; } default: { if (apiName === 'Owner') { props[apiName] = Property.StaticDropdown({ displayName: 'Owner', description: f.tooltip || undefined, required: false, defaultValue, options: { options: usersOptions }, }); break; } if (apiName === 'Description') { props[apiName] = Property.LongText({ displayName: 'Description', description: f.tooltip || undefined, required: false, defaultValue, }); break; } props[apiName] = Property.ShortText({ displayName: f.display_label || f.field_label || apiName, description: f.tooltip || undefined, required: false, defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined, }); } } } return props; }, }), tag: tagsDropdown('Accounts'), }, async run(context) { try { const company = JSON.parse(context.propsValue.companyId); const companyId = company.id; const updates = context.propsValue.companyDetails as Record<string, any>; const body: Record<string, any> = { id: companyId }; for (const [apiName, value] of Object.entries(updates || {})) { if ( value === undefined || value === null || (typeof value === 'string' && value.trim() === '') ) { continue; } if (apiName === 'Owner') { body['Owner'] = { id: value }; } else if (apiName === 'Tag') { body['Tag'] = (value as any[]).map((t: any) => ({ name: t })); } else { body[apiName] = value; } } if (context.propsValue.owner) { body['Owner'] = { id: context.propsValue.owner }; } if ( context.propsValue.tag && Array.isArray(context.propsValue.tag) && context.propsValue.tag.length > 0 ) { body['Tag'] = context.propsValue.tag.map((t: any) => ({ name: t })); } const response = await biginApiService.updateCompany( context.auth.access_token, (context.auth as any).api_domain, { data: [body] } ); return { message: 'Company updated successfully', data: response.data[0], }; } catch (error: any) { console.error('Error updating company:', error); throw new Error(error); } }, });

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