Fix tooltips being pinnable causing SO

This commit is contained in:
thepaperpilot 2023-04-02 22:09:13 -05:00
parent 572566c4c1
commit 528afc6b59

View file

@ -1,6 +1,6 @@
import type { CoercableComponent, Replace, StyleValue } from "features/feature"; import type { CoercableComponent, Replace, StyleValue } from "features/feature";
import { Component, GatherProps, setDefault } from "features/feature"; import { Component, GatherProps, setDefault } from "features/feature";
import { persistent } from "game/persistence"; import { deletePersistent, Persistent, persistent } from "game/persistence";
import { Direction } from "util/common"; import { Direction } from "util/common";
import type { import type {
Computable, Computable,
@ -70,19 +70,23 @@ export function addTooltip<T extends TooltipOptions>(
processComputable(options as T, "xoffset"); processComputable(options as T, "xoffset");
processComputable(options as T, "yoffset"); processComputable(options as T, "yoffset");
if (options.pinnable) {
options.pinned = persistent<boolean>(false, false);
}
nextTick(() => {
if (options.pinnable) { if (options.pinnable) {
if ("pinned" in element) { if ("pinned" in element) {
console.error( console.error(
"Cannot add pinnable tooltip to element that already has a property called 'pinned'" "Cannot add pinnable tooltip to element that already has a property called 'pinned'"
); );
options.pinnable = false; options.pinnable = false;
deletePersistent(options.pinned as Persistent<boolean>);
} else { } else {
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
(element as any).pinned = options.pinned = persistent<boolean>(false, false); (element as any).pinned = options.pinned;
} }
} }
nextTick(() => {
const elementComponent = element[Component]; const elementComponent = element[Component];
element[Component] = TooltipComponent; element[Component] = TooltipComponent;
const elementGatherProps = element[GatherProps].bind(element); const elementGatherProps = element[GatherProps].bind(element);