Skip to content
Open
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
36 changes: 36 additions & 0 deletions app/Collections/AddressCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

declare(strict_types=1);

namespace App\Collections;

use App\Models\Address;
use Illuminate\Database\Eloquent\Collection;

/**
* @mixin \App\Models\Address
*/
class AddressCollection extends Collection
{
public function setAllAsInactive(): static
{
$this->toQuery()->update(['is_active' => false]);

return $this;
}

/**
* @return static<int, Address>
*/
public function withoutActive(): static
{
// @phpstan-ignore-next-line
return $this->filter(fn (Address $address): bool => ! $address->is_active);
}

public function onlyActive(): Address|null
{
// @phpstan-ignore-next-line
return $this->filter(fn (Address $address): bool => $address->is_active)->first();
}
}
54 changes: 54 additions & 0 deletions app/Concerns/Livewire/ModalUtils.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

declare(strict_types=1);

namespace App\Concerns\Livewire;

use Livewire\Component;

/**
* @mixin Component
*/
trait ModalUtils
{
private string $modalIdProperty;

protected function setModalIdProperty(string $id): void
{
$this->modalIdProperty = $id;
}

protected function getModalId(): string
{
if(! property_exists($this, $this->modalIdProperty)) {
throw new \InvalidArgumentException("Property {$this->modalIdProperty} does not exist.");
}

return $this->{$this->modalIdProperty};
}

public function openModal(?string $id = null): void
{
$id = $id ?? $this->getModalId();

$this->js(
"
let myModal = document.getElementById('{$id}');
let modalInstance = bootstrap.Modal.getInstance(myModal);
modalInstance.hide();
");
}

public function closeModal(?string $id = null): void
{
$id = $id ?? $this->getModalId();

$this->js(
"
let myModal = document.getElementById('{$id}');
let modalInstance = bootstrap.Modal.getOrCreateInstance(myModal);
modalInstance.show();
"
);
}
}
10 changes: 10 additions & 0 deletions app/Contracts/Addressable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

declare(strict_types=1);

namespace App\Contracts;

interface Addressable
{
public function addresses(): \Illuminate\Database\Eloquent\Relations\MorphMany;
}
4 changes: 1 addition & 3 deletions app/Http/Controllers/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,4 @@

namespace App\Http\Controllers;

abstract class Controller
{
}
abstract class Controller {}
1 change: 1 addition & 0 deletions app/Http/Middleware/SetTeamPermissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public function handle(Request $request, Closure $next): Response

if ($user === null) {
setPermissionsTeamId(null);

return $next($request);
}

Expand Down
2 changes: 1 addition & 1 deletion app/Livewire/Admin/Components/Invites/Create.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public function mount(): void
public function create(): void
{
$this->authorize('create', Invite::class);

$expireAt = Carbon::parse($this->expireAt);

$this->validate([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public function update(string $id, string $name): void
public function delete(string $id): void
{
$this->authorize('delete', Permission::class);

Permission::query()->findOrFail($id)->delete();

$this->dispatch('flash-message', message: 'Permission Deleted');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class RolesTable extends Component
public function delete(string $id): void
{
$this->authorize('delete', Role::class);

Role::query()->findOrFail($id)->delete();

$this->dispatch('flash-message', message: 'Role deleted successfully.');
Expand Down
2 changes: 1 addition & 1 deletion app/Livewire/Admin/Components/Store/Table.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Table extends Component
public function delete(string $id): void
{
$this->authorize('delete', Store::class);

Store::query()->findOrFail($id)->delete();

$this->dispatch('flash-message', message: 'Deleted store successfully');
Expand Down
1 change: 1 addition & 0 deletions app/Livewire/Admin/Pages/RolesAndPermissions/Index.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public function mount(): void
{
$this->authorize('viewAny', Role::class);
}

public function render(): View
{
return view('livewire.admin.pages.roles-and-permissions.index');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class PermissionsCreate extends Component
public function create(): void
{
$this->authorize('create', Permission::class);

$data = $this->validate();
$name = str($data['name'])->lower()->snake();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class RolesCreate extends Component
public function create(): void
{
$this->authorize('create', Role::class);

$data = $this->validate();

Role::query()->create(['name' => $data['name']])->syncPermissions($data['permissions']);
Expand Down
4 changes: 2 additions & 2 deletions app/Livewire/Admin/Pages/RolesAndPermissions/RolesUpdate.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ class RolesUpdate extends Component

public function mount(Role $role): void
{
$this->id = $role->id; // @phpstan-ignore-line
$this->id = $role->id;
$this->name = $role->name;
$this->permissions = $role->permissions->pluck('id')->toArray(); // @phpstan-ignore-line
}

public function update(): void
{
$this->authorize('update', Role::class);

$data = $this->validate();

$role = Role::query()->findOrFail($this->id);
Expand Down
2 changes: 1 addition & 1 deletion app/Livewire/Admin/Pages/Store/Create.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class Create extends Component
public function store(): void
{
$this->authorize('create', Store::class);

$this->validate();

$store = Store::query()->create([
Expand Down
50 changes: 50 additions & 0 deletions app/Livewire/Components/ChangeUserInformation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

namespace App\Livewire\Components;

use App\Models\User;
use Illuminate\View\View;
use Livewire\Component;

class ChangeUserInformation extends Component
{
public string $email;

public string $name;

public function mount(): void
{
/** @var User $user */
$user = auth()->user();

$this->name = $user->name;
$this->email = $user->email;
}

public function updateProfile(): void
{
/** @var User $user */
$user = auth()->user();

$this->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email,'.$user->id,
]);

$user->update([
'name' => $this->name,
'email' => $this->email,
]);

$this->dispatch(User::UPDATED);

$this->flashMessage('Updated user profile successfully');
}

public function render(): View
{
return view('livewire.components.change-user-information');
}
}
44 changes: 44 additions & 0 deletions app/Livewire/Components/ChangeUserPassword.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

declare(strict_types=1);

namespace App\Livewire\Components;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\View\View;
use Livewire\Attributes\Validate;
use Livewire\Component;

class ChangeUserPassword extends Component
{
#[Validate('required|current_password:web')]
public string $oldPassword;

#[Validate('required')]
public string $newPassword;

#[Validate('required_with:newPassword|same:newPassword')]
public string $confirmNewPassword;

public function changePassword(): void
{
$this->validate();

/** @var User $user */
$user = auth()->user();

$user->forceFill([
'password' => Hash::make($this->newPassword),
])->save();

$this->reset();

$this->flashMessage('Updated password successfully!');
}

public function render(): View
{
return view('livewire.components.change-user-password');
}
}
18 changes: 18 additions & 0 deletions app/Livewire/Customer/Pages/Checkout.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace App\Livewire\Customer\Pages;

use Illuminate\View\View;
use Livewire\Attributes\Layout;
use Livewire\Component;

#[Layout('components.layouts.roles.customer')]
class Checkout extends Component
{
public function render(): View
{
return view('livewire.customer.pages.checkout');
}
}
71 changes: 71 additions & 0 deletions app/Livewire/Forms/Address.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

declare(strict_types=1);

namespace App\Livewire\Forms;

use App\Models\Address as AddressModel;
use Illuminate\Validation\ValidationException;
use Livewire\Attributes\Validate;
use Livewire\Form;

class Address extends Form
{
public ?AddressModel $address;

#[Validate('required')]
public ?string $line_one = null;

#[Validate('nullable')]
public ?string $line_two = null;

#[Validate('nullable')]
public ?string $city = null;

#[Validate('nullable')]
public ?string $region = null;

#[Validate('nullable')]
public ?string $country = null;

#[Validate('required')]
public ?string $zip_code = null;

public function setAddress(AddressModel $address): static
{
$this->address = $address;

$this->fill($address->only([
'line_one',
'line_two',
'city',
'region',
'country',
'zip_code',
]));

return $this;
}

/**
* @throws ValidationException
*/
public function store(): ?AddressModel
{
if($this->address) {
return null;
}

return AddressModel::query()->create($this->validate());
}

public function update(): bool|null
{
return $this->address?->update($this->validate());
}

public function destroy(): bool|null
{
return $this->address?->delete();
}
}
Loading
Loading