Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
rahmanramsi committed Sep 26, 2023
1 parent 597bc1c commit 898c98a
Show file tree
Hide file tree
Showing 32 changed files with 359 additions and 645 deletions.
36 changes: 36 additions & 0 deletions app/Actions/Site/SiteUpdateAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace App\Actions\Site;

use App\Models\Permission;
use App\Models\Site;
use Illuminate\Support\Facades\DB;
use Lorisleiva\Actions\Concerns\AsAction;

class SiteUpdateAction
{
use AsAction;

public function handle(array $data) : Site
{
try {
DB::beginTransaction();

$site = app()->getSite();

if ($meta = data_get($data, 'meta')) {
$site->setManyMeta($meta);
}

$site->touch();

DB::commit();
} catch (\Throwable $th) {
DB::rollBack();

throw $th;
}

return $site;
}
}
40 changes: 24 additions & 16 deletions app/Administration/Pages/SiteSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace App\Administration\Pages;

use App\Actions\Settings\SettingUpdateAction;
use App\Actions\Site\SiteUpdateAction;
use App\Infolists\Components\BladeEntry;
use Filament\Forms\Components\Actions;
use Filament\Forms\Components\Actions\Action;
Expand All @@ -29,20 +30,26 @@ class SiteSettings extends Page implements HasForms, HasInfolists

protected static string $view = 'administration.pages.site-settings';

public array $setupFormData = [];
public array $systemFormData = [];

public array $informationFormData = [];

public array $appearanceFormData = [];

public function mount()
{
$this->setupForm->fill([
$this->systemForm->fill([
'format' => setting('format'),
'privacy_statement' => setting('privacy_statement'),
]);

$this->informationForm->fill([
'meta' => app()->getSite()->getAllMeta()->toArray(),
]);

$this->appearanceForm->fill([
//
]);
}

public function infolist(Infolist $infolist): Infolist
Expand All @@ -63,10 +70,10 @@ public function infolist(Infolist $infolist): Infolist
])
]),
]),
Tabs\Tab::make('Setup')
Tabs\Tab::make('System')
->schema([
BladeEntry::make('general')
->blade('{{ $this->setupForm }}'),
->blade('{{ $this->systemForm }}'),
]),
])
->contained(false),
Expand All @@ -77,9 +84,16 @@ protected function getForms(): array
{
return [
'informationForm',
'setupForm',
'systemForm',
'appearanceForm',
];
}
public function appearanceForm(Form $form): Form
{
return $form
->statePath('appearanceFormData')
->schema([]);
}

public function informationForm(Form $form): Form
{
Expand All @@ -91,10 +105,6 @@ public function informationForm(Form $form): Form
TextInput::make('meta.name')
->label('Website Name')
->required(),
TextInput::make('meta.format.date')
->required(),
TextInput::make('meta.format.time')
->required(),
SpatieMediaLibraryFileUpload::make('logo')
->collection('logo')
->image()
Expand All @@ -105,15 +115,13 @@ public function informationForm(Form $form): Form
'sm' => 2,
]),
Actions::make([
Action::make('savesss')
Action::make('save')
->successNotificationTitle('Saved!')
->failureNotificationTitle('Failed!')
->action(function (Action $action) {
$data = $this->informationForm->getState();
try {
$site = app()->getSite();
$site->setManyMeta($data['meta']);
$site->save();
SiteUpdateAction::run($data);

$action->sendSuccessNotification();
} catch (\Throwable $th) {
Expand All @@ -126,12 +134,12 @@ public function informationForm(Form $form): Form
]);
}

public function setupForm(Form $form): Form
public function systemForm(Form $form): Form
{
$now = now()->hours(16);

return $form
->statePath('setupFormData')
->statePath('systemFormData')
->schema([
Section::make('Date and Time Formats')
->description(new HtmlString(<<<'HTML'
Expand Down Expand Up @@ -160,7 +168,7 @@ class="filament-link inline-flex items-center justify-center gap-0.5 font-medium
->successNotificationTitle('Saved!')
->action(function (Action $action) {
try {
SettingUpdateAction::run($this->setupForm->getState());
SettingUpdateAction::run($this->systemForm->getState());

$action->sendSuccessNotification();
} catch (\Throwable $th) {
Expand Down
6 changes: 0 additions & 6 deletions app/Administration/Resources/ConferenceResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,6 @@ public static function form(Form $form): Form
->options(Country::pluck('name', 'id'))
->optionsLimit(250),
]),
Section::make()
->columns(1)
->schema([
Checkbox::make('current')
->label('Set this conference as the currently active one'),
]),
]),
Section::make()
->columnSpan([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function getTabs(): array
'upcoming' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('status', ConferenceStatus::Upcoming))
->badge(Conference::query()->where('status', ConferenceStatus::Upcoming)->count()),
'current' => Tab::make()
'active' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('status', ConferenceStatus::Active)),
'archive' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('status', ConferenceStatus::Archived))
Expand Down
4 changes: 2 additions & 2 deletions app/Administration/Resources/NavigationResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@

class NavigationResource extends Resource
{
protected static ?int $navigationSort = 99;
// protected static ?int $navigationSort = 99;

protected static bool $shouldRegisterNavigation = true;

protected static ?string $navigationGroup = 'Settings';
// protected static ?string $navigationGroup = 'Settings';

public static function getEloquentQuery(): Builder
{
Expand Down
199 changes: 199 additions & 0 deletions app/Administration/Resources/StaticPageResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
<?php

namespace App\Administration\Resources;

use App\Forms\Components\TagSuggestions;
use App\Models\Enums\ContentType;
use Filament\Forms\Form;
use App\Models\StaticPage;
use App\Models\StaticPageTag;
use Filament\Tables\Table;
use Illuminate\Support\Str;
use Filament\Resources\Resource;
use Filament\Forms\Components\Grid;
use Filament\Tables\Actions\Action;
use Filament\Forms\Components\Section;
use Filament\Tables\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Actions\DeleteAction;
use App\Administration\Resources\StaticPageResource\Pages;
use Filament\Forms\Components\CheckboxList;
use Filament\Forms\Components\SpatieTagsInput;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\HtmlString;
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;

class StaticPageResource extends Resource
{
protected static ?string $model = StaticPage::class;

protected static ?string $navigationIcon = 'heroicon-o-credit-card';

public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->with(['conference']);
}

public static function form(Form $form): Form
{
return $form
->schema([
Grid::make(12)
->schema([
Section::make()
->schema([
TextInput::make('title')
->lazy()
->helperText(function ($state, ?StaticPage $record) {

if(!$record) return;

$slug = Str::slug($state);
$currentSlug = Str::slug(substr($slug, 0, 50)); // if it has(-) at the end
$count = 1;

switch (true) {
case $record:
while (true) {
$staticPage = StaticPage::where('slug', $currentSlug)->first();
if ($staticPage) {
if ($staticPage->id != $record->id) {
$currentSlug = "{$slug}-{$count}";
$count++;
} else {
break;
}
} else {
break;
}
}
break;

default:
while (true) {
$staticPage = StaticPage::where('slug', $currentSlug)->first();
// dd($staticPage);
if ($staticPage) {
$currentSlug = "{$slug}-{$count}";
$count++;
} else {
break;
}
}
break;
}

$route = $record->getUrl();

return new HtmlString("
<p>Your page will be at :</p>
<p>{$route}</p>
");
})
->required(),
TinyEditor::make('user_content')
->label('Content')
->minHeight(600)
->helperText('The complete page content.'),
])->columnSpan([
'default' => 'full',
'lg' => 9,
]),
Section::make()
->schema([
TextInput::make('author')
->default(function () {
$user = auth()->user();

return "{$user->given_name} {$user->family_name}";
})
->dehydrated(false)
->disabled(),
SpatieTagsInput::make('tags')
->type(ContentType::StaticPage->value)
->afterStateUpdated(fn ($set, $state) => $set('common_tags', StaticPageTag::whereInFromString($state, ContentType::StaticPage->value)->pluck('id')->toArray()))
->reactive(),
TagSuggestions::make('common_tags')
->label('Commonly used tags')
->helperText(
fn (CheckboxList $component) => count($component->getOptions()) ? null :
new HtmlString('
<div class="fi-ta-empty-state-content mx-auto grid max-w-lg justify-items-center text-center">
<div class="fi-ta-empty-state-icon-ctn mb-4 rounded-full bg-gray-100 p-3 dark:bg-gray-500/20">
<svg class="fi-ta-empty-state-icon h-6 w-6 text-gray-500 dark:text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</div>
<h4 class="fi-ta-empty-state-heading text-base font-semibold leading-6 text-gray-950 dark:text-white">
No tags
</h4>
</div>
')
)
->options(StaticPageTag::withCount('staticPages')->orderBy('static_pages_count', 'desc')->limit(10)->pluck('name', 'id')->toArray())
->columns('2')
->afterStateUpdated(function ($set, $state) {
if (!empty($state)) {
$state = StaticPageTag::whereIn('id', $state)->get()->map(fn ($tag) => $tag->name)->toArray();
}

$set('tags', $state);
})
->dehydrated(false)
->reactive(),
])->columnSpan([
'default' => 'full',
'lg' => 3,
]),
]),
]);
}

public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('title')
->searchable(),
TextColumn::make('path')
->label('Path')
->getStateUsing(fn (StaticPage $record) => $record->getUrl()),
])
->filters([
//
])
->headerActions([
//
])
->actions([
Action::make('preview')
->icon('heroicon-o-eye')
->url(fn (StaticPage $record) => $record->getUrl())
->color('gray'),
EditAction::make(),
DeleteAction::make(),
])
->bulkActions([
// Tables\Actions\DeleteBulkAction::make(),
])
->defaultSort('created_at', 'desc');
}

public static function getRelations(): array
{
return [
//
];
}

public static function getPages(): array
{
return [
'index' => Pages\ListStaticPages::route('/'),
'create' => Pages\CreateStaticPage::route('/create'),
'edit' => Pages\EditStaticPage::route('/{record}/edit'),
];
}
}
Loading

0 comments on commit 898c98a

Please sign in to comment.