@if($member->profile_picture)
-
@else
{{ strtoupper(substr($member->full_name, 0, 1)) }}
@@ -224,6 +224,16 @@
.member-card-wrapper.hidden {
display: none;
}
+
+ /* Improve image quality */
+ .rounded-circle img {
+ image-rendering: -webkit-optimize-contrast;
+ image-rendering: crisp-edges;
+ backface-visibility: hidden;
+ -webkit-backface-visibility: hidden;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
@endpush
diff --git a/resources/views/components/edit-profile-modal.blade.php b/resources/views/components/edit-profile-modal.blade.php
new file mode 100644
index 0000000..a129722
--- /dev/null
+++ b/resources/views/components/edit-profile-modal.blade.php
@@ -0,0 +1,1005 @@
+@props([
+ 'user',
+ 'formAction',
+ 'formMethod' => 'PUT',
+ 'cancelUrl' => null,
+ 'showRelationshipFields' => false,
+ 'relationship' => null,
+])
+
+
+
+
+@push('styles')
+
+@endpush
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/components/nationality-dropdown.blade.php b/resources/views/components/nationality-dropdown.blade.php
index 3d26a8c..3124fc9 100644
--- a/resources/views/components/nationality-dropdown.blade.php
+++ b/resources/views/components/nationality-dropdown.blade.php
@@ -108,7 +108,7 @@
${country.name}
`;
button.addEventListener('click', function() {
- selectNationality(componentId, country.name, flagEmoji);
+ selectNationality(componentId, country.iso3, flagEmoji, country.name);
});
countryList.appendChild(button);
});
@@ -133,26 +133,31 @@
// Set initial value if provided
const hiddenInput = document.getElementById(componentId);
if (hiddenInput && hiddenInput.value) {
- const initialCountry = countries.find(c => c.name === hiddenInput.value);
+ // Try to find by ISO3 code first, then by name
+ let initialCountry = countries.find(c => c.iso3 === hiddenInput.value);
+ if (!initialCountry) {
+ initialCountry = countries.find(c => c.name === hiddenInput.value);
+ }
+
if (initialCountry) {
const flagEmoji = initialCountry.iso2
.toUpperCase()
.split('')
.map(char => String.fromCodePoint(127397 + char.charCodeAt(0)))
.join('');
- selectNationality(componentId, initialCountry.name, flagEmoji);
+ selectNationality(componentId, initialCountry.iso3, flagEmoji, initialCountry.name);
}
}
}
- function selectNationality(componentId, name, flag) {
+ function selectNationality(componentId, iso3, flag, displayName) {
const flagElement = document.getElementById(componentId + 'SelectedFlag');
const countryElement = document.getElementById(componentId + 'SelectedCountry');
const hiddenInput = document.getElementById(componentId);
if (flagElement) flagElement.textContent = flag + ' ';
- if (countryElement) countryElement.textContent = name;
- if (hiddenInput) hiddenInput.value = name;
+ if (countryElement) countryElement.textContent = displayName;
+ if (hiddenInput) hiddenInput.value = iso3;
// Close the dropdown after selection
const dropdownButton = document.getElementById(componentId + 'Dropdown');
diff --git a/resources/views/components/social-link-row.blade.php b/resources/views/components/social-link-row.blade.php
new file mode 100644
index 0000000..859c9a7
--- /dev/null
+++ b/resources/views/components/social-link-row.blade.php
@@ -0,0 +1,92 @@
+@props(['index', 'link'])
+
+
+
+
+
+
+
+
+
Facebook
+
Twitter/X
+
Instagram
+
LinkedIn
+
YouTube
+
TikTok
+
Snapchat
+
WhatsApp
+
Telegram
+
Discord
+
Reddit
+
Pinterest
+
Twitch
+
GitHub
+
Spotify
+
Skype
+
Slack
+
Medium
+
Vimeo
+
Messenger
+
WeChat
+
Line
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/family/edit.blade.php b/resources/views/family/edit.blade.php
index fed2c0a..cf3e7ab 100644
--- a/resources/views/family/edit.blade.php
+++ b/resources/views/family/edit.blade.php
@@ -2,398 +2,15 @@
@section('content')
-
-
-
-
-
-
-
-
- @if($relationship->dependent->profile_picture)
-
 }})
- @else
-
- {{ strtoupper(substr($relationship->dependent->full_name, 0, 1)) }}
-
- @endif
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
- Are you sure you want to remove {{ $relationship->dependent->full_name }} from your family?
-
-
-
-
-
-
-
-
-
-@push('scripts')
-
-@endpush
@endsection
diff --git a/resources/views/family/partials/affiliations-enhanced.blade.php b/resources/views/family/partials/affiliations-enhanced.blade.php
index f7d19c5..b80bac5 100644
--- a/resources/views/family/partials/affiliations-enhanced.blade.php
+++ b/resources/views/family/partials/affiliations-enhanced.blade.php
@@ -119,12 +119,16 @@
{{ $affiliation->club_name }}
-
- {{ $affiliation->start_date->format('M Y') }} - {{ $isOngoing ? 'Present' : $affiliation->end_date->format('M Y') }}
-
-
- {{ $affiliation->formatted_duration }}
-
+ @if($affiliation->start_date)
+
+ {{ $affiliation->start_date->format('M Y') }} - {{ $isOngoing ? 'Present' : ($affiliation->end_date ? $affiliation->end_date->format('M Y') : 'N/A') }}
+
+ @endif
+ @if($affiliation->formatted_duration)
+
+ {{ $affiliation->formatted_duration }}
+
+ @endif
@if($ageAtStart)
Age: {{ $ageAtStart }}{{ $ageAtEnd && $ageAtEnd != $ageAtStart ? " to $ageAtEnd" : '' }}
@@ -165,7 +169,7 @@
Proficiency: {{ ucfirst($skill->proficiency_level) }}
Duration: {{ $skill->formatted_duration }}
@if($skill->instructor)Instructor: {{ $skill->instructor->user->full_name ?? 'Unknown' }}
@endif
- Started: {{ $skill->start_date->format('M Y') }}">
+ @if($skill->start_date)Started: {{ $skill->start_date->format('M Y') }}@endif">
{{ $skill->skill_name }}
{{ ucfirst($skill->proficiency_level) }}
@@ -432,15 +436,18 @@
- {{ $subscription->start_date->format('M d, Y') }} - {{ $subscription->end_date->format('M d, Y') }}
+ {{ $subscription->start_date ? $subscription->start_date->format('M d, Y') : 'N/A' }} - {{ $subscription->end_date ? $subscription->end_date->format('M d, Y') : 'N/A' }}
@php
- $duration = $subscription->start_date->diff($subscription->end_date);
- $durationParts = [];
- if ($duration->y > 0) $durationParts[] = $duration->y . ' year' . ($duration->y > 1 ? 's' : '');
- if ($duration->m > 0) $durationParts[] = $duration->m . ' month' . ($duration->m > 1 ? 's' : '');
- if ($duration->d > 0) $durationParts[] = $duration->d . ' day' . ($duration->d > 1 ? 's' : '');
- $durationText = implode(' ', $durationParts) ?: 'Same day';
+ $durationText = 'N/A';
+ if ($subscription->start_date && $subscription->end_date) {
+ $duration = $subscription->start_date->diff($subscription->end_date);
+ $durationParts = [];
+ if ($duration->y > 0) $durationParts[] = $duration->y . ' year' . ($duration->y > 1 ? 's' : '');
+ if ($duration->m > 0) $durationParts[] = $duration->m . ' month' . ($duration->m > 1 ? 's' : '');
+ if ($duration->d > 0) $durationParts[] = $duration->d . ' day' . ($duration->d > 1 ? 's' : '');
+ $durationText = implode(' ', $durationParts) ?: 'Same day';
+ }
@endphp
Duration: {{ $durationText }}
@@ -530,13 +537,16 @@
You subscribed to this package {{ $samePackageSubscriptions->count() + 1 }} times:
-
- {{ $subscription->start_date->format('M d, Y') }} - {{ $subscription->end_date->format('M d, Y') }} (Current)
+ {{ $subscription->start_date ? $subscription->start_date->format('M d, Y') : 'N/A' }} - {{ $subscription->end_date ? $subscription->end_date->format('M d, Y') : 'N/A' }} (Current)
@foreach($samePackageSubscriptions as $otherSub)
-
- {{ $otherSub->start_date->format('M d, Y') }} - {{ $otherSub->end_date->format('M d, Y') }}
+ {{ $otherSub->start_date ? $otherSub->start_date->format('M d, Y') : 'N/A' }} - {{ $otherSub->end_date ? $otherSub->end_date->format('M d, Y') : 'N/A' }}
@php
- $gap = $subscription->start_date->diffInMonths($otherSub->start_date);
+ $gap = 0;
+ if ($subscription->start_date && $otherSub->start_date) {
+ $gap = $subscription->start_date->diffInMonths($otherSub->start_date);
+ }
@endphp
@if($gap > 0)
({{ abs($gap) }} months {{ $subscription->start_date->gt($otherSub->start_date) ? 'before' : 'after' }} current)
diff --git a/resources/views/family/profile-edit.blade.php b/resources/views/family/profile-edit.blade.php
index 2eab7cd..099fa56 100644
--- a/resources/views/family/profile-edit.blade.php
+++ b/resources/views/family/profile-edit.blade.php
@@ -2,291 +2,13 @@
@section('content')
-
-
-
-
-
-
- @php
- $currentProfileImage = '';
-
- // Check user's profile_picture field first (set by upload controller)
- if ($user->profile_picture && file_exists(public_path('storage/' . $user->profile_picture))) {
- $currentProfileImage = asset('storage/' . $user->profile_picture);
- } else {
- // Fallback: check for files with common extensions
- $extensions = ['png', 'jpg', 'jpeg', 'webp'];
- foreach ($extensions as $ext) {
- $path = 'storage/images/profiles/profile_' . $user->id . '.' . $ext;
- if (file_exists(public_path($path))) {
- $currentProfileImage = asset($path);
- break;
- }
- }
- }
- @endphp
-
-
-
-
-
-
-
-
-
-
+
-@push('scripts')
-
-@endpush
-
-@stack('styles')
@endsection
diff --git a/resources/views/family/show.blade.php b/resources/views/family/show.blade.php
index 7cb0ccb..8377470 100644
--- a/resources/views/family/show.blade.php
+++ b/resources/views/family/show.blade.php
@@ -15,19 +15,6 @@
@section('content')
-
- @if(session('success'))
-
- {{ session('success') }}
-
-
- @endif
- @if(session('error'))
-
- {{ session('error') }}
-
-
- @endif
-