diff --git a/src/models/pathResolver.js b/src/models/pathResolver.js
index 310be5bf4..7ce629489 100644
--- a/src/models/pathResolver.js
+++ b/src/models/pathResolver.js
@@ -113,7 +113,7 @@ function getContext(router, options = {}) {
const match = pathname.match(MAP_URL_PATTERN);
const matchV2 = pathname.match(MAP_URL_PATTERNV2);
- if (match) {
+ if (match && match[2]) {
const context = {
name: match[2],
id: match[3],
@@ -121,7 +121,7 @@ function getContext(router, options = {}) {
return context;
}
- if (matchV2) {
+ if (matchV2 && matchV2[2]) {
const context = {
name: matchV2[2],
id: matchV2[3],
@@ -129,12 +129,14 @@ function getContext(router, options = {}) {
return context;
}
- const match2 = pathname.match(/^\/wallets\/([a-z0-9-]+)\/tokens\?.*$/);
- const context = {
- name: 'wallets',
- id: match2[1],
- };
- return context;
+ const match2 = pathname.match(/^\/wallets\/([a-z0-9-]+)\/tokens(\?.*)?$/);
+ if (match2) {
+ const context = {
+ name: 'wallets',
+ id: match2[1],
+ };
+ return context;
+ }
return null;
}
diff --git a/src/pages/organizations/[organizationid].js b/src/pages/organizations/[organizationid].js
index 9075ba696..3e2cee680 100644
--- a/src/pages/organizations/[organizationid].js
+++ b/src/pages/organizations/[organizationid].js
@@ -434,7 +434,9 @@ export default function Organization(props) {
@@ -455,7 +457,9 @@ export default function Organization(props) {
letterSpacing: '0.04em',
}}
dangerouslySetInnerHTML={{
- __html: marked.parse(organization.mission || 'NO DATA YET'),
+ __html: marked.parse(organization.mission || 'NO DATA YET', {
+ breaks: true,
+ }),
}}
/>
diff --git a/src/pages/planters/[planterid].js b/src/pages/planters/[planterid].js
index 0106d52d4..6fa70f440 100644
--- a/src/pages/planters/[planterid].js
+++ b/src/pages/planters/[planterid].js
@@ -489,7 +489,9 @@ export default function Planter(props) {
>
diff --git a/src/pages/tokens/[tokenid].js b/src/pages/tokens/[tokenid].js
index 651639233..0043761f5 100644
--- a/src/pages/tokens/[tokenid].js
+++ b/src/pages/tokens/[tokenid].js
@@ -67,7 +67,8 @@ export default function Token(props) {
const mapContext = useMapContext();
const isMobile = useMobile();
const router = useRouter();
- const userCameFromWalletPage = router.asPath.includes('wallets');
+ const userCameFromWalletPage =
+ router.asPath.includes('wallets') || !!router.query.walletId;
const context = pathResolver.getContext(router, {
base: process.env.NEXT_PUBLIC_BASE,
});
@@ -75,6 +76,7 @@ export default function Token(props) {
log.warn('map:', mapContext);
useEffect(() => {
+ let cancelled = false;
async function reload() {
// manipulate the map
// const { map } = mapContext;
@@ -115,26 +117,29 @@ export default function Token(props) {
// manipulate the map
log.warn('map ,tree, context in tree page:', map, tree, context);
if (map && tree?.lat && tree?.lon) {
- if (context && context.name) {
- if (context.name === 'wallets') {
- log.warn('set wallet filter', context.id);
- await map.setFilters({
- wallet: wallet.name,
- });
- await focusTree(map, tree);
- const treeDataForMap = {
- ...tree,
- lat: parseFloat(tree.lat.toString()),
- lon: parseFloat(tree.lon.toString()),
- };
- map.selectTree(treeDataForMap);
- } else {
- throw new Error(`unknown context name: ${context.name}`);
- }
+ const isWalletContext =
+ (context && context.name === 'wallets') || !!router.query.walletId;
+ if (isWalletContext && wallet) {
+ log.warn(
+ 'set wallet filter',
+ context?.id || router.query.walletId,
+ );
+ await map.setFilters({
+ wallet: wallet.name,
+ });
+ await focusTree(map, tree);
+ if (cancelled) return;
+ const treeDataForMap = {
+ ...tree,
+ lat: parseFloat(tree.lat.toString()),
+ lon: parseFloat(tree.lon.toString()),
+ };
+ map.selectTree(treeDataForMap);
} else {
log.warn('set treeid filter', tree.id);
await map.setFilters({});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -145,6 +150,7 @@ export default function Token(props) {
}
}
reload();
+ return () => { cancelled = true; };
}, [mapContext, token]);
log.warn('token:', token);
diff --git a/src/pages/top.js b/src/pages/top.js
index 7367f3c51..14c0958bd 100644
--- a/src/pages/top.js
+++ b/src/pages/top.js
@@ -48,6 +48,7 @@ function Top(props) {
React.useEffect(() => {
async function reload() {
if (mapContext.map) {
+ await mapContext.map.clearSelection();
await mapContext.map.setFilters({});
const bounds = pathResolver.getBounds(router);
if (bounds) {
diff --git a/src/pages/trees/[treeid].js b/src/pages/trees/[treeid].js
index df562a00a..34bdb0fbc 100644
--- a/src/pages/trees/[treeid].js
+++ b/src/pages/trees/[treeid].js
@@ -106,6 +106,7 @@ export default function Tree({
// draw();
// }, [mapContext.map, tree.lat, tree.lon]);
useEffect(() => {
+ let cancelled = false;
async function reload() {
async function focusTree(map2, tree2) {
const currentView = map2.getCurrentView();
@@ -131,6 +132,7 @@ export default function Tree({
userid: context.id,
});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -143,6 +145,7 @@ export default function Tree({
map_name: organization.map_name,
});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -156,6 +159,7 @@ export default function Tree({
log.warn('set treeid filter', tree.id);
await map.setFilters({});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -163,18 +167,10 @@ export default function Tree({
};
map.selectTree(treeDataForMap);
}
-
- // // select the tree
- // const treeDataForMap = {
- // ...tree,
- // lat: parseFloat(tree.lat.toString()),
- // lon: parseFloat(tree.lon.toString()),
- // };
- // mapContext.map.selectTree(treeDataForMap);
- // // log.warn('filter of map:', mapContext.map.getFilters());
}
}
reload();
+ return () => { cancelled = true; };
}, [map, tree.lat, tree.lon]);
log.warn(planter, 'planter');
diff --git a/src/pages/v2/captures/[captureid].js b/src/pages/v2/captures/[captureid].js
index 0c56101ad..2d60eb480 100644
--- a/src/pages/v2/captures/[captureid].js
+++ b/src/pages/v2/captures/[captureid].js
@@ -114,6 +114,7 @@ export default function Capture({
// draw();
// }, [mapContext.map, tree.lat, tree.lon]);
useEffect(() => {
+ let cancelled = false;
async function reload() {
async function focusTree(map2, tree2) {
const currentView = map2.getCurrentView();
@@ -139,6 +140,7 @@ export default function Capture({
userid: context.id,
});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -151,6 +153,7 @@ export default function Capture({
map_name: organization.map_name,
});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -164,6 +167,7 @@ export default function Capture({
log.warn('set treeid filter', tree.id);
await map.setFilters({});
await focusTree(map, tree);
+ if (cancelled) return;
const treeDataForMap = {
...tree,
lat: parseFloat(tree.lat.toString()),
@@ -171,18 +175,10 @@ export default function Capture({
};
map.selectTree(treeDataForMap);
}
-
- // // select the tree
- // const treeDataForMap = {
- // ...tree,
- // lat: parseFloat(tree.lat.toString()),
- // lon: parseFloat(tree.lon.toString()),
- // };
- // mapContext.map.selectTree(treeDataForMap);
- // // log.warn('filter of map:', mapContext.map.getFilters());
}
}
reload();
+ return () => { cancelled = true; };
}, [map, tree.lat, tree.lon]);
log.warn(grower, 'grower');
diff --git a/src/pages/wallets/[walletid].js b/src/pages/wallets/[walletid].js
index f06bfe6d0..daff2e8e8 100644
--- a/src/pages/wallets/[walletid].js
+++ b/src/pages/wallets/[walletid].js
@@ -374,7 +374,9 @@ export default function Wallet(props) {
sx={{ mt: [2.5, 5] }}
variant="body2"
dangerouslySetInnerHTML={{
- __html: marked.parse(wallet.about || 'NO DATA YET'),
+ __html: marked.parse(wallet.about || 'NO DATA YET', {
+ breaks: true,
+ }),
}}
/>