Skip to main content
Glama
new-project.ts4.61 kB
import { createTrigger, TriggerStrategy, PiecePropValueSchema, Property, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework'; import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common'; import { bexioAuth } from '../../index'; import { BexioClient } from '../common/client'; import { OAuth2PropertyValue } from '@activepieces/pieces-framework'; const polling: Polling< AppConnectionValueForAuthProperty<typeof bexioAuth>, { status_id?: number } > = { strategy: DedupeStrategy.LAST_ITEM, items: async ({ auth, lastItemId, propsValue }) => { const client = new BexioClient(auth); const searchBody: Array<{ field: string; value: string; criteria: string }> = [ { field: 'name', value: '', criteria: 'not_null', }, ]; if (propsValue.status_id !== undefined && propsValue.status_id !== null) { searchBody.push({ field: 'pr_state_id', value: propsValue.status_id.toString(), criteria: '=', }); } const queryParams: Record<string, string> = { order_by: 'id_desc', limit: '500', }; const projects = await client.post<Array<{ id: number; uuid: string; nr: string; name: string; start_date: string | null; end_date: string | null; comment: string | null; pr_state_id: number; pr_project_type_id: number; contact_id: number | null; contact_sub_id: number | null; pr_invoice_type_id: number | null; pr_invoice_type_amount: string | null; pr_budget_type_id: number | null; pr_budget_type_amount: string | null; user_id: number; }>>('/2.0/pr_project/search', searchBody, queryParams); return projects.map((project) => ({ id: project.id, data: project, })); }, }; export const newProjectTrigger = createTrigger({ auth: bexioAuth, name: 'new_project', displayName: 'New Project', description: 'Triggers when a Project is created or updated with the chosen status', type: TriggerStrategy.POLLING, props: { status_id: Property.Dropdown({ auth: bexioAuth, displayName: 'Status', description: 'Filter projects by status (leave empty to trigger for all statuses)', required: false, refreshers: [], options: async ({ auth }) => { if (!auth) { return { disabled: true, placeholder: 'Connect your Bexio account first', options: [], }; } try { const client = new BexioClient(auth); const statuses = await client.get<Array<{ id: number; name: string }>>('/2.0/pr_project_state').catch(() => []); if (statuses.length === 0) { return { disabled: false, placeholder: 'Status filter not available - will trigger for all statuses', options: [], }; } return { disabled: false, options: statuses.map((status) => ({ label: status.name, value: status.id, })), }; } catch (error) { return { disabled: false, placeholder: 'Enter status ID manually or leave empty for all statuses', options: [], }; } }, }), }, sampleData: { id: 2, uuid: '046b6c7f-0b8a-43b9-b35d-6489e6daee91', nr: '000002', name: 'Villa Kunterbunt', start_date: '2019-07-12 00:00:00', end_date: null, comment: '', pr_state_id: 2, pr_project_type_id: 2, contact_id: 2, contact_sub_id: null, pr_invoice_type_id: 3, pr_invoice_type_amount: '230.00', pr_budget_type_id: 1, pr_budget_type_amount: '200.00', user_id: 1, }, onEnable: async (context) => { await pollingHelper.onEnable(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, }); }, onDisable: async (context) => { await pollingHelper.onDisable(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, }); }, test: async (context) => { return await pollingHelper.test(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, files: context.files, }); }, run: async (context) => { return await pollingHelper.poll(polling, { auth: context.auth, store: context.store, propsValue: context.propsValue, files: context.files, }); }, });

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

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