Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
97 changes: 50 additions & 47 deletions app/Filament/Pages/Board.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,78 +3,81 @@
namespace App\Filament\Pages;

use App\Models\Project;
use Filament\Forms\Components\Card;
use Filament\Forms\Components\Grid;
use Filament\Forms\Components\Select;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Pages\Page;
use Illuminate\Contracts\Support\Htmlable;

class Board extends Page implements HasForms
class Board extends Page implements Forms\Contracts\HasForms
{
use InteractsWithForms;

protected static ?string $navigationIcon = 'heroicon-o-view-boards';

protected static string $view = 'filament.pages.board';
use Forms\Concerns\InteractsWithForms;

protected static ?string $navigationIcon = 'heroicon-o-view-columns';
protected static ?string $slug = 'board';

protected static ?int $navigationSort = 4;
protected static string $view = 'filament.pages.board';

protected function getSubheading(): string|Htmlable|null
{
return __("In this section you can choose one of your projects to show it's Scrum or Kanban board");
}
public ?int $project = null;

public function mount(): void
public function getSubheading(): string|Htmlable|null
{
$this->form->fill();
return __("In this section you can choose one of your projects to show its Scrum or Kanban board");
}

protected static function getNavigationLabel(): string
public static function getNavigationLabel(): string
{
return __('Board');
}

protected static function getNavigationGroup(): ?string
public static function getNavigationGroup(): ?string
{
return __('Management');
}

protected function getFormSchema(): array
// ✅ gunakan Form method di Filament 3, bukan getFormSchema()
public function form(Form $form): Form
{
return [
Card::make()
->schema([
Grid::make()
->columns(1)
->schema([
Select::make('project')
->label(__('Project'))
->required()
->searchable()
->reactive()
->afterStateUpdated(fn () => $this->search())
->helperText(__("Choose a project to show it's board"))
->options(fn() => Project::where('owner_id', auth()->user()->id)
->orWhereHas('users', function ($query) {
return $query->where('users.id', auth()->user()->id);
})->pluck('name', 'id')->toArray()),
]),
]),
];
return $form
->schema([
Forms\Components\Card::make()
->schema([
Forms\Components\Grid::make()
->columns(1)
->schema([
Forms\Components\Select::make('project')
->label(__('Project'))
->required()
->searchable()
->reactive()
->helperText(__("Choose a project to show its board"))
->options(fn() => Project::query()
->where('owner_id', auth()->id())
->orWhereHas('users', fn($q) => $q->where('users.id', auth()->id()))
->pluck('name', 'id')
->toArray()),
]),
]),
]);
}

public function search(): void
public function updatedProject($value): void
{
$data = $this->form->getState();
$project = Project::find($data['project']);
if ($project->type === "scrum") {
$this->redirect(route('filament.pages.scrum/{project}', ['project' => $project]));
if (! $value) return;
$this->redirectToProject($value);
}

protected function redirectToProject(int $projectId): void
{
$project = Project::find($projectId);

if (! $project) {
return;
}

if ($project->type === 'scrum') {
$this->redirect("/scrum/{$project->id}");
} else {
$this->redirect(route('filament.pages.kanban/{project}', ['project' => $project]));
$this->redirect("/kanban/{$project->id}");
}
}
}
15 changes: 9 additions & 6 deletions app/Filament/Pages/Dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@ class Dashboard extends Page
public static ?string $routeName = 'filament.pages.dashboard'; // Tambahkan baris ini

// protected static bool $shouldRegisterNavigation = false;
protected static string $view = 'filament::pages.dashboard';
protected static ?string $navigationIcon = 'heroicon-o-document-text';
// protected static string $view = 'filament::pages.dashboard';
protected static string $view = 'filament.pages.dashboard';


// protected function getColumns(): int
// {
// return 6;
// }

protected function getColumns(): int
{
return 6;
}


protected function getWidgets(): array
{
Expand Down
22 changes: 15 additions & 7 deletions app/Filament/Pages/JiraImport.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class JiraImport extends Page implements HasForms
{
use InteractsWithForms, JiraHelper;

protected static ?string $navigationIcon = 'heroicon-o-cloud-download';
protected static ?string $navigationIcon = 'heroicon-o-arrow-down-tray';

protected static string $view = 'filament.pages.jira-import';

Expand Down Expand Up @@ -52,22 +52,22 @@ public function mount(): void
$this->form->fill();
}

protected static function shouldRegisterNavigation(): bool
public static function shouldRegisterNavigation(): bool
{
return auth()->user()->can('Import from Jira');
}

protected function getSubheading(): string|Htmlable|null
public function getSubheading(): string|Htmlable|null
{
return __('Use this section to login into your jira account and import tickets to this application');
}

protected static function getNavigationLabel(): string
public static function getNavigationLabel(): string
{
return __('Jira import');
}

protected static function getNavigationGroup(): ?string
public static function getNavigationGroup(): ?string
{
return __('Settings');
}
Expand Down Expand Up @@ -241,10 +241,18 @@ public function import(): void
$tickets[] = $this->getJiraTicketDetails($this->host, $this->username, $this->token, $url);
}
dispatch(new ImportJiraTicketsJob($tickets, auth()->user()));
$this->notify('success', __('The importation job is started, when finished you will be notified'), true);
// $this->notify('success', __('The importation job is started, when finished you will be notified'), true);
Notification::make()
->title(__('The importation job is started, when finished you will be notified'))
->success()
->send();
$this->redirect(route('filament.pages.jira-import'));
} else {
$this->notify('warning', __('Please choose at least a jira ticket to import'));
// $this->notify('warning', __('Please choose at least a jira ticket to import'));
Notification::make()
->title(__('Please choose at least a jira ticket to import'))
->warning()
->send();
}
}

Expand Down
23 changes: 18 additions & 5 deletions app/Filament/Pages/Kanban.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@
use Filament\Pages\Actions\Action;
use Filament\Pages\Page;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Contracts\View\View;

class Kanban extends Page implements HasForms
{
use InteractsWithForms, KanbanScrumHelper;

protected static ?string $navigationIcon = 'heroicon-o-view-boards';
protected static ?string $navigationIcon = 'heroicon-o-view-columns';

protected static ?string $slug = 'kanban/{project}';

// protected static ?string $routeName = 'pages.kanban';

protected static string $view = 'filament.pages.kanban';

protected static bool $shouldRegisterNavigation = false;
Expand All @@ -28,11 +31,13 @@ class Kanban extends Page implements HasForms
'closeTicketDialog'
];

public function mount(Project $project)
public function mount($project): void
{
$this->project = $project;
// dd('hit');
$this->project = Project::findOrFail($project);
if ($this->project->type === 'scrum') {
$this->redirect(route('filament.pages.scrum/{project}', ['project' => $project]));
$this->redirect("/scrum/{$project}");
return;
} elseif (
$this->project->owner_id != auth()->user()->id
&&
Expand All @@ -57,7 +62,7 @@ protected function getActions(): array
];
}

protected function getHeading(): string|Htmlable
public function getHeading(): string|Htmlable
{
return $this->kanbanHeading();
}
Expand All @@ -67,4 +72,12 @@ protected function getFormSchema(): array
return $this->formSchema();
}

public function render(): View
{
// ✅ Sekarang render manual pakai komponen Filament bawaan
return view('filament.pages.kanban', [
'project' => $this->project,
]);
}

}
31 changes: 25 additions & 6 deletions app/Filament/Pages/ManageGeneralSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,31 @@
use Filament\Pages\Actions\Action;
use Filament\Pages\SettingsPage;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Support\Facades\DB;
use Filament\Notifications\Notification;

class ManageGeneralSettings extends SettingsPage
{
protected static ?string $navigationIcon = 'heroicon-o-cog';

protected static string $settings = GeneralSettings::class;

protected static function shouldRegisterNavigation(): bool
public static function shouldRegisterNavigation(): bool
{
return auth()->user()->can('Manage general settings');
}

protected function getHeading(): string|Htmlable
public function getHeading(): string|Htmlable
{
return __('Manage general settings');
}

protected static function getNavigationLabel(): string
public static function getNavigationLabel(): string
{
return __('General');
}

protected static function getNavigationGroup(): ?string
public static function getNavigationGroup(): ?string
{
return __('Settings');
}
Expand Down Expand Up @@ -97,9 +99,26 @@ protected function getFormSchema(): array
];
}

protected function getSaveFormAction(): Action
public function getSaveFormAction(): Action
{
return parent::getSaveFormAction()->label(__('Save'));
// return parent::getSaveFormAction()->label(__('Save'));
return Action::make('save')
->label('Save Settings')
->action(function (array $data) {
$data = $this->form->getState();
foreach ($data as $key => $value) {
DB::table('settings')
->updateOrInsert(
['name' => $key],
['payload' => json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)]
);
}
// ✅ tampilkan notifikasi sukses
Notification::make()
->title('Pengaturan berhasil disimpan!')
->success()
->send();
});
}

private function getLanguages(): array
Expand Down
8 changes: 5 additions & 3 deletions app/Filament/Pages/RoadMap.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class RoadMap extends Page implements HasForms

protected static ?int $navigationSort = 5;

public ?int $selectedProject = null;

public $project;

public Epic|null $epic = null;
Expand All @@ -35,12 +37,12 @@ class RoadMap extends Page implements HasForms
'updateEpic'
];

protected static function getNavigationLabel(): string
public static function getNavigationLabel(): string
{
return __('Road Map');
}

protected static function getNavigationGroup(): ?string
public static function getNavigationGroup(): ?string
{
return __('Management');
}
Expand Down Expand Up @@ -88,7 +90,7 @@ public function filter(): void
$data = $this->form->getState();
$project = $data['selectedProject'];
$this->project = Project::where('id', $project)->first();
$this->dispatchBrowserEvent('projectChanged', [
$this->dispatch('projectChanged', [
'url' => route('road-map.data', $this->project),
'start_date' => Carbon::parse($this->project->epicsFirstDate)->subYear()->format('Y-m-d'),
'end_date' => Carbon::parse($this->project->epicsLastDate)->addYear()->format('Y-m-d'),
Expand Down
Loading
Loading