Skip to content

Commit c85de13

Browse files
committed
fix(integrations): flip suggested-skill row to Added immediately after add
The row derived Added state solely from the useSkills cache, so between a successful create and the list refetch the row still showed Add and could be clicked again, hitting the server duplicate-name check. Track added names in local state so the row reflects the add immediately.
1 parent 1feeb8c commit c85de13

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

apps/sim/app/workspace/[workspaceId]/integrations/[block]/integration-skills-section.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,17 @@ export function IntegrationSkillsSection({
6868
const { data: existingSkills = [] } = useSkills(workspaceId)
6969
const createSkill = useCreateSkill()
7070
const [pendingName, setPendingName] = useState<string | null>(null)
71+
const [optimisticAdded, setOptimisticAdded] = useState<ReadonlySet<string>>(new Set())
7172

7273
const existingNames = useMemo(() => new Set(existingSkills.map((s) => s.name)), [existingSkills])
7374

7475
const handleAdd = async (skill: SuggestedSkill, position: number) => {
7576
setPendingName(skill.name)
7677
try {
7778
await createSkill.mutateAsync({ workspaceId, skill })
79+
// Mark added locally so the row flips to "Added" immediately — the list
80+
// refetch that backs `existingNames` lands after this mutation resolves.
81+
setOptimisticAdded((prev) => new Set(prev).add(skill.name))
7882
captureEvent(posthog, 'integration_skill_added', {
7983
workspace_id: workspaceId,
8084
integration_type: integrationType,
@@ -96,7 +100,7 @@ export function IntegrationSkillsSection({
96100
<SkillRow
97101
key={skill.name}
98102
skill={skill}
99-
added={existingNames.has(skill.name)}
103+
added={existingNames.has(skill.name) || optimisticAdded.has(skill.name)}
100104
pending={pendingName === skill.name}
101105
onAdd={() => handleAdd(skill, index)}
102106
/>

0 commit comments

Comments
 (0)