16 KiB
16 KiB
Event Handler Instances: {() => handler(arg)} Pattern
Found 167 instances across the codebase.
Workspaces / Shared Components
src/workspaces/components/MarkdownEditor.tsx
- Line 48:
onClick={() => setShowPreview(false)} - Line 52:
onClick={() => setShowPreview(true)}
src/workspaces/components/SearchInput.tsx
- Line 49:
onClick={() => handleSearch('')}
src/workspaces/components/ErrorDialogs/CustomError.tsx
- Line 25:
onClick={() => onOpenChange(false)}
src/workspaces/components/ErrorDialogs/ForbiddenDialog.tsx
- Line 27:
onClick={() => onOpenChange(false)}
src/workspaces/components/ErrorDialogs/UnauthorizedDialog.tsx
- Line 29:
onClick={() => onOpenChange(false)}
src/workspaces/components/ErrorDialogs/ServerError.tsx
- Line 25:
onClick={() => onOpenChange(false)}
src/workspaces/components/DataTable/PaginationBar.tsx
- Line 83:
onClick={() => changePage(1)} - Line 93:
onClick={() => changePage(currentPage - 1)} - Line 103:
onClick={() => changePage(currentPage + 1)} - Line 113:
onClick={() => changePage(pageCount)}
src/workspaces/components/DataTable/DataTable.tsx
- Line 89:
onClick={() => sortBy(sortKey as Extract<keyof T, string> | undefined)}
src/workspaces/components/ui/mode-toggle.tsx
- Line 16:
onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
Editor App
src/apps/editor/app/src/EditorV2/index.tsx
- Line 73:
onCollapse={() => setLeftCollapsed(true)} - Line 74:
onExpand={() => setLeftCollapsed(false)} - Line 97:
onCollapse={() => setRightCollapsed(true)} - Line 98:
onExpand={() => setRightCollapsed(false)}
src/apps/editor/app/src/EditorV2/ScreenshotDialog.tsx
- Line 114:
onClick={() => setView('list')} - Line 131:
onClick={() => setView('editor')}
src/apps/editor/app/src/EditorV2/Header/index.tsx
- Line 110:
onClick={() => setDevice(d)} - Line 134:
onClick={() => setDevice(d)}
src/apps/editor/app/src/EditorV2/Header/GlobalCodeMenu.tsx
- Line 32:
onClick={() => openEditor('js')} - Line 33:
onClick={() => openEditor('css')}
src/apps/editor/app/src/EditorV2/Header/ElementSelector.tsx
- Line 59:
onClick={() => setIsOpen(false)}
src/apps/editor/app/src/EditorV2/RightSidebar/ElementInfo.tsx
- Line 23:
setTimeout(() => setCopiedHierarchical(false), 2000) - Line 31:
setTimeout(() => setCopiedClassBased(false), 2000)
src/apps/editor/app/src/EditorV2/RightSidebar/Breadcrumb.tsx
- Line 60:
onClick={() => selectMember(index)} - Line 100:
onClick={() => selectMember(index)}
src/apps/editor/app/src/EditorV2/RightSidebar/fields/PropertyColor.tsx
- Line 29:
return () => clearInterval(interval)
src/apps/editor/app/src/EditorV2/LeftSidebar/HierarchyTab.tsx
- Line 25:
onClick={() => onSelect(index)}
src/apps/editor/app/src/EditorV2/LeftSidebar/ChangesTab.tsx
- Line 46:
onMouseEnter={() => handleMouseEnter(change)} - Line 48:
onClick={() => selectByChange(change)}
src/apps/editor/app/src/EditorV2/Preview/index.tsx
- Line 118:
onClick={() => setInteractive(!interactive)} - Line 132:
onClick={() => setMoveAnywhere(!moveAnywhere)}
src/apps/editor/app/src/Editor/CodeEditorWindow/index.tsx
- Line 31:
onClick={() => setIsFullscreen(false)} - Line 33:
onClick={() => setIsFullscreen(true)}
src/apps/editor/app/src/Editor/ContextMenu/index.tsx
- Line 20:
onClick={() => setIsContextOpen(false)} - Line 26:
onClick={() => openEditor('html')}
src/apps/editor/app/src/Editor/BottomToolbar/GlobalCode/index.tsx
- Line 22:
onClick={() => openEditor('js')} - Line 27:
onClick={() => openEditor('css')}
src/apps/editor/app/src/Editor/BottomToolbar/VariantSelector/index.tsx
- Line 44:
onClick={() => setIsOpen(true)}
src/apps/editor/app/src/Editor/BottomToolbar/VariantSelector/CreateNewVariant.tsx
- Line 23:
onClose={() => setIsOpen(false)}
src/apps/editor/app/src/Editor/BottomToolbar/QuerySelector/index.tsx
- Line 49:
onClick={() => setIsOpen(false)}
src/apps/editor/app/src/Editor/BottomToolbar/DeviceSelector/index.tsx
- Line 23:
onSelect={() => setDevice(device)}
src/apps/editor/app/src/Editor/BottomToolbar/MoveAnywhere/index.tsx
- Line 12:
onClick={() => setMoveAnywhere((curr) => !curr)}
src/apps/editor/app/src/Editor/BottomToolbar/InteractivitySelector/index.tsx
- Line 13:
onClick={() => setInteractive((curr) => !curr)}
src/apps/editor/app/src/Editor/BottomToolbar/Changes/ChangesList.tsx
- Line 26:
onMouseEnter={() => selectByChange(change)} - Line 48:
onClick={() => removeChange(change)}
src/apps/editor/app/src/Editor/BottomToolbar/Screenshot/ScreenshotList.tsx
- Line 38:
onMouseEnter={() => setHovered(screenshot.id)} - Line 39:
onMouseLeave={() => setHovered(null)} - Line 56:
onClick={() => setEditing(null)} - Line 64:
onClick={() => setEditing(screenshot.id)} - Line 68:
onClick={() => setWantsToDelete(screenshot.id)} - Line 75:
onConfirm={() => onDeleteConfirm(screenshot.id)} - Line 76:
onClose={() => setWantsToDelete(null)}
src/apps/editor/app/src/Editor/BottomToolbar/Screenshot/Controls.tsx
- Line 87:
onClick={() => handleUpload(comment)}
src/apps/editor/app/src/Editor/BottomToolbar/Screenshot/index.tsx
- Line 38:
onClick={() => setView('list')} - Line 47:
onClick={() => setView('upload')}
src/apps/editor/extension/src/Auth/SigninPage.tsx
- Line 18:
setTimeout(() => navigate('/'), 100)
src/apps/editor/extension/src/Screens/ExperimentList/ExperimentVariantList/SearchFilter.tsx
- Line 22:
onClick={() => onSearchChange('')}
Dashboard App
src/apps/dashboard/hooks/use-toast.tsx
- Line 143:
const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id })
src/apps/dashboard/Screens/AdminTools/TestExperiments/TestExperiments.tsx
- Line 38:
onClick={() => setShowDuplicateModal(true)} - Line 48:
onClose={() => setShowDuplicateModal(false)}
src/apps/dashboard/Screens/Dashboard/Monitor/TrendTable.tsx
- Line 99:
onToggle={() => toggleRow(trend-${exp.id})} - Line 114:
onClick={() => setCurrentPage(1)} - Line 120:
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} - Line 128:
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} - Line 136:
onClick={() => setCurrentPage(totalPages)}
src/apps/dashboard/Screens/Dashboard/Monitor/GroupedExperimentsTable.tsx
- Line 75:
onToggle={() => toggleRow(grouped-${exp.id})} - Line 91:
onClick={() => setCurrentPage(1)} - Line 97:
onClick={() => setCurrentPage((p) => Math.max(1, p - 1))} - Line 105:
onClick={() => setCurrentPage((p) => Math.min(totalPages, p + 1))} - Line 113:
onClick={() => setCurrentPage(totalPages)}
src/apps/dashboard/Screens/Dashboard/Home/ExperimentsOverviewTableMobile.tsx
- Line 23:
onClick={() => sort('id')} - Line 28:
onClick={() => sort('status')} - Line 34:
onClick={() => sort('sessions')}
src/apps/dashboard/Screens/Dashboard/Home/ConfirmDialogs.tsx
- Line 36:
onOpenChange={() => setDialogAction(null)}
src/apps/dashboard/Screens/Dashboard/Home/RowActions.tsx
- Line 31:
onClick={() => navigate(/experiments/${id})} - Line 32:
onClick={() => setDialogAction('duplicate')} - Line 34:
onClick={() => setDialogAction('archive')} - Line 37:
onClick={() => setDialogAction('delete')}
src/apps/dashboard/Screens/Dashboard/Clients/index.tsx
- Line 76:
onClick={() => setIsCreating(true)} - Line 108:
onClick={() => setIsCreating(true)} - Line 119:
onClick={() => setOrganization(value as number)} - Line 146:
onClick={() => handleSaveEdit(item.id)} - Line 163:
onClick={() => handleEditName(item.id, item.friendlyName ?? '')}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/Timeline.tsx
- Line 111:
onClick={() => setMobileOpen((v) => !v)}
src/apps/dashboard/Screens/Dashboard/Experiments/Library/ActionModals.tsx
- Line 37:
onCancel={() => setDialogAction(null)}
src/apps/dashboard/Screens/Dashboard/Experiments/Library/TopHeader.tsx
- Line 44:
onClick={() => setIsCreating(true)} - Line 69:
onClick={() => setIsCreating(true)}
src/apps/dashboard/Screens/Dashboard/Experiments/Library/ActionsCell.tsx
- Line 29:
onClick={() => navigate(/experiments/${id})} - Line 30:
onClick={() => setDialogAction('duplicate')} - Line 32:
onClick={() => setDialogAction('archive')} - Line 35:
onClick={() => setDialogAction('delete')} - Line 44:
onClose={() => setDialogAction(null)}
src/apps/dashboard/Screens/Dashboard/Experiments/Library/CreateExperimentModal.tsx
- Line 88:
onCancel={() => setIsCreating(false)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/Header.tsx
- Line 86:
onClick={() => setDialogAction('duplicate')} - Line 89:
onClick={() => setDialogAction('archive')} - Line 92:
onClick={() => setDialogAction('delete')} - Line 199:
onCancel={() => setDialogAction(null)} - Line 214:
onCancel={() => setDialogAction(null)} - Line 232:
onCancel={() => setDialogAction(null)} - Line 246:
onCancel={() => setDialogAction(null)}
src/apps/dashboard/Screens/Dashboard/Settings/Billing/index.tsx
- Line 137:
onClick={() => createCheckoutSession(+price.id)}
src/apps/dashboard/Screens/Dashboard/Settings/AgencyTeam/index.tsx
- Line 125:
onClick={() => setInviteDialogOpen(true)} - Line 136:
onClick={() => setInviteDialogOpen(true)} - Line 176:
onClick={() => resendInvite(item.email)} - Line 217:
() => unblockUser(item.id) - Line 230:
() => blockUser(item.id) - Line 239:
onClick={() => resendInvite(item.email)} - Line 247:
() => deleteUser(item.id) - Line 303:
onClick={() => setInviteDialogOpen(false)} - Line 315:
onCancel={() => setConfirmDialog({ ...confirmDialog, open: false })}
src/apps/dashboard/Screens/Dashboard/Settings/OrganizationTeam/index.tsx
- Line 163:
onClick={() => setInviteDialogOpen(true)} - Line 176:
onClick={() => setInviteDialogOpen(true)} - Line 217:
onClick={() => resendInvite(item.email)} - Line 259:
() => unblockUser(item.id) - Line 272:
() => blockUser(item.id) - Line 281:
onClick={() => resendInvite(item.email)} - Line 289:
() => deleteUser(item.id) - Line 361:
onClick={() => setInviteDialogOpen(false)} - Line 373:
onCancel={() => setConfirmDialog({ ...confirmDialog, open: false })}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/VariantsConfig.tsx
- Line 57:
onClick={() => setShowAddVariant(true)} - Line 167:
onClose={() => setEditingVariant(null)} - Line 176:
onClose={() => setRenamingVariant(null)} - Line 180:
onClose={() => setShowAddVariant(false)} - Line 193:
onCancel={() => setDeletingVariant(null)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/CookieTargeting.tsx
- Line 50:
onClick={() => deleteCookieTargeting(item.id)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/DeviceTargeting.tsx
- Line 54:
onClick={() => deleteDeviceTargeting(device.id)} - Line 65:
onClick={() => setIsAddOpen(true)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/GoalsConfig.tsx
- Line 85:
onCancel={() => setIsDialogOpen(false)} - Line 97:
onCheckedChange={() => toggleGoal(tag.name)} - Line 113:
onCheckedChange={() => toggleGoal(tag.name)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/UrlTargeting.tsx
- Line 95:
onClick={() => openEditDialog(item)} - Line 98:
onClick={() => deleteUrlTargeting(item.id)} - Line 119:
onCancel={() => setEditItem(null)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentSettings/EditWeightsModal.tsx
- Line 25:
useState(() => String(Math.round((currentWeight || 0) / 100)))
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentInfo/Description.tsx
- Line 44:
onClick={() => setIsEditing(true)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentStatistics/StatisticsTable.tsx
- Line 209:
onClick={() => setWantsToDeploy(item)} - Line 227:
onCancel={() => setWantsToDeploy(null)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentInfo/Screenshots/ScreenshotItem.tsx
- Line 62:
onClick={() => setIsOpen(true)} - Line 65:
onLoad={() => setImageLoaded(true)} - Line 90:
onClick={() => setEditing(null)} - Line 107:
onClick={() => setWantsToDelete(true)} - Line 114:
onClose={() => setIsOpen(false)} - Line 119:
onCancel={() => setWantsToDelete(false)}
src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentInfo/Screenshots/ScreenshotList.tsx
- Line 49:
onMouseEnter={() => setHovered(screenshot.id)} - Line 49:
onMouseLeave={() => setHovered(null)}
src/apps/dashboard/Screens/Dashboard/Websites/List/index.tsx
- Line 71:
onClick={() => setIsCreating(true)} - Line 100:
onClick={() => setIsCreating(true)} - Line 112:
onClick={() => setWebsite(value as number)} - Line 167:
onClick={() => refreshPropertyTags(item)} - Line 190:
onClick={() => recheckPermissions(item.ganPropertyId!)} - Line 220:
onClick={() => handleDelete(value as number)}
src/apps/dashboard/Screens/Dashboard/Websites/List/ServerContainerUrl.tsx
- Line 18:
setTimeout(() => setNewServerContainerUrl(null), 400) - Line 45:
onClick={() => setNewServerContainerUrl(null)} - Line 53:
onClick={() => setNewServerContainerUrl(website.serverContainerUrl || '')}
src/apps/dashboard/Screens/Dashboard/Websites/List/ScriptsModal.tsx
- Line 18:
setTimeout(() => setCopiedText(null), 3000) - Line 23:
onClick={() => setIsOpen(true)} - Line 74:
onClick={() => setIsOpen(false)}
src/apps/dashboard/Screens/Dashboard/Websites/GoogleAnalytics/GoogleAnalyticsScreen.tsx
- Line 91:
onClick={() => refresh(item.email)}
src/apps/dashboard/Screens/Dashboard/DashboardLayout/index.tsx
- Line 17:
useGlobal<string>('PAGE_TITLE', () => getPageTitle(location.pathname, MENU_LINKS))
src/apps/dashboard/Screens/Dashboard/DashboardLayout/GlobalAlerts/index.tsx
- Line 14:
onClose={() => dismiss('Extension')} - Line 15:
onClose={() => dismiss('Passkeys')}
src/apps/dashboard/Screens/Dashboard/DashboardLayout/AppSidebar/Navigation.tsx
- Line 61:
onClick={() => setExpandedMenuItem(expandedMenuItem === item.key ? '' : item.key)}
src/apps/dashboard/Screens/Dashboard/DashboardLayout/AppSidebar/AccountWebsiteSelectors.tsx
- Line 42:
onClick={() => setOpenPanel('account')} - Line 55:
onClick={() => setOpenPanel('website')} - Line 315:
onClick={() => chooseOptionValue(option.value as number)}
Summary by Pattern Type
1. Boolean State Setters (e.g., setState(true/false))
Most common pattern - 60+ instances
2. Value State Setters (e.g., setState(someValue))
~40 instances
3. Handlers with Arguments (e.g., handleClick(id))
~35 instances
4. Callbacks to null (e.g., setItem(null))
~25 instances
5. Navigation (e.g., navigate(path))
~5 instances
6. setTimeout callbacks
~5 instances
High Priority (Inside loops/maps)
These create N function instances per render:
src/apps/editor/app/src/Editor/BottomToolbar/Screenshot/ScreenshotList.tsx:38-76src/apps/editor/app/src/EditorV2/LeftSidebar/ChangesTab.tsx:46-48src/apps/editor/app/src/EditorV2/RightSidebar/Breadcrumb.tsx:60,100src/apps/editor/app/src/EditorV2/LeftSidebar/HierarchyTab.tsx:25src/apps/dashboard/Screens/Dashboard/Experiments/Details/ExperimentInfo/Screenshots/ScreenshotList.tsx:49src/apps/dashboard/Screens/Dashboard/Settings/AgencyTeam/index.tsx(multiple in table rows)src/apps/dashboard/Screens/Dashboard/Settings/OrganizationTeam/index.tsx(multiple in table rows)src/apps/dashboard/Screens/Dashboard/Websites/List/index.tsx(multiple in table rows)src/apps/dashboard/Screens/Dashboard/Clients/index.tsx(multiple in table rows)