Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,64 @@
import { useQuery } from '@tanstack/react-query';
import { t } from 'i18next';
import {
RightSideBarType,
useBuilderStateContext,
} from '@/app/builder/builder-hooks';
import { CardList, CardListItemSkeleton } from '@/components/custom/card-list';
import { ScrollArea } from '@/components/ui/scroll-area';
import { flowsApi } from '@/features/flows/lib/flows-api';
import { FlowVersionMetadata, SeekPage } from '@activepieces/shared';
import { SidebarHeader } from '../sidebar-header';
import { FlowVersionDetailsCard } from './flow-versions-card';
const FlowVersionsList = () => {
const [flow, setRightSidebar, selectedFlowVersion] = useBuilderStateContext(
(state) => [state.flow, state.setRightSidebar, state.flowVersion],
);
const {
data: flowVersionPage,
isLoading,
isError,
} = useQuery<SeekPage<FlowVersionMetadata>, Error>({
queryKey: ['flow-versions', flow.id],
queryFn: () =>
flowsApi.listVersions(flow.id, {
limit: 1000,
cursor: undefined,
}),
staleTime: 0,
});
return (
<>
<SidebarHeader onClose={() => setRightSidebar(RightSideBarType.NONE)}>
{t('Version History')}
</SidebarHeader>
<CardList>
{isLoading && <CardListItemSkeleton numberOfCards={10} />}
{isError && <div>{t('Error, please try again.')}</div>}
{flowVersionPage && flowVersionPage.data && (
<ScrollArea className="w-full h-full">
{flowVersionPage.data.map((flowVersion, index) => (
<FlowVersionDetailsCard
selected={flowVersion.id === selectedFlowVersion?.id}
publishedVersionId={flow.publishedVersionId}
flowVersion={flowVersion}
flowVersionNumber={flowVersionPage.data.length - index}
key={flowVersion.id}
/>
))}
</ScrollArea>
)}
</CardList>
</>
);
};
FlowVersionsList.displayName = 'FlowVersionsList';
export { FlowVersionsList };