Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
11de287
Enforce 255 char max
JohYoshidaBCGov Apr 7, 2026
1e4d5ed
Consistently use SchemaHelper's getLabelTextField
JohYoshidaBCGov Apr 8, 2026
1f4d96f
De-duplicate hide label toggle
JohYoshidaBCGov Apr 8, 2026
5c7b33a
De-duplicate options repeaters
JohYoshidaBCGov Apr 9, 2026
a1831e3
Disable Duplicate button as the feature is buggy
JohYoshidaBCGov Apr 9, 2026
c204b7c
Add links to Build page
JohYoshidaBCGov Apr 9, 2026
6f5107f
Standardize icon/colour scheme
JohYoshidaBCGov Apr 9, 2026
aa05687
Merge pull request #468 from bcgov/ADO-2194-Bug--Server-error-when-ex…
JohYoshidaBCGov Apr 22, 2026
f446dc7
Use badges as in other places
JohYoshidaBCGov Jun 18, 2026
fc9e09a
Improve sortability, searchability, and toggleability in FormResource
JohYoshidaBCGov Jun 18, 2026
9e3ea52
Add Forms to navigation sidebar
JohYoshidaBCGov Jun 18, 2026
c6c2a73
Merge branch 'dev' into Add-links-to-Build-page
JohYoshidaBCGov Jun 22, 2026
e5d98b8
Autolint
JohYoshidaBCGov Jun 25, 2026
01717c7
Update model to handle new states
JohYoshidaBCGov Jun 25, 2026
591c423
Update FormElement builder modal
JohYoshidaBCGov Jun 25, 2026
82a3652
Update JSON output
JohYoshidaBCGov Jun 26, 2026
206092d
Update template management resource
JohYoshidaBCGov Jun 26, 2026
5351ad5
Update importer
JohYoshidaBCGov Jun 26, 2026
01aeb2f
Merge pull request #471 from bcgov/Add-ICM-toggle-buttons
JohYoshidaBCGov Jun 30, 2026
ce668bb
Merge pull request #472 from bcgov/Add-links-to-Build-page
JohYoshidaBCGov Jun 30, 2026
888878c
Set ToggleButtons with null value to 'never'
JohYoshidaBCGov Jul 2, 2026
420b2b7
Fix incorrect UserType path
JohYoshidaBCGov Jul 2, 2026
f16198a
Merge pull request #473 from bcgov/Bugfix--null-ToggleButtons-to-'never'
JohYoshidaBCGov Jul 6, 2026
4ab2ea3
Update seeders to ensure values for bulk update are present and match…
JohYoshidaBCGov Jul 7, 2026
3f82f0b
Add seeder
JohYoshidaBCGov Jul 7, 2026
f51d0d5
Convert database columns in camel case to snake case
JohYoshidaBCGov Jul 9, 2026
9298c98
Import model classes
JohYoshidaBCGov Jul 9, 2026
5a249ea
Create SelectOptions for CheckboxGroups
JohYoshidaBCGov Jul 9, 2026
ad1c903
Update seeder to reflect production & include required 'migration2025…
JohYoshidaBCGov Jul 14, 2026
8dc81f8
Since migration2025_status is a tag, not a database column, it can't …
JohYoshidaBCGov Jul 14, 2026
dcd638e
Merge pull request #474 from bcgov/ADO-4146-Form-bulk-updates
JohYoshidaBCGov Jul 16, 2026
db28d3c
Merge pull request #475 from bcgov/ADO-4194-Fix-migration_2025_status…
JohYoshidaBCGov Jul 20, 2026
b90142e
Simplify normalizeSchema
JohYoshidaBCGov Jul 21, 2026
d184b39
Fix template import
JohYoshidaBCGov Jul 21, 2026
2fef47f
Add notifications for template conflicts
JohYoshidaBCGov Jul 22, 2026
9bd5367
Refactor element and option creation
JohYoshidaBCGov Jul 22, 2026
b47f3b0
Remove unused methods
JohYoshidaBCGov Jul 22, 2026
f8f01bc
Fix attribute nesting
JohYoshidaBCGov Jul 22, 2026
bbd775d
Add value to extractOptions and remove handling for non-formversion f…
JohYoshidaBCGov Jul 22, 2026
f2987f4
Improve documentation
JohYoshidaBCGov Jul 22, 2026
76f0403
Convert attribute keys to snake_case
JohYoshidaBCGov Jul 22, 2026
bada750
Remove JSON v1 download/copy
JohYoshidaBCGov Jul 23, 2026
1c51f06
Cleaner filename for JSON downloads
JohYoshidaBCGov Jul 23, 2026
c192a3f
Clearer name for Style editor
JohYoshidaBCGov Jul 23, 2026
a1bc685
Merge remote-tracking branch 'origin/dev' into ADO-3869-Fix-importer
JohYoshidaBCGov Jul 24, 2026
c2f935e
Merge pull request #477 from bcgov/ADO-3869-Fix-importer
JohYoshidaBCGov Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 43 additions & 14 deletions app/Filament/Forms/Resources/ElementTemplateManagementResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,21 +71,20 @@ public static function table(Table $table): Table
Tables\Columns\TextColumn::make('data_path_preview')->label('Data path')
->state(fn(FormElement $r) => optional($r->dataBindings->first())->path)
->copyable()->toggleable(isToggledHiddenByDefault: true),
// hidden-by-default fields(some were above for displaying orders)
Tables\Columns\IconColumn::make('visible_web')->label('Visible (Web)')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\IconColumn::make('visible_pdf')->label('Visible (PDF)')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\IconColumn::make('is_required')->label('Required')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\IconColumn::make('is_read_only')->label('Read‑only')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
// hidden-by-default fields (some were above for displaying orders)
self::makeStatusColumn('visible_web', 'Visible (Web)'),
self::makeStatusColumn('visible_pdf', 'Visible (PDF)'),
self::makeStatusColumn('is_required', 'Required'),
self::makeStatusColumn('is_read_only', 'Read‑only'),
Tables\Columns\IconColumn::make('save_on_submit')->label('Save on Submit')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
// Tables\Columns\IconColumn::make('is_template')->label('Is template')->boolean()->sortable()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('source_element_id')->label('Source element ID')->sortable()->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('custom_read_only')->label('Custom Read Only')->wrap()->toggleable(isToggledHiddenByDefault: true)->searchable(),
])
->filters([
SelectFilter::make('elementable_type')->label('Element type')->options(function () {
// Canonical label map from the model
$labels = FormElement::getAvailableElementTypes(); // [FQCN => 'Text Input', ...]

// Only show types that are present among templates
$typesInDb = FormElement::query()
->where('is_template', true)
Expand All @@ -107,18 +106,18 @@ public static function table(Table $table): Table
return $options; // [FQCN => 'Text Input', ...]
}),
SelectFilter::make('tags')->relationship('tags', 'name')->label('Tags')->multiple(),
TernaryFilter::make('visible_web')->label('Visible on Web')->boolean(),
TernaryFilter::make('visible_pdf')->label('Visible on PDF')->boolean(),
TernaryFilter::make('is_required')->label('Required')->boolean(),
TernaryFilter::make('is_read_only')->label('Read‑only')->boolean(),
self::makeStatusFilter('visible_web', 'Visible on Web'),
self::makeStatusFilter('visible_pdf', 'Visible on PDF'),
self::makeStatusFilter('is_required', 'Required'),
self::makeStatusFilter('is_read_only', 'Read‑only'),
TernaryFilter::make('save_on_submit')->label('Save on Submit')->boolean(),
TernaryFilter::make('is_template')->label('Is Template')->boolean(),
// TernaryFilter::make('is_template')->label('Is Template')->boolean(),
])
// edit and untemplate action buttons
->actions([
Tables\Actions\Action::make('openBuilder')
->label('To Builder')
->icon('heroicon-o-cube-transparent')
->icon('heroicon-o-wrench-screwdriver')
->visible(fn(FormElement $r) => filled($r->form_version_id))
->url(fn(FormElement $r) => url("/forms/form-versions/{$r->form_version_id}/build"))
->openUrlInNewTab(),
Expand Down Expand Up @@ -207,4 +206,34 @@ private static function getElementTypeLabels(): array
// Fallback: empty map; callers will fallback to class_basename
return [];
}
}

/**
* Create a badge column for visibility/requirement/read-only fields.
*/
private static function makeStatusColumn(string $field, string $label): Tables\Columns\TextColumn
{
return Tables\Columns\TextColumn::make($field)
->label($label)
->formatStateUsing(fn($state) => FormElement::getToggleButtonStates()[$state] ?? $state)
->badge()
->color(fn($state) => match ($state) {
'always' => 'success',
'icm' => 'info',
'portal' => 'info',
'never' => 'gray',
})
->sortable()
->toggleable(isToggledHiddenByDefault: true);
}

/**
* Create a filter for visibility/requirement/read-only fields.
*/
private static function makeStatusFilter(string $field, string $label): SelectFilter
{
return SelectFilter::make($field)
->label($label)
->multiple()
->options(FormElement::getToggleButtonStates());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Filament\Forms\Resources\ElementTemplateManagementResource\Pages;

use App\Filament\Forms\Resources\ElementTemplateManagementResource;
use App\Filament\Forms\Resources\FormVersionResource;
use App\Helpers\GeneralTabHelper;
use App\Models\FormBuilding\FormElement;
use Filament\Actions;
Expand All @@ -15,6 +16,7 @@
use Filament\Forms\Components\Toggle;
use Filament\Resources\Pages\ViewRecord;
use Filament\Forms\Components\Actions\Action as FieldAction;
use Illuminate\Support\Facades\Gate;

class ViewElementTemplateManagement extends ViewRecord
{
Expand Down Expand Up @@ -44,6 +46,14 @@ protected function getHeaderActions(): array
->icon('heroicon-o-pencil-square')
->url(ElementTemplateManagementResource::getUrl('edit', ['record' => $record]))
->visible(!$isParented),

Actions\Action::make('build')
->label('To Builder')
->icon('heroicon-o-wrench-screwdriver')
->url(fn() => FormVersionResource::getUrl('build', ['record' => $this->record->form_version_id]))
->color('primary')
->outlined()
->visible(fn() => Gate::allows('form-developer')),
];
}

Expand Down
40 changes: 28 additions & 12 deletions app/Filament/Forms/Resources/FormResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -474,18 +474,25 @@ public static function table(Table $table): Table
Tables\Columns\TextColumn::make('decommissioned')
->label('Status')
->badge()
->sortable()
->searchable()
->formatStateUsing(fn(bool $state): string => $state ? 'Inactive' : 'Active')
->color(fn(bool $state): string => $state ? 'danger' : 'success'),
Tables\Columns\TextColumn::make('ministry.short_name')
->searchable()
->sortable()
->toggleable()
->label('Ministry'),
Tables\Columns\TextColumn::make('businessAreas.name')
->label('Business Areas')
->badge()
->label('Business Areas'),
->toggleable()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('form_purpose')
->searchable()
->limit(30)
->toggleable(isToggledHiddenByDefault: true)
->tooltip(function ($record): ?string {
$form_purpose = optional($record)->form_purpose ?? '';
return Str::length($form_purpose) > 30
Expand All @@ -494,8 +501,7 @@ public static function table(Table $table): Table
}),
Tables\Columns\TextColumn::make('notes')
->searchable()
->toggleable()
->toggledHiddenByDefault(true)
->toggleable(isToggledHiddenByDefault: true)
->limit(30)
->tooltip(function ($record): ?string {
$notes = optional($record)->notes ?? '';
Expand All @@ -504,31 +510,41 @@ public static function table(Table $table): Table
: null;
}),
Tables\Columns\TextColumn::make('formFrequency.name')
->label('Usage Frequency'),
->label('Usage Frequency')
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('formReach.name')
->label('Audience Size'),
->label('Audience Size')
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('icm_generated')
->label('ICM Generated')
->badge()
->formatStateUsing(fn($state) => $state ? 'Yes' : 'No')
->color(fn($state) => $state ? 'success' : 'danger')
->label('ICM Generated'),
->toggleable()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('formSoftwareSources.name')
->label('Software Sources')
->badge()
->label('Software Sources'),
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('formLocations.name')
->label('Published Locations')
->badge()
->label('Published Locations'),
->toggleable()
->sortable()
->searchable(),
Tables\Columns\TextColumn::make('formTags.name')
->label('Tags')
->badge()
->label('Tags'),
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('dcv_material_number')
->label('DCV Material Number')
->searchable()
->toggleable()
->toggledHiddenByDefault(true)
->label('DCV Material Number'),
->toggleable(isToggledHiddenByDefault: true),
Tables\Columns\TextColumn::make('migration2025_status')
->label('Migration 2025 Status')
->badge()
->toggleable()
->getStateUsing(fn($record) => $record->migration2025_status)
->color(function ($state) {
return match ($state) {
Expand Down
12 changes: 10 additions & 2 deletions app/Filament/Forms/Resources/FormResource/Pages/ViewForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,22 @@ protected function getHeaderActions(): array
$actions = [];

if (Gate::allows('admin') || Gate::allows('form-developer')) {
$actions[] = Actions\EditAction::make();
$actions[] = Actions\EditAction::make()
->outlined()
->icon('heroicon-s-pencil-square');

if ($hasVersions) {
$actions[] = Actions\Action::make('view_latest_version')
->label('View latest version')
->icon('heroicon-o-document-text')
->icon('heroicon-s-eye')
->url(fn() => FormVersionResource::getUrl('view', ['record' => $latestVersion]))
->color('gray')
->outlined();

$actions[] = Actions\Action::make('build_latest_version')
->label('Build latest version')
->icon('heroicon-s-wrench-screwdriver')
->url(fn() => FormVersionResource::getUrl('build', ['record' => $latestVersion]));
}
} else {
// For regular users, show preview button if versions exist
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,7 @@
use Filament\Tables;
use Illuminate\Support\Facades\Gate;
use App\Filament\Forms\Resources\FormVersionResource;
use App\Helpers\FormVersionHelper;
use Filament\Forms\Components\DatePicker;
use App\Models\FormBuilding\FormScript;
use App\Models\FormBuilding\StyleSheet;
use App\Models\FormBuilding\FormVersionFormDataSource;
use App\Models\FormBuilding\FormElementDataBinding;
use Illuminate\Support\Facades\Auth;
use Filament\Tables\Actions\Action;
use Illuminate\Support\Str;

class FormVersionRelationManager extends RelationManager
{
Expand All @@ -38,7 +30,10 @@ public function table(Tables\Table $table): Tables\Table
->sortable(),
Tables\Columns\TextColumn::make('formatted_status')
->label('Status')
->getStateUsing(fn($record) => $record->getFormattedStatusName()),
->badge()
->color(fn($state) => FormVersion::getStatusColour($state))
->getStateUsing(fn($record) => $record->getFormattedStatusName())
->sortable(),
Tables\Columns\TextColumn::make('formDeveloper.name')
->label('Developer')
->sortable(),
Expand Down Expand Up @@ -86,6 +81,10 @@ public function table(Tables\Table $table): Tables\Table
Tables\Actions\EditAction::make()
->url(fn(FormVersion $record) => FormVersionResource::getUrl('edit', ['record' => $record]))
->visible(fn($record) => (in_array($record->status, ['draft', 'testing'])) && Gate::allows('form-developer')),
Tables\Actions\Action::make('Build')
->url(fn(FormVersion $record) => FormVersionResource::getUrl('build', ['record' => $record]))
->visible(fn($record) => (in_array($record->status, ['draft', 'testing'])) && Gate::allows('form-developer'))
->icon('heroicon-s-wrench-screwdriver'),
// Duplicate form version currently disabled due to ADO bugs 3302 and 3303
// Action::make('duplicate')
// ->label('Duplicate')
Expand Down
Loading
Loading