# Clean Code Guidelines for Filament Resources This document outlines the coding standards and structure for Filament Resources in this project. ## 1. Class Properties Properties within the Resource class should be ordered alphabetically. **Example:** ```php protected static ?string $model = User::class; protected static ?string $navigationGroup = 'Master'; protected static string|BackedEnum|null $navigationIcon = Heroicon::UserGroup; protected static ?string $navigationLabel = 'Pengguna'; protected static ?int $navigationSort = 7; protected static ?string $recordTitleAttribute = 'name'; protected static ?string $slug = 'master/users'; ``` ## 2. Form Structure Form components should be structured with method calls in the following order: 1. **Basic**: `make`, `label`, `placeholder` 2. **HTML Attributes**: `autocomplete`, `autofocus`, etc. 3. **Validation**: `required`, `maxLength`, `email`, `unique`, `regex`, etc. 4. **Filament/Logic**: `relationship`, `live`, `afterStateUpdated`, etc. **Formatting:** - Use a blank line between each component definition. **Example:** ```php TextInput::make('name') ->label('Nama') ->placeholder('John Doe') ->autocomplete(false) ->autofocus() ->required() ->maxLength(100), TextInput::make('email') ->label('Alamat Surel') ->placeholder('email@example.com') ->autocomplete(false) ->required() ->email(), ``` ## 3. Table Structure ### Columns Column definitions should be structured in the following order: 1. **Basic**: `make`, `label` 2. **Search & Sort**: `searchable`, `sortable` (These should be present for most fields) 3. **State & Attributes**: `getStateUsing`, `updateStateUsing`, `badge`, `icon` 4. **Formatting**: `dateTime`, `money`, etc. **Formatting:** - Use a blank line between each column definition. **Example:** ```php TextColumn::make('name') ->label('Nama') ->searchable() ->sortable(), ToggleColumn::make('is_active') ->label('Status') ->sortable() ->updateStateUsing(...), ``` ### Table Method Order The methods chained to the `$table` object should follow this order: 1. `columns([\ ... ])` 2. `filters([\ ... ])` 3. `recordActions([\ ... ])` (or `actions`) 4. `toolbarActions([\ ... ])` (or `headerActions`) 5. `emptyStateIcon(...)` 6. `emptyStateDescription(...)` 7. `defaultSort(...)` 8. `deferFilters(...)` 9. Other configuration methods. ## 4. General Formatting - Ensure consistent indentation. - Always use a blank line to separate distinct logical blocks or component definitions to improve readability.