diff --git a/src/game/interface/hud/hudMenus/StationManifest.js b/src/game/interface/hud/hudMenus/StationManifest.js
index 3fc8fadac..687a81274 100644
--- a/src/game/interface/hud/hudMenus/StationManifest.js
+++ b/src/game/interface/hud/hudMenus/StationManifest.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { useHistory } from 'react-router-dom';
import styled from 'styled-components';
import { Permission, Station } from '@influenceth/sdk';
@@ -61,25 +61,25 @@ const StationManifest = () => {
const zoomShipId = zoomScene?.type === 'SHIP' ? zoomScene.shipId : null;
const { data: zoomShip } = useShip(zoomShipId);
- const [shipId, ship] = useMemo(() => zoomShipId ? [zoomShipId, zoomShip] : [lot?.surfaceShip?.id, lot?.surfaceShip], [lot, zoomShip, zoomShipId]);
+ const [shipId, ship] = useMemo(import.meta.url, () => zoomShipId ? [zoomShipId, zoomShip] : [lot?.surfaceShip?.id, lot?.surfaceShip], [lot, zoomShip, zoomShipId]);
- const station = useMemo(() => ship || lot?.building, [lot, ship]);
+ const station = useMemo(import.meta.url, () => ship || lot?.building, [lot, ship]);
const { data: unfilteredCrews } = useStationedCrews(station);
const [nameFilter, setNameFilter] = useState('');
const [selectedCrewId, setSelectedCrewId] = useState();
- const onFilterChange = useCallback((e) => {
+ const onFilterChange = useCallback(import.meta.url, (e) => {
setNameFilter(e.target.value || '');
}, []);
- const canStation = useMemo(
+ const canStation = useMemo(import.meta.url,
() => crewCan(Permission.IDS.STATION_CREW, station),
[crewCan, station]
);
- const crews = useMemo(() => {
+ const crews = useMemo(import.meta.url, () => {
return (unfilteredCrews || [])
.filter((c) => formatters.crewName(c).toLowerCase().includes(nameFilter.toLowerCase()))
.map((c) => ({ ...c, _crewmates: c.Crew.roster.map((id) => ({ id })) }))
@@ -89,17 +89,17 @@ const StationManifest = () => {
const crewIsStationed = shipId ? (crew?._location?.shipId === ship?.id) : (crew?._location?.buildingId === lot?.building?.id);
const hasTray = !crewIsStationed || selectedCrewId;
- const [flightCrew, passengerCrews, population] = useMemo(() => ([
+ const [flightCrew, passengerCrews, population] = useMemo(import.meta.url, () => ([
crews?.find(c => c.id === ship?.Control?.controller?.id),
crews?.filter(c => c.id !== ship?.Control?.controller?.id),
unfilteredCrews?.reduce((acc, cur) => acc + cur.Crew.roster.length, 0)
]), [crews, ship, unfilteredCrews]);
- const handleInspect = useCallback(() => {
+ const handleInspect = useCallback(import.meta.url, () => {
history.push(`/crew/${selectedCrewId}`);
}, [selectedCrewId]);
- const renderCrewRow = useCallback(({ key, index, style }) => (
+ const renderCrewRow = useCallback(import.meta.url, ({ key, index, style }) => (
{
const listWrapper = useRef();
const [listHeight, setListHeight] = useState(0);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setListHeight(listWrapper.current?.clientHeight || 500);
}, [screenHeight]);
diff --git a/src/game/interface/hud/hudMenus/components/AssetBlocks.js b/src/game/interface/hud/hudMenus/components/AssetBlocks.js
index 2d9468ea3..bd25b3730 100644
--- a/src/game/interface/hud/hudMenus/components/AssetBlocks.js
+++ b/src/game/interface/hud/hudMenus/components/AssetBlocks.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo } from 'react';
+import { useCallback, useMemo } from '~/lib/react-debug';
import styled, { keyframes } from 'styled-components';
import { Asteroid, Building, Dock, Entity, Inventory, Permission, Station } from '@influenceth/sdk';
@@ -202,7 +202,7 @@ const getBuildingIcon = (buildingType) => {
export const AgreementBlock = ({ agreement, onSelectCrew, selectedCrew, setRef }) => {
const blockTime = useBlockTime();
- const location = useMemo(() => locationsArrToObj(agreement.Location?.locations || [agreement.Location?.locations]), []);
+ const location = useMemo(import.meta.url, () => locationsArrToObj(agreement.Location?.locations || [agreement.Location?.locations]), []);
const onLotLink = useLotLink((
agreement.label === Entity.IDS.LOT
@@ -219,7 +219,7 @@ export const AgreementBlock = ({ agreement, onSelectCrew, selectedCrew, setRef }
: {}
);
- const [icon, name, onLink] = useMemo(() => {
+ const [icon, name, onLink] = useMemo(import.meta.url, () => {
if (agreement.label === Entity.IDS.BUILDING) {
return [
getBuildingIcon(agreement.Building?.buildingType),
@@ -243,7 +243,7 @@ export const AgreementBlock = ({ agreement, onSelectCrew, selectedCrew, setRef }
}
}, [agreement, onLotLink, onShipLink]);
- const [status, progress, progressColor] = useMemo(() => {
+ const [status, progress, progressColor] = useMemo(import.meta.url, () => {
if (agreement._agreement._type === Permission.POLICY_IDS.PREPAID) { // TODO: factor in noticeTime?
const timeRemaining = agreement._agreement.endTime - blockTime;
if (timeRemaining > 0) {
@@ -262,7 +262,7 @@ export const AgreementBlock = ({ agreement, onSelectCrew, selectedCrew, setRef }
];
}, [blockTime]);
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
onLink();
onSelectCrew(agreement.Control?.controller?.id, agreement._agreement.permitted?.id);
}, [onLink, onSelectCrew, agreement]);
@@ -291,7 +291,7 @@ export const AgreementBlock = ({ agreement, onSelectCrew, selectedCrew, setRef }
};
export const AsteroidBlock = ({ asteroid, onClick, onRenderReady, selectedCrew, showRender }) => {
- const rarity = useMemo(() => {
+ const rarity = useMemo(import.meta.url, () => {
if ([Asteroid.SCAN_STATUSES.SURFACE_SCANNED, Asteroid.SCAN_STATUSES.RESOURCE_SCANNED].includes(asteroid.Celestial.scanStatus)) {
return Asteroid.Entity.getRarity(asteroid);
}
@@ -329,7 +329,7 @@ export const BuildingBlock = ({ building, onSelectCrew, selectedCrew, setRef })
const { currentProcess } = useProcessManager(buildingLoc?.lotId, building.Processors?.[0]?.slot);
const { currentConstructionAction } = useConstructionManager(buildingLoc?.lotId);
- const [progress, progressColor] = useMemo(() => {
+ const [progress, progressColor] = useMemo(import.meta.url, () => {
if (building?.Building?.status === Building.CONSTRUCTION_STATUSES.OPERATIONAL) {
if (Building.TYPES[building?.Building?.buildingType]?.category === Building.CATEGORIES.STORAGE) {
const inventory = (building.Inventories || []).find((i) => i.status === Inventory.STATUSES.AVAILABLE);
@@ -389,7 +389,7 @@ export const BuildingBlock = ({ building, onSelectCrew, selectedCrew, setRef })
return [0];
}, [building, selectedCrew?._inventoryBonuses, syncedTime]);
- const status = useMemo(() => {
+ const status = useMemo(import.meta.url, () => {
if (building?.Building?.status === Building.CONSTRUCTION_STATUSES.OPERATIONAL) {
if (building?.Building?.buildingType === Building.IDS.EXTRACTOR && building?.Extractors?.[0]?.status > 0) {
return 'Extracting';
@@ -414,7 +414,7 @@ export const BuildingBlock = ({ building, onSelectCrew, selectedCrew, setRef })
return `${Building.CONSTRUCTION_STATUS_LABELS[building?.Building?.status || 0]}`;
}, [building, progress, syncedTime]);
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
onClickBuilding();
onSelectCrew(building.Control?.controller?.id);
}, [onClickBuilding, onSelectCrew, building?.Control?.controller?.id, buildingLoc?.lotId]);
@@ -444,9 +444,9 @@ export const BuildingBlock = ({ building, onSelectCrew, selectedCrew, setRef })
export const ShipBlock = ({ ship, onSelectCrew, selectedCrew, setRef }) => {
const onClickShip = useShipLink({ shipId: ship.id, zoomToShip: true });
- const location = useMemo(() => locationsArrToObj(ship.Location?.locations || []));
+ const location = useMemo(import.meta.url, () => locationsArrToObj(ship.Location?.locations || []));
- const status = useMemo(() => {
+ const status = useMemo(import.meta.url, () => {
if (location?.buildingId) return 'Docked';
if (location?.lotIndex) return 'Landed';
if (!location?.lotIndex && ship.Ship?.transitDestination) return 'In Flight';
@@ -454,7 +454,7 @@ export const ShipBlock = ({ ship, onSelectCrew, selectedCrew, setRef }) => {
return '';
}, [location, ship.Ship?.transitDestination]);
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
onClickShip();
onSelectCrew(ship.Control?.controller?.id);
}, [onClickShip, onSelectCrew, ship?.Control?.controller?.id]);
diff --git a/src/game/interface/hud/hudMenus/components/AsteroidResources.js b/src/game/interface/hud/hudMenus/components/AsteroidResources.js
index 7f0813d79..648e91ae1 100644
--- a/src/game/interface/hud/hudMenus/components/AsteroidResources.js
+++ b/src/game/interface/hud/hudMenus/components/AsteroidResources.js
@@ -1,4 +1,4 @@
-import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
+import { Fragment, useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Asteroid } from '@influenceth/sdk';
@@ -106,7 +106,7 @@ const AsteroidResources = ({ onClose }) => {
const resourceMap = useStore(s => s.asteroids.resourceMap);
const coachmarks = useStore(s => s.coachmarks);
- const onClick = useCallback((i) => () => {
+ const onClick = useCallback(import.meta.url, (i) => () => {
if (resourceMap.active && resourceMap.selected === Number(i)) {
dispatchResourceMapSelect();
} else {
@@ -116,7 +116,7 @@ const AsteroidResources = ({ onClose }) => {
}, [resourceMap]);
// default to most abundant emissive map when panel is opened...
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!resourceMap.active && groupAbundances.length > 0) {
if (!resourceMap.selected) {
dispatchResourceMapSelect(groupAbundances[0].resources[0].id);
@@ -125,8 +125,8 @@ const AsteroidResources = ({ onClose }) => {
}
}, []);
- const unpackedBonuses = useMemo(() => (asteroid && Asteroid.Entity.getBonuses(asteroid)) || [], [asteroid]);
- const nonzeroBonuses = useMemo(() => unpackedBonuses.filter((b) => b.level > 0), [unpackedBonuses]);
+ const unpackedBonuses = useMemo(import.meta.url, () => (asteroid && Asteroid.Entity.getBonuses(asteroid)) || [], [asteroid]);
+ const nonzeroBonuses = useMemo(import.meta.url, () => unpackedBonuses.filter((b) => b.level > 0), [unpackedBonuses]);
return (
diff --git a/src/game/interface/hud/hudMenus/components/AsteroidTitleArea.js b/src/game/interface/hud/hudMenus/components/AsteroidTitleArea.js
index 9c8326da3..b13fcbfe1 100644
--- a/src/game/interface/hud/hudMenus/components/AsteroidTitleArea.js
+++ b/src/game/interface/hud/hudMenus/components/AsteroidTitleArea.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import styled from 'styled-components';
import { Asteroid, Product } from '@influenceth/sdk';
@@ -52,7 +52,7 @@ const SubtitleRow = styled.div`
`;
const AsteroidTitleArea = ({ asteroid }) => {
- const resourceCategories = useMemo(() => {
+ const resourceCategories = useMemo(import.meta.url, () => {
return (Asteroid.SPECTRAL_TYPES[asteroid?.Celestial?.celestialType]?.resources || []).reduce((acc, productId) => {
const category = Product.TYPES[productId]?.category;
if (category && !acc.includes(category)) {
diff --git a/src/game/interface/hud/hudMenus/components/EntityDescriptionForm.js b/src/game/interface/hud/hudMenus/components/EntityDescriptionForm.js
index 52bed47bd..478198773 100644
--- a/src/game/interface/hud/hudMenus/components/EntityDescriptionForm.js
+++ b/src/game/interface/hud/hudMenus/components/EntityDescriptionForm.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import Button from '~/components/ButtonAlt';
@@ -28,32 +28,32 @@ const EntityDescriptionForm = ({ buttonSize = 'small', buttonText = 'Update', en
const isLoading = annotationLoading || contentLoading;
const [desc, setDesc] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!desc) setDesc(originalDesc)
}, [originalDesc])
- const handleDescChange = useCallback(async (e) => {
+ const handleDescChange = useCallback(import.meta.url, async (e) => {
setDesc(e.currentTarget.value || '');
}, []);
- const saveDescChange = useCallback(async () => {
+ const saveDescChange = useCallback(import.meta.url, async () => {
if (isValidAnnotation(desc)) {
saveAnnotation(desc);
}
}, [entity?.id, desc]);
- const handleCancel = useCallback(async () => {
+ const handleCancel = useCallback(import.meta.url, async () => {
setDesc(originalDesc);
if (onCancel) onCancel();
}, [onCancel, originalDesc]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (txPending && onSave) {
onSave();
}
}, [txPending]);
- const remaining = useMemo(() => maxAnnotationLength - (desc?.length || 0), [desc?.length]);
+ const remaining = useMemo(import.meta.url, () => maxAnnotationLength - (desc?.length || 0), [desc?.length]);
return (
diff --git a/src/game/interface/hud/hudMenus/components/EntityNameForm.js b/src/game/interface/hud/hudMenus/components/EntityNameForm.js
index 1b7e38c89..ae5470f41 100644
--- a/src/game/interface/hud/hudMenus/components/EntityNameForm.js
+++ b/src/game/interface/hud/hudMenus/components/EntityNameForm.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import UncontrolledTextInput from '~/components/TextInputUncontrolled';
@@ -20,18 +20,18 @@ const EntityNameForm = ({ entity, label, originalName, skipCollisionCheck = fals
const [error, setError] = useState();
const [name, setName] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!name) setName(originalName)
}, [originalName])
- const handleNameChange = useCallback(async (e) => {
+ const handleNameChange = useCallback(import.meta.url, async (e) => {
const val = e.currentTarget.value || '';
setName(val);
const err = await isNameValid(val, entity.id, skipCollisionCheck, 'string');
setError(typeof err === 'string' ? err : false);
}, [entity?.id]);
- const saveNameChange = useCallback(async () => {
+ const saveNameChange = useCallback(import.meta.url, async () => {
if (await isNameValid(name, entity?.id)) {
changeName(name);
diff --git a/src/game/interface/hud/hudMenus/components/ListForSalePanel.js b/src/game/interface/hud/hudMenus/components/ListForSalePanel.js
index 8de90ca75..88cbd7a87 100644
--- a/src/game/interface/hud/hudMenus/components/ListForSalePanel.js
+++ b/src/game/interface/hud/hudMenus/components/ListForSalePanel.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo, useState } from 'react';
+import { useCallback, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { RadioCheckedIcon, RadioUncheckedIcon, WarningIcon } from '~/components/Icons';
@@ -39,21 +39,21 @@ export const ListForSaleInner = ({ forSaleWarning, isSaving, onCancel, onSave, o
const [forSale, setForSale] = useState(originalPrice > 0);
const [price, setPrice] = useState(originalPrice || 0);
- const isDirty = useMemo(() => (originalPrice !== (forSale ? price : 0)), [forSale, originalPrice, price]);
+ const isDirty = useMemo(import.meta.url, () => (originalPrice !== (forSale ? price : 0)), [forSale, originalPrice, price]);
- const isIncomplete = useMemo(() => (forSale && !(price > 0)), [forSale, price]);
+ const isIncomplete = useMemo(import.meta.url, () => (forSale && !(price > 0)), [forSale, price]);
- const onUpdatePrice = useCallback((e) => {
+ const onUpdatePrice = useCallback(import.meta.url, (e) => {
setPrice((e.currentTarget.value ? parseInt(e.currentTarget.value) : '') || '');
}, []);
- const cancelForSale = useCallback(() => {
+ const cancelForSale = useCallback(import.meta.url, () => {
setForSale(originalPrice > 0);
setPrice(originalPrice);
if (onCancel) onCancel();
}, [originalPrice]);
- const saveForSale = useCallback(() => {
+ const saveForSale = useCallback(import.meta.url, () => {
onSave(forSale ? price : 0);
}, [onSave, forSale, price]);
@@ -109,9 +109,9 @@ export const ListForSaleInner = ({ forSaleWarning, isSaving, onCancel, onSave, o
const ListForSalePanel = ({ entity, forSaleWarning }) => {
const { updateListing, isPendingUpdate } = useNftSaleManager(entity);
- const originalPrice = useMemo(() => (entity?.Nft?.price || 0) / 1e6, [entity?.Nft?.price]);
+ const originalPrice = useMemo(import.meta.url, () => (entity?.Nft?.price || 0) / 1e6, [entity?.Nft?.price]);
- const config = useMemo(() => {
+ const config = useMemo(import.meta.url, () => {
return {
color: originalPrice ? theme.colors.brightMain : theme.colors.red
};
diff --git a/src/game/interface/hud/hudMenus/components/LotResources.js b/src/game/interface/hud/hudMenus/components/LotResources.js
index 6e62e35b0..34fd58b31 100644
--- a/src/game/interface/hud/hudMenus/components/LotResources.js
+++ b/src/game/interface/hud/hudMenus/components/LotResources.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Asteroid, Building, Deposit, Lot, Product } from '@influenceth/sdk';
@@ -230,9 +230,9 @@ const SaleDetails = ({ isMine, sample }) => {
const { updateListing, isPendingUpdate } = useDepositSaleManager(sample);
const [editing, setEditing] = useState();
- const originalPrice = useMemo(() => (sample?.PrivateSale?.amount || 0) / 1e6, [sample?.PrivateSale?.amount]);
+ const originalPrice = useMemo(import.meta.url, () => (sample?.PrivateSale?.amount || 0) / 1e6, [sample?.PrivateSale?.amount]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setEditing(false);
}, [originalPrice])
@@ -275,16 +275,16 @@ const DepositSection = ({ deposits = [], selected, onSelect, title, type }) => {
const [showAll, setShowAll] = useState(true);
- const onClickSample = useCallback((id) => () => {
+ const onClickSample = useCallback(import.meta.url, (id) => () => {
onSelect({ type, id });
dispatchResourceMapToggle(false); // TODO: instead of turning off the resource map, should this change it the resource of the selected sample?
}, [onSelect, type]);
- const usedDepositsExist = useMemo(() => {
+ const usedDepositsExist = useMemo(import.meta.url, () => {
return !!deposits.find((d) => d.Deposit.remainingYield !== d.Deposit.initialYield);
}, [deposits]);
- const samples = useMemo(() => {
+ const samples = useMemo(import.meta.url, () => {
if (showAll) return deposits;
return deposits.filter((d) => d.Deposit.remainingYield === d.Deposit.initialYield);
}, [deposits, showAll]);
@@ -360,7 +360,7 @@ const LotResources = () => {
const { props: actionProps } = useActionButtons();
const { crew } = useCrewContext();
const lotId = useStore(s => s.asteroids.lot);
- const asteroidId = useMemo(() => Lot.toPosition(lotId)?.asteroidId, [lotId]);
+ const asteroidId = useMemo(import.meta.url, () => Lot.toPosition(lotId)?.asteroidId, [lotId]);
const { data: asteroid } = useAsteroid(asteroidId);
const { data: lot } = useLot(lotId);
@@ -374,14 +374,14 @@ const LotResources = () => {
const [showAllAbundances, setShowAllAbundances] = useState();
// if there is an active resource map, select that resource
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (resourceMap.active && resourceMap.selected) {
setSelected({ type: 'resource', id: resourceMap.selected });
}
}, []);
// get lot abundance
- const lotAbundances = useMemo(() => {
+ const lotAbundances = useMemo(import.meta.url, () => {
if (!(asteroid && lotId)) return [];
// TODO: do this in worker? takes about 200ms on decent cpu
@@ -400,14 +400,14 @@ const LotResources = () => {
.sort((a, b) => b.abundance - a.abundance);
}, [asteroid, lotId]);
- const onClickResource = useCallback((id) => () => {
+ const onClickResource = useCallback(import.meta.url, (id) => () => {
setSelected({ type: 'resource', id });
dispatchResourceMapSelect(id);
dispatchResourceMapToggle(true);
}, []);
- const [showAbundances, abundancesTruncated] = useMemo(() => {
+ const [showAbundances, abundancesTruncated] = useMemo(import.meta.url, () => {
if (showAllAbundances || lotAbundances.length < 8) {
return [lotAbundances, false];
} else {
@@ -415,21 +415,21 @@ const LotResources = () => {
}
}, [lotAbundances, showAllAbundances]);
- const selectedResource = useMemo(() => {
+ const selectedResource = useMemo(import.meta.url, () => {
if (selected && selected.type === 'resource') {
return Product.TYPES[selected.id];
}
return null;
}, [selected]);
- const selectedSample = useMemo(() => {
+ const selectedSample = useMemo(import.meta.url, () => {
if (selected && selected.type !== 'resource') {
return (lot?.deposits || []).find((s) => selected.id === s.id);
}
return null;
}, [lot?.deposits, selected]);
- const extraSampleParams = useMemo(() => {
+ const extraSampleParams = useMemo(import.meta.url, () => {
const params = {};
if (selectedSample?.id) {
params.improveSample = { ...selectedSample };
@@ -439,7 +439,7 @@ const LotResources = () => {
return params;
}, [currentSamplingActions, selectedResource, selectedSample]);
- const extraExtractParams = useMemo(() => {
+ const extraExtractParams = useMemo(import.meta.url, () => {
const params = {};
if (!currentExtraction) {
if (selectedSample) {
@@ -452,7 +452,7 @@ const LotResources = () => {
return params;
}, [currentExtraction, selectedSample]);
- const [ownedSamples, forSaleSamples] = useMemo(() => ([
+ const [ownedSamples, forSaleSamples] = useMemo(import.meta.url, () => ([
(lot?.deposits || []).filter((s) => s.Control.controller.id === crew?.id && (!s.Deposit.initialYield || s.Deposit.remainingYield > 0)).sort(sampleSort),
(lot?.deposits || []).filter((s) => s.PrivateSale?.amount > 0 && (!s.Deposit.initialYield || s.Deposit.remainingYield > 0)).sort(sampleSort),
]), [crew?.id, lot?.deposits]);
diff --git a/src/game/interface/hud/hudMenus/components/LotTitleArea.js b/src/game/interface/hud/hudMenus/components/LotTitleArea.js
index b78902e8d..676b36ba1 100644
--- a/src/game/interface/hud/hudMenus/components/LotTitleArea.js
+++ b/src/game/interface/hud/hudMenus/components/LotTitleArea.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import styled from 'styled-components';
import { Building, Lot } from '@influenceth/sdk';
@@ -21,7 +21,7 @@ const Abandoned = styled.div`
const LotTitleArea = ({ lot }) => {
const { isAtRisk } = useConstructionManager(lot?.id);
- const [title, subtitle, background] = useMemo(() => {
+ const [title, subtitle, background] = useMemo(import.meta.url, () => {
if (!lot) return [];
if (lot.building) {
if (lot.building.Building?.status < Building.CONSTRUCTION_STATUSES.OPERATIONAL) {
diff --git a/src/game/interface/hud/hudMenus/components/MarketplaceSettings.js b/src/game/interface/hud/hudMenus/components/MarketplaceSettings.js
index 6b8804ed5..358cd06d0 100644
--- a/src/game/interface/hud/hudMenus/components/MarketplaceSettings.js
+++ b/src/game/interface/hud/hudMenus/components/MarketplaceSettings.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Exchange, Product } from '@influenceth/sdk';
import { PuffLoader as Loader } from 'react-spinners';
@@ -91,7 +91,7 @@ const MarketplaceSettings = ({ marketplace }) => {
const [ makerFee, setMakerFee ] = useState(exchange.makerFee / 100);
const [ takerFee, setTakerFee ] = useState(exchange.takerFee / 100);
- const handleChange = useCallback((setter, defaultValue) => (e) => {
+ const handleChange = useCallback(import.meta.url, (setter, defaultValue) => (e) => {
setter(
Math.max(
e.currentTarget.min,
@@ -103,7 +103,7 @@ const MarketplaceSettings = ({ marketplace }) => {
);
}, []);
- const handleRevert = useCallback(() => {
+ const handleRevert = useCallback(import.meta.url, () => {
setProducts(exchange.allowedProducts || []);
setMakerFee(exchange.makerFee / 100);
setTakerFee(exchange.takerFee / 100);
@@ -112,22 +112,22 @@ const MarketplaceSettings = ({ marketplace }) => {
// revert if exchange is updated (handleRevert will be changed)
// (these are intended to maintain a "loading" state until the updated exchange has been fetched)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (changingSettings) setLoading(true);
}, [changingSettings]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setLoading(false);
}, [handleRevert]);
- const handleBlur = useCallback((index) => (e) => {
+ const handleBlur = useCallback(import.meta.url, (index) => (e) => {
setFocused();
}, []);
- const handleFocus = useCallback((index) => (e) => {
+ const handleFocus = useCallback(import.meta.url, (index) => (e) => {
setFocused(index);
}, []);
- const saveChanges = useCallback(() => {
+ const saveChanges = useCallback(import.meta.url, () => {
changeSettings({
makerFee: makerFee * 100,
takerFee: takerFee * 100,
@@ -136,7 +136,7 @@ const MarketplaceSettings = ({ marketplace }) => {
setFocused();
}, [makerFee, takerFee, products, changeSettings]);
- const updateProductList = useCallback((index, value) => {
+ const updateProductList = useCallback(import.meta.url, (index, value) => {
let s = new Set();
// create a set of the remaining products + this one
@@ -149,7 +149,7 @@ const MarketplaceSettings = ({ marketplace }) => {
setProducts(final);
}, [products]);
- const [productList, productListLength] = useMemo(() => {
+ const [productList, productListLength] = useMemo(import.meta.url, () => {
const l = [];
let len = 0;
for (let i = 0; i < Exchange.TYPES[exchange.exchangeType].productCap; i++) {
@@ -159,7 +159,7 @@ const MarketplaceSettings = ({ marketplace }) => {
return [l, len];
}, [exchange.exchangeType, products]);
- const isDirty = useMemo(() => (
+ const isDirty = useMemo(import.meta.url, () => (
makerFee !== exchange.makerFee / 100
|| takerFee !== exchange.takerFee / 100
|| products.length !== exchange.allowedProducts.length
diff --git a/src/game/interface/hud/hudMenus/components/PolicyPanels.js b/src/game/interface/hud/hudMenus/components/PolicyPanels.js
index 401d60e63..16a06fb3c 100644
--- a/src/game/interface/hud/hudMenus/components/PolicyPanels.js
+++ b/src/game/interface/hud/hudMenus/components/PolicyPanels.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Address, Building, Entity, Permission } from '@influenceth/sdk';
@@ -237,31 +237,31 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
const saving = editing === 'allowlist' ? allowlistChangePending : policyChangePending;
// reset if object is changed
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setPolicyType(Number(originalPolicyType));
setDetails(originalPolicyDetails);
}, [editing, originalPolicyType, originalPolicyDetails]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setAllowlist(originalAllowlist || []);
setAccountAllowlist(originalAccountAllowlist || []);
setAllowlistDirty(false);
}, [editing, originalAllowlist, originalAccountAllowlist]);
- const handleChange = useCallback((key) => (e) => {
+ const handleChange = useCallback(import.meta.url, (key) => (e) => {
let newVal = e.currentTarget.value;
if (key === 'rate') newVal /= 24;
setDetails((v) => ({ ...v, [key]: newVal }));
}, []);
- const isDirty = useMemo(() => {
+ const isDirty = useMemo(import.meta.url, () => {
return policyType !== originalPolicyType
|| Object.keys(details).reduce((acc, k) => acc || details[k] !== originalPolicyDetails[k], false)
|| Object.keys(originalPolicyDetails).reduce((acc, k) => acc || details[k] !== originalPolicyDetails[k], false)
|| allowlistDirty;
}, [allowlistDirty, policyType, originalPolicyType, originalPolicyDetails, details]);
- const isIncomplete = useMemo(() => {
+ const isIncomplete = useMemo(import.meta.url, () => {
if (policyType === Permission.POLICY_IDS.PREPAID) {
if (!details.rate || details.rate < 0) return true;
if (details.initialTerm < 0 || details.noticePeriod < 0) return true;
@@ -273,7 +273,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
return false;
}, [policyType, details]);
- const allowlistAdd = useCallback((crew) => {
+ const allowlistAdd = useCallback(import.meta.url, (crew) => {
if (!crew) return;
if (typeof crew === 'object') {
setAllowlist((a) => [...a, crew].sort((a, b) => formatters.crewName(a).localeCompare(formatters.crewName(b))));
@@ -285,7 +285,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
setAllowlistDirty(true);
}, []);
- const allowlistRemove = useCallback((crew) => {
+ const allowlistRemove = useCallback(import.meta.url, (crew) => {
if (typeof crew === 'object') {
setAllowlist((a) => a.filter((c) => c.id !== crew.id));
} else {
@@ -294,15 +294,15 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
setAllowlistDirty(true);
}, []);
- const allowlistExclude = useCallback((c) => {
+ const allowlistExclude = useCallback(import.meta.url, (c) => {
return allowlist.find((a) => a.id === c.id || crew?.id === c.id);
}, [allowlist])
- const cancelEdits = useCallback(() => {
+ const cancelEdits = useCallback(import.meta.url, () => {
setEditing();
}, []);
- const saveEdits = useCallback(() => {
+ const saveEdits = useCallback(import.meta.url, () => {
if (editing === 'allowlist') {
updateAllowlists(allowlist, accountAllowlist);
} else {
@@ -310,7 +310,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
}
}, [accountAllowlist, allowlist, editing, policyType, details]);
- const toggleEditing = useCallback((which) => {
+ const toggleEditing = useCallback(import.meta.url, (which) => {
setEditing(which);
}, []);
@@ -318,7 +318,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
* Viewing
*/
- const onAllowlist = useMemo(
+ const onAllowlist = useMemo(import.meta.url,
() => (
currentPolicy?.allowlist?.find((c) => c.id === crew?.id)
|| currentPolicy?.accountAllowlist?.find((c) => Address.areEqual(accountAddress, c))
@@ -326,7 +326,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
[accountAddress, crew, currentPolicy]
);
- const jitStatus = useMemo(() => {
+ const jitStatus = useMemo(import.meta.url, () => {
// if exclusive, everyone cares if under notice
if (Permission.TYPES[permission].isExclusive) {
if (currentPolicy?.agreements?.[0]?.noticeTime > 0) return 'under notice';
@@ -348,7 +348,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
return null;
}, [currentPolicy?.crewStatus, entity]);
- const config = useMemo(() => {
+ const config = useMemo(import.meta.url, () => {
if (editing === 'allowlist') {
return {
name: 'Allowlist',
@@ -369,7 +369,7 @@ const PolicyPanel = ({ editable = false, entity, permission }) => {
originalPolicyDetails?.initialTerm === 0 && originalPolicyDetails?.noticePeriod === 0
)
));
- const toggleIsPayAsYouGo = useCallback(() => {
+ const toggleIsPayAsYouGo = useCallback(import.meta.url, () => {
setIsPayAsYouGo((v) => {
const newVal = !v;
if (newVal) {
@@ -686,13 +686,13 @@ const PolicyPanels = ({ editable, entity }) => {
const { isAtRisk } = useConstructionManager(lot?.id);
const { data: entityController } = useHydratedCrew(entity?.Control?.controller?.id);
- const permPolicies = useMemo(
+ const permPolicies = useMemo(import.meta.url,
() => entity ? Permission.getPolicyDetails(entity, crew, blockTime) : {},
[accountAddress, blockTime, crew, entity]
);
// show lot warning if building controller does not have lot permission
- const showLotWarning = useMemo(() => {
+ const showLotWarning = useMemo(import.meta.url, () => {
if (!lot || !entityController) return false;
const lotPerm = Permission.getPolicyDetails(lot, entityController, blockTime)[Permission.IDS.USE_LOT];
return !(
@@ -702,9 +702,9 @@ const PolicyPanels = ({ editable, entity }) => {
);
}, [blockTime, entity, entityController, lot]);
- const buildingOrSite = useMemo(() => lot?.building?.Building?.status < Building.CONSTRUCTION_STATUSES.OPERATIONAL ? 'Construction Site' : 'Building', [lot]);
+ const buildingOrSite = useMemo(import.meta.url, () => lot?.building?.Building?.status < Building.CONSTRUCTION_STATUSES.OPERATIONAL ? 'Construction Site' : 'Building', [lot]);
- const showStagingWarning = useMemo(() => {
+ const showStagingWarning = useMemo(import.meta.url, () => {
if (isAtRisk) {
return 2;
} else if (lot && lot.building && lot.building.Building?.status < Building.CONSTRUCTION_STATUSES.UNDER_CONSTRUCTION) {
@@ -714,7 +714,7 @@ const PolicyPanels = ({ editable, entity }) => {
}, [lot]);
// find out if any others have access to this asset via any perm
- const othersHaveAgreementsOnThisAsset = useMemo(() => {
+ const othersHaveAgreementsOnThisAsset = useMemo(import.meta.url, () => {
return !!Object.keys(permPolicies).find((permission) => {
const { agreements, allowlist, accountAllowlist } = permPolicies[permission];
if ((agreements || []).find((a) => a?.permitted?.id !== crew?.id)) return true;
diff --git a/src/game/interface/hud/hudMenus/components/ShipTitleArea.js b/src/game/interface/hud/hudMenus/components/ShipTitleArea.js
index 1d989d2cd..b6cce71a8 100644
--- a/src/game/interface/hud/hudMenus/components/ShipTitleArea.js
+++ b/src/game/interface/hud/hudMenus/components/ShipTitleArea.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Entity, Ship } from '@influenceth/sdk';
import { LocationIcon } from '~/components/Icons';
@@ -7,7 +7,7 @@ import EntityName from '~/components/EntityName';
import TitleArea from '../components/TitleArea';
const ShipTitleArea = ({ ship }) => {
- const locations = useMemo(() => {
+ const locations = useMemo(import.meta.url, () => {
if (!ship?.Location?.locations) return [];
const asteroidEntity = ship.Location.locations.find((l) => l.label === Entity.IDS.ASTEROID);
if (asteroidEntity) {
diff --git a/src/game/interface/mainMenu/TimeControls.js b/src/game/interface/mainMenu/TimeControls.js
index 390598940..e0c3f2c59 100644
--- a/src/game/interface/mainMenu/TimeControls.js
+++ b/src/game/interface/mainMenu/TimeControls.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Time } from '@influenceth/sdk';
@@ -91,19 +91,19 @@ const TimeController = ({ open }) => {
const [ isPaused, setIsPaused ] = useState(false);
const [ speedSetting, setSpeedSetting ] = useState(0);
- const pause = useCallback(() => {
+ const pause = useCallback(import.meta.url, () => {
setIsPaused(true);
setSpeedSetting(0);
dispatchTimeOverride(getTime(), 0);
}, [dispatchTimeOverride, getTime]);
- const reset = useCallback(() => {
+ const reset = useCallback(import.meta.url, () => {
setIsPaused(false);
setSpeedSetting(0);
dispatchTimeOverride();
}, [dispatchTimeOverride]);
- const changeSpeed = useCallback((direction) => {
+ const changeSpeed = useCallback(import.meta.url, (direction) => {
const newSpeed = speeds[Math.abs(speedSetting + direction)];
if (Number.isFinite(newSpeed)) {
setIsPaused(false);
@@ -111,7 +111,7 @@ const TimeController = ({ open }) => {
}
}, [speedSetting]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// if speedSetting is zero and timeOverride is already non-set, don't override
// otherwise (there is a timeOverride and speedSetting changes), update override
if (speedSetting !== 0 || timeOverride) {
@@ -121,12 +121,12 @@ const TimeController = ({ open }) => {
}
}, [ speedSetting ]); // eslint-disable-line react-hooks/exhaustive-deps
- const displaySpeed = useMemo(() => {
+ const displaySpeed = useMemo(import.meta.url, () => {
if (isPaused) return '0';
return speeds[Math.abs(speedSetting)].toLocaleString();
}, [isPaused, speedSetting]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!open && timeOverride) {
reset();
}
@@ -190,11 +190,11 @@ const TimeControls = () => {
const timeOverride = useStore(s => s.timeOverride);
const [open, setOpen] = useState(false);
- const toggleOpen = useCallback((e) => {
+ const toggleOpen = useCallback(import.meta.url, (e) => {
setOpen((o) => !o);
}, []);
- const displayTime = useMemo(() => {
+ const displayTime = useMemo(import.meta.url, () => {
if (!coarseTime || isLoading) return '';
return Time.fromOrbitADays(coarseTime, TIME_ACCELERATION || Time.DEFAULT_TIME_ACCELERATION)
.toGameClockADays()
diff --git a/src/game/interface/modelViewer/DevToolsViewer.js b/src/game/interface/modelViewer/DevToolsViewer.js
index f7b6ff015..4d983da9b 100644
--- a/src/game/interface/modelViewer/DevToolsViewer.js
+++ b/src/game/interface/modelViewer/DevToolsViewer.js
@@ -1,4 +1,4 @@
-import { useContext, useEffect } from 'react';
+import { useContext, useEffect } from '~/lib/react-debug';
import DevToolContext from '~/contexts/DevToolContext';
import ModelViewer from '../ModelViewer';
@@ -6,7 +6,7 @@ import ModelViewer from '../ModelViewer';
const DevToolsViewer = () => {
const { assetType, overrides, ...setters } = useContext(DevToolContext);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!assetType) {
setters.setAssetType('scene');
}
diff --git a/src/game/interface/modelViewer/LinkedViewer.js b/src/game/interface/modelViewer/LinkedViewer.js
index 2a3eb022e..997fc0c0b 100644
--- a/src/game/interface/modelViewer/LinkedViewer.js
+++ b/src/game/interface/modelViewer/LinkedViewer.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useParams } from 'react-router-dom';
import { Building, Product, Ship } from '@influenceth/sdk';
@@ -8,7 +8,7 @@ import ModelViewer from '../ModelViewer';
const LinkedViewer = () => {
const { assetType, assetName } = useParams();
- const modelUrl = useMemo(() => {
+ const modelUrl = useMemo(import.meta.url, () => {
if (assetType === 'building') {
return getBuildingModel(Object.keys(Building.TYPES).find((i) => Building.TYPES[i].name === assetName));
} else if (assetType === 'resource') {
diff --git a/src/game/interface/modelViewer/LotViewer.js b/src/game/interface/modelViewer/LotViewer.js
index e1dfd3969..e07b2c4de 100644
--- a/src/game/interface/modelViewer/LotViewer.js
+++ b/src/game/interface/modelViewer/LotViewer.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useState } from '~/lib/react-debug';
import { Building } from '@influenceth/sdk';
import useLot from '~/hooks/useLot';
@@ -16,7 +16,7 @@ const LotViewer = () => {
const [pendingSound, setPendingSound] = useState(null);
// Play chatter after a delay, clear timeout if scene changes
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (zoomScene?.type === 'LOT' && lot?.building?.Building?.buildingType > 0) {
const id = setTimeout(() => playSound(`buildingChatter.${lot?.building?.Building?.buildingType}`), 5000);
setPendingSound(id);
@@ -27,7 +27,7 @@ const LotViewer = () => {
}
}, [zoomScene, lot]);
- const modelUrl = useMemo(() => {
+ const modelUrl = useMemo(import.meta.url, () => {
if (zoomScene?.overrides?.buildingType) {
return getBuildingModel(zoomScene.overrides.buildingType);
}
diff --git a/src/game/interface/modelViewer/ShipViewer.js b/src/game/interface/modelViewer/ShipViewer.js
index 620491a56..34cc57c1f 100644
--- a/src/game/interface/modelViewer/ShipViewer.js
+++ b/src/game/interface/modelViewer/ShipViewer.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useState } from '~/lib/react-debug';
import { Ship } from '@influenceth/sdk';
import useShip from '~/hooks/useShip';
@@ -16,7 +16,7 @@ const ShipViewer = () => {
const [pendingSound, setPendingSound] = useState(null);
// Play ship thruster loop
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (zoomScene?.type === 'SHIP') {
const id = setTimeout(() => playSound('ship'));
setPendingSound(id);
@@ -29,7 +29,7 @@ const ShipViewer = () => {
}
}, [zoomScene]);
- const modelUrl = useMemo(() => {
+ const modelUrl = useMemo(import.meta.url, () => {
return getShipModel(
zoomScene?.shipId ? ship?.Ship?.shipType : Ship.IDS.ESCAPE_MODULE,
ship?.Ship?.variant
diff --git a/src/game/launcher/Help.js b/src/game/launcher/Help.js
index 638fd99f3..cdc331d11 100644
--- a/src/game/launcher/Help.js
+++ b/src/game/launcher/Help.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import Loader from 'react-spinners/PuffLoader';
@@ -118,7 +118,7 @@ const YoutubeFeed = ({ playlistId, title }) => {
const [loading, setLoading] = useState();
const [videos, setVideos] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setVideos();
if (playlistId) {
@@ -137,13 +137,13 @@ const YoutubeFeed = ({ playlistId, title }) => {
}
}, [playlistId]);
- const onClickOwner = useCallback((v) => {
+ const onClickOwner = useCallback(import.meta.url, (v) => {
if (v.snippet?.videoOwnerChannelId) {
window.open(`https://www.youtube.com/channel/${v.snippet?.videoOwnerChannelId}`);
}
}, []);
- const onClickVideo = useCallback((v) => {
+ const onClickVideo = useCallback(import.meta.url, (v) => {
if (v.snippet?.resourceId?.videoId) {
window.open(`http://youtube.com/watch?v=${v.snippet?.resourceId?.videoId}&list=${playlistId}`)
}
diff --git a/src/game/launcher/Play.js b/src/game/launcher/Play.js
index 42eaca180..f45acc4a5 100644
--- a/src/game/launcher/Play.js
+++ b/src/game/launcher/Play.js
@@ -1,4 +1,4 @@
-import { useEffect } from 'react';
+import { useEffect } from '~/lib/react-debug';
import useSession from '~/hooks/useSession'
import { useControlledAlert } from '~/game/interface/Alerts';
@@ -67,7 +67,7 @@ const Play = () => {
const simulation = useSimulationEnabled();
const dispatchHudMenuOpened = useStore(s => s.dispatchHudMenuOpened);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (crews?.length) {
dispatchHudMenuOpened('MY_CREWS');
}
diff --git a/src/game/launcher/Settings.js b/src/game/launcher/Settings.js
index c858321ee..14df2c1b0 100644
--- a/src/game/launcher/Settings.js
+++ b/src/game/launcher/Settings.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import screenfull from 'screenfull';
import { FiCheckSquare as CheckedIcon, FiSquare as UncheckedIcon } from 'react-icons/fi';
@@ -144,7 +144,7 @@ const GraphicsPane = () => {
const [ localFOV, setLocalFOV ] = useState(graphics.fov);
const [ fullscreen, setFullscreen ] = useState(screenfull.isEnabled && screenfull.isFullscreen);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (screenfull.isEnabled) {
screenfull.on('change', () => {
setFullscreen(screenfull.isEnabled && screenfull.isFullscreen);
@@ -156,7 +156,7 @@ const GraphicsPane = () => {
setAutodetect(!graphics.autodetect, gpuInfo);
};
- const pixelRatioOptions = useMemo(() => {
+ const pixelRatioOptions = useMemo(import.meta.url, () => {
const options = new Set();
// add device settings and current selection always
@@ -358,7 +358,7 @@ const GameplayPane = () => {
const dispatchUseSessionsSet = useStore(s => s.dispatchUseSessionsSet);
const dispatchFeeTokenSet = useStore(s => s.dispatchFeeTokenSet);
- const tutorialIsDisabled = useMemo(() => {
+ const tutorialIsDisabled = useMemo(import.meta.url, () => {
if (gameplay.dismissTutorial) {
return true;
} else if (crewTutorials?.[crew?.id]?.dismissed) {
@@ -367,7 +367,7 @@ const GameplayPane = () => {
return false;
}, [crew, crewTutorials, gameplay.dismissTutorial]);
- const toggleTutorialDisabled = useCallback((which) => {
+ const toggleTutorialDisabled = useCallback(import.meta.url, (which) => {
// disable setting only (i.e. not crew-specific)
if (which) {
dispatchTutorialDisabled(true);
@@ -381,7 +381,7 @@ const GameplayPane = () => {
}
}, [crew, crewTutorials, gameplay.dismissTutorial]);
- const toggleSessionKeys = useCallback(async (which) => {
+ const toggleSessionKeys = useCallback(import.meta.url, async (which) => {
dispatchUseSessionsSet(which);
if (which !== false && !starknetSession && await shouldUseSessionKeys(true)) upgradeToSessionKey();
}, [starknetSession, upgradeToSessionKey]);
diff --git a/src/game/launcher/Store.js b/src/game/launcher/Store.js
index d7dbfc8d6..40884bcf1 100644
--- a/src/game/launcher/Store.js
+++ b/src/game/launcher/Store.js
@@ -1,4 +1,4 @@
-import { useMemo, useState } from 'react';
+import { useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import AsteroidsImage from '~/assets/images/sales/asteroids.png';
@@ -162,7 +162,7 @@ const SkuSelector = ({ onSelect }) => {
const { data: priceConstants } = usePriceConstants();
const packs = useStarterPackPricing();
- const paneMeta = useMemo(() => {
+ const paneMeta = useMemo(import.meta.url, () => {
const asteroidExtra = {};
const remaining = asteroidSale ? (Number(asteroidSale.limit) - Number(asteroidSale.volume)) : 0;
@@ -226,7 +226,7 @@ const Store = () => {
const initialSubpage = useStore(s => s.launcherSubpage);
- const initialSelection = useMemo(() => {
+ const initialSelection = useMemo(import.meta.url, () => {
const linkedSelectionIndex = Object.keys(storeAssets).indexOf(initialSubpage);
return linkedSelectionIndex >= 0 ? linkedSelectionIndex : undefined;
}, [initialSubpage]);
@@ -234,7 +234,7 @@ const Store = () => {
const [selection, setSelection] = useState(initialSelection);
const isSelected = selection !== undefined;
- const panes = useMemo(() => {
+ const panes = useMemo(import.meta.url, () => {
return Object.keys(storeAssets).map((k) => ({
label: storeAssets[k],
pane: setSelection()} />,
diff --git a/src/game/launcher/components/EthFaucetButton.js b/src/game/launcher/components/EthFaucetButton.js
index e345d4ea6..c0b92729e 100644
--- a/src/game/launcher/components/EthFaucetButton.js
+++ b/src/game/launcher/components/EthFaucetButton.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import { useQueryClient } from 'react-query';
import { TOKEN, TOKEN_SCALE } from '~/lib/priceUtils';
@@ -17,13 +17,13 @@ const EthFaucetButton = ({ onError, onProcessing, onSuccess }) => {
const [requestingEth, setRequestingEth] = useState();
- const ethEnabled = useMemo(() => {
+ const ethEnabled = useMemo(import.meta.url, () => {
if (!faucetInfo) return false;
const lastClaimed = faucetInfo.ETH.lastClaimed || 0;
return Date.now() > (Date.parse(lastClaimed) + 23.5 * 3600e3);
}, [faucetInfo]);
- const requestEth = useCallback(async () => {
+ const requestEth = useCallback(import.meta.url, async () => {
setRequestingEth(true);
try {
@@ -44,7 +44,7 @@ const EthFaucetButton = ({ onError, onProcessing, onSuccess }) => {
queryClient.invalidateQueries({ queryKey: ['walletBalance', 'eth'] });
}, [provider]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (onProcessing) onProcessing(requestingEth);
}, [onProcessing, requestingEth]);
diff --git a/src/game/launcher/components/FundingFlow.js b/src/game/launcher/components/FundingFlow.js
index 4d5f5d372..36317d8be 100644
--- a/src/game/launcher/components/FundingFlow.js
+++ b/src/game/launcher/components/FundingFlow.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import styled, { css } from 'styled-components';
import { createPortal } from 'react-dom';
import { PropagateLoader as Loader } from 'react-spinners';
@@ -315,7 +315,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
const [debug, setDebug] = useState(0);
// TODO: technically could wait to start polling until page is focused again
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// if (waiting && !debug) {
// setTimeout(() => {
// console.log('hack', startingBalance.current, wallet.tokenBalances); // tokenBalances
@@ -335,7 +335,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
}
}, [waiting, !!wallet, debug]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// if there is an actual increase in currency of a token (i.e. not just an
// increase in value b/c we don't want a trigger on exchange rate changes)
if (waiting && startingBalance.current) {
@@ -368,7 +368,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
}
}, [debug, waiting, wallet?.tokenBalances])
- const [walletBalance, fundsNeeded] = useMemo(
+ const [walletBalance, fundsNeeded] = useMemo(import.meta.url,
() => {
if (!wallet) return [];
const balance = wallet.combinedBalance;
@@ -382,7 +382,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
[priceHelper, totalPrice, wallet]
);
- const suggestedAmounts = useMemo(() => {
+ const suggestedAmounts = useMemo(import.meta.url, () => {
if (!fundsNeeded) return [10e6, 25e6, 50e6];
const needed = Math.ceil(fundsNeeded.to(TOKEN.USDC));
@@ -394,7 +394,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
}, [fundsNeeded]);
const to = useRef();
- const onRampHover = useCallback((which) => (e) => {
+ const onRampHover = useCallback(import.meta.url, (which) => (e) => {
if (to.current) clearTimeout(to.current);
if (which) {
setHoveredRampButton(e.target);
@@ -406,7 +406,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
}, []);
const [rampPurchase, setRampPurchase] = useState();
- const checkRampPurchase = useCallback(async (purchase) => {
+ const checkRampPurchase = useCallback(import.meta.url, async (purchase) => {
try {
const response = await fetch(
`https://api.${RAMP_PREPEND}ramp.network/api/host-api/purchase/${purchase.id}?secret=${purchase.purchaseViewToken}`,
@@ -433,14 +433,14 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
console.error('Error fetching purchase info:', error);
}
}, []);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (rampPurchase) {
const i = setInterval(() => { checkRampPurchase(rampPurchase); }, 5000);
return () => clearInterval(i);
}
}, [checkRampPurchase, rampPurchase])
- const onClickCC = useCallback((amount) => () => {
+ const onClickCC = useCallback(import.meta.url, (amount) => () => {
fireTrackingEvent('funding_start', { externalId: accountAddress });
setRamping(true);
setRampPurchase();
@@ -472,7 +472,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
}, [accountAddress]);
const [layerswapUrl, setLayerswapUrl] = useState();
- const onClickLayerswap = useCallback(() => {
+ const onClickLayerswap = useCallback(import.meta.url, () => {
let amount;
if (fundsNeeded) {
const swapAmount = fundsNeeded.clone();
@@ -497,14 +497,14 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
);
}, [accountAddress, fundsNeeded]);
- const onClickStarkgate = useCallback(() => {
+ const onClickStarkgate = useCallback(import.meta.url, () => {
const url = `https://${areChainsEqual('SN_SEPOLIA', chainId) ? 'sepolia.' : ''}starkgate.starknet.io/`;
window.open(url, '_blank');
setWaiting(true);
}, []);
- const onFaucetError = useCallback(() => {
+ const onFaucetError = useCallback(import.meta.url, () => {
createAlert({
type: 'GenericAlert',
data: { content: 'Faucet request failed, please try again later.' },
@@ -514,7 +514,7 @@ export const FundingFlow = ({ totalPrice, onClose, onFunded }) => {
onClose();
}, [onClose]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// error: clear ramp purchase + close funding dialog
if (RAMP_PURCHASE_STATUS[rampPurchase?.status]?.isError) {
// fire error
diff --git a/src/game/launcher/components/FundingMenu.js b/src/game/launcher/components/FundingMenu.js
index 06ad769e0..1543a5b1a 100644
--- a/src/game/launcher/components/FundingMenu.js
+++ b/src/game/launcher/components/FundingMenu.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo, useState } from 'react';
+import { useCallback, useMemo, useState } from '~/lib/react-debug';
import ReactDOMServer from 'react-dom/server';
import styled from 'styled-components';
@@ -149,16 +149,16 @@ const FundingMenu = () => {
const [isFunding, setIsFunding] = useState();
- const handleFunding = useCallback(() => {
+ const handleFunding = useCallback(import.meta.url, () => {
if (!accountAddress) return login();
setIsFunding(true);
}, [accountAddress, login]);
- const reloadBalance = useCallback(() => {
+ const reloadBalance = useCallback(import.meta.url, () => {
refetch();
}, [refetch]);
- const tooltipContent = useMemo(() => ReactDOMServer.renderToStaticMarkup(
+ const tooltipContent = useMemo(import.meta.url, () => ReactDOMServer.renderToStaticMarkup(
{Object.keys(wallet?.tokenBalances || {}).map((tokenAddress) => {
const balance = priceHelper.from(wallet.tokenBalances[tokenAddress], tokenAddress);
diff --git a/src/game/launcher/components/LauncherDialog.js b/src/game/launcher/components/LauncherDialog.js
index 7c099cafd..659ef5b32 100644
--- a/src/game/launcher/components/LauncherDialog.js
+++ b/src/game/launcher/components/LauncherDialog.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import ClipCorner from '~/components/ClipCorner';
@@ -100,13 +100,13 @@ const BottomLeft = styled.div``;
const LauncherDialog = ({ panes = [], preselect, singlePane, bottomLeftMenu }) => {
const [selected, setSelected] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!!panes) {
setSelected(panes[preselect || 0]);
}
}, [!!panes, preselect]);
- const handleClick = useCallback((pane) => {
+ const handleClick = useCallback(import.meta.url, (pane) => {
if (pane.link) {
window.open(pane.link);
} else {
diff --git a/src/game/launcher/components/RecruitmentMenu.js b/src/game/launcher/components/RecruitmentMenu.js
index 13d52abf0..99f848b2b 100644
--- a/src/game/launcher/components/RecruitmentMenu.js
+++ b/src/game/launcher/components/RecruitmentMenu.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo } from 'react';
+import { useCallback, useMemo } from '~/lib/react-debug';
import styled from 'styled-components';
import { SwayIcon } from '~/components/Icons';
@@ -28,7 +28,7 @@ const Wrapper = styled.div`
const RecruitmentMenu = () => {
const { data: referrals, isLoading } = useReferrals();
- const [referralsCount, referralsTotal] = useMemo(() => {
+ const [referralsCount, referralsTotal] = useMemo(import.meta.url, () => {
const referred = new Set();
let total = 0;
(referrals || []).forEach((r) => {
diff --git a/src/game/launcher/components/RewardMissions.js b/src/game/launcher/components/RewardMissions.js
index 5e7be0978..353b91ca5 100644
--- a/src/game/launcher/components/RewardMissions.js
+++ b/src/game/launcher/components/RewardMissions.js
@@ -1,4 +1,4 @@
-import { useCallback, useState } from 'react';
+import { useCallback, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import Loader from 'react-spinners/PuffLoader';
@@ -326,7 +326,7 @@ const MissionWrapper = styled.div`
`;
const Mission = ({ mission, mode }) => {
const createAlert = useStore(s => s.dispatchAlertLogged);
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
const targetUrl = mode === 'community' ? process.env.REACT_APP_COMMUNITY_MISSIONS_URL : process.env.REACT_APP_COLONIZATION_MISSIONS_URL;
if (targetUrl) {
window.open(targetUrl);
diff --git a/src/game/launcher/components/RewardQuests.js b/src/game/launcher/components/RewardQuests.js
index a91f9f604..c9a3a83a2 100644
--- a/src/game/launcher/components/RewardQuests.js
+++ b/src/game/launcher/components/RewardQuests.js
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import { useState } from '~/lib/react-debug';
import styled from 'styled-components';
import Loader from 'react-spinners/PuffLoader';
diff --git a/src/game/launcher/components/RewardReferrals.js b/src/game/launcher/components/RewardReferrals.js
index 1e6cb582c..3e851dac0 100644
--- a/src/game/launcher/components/RewardReferrals.js
+++ b/src/game/launcher/components/RewardReferrals.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo, useState } from 'react';
+import { useCallback, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Entity } from '@influenceth/sdk';
import moment from 'moment';
@@ -216,7 +216,7 @@ const RewardReferrals = () => {
const [sort, setSort] = useState(['createdAt', 'asc']);
- const handleCopyLink = useCallback(() => {
+ const handleCopyLink = useCallback(import.meta.url, () => {
if (!accountAddress) return login();
navigator.clipboard.writeText(`${document.location.origin}/play?r=${accountAddress}`);
@@ -227,7 +227,7 @@ const RewardReferrals = () => {
});
}, [accountAddress, createAlert, login]);
- const handleSort = useCallback((field) => () => {
+ const handleSort = useCallback(import.meta.url, (field) => () => {
if (!field) return;
let updatedSortField = sort[0];
@@ -242,14 +242,14 @@ const RewardReferrals = () => {
setSort([updatedSortField, updatedSortDirection]);
}, [sort]);
- const transformedData = useMemo(() => {
+ const transformedData = useMemo(import.meta.url, () => {
return (referrals || []).map((r) => ({
uuid: Entity.packEntity(r.entity),
...r
}))
}, [referrals]);
- const filteredData = useMemo(() => {
+ const filteredData = useMemo(import.meta.url, () => {
return transformedData.sort((a, b) => {
return (sort[1] === 'asc' ? -1 : 1) * (a[sort[0]] < b[sort[0]] ? -1 : 1);
});
diff --git a/src/game/launcher/components/SKU.js b/src/game/launcher/components/SKU.js
index 5cfbadb18..0c74d53d1 100644
--- a/src/game/launcher/components/SKU.js
+++ b/src/game/launcher/components/SKU.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import { useQueryClient } from 'react-query';
import styled from 'styled-components';
@@ -257,7 +257,7 @@ const FilterAsteroidButton = ({ price, sizeFilter }) => {
const dispatchZoomScene = useStore(s => s.dispatchZoomScene);
const updateZoomStatus = useStore(s => s.dispatchZoomStatusChanged);
- const filterUnownedAsteroidsAndClose = useCallback(() => {
+ const filterUnownedAsteroidsAndClose = useCallback(import.meta.url, () => {
updateFilters(Object.assign({}, filters, { ownedBy: 'unowned', ...sizeFilter }));
dispatchZoomScene();
let hudTimeout = 0;
@@ -285,7 +285,7 @@ const largeMaxPrice = 10000 * TOKEN_SCALE[TOKEN.USDC];
const AsteroidSKU = () => {
const { data: priceConstants } = usePriceConstants();
const priceHelper = usePriceHelper();
- const [smallMaxLots, mediumMaxLots, largeMaxLots] = useMemo(() => {
+ const [smallMaxLots, mediumMaxLots, largeMaxLots] = useMemo(import.meta.url, () => {
return [
asteroidPriceToLots(priceHelper.from(smallMaxPrice, TOKEN.USDC).to(TOKEN.ETH), priceConstants),
asteroidPriceToLots(priceHelper.from(mediumMaxPrice, TOKEN.USDC).to(TOKEN.ETH), priceConstants),
@@ -360,11 +360,11 @@ const CrewmateSKU = ({ onUpdatePurchase, onPurchasing }) => {
const priceHelper = usePriceHelper();
const [quantity, setQuantity] = useState(1);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
onPurchasing(getPendingCreditPurchase())
}, [getPendingCreditPurchase, onPurchasing]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const cleanQuantity = cleanseCrewmates(quantity) || 1;
const totalPrice = priceHelper.from(
safeBigInt(cleanQuantity) * priceConstants?.ADALIAN_PURCHASE_PRICE,
@@ -455,7 +455,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
const [usdc, setUSDC] = useState();
const [isProcessing, setIsProcessing] = useState();
- const handleEthChange = useCallback((newValue) => {
+ const handleEthChange = useCallback(import.meta.url, (newValue) => {
setETH(newValue);
const value = priceHelper.from(newValue * TOKEN_SCALE[TOKEN.ETH], TOKEN.ETH);
@@ -463,7 +463,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
setSway(roundToPlaces(value.to(TOKEN.SWAY) / TOKEN_SCALE[TOKEN.SWAY], 0));
}, [priceHelper]);
- const handleSwayChange = useCallback((newValue) => {
+ const handleSwayChange = useCallback(import.meta.url, (newValue) => {
setSway(newValue);
const value = priceHelper.from(newValue * TOKEN_SCALE[TOKEN.SWAY], TOKEN.SWAY);
@@ -471,7 +471,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
setUSDC(roundToPlaces(value.to(TOKEN.USDC) / TOKEN_SCALE[TOKEN.USDC], 2));
}, [priceHelper]);
- const handleUsdcChange = useCallback((newValue) => {
+ const handleUsdcChange = useCallback(import.meta.url, (newValue) => {
setUSDC(newValue);
const value = priceHelper.from(newValue * TOKEN_SCALE[TOKEN.USDC], TOKEN.USDC);
@@ -479,7 +479,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
setSway(roundToPlaces(value.to(TOKEN.SWAY) / TOKEN_SCALE[TOKEN.SWAY], 0));
}, [priceHelper]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (preferredUiCurrency === TOKEN.ETH) {
handleEthChange(0.001);
} else {
@@ -487,7 +487,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
}
}, []);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const unscaledUSDC = (usdc || 0) * TOKEN_SCALE[TOKEN.USDC];
onUpdatePurchase({
totalPrice: priceHelper.from(unscaledUSDC, TOKEN.USDC),
@@ -548,7 +548,7 @@ const SwaySKU = ({ onUpdatePurchase, onPurchasing }) => {
wallet
]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
onPurchasing(isProcessing);
}, [isProcessing, onPurchasing])
@@ -635,13 +635,13 @@ const SwayFaucetButton = () => {
const [requestingSway, setRequestingSway] = useState();
- const swayEnabled = useMemo(() => {
+ const swayEnabled = useMemo(import.meta.url, () => {
if (!faucetInfo) return false;
const lastClaimed = faucetInfo.SWAY.lastClaimed || 0;
return Date.now() > (Date.parse(lastClaimed) + 23.5 * 3600e3);
}, [faucetInfo]);
- const requestSway = useCallback(async () => {
+ const requestSway = useCallback(import.meta.url, async () => {
if (!accountAddress) return login();
setRequestingSway(true);
@@ -706,7 +706,7 @@ const SKU = ({ asset, onBack }) => {
const [fundingPurchase, setFundingPurchase] = useState();
const [isPurchasing, setIsPurchasing] = useState();
- const handlePurchase = useCallback((overridePurchase) => {
+ const handlePurchase = useCallback(import.meta.url, (overridePurchase) => {
if (!accountAddress) return login();
const purch = (overridePurchase || purchase);
@@ -719,7 +719,7 @@ const SKU = ({ asset, onBack }) => {
}
}, [accountAddress, login, purchase, wallet]);
- const [asteroidsRemaining, nextAsteroidSale] = useMemo(() => {
+ const [asteroidsRemaining, nextAsteroidSale] = useMemo(import.meta.url, () => {
if (!asteroidSale) return [0, 0, false];
const remaining = asteroidSale ? (Number(asteroidSale.limit) - Number(asteroidSale.volume)) : 0;
@@ -730,7 +730,7 @@ const SKU = ({ asset, onBack }) => {
];
}, [asteroidSale, blockTime]);
- const { content, ...props } = useMemo(() => {
+ const { content, ...props } = useMemo(import.meta.url, () => {
if (asset === 'asteroids') {
return {
coverImage: AsteroidsHeroImage,
diff --git a/src/game/launcher/components/StarterPack.js b/src/game/launcher/components/StarterPack.js
index c5e13fd17..a5c59298b 100644
--- a/src/game/launcher/components/StarterPack.js
+++ b/src/game/launcher/components/StarterPack.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { Building, Crewmate, Process } from '@influenceth/sdk';
import cloneDeep from 'lodash/cloneDeep';
@@ -155,7 +155,7 @@ export const useStarterPackPricing = () => {
const priceHelper = usePriceHelper();
const { data: wallet } = useWalletPurchasableBalances();
- const adalianPrice = useMemo(() => {
+ const adalianPrice = useMemo(import.meta.url, () => {
if (!priceConstants) return priceHelper.from(0);
return priceHelper.from(priceConstants?.ADALIAN_PURCHASE_PRICE, priceConstants?.ADALIAN_PURCHASE_TOKEN);
}, [priceConstants]);
@@ -166,7 +166,7 @@ export const useStarterPackPricing = () => {
} = useShoppingListData(1, 0, uniqueProductIds);
// TODO: could just add adv building difference to basic to avoid repeating all those calcs for shared buildings
- const getMarketCostForBuildingList = useCallback((buildingIds) => {
+ const getMarketCostForBuildingList = useCallback(import.meta.url, (buildingIds) => {
if (!resourceMarketplaces) return 0;
// get instance of resourceMarketplaces that we can be destructive with
@@ -239,22 +239,22 @@ export const useStarterPackPricing = () => {
return allOrders.reduce((acc, o) => acc + o.cost, 0);
}, [resourceMarketplacesUpdatedAt]);
- const introPackSwayMin = useMemo(() => {
+ const introPackSwayMin = useMemo(import.meta.url, () => {
const marketCost = getMarketCostForBuildingList(introBuildings);
return (1 + MARKET_BUFFER) * marketCost;
}, [getMarketCostForBuildingList]);
- const basicPackSwayMin = useMemo(() => {
+ const basicPackSwayMin = useMemo(import.meta.url, () => {
const marketCost = getMarketCostForBuildingList(basicBuildings);
return (1 + MARKET_BUFFER) * marketCost;
}, [getMarketCostForBuildingList]);
- const advPackSwayMin = useMemo(() => {
+ const advPackSwayMin = useMemo(import.meta.url, () => {
const marketCost = getMarketCostForBuildingList(advBuildings);
return (1 + MARKET_BUFFER) * marketCost;
}, [getMarketCostForBuildingList]);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
const introMinPrice = priceHelper.from(introPackPriceUSD * TOKEN_SCALE[TOKEN.USDC], TOKEN.USDC);
const introMinSwayValue = priceHelper.from(introPackSwayMin * TOKEN_SCALE[TOKEN.SWAY], TOKEN.SWAY);
const introCrewmatesValue = priceHelper.from(introPackCrewmates * adalianPrice.usdcValue, TOKEN.USDC);
@@ -339,7 +339,7 @@ export const useStarterPacks = () => {
const createAlert = useStore(s => s.dispatchAlertLogged);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
const onPurchase = (which) => async (onIsPurchasing) => {
const pack = starterPacks[which];
const totalPrice = pack.price;
@@ -414,11 +414,11 @@ const PurchasePackButton = ({ pack }) => {
const [isPurchasing, setIsPurchasing] = useState();
- const isPurchasingStarterPack = useMemo(() => {
+ const isPurchasingStarterPack = useMemo(import.meta.url, () => {
return isPurchasing || (pendingTransactions || []).find(tx => tx.key === 'PurchaseStarterPack');
}, [pendingTransactions]);
- const onPurchase = useCallback(() => {
+ const onPurchase = useCallback(import.meta.url, () => {
pack.onPurchase((which) => setIsPurchasing(which));
}, [pack]);
@@ -444,7 +444,7 @@ const StarterPackWrapper = ({ children, pack, ...props }) => {
const [isFunding, setIsFunding] = useState();
const [isFunded, setIsFunded] = useState();
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
if (props.asButton) {
if (pack.price.usdcValue > wallet?.combinedBalance?.to(TOKEN.USDC)) {
setIsFunding({
@@ -459,7 +459,7 @@ const StarterPackWrapper = ({ children, pack, ...props }) => {
}, [props.asButton, pack.price, wallet?.combinedBalance]);
// pull pack.onPurchase out of onClick (so can be re-memoized after wallet balance updates before called)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (isFunded) {
pack.onPurchase(props.onIsPurchasing);
setIsFunded();
diff --git a/src/game/launcher/components/SupportMenu.js b/src/game/launcher/components/SupportMenu.js
index 128ca4c61..25371881d 100644
--- a/src/game/launcher/components/SupportMenu.js
+++ b/src/game/launcher/components/SupportMenu.js
@@ -1,4 +1,4 @@
-import { useCallback } from 'react';
+import { useCallback } from '~/lib/react-debug';
import styled from 'styled-components';
import { ChevronDoubleRightIcon, InfluenceIcon } from '~/components/Icons';
@@ -75,7 +75,7 @@ const SupportWrapper = styled.div`
`;
const SupportMenu = () => {
- const goToDiscord = useCallback(() => {
+ const goToDiscord = useCallback(import.meta.url, () => {
window.open(process.env.REACT_APP_HELP_URL);
}, []);
return (
diff --git a/src/game/scene/Asteroid.js b/src/game/scene/Asteroid.js
index 260e657a9..bd257f920 100644
--- a/src/game/scene/Asteroid.js
+++ b/src/game/scene/Asteroid.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { useFrame, useThree } from '@react-three/fiber';
import { ACESFilmicToneMapping, AxesHelper, CameraHelper, Color, DirectionalLight, DirectionalLightHelper, Quaternion, Vector3 } from 'three';
import gsap from 'gsap';
@@ -161,7 +161,7 @@ const AsteroidComponent = () => {
const { assetType, overrides } = useContext(DevToolContext);
- const [STAR_COLOR, STAR_INTENSITY_ADJ, DARKLIGHT_COLOR, DARKLIGHT_INTENSITY] = useMemo(() => {
+ const [STAR_COLOR, STAR_INTENSITY_ADJ, DARKLIGHT_COLOR, DARKLIGHT_INTENSITY] = useMemo(import.meta.url, () => {
const defaults = visualConfigs.scene;
const o = assetType === 'scene' ? overrides : {};
return [
@@ -172,12 +172,12 @@ const AsteroidComponent = () => {
];
}, [assetType, overrides]);
- const selectedLot = useMemo(() => Lot.toPosition(lotId), [lotId]);
+ const selectedLot = useMemo(import.meta.url, () => Lot.toPosition(lotId), [lotId]);
const { data: asteroidData } = useAsteroid(origin);
const { data: ships } = useAsteroidShips(origin);
- const shipsInOrbitTally = useMemo(() => {
+ const shipsInOrbitTally = useMemo(import.meta.url, () => {
return (ships || []).filter((ship) => {
return ship.Location.location.label === Entity.IDS.ASTEROID && !ship.Ship.transitDestination && ship.Ship.status === Ship.STATUSES.AVAILABLE;
}).length;
@@ -213,26 +213,26 @@ const AsteroidComponent = () => {
const forceUpdate = useRef(0);
const lastUpdateStart = useRef(0);
- const maxStretch = useMemo(
+ const maxStretch = useMemo(import.meta.url,
() => config?.stretch ? Math.max(config.stretch.x, config.stretch.y, config.stretch.z) : 1,
[config?.stretch]
);
- // const minStretch = useMemo(
+ // const minStretch = useMemo(import.meta.url,
// () => config?.stretch ? Math.min(config.stretch.x, config.stretch.y, config.stretch.z) : 1,
// [config?.stretch]
// );
// scaleHelper helps define outmost telemetry lines and initial zoom
// to help convey relative scale of asteroids
- const SCALE_HELPER = useMemo(() => {
+ const SCALE_HELPER = useMemo(import.meta.url, () => {
return 360000 * Math.sqrt(config?.radius / 376000) / config?.radius;
}, [config?.radius]);
- const INITIAL_ZOOM = useMemo(() => {
+ const INITIAL_ZOOM = useMemo(import.meta.url, () => {
return Math.max(INITIAL_ZOOM_MIN, 1.5 * SCALE_HELPER * config?.radius);
}, [config?.radius, SCALE_HELPER]);
- const initialOrientation = useMemo(() => {
+ const initialOrientation = useMemo(import.meta.url, () => {
if (!(controls && config?.radius && zoomedFrom?.position)) return null;
// zoom to the point on the equator closest to the camera
@@ -273,15 +273,15 @@ const AsteroidComponent = () => {
};
}, [cinematicInitialPosition, !controls, config?.radius, prevAsteroidPosition, zoomedFrom?.position]);
- const ringsPresent = useMemo(() => !!config?.ringsPresent, [config?.ringsPresent]);
- const surfaceDistance = useMemo(
+ const ringsPresent = useMemo(import.meta.url, () => !!config?.ringsPresent, [config?.ringsPresent]);
+ const surfaceDistance = useMemo(import.meta.url,
() => (MIN_FRUSTUM_AT_SURFACE / 2) / Math.tan((controls?.object?.fov / 2) * (Math.PI / 180)),
[controls?.object?.fov]
);
- const frustumHeightMult = useMemo(() => 2 * Math.tan((controls?.object?.fov / 2) * (Math.PI / 180)), [controls?.object?.fov]);
+ const frustumHeightMult = useMemo(import.meta.url, () => 2 * Math.tan((controls?.object?.fov / 2) * (Math.PI / 180)), [controls?.object?.fov]);
- const disposeGeometry = useCallback(() => {
+ const disposeGeometry = useCallback(import.meta.url, () => {
if (geometry.current && quadtreeRef.current) {
geometry.current.groups.forEach((g) => {
quadtreeRef.current.remove(g);
@@ -293,7 +293,7 @@ const AsteroidComponent = () => {
}
}, []);
- const disposeLight = useCallback(() => {
+ const disposeLight = useCallback(import.meta.url, () => {
if (group.current && light.current) {
group.current.remove(light.current);
}
@@ -311,7 +311,7 @@ const AsteroidComponent = () => {
}
}, []);
- const onUnload = useCallback(() => {
+ const onUnload = useCallback(import.meta.url, () => {
setConfig();
setTerrainInitialized();
asteroidOrbit.current = null;
@@ -324,7 +324,7 @@ const AsteroidComponent = () => {
disposeGeometry();
}, [disposeLight, disposeGeometry]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// if origin changed, zoom into new asteroid
if (asteroidId.current && asteroidId.current !== origin) {
if (zoomStatus === 'in') {
@@ -339,14 +339,14 @@ const AsteroidComponent = () => {
dispatchLotsLoading(origin); // initialize lot loader
}, [origin]); // eslint-disable-line react-hooks/exhaustive-deps
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (zoomStatus !== 'in') {
setZoomedIntoAsteroidId();
}
}, [zoomStatus]);
// Update texture generation config when new asteroid data is available
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// when asteroidData is loaded for selected asteroid...
if (asteroidData && asteroidData.id === origin) {
@@ -375,24 +375,24 @@ const AsteroidComponent = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [ asteroidData ]);
- const defaultLightIntensity = useMemo(() => {
+ const defaultLightIntensity = useMemo(import.meta.url, () => {
if (!position.current || !config?.radius) return 0;
return Math.max(0.175, STAR_INTENSITY_ADJ * constants.STAR_INTENSITY / (new Vector3(...position.current).length() / constants.AU));
}, [config?.radius, STAR_INTENSITY_ADJ]);
// turn down the sun while in resource mode
- const currentLightIntensity = useMemo(() => {
+ const currentLightIntensity = useMemo(import.meta.url, () => {
return (resourceMap?.active && resourceMap?.selected) ? Math.min(0.175, defaultLightIntensity) : defaultLightIntensity;
}, [defaultLightIntensity, resourceMap]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (light.current && light.current.intensity !== currentLightIntensity) {
gsap.timeline().to(light.current, { intensity: currentLightIntensity, ease: 'power4.out', duration: LIGHT_ANIMATION_TIME / 1e3 });
}
}, [currentLightIntensity]);
// Configures the light component once the geometry is created
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!(config?.radius && config?.stretch && geometry.current && quadtreeRef.current && position.current)) return;
// calculate intended shadow mode
@@ -463,16 +463,16 @@ const AsteroidComponent = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [config, ringsPresent, shadowMode, shadowSize, textureSize, surfaceDistance]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (light.current) light.current.color = new Color().setStyle(STAR_COLOR);
}, [STAR_COLOR]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (darkLight.current) darkLight.current.color = new Color().setStyle(DARKLIGHT_COLOR);
}, [DARKLIGHT_COLOR]);
// Zooms the camera to the correct location
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (zoomStatus === 'zooming-in' && !prevAsteroidPosition && controls) {
// console.log('set zoomedfrom');
setZoomedFrom({
@@ -484,7 +484,7 @@ const AsteroidComponent = () => {
}, [zoomStatus]);
const shouldZoomIn = zoomStatus === 'zooming-in' && controls && config?.radius;
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!shouldZoomIn || !initialOrientation || !config) return;
if (!group.current || !position.current) return;
@@ -529,7 +529,7 @@ const AsteroidComponent = () => {
}, [ shouldZoomIn, !initialOrientation ]);
const shouldFinishZoomIn = zoomStatus === 'in' && controls && config?.radius;
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!shouldFinishZoomIn || !initialOrientation) return;
const panTo = new Vector3(...position.current);
@@ -561,7 +561,7 @@ const AsteroidComponent = () => {
// Handle zooming back out
const shouldZoomOut = zoomStatus === 'zooming-out' && zoomedFrom && controls;
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!shouldZoomOut) return;
controls.minDistance = 0;
@@ -589,14 +589,14 @@ const AsteroidComponent = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [ shouldZoomOut ]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!cameraAltitude || !frustumHeightMult) return;
const frustumWidth = cameraAltitude * frustumHeightMult * window.innerWidth / window.innerHeight;
const thetaAcrossScreen = frustumWidth / controls.object.position.length();
controls.rotateSpeed = Math.min(1.5, 1.5 * thetaAcrossScreen / 2);
}, [cameraAltitude, frustumHeightMult]); // eslint-disable-line react-hooks/exhaustive-deps
- const getClosestChunk = useCallback((cameraPosition) => {
+ const getClosestChunk = useCallback(import.meta.url, (cameraPosition) => {
if (!geometry.current?.chunks) return null;
const [closestChunk] = Object.values(geometry.current.chunks).reduce((acc, c) => {
const distance = c.sphereCenter.distanceTo(cameraPosition);
@@ -605,7 +605,7 @@ const AsteroidComponent = () => {
return closestChunk;
}, []);
- const getMinDistance = useCallback((closestChunk) => {
+ const getMinDistance = useCallback(import.meta.url, (closestChunk) => {
return Math.min(
config?.radius * MIN_ZOOM_DEFAULT, // for smallest asteroids to match legacy (where this > min surface distance)
closestChunk.sphereCenterHeight + surfaceDistance
@@ -619,7 +619,7 @@ const AsteroidComponent = () => {
// NOTE: raycasting technically *might* be more accurate here, but it's way less performant
// (3ms+ for just closest mesh... if all quadtree children, closer to 20ms)
const applyingZoomLimits = useRef(0);
- const applyZoomLimits = useCallback((cameraPosition) => {
+ const applyZoomLimits = useCallback(import.meta.url, (cameraPosition) => {
if (!config?.radius) return;
applyingZoomLimits.current = true;
setTimeout(() => {
@@ -646,12 +646,12 @@ const AsteroidComponent = () => {
}
// adjust rotation speed
- setCameraAltitude(cameraPosition.length() - closestChunk.sphereCenterHeight);
+ setCameraAltitude(Math.round(cameraPosition.length() - closestChunk.sphereCenterHeight));
}, 0);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [surfaceDistance, config?.radius, controls?.minDistance]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const resourceMapActive = resourceMap?.active;
const resourceMapId = resourceMap?.selected;
@@ -687,7 +687,7 @@ const AsteroidComponent = () => {
}
}, [resourceMap, terrainInitialized, !asteroidData?.Celestial?.abundances]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (geometry.current && terrainUpdateNeeded) {
// vvv BENCHMARK 2ms (zoomed-out), 4-20ms+ (zoomed-in)
lastUpdateStart.current = Date.now();
@@ -701,7 +701,7 @@ const AsteroidComponent = () => {
// NOTE: to stop / start chunk splitting with shift+space, can
// uncomment below and the "disableChunks" line above
// const disableChunks = useRef();
- // useEffect(() => {
+ // useEffect(import.meta.url, () => {
// const onKeydown = (e) => {
// if (e.shiftKey && e.which === 32) {
// disableChunks.current = !disableChunks.current;
@@ -714,7 +714,7 @@ const AsteroidComponent = () => {
// }, []);
// const ddd = useRef();
- // useEffect(() => {
+ // useEffect(import.meta.url, () => {
// if (!config?.radius) return;
// const onKeydown = (e) => {
// if (e.shiftKey && e.which === 32) {
@@ -761,19 +761,19 @@ const AsteroidComponent = () => {
// }, [controls, config?.radius]);
const [dramaticZoom, setDramaticZoom] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setDramaticZoom(true);
}, [origin]);
const [cameraRecenterTimestamp, setCameraRecenterTimestamp] = useState(0);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (cameraNeedsRecenter) {
dispatchRecenterCamera();
setCameraRecenterTimestamp(Date.now())
}
}, [cameraNeedsRecenter]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (cameraNeedsHighAltitude && config?.radius && zoomStatus === 'in' && !automatingCamera.current) {
const newPosition = new Vector3(...controls.object.position);
newPosition.setLength(config.radius * 1.5);
@@ -796,7 +796,7 @@ const AsteroidComponent = () => {
const [debugTrajectory, setDebugTrajectory] = useState([]);
const automatingCamera = useRef();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (selectedLot?.lotIndex > 0 && zoomedIntoAsteroidId === selectedLot?.asteroidId && config?.radiusNominal && zoomStatus === 'in') {
const lotTally = Asteroid.getSurfaceArea(selectedLot?.asteroidId);
if (lotTally < selectedLot.lotIndex) { dispatchLotSelected(); return; }
@@ -953,7 +953,7 @@ const AsteroidComponent = () => {
}
}, [cameraRecenterTimestamp, zoomedIntoAsteroidId, origin, selectedLot, config?.radiusNominal, zoomStatus]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!cameraNeedsReorientation || zoomStatus !== 'in') return;
dispatchReorientCamera();
gsap.timeline().to(controls.object.up, { ...rotationAxis.current.clone(), ease: 'slow.out' });
diff --git a/src/game/scene/Asteroids.js b/src/game/scene/Asteroids.js
index b9181e50a..0a4c7dcd9 100644
--- a/src/game/scene/Asteroids.js
+++ b/src/game/scene/Asteroids.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useRef, useState, useMemo } from 'react';
+import { useCallback, useEffect, useRef, useState, useMemo } from '~/lib/react-debug';
import styled from 'styled-components';
import { AxesHelper, Color, Vector3 } from 'three';
import { useThrottleCallback } from '@react-hook/throttle';
@@ -86,7 +86,7 @@ const Asteroids = () => {
const selectDestination = useStore(s => s.dispatchDestinationSelected);
const dispatchSwapOriginDestination = useStore(s => s.dispatchSwapOriginDestination);
- const isDefaultSearch = useMemo(() => isAssetSearchMatchingDefault('asteroidsMapped'), [filters]);
+ const isDefaultSearch = useMemo(import.meta.url, () => isAssetSearchMatchingDefault('asteroidsMapped'), [filters]);
const { processInBackground } = useWebWorker();
@@ -111,11 +111,11 @@ const Asteroids = () => {
const isUpdating = useRef(false);
const asteroidsGeom = useRef();
- const asteroids = useMemo(() => {
+ const asteroids = useMemo(import.meta.url, () => {
return asteroidSearch?.hits?.length > 0 ? asteroidSearch.hits : [];
}, [asteroidSearch?.hits]);
- const assetedAsteroids = useMemo(() => {
+ const assetedAsteroids = useMemo(import.meta.url, () => {
const asseted = {};
(controlledAsteroids || []).forEach((a) => {
if (!asseted[a.id]) asseted[a.id] = { asteroid: a };
@@ -146,7 +146,7 @@ const Asteroids = () => {
// Update state when asteroids from server, origin, or destination change
const isZoomedIn = zoomStatus === 'in';
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const newMappedAsteroids = asteroids ? cloneDeep(asteroids) : [];
// in default search, append watchlist and owned as needed
@@ -186,7 +186,7 @@ const Asteroids = () => {
}, [ asteroids, origin, destination, assetedAsteroids, watchlist, isZoomedIn ]);
// Responds to hover changes in the store which could be fired from the HUD
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!hovered || hovered === originId || hovered === destinationId) {
setHoveredPos(null);
return;
@@ -209,7 +209,7 @@ const Asteroids = () => {
// managing trigger for this in a useFrame loop (rather than listening for coarseTime update),
// and setting geometry attributes directly, rather than through state... could potentially do
// fewer updates / only update on coarseTime when zoomed in
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (coarseTime && asteroidsWorkerPayload && !isUpdating.current) {
isUpdating.current = true;
processInBackground(
@@ -228,7 +228,7 @@ const Asteroids = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [coarseTime, asteroidsWorkerPayload])
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// Check that we have data, positions are processed, and they're in sync
if (mappedAsteroids.length * 3 === positions.length) {
if (originId) {
@@ -248,7 +248,7 @@ const Asteroids = () => {
}, [ mappedAsteroids, positions, originId, destinationId ]);
// Update colors
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const newColors = mappedAsteroids.map(a => {
if (highlightConfig) return highlighters[highlightConfig.field](a, highlightConfig);
return [ 1, 1, 1 ];
@@ -258,13 +258,13 @@ const Asteroids = () => {
}, [ mappedAsteroids, highlightConfig ]);
// re-computeBoundingSphere on geometry change
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (asteroidsGeom.current) {
asteroidsGeom.current.computeBoundingSphere();
}
}, [positions]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!cameraNeedsReorientation || zoomStatus !== 'out' || !controls?.object?.position) return;
dispatchReorientCamera();
@@ -290,7 +290,7 @@ const Asteroids = () => {
}, [cameraNeedsReorientation]);
// mouse event handlers
- const onClick = useCallback((e) => {
+ const onClick = useCallback(import.meta.url, (e) => {
e.stopPropagation();
const index = e.intersections.sort((a, b) => a.distanceToRay - b.distanceToRay)[0].index;
if (mappedAsteroids[index]) {
@@ -305,7 +305,7 @@ const Asteroids = () => {
}
}, [mappedAsteroids, destinationId, travelMode]); // eslint-disable-line react-hooks/exhaustive-deps
- const onContextClick = useCallback((e) => {
+ const onContextClick = useCallback(import.meta.url, (e) => {
e.stopPropagation();
const index = e.intersections.sort((a, b) => a.distanceToRay - b.distanceToRay)[0].index;
@@ -326,7 +326,7 @@ const Asteroids = () => {
unhoverAsteroid();
}, 30); // eslint-disable-line react-hooks/exhaustive-deps
- const { assetPositions, assetPositionsById, watchlistPositions } = useMemo(() => {
+ const { assetPositions, assetPositionsById, watchlistPositions } = useMemo(import.meta.url, () => {
const assetPositions = [];
const assetPositionsById = {};
const watchlistPositions = [];
@@ -349,7 +349,7 @@ const Asteroids = () => {
}
}, [origin, positions, watchlist]); // don't update when mappedAsteroids updated (wait for positions update)
- const [originToDestination, originToDestinationDistance, originToDestinationHalfway] = useMemo(() => {
+ const [originToDestination, originToDestinationDistance, originToDestinationHalfway] = useMemo(import.meta.url, () => {
if (originPos && destinationPos) {
const o = new Vector3(originPos[0], originPos[1], originPos[2]);
const d = new Vector3(destinationPos[0], destinationPos[1], destinationPos[2]);
@@ -371,7 +371,7 @@ const Asteroids = () => {
const diamondMarker = useTexture(`${process.env.PUBLIC_URL}/textures/asteroids/solid_diamond.png`);
- const billboardedAsteroids = useMemo(() => {
+ const billboardedAsteroids = useMemo(import.meta.url, () => {
const b = {};
if (origin && originPos) {
b[origin.id] = {
diff --git a/src/game/scene/Planets.js b/src/game/scene/Planets.js
index ac74cc8dc..b3166cebd 100644
--- a/src/game/scene/Planets.js
+++ b/src/game/scene/Planets.js
@@ -1,4 +1,4 @@
-import { useEffect, useRef } from 'react';
+import { useEffect, useRef } from '~/lib/react-debug';
import { AdditiveBlending, Float32BufferAttribute } from 'three';
import { useTexture } from '@react-three/drei';
import { Planet } from '@influenceth/sdk';
@@ -21,7 +21,7 @@ const Planets = () => {
const geometry = useRef();
// Listen for changes to planets data or global time and update planet positions
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (planets && coarseTime && !isUpdating.current) {
isUpdating.current = true;
processInBackground(
diff --git a/src/game/scene/SettingsManager.js b/src/game/scene/SettingsManager.js
index c3ee047b0..1744dabed 100644
--- a/src/game/scene/SettingsManager.js
+++ b/src/game/scene/SettingsManager.js
@@ -1,4 +1,4 @@
-import { useContext, useEffect, useMemo, useState } from 'react';
+import { useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import { useThree } from '@react-three/fiber';
import { useCubeTexture } from '@react-three/drei';
import { Color, EquirectangularReflectionMapping, TextureLoader } from 'three';
@@ -18,7 +18,7 @@ const SettingsManager = () => {
const [overrideTexture, setOverrideTexture] = useState();
- const [backgroundOverride, backgroundOverrideName, backgroundIntensity] = useMemo(() => {
+ const [backgroundOverride, backgroundOverrideName, backgroundIntensity] = useMemo(import.meta.url, () => {
const defaults = visualConfigs.scene;
const o = assetType === 'scene' ? overrides : {};
return [
@@ -33,7 +33,7 @@ const SettingsManager = () => {
'sky_pos_x.jpg', 'sky_neg_x.jpg', 'sky_pos_y.jpg', 'sky_neg_y.jpg', 'sky_pos_z.jpg', 'sky_neg_z.jpg'
], { path: `${process.env.PUBLIC_URL}/textures/skybox/`});
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (backgroundOverride && backgroundOverrideName) {
const cleanupTextures = [];
const resolve = function (texture) {
@@ -56,12 +56,12 @@ const SettingsManager = () => {
}
}, [backgroundOverride, backgroundOverrideName]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
gl.setPixelRatio(pixelRatio || 1);
}, [pixelRatio]);
// toggle background on / off per settings
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (skyboxVisible && skybox) {
scene.background = overrideTexture || skybox;
} else if (!skyboxVisible) {
@@ -69,12 +69,12 @@ const SettingsManager = () => {
}
}, [ overrideTexture, skyboxVisible, skybox ]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
scene.backgroundIntensity = backgroundIntensity;
}, [backgroundIntensity]);
// toggle fov as needed
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (fov && camera && camera.fov !== fov) {
camera.fov = fov;
camera.updateProjectionMatrix();
diff --git a/src/game/scene/Star.js b/src/game/scene/Star.js
index 976ec9f2e..8302958bb 100644
--- a/src/game/scene/Star.js
+++ b/src/game/scene/Star.js
@@ -1,4 +1,4 @@
-import { useEffect, useRef } from 'react';
+import { useEffect, useRef } from '~/lib/react-debug';
import { Color, Vector3 } from 'three';
import { useThree, useFrame } from '@react-three/fiber';
import { useTexture } from '@react-three/drei';
@@ -32,7 +32,7 @@ const Star = () => {
const { camera } = useThree();
// Update lensflare elements with textures after loaded
- useEffect(() => {
+ useEffect(import.meta.url, () => {
config.forEach((c, i) => {
lensflareElements[i].texture = textures[c[0]];
});
diff --git a/src/game/scene/asteroid/Lots.js b/src/game/scene/asteroid/Lots.js
index 399941f83..d6039a674 100644
--- a/src/game/scene/asteroid/Lots.js
+++ b/src/game/scene/asteroid/Lots.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { useFrame, useThree } from '@react-three/fiber';
import { useTexture } from '@react-three/drei';
import {
@@ -92,7 +92,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
const { registerMessageHandler, unregisterMessageHandler, wsReady } = useWebsocket();
const { processInBackground } = useWebWorker();
- const attachTo = useMemo(() => overrideAttachTo || scene, [overrideAttachTo, scene]);
+ const attachTo = useMemo(import.meta.url, () => overrideAttachTo || scene, [overrideAttachTo, scene]);
const textureQuality = useStore(s => s.graphics.textureQuality);
const lotId = useStore(s => s.asteroids.lot);
@@ -100,9 +100,9 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
const dispatchLotSelected = useStore(s => s.dispatchLotSelected);
const dispatchSearchResults = useStore(s => s.dispatchLotsMappedSearchResults);
- const selectedLotIndex = useMemo(() => Lot.toIndex(lotId), [lotId]);
+ const selectedLotIndex = useMemo(import.meta.url, () => Lot.toIndex(lotId), [lotId]);
const { data: lotDetails } = useLot(lotId);
- const deliveryEndpoint = useMemo(() => lotDetails?.building || lotDetails?.surfaceShip, [lotDetails]);
+ const deliveryEndpoint = useMemo(import.meta.url, () => lotDetails?.building || lotDetails?.surfaceShip, [lotDetails]);
const { data: outboundDeliveries } = useDeliveries({ origin: deliveryEndpoint, status: Delivery.STATUSES.SENT });
const { data: inboundDeliveries } = useDeliveries({ destination: deliveryEndpoint, status: Delivery.STATUSES.SENT });
@@ -122,7 +122,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
const textures = useTexture(lotUseTextures);
- const texturesLoaded = useMemo(() => {
+ const texturesLoaded = useMemo(import.meta.url, () => {
return Object.keys(textures) > 0;
}, [textures]);
@@ -146,12 +146,12 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
const mouseIsOut = useRef(false);
const clickStatus = useRef();
- const PLOT_WIDTH = useMemo(() => Math.min(125, config?.radius / 25), [config?.radius]);
- const BUILDING_RADIUS = useMemo(() => 0.375 * PLOT_WIDTH, [PLOT_WIDTH]);
- const PIP_RADIUS = useMemo(() => 0.25 * PLOT_WIDTH, [PLOT_WIDTH]);
+ const PLOT_WIDTH = useMemo(import.meta.url, () => Math.min(125, config?.radius / 25), [config?.radius]);
+ const BUILDING_RADIUS = useMemo(import.meta.url, () => 0.375 * PLOT_WIDTH, [PLOT_WIDTH]);
+ const PIP_RADIUS = useMemo(import.meta.url, () => 0.25 * PLOT_WIDTH, [PLOT_WIDTH]);
const RETICULE_WIDTH = 5 * PLOT_WIDTH;
- const chunkyAltitude = useMemo(() => Math.round(cameraAltitude / 500) * 500, [cameraAltitude]);
+ const chunkyAltitude = useMemo(import.meta.url, () => Math.round(cameraAltitude / 500) * 500, [cameraAltitude]);
// NOTE: for every dependency on `lotDataMap`, should also include `lastLotUpdate` so react triggers it
// (it seems react does not handle sparse arrays very well for equality checks)
@@ -174,27 +174,27 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
refetch: refetchLots
} = useMappedAsteroidLots(asteroidId);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
dispatchSearchResults({ total: resultTally, isLoading });
}, [resultTally, isLoading])
- const lotTally = useMemo(() => Asteroid.getSurfaceArea(asteroidId), [asteroidId]);
- const regionTally = useMemo(() => lotTally <= MAX_LOTS_RENDERED ? 1 : Asteroid.getLotRegionTally(lotTally), [lotTally]);
- const visibleLotTally = useMemo(() => Math.min(MAX_MESH_INSTANCES, lotTally), [lotTally]);
- const visibleLeasedTally = useMemo(() => Math.min(MAX_LEASE_INSTANCES, leasedTally), [leasedTally]);
- const visibleResultTally = useMemo(() => Math.min(MAX_MESH_INSTANCES, resultTally), [resultTally]);
+ const lotTally = useMemo(import.meta.url, () => Asteroid.getSurfaceArea(asteroidId), [asteroidId]);
+ const regionTally = useMemo(import.meta.url, () => lotTally <= MAX_LOTS_RENDERED ? 1 : Asteroid.getLotRegionTally(lotTally), [lotTally]);
+ const visibleLotTally = useMemo(import.meta.url, () => Math.min(MAX_MESH_INSTANCES, lotTally), [lotTally]);
+ const visibleLeasedTally = useMemo(import.meta.url, () => Math.min(MAX_LEASE_INSTANCES, leasedTally), [leasedTally]);
+ const visibleResultTally = useMemo(import.meta.url, () => Math.min(MAX_MESH_INSTANCES, resultTally), [resultTally]);
// if just navigated to asteroid and lots already loaded, refetch
// (b/c might have missed ws updates while on a different asteroid)
// TODO: probably technically need to capture allLotsReloading alongside lastLotUpdate in dependency arrays
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (Object.values(lotResultMap).length > 0) refetchLots();
}, []);
// position lots and bucket into regions (as needed)
// BATCHED region bucketing is really only helpful for largest couple asteroids
// NOTE: this just runs once when lots is initial populated
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const {
ringsMinMax, ringsPresent, ringsVariation, rotationSpeed,
...prunedConfig
@@ -274,7 +274,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
// before declaring the lots "loaded" initially
// run this when lots changes (after its initial run through the effect that follows this one)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (lotResultMap && lotsByRegion.current?.length && positionsReady) {
const results = [];
Object.keys(lotsByRegion.current).forEach((region) => {
@@ -285,7 +285,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}
}, [lotResultMap, lastLotUpdate, positionsReady]);
- const handleWSMessage = useCallback((message) => {
+ const handleWSMessage = useCallback(import.meta.url, (message) => {
if (process.env.NODE_ENV !== 'production') console.log('onWSMessage (lots)', message);
const { type: eventType, body } = message;
@@ -337,7 +337,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [processEvent]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (token && wsReady) {
const regId = registerMessageHandler(handleWSMessage, `Asteroid::${asteroidId}`);
return () => {
@@ -360,7 +360,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
// listen for click events
// NOTE: if just use onclick, then fires on drag events too :(
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const onMouseEvent = function (e) {
if (e.type === 'pointerdown') {
clickStatus.current = new Vector2(e.clientX, e.clientY);
@@ -389,7 +389,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, []);
// Instantiate (invisible) mouseable mesh (behind all pips)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!visibleLotTally) return;
const mouseableGeometry = new CircleGeometry(MOUSEABLE_WIDTH, 6);
@@ -413,7 +413,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo, visibleLotTally]); // eslint-disable-line react-hooks/exhaustive-deps
// Lot meshes
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!visibleResultTally && texturesLoaded) return;
const materialOpts = {
@@ -454,7 +454,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo, visibleResultTally, texturesLoaded, lotUseTallies]); // eslint-disable-line react-hooks/exhaustive-deps
// Create mesh for my leases
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!visibleLeasedTally) return;
const leasedLotGeometry = new CircleGeometry(PLOT_WIDTH * 2.6, 32);
@@ -480,7 +480,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo, visibleLeasedTally, PLOT_WIDTH]);
// instantiate mouse mesh
- useEffect(() => {
+ useEffect(import.meta.url, () => {
mouseHoverMesh.current = new Mesh(
new PlaneGeometry(RETICULE_WIDTH, RETICULE_WIDTH),
new MeshBasicMaterial({
@@ -503,7 +503,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo]); // eslint-disable-line react-hooks/exhaustive-deps
// Instantiate selection mesh
- useEffect(() => {
+ useEffect(import.meta.url, () => {
selectionMesh.current = new Mesh(
new PlaneGeometry(RETICULE_WIDTH, RETICULE_WIDTH),
new MeshBasicMaterial({
@@ -524,8 +524,8 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
};
}, [attachTo]); // eslint-disable-line react-hooks/exhaustive-deps
- const lotScale = useMemo(() => Math.max(1, Math.sqrt(cameraAltitude / 10000)), [cameraAltitude]);
- const lotsReady = useMemo(() => {
+ const lotScale = useMemo(import.meta.url, () => Math.max(1, Math.sqrt(cameraAltitude / 10000)), [cameraAltitude]);
+ const lotsReady = useMemo(import.meta.url, () => {
return !isLoading &&
!!lotResultMap &&
meshesInitialized &&
@@ -541,7 +541,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
resultsByRegion
]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!lotsReady) return;
try {
@@ -694,7 +694,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
resultsByRegion
]);
- const highlightLot = useCallback((lotIndex) => {
+ const highlightLot = useCallback(import.meta.url, (lotIndex) => {
if (!attachTo) return;
highlighted.current = null;
@@ -725,13 +725,13 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo?.quaternion, selectedLotIndex]);
// Calculates the control point for the delivery bezier curve
- const calculateControlPoint = useCallback((origin, dest, distance, frac = 0.5) => {
+ const calculateControlPoint = useCallback(import.meta.url, (origin, dest, distance, frac = 0.5) => {
const ratio = 1 + Math.pow(distance / config.radius, 2);
return origin.clone().lerp(dest, frac).multiplyScalar(Math.min(ratio, 3.5));
}, [config]);
// Handle turning on and off delivery arcs when a lot is selected
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const newDeliveries = [];
const material = new ShaderMaterial({
uniforms: deliveryUniforms.current,
@@ -808,7 +808,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
}, [attachTo, selectedLotIndex, deliveryEndpoint, inboundDeliveries, outboundDeliveries]);
const selectionAnimationTime = useRef(0);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!attachTo) return;
if (selectionMesh.current && positions.current && positionsReady && selectedLotIndex) {
@@ -839,7 +839,7 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
// when camera angle changes, sort all regions by closest, then display
// up to max lots (ordered by region proximity)
// NOTE: attempted to throttle this and wasn't catching any calculations even on huge, so pulled it out
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (cameraNormalized?.string && regionTally > 1) {
processInBackground(
{
@@ -859,12 +859,12 @@ const Lots = ({ attachTo: overrideAttachTo, asteroidId, axis, cameraAltitude, ca
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [cameraNormalized?.string, regionsByDistance?.length, regionTally]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!lastClick) return;
dispatchLotSelected(Lot.toId(asteroidId, highlighted.current));
}, [lastClick]);
- const mouseThrottleTime = useMemo(() => MOUSE_THROTTLE_TIME / (TIME_ACCELERATION / 24), [TIME_ACCELERATION]);
+ const mouseThrottleTime = useMemo(import.meta.url, () => MOUSE_THROTTLE_TIME / (TIME_ACCELERATION / 24), [TIME_ACCELERATION]);
useFrame((state, delta) => {
selectionAnimationTime.current = (selectionAnimationTime.current || 0) + delta;
diff --git a/src/game/scene/asteroid/Rings.js b/src/game/scene/asteroid/Rings.js
index 9ac5bdfd3..81e377451 100644
--- a/src/game/scene/asteroid/Rings.js
+++ b/src/game/scene/asteroid/Rings.js
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState } from '~/lib/react-debug';
import {
Color,
Vector3,
@@ -15,7 +15,7 @@ const Rings = (props) => {
const [ geometry, setGeometry ] = useState();
const [ texture, setTexture ] = useState();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const size = 512;
const data = new Uint8Array(size * size * 4); // 1 by 256 pixels
const variation = config.ringsVariation;
diff --git a/src/game/scene/asteroid/Telemetry.js b/src/game/scene/asteroid/Telemetry.js
index 1786bff6d..5ef2a43f6 100644
--- a/src/game/scene/asteroid/Telemetry.js
+++ b/src/game/scene/asteroid/Telemetry.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from '~/lib/react-debug';
import {
// AxesHelper,
// BoxHelper,
@@ -208,16 +208,16 @@ const Telemetry = ({
const helper = useRef();
const shipTime = useRef();
- const circleRadius = useMemo(() => TELEMETRY_SCALE * radius, [radius]);
- const circleAttenuation = useMemo(() => Math.max(1.4, 0.75 * scaleHelper) * radius, [radius]);
- const trajectoryAttenuation = useMemo(() => Math.max(10, 2 * scaleHelper) * radius, [radius]);
- const shipAngularVelocity = useMemo(() => {
+ const circleRadius = useMemo(import.meta.url, () => TELEMETRY_SCALE * radius, [radius]);
+ const circleAttenuation = useMemo(import.meta.url, () => Math.max(1.4, 0.75 * scaleHelper) * radius, [radius]);
+ const trajectoryAttenuation = useMemo(import.meta.url, () => Math.max(10, 2 * scaleHelper) * radius, [radius]);
+ const shipAngularVelocity = useMemo(import.meta.url, () => {
const shipHeight = TELEMETRY_SCALE * config.shipCircle.scale;
const period = Math.sqrt(3 * Math.PI * shipHeight ** 3 / (densityByType[spectralType] * GRAV));
return 2 * Math.PI / period;
}, [spectralType]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const circleSegments = 360;
const material = getLineMaterial(BLUE_GLSL, circleAttenuation, 0.7);
@@ -524,7 +524,7 @@ const Telemetry = ({
if (trajectory.current) group.current.add(trajectory.current);
}, [radius]); // eslint-disable-line react-hooks/exhaustive-deps
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// TODO: update the number of ships on the ship circle (or dash if empty)
}, [shipTally]);
diff --git a/src/game/scene/asteroids/Marker.js b/src/game/scene/asteroids/Marker.js
index 407672834..7153f44da 100644
--- a/src/game/scene/asteroids/Marker.js
+++ b/src/game/scene/asteroids/Marker.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useRef, useState } from 'react';
+import { useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { useTexture } from '@react-three/drei';
import { AdditiveBlending, Color, DoubleSide, Vector2 } from 'three';
import { useFrame } from '@react-three/fiber';
@@ -39,11 +39,11 @@ const Marker = (props) => {
`${process.env.PUBLIC_URL}/textures/marker.png`
]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
reticuleTexture.center = new Vector2(0.5, 0.5);
}, [reticuleTexture]);
- const { outerProps, innerProps, showInner, showReticule } = useMemo(() => {
+ const { outerProps, innerProps, showInner, showReticule } = useMemo(import.meta.url, () => {
const x = {
outerProps: { size: 35 },
innerProps: { color: orbitColors.white, size: 10 },
@@ -114,7 +114,7 @@ const Marker = (props) => {
return x;
}, [travelSolution]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (asteroidPos && asteroidPos.length > 0) {
const newPoints = new Float32Array(2 * 3);
newPoints.set(asteroidPos);
diff --git a/src/game/scene/asteroids/Orbit.js b/src/game/scene/asteroids/Orbit.js
index 653e0ed11..f49d7f41d 100644
--- a/src/game/scene/asteroids/Orbit.js
+++ b/src/game/scene/asteroids/Orbit.js
@@ -1,4 +1,4 @@
-import { useRef, useEffect, useState } from 'react';
+import { useRef, useEffect, useState } from '~/lib/react-debug';
import { useFrame } from '@react-three/fiber';
import { AdalianOrbit } from '@influenceth/sdk';
import { cloneDeep } from 'lodash';
@@ -24,7 +24,7 @@ const Orbit = ({ asteroid, color, opacityMult = 1, staticOpacity }) => {
uCol: { type: 'c', value: orbitColors.main },
});
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const orbit = new AdalianOrbit(asteroid.Orbit, { units: 'km' });
let newPositions = [];
orbit.getSmoothOrbit(360).forEach(p => {
@@ -34,11 +34,11 @@ const Orbit = ({ asteroid, color, opacityMult = 1, staticOpacity }) => {
setPositions(new Float32Array(newPositions));
}, [ asteroid ]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
uniforms.current.uCol.value = (color && orbitColors[color]) || orbitColors.main;
}, [color]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
uniforms.current.uAlpha.value = Math.min(1, initialUniforms.uAlpha.value * opacityMult);
uniforms.current.uAlphaMin.value = Math.min(1, initialUniforms.uAlphaMin.value * opacityMult);
}, [opacityMult]);
diff --git a/src/game/scene/asteroids/TravelSolution.js b/src/game/scene/asteroids/TravelSolution.js
index b370a6027..7533d9b53 100644
--- a/src/game/scene/asteroids/TravelSolution.js
+++ b/src/game/scene/asteroids/TravelSolution.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useRef, useState } from 'react';
+import { useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import styled from 'styled-components';
import { useFrame } from '@react-three/fiber';
import { Html } from '@react-three/drei';
@@ -79,13 +79,13 @@ const TravelSolution = ({}) => {
const travelSolution = useStore(s => s.asteroids.travelSolution);
const dispatchTravelSolution = useStore(s => s.dispatchTravelSolution);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!baseTime || !timeOverride?.speed || Math.abs(timeOverride.speed) <= 1) {
setBaseTime(coarseTime);
}
}, [coarseTime, timeOverride?.speed]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!travelSolution) return;
const exhaustBonus = getCrewAbilityBonuses(Crewmate.ABILITY_IDS.PROPELLANT_EXHAUST_VELOCITY, crew);
@@ -113,7 +113,7 @@ const TravelSolution = ({}) => {
}
}, [baseTime, crew, destinationId, originId, timeOverride, travelSolution]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!travelSolution || !destination || !origin) {
setPrearrival();
setPredeparture();
@@ -202,7 +202,7 @@ const TravelSolution = ({}) => {
uniforms.current.uDash.value = true;
}, [baseTime, travelSolution]);
- const formattedTrajectoryLength = useMemo(() => {
+ const formattedTrajectoryLength = useMemo(import.meta.url, () => {
if (!trajectoryLength) return '';
return formatBeltDistance(trajectoryLength);
}, [trajectoryLength]);
diff --git a/src/game/scene/planets/Orbit.js b/src/game/scene/planets/Orbit.js
index f9d61d660..e21d8687a 100644
--- a/src/game/scene/planets/Orbit.js
+++ b/src/game/scene/planets/Orbit.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useRef } from 'react';
+import { useEffect, useMemo, useRef } from '~/lib/react-debug';
import { AdalianOrbit } from '@influenceth/sdk';
import theme from '~/theme';
@@ -8,7 +8,7 @@ const Orbit = (props) => {
const zoomStatus = useStore(s => s.asteroids.zoomStatus);
const geometry = useRef();
- const positions = useMemo(() => {
+ const positions = useMemo(import.meta.url, () => {
const vertices = [];
const orbit = new AdalianOrbit(props.planet, { units: 'km' });
orbit.getSmoothOrbit(360).forEach(p => {
@@ -19,7 +19,7 @@ const Orbit = (props) => {
}, [props.planet]);
// re-computeBoundingSphere on geometry change
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (geometry.current) {
geometry.current.computeBoundingSphere();
}
diff --git a/src/hooks/actionManagers/useAgreementManager.js b/src/hooks/actionManagers/useAgreementManager.js
index 47c99b437..f8914baa1 100644
--- a/src/hooks/actionManagers/useAgreementManager.js
+++ b/src/hooks/actionManagers/useAgreementManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity, Permission } from '@influenceth/sdk';
import { cloneDeep } from 'lodash';
@@ -13,7 +13,7 @@ const useAgreementManager = (target, permission, agreementPath) => {
const { execute, getPendingTx } = useContext(ChainTransactionContext);
const { currentPolicy } = usePolicyManager(target, permission);
- const currentAgreement = useMemo(() => {
+ const currentAgreement = useMemo(import.meta.url, () => {
const agreement = (currentPolicy?.agreements || []).find((a) => {
if (agreementPath) return getAgreementPath(target, permission, a.permitted) === agreementPath;
return (
@@ -36,7 +36,7 @@ const useAgreementManager = (target, permission, agreementPath) => {
return null;
}, [agreementPath, crew?.id, currentPolicy, target, permission]);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
target: { id: target?.id, label: target?.label },
permission,
// NOTE: this does not currently support account-level `permitted` values because that is
@@ -45,12 +45,12 @@ const useAgreementManager = (target, permission, agreementPath) => {
caller_crew: { id: crew?.id, label: Entity.IDS.CREW },
}), [crew?.id, currentAgreement, target, permission]);
- const meta = useMemo(() => ({
+ const meta = useMemo(import.meta.url, () => ({
lotId: target?.Location?.locations?.find((l) => l.label === Entity.IDS.LOT)?.id,
shipId: target?.label === Entity.IDS.SHIP ? target?.id : undefined,
}), [target]);
- const enterAgreement = useCallback((details = {}) => {
+ const enterAgreement = useCallback(import.meta.url, (details = {}) => {
const agreementSystem = currentPolicy.policyType === Permission.POLICY_IDS.PREPAID
? 'AcceptPrepaidAgreement'
: 'AcceptContractAgreement';
@@ -62,7 +62,7 @@ const useAgreementManager = (target, permission, agreementPath) => {
);
}, [currentPolicy, meta, payload]);
- const extendAgreement = useCallback((details = {}) => {
+ const extendAgreement = useCallback(import.meta.url, (details = {}) => {
const { term, ...params } = details;
execute(
'ExtendPrepaidAgreement',
@@ -71,7 +71,7 @@ const useAgreementManager = (target, permission, agreementPath) => {
);
}, [meta, payload]);
- const cancelAgreement = useCallback((params = {}) => {
+ const cancelAgreement = useCallback(import.meta.url, (params = {}) => {
execute(
'CancelPrepaidAgreement',
{ agreementPath, ...params, ...payload },
@@ -79,7 +79,7 @@ const useAgreementManager = (target, permission, agreementPath) => {
);
}, [agreementPath]);
- const pendingChange = useMemo(
+ const pendingChange = useMemo(import.meta.url,
() => {
if (getPendingTx) {
return getPendingTx('AcceptPrepaidAgreement', { ...payload })
diff --git a/src/hooks/actionManagers/useAnnotationManager.js b/src/hooks/actionManagers/useAnnotationManager.js
index fc14e82b3..a1b909c94 100644
--- a/src/hooks/actionManagers/useAnnotationManager.js
+++ b/src/hooks/actionManagers/useAnnotationManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo, useState } from 'react';
+import { useCallback, useContext, useMemo, useState } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -20,13 +20,13 @@ const useAnnotationManager = (activity, metaEntity) => {
const [saving, setSaving] = useState();
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
transaction_hash: activity?.event?.transactionHash,
log_index: activity?.event?.logIndex,
caller_crew: { id: crewId, label: Entity.IDS.CREW }
}), [activity]);
- const saveAnnotation = useCallback(
+ const saveAnnotation = useCallback(import.meta.url,
async (content) => {
setSaving(true);
@@ -50,7 +50,7 @@ const useAnnotationManager = (activity, metaEntity) => {
[execute, metaEntity, payload]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus('AnnotateEvent', { ...payload }),
[getStatus, payload]
);
diff --git a/src/hooks/actionManagers/useBuyAsteroid.js b/src/hooks/actionManagers/useBuyAsteroid.js
index 1166a4512..0d40d5b6d 100644
--- a/src/hooks/actionManagers/useBuyAsteroid.js
+++ b/src/hooks/actionManagers/useBuyAsteroid.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -17,7 +17,7 @@ const useBuyAsteroid = (id) => {
const system = asteroid?.AsteroidProof?.used ? 'PurchaseAsteroid' : 'InitializeAndPurchaseAsteroid';
- const buyAsteroid = useCallback(() => {
+ const buyAsteroid = useCallback(import.meta.url, () => {
// caller_crew is optional here b/c may not exist yet
return execute(
system,
@@ -28,7 +28,7 @@ const useBuyAsteroid = (id) => {
);
}, [execute, system, asteroid, crew]);
- const checkForLimit = useCallback(async () => {
+ const checkForLimit = useCallback(import.meta.url, async () => {
const saleData = (await api.getAsteroidSale()) || {}; // jit check
const currentPeriod = Math.floor(blockTime / 1000 / 1000000);
const volume = Number(saleData.volume) || 0;
@@ -61,7 +61,7 @@ const useBuyAsteroid = (id) => {
return false;
}, []);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus(system, { asteroid }),
[getStatus, system, asteroid]
);
diff --git a/src/hooks/actionManagers/useChangeName.js b/src/hooks/actionManagers/useChangeName.js
index 1871ce67e..19ef9baf9 100644
--- a/src/hooks/actionManagers/useChangeName.js
+++ b/src/hooks/actionManagers/useChangeName.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -8,14 +8,14 @@ const useChangeName = (entity) => {
const { crew } = useCrewContext();
const { execute, getStatus } = useContext(ChainTransactionContext);
- const caller_crew = useMemo(() => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
+ const caller_crew = useMemo(import.meta.url, () => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
- const changeName = useCallback(
+ const changeName = useCallback(import.meta.url,
(name) => execute('ChangeName', { entity, name, caller_crew }),
[execute, entity, caller_crew]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus('ChangeName', { entity }),
[getStatus, entity]
);
diff --git a/src/hooks/actionManagers/useConstructionManager.js b/src/hooks/actionManagers/useConstructionManager.js
index 058695824..ea2ff28a7 100644
--- a/src/hooks/actionManagers/useConstructionManager.js
+++ b/src/hooks/actionManagers/useConstructionManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Asteroid, Building, Entity, Lot } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -16,16 +16,16 @@ const useConstructionManager = (lotId) => {
const { crew } = useCrewContext();
const { data: lot } = useLot(lotId);
- const asteroidId = useMemo(() => Lot.toPosition(lotId)?.asteroidId, [lotId]);
+ const asteroidId = useMemo(import.meta.url, () => Lot.toPosition(lotId)?.asteroidId, [lotId]);
const { data: asteroid } = useAsteroid(asteroidId);
const buildingId = lot?.building?.id;
- const planPayload = useMemo(() => ({
+ const planPayload = useMemo(import.meta.url, () => ({
lot: { id: lotId, label: Entity.IDS.LOT },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [lotId, crew?.id]);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
building: { id: buildingId, label: Entity.IDS.BUILDING },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [buildingId, crew?.id]);
@@ -33,7 +33,7 @@ const useConstructionManager = (lotId) => {
// UNBUILDABLE (before asteroid is scanned)
// READY_TO_PLAN > PLANNING > PLANNED > UNDER_CONSTRUCTION > READY_TO_FINISH > FINISHING > OPERATIONAL
// < CANCELING < < DECONSTRUCTING <
- const [currentConstructionAction, constructionStatus, isAtRisk, stageByActivity] = useMemo(() => {
+ const [currentConstructionAction, constructionStatus, isAtRisk, stageByActivity] = useMemo(import.meta.url, () => {
let current = {
_cachedData: null,
_isAccessible: true,
@@ -141,9 +141,9 @@ const useConstructionManager = (lotId) => {
];
}, [actionItems, asteroid, readyItems, getPendingTx, getStatus, payload, planPayload, lot?.building]);
- const txMeta = useMemo(() => ({ asteroidId, lotId }), [asteroidId, lotId]);
+ const txMeta = useMemo(import.meta.url, () => ({ asteroidId, lotId }), [asteroidId, lotId]);
- const planConstruction = useCallback((buildingType) => {
+ const planConstruction = useCallback(import.meta.url, (buildingType) => {
execute(
'ConstructionPlan',
{
@@ -153,7 +153,7 @@ const useConstructionManager = (lotId) => {
)
}, [planPayload]);
- const unplanConstruction = useCallback(() => {
+ const unplanConstruction = useCallback(import.meta.url, () => {
execute(
'ConstructionAbandon',
payload,
@@ -161,15 +161,15 @@ const useConstructionManager = (lotId) => {
)
}, [payload]);
- const startConstruction = useCallback(() => {
+ const startConstruction = useCallback(import.meta.url, () => {
execute('ConstructionStart', payload, txMeta)
}, [payload]);
- const finishConstruction = useCallback(() => {
+ const finishConstruction = useCallback(import.meta.url, () => {
execute('ConstructionFinish', payload, txMeta)
}, [payload]);
- const deconstruct = useCallback(() => {
+ const deconstruct = useCallback(import.meta.url, () => {
execute(
'ConstructionDeconstruct',
payload,
diff --git a/src/hooks/actionManagers/useControlAsteroid.js b/src/hooks/actionManagers/useControlAsteroid.js
index ef4b880bc..0830540ba 100644
--- a/src/hooks/actionManagers/useControlAsteroid.js
+++ b/src/hooks/actionManagers/useControlAsteroid.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
import useAsteroid from '~/hooks/useAsteroid';
@@ -11,12 +11,12 @@ const useControlAsteroid = (id) => {
const system = asteroid?.AsteroidProof?.used ? 'ManageAsteroid' : 'InitializeAndManageAsteroid';
- const controlAsteroid = useCallback(
+ const controlAsteroid = useCallback(import.meta.url,
() => execute(system, { asteroid, caller_crew }),
[execute, asteroid, caller_crew, system]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus(system, { asteroid, caller_crew }),
[getStatus, asteroid, caller_crew, system]
);
diff --git a/src/hooks/actionManagers/useControlShip.js b/src/hooks/actionManagers/useControlShip.js
index daef2c828..d5a56609d 100644
--- a/src/hooks/actionManagers/useControlShip.js
+++ b/src/hooks/actionManagers/useControlShip.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
import useShip from '~/hooks/useShip';
@@ -10,12 +10,12 @@ const useControlShip = (id) => {
const { data: ship } = useShip(id);
const { crew: caller_crew } = useCrewContext();
- const controlShip = useCallback(
+ const controlShip = useCallback(import.meta.url,
() => execute('CommandeerShip', { ship, caller_crew }),
[execute, ship, caller_crew]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus('CommandeerShip', { ship, caller_crew }),
[getStatus, ship, caller_crew]
);
diff --git a/src/hooks/actionManagers/useCoreSampleManager.js b/src/hooks/actionManagers/useCoreSampleManager.js
index 5fdce8f2a..df9dcf97c 100644
--- a/src/hooks/actionManagers/useCoreSampleManager.js
+++ b/src/hooks/actionManagers/useCoreSampleManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import { Deposit, Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -16,14 +16,14 @@ const useCoreSampleManager = (lotId) => {
const { data: lot } = useLot(lotId);
// * only used by SampleDepositStart contract, but used for equality check on others
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
lot: { id: lotId, label: Entity.IDS.LOT },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [lotId]);
const [completingSamples, setCompletingSamples] = useState([]);
- const [currentSamplings, completedSamplings, currentSamplingsVersion] = useMemo(() => {
+ const [currentSamplings, completedSamplings, currentSamplingsVersion] = useMemo(import.meta.url, () => {
const template = {
_cachedData: null,
finishTime: null,
@@ -157,7 +157,7 @@ const useCoreSampleManager = (lotId) => {
];
}, [actionItems, blockTime, completingSamples, pendingTransactions, readyItems, getPendingTx, getStatus, payload, lot?.deposits]);
- const startSampling = useCallback((resourceId, coreDrillSource) => {
+ const startSampling = useCallback(import.meta.url, (resourceId, coreDrillSource) => {
// console.log('coreDrillSource', coreDrillSource); return;
execute('SampleDepositStart', {
resource: resourceId,
@@ -167,7 +167,7 @@ const useCoreSampleManager = (lotId) => {
})
}, [payload]);
- const startImproving = useCallback((depositId, coreDrillSource, depositOwnerCrew) => {
+ const startImproving = useCallback(import.meta.url, (depositId, coreDrillSource, depositOwnerCrew) => {
const sample = (lot?.deposits || []).find((c) => c.id === depositId);
execute(
depositOwnerCrew ? 'PurchaseDepositAndImprove' : 'SampleDepositImprove',
@@ -186,7 +186,7 @@ const useCoreSampleManager = (lotId) => {
)
}, [lotId, payload]);
- const finishSampling = useCallback((sampleId) => {
+ const finishSampling = useCallback(import.meta.url, (sampleId) => {
const selectedAction = currentSamplings.find((c) => c.action?.sampleId === sampleId);
if (!selectedAction) return;
execute(
diff --git a/src/hooks/actionManagers/useCrewManager.js b/src/hooks/actionManagers/useCrewManager.js
index a774eaa1b..edc953c37 100644
--- a/src/hooks/actionManagers/useCrewManager.js
+++ b/src/hooks/actionManagers/useCrewManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext } from 'react';
+import { useCallback, useContext } from '~/lib/react-debug';
import { Crewmate, Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -9,16 +9,16 @@ const useCrewManager = () => {
const { accountAddress } = useSession();
const { execute, getPendingTx } = useContext(ChainTransactionContext);
- const changeActiveCrew = useCallback(
+ const changeActiveCrew = useCallback(import.meta.url,
(params) => execute('SET_ACTIVE_CREW', params),
[execute]
);
- const getPendingActiveCrewChange = useCallback(
+ const getPendingActiveCrewChange = useCallback(import.meta.url,
(params) => getPendingTx('SET_ACTIVE_CREW', params),
[getPendingTx]
);
- const purchaseCredits = useCallback((tally) => {
+ const purchaseCredits = useCallback(import.meta.url, (tally) => {
for (let i = 0; i < tally; i++) fireTrackingEvent('purchase', {
category: 'purchase',
currency: 'USD',
@@ -32,11 +32,11 @@ const useCrewManager = () => {
execute('BulkPurchaseAdalians', { collection: Crewmate.COLLECTION_IDS.ADALIAN, tally });
}, [accountAddress, execute]);
- const getPendingCreditPurchase = useCallback(() => {
+ const getPendingCreditPurchase = useCallback(import.meta.url, () => {
return getPendingTx('BulkPurchaseAdalians', {});
}, [getPendingTx]);
- const purchaseAndOrInitializeCrewmate = useCallback(
+ const purchaseAndOrInitializeCrewmate = useCallback(import.meta.url,
({ crewmate }) => {
if (crewmate.Crewmate.coll !== Crewmate.COLLECTION_IDS.ADALIAN) {
execute('InitializeArvadian', {
@@ -80,7 +80,7 @@ const useCrewManager = () => {
[accountAddress, execute]
);
- const getPendingCrewmate = useCallback(
+ const getPendingCrewmate = useCallback(import.meta.url,
() => getPendingTx('InitializeArvadian', {}) || getPendingTx('RecruitAdalian', {}),
[getPendingTx]
);
diff --git a/src/hooks/actionManagers/useCrewSwapManager.js b/src/hooks/actionManagers/useCrewSwapManager.js
index 655865e3e..3d89f7a14 100644
--- a/src/hooks/actionManagers/useCrewSwapManager.js
+++ b/src/hooks/actionManagers/useCrewSwapManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -9,14 +9,14 @@ const useCrewSwapManager = (props) => {
const { crew } = useCrewContext();
const { execute, getPendingTx } = useContext(ChainTransactionContext);
- const reorderRoster = useCallback(({ crewId, newRoster }) => {
+ const reorderRoster = useCallback(import.meta.url, ({ crewId, newRoster }) => {
execute('ArrangeCrew', {
composition: newRoster,
caller_crew: { id: crewId, label: Entity.IDS.CREW },
})
}, []);
- const swapCrewmates = useCallback(({ crewId1, newRoster1, crewId2, newRoster2 }) => {
+ const swapCrewmates = useCallback(import.meta.url, ({ crewId1, newRoster1, crewId2, newRoster2 }) => {
execute('ExchangeCrew', {
crew1: { id: crewId1, label: Entity.IDS.CREW },
comp1: newRoster1,
@@ -25,7 +25,7 @@ const useCrewSwapManager = (props) => {
})
}, []);
- const getPendingChange = useCallback(
+ const getPendingChange = useCallback(import.meta.url,
() => {
return getPendingTx('ArrangeCrew', { caller_crew: { id: crew?.id, label: Entity.IDS.CREW } })
|| getPendingTx('ExchangeCrew', {});
@@ -33,7 +33,7 @@ const useCrewSwapManager = (props) => {
[crew?.id, getPendingTx]
);
- const actionStage = useMemo(() => {
+ const actionStage = useMemo(import.meta.url, () => {
return getPendingChange() ? actionStages.COMPLETING : actionStages.NOT_STARTED
}, [getPendingChange]);
diff --git a/src/hooks/actionManagers/useDeliveryManager.js b/src/hooks/actionManagers/useDeliveryManager.js
index b61f38602..d08c0b089 100644
--- a/src/hooks/actionManagers/useDeliveryManager.js
+++ b/src/hooks/actionManagers/useDeliveryManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Delivery, Entity, Permission } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -34,7 +34,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
const { data: destActionItems } = useUnresolvedActivities(destination || deliveryById?.Delivery?.destination);
const { data: origActionItems } = useUnresolvedActivities(origin || deliveryById?.Delivery?.origin);
- const actionItems = useMemo(() => {
+ const actionItems = useMemo(import.meta.url, () => {
const deliveryIds = [];
return [
...(destActionItems || []),
@@ -49,7 +49,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
}, [])
}, [destActionItems, origActionItems]);
- const [deliveries, isLoading] = useMemo(() => {
+ const [deliveries, isLoading] = useMemo(import.meta.url, () => {
if (deliveryId) {
return [
deliveryIsLoading
@@ -64,11 +64,11 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
];
}, [deliveryId, deliveryById, deliveryIsLoading, deliveriesByLoc, deliveriesIsLoading]);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [crew?.id]);
- const pendingDeliveries = useMemo(() => {
+ const pendingDeliveries = useMemo(import.meta.url, () => {
return pendingTransactions.filter(({ key, vars, ...pendingProps }) => (txHash && txHash === pendingProps.txHash) || (
(key === 'SendDelivery' || key === 'PackageDelivery')
&& (
@@ -80,7 +80,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
));
}, [destination, destinationSlot, origin, originSlot, pendingTransactions, txHash]);
- const [currentDeliveries, currentDeliveriesVersion] = useMemo(() => {
+ const [currentDeliveries, currentDeliveriesVersion] = useMemo(import.meta.url, () => {
const active = [...(deliveries || [])];
// TODO: filter by crew
// TODO: filter by incomplete
@@ -202,7 +202,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
return [allDeliveries, Date.now()];
}, [actionItems, blockTime, crew?.id, crewCan, deliveries, pendingDeliveries, getStatus, payload]);
- const acceptDelivery = useCallback((selectedDeliveryId, meta) => {
+ const acceptDelivery = useCallback(import.meta.url, (selectedDeliveryId, meta) => {
const delivery = currentDeliveries.find((d) => d.action.deliveryId === (selectedDeliveryId || deliveryId));
if (!delivery?.action) return;
execute(
@@ -217,7 +217,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
);
}, [currentDeliveries, payload]);
- const cancelDelivery = useCallback((selectedDeliveryId, meta) => {
+ const cancelDelivery = useCallback(import.meta.url, (selectedDeliveryId, meta) => {
execute(
'CancelDelivery',
{
@@ -228,7 +228,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
);
}, [payload]);
- const packageDelivery = useCallback(({ origin, originSlot, destination, destinationSlot, contents, price }, meta) => {
+ const packageDelivery = useCallback(import.meta.url, ({ origin, originSlot, destination, destinationSlot, contents, price }, meta) => {
execute(
'PackageDelivery',
{
@@ -244,7 +244,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
);
}, [payload]);
- const startDelivery = useCallback(({ origin, originSlot, destination, destinationSlot, contents }, meta) => {
+ const startDelivery = useCallback(import.meta.url, ({ origin, originSlot, destination, destinationSlot, contents }, meta) => {
execute(
'SendDelivery',
{
@@ -259,7 +259,7 @@ const useDeliveryManager = ({ destination, destinationSlot, origin, originSlot,
);
}, [payload]);
- const finishDelivery = useCallback((selectedDeliveryId, meta) => {
+ const finishDelivery = useCallback(import.meta.url, (selectedDeliveryId, meta) => {
execute(
'ReceiveDelivery',
{
diff --git a/src/hooks/actionManagers/useDepositSaleManager.js b/src/hooks/actionManagers/useDepositSaleManager.js
index be0c1a091..0c70a6983 100644
--- a/src/hooks/actionManagers/useDepositSaleManager.js
+++ b/src/hooks/actionManagers/useDepositSaleManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
import useCrewContext from '~/hooks/useCrewContext';
@@ -7,16 +7,16 @@ const useDepositSaleManager = (deposit) => {
const { crew } = useCrewContext();
const { execute, getStatus } = useContext(ChainTransactionContext);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
deposit: { id: deposit?.id, label: deposit?.label },
caller_crew: { id: crew?.id, label: crew?.label },
}), [crew, deposit]);
- const meta = useMemo(() => ({
+ const meta = useMemo(import.meta.url, () => ({
deposit
}), [deposit]);
- const purchaseListing = useCallback(() => {
+ const purchaseListing = useCallback(import.meta.url, () => {
execute(
'PurchaseDeposit',
payload,
@@ -24,7 +24,7 @@ const useDepositSaleManager = (deposit) => {
)
}, [execute, meta, payload]);
- const updateListing = useCallback(
+ const updateListing = useCallback(import.meta.url,
(price) => {
if (price > 0) {
execute(
@@ -43,8 +43,8 @@ const useDepositSaleManager = (deposit) => {
[execute, meta, payload]
);
- const isPendingPurchase = useMemo(() => getStatus('PurchaseDeposit', payload) === 'pending', [getStatus, payload]);
- const isPendingUpdate = useMemo(() => (
+ const isPendingPurchase = useMemo(import.meta.url, () => getStatus('PurchaseDeposit', payload) === 'pending', [getStatus, payload]);
+ const isPendingUpdate = useMemo(import.meta.url, () => (
getStatus('ListDepositForSale', payload) === 'pending'
|| getStatus('UnlistDepositForSale', payload) === 'pending'
), [getStatus, payload]);
diff --git a/src/hooks/actionManagers/useDryDockManager.js b/src/hooks/actionManagers/useDryDockManager.js
index c3aebf456..6bc1a5f3b 100644
--- a/src/hooks/actionManagers/useDryDockManager.js
+++ b/src/hooks/actionManagers/useDryDockManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { DryDock, Entity, Permission } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -15,17 +15,17 @@ const useDryDockManager = (lotId, slot = 1) => {
const { data: lot } = useLot(lotId);
const { data: actionItems } = useUnresolvedActivities(lot?.building);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
dry_dock: { id: lot?.building?.id, label: Entity.IDS.BUILDING },
dry_dock_slot: slot,
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [lot?.building, crew?.id, slot]);
- const slotDryDock = useMemo(() => lot?.building?.DryDocks?.find((e) => e.slot === slot), [lot?.building, slot]);
+ const slotDryDock = useMemo(import.meta.url, () => lot?.building?.DryDocks?.find((e) => e.slot === slot), [lot?.building, slot]);
// status flow
// READY > ASSEMBLING > READY_TO_FINISH > FINISHING
- const [currentAssembly, assemblyStatus, actionStage] = useMemo(() => {
+ const [currentAssembly, assemblyStatus, actionStage] = useMemo(import.meta.url, () => {
let current = {
_cachedData: null,
_isAccessible: false,
@@ -87,7 +87,7 @@ const useDryDockManager = (lotId, slot = 1) => {
];
}, [actionItems, blockTime, getPendingTx, getStatus, payload, slotDryDock?.status]);
- const startShipAssembly = useCallback((shipType, origin, originSlot, leaseDetails) => {
+ const startShipAssembly = useCallback(import.meta.url, (shipType, origin, originSlot, leaseDetails) => {
execute(
leaseDetails ? 'LeaseAssembleShipStart' : 'AssembleShipStart',
{
@@ -103,7 +103,7 @@ const useDryDockManager = (lotId, slot = 1) => {
)
}, [payload]);
- const finishShipAssembly = useCallback((destination) => {
+ const finishShipAssembly = useCallback(import.meta.url, (destination) => {
execute(
'AssembleShipFinish',
{
diff --git a/src/hooks/actionManagers/useEjectCrewManager.js b/src/hooks/actionManagers/useEjectCrewManager.js
index 94e82956e..38c6e5d5c 100644
--- a/src/hooks/actionManagers/useEjectCrewManager.js
+++ b/src/hooks/actionManagers/useEjectCrewManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -16,7 +16,7 @@ const useEjectCrewManager = (originEntity) => {
const { data: origin } = useEntity(originEntity);
const { data: originCrews } = useStationedCrews(origin);
- const currentEjections = useMemo(() => {
+ const currentEjections = useMemo(import.meta.url, () => {
return pendingTransactions
.filter((tx) => {
if (tx.key === 'EjectCrew') {
@@ -25,7 +25,7 @@ const useEjectCrewManager = (originEntity) => {
});
}, [originCrews, pendingTransactions]);
- const ejectCrew = useCallback(
+ const ejectCrew = useCallback(import.meta.url,
(id) => {
return execute(
'EjectCrew',
diff --git a/src/hooks/actionManagers/useExtractionManager.js b/src/hooks/actionManagers/useExtractionManager.js
index 8dce0d955..df1d0ce90 100644
--- a/src/hooks/actionManagers/useExtractionManager.js
+++ b/src/hooks/actionManagers/useExtractionManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity, Extractor, Permission } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -17,17 +17,17 @@ const useExtractionManager = (lotId, slot = 1) => {
const { data: lot } = useLot(lotId);
const { data: actionItems } = useUnresolvedActivities(lot?.building);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
extractor: { id: lot?.building?.id, label: Entity.IDS.BUILDING },
extractor_slot: slot,
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [lot?.building, crew?.id, slot]);
- const slotExtractor = useMemo(() => lot?.building?.Extractors?.find((e) => e.slot === slot), [lot?.building, slot]);
+ const slotExtractor = useMemo(import.meta.url, () => lot?.building?.Extractors?.find((e) => e.slot === slot), [lot?.building, slot]);
// status flow
// READY > EXTRACTING > READY_TO_FINISH > FINISHING
- const [currentExtraction, extractionStatus, actionStage] = useMemo(() => {
+ const [currentExtraction, extractionStatus, actionStage] = useMemo(import.meta.url, () => {
let current = {
_cachedData: null,
_isAccessible: false,
@@ -98,7 +98,7 @@ const useExtractionManager = (lotId, slot = 1) => {
];
}, [actionItems, blockTime, crew?.id, crewCan, getPendingTx, getStatus, payload, slotExtractor?.status]);
- const startExtraction = useCallback((amount, deposit, destination, destinationSlot, depositRecipient, lease) => {
+ const startExtraction = useCallback(import.meta.url, (amount, deposit, destination, destinationSlot, depositRecipient, lease) => {
execute(
'FlexibleExtractResourceStart',
{
@@ -120,7 +120,7 @@ const useExtractionManager = (lotId, slot = 1) => {
)
}, [payload]);
- const finishExtraction = useCallback(() => {
+ const finishExtraction = useCallback(import.meta.url, () => {
execute('ExtractResourceFinish', payload, { lotId });
}, [payload]);
diff --git a/src/hooks/actionManagers/useFeedCrewManager.js b/src/hooks/actionManagers/useFeedCrewManager.js
index dd4ab2c69..2dd18adad 100644
--- a/src/hooks/actionManagers/useFeedCrewManager.js
+++ b/src/hooks/actionManagers/useFeedCrewManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -9,9 +9,9 @@ const useFeedCrewManager = () => {
const { crew, isLoading } = useCrewContext();
const { execute, getPendingTx } = useContext(ChainTransactionContext);
- const caller_crew = useMemo(() => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
+ const caller_crew = useMemo(import.meta.url, () => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
- const feedCrew = useCallback(
+ const feedCrew = useCallback(import.meta.url,
({ origin, originSlot, amount, _orderPath, ...fillProps }) => {
if (_orderPath) {
execute('ResupplyFoodFromExchange', {
@@ -39,7 +39,7 @@ const useFeedCrewManager = () => {
[execute, caller_crew]
);
- const currentFeeding = useMemo(
+ const currentFeeding = useMemo(import.meta.url,
() => {
if (getPendingTx) {
return getPendingTx('ResupplyFood', { caller_crew })
diff --git a/src/hooks/actionManagers/useJettisonCargoManager.js b/src/hooks/actionManagers/useJettisonCargoManager.js
index 82bc03532..89a60ab31 100644
--- a/src/hooks/actionManagers/useJettisonCargoManager.js
+++ b/src/hooks/actionManagers/useJettisonCargoManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -9,12 +9,12 @@ const useJettisonCargoManager = (origin) => {
const { crew, isLoading } = useCrewContext();
const { execute, getPendingTx } = useContext(ChainTransactionContext);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
origin: { id: origin?.id, label: origin?.label },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [crew?.id, origin])
- const jettisonCargo = useCallback(
+ const jettisonCargo = useCallback(import.meta.url,
(originSlot, products, meta) => {
if (payload.origin?.id && payload.caller_crew?.id) {
execute('DumpDelivery', {
@@ -27,7 +27,7 @@ const useJettisonCargoManager = (origin) => {
[payload]
);
- const currentJettison = useMemo(
+ const currentJettison = useMemo(import.meta.url,
() => getPendingTx ? getPendingTx('DumpDelivery', { ...payload }) : null,
[getPendingTx, payload]
);
diff --git a/src/hooks/actionManagers/useMarketplaceAdmin.js b/src/hooks/actionManagers/useMarketplaceAdmin.js
index e677fe038..c5d5c32e4 100644
--- a/src/hooks/actionManagers/useMarketplaceAdmin.js
+++ b/src/hooks/actionManagers/useMarketplaceAdmin.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -10,12 +10,12 @@ const useMarketplaceAdmin = (buildingId) => {
const { execute, getStatus } = useContext(ChainTransactionContext);
const { data: building } = useEntity({ id: buildingId, label: Entity.IDS.BUILDING });
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
exchange: { id: buildingId, label: Entity.IDS.BUILDING },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [crew?.id, buildingId]);
- const changeSettings = useCallback(
+ const changeSettings = useCallback(import.meta.url,
({ makerFee, takerFee, allowedProducts }) => execute(
'ConfigureExchange',
{
@@ -31,7 +31,7 @@ const useMarketplaceAdmin = (buildingId) => {
[building, execute, payload]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus('ConfigureExchange', { ...payload }),
[getStatus, payload]
);
diff --git a/src/hooks/actionManagers/useMarketplaceManager.js b/src/hooks/actionManagers/useMarketplaceManager.js
index 88e487a00..a8c6e4a04 100644
--- a/src/hooks/actionManagers/useMarketplaceManager.js
+++ b/src/hooks/actionManagers/useMarketplaceManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity, Order } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -15,12 +15,12 @@ const useMarketplaceManager = (buildingId) => {
const { data: exchange } = useEntity({ id: buildingId, label: Entity.IDS.BUILDING });
const { data: exchangeController } = useHydratedCrew(exchange?.Control?.controller?.id);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
exchange: { id: buildingId, label: Entity.IDS.BUILDING },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [crew?.id, buildingId]);
- const getPendingOrder = useCallback((mode, type, details) => {
+ const getPendingOrder = useCallback(import.meta.url, (mode, type, details) => {
const keys = [];
let locTest = () => true;
if (mode === 'buy' && type === 'limit') {
@@ -47,7 +47,7 @@ const useMarketplaceManager = (buildingId) => {
));
}, [pendingTransactions]);
- const createBuyOrder = useCallback(
+ const createBuyOrder = useCallback(import.meta.url,
({ product, amount, price, destination, destinationSlot, feeTotal }) => execute(
'EscrowDepositAndCreateBuyOrder',
{
@@ -66,7 +66,7 @@ const useMarketplaceManager = (buildingId) => {
),
[crew, payload]
);
- const createSellOrder = useCallback(
+ const createSellOrder = useCallback(import.meta.url,
({ product, amount, price, origin, originSlot }) => execute(
'CreateSellOrder',
{
@@ -84,7 +84,7 @@ const useMarketplaceManager = (buildingId) => {
[exchange, payload]
);
- const fillBuyOrders = useCallback(
+ const fillBuyOrders = useCallback(import.meta.url,
({ isCancellation, origin, originSlot, fillOrders }) => {
if (!fillOrders?.length) return;
@@ -120,7 +120,7 @@ const useMarketplaceManager = (buildingId) => {
[exchangeController, payload]
);
- const fillSellOrders = useCallback(
+ const fillSellOrders = useCallback(import.meta.url,
async ({ destination, destinationSlot, fillOrders }) => {
if (!fillOrders?.length) return;
const sellerCrewIds = fillOrders.map((order) => order.crew?.id);
@@ -155,7 +155,7 @@ const useMarketplaceManager = (buildingId) => {
[exchangeController, payload]
);
- const cancelBuyOrder = useCallback(
+ const cancelBuyOrder = useCallback(import.meta.url,
({ amount, buyer, price, product, destination, destinationSlot, initialCaller, makerFee }) => {
fillBuyOrders({
isCancellation: true,
@@ -181,7 +181,7 @@ const useMarketplaceManager = (buildingId) => {
},
[fillBuyOrders]
);
- const cancelSellOrder = useCallback(
+ const cancelSellOrder = useCallback(import.meta.url,
({ amount, seller, product, price, origin, originSlot }) => execute(
'CancelSellOrder',
{
diff --git a/src/hooks/actionManagers/useNftSaleManager.js b/src/hooks/actionManagers/useNftSaleManager.js
index 169b81738..c75ee3e4b 100644
--- a/src/hooks/actionManagers/useNftSaleManager.js
+++ b/src/hooks/actionManagers/useNftSaleManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -13,12 +13,12 @@ const useNftSaleManager = (entity) => {
const { crew } = useCrewContext();
const { execute, getStatus } = useContext(ChainTransactionContext);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
tokenAddress: tokens[entity?.label],
tokenId: entity?.id
}), [entity]);
- const purchaseListing = useCallback(() => {
+ const purchaseListing = useCallback(import.meta.url, () => {
execute(
'FillNftSellOrder',
{
@@ -31,7 +31,7 @@ const useNftSaleManager = (entity) => {
)
}, [crew, execute, payload]);
- const updateListing = useCallback(
+ const updateListing = useCallback(import.meta.url,
(price) => {
execute(
'SetNftSellOrder',
@@ -44,8 +44,8 @@ const useNftSaleManager = (entity) => {
[execute, payload, entity]
);
- const isPendingPurchase = useMemo(() => getStatus('FillNftSellOrder', payload) === 'pending', [getStatus, payload]);
- const isPendingUpdate = useMemo(() => getStatus('SetNftSellOrder', payload) === 'pending', [getStatus, payload]);
+ const isPendingPurchase = useMemo(import.meta.url, () => getStatus('FillNftSellOrder', payload) === 'pending', [getStatus, payload]);
+ const isPendingUpdate = useMemo(import.meta.url, () => getStatus('SetNftSellOrder', payload) === 'pending', [getStatus, payload]);
return {
isPendingPurchase,
diff --git a/src/hooks/actionManagers/usePolicyManager.js b/src/hooks/actionManagers/usePolicyManager.js
index 0544627ba..a9cc94db6 100644
--- a/src/hooks/actionManagers/usePolicyManager.js
+++ b/src/hooks/actionManagers/usePolicyManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Address, Entity, Permission } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -11,24 +11,24 @@ const usePolicyManager = (target, permission) => {
const { crew } = useCrewContext();
const { execute, getStatus } = useContext(ChainTransactionContext);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
target: { id: target?.id, label: target?.label },
permission,
caller_crew: { id: crew?.id, label: Entity.IDS.CREW },
}), [crew?.id, target, permission]);
- const meta = useMemo(() => ({
+ const meta = useMemo(import.meta.url, () => ({
asteroidId: target?.label === Entity.IDS.ASTEROID ? target?.id : undefined,
lotId: (target?.Location?.locations || []).find((l) => l?.label === Entity.IDS.LOT)?.id,
shipId: target?.label === Entity.IDS.SHIP ? target?.id : undefined,
}), [target]);
// using json to avoid unnecessary re-renders
- const policyJSON = useMemo(() => {
+ const policyJSON = useMemo(import.meta.url, () => {
return JSON.stringify(Permission.getPolicyDetails(target, crew, blockTime)[permission]);
}, [blockTime, crew, target, permission]);
- const currentPolicy = useMemo(() => {
+ const currentPolicy = useMemo(import.meta.url, () => {
if (!target) return undefined;
if (!policyJSON) return undefined;
const pol = JSON.parse(policyJSON);
@@ -46,7 +46,7 @@ const usePolicyManager = (target, permission) => {
return pol;
}, [policyJSON]);
- const updateAllowlists = useCallback((newAllowlist, newAccountAllowlist) => {
+ const updateAllowlists = useCallback(import.meta.url, (newAllowlist, newAccountAllowlist) => {
execute(
'UpdateAllowlists',
{
@@ -60,7 +60,7 @@ const usePolicyManager = (target, permission) => {
);
}, [currentPolicy?.allowlist, currentPolicy?.accountAllowlist, meta, payload]);
- const updatePolicy = useCallback(
+ const updatePolicy = useCallback(import.meta.url,
(newPolicyType, newPolicyDetails) => {
const params = {
...payload,
@@ -86,11 +86,11 @@ const usePolicyManager = (target, permission) => {
[currentPolicy, meta, payload]
);
- const allowlistChangePending = useMemo(
+ const allowlistChangePending = useMemo(import.meta.url,
() => (getStatus ? getStatus('updateAllowlists', { ...payload }) : 'ready') === 'pending',
[payload, getStatus]
);
- const policyChangePending = useMemo(
+ const policyChangePending = useMemo(import.meta.url,
() => (getStatus ? getStatus('UpdatePolicy', { ...payload }) : 'ready') === 'pending',
[payload, getStatus]
);
diff --git a/src/hooks/actionManagers/useProcessManager.js b/src/hooks/actionManagers/useProcessManager.js
index 781cd6ffd..d072fe5b4 100644
--- a/src/hooks/actionManagers/useProcessManager.js
+++ b/src/hooks/actionManagers/useProcessManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity, Permission, Processor } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -15,17 +15,17 @@ const useProcessManager = (lotId, slot) => {
const { data: lot } = useLot(lotId);
const { data: actionItems } = useUnresolvedActivities(lot?.building);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
processor: { id: lot?.building?.id, label: Entity.IDS.BUILDING },
processor_slot: slot,
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [lot?.building, crew?.id, slot]);
- const processor = useMemo(() => lot?.building?.Processors?.find((e) => e.slot === slot), [lot?.building, slot]);
+ const processor = useMemo(import.meta.url, () => lot?.building?.Processors?.find((e) => e.slot === slot), [lot?.building, slot]);
// status flow
// READY > PROCESSING > READY_TO_FINISH > FINISHING
- const [currentProcess, processStatus, actionStage] = useMemo(() => {
+ const [currentProcess, processStatus, actionStage] = useMemo(import.meta.url, () => {
let current = {
_cachedData: null,
_isAccessible: false,
@@ -98,7 +98,7 @@ const useProcessManager = (lotId, slot) => {
];
}, [actionItems, blockTime, crew?.id, crewCan, getPendingTx, getStatus, payload, processor?.status]);
- const startProcess = useCallback(({ processId, primaryOutputId, recipeTally, origin, originSlot, destination, destinationSlot, leaseDetails }) => {
+ const startProcess = useCallback(import.meta.url, ({ processId, primaryOutputId, recipeTally, origin, originSlot, destination, destinationSlot, leaseDetails }) => {
execute(
leaseDetails ? 'LeaseAndProcessProductsStart' : 'ProcessProductsStart',
{
@@ -118,7 +118,7 @@ const useProcessManager = (lotId, slot) => {
)
}, [lotId, payload, processor?.processorType]);
- const finishProcess = useCallback(() => {
+ const finishProcess = useCallback(import.meta.url, () => {
execute('ProcessProductsFinish', payload, { lotId, process: processor?.runningProcess });
}, [lotId, payload, processor?.runningProcess]);
diff --git a/src/hooks/actionManagers/useRepoManager.js b/src/hooks/actionManagers/useRepoManager.js
index 4cf585e9f..e8c2ba5b6 100644
--- a/src/hooks/actionManagers/useRepoManager.js
+++ b/src/hooks/actionManagers/useRepoManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -13,7 +13,7 @@ const useRepoManager = (lotId) => {
const { isAtRisk } = useConstructionManager(lotId);
const { data: lot } = useLot(lotId);
- const takeoverType = useMemo(() => {
+ const takeoverType = useMemo(import.meta.url, () => {
// if i'm not in control of the building...
if (crew?.id !== lot?.building?.Control?.controller?.id) {
// ... but i am in control of the lot, then i can takeover from squatter
@@ -24,17 +24,17 @@ const useRepoManager = (lotId) => {
return null;
}, [crew?.id, isAtRisk, lot?.building?.Control?.controller?.id, lot?.Control?.controller?.id]);
- const payload = useMemo(() => ({
+ const payload = useMemo(import.meta.url, () => ({
building: { id: lot?.building?.id, label: Entity.IDS.BUILDING },
caller_crew: { id: crew?.id, label: Entity.IDS.CREW }
}), [crew?.id, lot?.building?.id]);
- const repoBuilding = useCallback(
+ const repoBuilding = useCallback(import.meta.url,
() => execute('RepossessBuilding', payload, { lotId }),
[execute, lotId, payload]
);
- const currentRepo = useMemo(
+ const currentRepo = useMemo(import.meta.url,
() => getPendingTx ? getPendingTx('RepossessBuilding', payload) : null,
[getPendingTx, payload]
);
diff --git a/src/hooks/actionManagers/useScanManager.js b/src/hooks/actionManagers/useScanManager.js
index 9a7225765..a56b5c0ce 100644
--- a/src/hooks/actionManagers/useScanManager.js
+++ b/src/hooks/actionManagers/useScanManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Asteroid } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -12,7 +12,7 @@ const useScanManager = (asteroid) => {
const { execute, getStatus } = useContext(ChainTransactionContext);
const { crew } = useCrewContext();
- const { scanType, startSystem, finishSystem, payload } = useMemo(() => {
+ const { scanType, startSystem, finishSystem, payload } = useMemo(import.meta.url, () => {
const scanType = asteroid?.Celestial?.scanStatus < Asteroid.SCAN_STATUSES.SURFACE_SCANNED ? 'SURFACE' : 'RESOURCE';
const startSystem = scanType === 'RESOURCE' ? 'ScanResourcesStart' : (asteroid?.AsteroidProof?.used ? 'ScanSurfaceStart' : 'InitializeAndStartSurfaceScan');
return {
@@ -26,7 +26,7 @@ const useScanManager = (asteroid) => {
};
}, [asteroid, crew]);
- const scanStatus = useMemo(() => {
+ const scanStatus = useMemo(import.meta.url, () => {
if (asteroid?.Celestial) {
if (scanType === 'SURFACE' && asteroid.Celestial?.scanStatus === Asteroid.SCAN_STATUSES.SURFACE_SCANNED) {
return 'FINISHED';
@@ -51,12 +51,12 @@ const useScanManager = (asteroid) => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [ asteroid, blockTime, getStatus, startSystem, finishSystem, payload, readyItems, scanType ]);
- const startAsteroidScan = useCallback(
+ const startAsteroidScan = useCallback(import.meta.url,
() => execute(startSystem, payload),
[execute, startSystem, payload]
);
- const finalizeAsteroidScan = useCallback(
+ const finalizeAsteroidScan = useCallback(import.meta.url,
() => execute(finishSystem, payload),
[execute, finishSystem, payload]
);
diff --git a/src/hooks/actionManagers/useShipDockingManager.js b/src/hooks/actionManagers/useShipDockingManager.js
index e40dc422d..f73e867c5 100644
--- a/src/hooks/actionManagers/useShipDockingManager.js
+++ b/src/hooks/actionManagers/useShipDockingManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -11,9 +11,9 @@ const useShipDockingManager = (shipId) => {
const { crew } = useCrewContext();
const { data: ship } = useShip(shipId);
- const caller_crew = useMemo(() => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
+ const caller_crew = useMemo(import.meta.url, () => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
- const undockShip = useCallback((hopperAssisted) => {
+ const undockShip = useCallback(import.meta.url, (hopperAssisted) => {
execute(
'UndockShip',
{
@@ -28,7 +28,7 @@ const useShipDockingManager = (shipId) => {
);
}, [caller_crew, ship]);
- const dockShip = useCallback((destination, hopperAssisted, destLotId) => {
+ const dockShip = useCallback(import.meta.url, (destination, hopperAssisted, destLotId) => {
execute(
'DockShip',
{
@@ -44,12 +44,12 @@ const useShipDockingManager = (shipId) => {
);
}, [caller_crew]);
- const currentDockingAction = useMemo(
+ const currentDockingAction = useMemo(import.meta.url,
() => getPendingTx ? getPendingTx('DockShip', { caller_crew }) : null
[caller_crew, getPendingTx]
);
- const currentUndockingAction = useMemo(
+ const currentUndockingAction = useMemo(import.meta.url,
() => getPendingTx ? getPendingTx('UndockShip', { caller_crew }) : null,
[caller_crew, getPendingTx]
);
diff --git a/src/hooks/actionManagers/useShipEmergencyManager.js b/src/hooks/actionManagers/useShipEmergencyManager.js
index 4bc17889d..f888ab84b 100644
--- a/src/hooks/actionManagers/useShipEmergencyManager.js
+++ b/src/hooks/actionManagers/useShipEmergencyManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -9,9 +9,9 @@ const useShipEmergencyManager = () => {
const { execute, getStatus } = useContext(ChainTransactionContext);
const { crew } = useCrewContext();
- const caller_crew = useMemo(() => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
+ const caller_crew = useMemo(import.meta.url, () => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
- const activateEmergencyMode = useCallback(() => {
+ const activateEmergencyMode = useCallback(import.meta.url, () => {
execute(
'ActivateEmergency',
{ caller_crew },
@@ -19,7 +19,7 @@ const useShipEmergencyManager = () => {
);
}, [caller_crew]);
- const deactivateEmergencyMode = useCallback(() => {
+ const deactivateEmergencyMode = useCallback(import.meta.url, () => {
execute(
'DeactivateEmergency',
{ caller_crew },
@@ -27,7 +27,7 @@ const useShipEmergencyManager = () => {
);
}, []);
- const collectEmergencyPropellant = useCallback(() => {
+ const collectEmergencyPropellant = useCallback(import.meta.url, () => {
execute(
'CollectEmergencyPropellant',
{ caller_crew },
@@ -35,15 +35,15 @@ const useShipEmergencyManager = () => {
);
}, []);
- const isActivating = useMemo(
+ const isActivating = useMemo(import.meta.url,
() => getStatus('ActivateEmergency', { caller_crew }) === 'pending',
[getStatus, caller_crew]
);
- const isDeactivating = useMemo(
+ const isDeactivating = useMemo(import.meta.url,
() => getStatus('DeactivateEmergency', { caller_crew }) === 'pending',
[getStatus, caller_crew]
);
- const isCollecting = useMemo(
+ const isCollecting = useMemo(import.meta.url,
() => getStatus('CollectEmergencyPropellant', { caller_crew }) === 'pending',
[getStatus, caller_crew]
);
diff --git a/src/hooks/actionManagers/useShipTravelManager.js b/src/hooks/actionManagers/useShipTravelManager.js
index 22f7e5876..909dba80c 100644
--- a/src/hooks/actionManagers/useShipTravelManager.js
+++ b/src/hooks/actionManagers/useShipTravelManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
+import { useCallback, useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import { lambert } from '@influenceth/astro';
import { GM_ADALIA, AdalianOrbit, Crewmate, Entity, Ship, Time } from '@influenceth/sdk';
import { Vector3 } from 'three';
@@ -26,12 +26,12 @@ const useShipTravelManager = (shipId) => {
const [currentTravelSolution, setCurrentTravelSolution] = useState();
- const caller_crew = useMemo(() => {
+ const caller_crew = useMemo(import.meta.url, () => {
return ship?.label === Entity.IDS.CREW ? ship : ship?.Control?.controller;
}, [ship?.Control?.controller?.id]);
// READY > DEPARTING > IN_FLIGHT > READY_TO_ARRIVE > ARRIVING
- const [currentTravelAction, status, stage] = useMemo(() => {
+ const [currentTravelAction, status, stage] = useMemo(import.meta.url, () => {
let current = {
_cachedData: null,
_isAccessible: true,
@@ -96,15 +96,15 @@ const useShipTravelManager = (shipId) => {
const shipConfig = Ship.TYPES[ship?.Ship?.shipType];
- const cargoInv = useMemo(() => {
+ const cargoInv = useMemo(import.meta.url, () => {
return (ship?.Inventories || []).find(i => i.slot === shipConfig?.cargoSlot);
}, [ship, shipConfig?.cargoSlot]);
- const propellantInv = useMemo(() => {
+ const propellantInv = useMemo(import.meta.url, () => {
return (ship?.Inventories || []).find(i => i.slot === shipConfig?.propellantSlot);
}, [ship, shipConfig?.propellantSlot]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setCurrentTravelSolution();
if (!origin || !destination || !propellantInv || !currentTravelAction) return;
@@ -187,7 +187,7 @@ const useShipTravelManager = (shipId) => {
shipUpdatedAt
]);
- const depart = useCallback(() => {
+ const depart = useCallback(import.meta.url, () => {
const {
v1,
v2,
@@ -256,7 +256,7 @@ const useShipTravelManager = (shipId) => {
);
}, [caller_crew, destination, proposedTravelSolution, shipId]);
- const arrive = useCallback(() => {
+ const arrive = useCallback(import.meta.url, () => {
execute(
'TransitBetweenFinish',
{
diff --git a/src/hooks/actionManagers/useStationCrewManager.js b/src/hooks/actionManagers/useStationCrewManager.js
index 291b4ca4b..dc5f33c0f 100644
--- a/src/hooks/actionManagers/useStationCrewManager.js
+++ b/src/hooks/actionManagers/useStationCrewManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
@@ -12,18 +12,18 @@ const useStationCrewManager = (destination) => {
const { execute, getPendingTx } = useContext(ChainTransactionContext);
const { data: destEntity } = useEntity(destination);
- const destLotId = useMemo(() => {
+ const destLotId = useMemo(import.meta.url, () => {
return locationsArrToObj(destEntity?.Location?.locations || [])?.lotId;
}, [destEntity?.Location?.locations]);
- const caller_crew = useMemo(() => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
+ const caller_crew = useMemo(import.meta.url, () => ({ id: crew?.id, label: Entity.IDS.CREW }), [crew?.id]);
- const stationCrew = useCallback(
+ const stationCrew = useCallback(import.meta.url,
() => execute('StationCrew', { destination, caller_crew }, { destLotId }),
[caller_crew, destination, destLotId, execute]
);
- const currentStationing = useMemo(
+ const currentStationing = useMemo(import.meta.url,
() => getPendingTx ? getPendingTx('StationCrew', { caller_crew }) : null,
[caller_crew, getPendingTx]
);
diff --git a/src/hooks/useAccessibleAsteroidInventories.js b/src/hooks/useAccessibleAsteroidInventories.js
index 2fbbf999b..8e8aabe55 100644
--- a/src/hooks/useAccessibleAsteroidInventories.js
+++ b/src/hooks/useAccessibleAsteroidInventories.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Entity, Permission, Ship } from '@influenceth/sdk';
@@ -25,7 +25,7 @@ const useAccessibleAsteroidInventories = (asteroidId, isSourcing) => {
{ enabled: !!(asteroidId && permission && permissionCrewId && permissionAccount) }
);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
data: buildingsLoading || shipsLoading
? undefined
: [...(buildings || []), ...(ships || [])],
diff --git a/src/hooks/useAccountFormatted.js b/src/hooks/useAccountFormatted.js
index 8d353dc8a..a707f69ef 100644
--- a/src/hooks/useAccountFormatted.js
+++ b/src/hooks/useAccountFormatted.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import useSession from '~/hooks/useSession';
@@ -15,7 +15,7 @@ const useAccountFormatted = (props) => {
// { enabled: !!address }
// );
- const label = useMemo(() => {
+ const label = useMemo(import.meta.url, () => {
return (accountAddress && accountAddress === address && !doNotReplaceYou)
? 'you'
: (
@@ -25,7 +25,7 @@ const useAccountFormatted = (props) => {
);
}, [accountAddress, address, doNotReplaceYou, truncate, provider]);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (!address) return null;
return label;
}, [label, doNotUseName]);
diff --git a/src/hooks/useActionButtons.js b/src/hooks/useActionButtons.js
index 6b9e7b721..08c795e85 100644
--- a/src/hooks/useActionButtons.js
+++ b/src/hooks/useActionButtons.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Ship } from '@influenceth/sdk';
import cloneDeep from 'lodash/cloneDeep';
@@ -138,7 +138,7 @@ const useActionButtons = () => {
// actionable ship
// NOTE: this does not handle escape pod... these are only for real ships, and that is
// expected for the action buttons in their current state
- const targetShip = useMemo(() => {
+ const targetShip = useMemo(import.meta.url, () => {
let ship = null;
// if zoomed to ship
@@ -166,7 +166,7 @@ const useActionButtons = () => {
}, [zoomedToShip, crewedShip, lot, crew?.id]);
// TODO: should this be useMemo?
- const actions = useMemo(() => {
+ const actions = useMemo(import.meta.url, () => {
if (asteroidIsLoading || lotIsLoading || crewedShipIsLoading || zoomedShipIsLoading) return [];
return Object.keys(actionButtons)
.filter((k) => !actionButtons[k].isVisible || actionButtons[k].isVisible({
diff --git a/src/hooks/useActionCrew.js b/src/hooks/useActionCrew.js
index 7b5482a36..14da2de5d 100644
--- a/src/hooks/useActionCrew.js
+++ b/src/hooks/useActionCrew.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Crewmate } from '@influenceth/sdk';
import useCrewContext from '~/hooks/useCrewContext';
@@ -14,7 +14,7 @@ const useActionCrew = (currentAction) => {
// best-effort fallback (so we'll only load if crew.Location is not set)
const { data: liveStation } = useEntity(_cachedData?.crew?.Location ? null : _cachedData?.station?.entity);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (_cachedData) {
// rebuild pseudo-crew from cached data
const c = {
diff --git a/src/hooks/useActionItems.js b/src/hooks/useActionItems.js
index 6ae6568c0..0e9f9c7f7 100644
--- a/src/hooks/useActionItems.js
+++ b/src/hooks/useActionItems.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import ActionItemContext from '~/contexts/ActionItemContext';
diff --git a/src/hooks/useActivitiesContext.js b/src/hooks/useActivitiesContext.js
index 3ea6db6dd..18271684c 100644
--- a/src/hooks/useActivitiesContext.js
+++ b/src/hooks/useActivitiesContext.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import ActivitiesContext from '~/contexts/ActivitiesContext';
diff --git a/src/hooks/useActivityAnnotations.js b/src/hooks/useActivityAnnotations.js
index 0816f9996..a59a09388 100644
--- a/src/hooks/useActivityAnnotations.js
+++ b/src/hooks/useActivityAnnotations.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import api from '~/lib/api';
@@ -7,7 +7,7 @@ import { cleanseTxHash } from '~/lib/utils';
// note: deprecated at-the-moment, but could be relevant in the future
const useActivityAnnotations = (activity) => {
- const query = useMemo(
+ const query = useMemo(import.meta.url,
() => activity?.event ? { transactionHash: activity?.event?.transactionHash, logIndex: activity?.event?.logIndex } : null,
[activity]
);
diff --git a/src/hooks/useAssetSearch.js b/src/hooks/useAssetSearch.js
index 8403eb9a2..0d01e5b96 100644
--- a/src/hooks/useAssetSearch.js
+++ b/src/hooks/useAssetSearch.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo } from 'react';
+import { useEffect, useMemo } from '~/lib/react-debug';
import { useThrottle } from '@react-hook/throttle';
import { useQuery } from 'react-query';
import esb from 'elastic-builder';
@@ -223,7 +223,7 @@ const useAssetSearch = (assetType, { from = 0, size = 2000 } = {}) => {
const [throttledFilters, setThrottledFilters] = useThrottle(filters || {}, 2, true);
- useEffect(() => setThrottledFilters(filters || {}), [filters, setThrottledFilters]);
+ useEffect(import.meta.url, () => setThrottledFilters(filters || {}), [filters, setThrottledFilters]);
// asteroidsMapped use the exact same indices as asteroids (for now)
// lotsMapped, actionitems, eventlog does not need to query ES
@@ -233,7 +233,7 @@ const useAssetSearch = (assetType, { from = 0, size = 2000 } = {}) => {
if (esAssetType === 'actionitems') esAssetType = '';
if (esAssetType === 'eventlog') esAssetType = '';
- const query = useMemo(() => {
+ const query = useMemo(import.meta.url, () => {
if (esAssetType) {
try {
const q = esb.requestBodySearch();
diff --git a/src/hooks/useAsteroidAbundances.js b/src/hooks/useAsteroidAbundances.js
index 948a192eb..fa2c92ad6 100644
--- a/src/hooks/useAsteroidAbundances.js
+++ b/src/hooks/useAsteroidAbundances.js
@@ -1,10 +1,10 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Asteroid, Product } from '@influenceth/sdk';
import { keyify } from '~/lib/utils';
const useAsteroidAbundances = (asteroid) => {
- const data = useMemo(() => {
+ const data = useMemo(import.meta.url, () => {
if (asteroid?.Celestial?.scanStatus === Asteroid.SCAN_STATUSES.RESOURCE_SCANNED) {
const categories = {};
const abundances = Asteroid.Entity.getAbundances(asteroid);
diff --git a/src/hooks/useAsteroidBuildings.js b/src/hooks/useAsteroidBuildings.js
index 60d555b4e..3f8cb8f9a 100644
--- a/src/hooks/useAsteroidBuildings.js
+++ b/src/hooks/useAsteroidBuildings.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Building, Entity, Permission } from '@influenceth/sdk';
@@ -15,12 +15,12 @@ const useAsteroidBuildings = (asteroidId, reqComponent = 'Building', reqOneOfPer
{ enabled: !!asteroidId && !!reqComponent }
);
- const perms = useMemo(() =>
+ const perms = useMemo(import.meta.url, () =>
Array.isArray(reqOneOfPermissions) ? reqOneOfPermissions : (reqOneOfPermissions ? [reqOneOfPermissions] : []),
[reqOneOfPermissions]
);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
let data = allData;
// if perms check, filter
diff --git a/src/hooks/useAsteroidCrewBuildings.js b/src/hooks/useAsteroidCrewBuildings.js
index 84675bb51..57f59f97c 100644
--- a/src/hooks/useAsteroidCrewBuildings.js
+++ b/src/hooks/useAsteroidCrewBuildings.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import useCrewBuildings from '~/hooks/useCrewBuildings';
@@ -6,7 +6,7 @@ import useCrewBuildings from '~/hooks/useCrewBuildings';
const useAsteroidCrewBuildings = (asteroidId) => {
const { data, isLoading } = useCrewBuildings();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: asteroidId && !isLoading && data
? (data || []).filter((a) => (
diff --git a/src/hooks/useAutocomplete.js b/src/hooks/useAutocomplete.js
index 5ac848cfb..2a7857ae8 100644
--- a/src/hooks/useAutocomplete.js
+++ b/src/hooks/useAutocomplete.js
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { useThrottle } from '@react-hook/throttle';
import esb from 'elastic-builder';
@@ -32,7 +32,7 @@ const useAutocomplete = (assetType, meta) => {
const [ searchTerm, setSearchTerm ] = useState('');
const [ query, setQuery ] = useThrottle({}, 2, true);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!assetType) return;
if (searchTerm) {
const q = esb.requestBodySearch();
diff --git a/src/hooks/useBookSession.js b/src/hooks/useBookSession.js
index 1e01f1352..5c55b4384 100644
--- a/src/hooks/useBookSession.js
+++ b/src/hooks/useBookSession.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import cloneDeep from 'lodash/cloneDeep'
import useBookTokens from '~/hooks/useBookTokens';
@@ -66,7 +66,7 @@ const useBookSession = (crewId, crewmateId) => {
const [book, setBook] = useState();
- const [bookId, crewmate] = useMemo(() => {
+ const [bookId, crewmate] = useMemo(import.meta.url, () => {
// if creating a completely new crewmate, will be an adalian
const adalianRecruit = adalianRecruits.find((a) => a.id === crewmateId);
if (adalianRecruit || crewmateId === 0) return [bookIds.ADALIAN_RECRUITMENT, adalianRecruit || null];
@@ -86,7 +86,7 @@ const useBookSession = (crewId, crewmateId) => {
const { bookTokens, isLoading: bookTokensLoading } = useBookTokens(bookId);
- const error = useMemo(() => {
+ const error = useMemo(import.meta.url, () => {
// validate crewmate (must have crewmate if non-zero id, crewmate must be uninitialized if present)
if ((crewmateId > 0 && !crewmate) || (crewmate && crewmate.Crewmate?.status > 0)) return 'Invalid params!';
return null;
@@ -97,11 +97,11 @@ const useBookSession = (crewId, crewmateId) => {
const dispatchCrewAssignmentPathUndo = useStore(s => s.dispatchCrewAssignmentPathUndo);
const dispatchCrewAssignmentRestart = useStore(s => s.dispatchCrewAssignmentRestart);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
fetchBook(bookId).then(setBook);
}, [bookId]);
- const { bookSession, storySession } = useMemo(() => {
+ const { bookSession, storySession } = useMemo(import.meta.url, () => {
// console.log({ book, crewIsLoading, crewmateId, crewmate });
if (!book) return {};
if (bookTokensLoading) return {};
@@ -225,11 +225,11 @@ const useBookSession = (crewId, crewmateId) => {
};
}, [book, bookTokens, crewmate, crewmateId, crewIsLoading, sessionData]);
- const choosePath = useCallback((pathId) => {
+ const choosePath = useCallback(import.meta.url, (pathId) => {
dispatchCrewAssignmentPathSelection(crewId, crewmateId, bookSession?.currentStoryId, pathId);
}, [crewId, crewmateId, bookSession?.currentStoryId]);
- const undoPath = useCallback(() => {
+ const undoPath = useCallback(import.meta.url, () => {
if (bookSession.currentStoryIndex > 0 && storySession.history.length === 0) {
const previousStoryIndex = book.findIndex((s) => s.id === bookSession?.currentStoryId) - 1;
if (previousStoryIndex >= 0) {
@@ -240,11 +240,11 @@ const useBookSession = (crewId, crewmateId) => {
}
}, [crewId, crewmateId, book, bookSession, storySession]);
- const restart = useCallback(() => {
+ const restart = useCallback(import.meta.url, () => {
dispatchCrewAssignmentRestart(crewId, crewmateId);
}, [crewId, crewmateId]);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
book,
bookError: error,
bookSession,
diff --git a/src/hooks/useBookTokens.js b/src/hooks/useBookTokens.js
index 17e434f9f..c7766e2b4 100644
--- a/src/hooks/useBookTokens.js
+++ b/src/hooks/useBookTokens.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useCrewContext from '~/hooks/useCrewContext';
import { useSwayBalance } from '~/hooks/useWalletTokenBalance';
@@ -10,14 +10,14 @@ const useBookTokens = (bookId) => {
const { captain, isLoading: crewIsLoading } = useCrewContext();
const { data: dispatcherBalance, isLoading: swayIsLoading } = useSwayBalance(process.env.REACT_APP_STARKNET_DISPATCHER);
- const swayAmount = useMemo(() => {
+ const swayAmount = useMemo(import.meta.url, () => {
if (swayIsLoading) return null;
const scaledSwayBalance = (dispatcherBalance || 0n) / safeBigInt(TOKEN_SCALE[TOKEN.SWAY]);
const SWAY_AMOUNT = 30000; // TODO: find better way to get the sway amount (it will change every so often)
return parseInt(Math.min(SWAY_AMOUNT, Math.floor(Number(scaledSwayBalance) / 1000)));
}, [dispatcherBalance, swayIsLoading]);
- const bookTokens = useMemo(() => {
+ const bookTokens = useMemo(import.meta.url, () => {
switch (bookId) {
case 'random-1.json': {
return {
@@ -72,7 +72,7 @@ const useBookTokens = (bookId) => {
}
}, [bookId, captain, swayAmount]);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
bookTokens,
isLoading: crewIsLoading || (dispatcherBalance === null)
}), [bookTokens, crewIsLoading, dispatcherBalance]);
diff --git a/src/hooks/useBusyActivity.js b/src/hooks/useBusyActivity.js
index 2da7b05f5..5f53405b5 100644
--- a/src/hooks/useBusyActivity.js
+++ b/src/hooks/useBusyActivity.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useState } from '~/lib/react-debug';
import { useQuery, useQueryClient } from 'react-query';
import cloneDeep from 'lodash/cloneDeep';
@@ -26,7 +26,7 @@ const useBusyActivity = (entity) => {
// if crew is busy AND there is no unready finishable action (i.e. this activity will be shown)
// then it must be because of an unfinishable unready action (where !!getBusyItem) OR because of
// a *ready* finishable action where the crew time was > task time (i.e. core sample >1h away)...
- const busyItem = useMemo(() => {
+ const busyItem = useMemo(import.meta.url, () => {
// walk backwards until find first of those conditions...
return (recentItems || []).find((i) => {
if (!activities[i.event?.name]) return false;
@@ -36,7 +36,7 @@ const useBusyActivity = (entity) => {
});
}, [blockTime, dataUpdatedAt]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (busyItem) {
setIsHydrating(true);
const items = [busyItem];
@@ -48,7 +48,7 @@ const useBusyActivity = (entity) => {
}
}, [busyItem]);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
data: cloneDeep(hydratedBusyItem),
isLoading: isLoading || isHydrating,
dataUpdatedAt: Date.now(),
diff --git a/src/hooks/useCoachmarkRefSetter.js b/src/hooks/useCoachmarkRefSetter.js
index 869427114..cf6fbf8fe 100644
--- a/src/hooks/useCoachmarkRefSetter.js
+++ b/src/hooks/useCoachmarkRefSetter.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import CoachmarkContext from '~/contexts/CoachmarkContext';
const useCoachmarkRefSetter = () => {
diff --git a/src/hooks/useCoarseTime.js b/src/hooks/useCoarseTime.js
index 3035c28eb..fbe53b030 100644
--- a/src/hooks/useCoarseTime.js
+++ b/src/hooks/useCoarseTime.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useState } from '~/lib/react-debug';
import { Time } from '@influenceth/sdk';
import useConstants from '~/hooks/useConstants';
@@ -24,7 +24,7 @@ const useCoarseTime = (denom = defaultDenom) => {
const [syncing, setSyncing] = useState(true);
// this only needs to run as often as 0.01 adays in real time (0.01 * 86400e3 == 864e3)
- const tickLength = useMemo(
+ const tickLength = useMemo(import.meta.url,
() => {
if (timeOverride?.speed === 0) return null; // (tells useInterval to not run if clock paused)
@@ -37,7 +37,7 @@ const useCoarseTime = (denom = defaultDenom) => {
);
// sync to nearest coarseness (so any consumers all match each other in display)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const currentTime = getTime();
const currentCoarseTime = formatAsCoarseTime(currentTime, denom);
setCoarseTime(currentCoarseTime);
diff --git a/src/hooks/useCrew.js b/src/hooks/useCrew.js
index 7959a4469..4400af475 100644
--- a/src/hooks/useCrew.js
+++ b/src/hooks/useCrew.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Entity } from '@influenceth/sdk';
import useEntity from '~/hooks/useEntity';
@@ -11,7 +11,7 @@ const useCrew = (id) => {
const blockTime = useBlockTime();
const response = useEntity({ label: Entity.IDS.CREW, id });
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (response?.data) {
// lastFed to launch
if (openAccessJSTime) {
diff --git a/src/hooks/useCrewAgreements.js b/src/hooks/useCrewAgreements.js
index f43eefa6b..68dbef592 100644
--- a/src/hooks/useCrewAgreements.js
+++ b/src/hooks/useCrewAgreements.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useCrewContext from '~/hooks/useCrewContext';
import useWalletAgreements from '~/hooks/useWalletAgreements';
@@ -7,7 +7,7 @@ const useCrewAgreements = (enabled = true, includeWhereLessor = true, includeWhe
const { crew } = useCrewContext();
const { data, isLoading } = useWalletAgreements();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: crew?.id && enabled && data
? data?.filter((a) => (
diff --git a/src/hooks/useCrewAsteroids.js b/src/hooks/useCrewAsteroids.js
index 26b6a8d07..6e74e3666 100644
--- a/src/hooks/useCrewAsteroids.js
+++ b/src/hooks/useCrewAsteroids.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useCrewContext from '~/hooks/useCrewContext';
import useWalletAsteroids from '~/hooks/useWalletAsteroids';
@@ -7,7 +7,7 @@ const useCrewAsteroids = () => {
const { crew } = useCrewContext();
const { data, isLoading } = useWalletAsteroids();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: crew?.id && !isLoading && Array.isArray(data)
? data.filter((a) => (a.Control?.controller?.id === crew?.id))
diff --git a/src/hooks/useCrewBuildings.js b/src/hooks/useCrewBuildings.js
index 59df4c748..5998732cd 100644
--- a/src/hooks/useCrewBuildings.js
+++ b/src/hooks/useCrewBuildings.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useCrewContext from '~/hooks/useCrewContext';
import useWalletBuildings from '~/hooks/useWalletBuildings';
@@ -7,7 +7,7 @@ const useCrewBuildings = () => {
const { crew } = useCrewContext();
const { data, isLoading } = useWalletBuildings();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: crew?.id && !isLoading && data
? data?.filter((a) => (a.Control?.controller?.id === crew?.id))
diff --git a/src/hooks/useCrewContext.js b/src/hooks/useCrewContext.js
index d8f1a3c53..91b905d87 100644
--- a/src/hooks/useCrewContext.js
+++ b/src/hooks/useCrewContext.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import CrewContext from '~/contexts/CrewContext';
diff --git a/src/hooks/useCrewOrders.js b/src/hooks/useCrewOrders.js
index 70650b973..182955921 100644
--- a/src/hooks/useCrewOrders.js
+++ b/src/hooks/useCrewOrders.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Entity } from '@influenceth/sdk';
@@ -12,13 +12,13 @@ const useCrewOrders = (controllerId) => {
{ enabled: !!controllerId }
);
- const exchangeIds = useMemo(() => Array.from(new Set((orders || []).map((o) => o.entity.id))), [orders]);
+ const exchangeIds = useMemo(import.meta.url, () => Array.from(new Set((orders || []).map((o) => o.entity.id))), [orders]);
const { data: exchanges, isLoading: exchangesLoading, dataUpdatedAt } = useEntities({
ids: exchangeIds,
label: Entity.IDS.BUILDING
});
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
const isLoading = ordersLoading || exchangesLoading;
return {
data: isLoading
diff --git a/src/hooks/useCrewShips.js b/src/hooks/useCrewShips.js
index 32eed0d1a..896f61f34 100644
--- a/src/hooks/useCrewShips.js
+++ b/src/hooks/useCrewShips.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useCrewContext from '~/hooks/useCrewContext';
import useWalletShips from '~/hooks/useWalletShips';
@@ -7,7 +7,7 @@ const useCrewShips = () => {
const { crew } = useCrewContext();
const { data, isLoading } = useWalletShips();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: crew?.id && !isLoading && Array.isArray(data)
? data.filter((a) => (a.Control?.controller?.id === crew?.id))
diff --git a/src/hooks/useDeliveries.js b/src/hooks/useDeliveries.js
index f63631672..b4eee1246 100644
--- a/src/hooks/useDeliveries.js
+++ b/src/hooks/useDeliveries.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Entity } from '@influenceth/sdk';
@@ -11,7 +11,7 @@ import { entitiesCacheKey } from '~/lib/cacheKey';
// (to avoid redundant cache data)
const useDeliveries = ({ destination, destinationSlot, origin, originSlot, status } = {}) => {
- const cacheKey = useMemo(() => {
+ const cacheKey = useMemo(import.meta.url, () => {
const k = {};
if (destination) k.destination = safeEntityId(destination);
if (origin) k.origin = safeEntityId(origin);
@@ -25,7 +25,7 @@ const useDeliveries = ({ destination, destinationSlot, origin, originSlot, statu
{ enabled: !!(destination || origin) }
);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
data: isLoading ? undefined : (rawData || []).filter((d) => {
if (destinationSlot && d.Delivery?.destSlot !== destinationSlot) return false;
if (originSlot && d.Delivery.originSlot !== originSlot) return false;
diff --git a/src/hooks/useDescriptionAnnotation.js b/src/hooks/useDescriptionAnnotation.js
index 27079f603..2a413b75e 100644
--- a/src/hooks/useDescriptionAnnotation.js
+++ b/src/hooks/useDescriptionAnnotation.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useEarliestActivity from '~/hooks/useEarliestActivity';
import useEntity from '~/hooks/useEntity';
@@ -11,7 +11,7 @@ const useDescriptionAnnotation = (entityId) => {
const { data: earliest, isLoading: activityIsLoading } = useEarliestActivity(entityId);
const { data: entity, isLoading: entityIsLoading } = useEntity(entityId);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (activityIsLoading || entityIsLoading) return { data: undefined, isLoading: true };
const annotations = earliest?._virtuals?.eventAnnotations || [];
const preferred = annotations?.filter((a) => a.crew === entity?.Control?.controller?.id);
diff --git a/src/hooks/useGetActivityConfig.js b/src/hooks/useGetActivityConfig.js
index 9361c7afc..edf0e939c 100644
--- a/src/hooks/useGetActivityConfig.js
+++ b/src/hooks/useGetActivityConfig.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQueryClient } from 'react-query';
import useCrewContext from '~/hooks/useCrewContext';
@@ -66,7 +66,7 @@ const getActivityConfig = (queryClient, defaultViewingAs) => (activity, override
const useGetActivityConfig = () => {
const queryClient = useQueryClient();
const { crew } = useCrewContext();
- return useMemo(() => getActivityConfig(queryClient, { id: crew?.id, label: crew?.label, uuid: crew?.uuid }), [crew?.id, queryClient]);
+ return useMemo(import.meta.url, () => getActivityConfig(queryClient, { id: crew?.id, label: crew?.label, uuid: crew?.uuid }), [crew?.id, queryClient]);
}
export default useGetActivityConfig;
\ No newline at end of file
diff --git a/src/hooks/useGetTime.js b/src/hooks/useGetTime.js
index 2cf104c42..a27ac5867 100644
--- a/src/hooks/useGetTime.js
+++ b/src/hooks/useGetTime.js
@@ -1,4 +1,4 @@
-import { useCallback } from 'react';
+import { useCallback } from '~/lib/react-debug';
import { Time } from '@influenceth/sdk';
import useConstants from '~/hooks/useConstants';
@@ -8,7 +8,7 @@ const useGetTime = () => {
const timeOverride = useStore(s => s.timeOverride);
const { data: TIME_ACCELERATION } = useConstants('TIME_ACCELERATION');
- return useCallback((overrideNow) => {
+ return useCallback(import.meta.url, (overrideNow) => {
const now = overrideNow || Date.now();
let preciseTime = timeOverride?.anchor || Time.fromUnixMilliseconds(now, TIME_ACCELERATION).toOrbitADays();
diff --git a/src/hooks/useHydratedCrew.js b/src/hooks/useHydratedCrew.js
index a49f3f4af..8272e5ee9 100644
--- a/src/hooks/useHydratedCrew.js
+++ b/src/hooks/useHydratedCrew.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { cloneDeep } from 'lodash';
import { Crewmate } from '@influenceth/sdk';
@@ -14,7 +14,7 @@ const useHydratedCrew = (id) => {
const { data: CREW_SCHEDULE_BUFFER, isLoading: constantsLoading } = useConstants('CREW_SCHEDULE_BUFFER');
const blockTime = useBlockTime();
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
let data = null;
let isLoading = true;
if (crew && !crewLoading && !crewmatesLoading && !constantsLoading) {
diff --git a/src/hooks/useHydratedLocation.js b/src/hooks/useHydratedLocation.js
index 083c17968..b8ae0640f 100644
--- a/src/hooks/useHydratedLocation.js
+++ b/src/hooks/useHydratedLocation.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Lot } from '@influenceth/sdk';
import { useLotLink } from '~/components/LotLink';
@@ -15,7 +15,7 @@ const useHydratedLocation = (location = {}, escapeModuleCrewId) => {
const { data: building } = useBuilding(location?.buildingId);
const { data: ship } = useShip(location?.shipId);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
asteroid,
building,
diff --git a/src/hooks/useInterval.js b/src/hooks/useInterval.js
index 0b94fe157..f5da64b12 100644
--- a/src/hooks/useInterval.js
+++ b/src/hooks/useInterval.js
@@ -1,16 +1,16 @@
// From https://overreacted.io/making-setinterval-declarative-with-react-hooks/
-import { useEffect, useRef } from 'react';
+import { useEffect, useRef } from '~/lib/react-debug';
const useInterval = (callback, delay) => {
const savedCallback = useRef();
// Remember the latest callback.
- useEffect(() => {
+ useEffect(import.meta.url, () => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
- useEffect(() => {
+ useEffect(import.meta.url, () => {
function tick() {
savedCallback.current();
}
diff --git a/src/hooks/useLot.js b/src/hooks/useLot.js
index 4d8fcebe6..7cc94e313 100644
--- a/src/hooks/useLot.js
+++ b/src/hooks/useLot.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo } from 'react';
+import { useEffect, useMemo } from '~/lib/react-debug';
import { useQuery, useQueryClient, } from 'react-query';
import { Entity, Lot, Permission, Ship } from '@influenceth/sdk';
@@ -25,7 +25,7 @@ const useLot = (rawLotId) => {
const queryClient = useQueryClient();
// console.log('lotId', typeof lotId, lotId, lotId ? Entity.formatEntity({ id: lotId, label: Entity.IDS.LOT }) : null)
- const lotEntity = useMemo(() => lotId ? Entity.formatEntity({ id: lotId, label: Entity.IDS.LOT }) : null, [lotId]);
+ const lotEntity = useMemo(import.meta.url, () => lotId ? Entity.formatEntity({ id: lotId, label: Entity.IDS.LOT }) : null, [lotId]);
// console.log('lotId', { lotId, lotEntity });
const { data: lot, isLoading: lotIsLoading, dataUpdatedAt: lUpdatedAt } = useEntity(lotId ? { id: lotId, label: Entity.IDS.LOT } : undefined);
@@ -72,7 +72,7 @@ const useLot = (rawLotId) => {
const isLoading = lotEntity?.uuid && (lotIsLoading || lotDataIsLoading || asteroidLoading || buildingsLoading || depositsLoading || shipsLoading);
const objArrDataUpdatedAt = Math.max(bUpdatedAt, dUpdatedAt, lUpdatedAt, sUpdatedAt);
- const data = useMemo(() => {
+ const data = useMemo(import.meta.url, () => {
if (isLoading || !lotEntity?.uuid) return undefined;
const { asteroidId, lotIndex } = Lot.toPosition(lotId) || {};
@@ -125,7 +125,7 @@ const useLot = (rawLotId) => {
};
}, [lotEntity?.uuid, isLoading, asteroid, blockTime, buildings, deposits, ships, objArrDataUpdatedAt]);
- return useMemo(() => ({ data, isLoading }), [data, isLoading]);
+ return useMemo(import.meta.url, () => ({ data, isLoading }), [data, isLoading]);
};
export default useLot;
diff --git a/src/hooks/useMappedAsteroidLots.js b/src/hooks/useMappedAsteroidLots.js
index f06b11635..ec44ae2bf 100644
--- a/src/hooks/useMappedAsteroidLots.js
+++ b/src/hooks/useMappedAsteroidLots.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from '~/lib/react-debug';
import { useQueryClient } from 'react-query';
import { Building, Entity, Lot } from '@influenceth/sdk';
@@ -30,14 +30,14 @@ const useMappedAsteroidLots = (i) => {
// get all leased lots from the server
const { data: leasedLots, isLoading: leasedLotsLoading, dataUpdatedAt: dataUpdatedAt1 } = useWalletLeasedLots(i);
- const [lotLeasedMap, leasedTally] = useMemo(() => ([
+ const [lotLeasedMap, leasedTally] = useMemo(import.meta.url, () => ([
(leasedLots || []).reduce((acc, d) => ({ ...acc, [Lot.toIndex(d.id)]: true }), {}),
leasedLots?.length || 0
]), [leasedLots, dataUpdatedAt1]);
// get all occupied-by-me buildings from the server
const { data: crewLots, isLoading: crewLotsLoading, dataUpdatedAt: dataUpdatedAt2 } = useAsteroidCrewBuildings(i);
- const myOccupationMap = useMemo(() => {
+ const myOccupationMap = useMemo(import.meta.url, () => {
if (crewLotsLoading) return null;
return (crewLots || []).reduce((acc, p) => {
const _locations = locationsArrToObj(p?.Location?.locations || []);
@@ -50,7 +50,7 @@ const useMappedAsteroidLots = (i) => {
// get all occupied-by-me ships from the server
const { data: crewShips, isLoading: crewShipsLoading, dataUpdatedAt: dataUpdatedAt3 } = useCrewShips();
- const myShipMap = useMemo(() => {
+ const myShipMap = useMemo(import.meta.url, () => {
if (crewShipsLoading) return null;
return (crewShips || []).reduce((acc, p) => {
const _locations = locationsArrToObj(p?.Location?.locations || []);
@@ -62,12 +62,12 @@ const useMappedAsteroidLots = (i) => {
}, [crewShips, crewShipsLoading, dataUpdatedAt3]);
// determine if search is on or not
- const searchIsOn = useMemo(() => {
+ const searchIsOn = useMemo(import.meta.url, () => {
return openHudMenu === 'ASTEROID_MAP_SEARCH' || !isAssetSearchMatchingDefault('lotsMapped');
}, [openHudMenu, mappedLotSearch]);
// init highlight config helpers
- const { highlightValueMap, highlightColorMap } = useMemo(() => {
+ const { highlightValueMap, highlightColorMap } = useMemo(import.meta.url, () => {
let colorMap;
let valueMap = {};
if (highlightConfig) {
@@ -88,7 +88,7 @@ const useMappedAsteroidLots = (i) => {
}, [highlightConfig, searchIsOn]);
// create "search results" test function
- const isFilterMatch = useCallback((unpacked) => {
+ const isFilterMatch = useCallback(import.meta.url, (unpacked) => {
const filters = mappedLotSearch?.filters || {};
if (searchIsOn) {
if (filters.category && !filters.category.includes(unpacked.category.toString())) return false;
@@ -104,7 +104,7 @@ const useMappedAsteroidLots = (i) => {
// build sparse array of search results
// TODO (enhancement): should send this to a worker if possible
- const [lotResultMap, lotUseMap, lotColorMap, lotUseTallies, resultTally] = useMemo(() => {
+ const [lotResultMap, lotUseMap, lotColorMap, lotUseTallies, resultTally] = useMemo(import.meta.url, () => {
const lotResult = {};
const lotColor = {};
const lotUse = {};
@@ -168,11 +168,11 @@ const useMappedAsteroidLots = (i) => {
return [lotResult, lotUse, lotColor, lotUseTallies, resultTally];
}, [lotData, lotDataUpdatedAt, myOccupationMap, myShipMap, isFilterMatch, highlightValueMap, rebuildTally]);
- const refetch = useCallback(() => {
+ const refetch = useCallback(import.meta.url, () => {
setRebuildTally((t) => t + 1);
}, [])
- const processEvent = useCallback(async (eventType, body) => {
+ const processEvent = useCallback(import.meta.url, async (eventType, body) => {
console.log('processEvent', eventType, body);
let asteroidId, lotIndex, buildingCategory;
@@ -245,7 +245,7 @@ const useMappedAsteroidLots = (i) => {
const isLoading = lotDataLoading || leasedLotsLoading || crewLotsLoading;
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: {
lotUseTallies,
diff --git a/src/hooks/useNameAvailability.js b/src/hooks/useNameAvailability.js
index b0249ba5d..96d33b450 100644
--- a/src/hooks/useNameAvailability.js
+++ b/src/hooks/useNameAvailability.js
@@ -1,4 +1,4 @@
-import { useCallback } from 'react';
+import { useCallback } from '~/lib/react-debug';
import { Entity, Name } from '@influenceth/sdk';
import api from '~/lib/api';
@@ -7,7 +7,7 @@ import useStore from './useStore';
const useNameAvailability = (entity) => {
const createAlert = useStore(s => s.dispatchAlertLogged);
- const getNameAvailability = useCallback(async (name, entityId, skipCollisionCheck = false, returnType = 'alert') => {
+ const getNameAvailability = useCallback(import.meta.url, async (name, entityId, skipCollisionCheck = false, returnType = 'alert') => {
try {
let nameError = null;
diff --git a/src/hooks/useOrderSummaryByMarket.js b/src/hooks/useOrderSummaryByMarket.js
index 53d0b5ada..078c255cb 100644
--- a/src/hooks/useOrderSummaryByMarket.js
+++ b/src/hooks/useOrderSummaryByMarket.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import useAsteroidBuildings from '~/hooks/useAsteroidBuildings';
@@ -14,7 +14,7 @@ const useOrderSummaryByExchange = (asteroidId, product) => {
);
const isLoading = isLoadingBuildings || isLoadingOrders;
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (isLoading) return { data: undefined, isLoading: true };
return {
data: exchanges
diff --git a/src/hooks/usePagedActionItems.js b/src/hooks/usePagedActionItems.js
index 461dc1cc1..ce295651e 100644
--- a/src/hooks/usePagedActionItems.js
+++ b/src/hooks/usePagedActionItems.js
@@ -1,4 +1,4 @@
-import { useContext, useEffect, useMemo, useState } from 'react';
+import { useContext, useEffect, useMemo, useState } from '~/lib/react-debug';
import ActionItemContext from '~/contexts/ActionItemContext';
import { formatActionItem } from '~/lib/actionItem';
@@ -24,11 +24,11 @@ const usePagedActionItems = () => {
const sort = useStore(s => s.assetSearch[assetType].sort || []);
const setSort = useStore(s => s.dispatchSortUpdated(assetType));
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setPage(1);
}, [filters, sort]);
- const { hits, total } = useMemo(() => {
+ const { hits, total } = useMemo(import.meta.url, () => {
const filteredItems = allItems
.map((item) => formatActionItem(item, getActivityConfig(item)?.actionItem))
.filter((item) => {
diff --git a/src/hooks/usePagedAgreements.js b/src/hooks/usePagedAgreements.js
index bccf0870a..0111073e4 100644
--- a/src/hooks/usePagedAgreements.js
+++ b/src/hooks/usePagedAgreements.js
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useRef, useState } from 'react';
+import { useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import get from 'lodash/get';
import { Entity, Lot } from '@influenceth/sdk';
@@ -23,13 +23,13 @@ const usePagedAgreements = (params) => {
const updateFilters = useStore(s => s.dispatchFiltersUpdated(assetType));
const setSort = useStore(s => s.dispatchSortUpdated(assetType));
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setPage(1);
}, [filters, sort]);
// override perm filter from url, but reset to pre-existing on unmount
const previousPermFilter = useRef();
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (params.permission) {
previousPermFilter.current = filters.permission;
@@ -52,7 +52,7 @@ const usePagedAgreements = (params) => {
const isLoading = params.uuid ? entityLoading : crewAgreementsLoading;
- const data = useMemo(() => {
+ const data = useMemo(import.meta.url, () => {
if (isLoading) return undefined;
if (!params.uuid && crewAgreements) return crewAgreements;
if (params.uuid && entity) {
@@ -64,7 +64,7 @@ const usePagedAgreements = (params) => {
}, [asteroid, crewAgreements, dataUpdatedAt, entity, isLoading, params.permission, params.uuid]);
// TODO: should almost certainly move filter application into elasticsearch instead of loading all upfront
- const filteredData = useMemo(() => {
+ const filteredData = useMemo(import.meta.url, () => {
return (data || [])
.filter((a) => {
if (filters.permission) {
@@ -88,7 +88,7 @@ const usePagedAgreements = (params) => {
.sort((a, b) => (sort[1] === 'asc' ? 1 : -1) * (get(a, sort[0]) < get(b, sort[0]) ? -1 : 1));
}, [blockTime, crew, data, sort, filters]);
- const dataPage = useMemo(() => filteredData.slice(pageSize * (page - 1), pageSize * page), [filteredData, page])
+ const dataPage = useMemo(import.meta.url, () => filteredData.slice(pageSize * (page - 1), pageSize * page), [filteredData, page])
return {
page,
diff --git a/src/hooks/usePagedAssets.js b/src/hooks/usePagedAssets.js
index 1e4f7688e..a63ce20d8 100644
--- a/src/hooks/usePagedAssets.js
+++ b/src/hooks/usePagedAssets.js
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState } from '~/lib/react-debug';
import useStore from '~/hooks/useStore';
import useAssetSearch from './useAssetSearch';
@@ -12,7 +12,7 @@ const usePagedAssets = (assetType) => {
const sort = useStore(s => s.assetSearch[assetType].sort || []);
const setSort = useStore(s => s.dispatchSortUpdated(assetType));
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setPage(1);
}, [filters, sort]);
diff --git a/src/hooks/usePagedEvents.js b/src/hooks/usePagedEvents.js
index e335dc603..f7c2d2847 100644
--- a/src/hooks/usePagedEvents.js
+++ b/src/hooks/usePagedEvents.js
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState } from '~/lib/react-debug';
import { useQueryClient } from 'react-query';
import { hydrateActivities, typesWithLogContent } from '~/lib/activities';
@@ -22,11 +22,11 @@ const usePagedEvents = () => {
const sort = useStore(s => s.assetSearch[assetType].sort || []);
const setSort = useStore(s => s.dispatchSortUpdated(assetType));
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setPage(1);
}, [filters, sort]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setLoading(true);
// TODO (enhancement): if not using any filters, should probably use react-query here...
diff --git a/src/hooks/usePriceHelper.js b/src/hooks/usePriceHelper.js
index abbd37e90..a3f937bb9 100644
--- a/src/hooks/usePriceHelper.js
+++ b/src/hooks/usePriceHelper.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo } from 'react';
+import { useCallback, useMemo } from '~/lib/react-debug';
import { useSwayPerUsdc, useUsdcPerEth } from '~/hooks/useSwapQuote';
import { TOKEN, TOKEN_FORMATTER, TOKEN_SCALE } from '~/lib/priceUtils';
@@ -41,7 +41,7 @@ const usePriceHelper = () => {
const { data: swayPerUsdc } = useSwayPerUsdc();
const { data: usdcPerEth } = useUsdcPerEth();
- const from = useCallback((value, originToken) => {
+ const from = useCallback(import.meta.url, (value, originToken) => {
return Price.from(
value,
originToken,
@@ -52,7 +52,7 @@ const usePriceHelper = () => {
);
}, [swayPerUsdc, usdcPerEth]);
- return useMemo(() => ({ from }), [from]);
+ return useMemo(import.meta.url, () => ({ from }), [from]);
};
export default usePriceHelper;
\ No newline at end of file
diff --git a/src/hooks/useReadyAtWatcher.js b/src/hooks/useReadyAtWatcher.js
index e0eca7b6a..4a5c13b77 100644
--- a/src/hooks/useReadyAtWatcher.js
+++ b/src/hooks/useReadyAtWatcher.js
@@ -1,9 +1,9 @@
-import { useEffect, useState } from 'react';
+import { useEffect, useState } from '~/lib/react-debug';
const useReadyAtWatcher = (readyAt) => {
const [ready, setReady] = useState(true);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
let to;
if (readyAt > 0) {
const now = Date.now();
diff --git a/src/hooks/useScreenSize.js b/src/hooks/useScreenSize.js
index 5c55a50ac..be2e2b2a1 100644
--- a/src/hooks/useScreenSize.js
+++ b/src/hooks/useScreenSize.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import ScreensizeContext from '~/contexts/ScreensizeContext';
diff --git a/src/hooks/useServiceWorker.js b/src/hooks/useServiceWorker.js
index 6058c4aff..16bb7aafd 100644
--- a/src/hooks/useServiceWorker.js
+++ b/src/hooks/useServiceWorker.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
+import { useCallback, useEffect, useRef, useState } from '~/lib/react-debug';
const useServiceWorker = () => {
// no service worker in dev mode, so don't default to "installing" in that case
@@ -6,7 +6,7 @@ const useServiceWorker = () => {
const [updateNeeded, setUpdateNeeded] = useState(false);
const refreshing = useRef(false);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if ('serviceWorker' in navigator) {
// if there is a controller change (i.e. if new serviceworker becomes active),
@@ -75,7 +75,7 @@ const useServiceWorker = () => {
return {
isInstalling,
updateNeeded,
- onUpdateVersion: useCallback(() => {
+ onUpdateVersion: useCallback(import.meta.url, () => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.getRegistration().then((registration) => {
if (registration && registration.waiting) {
diff --git a/src/hooks/useSession.js b/src/hooks/useSession.js
index 69ba53176..9bc863c12 100644
--- a/src/hooks/useSession.js
+++ b/src/hooks/useSession.js
@@ -1,4 +1,4 @@
-import { useContext, useMemo } from 'react';
+import { useContext, useMemo } from '~/lib/react-debug';
import SessionContext from '~/contexts/SessionContext';
import SIMULATION_CONFIG from '~/simulation/simulationConfig';
@@ -12,7 +12,7 @@ const useSession = (includeSimulationOverrides = true) => {
const simulationEnabled = useStore(s => s.simulationEnabled);
const simulationState = useStore(s => s.simulation);
- const [simulationOverrides, overrideBlockTime] = useMemo(() => {
+ const [simulationOverrides, overrideBlockTime] = useMemo(import.meta.url, () => {
if (includeSimulationOverrides && simulationEnabled && !context?.accountAddress) {
return [
simulationState,
@@ -22,7 +22,7 @@ const useSession = (includeSimulationOverrides = true) => {
return [null, null];
}, [context?.accountAddress, includeSimulationOverrides, simulationEnabled, simulationState]);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (simulationOverrides) {
return {
...context,
diff --git a/src/hooks/useSettleCrew.js b/src/hooks/useSettleCrew.js
index 90d89512b..70a89e0f5 100644
--- a/src/hooks/useSettleCrew.js
+++ b/src/hooks/useSettleCrew.js
@@ -1,16 +1,16 @@
-import { useCallback, useContext, useMemo } from 'react';
+import { useCallback, useContext, useMemo } from '~/lib/react-debug';
import ChainTransactionContext from '~/contexts/ChainTransactionContext';
const useSettleCrew = (i) => {
const { execute, getStatus } = useContext(ChainTransactionContext);
- const settleCrew = useCallback(
+ const settleCrew = useCallback(import.meta.url,
() => execute('SETTLE_CREW', { i }),
[execute, i]
);
- const status = useMemo(
+ const status = useMemo(import.meta.url,
() => getStatus('SETTLE_CREW', { i }),
[getStatus, i]
);
diff --git a/src/hooks/useShip.js b/src/hooks/useShip.js
index 5b7557e0f..144de26ff 100644
--- a/src/hooks/useShip.js
+++ b/src/hooks/useShip.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { cloneDeep } from 'lodash';
import { Entity } from '@influenceth/sdk';
@@ -6,7 +6,7 @@ import useEntity from '~/hooks/useEntity';
import { locationsArrToObj } from '~/lib/utils';
const useShip = (id) => {
- const entity = useMemo(() => {
+ const entity = useMemo(import.meta.url, () => {
if (id) {
if (id.label && id.id) return { label: id.label, id: Number(id.id) };
return { label: Entity.IDS.SHIP, id };
@@ -15,7 +15,7 @@ const useShip = (id) => {
}, [id]);
const { data, dataUpdatedAt, isLoading, refetch } = useEntity(entity);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
let ship = null;
if (data && !isLoading) {
ship = cloneDeep(data);
diff --git a/src/hooks/useShoppingListData.js b/src/hooks/useShoppingListData.js
index 221f9221e..fe20737cf 100644
--- a/src/hooks/useShoppingListData.js
+++ b/src/hooks/useShoppingListData.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { Asteroid, Crew, Crewmate, Lot, Permission } from '@influenceth/sdk';
import useAsteroidBuildings from '~/hooks/useAsteroidBuildings';
@@ -18,7 +18,7 @@ const useShoppingListData = (asteroidId, lotId, productIds, mode = 'buy') => {
// TODO: how much effort would it be to include feeEnforcement in elasticsearch on exchanges
const [feeEnforcements, setFeeEnforcements] = useState();
const [feesLoading, setFeesLoading] = useState(true);
- const loadFees = useCallback(async () => {
+ const loadFees = useCallback(import.meta.url, async () => {
const ids = (exchanges || []).map((e) => e.Control?.controller?.id);
if (ids?.length > 0) {
setFeesLoading(true);
@@ -50,14 +50,14 @@ const useShoppingListData = (asteroidId, lotId, productIds, mode = 'buy') => {
}
setFeesLoading(false);
}, [exchangesUpdatedAt]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
loadFees();
}, [loadFees]);
const { data: orders, isLoading: ordersLoading, refetch: refetchOrders } = useShoppingListOrders(asteroidId, productIds, mode);
const isLoading = exchangesLoading || feesLoading || ordersLoading;
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
const refetch = () => {
refetchExchanges();
refetchOrders();
diff --git a/src/hooks/useSimulationState.js b/src/hooks/useSimulationState.js
index aad7bd804..c74af6908 100644
--- a/src/hooks/useSimulationState.js
+++ b/src/hooks/useSimulationState.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import useSession from '~/hooks/useSession';
import useStore from '~/hooks/useStore';
@@ -7,7 +7,7 @@ const useSimulationState = () => {
const simulationEnabled = useStore(s => s.simulationEnabled);
const simulationState = useStore(s => s.simulation);
- return useMemo(
+ return useMemo(import.meta.url,
() => !accountAddress && simulationEnabled ? simulationState : null,
[accountAddress, simulationEnabled, simulationState]
);
diff --git a/src/hooks/useStationedCrews.js b/src/hooks/useStationedCrews.js
index df150ff99..0c729977f 100644
--- a/src/hooks/useStationedCrews.js
+++ b/src/hooks/useStationedCrews.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Entity } from '@influenceth/sdk';
@@ -7,14 +7,14 @@ import { entitiesCacheKey } from '~/lib/cacheKey';
import { locationsArrToObj } from '~/lib/utils';
const useStationedCrews = (entityId) => {
- const entityUuid = useMemo(() => entityId ? Entity.packEntity(entityId) : undefined, [entityId]);
+ const entityUuid = useMemo(import.meta.url, () => entityId ? Entity.packEntity(entityId) : undefined, [entityId]);
const { data: stationedCrews, isLoading: crewsLoading, dataUpdatedAt: crewsUpdatedAt } = useQuery(
entitiesCacheKey(Entity.IDS.CREW, { stationUuid: entityUuid }),
() => api.getEntities({ match: { 'Location.location.uuid': entityUuid }, label: Entity.IDS.CREW }),
{ enabled: !!entityUuid }
);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (crewsLoading) {
return { data: undefined, isLoading: true };
}
diff --git a/src/hooks/useSwapHelper.js b/src/hooks/useSwapHelper.js
index f0a31b7c7..2c7fa6e39 100644
--- a/src/hooks/useSwapHelper.js
+++ b/src/hooks/useSwapHelper.js
@@ -1,4 +1,4 @@
-import { useCallback, useMemo } from 'react';
+import { useCallback, useMemo } from '~/lib/react-debug';
import { fetchBuildExecuteTransaction } from '@avnu/avnu-sdk';
import useStore from '~/hooks/useStore';
@@ -17,7 +17,7 @@ const useSwapHelper = () => {
const priceHelper = usePriceHelper();
const preferredUiCurrency = useStore(s => s.getPreferredUiCurrency());
- const buildMultiswapFromSellAmount = useCallback(async (sellAmountUSDC, targetToken, allowableSlippage = 0.1) => {
+ const buildMultiswapFromSellAmount = useCallback(import.meta.url, async (sellAmountUSDC, targetToken, allowableSlippage = 0.1) => {
const swappableTokens = Object.keys(wallet?.tokenBalances).filter((t) => t !== targetToken);
swappableTokens.sort((a) => a === preferredUiCurrency ? -1 : 1);
@@ -59,7 +59,7 @@ const useSwapHelper = () => {
return calls;
}, [wallet]);
- return useMemo(
+ return useMemo(import.meta.url,
() => ({ buildMultiswapFromSellAmount }),
[buildMultiswapFromSellAmount]
);
diff --git a/src/hooks/useSyncedTime.js b/src/hooks/useSyncedTime.js
index 466597473..800d84523 100644
--- a/src/hooks/useSyncedTime.js
+++ b/src/hooks/useSyncedTime.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import SyncedTimeContext from '~/contexts/SyncedTimeContext';
@@ -6,7 +6,7 @@ const useSyncedTime = () => {
return useContext(SyncedTimeContext);
// const [time, setTime] = useState(getSeconds());
- // useEffect(() => {
+ // useEffect(import.meta.url, () => {
// // on nearest second, start the interval
// let to, int;
// to = setTimeout(() => {
diff --git a/src/hooks/useTravelSolutionIsValid.js b/src/hooks/useTravelSolutionIsValid.js
index 5a9408a15..b01cf3e09 100644
--- a/src/hooks/useTravelSolutionIsValid.js
+++ b/src/hooks/useTravelSolutionIsValid.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Crewmate, Ship, Time } from '@influenceth/sdk';
import useCrewContext from './useCrewContext';
@@ -14,11 +14,11 @@ const useTravelSolutionIsValid = () => {
const { data: ship } = useShip(shipId);
const travelSolution = useStore(s => s.asteroids.travelSolution);
- const exhaustBonus = useMemo(() => {
+ const exhaustBonus = useMemo(import.meta.url, () => {
return getCrewAbilityBonuses(Crewmate.ABILITY_IDS.PROPELLANT_EXHAUST_VELOCITY, crew);
}, [crew]);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (!travelSolution) return false;
if (travelSolution._isSimulation) return !travelSolution._isSimulationInvalid;
diff --git a/src/hooks/useTutorialSteps.js b/src/hooks/useTutorialSteps.js
index c3419e533..960bae199 100644
--- a/src/hooks/useTutorialSteps.js
+++ b/src/hooks/useTutorialSteps.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo } from 'react';
+import { useCallback, useEffect, useMemo } from '~/lib/react-debug';
import { FaYoutube as YoutubeIcon } from 'react-icons/fa';
import { Building, Permission, Inventory, Product } from '@influenceth/sdk';
@@ -44,7 +44,7 @@ const VideoLink = styled.div`
`;
const TutorialVideoLink = ({ link }) => {
- const onClick = useCallback(() => {
+ const onClick = useCallback(import.meta.url, () => {
window.open(link, '_blank');
}, [link]);
return (
@@ -68,14 +68,14 @@ const useTutorialSteps = () => {
const dispatchDismissCrewTutorial = useStore(s => s.dispatchDismissCrewTutorial);
const dispatchDismissCrewTutorialStep = useStore(s => s.dispatchDismissCrewTutorialStep);
- const dismissedTutorialSteps = useMemo(() => {
+ const dismissedTutorialSteps = useMemo(import.meta.url, () => {
const dismissed = new Set();
(crewTutorial?.dismissedSteps || []).forEach((s) => dismissed.add(s));
(uncrewTutorial?.dismissedSteps || []).forEach((s) => dismissed.add(s));
return Array.from(dismissed);
}, [crewTutorial?.dismissedSteps, uncrewTutorial?.dismissedSteps]);
- const tutorialSteps = useMemo(() => {
+ const tutorialSteps = useMemo(import.meta.url, () => {
if (loading) return [];
const lotLease = crewAgreements?.find((a) => a.permission === Permission.IDS.USE_LOT);
@@ -318,7 +318,7 @@ const useTutorialSteps = () => {
];
}, [crew, crewDeposits, loading, crewAgreements, crewBuildings]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
tutorialSteps.forEach((s) => {
if (s.postcondition && !dismissedTutorialSteps.includes(s.key)) {
// if postcondition is true (and not dismissed), then dismiss
@@ -328,7 +328,7 @@ const useTutorialSteps = () => {
});
}, [crew?.id, dismissedTutorialSteps, tutorialSteps]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!loading) {
if (Object.keys(tutorialSteps).length === dismissedTutorialSteps?.length) {
dispatchDismissCrewTutorial(crew?.id, true);
@@ -336,7 +336,7 @@ const useTutorialSteps = () => {
}
}, [crew?.id, dispatchDismissCrewTutorial, dismissedTutorialSteps, loading])
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return tutorialSteps.filter((s) => {
return s.precondition && !dismissedTutorialSteps.includes((s.key))
})
diff --git a/src/hooks/useWalletAgreements.js b/src/hooks/useWalletAgreements.js
index 4a6c0598b..baf7ade3d 100644
--- a/src/hooks/useWalletAgreements.js
+++ b/src/hooks/useWalletAgreements.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import useSession from '~/hooks/useSession';
@@ -9,7 +9,7 @@ const useWalletAgreements = () => {
const { accountAddress } = useSession();
const { crews, loading: crewsLoading } = useCrewContext();
- const crewIds = useMemo(() => {
+ const crewIds = useMemo(import.meta.url, () => {
if (crewsLoading) return null;
return (crews || []).map((c) => c.id);
}, [crews, crewsLoading]);
diff --git a/src/hooks/useWalletAsteroids.js b/src/hooks/useWalletAsteroids.js
index c756d6ea9..4d9dcf17d 100644
--- a/src/hooks/useWalletAsteroids.js
+++ b/src/hooks/useWalletAsteroids.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import esb from 'elastic-builder';
import { Entity } from '@influenceth/sdk';
@@ -12,9 +12,9 @@ const useWalletAsteroids = () => {
const { accountAddress } = useSession();
const { crews, loading: crewsLoading } = useCrewContext();
- const controllerIds = useMemo(() => (crews || []).map((c) => c.id), [crews]);
+ const controllerIds = useMemo(import.meta.url, () => (crews || []).map((c) => c.id), [crews]);
- const query = useMemo(() => {
+ const query = useMemo(import.meta.url, () => {
if (!accountAddress || crewsLoading) return null;
try {
diff --git a/src/hooks/useWalletBuildings.js b/src/hooks/useWalletBuildings.js
index 8ea0cf400..7764dfec8 100644
--- a/src/hooks/useWalletBuildings.js
+++ b/src/hooks/useWalletBuildings.js
@@ -5,7 +5,7 @@ import useSession from '~/hooks/useSession';
import useCrewContext from '~/hooks/useCrewContext';
import api from '~/lib/api';
import { useQuery } from 'react-query';
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { entitiesCacheKey } from '~/lib/cacheKey';
export const statuses = [
@@ -18,9 +18,9 @@ const useWalletBuildings = () => {
const { accountAddress } = useSession();
const { crews, loading: crewsLoading } = useCrewContext();
- const controllerIds = useMemo(() => (crews || []).map((c) => c.id), [crews]);
+ const controllerIds = useMemo(import.meta.url, () => (crews || []).map((c) => c.id), [crews]);
- const query = useMemo(() => {
+ const query = useMemo(import.meta.url, () => {
if (!accountAddress || crewsLoading) return null;
try {
diff --git a/src/hooks/useWalletLeasedLots.js b/src/hooks/useWalletLeasedLots.js
index 4b366de32..e52b2fc2f 100644
--- a/src/hooks/useWalletLeasedLots.js
+++ b/src/hooks/useWalletLeasedLots.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { Permission } from '@influenceth/sdk';
import useCrewContext from '~/hooks/useCrewContext';
@@ -10,12 +10,12 @@ const useWalletLeasedLots = (asteroidId, enabled = true) => {
const { crews, loading: crewsLoading } = useCrewContext();
const { data, isLoading: dataLoading } = useWalletAgreements();
- const crewIds = useMemo(() => {
+ const crewIds = useMemo(import.meta.url, () => {
if (crewsLoading) return [];
return (crews || []).map((c) => c.id);
}, [crews, crewsLoading]);
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
return {
data: enabled && data
? data?.filter((a) => (
diff --git a/src/hooks/useWalletPurchasableBalances.js b/src/hooks/useWalletPurchasableBalances.js
index d84d63186..de0dd0cd7 100644
--- a/src/hooks/useWalletPurchasableBalances.js
+++ b/src/hooks/useWalletPurchasableBalances.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import usePriceConstants from '~/hooks/usePriceConstants';
import usePriceHelper from '~/hooks/usePriceHelper';
@@ -27,13 +27,13 @@ const useWalletPurchasableBalances = (overrideAccount) => {
// reserve eth for gas if not planning to use sway
// or have <10% of target reserve amount available in sway
- const maintainEthGasReserve = useMemo(() => {
+ const maintainEthGasReserve = useMemo(import.meta.url, () => {
const targetSwayReserve = priceHelper.from(GAS_BUFFER_VALUE_USDC * 0.1, TOKEN.USDC).to(TOKEN.SWAY);
// reserve needed if setting is to pay w/ sway AND have sway
return !(payGasWithSwayIfPossible && swayBalance > targetSwayReserve)
}, [payGasWithSwayIfPossible, priceHelper, swayBalance]);
- const ethGasReserveBalance = useMemo(() => {
+ const ethGasReserveBalance = useMemo(import.meta.url, () => {
if (maintainEthGasReserve && ethBalance) {
const ethValueInUSDC = Math.floor(priceHelper.from(ethBalance, TOKEN.ETH)?.usdcValue);
return priceHelper.from(Math.min(ethValueInUSDC, GAS_BUFFER_VALUE_USDC), TOKEN.USDC);
@@ -43,7 +43,7 @@ const useWalletPurchasableBalances = (overrideAccount) => {
// NOTE: do not add SWAY here unless want SWAY to be auto-swappable for
// purchases (i.e. crewmates, starter packs, etc)
- const swappableTokenBalances = useMemo(() => {
+ const swappableTokenBalances = useMemo(import.meta.url, () => {
const allTokens = {
[TOKEN.ETH]: ethBalance ? (ethBalance - safeBigInt(Math.floor(ethGasReserveBalance.to(TOKEN.ETH)))) : 0n,
[TOKEN.USDC]: usdcBalance || 0n
@@ -54,7 +54,7 @@ const useWalletPurchasableBalances = (overrideAccount) => {
}, [autoswap, baseToken, ethBalance, ethGasReserveBalance, usdcBalance]);
const isLoading = isLoading1 || isLoading2 || isLoading3;
- return useMemo(() => {
+ return useMemo(import.meta.url, () => {
if (isLoading) return { data: null, refetch: () => {}, isLoading: true };
const combinedBalance = priceHelper.from(0n);
diff --git a/src/hooks/useWalletShips.js b/src/hooks/useWalletShips.js
index b3ce26a48..465cb120b 100644
--- a/src/hooks/useWalletShips.js
+++ b/src/hooks/useWalletShips.js
@@ -5,7 +5,7 @@ import useSession from '~/hooks/useSession';
import useCrewContext from '~/hooks/useCrewContext';
import api from '~/lib/api';
import { useQuery } from 'react-query';
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { entitiesCacheKey } from '~/lib/cacheKey';
// TODO: should we filter out disabled ships? not a thing yet
@@ -15,9 +15,9 @@ const useWalletShips = () => {
const { accountAddress } = useSession();
const { crews, loading: crewsLoading } = useCrewContext();
- const controllerIds = useMemo(() => (crews || []).map((c) => c.id), [crews]);
+ const controllerIds = useMemo(import.meta.url, () => (crews || []).map((c) => c.id), [crews]);
- const query = useMemo(() => {
+ const query = useMemo(import.meta.url, () => {
if (!accountAddress || crewsLoading) return null;
try {
diff --git a/src/hooks/useWatchlist.js b/src/hooks/useWatchlist.js
index 374cdfb12..3bcedc285 100644
--- a/src/hooks/useWatchlist.js
+++ b/src/hooks/useWatchlist.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import { useQuery } from 'react-query';
import { Entity } from '@influenceth/sdk';
@@ -17,7 +17,7 @@ const useWatchlist = () => {
{ enabled: !!token }
);
- const ids = useMemo(() => {
+ const ids = useMemo(import.meta.url, () => {
if (watchlist.data) return watchlist.data.map(w => w.id);
return [];
}, [watchlist.data, watchlist.dataUpdatedAt]);
diff --git a/src/hooks/useWebWorker.js b/src/hooks/useWebWorker.js
index dace210e6..978c49df8 100644
--- a/src/hooks/useWebWorker.js
+++ b/src/hooks/useWebWorker.js
@@ -1,4 +1,4 @@
-import { useMemo } from 'react';
+import { useMemo } from '~/lib/react-debug';
import Worker from 'worker-loader!../worker'; // eslint-disable-line
@@ -110,7 +110,7 @@ const totalWorkers = (navigator?.hardwareConcurrency || 4) - 1; // CPUs minus 1
const workerThreadPool = new WorkerThreadPool(totalWorkers);
const useWebWorker = () => {
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
broadcast: (message) => workerThreadPool.broadcast(message),
processInBackground: (message, callback, transfer) => workerThreadPool.addToQueue(message, callback, transfer),
cancelBackgroundProcesses: (filterFunc) => workerThreadPool.removeFromQueue(filterFunc)
diff --git a/src/hooks/useWebsocket.js b/src/hooks/useWebsocket.js
index dfa1d249d..2fcf68b46 100644
--- a/src/hooks/useWebsocket.js
+++ b/src/hooks/useWebsocket.js
@@ -1,4 +1,4 @@
-import { useContext } from 'react';
+import { useContext } from '~/lib/react-debug';
import WebsocketContext from '~/contexts/WebsocketContext';
diff --git a/src/index.js b/src/index.js
index 485f89084..99b17e089 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,4 +1,4 @@
-import { Suspense } from 'react';
+import { Suspense } from '~/lib/react-debug';
import { createRoot } from 'react-dom/client';
import { QueryClient, QueryClientProvider } from 'react-query';
import LoadingAnimation from 'react-spinners/PropagateLoader';
diff --git a/src/lib/react-debug.js b/src/lib/react-debug.js
new file mode 100644
index 000000000..9cf68c7bd
--- /dev/null
+++ b/src/lib/react-debug.js
@@ -0,0 +1,64 @@
+import * as React from 'react';
+
+// TO USE THIS:
+// - search and replace all `useCallback (` with `useCallback (import.meta.url, ` [*** remove spaces ***]
+// - search and replace all `useEffect (` with `useEffect (import.meta.url, ` [*** remove spaces ***]
+// - search and replace all `useLayoutEffect (` with `useLayoutEffect (import.meta.url, ` [*** remove spaces ***]
+// - search and replace all `useMemo (` with `useMemo (import.meta.url, ` [*** remove spaces ***]
+// - search and replace all `from ' react'` with `from ' ~/lib/react-debug'` [*** remove spaces ***]
+// - (fix this file if the React.use* were overwritten below or import above)
+
+// TO UN-USE THIS:
+// - search and replace all `( import.meta.url, ` with `(` [*** remove space ***]
+// - search and replace all `from ' ~/lib/react-debug'` with `from ' react'` [*** remove spaces ***]
+
+
+const enableLogs = false;
+
+const cleanse = (filename) => {
+ return filename.split('/src')[1];
+}
+
+const useCallbackDebug = (fileName, callback, dependencies) => {
+ return React.useMemo (() => {
+ if (enableLogs) console.log('useCallback', cleanse(fileName), dependencies.length);
+ return callback;
+ }, [...dependencies]);
+};
+
+const useEffectDebug = (fileName, callback, dependencies) => {
+ return React.useEffect (() => {
+ if (enableLogs) console.log('useEffect', cleanse(fileName), dependencies.length);
+ return callback();
+ }, [...dependencies]);
+};
+
+const useMemoDebug = (fileName, callback, dependencies) => {
+ return React.useMemo (() => {
+ if (enableLogs) console.log('useMemo', cleanse(fileName), dependencies.length);
+ return callback();
+ }, [...dependencies]);
+};
+
+const reactWithMods = {
+ ...React,
+ useCallback: useCallbackDebug,
+ useEffect: useEffectDebug,
+ useMemo: useMemoDebug,
+};
+
+export const useCallback = useCallbackDebug;
+export const useEffect = useEffectDebug;
+export const useMemo = useMemoDebug;
+
+export const createContext = React.createContext;
+export const forwardRef = React.forwardRef;
+export const useContext = React.useContext;
+export const useLayoutEffect = React.useLayoutEffect;
+export const useRef = React.useRef;
+export const useState = React.useState;
+export const Component = React.Component;
+export const Fragment = React.Fragment;
+export const Suspense = React.Suspense;
+
+export default reactWithMods;
\ No newline at end of file
diff --git a/src/simulation/MockDataManager.js b/src/simulation/MockDataManager.js
index 2e58061cc..7cf5cc888 100644
--- a/src/simulation/MockDataManager.js
+++ b/src/simulation/MockDataManager.js
@@ -3,7 +3,7 @@ import { Building, Deposit, DryDock, Entity, Extractor, Inventory, Lot, Order, P
import useSimulationState from '~/hooks/useSimulationState';
import SIMULATION_CONFIG from './simulationConfig';
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useState } from '~/lib/react-debug';
import { entitiesCacheKey } from '~/lib/cacheKey';
import { entityToAgreements } from '~/lib/utils';
import { statuses as walletBuildingStatuses } from '~/hooks/useWalletBuildings';
@@ -100,19 +100,19 @@ const MockDataItem = ({ overwrite }) => {
const { dataUpdatedAt } = useQuery(overwrite.queryKey, () => {}, { enabled: false, staleTime: Infinity });
// if new overwrite, always overwrite
- useEffect(() => {
+ useEffect(import.meta.url, () => {
setOverwriteAt((dataUpdatedAt || 0) + 0.5);
}, [overwrite]);
// if new dataUpdatedAt, always overwrite UNLESS caused by the most recent overwrite
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (dataUpdatedAt !== overwrittenAt) {
setOverwriteAt((dataUpdatedAt || 0) + 0.5);
}
}, [dataUpdatedAt]);
// transform and overwrite data
- useEffect(() => {
+ useEffect(import.meta.url, () => {
const { queryKey, transformer } = overwrite;
const transformedData = transformer(queryClient.getQueryData(queryKey));
if (transformedData !== undefined) {
@@ -132,7 +132,7 @@ const MockDataManager = () => {
const queryClient = useQueryClient();
const simulation = useSimulationState();
- const overwrites = useMemo(() => {
+ const overwrites = useMemo(import.meta.url, () => {
const myCrewEntity = Entity.formatEntity({ id: SIMULATION_CONFIG.crewId, label: Entity.IDS.CREW });
const configs = [];
@@ -484,7 +484,7 @@ const MockDataManager = () => {
}, [simulation]);
// on unmount, refetch all overwrites
- useEffect(() => {
+ useEffect(import.meta.url, () => {
return () => {
overwrites.forEach(({ queryKey }) => {
queryClient.invalidateQueries({ queryKey, refetchType: 'active' });
@@ -511,7 +511,7 @@ const MockDataManager = () => {
// entitiesCacheKey(Entity.IDS.DEPOSIT, { controllerId, isDepleted: false }),
// deliveries
- // const cacheKey = useMemo(() => {
+ // const cacheKey = useMemo(import.meta.url, () => {
// const k = {};
// if (destination) k.destination = safeEntityId(destination);
// if (origin) k.origin = safeEntityId(origin);
diff --git a/src/simulation/MockTransactionManager.js b/src/simulation/MockTransactionManager.js
index 443030ce7..8c1d1f8f4 100644
--- a/src/simulation/MockTransactionManager.js
+++ b/src/simulation/MockTransactionManager.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useRef } from 'react';
+import { useCallback, useEffect, useRef } from '~/lib/react-debug';
import { Asteroid, Building, Entity, Lot, Process, Product, Ship, Time } from '@influenceth/sdk';
import { camelCase, cloneDeep } from 'lodash';
@@ -29,7 +29,7 @@ const MockTransactionManager = () => {
const createAlert = useStore(s => s.dispatchAlertLogged);
- const simulateResultingEvent = useCallback((tx) => {
+ const simulateResultingEvent = useCallback(import.meta.url, (tx) => {
// let activities = [];
let activityResolutions = [];
let events = [];
@@ -534,7 +534,7 @@ const MockTransactionManager = () => {
}, [simulation, crew]);
const processed = useRef([]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
pendingTransactions.forEach((tx) => {
if (!processed.current.includes(tx.txHash)) {
processed.current.push(tx.txHash);
diff --git a/src/simulation/useSimulationSteps.js b/src/simulation/useSimulationSteps.js
index da4d37dfb..00fef941d 100644
--- a/src/simulation/useSimulationSteps.js
+++ b/src/simulation/useSimulationSteps.js
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from '~/lib/react-debug';
import { Building, Crewmate, Entity, Inventory, Permission, Process, Processor, Product, Ship } from '@influenceth/sdk';
import { useHistory } from 'react-router-dom';
import { BiTransfer as TransferIcon } from 'react-icons/bi';
@@ -80,14 +80,14 @@ const useSimulationSteps = () => {
const [transitioning, setTransitioning] = useState();
const isTransitioning = !!transitioning;
- useEffect(() => {
+ useEffect(import.meta.url, () => {
// (returns unlisten, so can just return directly to useEffect)
return history.listen((location) => setLocationPath(location.pathname));
}, [history]);
const resetAsteroidFilters = () => dispatchFiltersReset('asteroids');
- const advance = useCallback(() => {
+ const advance = useCallback(import.meta.url, () => {
// track that step was completed
fireTrackingEvent('simulation', { step: simulation.step });
@@ -103,7 +103,7 @@ const useSimulationSteps = () => {
}, 0);
}, [dispatchSimulationStep, simulation?.step]);
- const simulationSteps = useMemo(() => {
+ const simulationSteps = useMemo(import.meta.url, () => {
// selectLot
let selectedLotIsLeasable = false;
@@ -1086,7 +1086,7 @@ const useSimulationSteps = () => {
]);
// cleanse selected step index
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (!isLoading) {
if (simulation.step === undefined || simulation.step < 0) {// || simulation.step > simulationSteps.length - 1) {
dispatchSimulationStep(0);
@@ -1096,19 +1096,19 @@ const useSimulationSteps = () => {
// load step object from step index
const previousStep = useRef({});
- const currentStep = useMemo(() => {
+ const currentStep = useMemo(import.meta.url, () => {
// TODO: use named index instead of numbers
return isLoading ? previousStep.current : simulationSteps[simulation.step];
}, [simulationSteps, simulation.step]);
previousStep.current = currentStep;
- const isFastForwarding = useMemo(
+ const isFastForwarding = useMemo(import.meta.url,
() => simulation?.canFastForward && (simulation?.crewReadyAt || simulation?.taskReadyAt) > 0,
[simulation?.canFastForward, simulation?.crewReadyAt, simulation?.taskReadyAt]
);
// autoadvance if ready to autoadvance (wait for fastforwarding as necessary)
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (currentStep?.shouldAdvance && currentStep.shouldAdvance()) {
if (!isFastForwarding || !simulation?.canFastForward) {
advance();
@@ -1117,14 +1117,14 @@ const useSimulationSteps = () => {
}, [advance, currentStep, simulation?.canFastForward, isFastForwarding]);
// if new step, run initialize()
- useEffect(() => {
+ useEffect(import.meta.url, () => {
if (currentStep?.initialize) {
currentStep.initialize();
}
}, [simulation.step]);
// dispatch coachmark config
- useEffect(() => {
+ useEffect(import.meta.url, () => {
let currentCoachmarks = {};
if (!isFastForwarding) {
if (currentStep && pendingTransactions.length === 0) {
@@ -1142,21 +1142,21 @@ const useSimulationSteps = () => {
}, [currentStep?.coachmarks, isFastForwarding, pendingTransactions]);
// derive and dispatch enabled-action config
- const enabledActions = useMemo(() => {
+ const enabledActions = useMemo(import.meta.url, () => {
if (isFastForwarding) return [];
return Object.keys(currentStep?.enabledActions || {}).filter((id) => {
return !!currentStep?.enabledActions[id]
});
}, [currentStep?.enabledActions, isFastForwarding]);
- useEffect(() => {
+ useEffect(import.meta.url, () => {
dispatchSimulationActions(enabledActions);
return () => {
dispatchSimulationActions([]);
}
}, [enabledActions]);
- return useMemo(() => ({
+ return useMemo(import.meta.url, () => ({
currentStepIndex: simulation?.step,
currentStep,
isLastStep: simulation?.step === simulationSteps?.length - 1,