# Component Reuse Strategy **Created**: June 13, 2025 **Purpose**: Document reusable components and optimization patterns for ThrillWiki Laravel project ## Core Philosophy **Reuse First, Create Second** - Always exhaust existing component options before building new functionality. ## Reusable Component Inventory ### Navigation Components - [`AuthMenuComponent`](../../app/Livewire/AuthMenuComponent.php) - Authentication menu (reusable pattern) - [`UserMenuComponent`](../../app/Livewire/UserMenuComponent.php) - User dropdown menu - [`MobileMenuComponent`](../../app/Livewire/MobileMenuComponent.php) - Mobile navigation - [`ThemeToggleComponent`](../../app/Livewire/ThemeToggleComponent.php) - Theme switcher **Reuse Potential**: Menu components can be extended for different entity types ### Search & Discovery - [`SearchComponent`](../../app/Livewire/SearchComponent.php) - **HIGH REUSE POTENTIAL** - Currently configured for parks - Can be parameterized for rides, operators, manufacturers - Filtering logic is entity-agnostic - [`AutocompleteComponent`](../../app/Livewire/AutocompleteComponent.php) - **HIGH REUSE POTENTIAL** - Already supports multiple types (park, ride) - Easy to extend for companies, designers ### Photo Management (Universal) - [`PhotoUploadComponent`](../../app/Livewire/PhotoUploadComponent.php) - **UNIVERSAL REUSE** - Works with any model using polymorphic relationships - Can be extended for different file types - [`PhotoGalleryComponent`](../../app/Livewire/PhotoGalleryComponent.php) - **UNIVERSAL REUSE** - Generic photo display and management - Reusable across all photo-enabled models - [`PhotoManagerComponent`](../../app/Livewire/PhotoManagerComponent.php) - **HIGH REUSE** - Photo organization and reordering - Works with any photoable model - [`FeaturedPhotoSelectorComponent`](../../app/Livewire/FeaturedPhotoSelectorComponent.php) - **HIGH REUSE** - Featured photo selection logic - Reusable for any model with featured photos ### Form Components - [`ParkFormComponent`](../../app/Livewire/ParkFormComponent.php) - **TEMPLATE FOR REUSE** - Pattern for entity CRUD forms - Location integration example - Validation patterns - [`ParkAreaFormComponent`](../../app/Livewire/ParkAreaFormComponent.php) - **HIERARCHICAL PATTERN** - Parent-child relationship handling - Reusable for any hierarchical entities - [`RideFormComponent`](../../app/Livewire/RideFormComponent.php) - **COMPLEX FORM PATTERN** - Multi-relationship handling - Conditional fields (coaster stats) - **Template for manufacturer, designer forms** ### Review System - [`RideReviewComponent`](../../app/Livewire/RideReviewComponent.php) - **ADAPTABLE PATTERN** - Review submission logic - Can be parameterized for different reviewable entities - [`RideReviewListComponent`](../../app/Livewire/RideReviewListComponent.php) - **HIGH REUSE** - Review display and filtering - Helpful vote integration - Reusable for any reviewed entity - [`ReviewModerationComponent`](../../app/Livewire/ReviewModerationComponent.php) - **UNIVERSAL ADMIN** - Generic moderation interface - Works with any moderatable content ### Statistics Components - [`AreaStatisticsComponent`](../../app/Livewire/AreaStatisticsComponent.php) - **PATTERN FOR REUSE** - Statistics display with toggle details - Template for park, operator statistics ## Service Layer Reuse ### Universal Services - [`GeocodeService`](../../app/Services/GeocodeService.php) - **UNIVERSAL** - Works with any location-enabled model - Caching and rate limiting included - [`StatisticsCacheService`](../../app/Services/StatisticsCacheService.php) - **EXTENSIBLE** - Caching patterns for any entity statistics - Easy to add new entity types - [`StatisticsRollupService`](../../app/Services/StatisticsRollupService.php) - **EXTENSIBLE** - Data aggregation patterns - Template for new aggregation needs - [`IdGenerator`](../../app/Services/IdGenerator.php) - **UNIVERSAL** - Unique ID generation for any model ## Model Trait Reuse ### Universal Traits - [`HasLocation`](../../app/Traits/HasLocation.php) - **UNIVERSAL** - Location functionality for any model - Geocoding integration - [`HasSlugHistory`](../../app/Traits/HasSlugHistory.php) - **UNIVERSAL** - URL management and slug tracking - SEO-friendly URLs for any model - [`TrackedModel`](../../app/Traits/TrackedModel.php) - **UNIVERSAL** - Audit trail functionality - Change tracking for any model - [`HasAreaStatistics`](../../app/Traits/HasAreaStatistics.php) - **PATTERN** - Statistics calculation template - [`HasParkStatistics`](../../app/Traits/HasParkStatistics.php) - **PATTERN** - Aggregation logic template ## Reuse Implementation Process ### 1. Assessment Phase ```markdown Before creating any new component: 1. List required functionality 2. Check existing components for similar features 3. Identify which components can be extended 4. Document reuse strategy ``` ### 2. Extension Strategies #### Parameter-Based Extension - Add optional properties for different contexts - Use conditional rendering for entity-specific features - Maintain backward compatibility #### Composition Pattern - Break complex components into smaller, reusable parts - Create base components for shared functionality - Use slots and props for customization #### Template Method Pattern - Create abstract base components - Override specific methods for entity differences - Maintain consistent interfaces ### 3. Documentation Requirements - Document component parameters and options - Provide usage examples for different contexts - Update reuse patterns in Memory Bank - Track successful extension cases ## Immediate Reuse Opportunities ### For Ride System Implementation 1. **Extend SearchComponent** for ride filtering 2. **Reuse PhotoGalleryComponent** for ride photos 3. **Adapt RideReviewComponent** pattern 4. **Extend AutocompleteComponent** for ride search ### For Company Pages 1. **Template from ParkFormComponent** for company forms 2. **Reuse SearchComponent** for company filtering 3. **Adapt StatisticsComponent** for company stats 4. **Reuse PhotoUploadComponent** for company logos ### For User Profiles 1. **Template from ProfileComponent** patterns 2. **Reuse PhotoUploadComponent** for avatars 3. **Adapt StatisticsComponent** for user stats 4. **Reuse SearchComponent** for user content ## Quality Standards ### Backward Compatibility - Ensure extended components don't break existing usage - Provide default values for new parameters - Maintain consistent method signatures ### Testing Requirements - Test component reusability across contexts - Verify parameter combinations work correctly - Document edge cases and limitations ### Performance Considerations - Lazy load entity-specific features - Cache component configurations - Optimize for multiple usage contexts ## Success Metrics ### Development Efficiency - Time saved by reusing vs. creating new components - Reduction in code duplication - Faster feature implementation ### Code Quality - Consistency across similar features - Reduced maintenance burden - Better test coverage through shared components ### Documentation Quality - Clear reuse patterns documented - Component capabilities well-defined - Extension examples provided