adilallo/enhancement/PerformanceandReusability
main
This PR implements two performance and code organization improvements:
These changes improve code organization, reduce bundle size, and maintain performance while keeping all existing functionality intact.
useClickOutside
useAnalytics
useComponentId
useFormField
useComponentStyles
useSchemaData
useMediaQuery
useFormValidation
Select.tsx
AskOrganizer.tsx
Input.tsx
TextArea.tsx
Checkbox.tsx
NumberedCards.tsx
RelatedArticles.tsx
useIsMobile
app/layout.tsx
app/page.tsx
app/blog/[slug]/page.tsx
tests/unit/hooks/
docs/CUSTOM_HOOKS.md
next/dynamic
app/hooks/useClickOutside.ts
app/hooks/useAnalytics.ts
app/hooks/useComponentId.ts
app/hooks/useFormField.ts
app/hooks/useComponentStyles.ts
app/hooks/useSchemaData.ts
app/hooks/useMediaQuery.ts
app/hooks/useFormValidation.ts
app/hooks/index.ts
tests/unit/hooks/useClickOutside.test.jsx
tests/unit/hooks/useComponentId.test.jsx
tests/unit/hooks/useSchemaData.test.jsx
app/components/Select.tsx
app/components/AskOrganizer.tsx
app/components/Input.tsx
app/components/TextArea.tsx
app/components/Checkbox.tsx
app/components/NumberedCards.tsx
app/components/RelatedArticles.tsx
vitest.setup.ts
tests/unit/Page.test.jsx
tests/unit/AskOrganizer.test.jsx
N/A - Performance and code organization improvements, no visual changes
No dependencies set.
The note is not visible to the blocked user.
Extract Custom Hooks & Implement Code Splitting
Overview
This PR implements two performance and code organization improvements:
These changes improve code organization, reduce bundle size, and maintain performance while keeping all existing functionality intact.
Changes
Custom Hooks (8 hooks created)
useClickOutside- Detects clicks outside elements (used in Select.tsx)useAnalytics- Centralized analytics tracking (used in AskOrganizer.tsx)useComponentId- Generates unique component IDs for accessibilityuseFormField- Form field event handlers with disabled state handlinguseComponentStyles- Component size/state styling patternsuseSchemaData- Generates Schema.org structured data (JSON-LD)useMediaQuery- Responsive breakpoint detection with convenience hooksuseFormValidation- Form validation logic with common validation rulesComponents Refactored (7 components)
Select.tsx- UsesuseClickOutsideAskOrganizer.tsx- UsesuseAnalyticsInput.tsx- UsesuseComponentIdanduseFormFieldTextArea.tsx- UsesuseComponentIdanduseFormFieldCheckbox.tsx- UsesuseComponentIdNumberedCards.tsx- UsesuseSchemaDataRelatedArticles.tsx- UsesuseIsMobileCode Splitting Implementation
app/layout.tsx) - Below-the-fold, lazy loaded with SSRapp/page.tsx) - LogoWall, NumberedCards, RuleStack, FeatureGrid, QuoteBlockapp/blog/[slug]/page.tsx) - RelatedArticles (blog-specific)Testing & Documentation
tests/unit/hooks/)docs/CUSTOM_HOOKS.md)next/dynamicin test environmentFiles Added
app/hooks/useClickOutside.tsapp/hooks/useAnalytics.tsapp/hooks/useComponentId.tsapp/hooks/useFormField.tsapp/hooks/useComponentStyles.tsapp/hooks/useSchemaData.tsapp/hooks/useMediaQuery.tsapp/hooks/useFormValidation.tsapp/hooks/index.tstests/unit/hooks/useClickOutside.test.jsxtests/unit/hooks/useComponentId.test.jsxtests/unit/hooks/useSchemaData.test.jsxdocs/CUSTOM_HOOKS.mdFiles Modified
app/components/Select.tsxapp/components/AskOrganizer.tsxapp/components/Input.tsxapp/components/TextArea.tsxapp/components/Checkbox.tsxapp/components/NumberedCards.tsxapp/components/RelatedArticles.tsxapp/layout.tsxapp/page.tsxapp/blog/[slug]/page.tsxvitest.setup.tstests/unit/Page.test.jsxtests/unit/AskOrganizer.test.jsxScreenshots
N/A - Performance and code organization improvements, no visual changes
How to Test
npm run build