From 4f6ccb289087a76a4110310cd66057fe41c072e1 Mon Sep 17 00:00:00 2001 From: Taylor Ho Date: Thu, 13 Aug 2026 23:15:00 -0700 Subject: [PATCH] Polish workflow trigger presentation Signed-off-by: Taylor Ho --- .../workflows/ui/WorkflowFormBuilder.tsx | 49 +++++++++++++++++-- .../workflows/ui/workflowFormTypes.ts | 6 +-- .../ui/workflowTriggerDescription.test.mjs | 8 +-- .../ui/workflowTriggerDescription.ts | 6 +-- desktop/tests/e2e/workflows.spec.ts | 30 +++++++----- 5 files changed, 71 insertions(+), 28 deletions(-) diff --git a/desktop/src/features/workflows/ui/WorkflowFormBuilder.tsx b/desktop/src/features/workflows/ui/WorkflowFormBuilder.tsx index e9351472c..79750d4d2 100644 --- a/desktop/src/features/workflows/ui/WorkflowFormBuilder.tsx +++ b/desktop/src/features/workflows/ui/WorkflowFormBuilder.tsx @@ -19,13 +19,16 @@ import { AnimatePresence, motion, useReducedMotion } from "motion/react"; import * as React from "react"; import { createPortal } from "react-dom"; +import { useCustomEmoji } from "@/features/custom-emoji/hooks"; import { useUsersBatchQuery } from "@/features/profile/hooks"; import { resolveUserLabel } from "@/features/profile/lib/identity"; +import { reactionEmojiUrl } from "@/shared/api/customEmoji"; import { useIdentityQuery } from "@/shared/api/hooks"; import { getEventById } from "@/shared/api/tauri"; import type { Channel } from "@/shared/api/types"; import { Button } from "@/shared/ui/button"; import { cn } from "@/shared/lib/cn"; +import { rewriteRelayUrl } from "@/shared/lib/mediaUrl"; import { DropdownMenu, DropdownMenuContent, @@ -496,6 +499,7 @@ export function WorkflowFormBuilder({ const shouldReduceMotion = useReducedMotion(); const previousModeRef = React.useRef(mode); const identityQuery = useIdentityQuery(); + const customEmoji = useCustomEmoji(); const parsedTriggerConditions = React.useMemo( () => formState.trigger.filter @@ -506,6 +510,17 @@ export function WorkflowFormBuilder({ : [], [formState.trigger.filter, formState.trigger.on], ); + const triggerReactionCondition = parsedTriggerConditions?.find( + (condition) => + condition.field === "trigger_emoji" && condition.operator === "equals", + ); + const triggerReaction = + formState.trigger.on === "reaction_added" + ? triggerReactionCondition?.value || formState.trigger.emoji + : undefined; + const triggerReactionUrl = triggerReaction + ? reactionEmojiUrl(triggerReaction, customEmoji) + : undefined; const triggerAuthorCondition = parsedTriggerConditions?.find( (condition) => condition.field === "trigger_author", ); @@ -735,11 +750,35 @@ export function WorkflowFormBuilder({ } disabled={disabled} icon={ -