feat(elixir): image upload function with preview

This commit is contained in:
Schuwi
2025-09-14 13:23:45 +02:00
parent ece9850713
commit b9126c286f
3 changed files with 267 additions and 19 deletions

View File

@@ -116,18 +116,56 @@ The application uses a simple password-based authentication system:
| Manual editing | `Inventory.update_component/2` | **NEW**: Full edit functionality with validation |
| `changeAmount.php` | `Inventory.update_component_count/2` | Atomic operations, constraints |
| Manual category management | `CategoriesLive` + `Inventory.create_category/1` | **NEW**: Full category CRUD with web interface |
| `imageUpload.php` | (Future: Phoenix file uploads) | Planned improvement |
| `imageUpload.php` | Phoenix LiveView file uploads with `.live_file_input` | **IMPLEMENTED**: Full image upload with preview, validation, and automatic cleanup |
| Session management | Phoenix sessions + LiveView | Built-in CSRF protection |
## Future Enhancements
1. **Image Upload**: Implement Phoenix file uploads for component images
1. ~~**Image Upload**: Implement Phoenix file uploads for component images~~ ✅ **COMPLETED**
2. **Bulk Operations**: Import/export components via CSV
3. **API Endpoints**: REST API for external integrations
4. **User Management**: Multi-user support with roles and permissions
5. **Advanced Search**: Filters by category, stock level, etc.
6. **Barcode/QR Codes**: Generate and scan codes for quick inventory updates
## ✅ Recently Implemented Features
### Image Upload System
- **Phoenix LiveView file uploads** with `.live_file_input` component
- **Image preview** during upload with progress indication
- **File validation** (JPG, PNG, GIF up to 5MB)
- **Automatic cleanup** of old images when updated or deleted
- **Responsive image display** in component listings with fallback placeholders
- **Upload error handling** with user-friendly messages
### Visual Datasheet Indicators
- **Datasheet emoji** (📄) displayed next to component names when datasheet URL is present
- **Clickable datasheet links** with clear visual indication
- **Improved component listing** with image thumbnails and datasheet indicators
### Technical Implementation Details
#### Image Upload Architecture
- **LiveView uploads** configured with `allow_upload/3` in mount
- **File processing** with `consume_uploaded_entries/3` for secure file handling
- **Unique filename generation** to prevent conflicts
- **Static file serving** through Phoenix.Plug.Static with `/uploads` path
- **Database integration** with `image_filename` field in components schema
#### Upload Features
- **File type validation**: Only JPG, PNG, GIF files accepted
- **Size limits**: Maximum 5MB per file
- **Single file uploads**: One image per component
- **Progress indication**: Real-time upload progress display
- **Cancel functionality**: Users can cancel uploads in progress
- **Preview system**: Live image preview before form submission
#### File Management
- **Automatic cleanup**: Old images deleted when new ones uploaded
- **Orphan prevention**: Images deleted when components are removed
- **Error handling**: Graceful fallback for missing or corrupted files
- **Static serving**: Images served directly through Phoenix static file handler
## Development
### Running Tests