*/ public static string $model = \App\Models\QuestionGroup::class; /** * The single value that should be used to represent the resource when being displayed. * * @var string */ public static $title = 'name'; /** * The columns that should be searched. * * @var array */ public static $search = ['id', 'name']; /** * Indicates if the resource should be displayed in the sidebar. * * @var bool */ public static $displayInNavigation = true; /** * Get the displayable label of the resource. */ public static function label(): string { return 'Question Groups'; } /** * Get the displayable singular label of the resource. */ public static function singularLabel(): string { return 'Question Group'; } /** * Get the fields displayed by the resource. * * @return array */ public function fields(NovaRequest $request): array { return [ ID::make()->sortable(), BelongsTo::make('Category', 'category', CategoryResource::class) ->sortable() ->filterable() ->rules('required') ->help('The assessment category this group of questions belongs to, such as Audit or Tax.'), Text::make('Name') ->sortable() ->filterable() ->copyable() ->rules('required', 'max:255') ->help('The title of this question group, shown as a section heading in the questionnaire.'), Number::make('Sort Order') ->sortable() ->filterable() ->copyable() ->rules('required', 'integer') ->help('Controls the display order within the category. Lower numbers appear first.'), Textarea::make('Description') ->rules('nullable') ->help('An optional description shown to users at the top of this question group.'), Textarea::make('Scoring Instructions') ->rules('nullable') ->help('Optional instructions shown to users explaining how this section is scored, e.g. "If you answer yes, you will score 1 point."'), HasMany::make('Questions', 'questions', QuestionResource::class), ]; } /** * Get the cards available for the request. * * @return array */ public function cards(NovaRequest $request): array { return []; } /** * Get the filters available for the resource. * * @return array */ public function filters(NovaRequest $request): array { return []; } /** * Get the lenses available for the resource. * * @return array */ public function lenses(NovaRequest $request): array { return []; } /** * Get the actions available for the resource. * * @return array */ public function actions(NovaRequest $request): array { return [ new DownloadExcel, ]; } }