diff --git a/CHANGELOG.md b/CHANGELOG.md index 82d42773ea..723c8489bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ and this project adheres to ### Fixed +- Restore "Create workflow" flow + [#4266](https://github.com/OpenFn/lightning/issues/4266) - Allow users to add collaborators with long email domains [#4185](https://github.com/OpenFn/lightning/issues/4185) diff --git a/assets/js/manual-run-panel/Badge.tsx b/assets/js/collaborative-editor/components/common/Badge.tsx similarity index 54% rename from assets/js/manual-run-panel/Badge.tsx rename to assets/js/collaborative-editor/components/common/Badge.tsx index 3479b70ace..5cdbad8376 100644 --- a/assets/js/manual-run-panel/Badge.tsx +++ b/assets/js/collaborative-editor/components/common/Badge.tsx @@ -1,7 +1,7 @@ import { cn } from '#/utils/cn'; interface BadgeProps { - onClose: () => void; + onClose?: () => void; className?: string; variant?: 'default' | 'warning'; } @@ -23,19 +23,21 @@ const Badge: React.FC> = ({ )} > {children} - + {onClose && ( + + )} ); }; diff --git a/assets/js/collaborative-editor/components/common/RunBadge.tsx b/assets/js/collaborative-editor/components/common/RunBadge.tsx index 4ae10ead29..bbd6a7c7a7 100644 --- a/assets/js/collaborative-editor/components/common/RunBadge.tsx +++ b/assets/js/collaborative-editor/components/common/RunBadge.tsx @@ -9,7 +9,7 @@ * - IDE FullScreenIDE (run selection indicator) */ -import Badge from '#/manual-run-panel/Badge'; +import Badge from './Badge'; interface RunBadgeProps { runId: string; diff --git a/assets/js/collaborative-editor/components/left-panel/TemplateCard.tsx b/assets/js/collaborative-editor/components/left-panel/TemplateCard.tsx index 1c9b25b5dc..068423851b 100644 --- a/assets/js/collaborative-editor/components/left-panel/TemplateCard.tsx +++ b/assets/js/collaborative-editor/components/left-panel/TemplateCard.tsx @@ -1,6 +1,7 @@ import { cn } from '#/utils/cn'; import type { Template } from '../../types/template'; +import Badge from '../common/Badge'; interface TemplateCardProps { template: Template; @@ -57,12 +58,22 @@ export function TemplateCard({ -

- {template.name} -

-

- {template.description || 'No description provided'} -

+
+

+ {template.name} +

+ {'isBase' in template && template.isBase && base} +
+ {'isBase' in template && template.isBase ? null : ( +

+ {template.description || 'No description provided'} +

+ )} ); } diff --git a/assets/js/collaborative-editor/components/left-panel/TemplatePanel.tsx b/assets/js/collaborative-editor/components/left-panel/TemplatePanel.tsx index 6e4861a231..c34251eb2f 100644 --- a/assets/js/collaborative-editor/components/left-panel/TemplatePanel.tsx +++ b/assets/js/collaborative-editor/components/left-panel/TemplatePanel.tsx @@ -72,14 +72,12 @@ export function TemplatePanel({ onImportClick, onImport }: TemplatePanelProps) { }, [channel, uiStore]); const allTemplates: Template[] = useMemo(() => { - const combined = [...BASE_TEMPLATES, ...templates]; - if (!searchQuery.trim()) { - return combined; + return [...BASE_TEMPLATES, ...templates]; } const query = searchQuery.toLowerCase(); - return combined.filter(template => { + const filteredUserTemplates = templates.filter(template => { const matchName = template.name.toLowerCase().includes(query); const matchDesc = template.description?.toLowerCase().includes(query); const matchTags = template.tags.some(tag => @@ -87,6 +85,9 @@ export function TemplatePanel({ onImportClick, onImport }: TemplatePanelProps) { ); return matchName || matchDesc || matchTags; }); + + // Always show base templates, regardless of search query + return [...BASE_TEMPLATES, ...filteredUserTemplates]; }, [templates, searchQuery]); const handleSelectTemplate = useCallback( @@ -117,8 +118,8 @@ export function TemplatePanel({ onImportClick, onImport }: TemplatePanelProps) { }; const handleBuildWithAI = useCallback(() => { - // Only trigger if there are no matching templates and there's a search query - if (allTemplates.length === 0 && searchQuery) { + // Only trigger if no user templates matched and there's a search query + if (allTemplates.length === BASE_TEMPLATES.length && searchQuery) { // Clear any existing AI session and disconnect aiStore.disconnect(); aiStore.clearSession(); @@ -141,7 +142,7 @@ export function TemplatePanel({ onImportClick, onImport }: TemplatePanelProps) {

- Browse templates + Create a new workflow

@@ -214,21 +215,19 @@ export function TemplatePanel({ onImportClick, onImport }: TemplatePanelProps) { /> ))} - {allTemplates.length === 0 && searchQuery && ( + {allTemplates.length === BASE_TEMPLATES.length && searchQuery && (
- +
-

- No matching templates -

- We couldn't find any templates for " + We couldn't find any matches for " {searchQuery} - " + ". Start from scratch with one of these base templates or + click below to generate this workflow with AI.