mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-18 10:41:49 -05:00
feat(frontend): Replace advanced switch with chevron on builder nodes (#12152)
## Summary Replaces the "Advanced" switch/toggle on builder nodes with a chevron control, matching the UX pattern used for the outputs section. Resolves [OPEN-3006](https://linear.app/autogpt/issue/OPEN-3006/replace-advanced-switch-with-chevron-on-builder-nodes) Before <img width="443" height="348" alt="Screenshot 2026-02-17 at 9 01 31 pm" src="https://github.com/user-attachments/assets/40e98669-3136-4e53-8d46-df18ea32c4d7" /> After <img width="443" height="348" alt="Screenshot 2026-02-17 at 9 00 21 pm" src="https://github.com/user-attachments/assets/0836e3ac-1d0a-43d7-9392-c9d5741b32b6" /> ## Changes - `NodeAdvancedToggle.tsx` — Replaced switch component with a chevron expand/collapse toggle ## Testing Tested and verified by @kpczerwinski <!-- greptile_comment --> <details><summary><h3>Greptile Summary</h3></summary> Replaces the `Switch` toggle for the "Advanced" section on builder nodes with a chevron (`CaretDownIcon`) expand/collapse control, matching the existing UX pattern used in `OutputHandler.tsx`. The change is clean and consistent with the codebase. - Swapped `Switch` component for a ghost `Button` + `CaretDownIcon` with a `rotate-180` transition for visual feedback - Pattern closely mirrors the output section toggle in `OutputHandler.tsx` (lines 120-136) - Removed the top border separator and rounded bottom corners from the container, adjusting the visual spacing - Toggle logic correctly inverts the `showAdvanced` boolean state - Uses Phosphor Icons and design system components per project conventions </details> <details><summary><h3>Confidence Score: 5/5</h3></summary> - This PR is safe to merge — it is a small, focused UI change with no logic or security concerns. - Single file changed with a straightforward UI component swap. The new implementation follows an established pattern already in use in OutputHandler.tsx. Toggle logic is correct and all conventions (Phosphor Icons, design system components, Tailwind styling) are followed. - No files require special attention. </details> <details><summary><h3>Sequence Diagram</h3></summary> ```mermaid sequenceDiagram participant User participant NodeAdvancedToggle participant nodeStore User->>NodeAdvancedToggle: Click chevron button NodeAdvancedToggle->>nodeStore: setShowAdvanced(nodeId, !showAdvanced) nodeStore-->>NodeAdvancedToggle: Updated showAdvanced state NodeAdvancedToggle->>NodeAdvancedToggle: Rotate CaretDownIcon (0° ↔ 180°) Note over NodeAdvancedToggle: Advanced fields shown/hidden via FormCreator ``` </details> <sub>Last reviewed commit: ad66080</sub> <!-- greptile_other_comments_section --> **Context used:** - Context from `dashboard` - autogpt_platform/frontend/CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=39861924-d320-41ba-a1a7-a8bff44f780a)) - Context from `dashboard` - autogpt_platform/frontend/src/app/(platform)/build/components/FlowEditor/ARCHITECTURE_FLOW_EDITOR.md ([source](https://app.greptile.com/review/custom-context?memory=0c5511fe-9aeb-4cf1-bbe9-798f2093b748)) <!-- /greptile_comment --> --------- Co-authored-by: Krzysztof Czerwinski <kpczerwinski@gmail.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Ubbe <0ubbe@users.noreply.github.com> Co-authored-by: Ubbe <hi@ubbe.dev>
This commit is contained in:
@@ -1,21 +1,39 @@
|
||||
import { useNodeStore } from "@/app/(platform)/build/stores/nodeStore";
|
||||
import { Switch } from "@/components/atoms/Switch/Switch";
|
||||
import { Button } from "@/components/atoms/Button/Button";
|
||||
import { Text } from "@/components/atoms/Text/Text";
|
||||
import { CaretDownIcon } from "@phosphor-icons/react";
|
||||
|
||||
export const NodeAdvancedToggle = ({ nodeId }: { nodeId: string }) => {
|
||||
type Props = {
|
||||
nodeId: string;
|
||||
};
|
||||
|
||||
export function NodeAdvancedToggle({ nodeId }: Props) {
|
||||
const showAdvanced = useNodeStore(
|
||||
(state) => state.nodeAdvancedStates[nodeId] || false,
|
||||
);
|
||||
const setShowAdvanced = useNodeStore((state) => state.setShowAdvanced);
|
||||
return (
|
||||
<div className="flex items-center justify-between gap-2 rounded-b-xlarge border-t border-zinc-200 bg-white px-5 py-3.5">
|
||||
<Text variant="body" className="font-medium text-slate-700">
|
||||
Advanced
|
||||
</Text>
|
||||
<Switch
|
||||
onCheckedChange={(checked) => setShowAdvanced(nodeId, checked)}
|
||||
checked={showAdvanced}
|
||||
/>
|
||||
<div className="flex items-center justify-start gap-2 bg-white px-5 pb-3.5">
|
||||
<Button
|
||||
variant="ghost"
|
||||
className="h-fit min-w-0 p-0 hover:border-transparent hover:bg-transparent"
|
||||
onClick={() => setShowAdvanced(nodeId, !showAdvanced)}
|
||||
aria-expanded={showAdvanced}
|
||||
>
|
||||
<Text
|
||||
variant="body"
|
||||
as="span"
|
||||
className="flex items-center gap-2 !font-semibold text-slate-700"
|
||||
>
|
||||
Advanced{" "}
|
||||
<CaretDownIcon
|
||||
size={16}
|
||||
weight="bold"
|
||||
className={`transition-transform ${showAdvanced ? "rotate-180" : ""}`}
|
||||
aria-hidden
|
||||
/>
|
||||
</Text>
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user