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 5256c8febd feat: extract business logic into custom React hooks (Phase 3.1)
Refactor components to use custom hooks for business logic, dramatically
simplifying component code while improving testability and reusability.

Changes:
- Create useSealedSecretEncryption() hook
  - Encapsulates complete encryption workflow
  - Handles validation, cert fetching, expiry checks, encryption
  - Built-in error handling with snackbar notifications
  - Returns ready-to-apply SealedSecret object
  - Type-safe Result<T, E> pattern

- Create useControllerHealth() hook
  - Encapsulates health monitoring logic
  - Auto-refresh with configurable interval
  - Manual refresh function
  - Loading state management
  - Proper cleanup

- Refactor EncryptDialog component
  - Simplified from 215 → 130 lines (-85 lines, -40%)
  - Business logic extracted to hook
  - Focus on presentation logic only
  - Much easier to understand and maintain

- Refactor ControllerStatus component
  - Simplified from 115 → 58 lines (-57 lines, -50%)
  - One-line hook usage
  - Perfect abstraction example

Benefits:
- Separation of concerns (business vs presentation)
- Reusable hooks across components
- Easier to test (hooks testable independently)
- Better maintainability (single source of truth)
- Code reduction: ~140 lines removed from components

Build: 352.05 kB (96.99 kB gzipped), +0.71 kB (+0.2%)
Phase 3.1 complete. 8 of 14 phases done (57%).

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:02:37 -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":6766,"mtime":1770865228824,"results":"24","hashOfConfig":"23"},{"size":9222,"mtime":1770864569171,"results":"25","hashOfConfig":"23"},{"size":4146,"mtime":1770864923688,"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":6728,"mtime":1770865172848,"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":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},"/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",["107","108"],[],{"ruleId":"109","severity":2,"message":"110","line":25,"column":3,"nodeType":null,"messageId":"111","endLine":25,"endColumn":17,"fix":"112"},{"ruleId":"113","severity":2,"message":"110","line":25,"column":3,"nodeType":"114","messageId":"111","endLine":25,"endColumn":17},"unused-imports/no-unused-imports","'SecretKeyValue' is defined but never used.","unusedVar",{"range":"115","text":"116"},"no-unused-vars","Identifier",[702,720],""]