profile page

This commit is contained in:
Bayu Lukman Yusuf 2026-01-19 09:07:01 +07:00
parent 2f293642ea
commit b8bc23ee1f
7 changed files with 66 additions and 59 deletions

View File

@ -120,6 +120,8 @@ class LoginEmailController extends Controller
'device' => 'web', 'device' => 'web',
]); ]);
return redirect()->route('home')->with('success', __('otp.login_success')); return redirect()->route('home')->with('success', __('otp.login_success'));
} catch (\Illuminate\Validation\ValidationException $e) { } catch (\Illuminate\Validation\ValidationException $e) {

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function index(Request $request)
{
if (!auth()->check()) {
return redirect()->route('login');
}
return view('account.info');
}
}

View File

@ -16,40 +16,35 @@
</div> </div>
<div class="collapse basic-info show" id="basicInfoPreview"> <div class="collapse basic-info show" id="basicInfoPreview">
<ul class="list-unstyled fs-sm m-0"> <ul class="list-unstyled fs-sm m-0">
<li>Susan Gardner</li> <li>{{ auth()->user()->name }}</li>
<li>May 12, 1996</li> <li>{{ auth()->user()->email }}</li>
<li>English</li> {{-- <li>English</li> --}}
</ul> </ul>
</div> </div>
<div class="collapse basic-info" id="basicInfoEdit"> <div class="collapse basic-info" id="basicInfoEdit">
<form class="row g-3 g-sm-4 needs-validation" novalidate=""> <form class="row g-3 g-sm-4 needs-validation" novalidate="">
<div class="col-sm-6"> <div class="col-sm-6">
<label class="form-label" for="fn">First name</label> <label class="form-label" for="fn">Name</label>
<div class="position-relative"> <div class="position-relative">
<input class="form-control" id="fn" required="" type="text" value="Susan" /> <input class="form-control" id="fn" required="" type="text"
value="{{ auth()->user()->name }}" />
<div class="invalid-feedback">Please enter your first name!</div> <div class="invalid-feedback">Please enter your first name!</div>
</div> </div>
</div> </div>
<div class="col-sm-6">
<label class="form-label" for="ln">Last name</label>
<div class="position-relative">
<input class="form-control" id="ln" required="" type="text" value="Gardner" />
<div class="invalid-feedback">Please enter your last name!</div>
</div>
</div>
<div class="col-sm-6"> <div class="col-sm-6">
<label class="form-label" for="birthdate">Date of birth</label> <label class="form-label" for="birthdate">Date of birth</label>
<div class="position-relative"> <div class="position-relative">
<input class="form-control form-icon-end" <input class="form-control form-icon-end"
data-datepicker='{ data-datepicker='{
"dateFormat": "F j, Y", "dateFormat": "j F Y",
"defaultDate": "May 15, 1996" "defaultDate": "{{ auth()->user()->birth_date != null ? date('j F Y', strtotime(auth()->user()->birth_date)) : '' }}"
}' }'
id="birthdate" placeholder="Choose date" type="text" /> id="birthdate" placeholder="Choose date" type="text" />
<i class="ci-calendar position-absolute top-50 end-0 translate-middle-y me-3"></i> <i class="ci-calendar position-absolute top-50 end-0 translate-middle-y me-3"></i>
</div> </div>
</div> </div>
<div class="col-sm-6"> {{-- <div class="col-sm-6">
<label class="form-label">Language</label> <label class="form-label">Language</label>
<select class="form-select" <select class="form-select"
data-select='{ data-select='{
@ -80,7 +75,7 @@
] ]
}' }'
data-select-template="true"></select> data-select-template="true"></select>
</div> </div> --}}
<div class="col-12"> <div class="col-12">
<div class="d-flex gap-3 pt-2 pt-sm-0"> <div class="d-flex gap-3 pt-2 pt-sm-0">
<button class="btn btn-primary" type="submit">Save changes</button> <button class="btn btn-primary" type="submit">Save changes</button>
@ -104,8 +99,8 @@
</div> </div>
<div class="collapse contact-info show" id="contactInfoPreview"> <div class="collapse contact-info show" id="contactInfoPreview">
<ul class="list-unstyled fs-sm m-0"> <ul class="list-unstyled fs-sm m-0">
<li class="mb-1">susan.gardner@email.com</li> <li class="mb-1">{{ auth()->user()->email }}</li>
<li>+1 (805) 348 95 72 <span class="text-success ms-1">Verified</span></li> <li>{{ auth()->user()->phone ?? 'Not Set' }}<span class="text-success ms-1">Verified</span></li>
</ul> </ul>
</div> </div>
<div class="collapse contact-info" id="contactInfoEdit"> <div class="collapse contact-info" id="contactInfoEdit">
@ -114,7 +109,7 @@
<label class="form-label" for="email">Email address</label> <label class="form-label" for="email">Email address</label>
<div class="position-relative"> <div class="position-relative">
<input class="form-control" id="email" required="" type="email" <input class="form-control" id="email" required="" type="email"
value="susan.gardner@email.com" /> value="{{ auth()->user()->email ?? 'Not Set' }}" />
<div class="invalid-feedback">Please enter a valid email address!</div> <div class="invalid-feedback">Please enter a valid email address!</div>
</div> </div>
</div> </div>
@ -122,9 +117,9 @@
<label class="form-label" for="phone">Phone number</label> <label class="form-label" for="phone">Phone number</label>
<div class="position-relative"> <div class="position-relative">
<input class="form-control" <input class="form-control"
data-input-format='{"numericOnly": true, "delimiters": ["+1 (", ")", " "], "blocks": [0, 3, 0, 3, 2, 2]}' data-input-format='{"numericOnly": true, "delimiters": ["", " "], "blocks": [0, 3, 0, 3, 0,3,0,3,0,3]}'
id="phone" placeholder="+1 (___) ___ __ __" required="" type="text" id="phone" placeholder="" required="" type="text"
value="+1 (805) 348 95 72" /> value="{{ auth()->user()->phone ?? 'Not Set' }}" />
<div class="invalid-feedback">Please enter your phone number!</div> <div class="invalid-feedback">Please enter your phone number!</div>
</div> </div>
</div> </div>

View File

@ -235,7 +235,7 @@
<!-- Account button visible on screens > 768px wide (md breakpoint) --> <!-- Account button visible on screens > 768px wide (md breakpoint) -->
<a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-shake d-none d-md-inline-flex" <a class="btn btn-icon btn-lg fs-lg btn-outline-secondary border-0 rounded-circle animate-shake d-none d-md-inline-flex"
href="{{ route('login') }}"> href="{{ auth()->check() ? route('profile') : route('login') }}">
<i class="ci-user animate-target"></i> <i class="ci-user animate-target"></i>
<span class="visually-hidden">{{ __('header.account') }}</span> <span class="visually-hidden">{{ __('header.account') }}</span>
</a> </a>

View File

@ -6,12 +6,12 @@
<div class="offcanvas-header d-lg-block py-3 p-lg-0"> <div class="offcanvas-header d-lg-block py-3 p-lg-0">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<div class="h5 d-flex justify-content-center align-items-center flex-shrink-0 text-primary bg-primary-subtle lh-1 rounded-circle mb-0" <div class="h5 d-flex justify-content-center align-items-center flex-shrink-0 text-primary bg-primary-subtle lh-1 rounded-circle mb-0"
style="width: 3rem; height: 3rem">S</div> style="width: 3rem; height: 3rem">{{ auth()->user()->name ? substr(auth()->user()->name, 0, 1) : 'S' }}</div>
<div class="min-w-0 ps-3"> <div class="min-w-0 ps-3">
<h5 class="h6 mb-1">Susan Gardner</h5> <h5 class="h6 mb-1">{{ auth()->user()->name }}</h5>
<div class="nav flex-nowrap text-nowrap min-w-0"> <div class="nav flex-nowrap text-nowrap min-w-0">
<a class="nav-link animate-underline text-body p-0" href="#bonusesModal" data-bs-toggle="modal"> <a class="nav-link animate-underline text-body p-0" href="#bonusesModal" data-bs-toggle="modal">
<svg class="text-warning flex-shrink-0 me-2" xmlns="http://www.w3.org/2000/svg" {{-- <svg class="text-warning flex-shrink-0 me-2" xmlns="http://www.w3.org/2000/svg"
width="16" height="16" fill="currentColor"> width="16" height="16" fill="currentColor">
<path <path
d="M1.333 9.667H7.5V16h-5c-.64 0-1.167-.527-1.167-1.167V9.667zm13.334 0v5.167c0 .64-.527 1.167-1.167 1.167h-5V9.667h6.167zM0 5.833V7.5c0 .64.527 1.167 1.167 1.167h.167H7.5v-1-3H1.167C.527 4.667 0 5.193 0 5.833zm14.833-1.166H8.5v3 1h6.167.167C15.473 8.667 16 8.14 16 7.5V5.833c0-.64-.527-1.167-1.167-1.167z" /> d="M1.333 9.667H7.5V16h-5c-.64 0-1.167-.527-1.167-1.167V9.667zm13.334 0v5.167c0 .64-.527 1.167-1.167 1.167h-5V9.667h6.167zM0 5.833V7.5c0 .64.527 1.167 1.167 1.167h.167H7.5v-1-3H1.167C.527 4.667 0 5.193 0 5.833zm14.833-1.166H8.5v3 1h6.167.167C15.473 8.667 16 8.14 16 7.5V5.833c0-.64-.527-1.167-1.167-1.167z" />
@ -19,9 +19,11 @@
d="M8 5.363a.5.5 0 0 1-.495-.573C7.752 3.123 9.054-.03 12.219-.03c1.807.001 2.447.977 2.447 1.813 0 1.486-2.069 3.58-6.667 3.58zM12.219.971c-2.388 0-3.295 2.27-3.595 3.377 1.884-.088 3.072-.565 3.756-.971.949-.563 1.287-1.193 1.287-1.595 0-.599-.747-.811-1.447-.811z" /> d="M8 5.363a.5.5 0 0 1-.495-.573C7.752 3.123 9.054-.03 12.219-.03c1.807.001 2.447.977 2.447 1.813 0 1.486-2.069 3.58-6.667 3.58zM12.219.971c-2.388 0-3.295 2.27-3.595 3.377 1.884-.088 3.072-.565 3.756-.971.949-.563 1.287-1.193 1.287-1.595 0-.599-.747-.811-1.447-.811z" />
<path <path
d="M8.001 5.363c-4.598 0-6.667-2.094-6.667-3.58 0-.836.641-1.812 2.448-1.812 3.165 0 4.467 3.153 4.713 4.819a.5.5 0 0 1-.495.573zM3.782.971c-.7 0-1.448.213-1.448.812 0 .851 1.489 2.403 5.042 2.566C7.076 3.241 6.169.971 3.782.971z" /> d="M8.001 5.363c-4.598 0-6.667-2.094-6.667-3.58 0-.836.641-1.812 2.448-1.812 3.165 0 4.467 3.153 4.713 4.819a.5.5 0 0 1-.495.573zM3.782.971c-.7 0-1.448.213-1.448.812 0 .851 1.489 2.403 5.042 2.566C7.076 3.241 6.169.971 3.782.971z" />
</svg> </svg> --}}
<span class="animate-target me-1">100 bonuses</span> <span
<span class="text-body fw-normal text-truncate">available</span> class="animate-target me-1">{{ number_format(auth()->user()->customer->point ?? 0, 0, ',', '.') }}
Points</span>
{{-- <span class="text-body fw-normal text-truncate">available</span> --}}
</a> </a>
</div> </div>
</div> </div>
@ -33,21 +35,24 @@
<!-- Body (Navigation) --> <!-- Body (Navigation) -->
<div class="offcanvas-body d-block pt-2 pt-lg-4 pb-lg-0"> <div class="offcanvas-body d-block pt-2 pt-lg-4 pb-lg-0">
<nav class="list-group list-group-borderless"> <nav class="list-group list-group-borderless">
<a class="list-group-item list-group-item-action d-flex align-items-center" href="{{ route('second', ['account', 'orders'])}}"> <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'orders']) }}">
<i class="ci-shopping-bag fs-base opacity-75 me-2"></i> <i class="ci-shopping-bag fs-base opacity-75 me-2"></i>
Orders Orders
<span class="badge bg-primary rounded-pill ms-auto">1</span> <span class="badge bg-primary rounded-pill ms-auto">1</span>
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'wishlist'])}}"> href="{{ route('second', ['account', 'wishlist']) }}">
<i class="ci-heart fs-base opacity-75 me-2"></i> <i class="ci-heart fs-base opacity-75 me-2"></i>
Wishlist Wishlist
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" href="{{ route('second', ['account', 'payment'])}}"> <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'payment']) }}">
<i class="ci-credit-card fs-base opacity-75 me-2"></i> <i class="ci-credit-card fs-base opacity-75 me-2"></i>
Payment methods Payment methods
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" href="{{ route('second', ['account', 'reviews'])}}"> <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'reviews']) }}">
<i class="ci-star fs-base opacity-75 me-2"></i> <i class="ci-star fs-base opacity-75 me-2"></i>
My reviews My reviews
</a> </a>
@ -55,35 +60,37 @@
<h6 class="pt-4 ps-2 ms-1">Manage account</h6> <h6 class="pt-4 ps-2 ms-1">Manage account</h6>
<nav class="list-group list-group-borderless"> <nav class="list-group list-group-borderless">
<a class="list-group-item list-group-item-action d-flex align-items-center" <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'info'])}}"> href="{{ route('second', ['account', 'info']) }}">
<i class="ci-user fs-base opacity-75 me-2"></i> <i class="ci-user fs-base opacity-75 me-2"></i>
Personal info Personal info
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'addresses'])}}"> href="{{ route('second', ['account', 'addresses']) }}">
<i class="ci-map-pin fs-base opacity-75 me-2"></i> <i class="ci-map-pin fs-base opacity-75 me-2"></i>
Addresses Addresses
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'notifications'])}}"> href="{{ route('second', ['account', 'notifications']) }}">
<i class="ci-bell fs-base opacity-75 mt-1 me-2"></i> <i class="ci-bell fs-base opacity-75 mt-1 me-2"></i>
Notifications Notifications
</a> </a>
</nav> </nav>
<h6 class="pt-4 ps-2 ms-1">Customer service</h6> <h6 class="pt-4 ps-2 ms-1">Customer service</h6>
<nav class="list-group list-group-borderless"> <nav class="list-group list-group-borderless">
<a class="list-group-item list-group-item-action d-flex align-items-center" href="{{ route('second', ['help', 'topics-v1']) }}"> <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['help', 'topics-v1']) }}">
<i class="ci-help-circle fs-base opacity-75 me-2"></i> <i class="ci-help-circle fs-base opacity-75 me-2"></i>
Help center Help center
</a> </a>
<a class="list-group-item list-group-item-action d-flex align-items-center" <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('any', 'terms-and-conditions')}}"> href="{{ route('any', 'terms-and-conditions') }}">
<i class="ci-info fs-base opacity-75 me-2"></i> <i class="ci-info fs-base opacity-75 me-2"></i>
Terms and conditions Terms and conditions
</a> </a>
</nav> </nav>
<nav class="list-group list-group-borderless pt-3"> <nav class="list-group list-group-borderless pt-3">
<a class="list-group-item list-group-item-action d-flex align-items-center" href="{{ route('second', ['account', 'signin'])}}"> <a class="list-group-item list-group-item-action d-flex align-items-center"
href="{{ route('second', ['account', 'signin']) }}">
<i class="ci-log-out fs-base opacity-75 me-2"></i> <i class="ci-log-out fs-base opacity-75 me-2"></i>
Log out Log out
</a> </a>

View File

@ -12,24 +12,7 @@
<!-- Navbar brand (Logo) --> <!-- Navbar brand (Logo) -->
<a href="/" class="navbar-brand me-0"> <a href="/" class="navbar-brand me-0">
<span class="d-none d-sm-flex flex-shrink-0 text-primary me-2"> <img src="{{ asset('logo/logo-colored.png') }}" alt="AsiaGolf" class="" style="height: 40px;" >
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36">
<path
d="M36 18.01c0 8.097-5.355 14.949-12.705 17.2a18.12 18.12 0 0 1-5.315.79C9.622 36 2.608 30.313.573 22.611.257 21.407.059 20.162 0 18.879v-1.758c.02-.395.059-.79.099-1.185.099-.908.277-1.817.514-2.686C2.687 5.628 9.682 0 18 0c5.572 0 10.551 2.528 13.871 6.517 1.502 1.797 2.648 3.91 3.359 6.201.494 1.659.771 3.436.771 5.292z"
fill="currentColor" />
<g fill="#fff">
<path
d="M17.466 21.624c-.514 0-.988-.316-1.146-.829-.198-.632.138-1.303.771-1.501l7.666-2.469-1.205-8.254-13.317 4.621a1.19 1.19 0 0 1-1.521-.75 1.19 1.19 0 0 1 .751-1.521l13.89-4.818c.553-.197 1.166-.138 1.64.158a1.82 1.82 0 0 1 .85 1.284l1.344 9.183c.138.987-.494 1.994-1.482 2.33l-7.864 2.528-.375.04zm7.31.138c-.178-.632-.85-1.007-1.482-.81l-5.177 1.58c-2.331.79-3.28.02-3.418-.099l-6.56-8.412a4.25 4.25 0 0 0-4.406-1.758l-3.122.987c-.237.889-.415 1.777-.514 2.686l4.228-1.363a1.84 1.84 0 0 1 1.857.81l6.659 8.551c.751.948 2.015 1.323 3.359 1.323.909 0 1.857-.178 2.687-.474l5.078-1.54c.632-.178 1.008-.829.81-1.481z" />
<use href="#czlogo" />
<use href="#czlogo" x="8.516" y="-2.172" />
</g>
<defs>
<path id="czlogo"
d="M18.689 28.654a1.94 1.94 0 0 1-1.936 1.935 1.94 1.94 0 0 1-1.936-1.935 1.94 1.94 0 0 1 1.936-1.935 1.94 1.94 0 0 1 1.936 1.935z" />
</defs>
</svg>
</span>
AsiaGolf
</a> </a>
</div> </div>
<div class="col col-lg-9 d-flex align-items-center justify-content-end"> <div class="col col-lg-9 d-flex align-items-center justify-content-end">
@ -137,8 +120,8 @@
<a class="btn btn-icon btn-lg btn-secondary animate-scale fs-5 fw-normal position-relative rounded-circle ms-2 d-none d-md-inline-flex" <a class="btn btn-icon btn-lg btn-secondary animate-scale fs-5 fw-normal position-relative rounded-circle ms-2 d-none d-md-inline-flex"
href="{{ route('second', ['account', 'orders']) }}" data-bs-toggle="tooltip" data-bs-placement="bottom" href="{{ route('second', ['account', 'orders']) }}" data-bs-toggle="tooltip" data-bs-placement="bottom"
data-bs-custom-class="tooltip-sm text-nowrap" data-bs-container="#accountBtn" data-bs-custom-class="tooltip-sm text-nowrap" data-bs-container="#accountBtn"
title="Susan Gardner"> title="{{ auth()->user()->name }}">
<span class="animate-target">S</span> <span class="animate-target">{{ auth()->user()->name ? substr(auth()->user()->name, 0, 1) : 'S' }}</span>
</a> </a>
</div> </div>
@endif @endif

View File

@ -11,6 +11,7 @@ use App\Http\Controllers\LocaleController;
use App\Http\Controllers\ProductController; use App\Http\Controllers\ProductController;
use App\Http\Controllers\SearchController; use App\Http\Controllers\SearchController;
use App\Http\Controllers\ComponentController; use App\Http\Controllers\ComponentController;
use App\Http\Controllers\Auth\ProfileController;
Route::group(['prefix' => '/dummy'], function () { Route::group(['prefix' => '/dummy'], function () {
Route::get('', [RoutingController::class, 'index'])->name('root'); Route::get('', [RoutingController::class, 'index'])->name('root');
@ -67,3 +68,5 @@ Route::group(['prefix' => '/login/google'], function () {
Route::get('/callback', [App\Http\Controllers\Auth\GoogleController::class, 'handleGoogleCallback'])->name('login.google.callback'); Route::get('/callback', [App\Http\Controllers\Auth\GoogleController::class, 'handleGoogleCallback'])->name('login.google.callback');
}); });
Route::get('/profile', [ProfileController::class, 'index'])->name('profile');