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:
@@ -0,0 +1,98 @@
|
||||
import { t } from 'i18next';
|
||||
import { ChevronDown, Puzzle, Workflow } from 'lucide-react';
|
||||
import { useState } from 'react';
|
||||
|
||||
import { Button } from '@/components/ui/button';
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuTrigger,
|
||||
} from '@/components/ui/dropdown-menu';
|
||||
import { AgentTool, AgentToolType } from '@activepieces/shared';
|
||||
|
||||
import { AgentFlowToolDialog } from './flow-tool-dialog';
|
||||
import { AgentPieceDialog } from './piece-tool-dialog';
|
||||
|
||||
type AddAgentToolDropdownProps = {
|
||||
tools: AgentTool[];
|
||||
disabled?: boolean;
|
||||
onToolsUpdate: (tools: AgentTool[]) => void;
|
||||
};
|
||||
|
||||
export const AddAgentToolDropdown = ({
|
||||
tools,
|
||||
disabled,
|
||||
onToolsUpdate,
|
||||
}: AddAgentToolDropdownProps) => {
|
||||
const [openDropdown, setOpenDropdown] = useState(false);
|
||||
const [showAddPieceDialog, setShowAddPieceDialog] = useState(false);
|
||||
const [showAddFlowDialog, setShowAddFlowDialog] = useState(false);
|
||||
|
||||
return (
|
||||
<DropdownMenu
|
||||
modal={false}
|
||||
open={openDropdown}
|
||||
onOpenChange={setOpenDropdown}
|
||||
>
|
||||
<DropdownMenuTrigger disabled={disabled} asChild>
|
||||
<Button variant="basic">
|
||||
<span>{t('Add tool')}</span>
|
||||
<ChevronDown className="h-4 w-4" />
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent>
|
||||
<AgentPieceDialog
|
||||
tools={tools}
|
||||
open={showAddPieceDialog}
|
||||
onToolsUpdate={(tools) => {
|
||||
onToolsUpdate(tools);
|
||||
setShowAddPieceDialog(false);
|
||||
setOpenDropdown(false);
|
||||
}}
|
||||
onClose={() => {
|
||||
setShowAddPieceDialog(false);
|
||||
setOpenDropdown(false);
|
||||
}}
|
||||
>
|
||||
<DropdownMenuItem
|
||||
onSelect={(e) => {
|
||||
e.preventDefault();
|
||||
setShowAddPieceDialog(true);
|
||||
}}
|
||||
>
|
||||
<Puzzle className="h-4 w-4 me-2" />
|
||||
<span>{t('From piece')}</span>
|
||||
</DropdownMenuItem>
|
||||
</AgentPieceDialog>
|
||||
<AgentFlowToolDialog
|
||||
open={showAddFlowDialog}
|
||||
selectedFlows={tools
|
||||
.filter((tool) => tool.type === AgentToolType.FLOW)
|
||||
.map((tool) => tool.flowId!)}
|
||||
onToolsUpdate={(newTools) => {
|
||||
onToolsUpdate(newTools);
|
||||
setShowAddFlowDialog(false);
|
||||
setOpenDropdown(false);
|
||||
}}
|
||||
onClose={() => {
|
||||
setShowAddFlowDialog(false);
|
||||
setOpenDropdown(false);
|
||||
}}
|
||||
tools={tools}
|
||||
>
|
||||
<DropdownMenuItem
|
||||
onSelect={(e) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
setShowAddFlowDialog(true);
|
||||
}}
|
||||
>
|
||||
<Workflow className="h-4 w-4 me-2" />
|
||||
<span>{t('From flow')}</span>
|
||||
</DropdownMenuItem>
|
||||
</AgentFlowToolDialog>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user