Skip to content

Instantly share code, notes, and snippets.

@Log1x
Last active December 13, 2023 14:40
Show Gist options
  • Select an option

  • Save Log1x/c01458f7e4053ed242c88e61ef6bb1c8 to your computer and use it in GitHub Desktop.

Select an option

Save Log1x/c01458f7e4053ed242c88e61ef6bb1c8 to your computer and use it in GitHub Desktop.

Revisions

  1. Log1x revised this gist Sep 3, 2023. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion EditPost.php
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,7 @@
    use Pboivin\FilamentPeek\Pages\Actions\PreviewAction;
    use Pboivin\FilamentPeek\Pages\Concerns\HasPreviewModal;

    class EditFile extends EditRecord
    class EditPost extends EditRecord
    {
    use HasPreview, HasPreviewModal;

  2. Log1x revised this gist Sep 3, 2023. 1 changed file with 6 additions and 6 deletions.
    12 changes: 6 additions & 6 deletions HasPreview.php
    Original file line number Diff line number Diff line change
    @@ -24,6 +24,12 @@ protected function handlePreview(string $resource = null, string $token = 'previ
    if (! request()->has($token)) {
    return;
    }

    $attributes = session()->get('preview-'.request()->get($token));

    if (empty($attributes)) {
    return;
    }

    if (empty($resource) && ! empty($this->__name)) {
    $resource = Str::before($this->__name, '.');
    @@ -32,12 +38,6 @@ protected function handlePreview(string $resource = null, string $token = 'previ
    $resource = Str::afterLast($resource, '\\');
    $resource = Str::slug($resource, '_');

    $attributes = session()->get('preview-'.request()->get($token));

    if (empty($attributes)) {
    return;
    }

    $this->isPreview = true;

    $this->{$resource}->fill($attributes);
  3. Log1x created this gist Sep 3, 2023.
    42 changes: 42 additions & 0 deletions EditPost.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,42 @@
    <?php

    namespace App\Filament\Resources\PostResource\Pages;

    use App\Concerns\HasPreview;
    use App\Filament\Resources\PostResource;
    use Filament\Resources\Pages\EditRecord;
    use Pboivin\FilamentPeek\Pages\Actions\PreviewAction;
    use Pboivin\FilamentPeek\Pages\Concerns\HasPreviewModal;

    class EditFile extends EditRecord
    {
    use HasPreview, HasPreviewModal;

    /**
    * The resource model.
    */
    protected static string $resource = PostResource::class;

    /**
    * The preview modal URL.
    */
    protected function getPreviewModalUrl(): ?string
    {
    $this->createPreviewSession();

    return route('post.show', [
    'post' => $this->record->slug,
    'previewToken' => $this->previewToken,
    ]);
    }

    /**
    * The header actions.
    */
    protected function getHeaderActions(): array
    {
    return [
    PreviewAction::make(),
    ];
    }
    }
    59 changes: 59 additions & 0 deletions HasPreview.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    <?php

    namespace App\Concerns;

    use Illuminate\Support\Str;

    trait HasPreview
    {
    /**
    * The preview token.
    */
    protected ?string $previewToken = null;

    /**
    * The preview status.
    */
    public bool $isPreview = false;

    /**
    * Handle the preview.
    */
    protected function handlePreview(string $resource = null, string $token = 'previewToken'): void
    {
    if (! request()->has($token)) {
    return;
    }

    if (empty($resource) && ! empty($this->__name)) {
    $resource = Str::before($this->__name, '.');
    }

    $resource = Str::afterLast($resource, '\\');
    $resource = Str::slug($resource, '_');

    $attributes = session()->get('preview-'.request()->get($token));

    if (empty($attributes)) {
    return;
    }

    $this->isPreview = true;

    $this->{$resource}->fill($attributes);
    }

    /**
    * Generate a preview token and create a session.
    */
    protected function createPreviewSession(string $record = 'record'): void
    {
    if (empty($resource = $this->previewModalData[$record])) {
    return;
    }

    $this->previewToken = uniqid();

    session()->put("preview-{$this->previewToken}", $resource->toArray());
    }
    }
    29 changes: 29 additions & 0 deletions Show.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,29 @@
    <?php

    namespace App\Livewire\Post;

    use App\Concerns\HasPreview;
    use App\Models\Post;
    use Livewire\Component;

    class Show extends Component
    {
    use HasPreview;

    /**
    * The post instance.
    */
    public Post $post;

    /**
    * Render the component.
    *
    * @return \Illuminate\Contracts\View\View
    */
    public function render()
    {
    $this->handlePreview();

    return view('livewire.post.show');
    }
    }
    12 changes: 12 additions & 0 deletions show.blade.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    <div>
    @if ($isPreview)
    <style>
    a { pointer-events: none !important; }
    </style>
    @endif

    <div>
    <h1>{{ $post->title }}</h1>
    <p>{{ $post->content }}</p>
    </div>
    </div>