Merge pull request 'main' (#10) from alex_chevski/eatvio:main into main

Plan updating
This commit is contained in:
apoloz
2023-12-14 12:10:41 +00:00
13 changed files with 444 additions and 225 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Models\Plan;
use App\Models\User;
use Illuminate\Http\Request;
use App\Models\PlanComment;
class PlanController extends Controller
{
@@ -65,16 +66,16 @@ class PlanController extends Controller
// $options1 = $this->unserializeOptions($plan->packet1_options);
// $options2 = $this->unserializeOptions($plan->packet2_options);
// $options3 = $this->unserializeOptions($plan->packet2_options);
$options1 = $plan->packet1_options;
$options2 = $plan->packet2_options;
$options3 = $plan->packet2_options;
// $options1 = $plan->packet1_options;
// $options2 = $plan->packet2_options;
// $options3 = $plan->packet2_options;
return view('plan/show',
[
'plan' => $plan,
'options1' => $options1,
'options2' => $options2,
'options3' => $options3
// 'options1' => $options1,
// 'options2' => $options2,
// 'options3' => $options3,
]
);
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Livewire\Plan;
use App\Models\Plan;
use Livewire\Component;
class Accordion extends Component
{
public Plan $plan;
public $accordionState = ['options1' => false, 'options2' => false, 'options3' => false];
public $options1;
public $options2;
public $options3;
public function mount(Plan $plan): void
{
$this->plan = $plan;
$this->options1 = $plan->packet1_options;
$this->options2 = $plan->packet2_options;
$this->options3 = $plan->packet3_options;
}
public function render()
{
return view('livewire.plan.accordion');
}
public function toggleAccordionState($optionName)
{
$this->accordionState[$optionName] = !$this->accordionState[$optionName];
// 1. Если у нас 1 true все остальные делать false(чтобы закрывать остальные вкладки у которых не true)
// a. у нас есть ключ у которого будет true
// b. проходим по всем ключам accordionState и все кроме true делаем false
array_map(fn($key) => $key === $optionName ?: $this->accordionState[$key] = false, array_keys($this->accordionState));
}
}

View File

@@ -6,6 +6,7 @@ use Livewire\Component;
use App\Models\Plan;
use App\Models\PlanComment;
use App\Models\User;
use Livewire\Attributes\Validate;
class Create extends Component
{
@@ -21,6 +22,11 @@ class Create extends Component
public function save()
{
$this->validate([
'body' => 'required|min:10',
'grade' => 'required',
]);
$comment = new PlanComment();
$comment->grade = $this->grade;
$comment->body = $this->body;

View File

@@ -8,6 +8,7 @@ use App\Models\Plan;
class Show extends Component
{
public Plan $plan;
public array $tabpanelState = ['positive' => 'positive', 'negative' => false];
protected $listeners = ['commentAdded' => '$refresh'];
@@ -15,4 +16,9 @@ class Show extends Component
{
return view('livewire.plan.comment.show');
}
public function toggleTabpanelState($tabpanelName)
{
array_map(fn($key) => $key === $tabpanelName ? $this->tabpanelState[$tabpanelName] = $tabpanelName : $this->tabpanelState[$key] = false, array_keys($this->tabpanelState));
}
}

View File

@@ -1,16 +1,17 @@
<?php
namespace App\Models;
use Laracasts\Presenter\PresentableTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;
use App\Models\PlanLike;
use App\Presenters\PlanPresenter;
use Illuminate\Database\Eloquent\Casts\Attribute;
use CyrildeWit\EloquentViewable\InteractsWithViews;
use CyrildeWit\EloquentViewable\Contracts\Viewable;
use CyrildeWit\EloquentViewable\InteractsWithViews;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Laracasts\Presenter\PresentableTrait;
class Plan extends Model implements Viewable
{
@@ -18,7 +19,6 @@ class Plan extends Model implements Viewable
use InteractsWithViews;
use PresentableTrait;
protected $withCount = [
'likes',
'comments'
@@ -31,10 +31,8 @@ class Plan extends Model implements Viewable
'packet3_options' => 'array',
];
protected $presenter = PlanPresenter::class;
public function author()
{
return $this->belongsToMany(User::class, 'plan_author', 'plan_id', 'user_id');
@@ -63,12 +61,12 @@ class Plan extends Model implements Viewable
{
$result = [];
for ($i = 1; $i <= $this->packets_count; $i++) {
$key = "packet" . $i . "_options";
$key = 'packet' . $i . '_options';
// $data = $this->unserializeOptionsObj($this->$key);
$data = $this->$key;
if (!is_null($data)) {
$result = array_merge($result, data_get($data, "items", []));
$result = array_merge($result, data_get($data, 'items', []));
}
}
@@ -81,7 +79,7 @@ class Plan extends Model implements Viewable
$data = $this->type;
return new Attribute(
get: fn () => array_keys($data),
get: fn() => array_keys($data),
);
}
@@ -89,18 +87,18 @@ class Plan extends Model implements Viewable
{
$result = 0;
for ($i = 1; $i <= $this->packets_count; $i++) {
$key = "packet" . $i . "_options";
$key = 'packet' . $i . '_options';
// dd($this->$key);
// $data = $this->unserializeOptionsObj($this->$key);
$data = $this->$key;
if (!is_null($data)) {
$curPrice = (int)data_get($data, "price", 0);
$result = $curPrice > $result ? $curPrice : $result ;
$curPrice = (int) data_get($data, 'price', 0);
$result = $curPrice > $result ? $curPrice : $result;
}
}
return new Attribute(
get: fn () => $result,
get: fn() => $result,
);
}
@@ -128,4 +126,14 @@ class Plan extends Model implements Viewable
}
return json_decode(stripslashes($str), true);
}
public function scopeByNegative(Builder $query)
{
return static::comments()->where('grade', '<=', '3');
}
public function scopeByPositive(Builder $query)
{
return static::comments()->where('grade', '>', '3');
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\User;
use App\Models\Plan;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\PlanComment>
*/
class PlanCommentFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'grade' => $this->faker->randomDigit(),
'body' => $this->faker->text(),
];
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Database\Seeders;
use App\Models\Plan;
use App\Models\PlanComment;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class PlanCommentSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
if (User::count() > 0 && Plan::count() > 0) {
$comments = PlanComment::factory()->count(5)->make();
$comments->each(function ($comment) {
$comment->author()->associate(
User::inRandomOrder()
->first()
->id
);
$comment->plan()->associate(
Plan::inRandomOrder()
->first()
->id
);
$comment->saveOrFail();
});
}
}
}

View File

@@ -145,3 +145,4 @@ $isDiary = Str::of($curUrl)->test('/\/diary/');
<x-toaster-hub />
</body>
</html>

View File

@@ -0,0 +1,99 @@
<div class="settings__price" data-spollers data-one-spoller>
<div class="settings__price-item">
<button type="button" @class([
'settings__price-btn',
'_active' => $accordionState['options1'],
]) wire:click='toggleAccordionState("options1","options2", "options3")' data-spoller>
<strong>
{{ $options1['price'] ?? '0' }} ₽
</strong>
{{ $options1['short'] ?? '' }}
</button>
<div class="settings__price-body" @style(['display: none' => !$accordionState['options1'], 'display: block' => $accordionState['options1']])>
<div class="settings__price-desc">
{{ $options1['description'] ?? '' }}
</div>
@isset($options1['items'])
@foreach ($options1['items'] as $item)
<ul class="settings__price-list">
<li>
{{ $item }}
<span class="settings__price-icon icon-check-square"></span>
{{-- <span class="settings__price-icon">-</span> --}}
</li>
</ul>
@endforeach
@endisset
<button type="button" class="settings__price-bid btn btn-green">Заказать за
{{ $options1['price'] ?? '0' }}₽</button>
</div>
</div>
@if ($plan->packets_count == 3)
<div class="settings__price-item">
<button type="button" @class([
'settings__price-btn',
'_active' => $accordionState['options2'],
]) wire:click='toggleAccordionState("options2")' data-spoller>
<strong>
{{ $options2['price'] ?? '0' }} ₽
</strong>
{{ $options2['short'] ?? '' }}
</button>
<div class="settings__price-body" @style(['display: none' => !$accordionState['options2'], 'display: block' => $accordionState['options2']])>
<div class="settings__price-desc">
{{ $options2['description'] ?? '' }}
</div>
@isset($options2['items'])
@foreach ($options2['items'] as $item)
<ul class="settings__price-list">
<li>
{{ $item }}
<span class="settings__price-icon icon-check-square"></span>
{{-- <span class="settings__price-icon">-</span> --}}
</li>
</ul>
@endforeach
@endisset
<button type="button" class="settings__price-bid btn btn-green">Заказать за
{{ $options2['price'] ?? '0' }}
₽</button>
</div>
</div>
<div class="settings__price-item">
<button type="button" @class([
'settings__price-btn',
'_active' => $accordionState['options3'],
]) wire:click='toggleAccordionState("options3")'
data-spoller>
<strong>
{{ $options3['price'] ?? '0' }} ₽
</strong>
{{ $options3['short'] ?? '' }}
</button>
<div class="settings__price-body" @style(['display: none' => !$accordionState['options3'], 'display: block' => $accordionState['options3']])>
<div class="settings__price-desc">
{{ $options3['description'] ?? '' }}
</div>
@isset($options3['items'])
@foreach ($options3['items'] as $item)
<ul class="settings__price-list">
<li>
{{ $item }}
<span class="settings__price-icon icon-check-square"></span>
{{-- <span class="settings__price-icon">-</span> --}}
</li>
</ul>
@endforeach
@endisset
<button type="button" class="settings__price-bid btn btn-green">Заказать за
{{ $options3['price'] ?? '0' }}
₽</button>
</div>
</div>
@endif
</div>

View File

@@ -1,24 +1,18 @@
<div class="container px-0 mb-4 --mw-1000 --bg_white --radius fs-4_5">
<div class="d-sm-flex justify-content-between align-items-centerr ps-2 pe-3 pt-2">
<textarea wire:model="body" id="plan-comment-textarea" class="form-control h-100 --no_border --no_resize" placeholder="Введите свой комментарий"></textarea>
<div class="h-100 ps-2 pt-3 pb-4 pb-sm-0 --stars --no_wrap">
<a href="#sg1" wire:click.prevent="$set('grade', 1)">
<svg id="sg1" @class(['yellow-star-filter' => $grade >= 1]) width="24" height="24"><use xlink:href="#StarIcon"></use></svg>
</a>
<a href="#sg2" wire:click.prevent="$set('grade', 2)">
<svg id="sg2" @class(['yellow-star-filter' => $grade >= 2]) width="24" height="24"><use xlink:href="#StarIcon"></use></svg>
</a>
<a href="#sg3" wire:click.prevent="$set('grade', 3)">
<svg id="sg3" @class(['yellow-star-filter' => $grade >= 3]) width="24" height="24"><use xlink:href="#StarIcon"></use></svg>
</a>
<a href="#sg4" wire:click.prevent="$set('grade', 4)">
<svg id="sg4" @class(['yellow-star-filter' => $grade >= 4]) width="24" height="24"><use xlink:href="#StarIcon"></use></svg>
</a>
<a href="#sg5" wire:click.prevent="$set('grade', 5)">
<svg id="sg5" @class(['yellow-star-filter' => $grade >= 5]) width="24" height="24"><use xlink:href="#StarIcon"></use></svg>
</a>
<a href="#sg1" wire:click.prevent="save" class="ms-3"><svg width="24" height="24"><use xlink:href="#SendPlainIcon"></use></svg></a>
<form class="reviews__form">
<textarea wire:model="body" class="textarea textarea-white" placeholder="Введите отзыв"></textarea>
<div class="reviews__form-column">
<div class="reviews__form-rate star-rating">
<input wire:click="$set('grade', 5)" type="radio" name="rate" id="rate-5" value="5" class="star-rating__input hidden" hidden>
<label class="star-rating__label" for="rate-5"></label>
<input wire:click="$set('grade',4)" type="radio" name="rate" id="rate-4" value="4" class="star-rating__input hidden" hidden>
<label class="star-rating__label" for="rate-4"></label>
<input wire:click="$set('grade',3)" type="radio" name="rate" id="rate-3" value="3" class="star-rating__input hidden" hidden>
<label class="star-rating__label" for="rate-3"></label>
<input wire:click="$set('grade',2)" type="radio" name="rate" id="rate-2" value="2" class="star-rating__input hidden" hidden>
<label class="star-rating__label" for="rate-2"></label>
<input wire:click="$set('grade',1)" type="radio" name="rate" id="rate-1" value="1" class="star-rating__input hidden" hidden>
<label class="star-rating__label" for="rate-1"></label>
</div>
<button wire:click.prevent="save" type="button" class="btn btn-primary">Оставь отзыв</button>
</div>
</div>
</form>

View File

@@ -1,59 +1,89 @@
<div class="container px-0 mb-4 --mw-1000 reviews">
@php
$positivComments = $plan->comments()->where('grade', '>', '3');
$negativeComments = $plan->comments()->where('grade', '<=', '3');
$positiveCommmentsCount = $positivComments->count();
$negativeCommentsCount = $negativeComments->count();
@endphp
<ul class="nav nav-tabs mb-3" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="positive-tab" data-bs-toggle="tab" data-bs-target="#positive" type="button" role="tab" aria-controls="positive" aria-selected="true">Положительные<span class="ms-2">{{ $positiveCommmentsCount }}</span></button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="negative-tab" data-bs-toggle="tab" data-bs-target="#negative" type="button" role="tab" aria-controls="negative" aria-selected="false">Негативные<span class="ms-2">{{ $negativeCommentsCount }}</span></button>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="positive" role="tabpanel" aria-labelledby="positive-tab">
@foreach($positivComments->get() as $comment)
<div class="d-sm-flex justify-content-between flex-wrap flex-sm-nowrap mb-3 p-3 --bg_white --shadow --radius">
<div class="d-flex align-items-center">
<a href="#" class="d-none d-sm-block"><img src="{{ $comment->author->profile_photo_url }}" width="60px" height="60px" class="--radius_100"></a>
<div class="flex-grow-1 mx-sm-3">
<a href="#" class="--f_bold --f_main">{{ $comment->author->name }}</a>
<small class="d-block mt-1 mb-3 mb-sm-0">{{ $comment->body }}</small>
$positivComments = $plan->byPositive();
$negativeComments = $plan->byNegative();
$positiveCommmentsCount = $positivComments->count();
$negativeCommentsCount = $negativeComments->count();
@endphp
<div class="reviews__tabs tabs">
<div class="tablist" role="tablist" aria-labelledby="label">
<button wire:click='toggleTabpanelState("positive")' class="tab" role="tab" type="button" id="tab-1"
aria-selected="{{ $tabpanelState['positive'] ? 'true' : 'false' }}"
aria-controls="tabpanel-1">Положительные {{ $positiveCommmentsCount }}</button>
<button wire:click='toggleTabpanelState("negative")' class="tab" role="tab" type="button" id="tab-2" aria-selected="{{$tabpanelState['negative'] ? 'true' : 'false'}}"
aria-controls="tabpanel-2" tabindex="-1">Негативные {{ $negativeCommentsCount }}</button>
</div>
<div @class([
'tabpanel',
'tabpanel--hidden' => $tabpanelState['negative']
]) role="tabpanel" id="tabpanel-1" tabindex="0" aria-labelledby="tab-1">
@foreach ($positivComments->get() as $comment)
<div class="reviews__items">
<div class="review">
<div class="review__thumb">
<img src="{{ $comment->author->profile_photo_url }}" class="cover-image" alt="user">
</div>
</div>
<div class="d-flex d-sm-block align-items-center lh-1">
<div class="d-flex align-items-center">
<svg width="15" height="14" class="mx-2"><use xlink:href="#GoldStar"></use></svg>
<span class="--f_bold --f_light_gold">{{ $comment->grade }}</span>
<div class="review__content">
<div class="review__name">
{{ $comment->author->name }}
</div>
<blockquote class="review__quote">
{{ $comment->body }}
</blockquote>
</div>
<div class="review__info">
<div class="review__programm">
{{ $plan->name }}
</div>
<div class="review__rate icon-star">
{{ $comment->grade }}
</div>
{{-- @livewire('plan.comment.upvote', ['comment' => $comment]) --}}
</div>
@livewire('plan.comment.upvote', ['comment' => $comment])
</div>
</div>
@endforeach
</div>
<div class="tab-pane fade" id="negative" role="tabpanel" aria-labelledby="negative-tab">
@foreach($negativeComments->get() as $comment)
<div class="d-sm-flex justify-content-between flex-wrap flex-sm-nowrap mb-3 p-3 --bg_white --shadow --radius">
<div class="d-flex align-items-center">
<a href="#" class="d-none d-sm-block"><img src="{{ $comment->author->profile_photo_url }}" width="60px" height="60px" class="--radius_100"></a>
<div class="flex-grow-1 mx-sm-3">
<a href="#" class="--f_bold --f_main">{{ $comment->author->name }}</a>
<small class="d-block mt-1 mb-3 mb-sm-0">{{ $comment->body }}</small>
<div @class([
'tabpanel',
'tabpanel--hidden' => $tabpanelState['positive']
]) role="tabpanel" id="tabpanel-1" tabindex="0" aria-labelledby="tab-1">
@foreach ($negativeComments->get() as $comment)
<div class="reviews__items">
<div class="review">
<div class="review__thumb">
<img src="{{ $comment->author->profile_photo_url }}" class="cover-image" alt="user">
</div>
</div>
<div class="d-flex d-sm-block align-items-center lh-1">
<div class="d-flex align-items-center">
<svg width="15" height="14" class="mx-2"><use xlink:href="#GoldStar"></use></svg>
<span class="--f_bold --f_light_gold">{{ $comment->grade }}</span>
<div class="review__content">
<div class="review__name">
{{ $comment->author->name }}
</div>
<blockquote class="review__quote">
{{ $comment->body }}
</blockquote>
</div>
<div class="review__info">
<div class="review__programm">
{{ $plan->name }}
</div>
<div class="review__rate icon-star">
{{ $comment->grade }}
</div>
{{-- @livewire('plan.comment.upvote', ['comment' => $comment]) --}}
</div>
@livewire('plan.comment.upvote', ['comment' => $comment])
</div>
</div>
@endforeach
</div>
</div>
</div>

View File

@@ -373,8 +373,6 @@
</div>
</div>
</form>
<div class="diet__services">
<div class="diet__services-caption">
<div class="diet__services-title title">

View File

@@ -6,151 +6,121 @@
$authorPhoto = $plan->present()->getAuthorPhoto;
$image = Storage::url($plan->image);
$planViewsCount = views($plan)->unique()->count();
$planViewsCount = views($plan)
->unique()
->count();
@endphp
@section('main_section')
<section class="py-5" id="main">
<div class="container d-flex justify-content-between align-items-center mb-4 ps-4 pe-3 py-3 --bg_white --shadow --radius --mw-1000">
<a href="{{ route('plan.index', ['author' => $author->id]) }}" class="d-flex align-items-center --f_bold --f_main"><svg width="17" height="16" class="me-2"><use xlink:href="#GoBack"></use></svg><span class="d-none d-md-inline">Планы питания консультанта</span></a>
<div class="d-flex align-items-center">
<div class="d-none d-md-flex me-3 align-items-center">
<a href={{ route("profile.show", ['user' => $author]) }} class="me-2 text-nowrap --f_bold --f_main">
<span class="me-2 text-nowrap --f_bold">{{ $author->name }}</span>
<img src="{{ $authorPhoto }}" width="42px" height="42px" class="--radius_100" style="height: 42px;">
<section class="page" id="main">
<section class="settings">
<div class="settings__container container-sm">
<div class="settings__header">
<a href="" class="settings__back icon-arrow-short-left">
<span>Планы питания консультанта</span>
</a>
</div>
<a href="#" class="btn btn-lg btn-primary btn-block w-100 ps-4 pe-sm-4 --f_bold" target="_blank" style="max-width: 180px;">
<svg width="20" height="20" class="me-3"><use xlink:href="#WhiteChat"></use></svg>НАПИСАТЬ</a>
</div>
</div>
<div class="container mb-5 --mw-1000">
<div class="row justify-content-between flex-lg-nowrap">
<div class="col-lg-7 me-lg-4 mb-4 mb-lg-0 px-3 pt-3 pb-4 --bg_white --shadow --radius">
<div class="d-flex justify-content-between align-items-center mb-2 --f_bold">
<div class="h5 mb-0 --f_bold">{{ $plan->name }}</div>
<div class="d-flex align-items-center">
<svg width="20" height="14" class="me-2"><use xlink:href="#Eye_Black"></use></svg><span class="me-3 fs-5">{{ $planViewsCount }}</span>
<svg width="16" height="14" class="me-2"><use xlink:href="#Heart_Black"></use></svg>@livewire('plan.like-count', ['plan' => $plan])
<svg width="14" height="14" class="me-2"><use xlink:href="#CommentIcon"></use></svg><span class="me-3 fs-5">{{ $plan->comments_count }}</span>
</div>
</div>
<img src="{{ $image }}" class="w-100">
<div class="d-md-flex justify-content-between align-items-center my-3 px-3 py-1 bg_lightest_blue --radius">
<table class="table table-sm-block --no_border me-5 mb-0 fs-4_5"><tbody>
<tr>
<td class="text-start ps-0 p-1">Время прохождения плана:</td>
<td class="text-start p-1 --f_bold">{{ $plan->duration }} дней</td>
</tr>
<tr>
<td class="text-start ps-0 p-1">Проходят план:</td>
<td class="text-start p-1 --f_bold">2 пользователя</td>
</tr>
</tbody></table>
{{-- <a href="#" class="d-none d-md-inline"><svg width="24" height="21" class="me-1"><use xlink:href="#HeartPath"></use></svg></a> --}}
</div>
<div class="fs-4_5">{!! $plan->details !!}</div>
<div class="d-flex mt-4 align-items-center justify-content-between --f_bold">
<a href="#plan-comment-textarea" class="d-flex align-items-center --f_main"><small>
<svg width="21" height="20" class="me-1"><use xlink:href="#ActionComment"></use></svg>
Комментировать
</small></a>
@livewire('plan.like', ['plan' => $plan])
<a href="#" class="d-flex align-items-center --f_main"><small>
<svg width="21" height="22" class="me-1"><use xlink:href="#Share"></use></svg>
<span class="d-none d-sm-inline">Поделится</span>
</small></a>
</div>
</div>
<div class="col px-0 flex-grow-1">
<div class="accordion" id="collapsedPlans">
<div class="accordion-item mb-3 --bg_white --shadow --radius overflow-hidden">
<div class="accordion-header" id="headingOne">
<div class="accordion-button d-flex align-items-center fs-4" type="button" data-bs-toggle="collapse" data-bs-target="#collapsedPlan1" aria-expanded="true" aria-controls="collapsedPlan1">
<div class="me-3 --f_bold">{{ $options1['price'] ?? '0' }} ₽</div>
<div>{{ $options1['short'] ?? ''}}</div>
</div>
</div>
<div id="collapsedPlan1" class="accordion-collapse collapse show" aria-labelledby="collapsedPlan1" data-bs-parent="#collapsedPlans">
<div class="accordion-body fs-4_5">
<p>{{ $options1['description'] ?? '' }}</p>
@isset($options1['items'])
<ul class="checks -reverse --sber">
@foreach($options1['items'] as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@endisset
<a href="#" class="btn btn-lg btn-success btn-block w-100 py-2 fs-4 --f_bolder">Заказать за {{ $options1['price'] ?? '0' }} ₽</a>
</div>
</div>
</div>
@if($plan->packets_count == 3)
<div class="accordion-item mb-3 --bg_white --shadow --radius overflow-hidden">
<div class="accordion-header" id="headingOne">
<div class="accordion-button collapsed d-flex align-items-center fs-4" type="button" data-bs-toggle="collapse" data-bs-target="#collapsedPlan2" aria-expanded="true" aria-controls="collapsedPlan2">
<div class="me-3 --f_bold">{{ $options2['price'] ?? '0' }} ₽</div>
<div>{{ $options2['short'] ?? '' }}</div>
</div>
</div>
<div id="collapsedPlan2" class="accordion-collapse collapse" aria-labelledby="collapsedPlan2" data-bs-parent="#collapsedPlans">
<div class="accordion-body fs-4_5">
<p>{{ $options2['description'] ?? '' }}</p>
@isset($options2['items'])
<ul class="checks -reverse --sber">
@foreach($options2['items'] as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@endisset
<a href="#" class="btn btn-lg btn-success btn-block w-100 py-2 fs-4 --f_bolder">Заказать за {{ $options2['price'] ?? '0' }} ₽</a>
</div>
</div>
</div>
<div class="accordion-item --bg_white --shadow --radius overflow-hidden">
<div class="accordion-header" id="headingOne">
<div class="accordion-button collapsed d-flex align-items-center fs-4" type="button" data-bs-toggle="collapse" data-bs-target="#collapsedPlan3" aria-expanded="true" aria-controls="collapsedPlan3">
<div class="me-3 --f_bold">{{ $options3['price'] ?? '0' }} ₽</div>
<div>{{ $options3['short'] ?? '' }}</div>
</div>
</div>
<div id="collapsedPlan3" class="accordion-collapse collapse" aria-labelledby="collapsedPlan3" data-bs-parent="#collapsedPlans">
<div class="accordion-body fs-4_5">
<p>{{ $options3['description'] ?? '' }}</p>
@isset($options3['items'])
<ul class="checks -reverse --sber">
@foreach($options3['items'] as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@endisset
<a href="#" class="btn btn-lg btn-success btn-block w-100 py-2 fs-4 --f_bolder">Заказать за {{ $options3['price'] ?? '0' }} ₽</a>
</div>
</div>
</div>
@endif
</div>
</div>
</div>
</div>
<div class="settings__actions">
<div class="settings__action setting__person">
<div class="settings__person-content">
<a href="{{ route('profile.show', ['user' => $author]) }}" class="setting__person-name">
{{ $author->name }}
</a>
</div>
<a href="" class="settings__person-thumb">
<img src="{{ $authorPhoto }}" alt="thumb">
</a>
</div>
<a href="" class="settings__action btn btn-md btn-primary icon-message-square">
<span>Написать</span>
</a>
</div>
</div>
<div class="container px-0 mb-4 --mw-1000">
<div class="h4 mb-4 --f_grey">ОТЗЫВЫ</div>
</div>
@livewire('plan.comment.show', ['plan' => $plan])
@livewire('plan.comment.create', ['plan' => $plan, 'user' => Auth::user()])
</section>
<div class="settings__plans">
<div class="settings__plans-body">
<div class="settings__plans-announcement announcement">
<div class="announcement__header">
<div class="announcement__header-title title">
{{ $plan->name }}
</div>
<div class="announcement__header-stats">
<div class="announcement__header-stat icon-eye-fill">{{ $planViewsCount }}</div>
<div class="announcement__header-stat icon-heart-fill">@livewire('plan.like-count', ['plan' => $plan])</div>
<div class="announcement__header-stat icon-message-square">{{ $plan->comments_count }}
</div>
</div>
</div>
<div class="announcement__image">
<img src="{{ $image }}" class="cover-image" alt="announcement">
</div>
<div class="announcement__details">
<div class="announcement__details-rows">
<div class="announcement__details-row">
<div class="announcement__details-caption">
Время прохождения плана:
</div>
<div class="announcement__details-value">
{{ $plan->duration }} дней
</div>
</div>
<div class="announcement__details-row">
<div class="announcement__details-caption">
Проходят план:
</div>
<div class="announcement__details-value">
2 пользователя
</div>
</div>
</div>
<button type="button" class="announcement__details-btn icon-heart"></button>
</div>
<p class="announcement__desc">
{{ $plan->details }}
</p>
{{-- @livewire('plan.like', ['plan' => $plan]) --}}
<div class="announcement__footer">
<button type="button"
class="announcement__footer-action icon-message-square">Комментировать</button>
<button type="button" class="announcement__footer-action icon-heart">Нравится</button>
<button type="button" class="announcement__footer-action icon-share">Поделится</button>
</div>
</div>
</div>
@livewire('plan.accordion', ['plan' => $plan])
</div>
</div>
</section>
<section class="reviews">
<div class="reviews__container">
<h2 class="reviews__title title">
ОТЗЫВЫ
</h2>
@livewire('plan.comment.show', ['plan' => $plan])
@livewire('plan.comment.create', ['plan' => $plan, 'user' => Auth::user()])
</div>
</section>
</section>
@endsection
@push('jq_scripts')
<script src="/js/bootstrap.min.js"></script>
<script src="/js/bootstrap.bundle.min.js"></script>
{{-- <script src="js/app.min.js"></script> --}}
<script src="/js/bootstrap.min.js"></script>
<script src="/js/bootstrap.bundle.min.js"></script>
@endpush