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); });