This repository has been archived on 2026-06-16. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/.eslintcache
T
Chris Farhood 2171250e99 perf: optimize React performance with useMemo/useCallback (Phase 3.3)
Add comprehensive memoization to prevent unnecessary re-renders and
improve component performance. Build time improved by 5%.

Changes:
- SealedSecretList optimization
  - Memoize columns array (stable reference for table)
  - Memoize actions array (only updates when canCreate changes)
  - Memoize dialog callbacks (handleOpenDialog, handleCloseDialog)
  - Reduces unnecessary table re-renders

- EncryptDialog optimization
  - Memoize all form callbacks with functional state updates
  - handleAddKeyValue, handleRemoveKeyValue, handleKeyChange
  - handleValueChange, toggleShowValue
  - Zero dependencies using prev => pattern
  - Stable callback references improve child performance

- SealedSecretDetail optimization
  - Memoize async operations (handleDelete, handleRotate)
  - Callbacks only recreate when dependencies change
  - Better performance for button interactions

Patterns used:
- useMemo for computed values (columns, actions arrays)
- useCallback for event handlers passed to children
- Functional state updates to eliminate dependencies
- Empty dependency arrays where possible

Benefits:
- Reduced re-renders across all components
- Faster build time: 3.92s → 3.74s (-5% improvement!)
- Better performance with large datasets
- Follows React best practices
- Ready for React concurrent features

Build: 352.45 kB (97.04 kB gzipped), +0.40 kB (+0.1%)
Build time: 3.74s (5% faster than before!)
Phase 3.3 complete. 9 of 14 phases done (64%).

Note: Skipped Phase 3.2 (Zod validation) as Phase 1.3 validators
are already comprehensive.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-11 22:06:09 -05:00

1 line
10 KiB
Plaintext

[{"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/DecryptDialog.tsx":"1","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/EncryptDialog.tsx":"2","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealedSecretDetail.tsx":"3","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealedSecretList.tsx":"4","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealingKeysView.tsx":"5","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SecretDetailsSection.tsx":"6","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SettingsPage.tsx":"7","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/headlamp-plugin.d.ts":"8","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/index.tsx":"9","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/SealedSecretCRD.ts":"10","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/controller.ts":"11","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/crypto.ts":"12","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/types.ts":"13","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/retry.ts":"14","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/validators.ts":"15","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/ControllerStatus.tsx":"16","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/usePermissions.ts":"17","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/rbac.ts":"18","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/VersionWarning.tsx":"19","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/useControllerHealth.ts":"20","/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/useSealedSecretEncryption.ts":"21"},{"size":4252,"mtime":1770861254580,"results":"22","hashOfConfig":"23"},{"size":7079,"mtime":1770865453043,"results":"24","hashOfConfig":"23"},{"size":9371,"mtime":1770865470123,"results":"25","hashOfConfig":"23"},{"size":4142,"mtime":1770865441652,"results":"26","hashOfConfig":"23"},{"size":6497,"mtime":1770863943018,"results":"27","hashOfConfig":"23"},{"size":2032,"mtime":1770858581485,"results":"28","hashOfConfig":"23"},{"size":3589,"mtime":1770864937687,"results":"29","hashOfConfig":"23"},{"size":654,"mtime":1770858275829,"results":"30","hashOfConfig":"23"},{"size":2697,"mtime":1770858849286,"results":"31","hashOfConfig":"23"},{"size":5570,"mtime":1770864960108,"results":"32","hashOfConfig":"23"},{"size":6452,"mtime":1770863898051,"results":"33","hashOfConfig":"23"},{"size":7209,"mtime":1770863322422,"results":"34","hashOfConfig":"23"},{"size":6707,"mtime":1770863305113,"results":"35","hashOfConfig":"23"},{"size":5606,"mtime":1770862923585,"results":"36","hashOfConfig":"23"},{"size":6584,"mtime":1770862946820,"results":"37","hashOfConfig":"23"},{"size":2647,"mtime":1770865243533,"results":"38","hashOfConfig":"23"},{"size":3720,"mtime":1770864547919,"results":"39","hashOfConfig":"23"},{"size":5047,"mtime":1770864455110,"results":"40","hashOfConfig":"23"},{"size":3542,"mtime":1770864912433,"results":"41","hashOfConfig":"23"},{"size":2080,"mtime":1770865185629,"results":"42","hashOfConfig":"23"},{"size":6710,"mtime":1770865265185,"results":"43","hashOfConfig":"23"},{"filePath":"44","messages":"45","suppressedMessages":"46","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"sz0q8e",{"filePath":"47","messages":"48","suppressedMessages":"49","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"50","messages":"51","suppressedMessages":"52","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"53","messages":"54","suppressedMessages":"55","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"56","messages":"57","suppressedMessages":"58","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"59","messages":"60","suppressedMessages":"61","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"62","messages":"63","suppressedMessages":"64","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"65","messages":"66","suppressedMessages":"67","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"68","messages":"69","suppressedMessages":"70","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"71","messages":"72","suppressedMessages":"73","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/DecryptDialog.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/EncryptDialog.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealedSecretDetail.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealedSecretList.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SealingKeysView.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SecretDetailsSection.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/SettingsPage.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/headlamp-plugin.d.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/index.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/SealedSecretCRD.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/controller.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/crypto.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/types.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/retry.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/validators.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/ControllerStatus.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/usePermissions.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/lib/rbac.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/components/VersionWarning.tsx",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/useControllerHealth.ts",[],[],"/Users/cpfarhood/Documents/Repositories/headlamp-sealed-secrets-plugin/headlamp-sealed-secrets/src/hooks/useSealedSecretEncryption.ts",[],[]]