Files
TheGame/packages/web/lib/hooks/useBoxHeights.ts
δυς 2921a47ef0 Review: meTokens ₍wᵢₜₕ gᵣₐₙᵤₗₐᵣ 𝄴ₒₘₘᵢₜₛ₎ (#1552)
* linting 🃡

* removing MetaMask specificity 🃢

* moving `StrictMode` to Next.js 🃣

* compressing & commafying 🃤

* upgrading eslint 👘

* removing preface from guild name 🃥

* removing unnecessary ESLint `no-console` directives 🌂

* fixing a typo in a comment 🃦

* updating GraphQL codegen for paid subgraph 🦏

* replacing Discord invite link 📌

* passing through The Graph API token to Docker ♾

* setting Docker ARG to set ENV 📟

* missed a file rename in frontend Docker config 🦀

* adding ts-node to fix Docker build issue ⸙

* trying to narrow down the 500 error's source in the test instance 

* exposing The Graph API token on Cloud Run 🦃

* more logging to try & find server error 🐠

* more logging 🧱

* trying to run Node.js in development mode on Cloud Run 🎁

* reconfiguring frontend Dockerfile to also run the dev environment 🌿

* dev mode seems to function 🧨

* 768MiB wasn't enough memory 🍁

* 1GiB wasn't enough memory 🔱

* 1.5GiB was interpreted as 1GiB 🥃

* 1536MiB wasn't enough memory 👾

* 2GiB wasn't enough memory 🧲

* 3GiB wasn't enough memory 🆎

* 4GiB might have been enough, but it still doesn't load 🧻

* 5GiB requires two CPUs 📝

* giving up on dev server; unexplained HTTP 429s 🎨

* disabling Honeybadger in test instances 📮

* trying an `ErrorBoundary` to gather more info 🕷

* setting GraphQL endpoint 🇲🇰

* exposing environment variables ⛈

* trying to expose `` 📻

* the Next compiled version still references `node_modules` 🦢

* removing Alchemy API key from sources 

* trying a different Docker build action 💉

* removing logging 🍿

* switching to Docker Buildx 👠

* missed an escaped newline 🗿

* trying a newer gcloud setup action 🦝

* hopefully fixing authentication 📴

* bunch of changes to the meTokens profile section 🦜

* need credentials file 🐆

* hunting for layout load error & pushing debug statements to testing 🥁

* updating eslint 💓

* trying to debug the missing Breadchain Coop 🧀

* apparently chose the wrong changeset 🐚

* removing logging 🥀
2023-05-15 09:12:03 -06:00

43 lines
1.2 KiB
TypeScript

import { Maybe } from '@metafam/utils';
import { useEffect, useState } from 'react';
import { getBoxKey } from 'utils/boxTypes';
export const useBoxHeights = (items: Array<Maybe<HTMLElement>>) => {
const [heights, setHeights] = useState<Record<string, number>>({});
useEffect(() => {
const observer = new ResizeObserver((entries) => {
setHeights((oldHeights) => {
const entryHeights = Object.fromEntries(
entries.map(({ target }) => [
getBoxKey(target as HTMLElement),
target.scrollHeight, // entry.contentRect.height,
]),
);
return { ...oldHeights, ...entryHeights };
});
});
const newHeights: Record<string, number> = {};
items.forEach((item) => {
if (item) {
const target = item.children[0] as HTMLElement;
const key = getBoxKey(target);
if (key && target) {
newHeights[key] = target.scrollHeight;
observer.observe(target);
} else {
console.warn(`Invalid box data, missing:`, target, key);
}
}
});
setHeights(newHeights);
return () => {
observer.disconnect();
};
}, [items]);
return heights;
};