components([ TextInput::make('key') ->label('کلید') ->helperText('در فایل پاورپوینت برای متن به‌صورت {{key}} و برای عکس/چارت به‌صورت نام شکل (shape name) استفاده می‌شود.') ->required() ->maxLength(255), TextInput::make('label') ->label('برچسب') ->required() ->maxLength(255), Select::make('type') ->label('نوع') ->options([ TemplateKeyType::Text->value => TemplateKeyType::Text->label(), TemplateKeyType::Image->value => TemplateKeyType::Image->label(), TemplateKeyType::Chart->value => TemplateKeyType::Chart->label(), ]) ->required() ->live(), TextInput::make('shape_name') ->label('نام شکل (Shape Name)') ->helperText('نام شکل تعیین‌شده در Selection Pane نرم‌افزار PowerPoint') ->visible(fn (Get $get): bool => $get('type') !== TemplateKeyType::Text->value) ->maxLength(255), TextInput::make('description') ->label('راهنما') ->helperText('توضیحی که برای مصرف‌کننده API نمایش داده می‌شود') ->maxLength(255), Toggle::make('is_required') ->label('اجباری') ->default(true), TextInput::make('sort_order') ->label('ترتیب نمایش') ->numeric() ->integer() ->default(0), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('key') ->columns([ TextColumn::make('key') ->label('کلید') ->searchable() ->sortable(), TextColumn::make('label') ->label('برچسب') ->searchable(), TextColumn::make('type') ->label('نوع') ->badge() ->formatStateUsing(fn (TemplateKeyType $state): string => $state->label()), TextColumn::make('shape_name') ->label('نام شکل') ->placeholder('—'), IconColumn::make('is_required') ->label('اجباری') ->boolean(), TextColumn::make('sort_order') ->label('ترتیب') ->sortable(), ]) ->defaultSort('sort_order') ->headerActions([ CreateAction::make(), ]) ->recordActions([ EditAction::make(), DeleteAction::make(), ]); } }