diff --git a/resources/css/app.css b/resources/css/app.css
index f100001..fbcdce1 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -64,3 +64,11 @@ select:focus[data-flux-control] {
/* \[:where(&)\]:size-4 {
@apply size-4;
} */
+
+.leaflet-popup-content-wrapper {
+ background-color: #404040!important;
+}
+
+.leaflet-container a {
+ color: unset!important;
+}
diff --git a/resources/views/components/meetup-popup.blade.php b/resources/views/components/meetup-popup.blade.php
new file mode 100644
index 0000000..9ba859e
--- /dev/null
+++ b/resources/views/components/meetup-popup.blade.php
@@ -0,0 +1,92 @@
+@props(['meetup', 'url', 'eventUrl' => null])
+
+
+
{{ $meetup->name }}
+
+ @if($meetup->intro)
+
+ {{ Str::limit($meetup->intro, 100) }}
+
+ @endif
+
+ @if($meetup->nextEvent)
+
+
+
{{ __('Nächster Termin') }}
+
+
+
+
+ {{ $meetup->nextEvent['start']->format('d.m.Y') }}
+
+
+
+
+ {{ $meetup->nextEvent['start']->format('H:i') }} Uhr
+
+
+ @if($meetup->nextEvent['location'])
+
+
+ {{ $meetup->nextEvent['location'] }}
+
+ @endif
+
+ @endif
+
+ @if($meetup->telegram_link || $meetup->webpage || $meetup->twitter_username || $meetup->matrix_group || $meetup->nostr || $meetup->simplex || $meetup->signal)
+
+
+
+ @if($meetup->telegram_link)
+
+
+
+ @endif
+ @if($meetup->webpage)
+
+
+
+ @endif
+ @if($meetup->twitter_username)
+
+
+
+ @endif
+ @if($meetup->matrix_group)
+
+
+
+ @endif
+ @if($meetup->nostr)
+
+
+
+ @endif
+ @if($meetup->simplex)
+
+
+
+ @endif
+ @if($meetup->signal)
+
+
+
+ @endif
+
+ @endif
+
+
+
+
+
+ {{ __('Details') }}
+
+
+ @if($eventUrl)
+
+ {{ __('Nächster Termin') }}
+
+ @endif
+
+
diff --git a/resources/views/livewire/meetups/map.blade.php b/resources/views/livewire/meetups/map.blade.php
index 1e83ae6..ca2efc9 100644
--- a/resources/views/livewire/meetups/map.blade.php
+++ b/resources/views/livewire/meetups/map.blade.php
@@ -29,13 +29,56 @@ class extends Component {
public function with(): array
{
return [
- 'meetups' => Meetup::with(['city:id,longitude,latitude'])
+ 'meetups' => Meetup::query()
->select([
'meetups.id',
'meetups.city_id',
'meetups.name',
+ 'meetups.slug',
+ 'meetups.intro',
+ 'meetups.telegram_link',
+ 'meetups.webpage',
+ 'meetups.twitter_username',
+ 'meetups.matrix_group',
+ 'meetups.nostr',
+ 'meetups.simplex',
+ 'meetups.signal',
])
- ->get(),
+ ->with(['city:id,country_id,longitude,latitude'])
+ ->get()
+ ->map(function ($meetup) {
+ $meetup->load(['meetupEvents' => function($query) {
+ $query->where('start', '>=', now())
+ ->orderBy('start')
+ ->limit(1);
+ }]);
+
+ $nextEvent = $meetup->meetupEvents->first();
+ $eventUrl = null;
+
+ if ($nextEvent) {
+ $eventUrl = route('meetups.landingpage-event', [
+ 'country' => $meetup->city->country,
+ 'meetup' => $meetup->slug,
+ 'event' => $nextEvent->id
+ ]);
+ }
+
+ return [
+ 'id' => $meetup->id,
+ 'name' => $meetup->name,
+ 'slug' => $meetup->slug,
+ 'city' => $meetup->city,
+ 'popupHtml' => view('components.meetup-popup', [
+ 'meetup' => $meetup,
+ 'url' => route('meetups.landingpage', [
+ 'country' => $meetup->city->country,
+ 'meetup' => $meetup->slug
+ ]),
+ 'eventUrl' => $eventUrl
+ ])->render(),
+ ];
+ }),
];
}
}; ?>
@@ -85,7 +128,7 @@ class extends Component {
L.marker([marker.city.latitude, marker.city.longitude], {
icon: btcIcon
})
- .bindPopup(marker.name)
+ .bindPopup(marker.popupHtml)
.addTo(map);
});