Skip to content

Commit eab94db

Browse files
pedaarsJoeKarowdanieltott
authored
fix broken map marker images on the members map (#1421)
* fix broken map marker images on the members map * Prettified Code! * fix broken map marker images on the members map * Prettified Code! * Restore development mode map disabled message Re-enable development mode message for MemberMap component. * return `L.Icon` instead of `L.Icon.Default` - this fixes the broken images. Signed-off-by: Joe Karow <[email protected]> * Prettified Code! * Enable local dev of map view --------- Signed-off-by: Joe Karow <[email protected]> Co-authored-by: pedaars <[email protected]> Co-authored-by: Joe Karow <[email protected]> Co-authored-by: Dan Ott <[email protected]> Co-authored-by: danieltott <[email protected]>
1 parent 1091cfd commit eab94db

File tree

5 files changed

+50
-31
lines changed

5 files changed

+50
-31
lines changed

src/app/members/map-loader.tsx

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,47 @@
11
'use client';
22

33
import dynamic from 'next/dynamic';
4+
import { CSSProperties, useEffect, useRef, useState } from 'react';
5+
import type { MappableMember } from '@/content/members/types';
6+
7+
const loaderStyle: CSSProperties = {
8+
aspectRatio: '16/6',
9+
minHeight: 400,
10+
position: 'relative',
11+
display: 'flex',
12+
justifyContent: 'center',
13+
alignItems: 'center',
14+
};
15+
16+
export function MapLoaderDev({ members }: { members: MappableMember[] }) {
17+
const [toLoad, setToLoad] = useState(false);
18+
const hasLoadedOnce = useRef(false);
19+
20+
useEffect(() => {
21+
if (!hasLoadedOnce.current && typeof window !== 'undefined') {
22+
window.setTimeout(() => {
23+
setToLoad(true);
24+
}, 4000);
25+
hasLoadedOnce.current = true;
26+
}
27+
}, []);
28+
29+
if (toLoad) {
30+
return <MapDynamicLoader members={members} />;
31+
}
32+
33+
return <div style={loaderStyle}>Loading...</div>;
34+
}
35+
36+
export const MapDynamicLoader = dynamic(
37+
() => import('@/components/MemberMap'),
38+
{
39+
loading: () => <div style={loaderStyle}>Loading...</div>,
40+
ssr: false,
41+
},
42+
);
443

544
export const MapLoader = dynamic(() => import('@/components/MemberMap'), {
6-
loading: () => (
7-
<div style={{ aspectRatio: '16/9', minHeight: 400 }}>Loading...</div>
8-
),
45+
loading: () => <div style={loaderStyle}>Loading...</div>,
946
ssr: false,
1047
});

src/app/members/page.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { createMetaData } from '@/util/createMetaData.server';
88
import type { MappableMember } from '@/content/members/types';
99
import 'leaflet/dist/leaflet.css';
1010
import { Suspense } from 'react';
11-
import { MapLoader } from './map-loader';
11+
import { MapLoader, MapLoaderDev } from './map-loader';
1212

1313
export const metadata = createMetaData({
1414
title: 'Virtual Coffee Members',
@@ -39,7 +39,11 @@ export default async function EventsIndex() {
3939
</div>
4040

4141
<Suspense>
42-
<MapLoader members={mapMembers} />
42+
{process.env.NODE_ENV === 'development' ? (
43+
<MapLoaderDev members={mapMembers} />
44+
) : (
45+
<MapLoader members={mapMembers} />
46+
)}
4347
</Suspense>
4448
</div>
4549
<div className="bg-light py-5">

src/app/monthlychallenges/(challenges)/nov-2023/page.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
import { Fragment } from 'react';
32
import { createMetaData } from '@/util/createMetaData.server';
43
import { getWritingChallengeData } from '@/data/monthlyChallenges/NaNoWriMo';

src/app/monthlychallenges/(challenges)/nov-2024/page.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
import { Fragment } from 'react';
32
import { createMetaData } from '@/util/createMetaData.server';
43
import { getWritingChallengeData } from '@/data/monthlyChallenges/NaNoWriMo';

src/components/MemberMap.tsx

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import { MapContainer, Marker, TileLayer, Popup, useMap } from 'react-leaflet';
77
import MarkerClusterGroup from 'react-leaflet-cluster';
88
import 'leaflet/dist/leaflet.css';
99

10-
const defaultCustomIcon = '/assets/images/virtual-coffee-mug-circle.svg';
11-
1210
const createClusterCustomIcon = function (cluster: L.MarkerCluster) {
1311
return L.divIcon({
1412
html: `<span>${cluster.getChildCount()}</span>`,
@@ -18,11 +16,10 @@ const createClusterCustomIcon = function (cluster: L.MarkerCluster) {
1816
};
1917

2018
const createCustomIcon = function (avatarUrl?: string) {
21-
return new L.Icon.Default({
22-
iconUrl: avatarUrl || defaultCustomIcon,
19+
return new L.Icon({
20+
iconUrl: avatarUrl || 'assets/images/virtual-coffee-mug-circle.svg',
2321
iconSize: new L.Point(33, 33, true),
2422
className: 'leaflet-custom-marker',
25-
shadowUrl: undefined,
2623
});
2724
};
2825

@@ -44,8 +41,8 @@ function Markers({ members }: { members: MappableMember[] }) {
4441

4542
return (
4643
<>
47-
{members.map((member) => {
48-
const customIcon = createCustomIcon(member.avatarUrl);
44+
{members?.map((member) => {
45+
const customIcon = createCustomIcon(member?.avatarUrl);
4946

5047
return (
5148
<Marker
@@ -70,23 +67,6 @@ function Markers({ members }: { members: MappableMember[] }) {
7067
}
7168

7269
export default function MemberMap({ members }: { members: MappableMember[] }) {
73-
if (process.env.NODE_ENV === 'development') {
74-
return (
75-
<div
76-
style={{
77-
aspectRatio: '16/6',
78-
minHeight: 400,
79-
position: 'relative',
80-
display: 'flex',
81-
justifyContent: 'center',
82-
alignItems: 'center',
83-
}}
84-
>
85-
Map disabled in local dev
86-
</div>
87-
);
88-
}
89-
9070
return (
9171
<div>
9272
<MapContainer

0 commit comments

Comments
 (0)