Skip to content

Commit c7aa349

Browse files
author
Tony Lea
committed
Adding the profile update, password update and delete functionality
1 parent 6deff4e commit c7aa349

File tree

17 files changed

+689
-153
lines changed

17 files changed

+689
-153
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
use Illuminate\Support\Facades\Redirect;
10+
use Illuminate\Support\Facades\Hash;
11+
use Illuminate\Validation\Rules\Password;
12+
use Inertia\Inertia;
13+
use Inertia\Response;
14+
15+
class DeleteController extends Controller
16+
{
17+
/**
18+
* Display the user's password form.
19+
*/
20+
public function edit(Request $request): Response
21+
{
22+
return Inertia::render('Settings/Delete', [
23+
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
24+
'status' => session('status'),
25+
]);
26+
}
27+
28+
/**
29+
* Delete the user's account.
30+
*/
31+
public function destroy(Request $request): RedirectResponse
32+
{
33+
$request->validate([
34+
'password' => ['required', 'current_password'],
35+
]);
36+
37+
$user = $request->user();
38+
39+
Auth::logout();
40+
41+
$user->delete();
42+
43+
$request->session()->invalidate();
44+
$request->session()->regenerateToken();
45+
46+
return Redirect::to('/');
47+
}
48+
}

app/Http/Controllers/Settings/ProfileController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace App\Http\Controllers\Settings;
44

55
use App\Http\Controllers\Controller;
6-
use App\Http\Requests\ProfileUpdateRequest;
6+
use App\Http\Requests\Settings\ProfileUpdateRequest;
77
use Illuminate\Contracts\Auth\MustVerifyEmail;
88
use Illuminate\Http\RedirectResponse;
99
use Illuminate\Http\Request;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Requests\Settings;
4+
5+
use App\Models\User;
6+
use Illuminate\Foundation\Http\FormRequest;
7+
use Illuminate\Validation\Rule;
8+
9+
class ProfileUpdateRequest extends FormRequest
10+
{
11+
/**
12+
* Get the validation rules that apply to the request.
13+
*
14+
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
15+
*/
16+
public function rules(): array
17+
{
18+
return [
19+
'name' => ['required', 'string', 'max:255'],
20+
'email' => [
21+
'required',
22+
'string',
23+
'lowercase',
24+
'email',
25+
'max:255',
26+
Rule::unique(User::class)->ignore($this->user()->id),
27+
],
28+
];
29+
}
30+
}

app/Models/User.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
namespace App\Models;
44

5-
use Illuminate\Contracts\Auth\MustVerifyEmail;
5+
// use Illuminate\Contracts\Auth\MustVerifyEmail;
66
use Illuminate\Database\Eloquent\Factories\HasFactory;
77
use Illuminate\Foundation\Auth\User as Authenticatable;
88
use Illuminate\Notifications\Notifiable;
99

10-
class User extends Authenticatable implements MustVerifyEmail
10+
class User extends Authenticatable
1111
{
1212
/** @use HasFactory<\Database\Factories\UserFactory> */
1313
use HasFactory, Notifiable;

package-lock.json

Lines changed: 67 additions & 61 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"@headlessui/react": "^2.2.0",
2424
"@radix-ui/react-avatar": "^1.1.2",
2525
"@radix-ui/react-collapsible": "^1.1.2",
26-
"@radix-ui/react-dialog": "^1.1.3",
26+
"@radix-ui/react-dialog": "^1.1.4",
2727
"@radix-ui/react-dropdown-menu": "^2.1.3",
2828
"@radix-ui/react-label": "^2.1.1",
2929
"@radix-ui/react-separator": "^1.1.1",
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import * as React from "react"
2+
import { cva, type VariantProps } from "class-variance-authority"
3+
4+
import { cn } from "@/lib/utils"
5+
6+
const alertVariants = cva(
7+
"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
8+
{
9+
variants: {
10+
variant: {
11+
default: "bg-background text-foreground",
12+
destructive:
13+
"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
14+
},
15+
},
16+
defaultVariants: {
17+
variant: "default",
18+
},
19+
}
20+
)
21+
22+
const Alert = React.forwardRef<
23+
HTMLDivElement,
24+
React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
25+
>(({ className, variant, ...props }, ref) => (
26+
<div
27+
ref={ref}
28+
role="alert"
29+
className={cn(alertVariants({ variant }), className)}
30+
{...props}
31+
/>
32+
))
33+
Alert.displayName = "Alert"
34+
35+
const AlertTitle = React.forwardRef<
36+
HTMLParagraphElement,
37+
React.HTMLAttributes<HTMLHeadingElement>
38+
>(({ className, ...props }, ref) => (
39+
<h5
40+
ref={ref}
41+
className={cn("mb-1 font-medium leading-none tracking-tight", className)}
42+
{...props}
43+
/>
44+
))
45+
AlertTitle.displayName = "AlertTitle"
46+
47+
const AlertDescription = React.forwardRef<
48+
HTMLParagraphElement,
49+
React.HTMLAttributes<HTMLParagraphElement>
50+
>(({ className, ...props }, ref) => (
51+
<div
52+
ref={ref}
53+
className={cn("text-sm [&_p]:leading-relaxed", className)}
54+
{...props}
55+
/>
56+
))
57+
AlertDescription.displayName = "AlertDescription"
58+
59+
export { Alert, AlertTitle, AlertDescription }

0 commit comments

Comments
 (0)