this repo has no description

make powers handle disabling buttons better

vielle.dev 60b424f8 bddffbc0

verified
+13 -7
+12 -6
src/components/astral/Powers.astro
··· 33 33 import { 34 34 isPowerId, 35 35 parentPowers, 36 + powerData, 36 37 type powerId, 37 38 powers, 38 39 } from "../../consts/astral"; ··· 70 71 this.#internals.states.add("selected"); 71 72 button && (button.disabled = false); 72 73 73 - // if any selected powers rely on it 74 + // if any selected powers rely on it OR if its force select 74 75 if ( 75 76 value.powers.filter((x) => 76 77 parentPowers[x].includes(this.power ?? powers.INVALID), 77 - ).length > 1 78 + ).length > 1 || 79 + powerData[this.power].forceSelect 78 80 ) { 79 81 this.#internals.states.add("dependency"); 80 82 button && (button.disabled = true); ··· 104 106 const button = this.shadowRoot?.querySelector("dialog button"); 105 107 if (!(button instanceof HTMLButtonElement)) 106 108 throw "`dialog button` could not be selected"; 107 - button.addEventListener("click", (ev) => { 109 + 110 + button.addEventListener("click", () => { 108 111 if ( 109 112 // this.power is in some way invalid; drop the event 110 113 !this.power || ··· 114 117 return; 115 118 // the power is selected; deselect it 116 119 else if (Powers.get().powers.includes(this.power)) { 117 - console.log("deselect"); 120 + button.disabled = true; 121 + 118 122 Powers.setKey( 119 123 "powers", 120 124 Powers.get().powers.filter((x) => x !== this.power), ··· 125 129 // the power is not selected and its parent is unlocked 126 130 else if ( 127 131 Powers.get().powers.includes(parentPowers[this.power].at(-2) ?? "") 128 - ) 132 + ) { 133 + button.disabled = true; 129 134 Powers.setKey("powers", [...Powers.get().powers, this.power]); 135 + } 130 136 }); 131 137 } 132 138 ··· 172 178 "Locked: This power cannot be added to the power list", 173 179 "No parent: The parent power for this power has not been selected", 174 180 "No points: You do not have enough points to unlock this power", 175 - "Dependency: Another power relies on this power being selected", 181 + "Dependency: Another power relies on this power being selected, or it must be selected", 176 182 ].join("\n")} 177 183 > 178 184 <span data-val="unselect">Unselect</span>
+1 -1
src/consts/astral.ts
··· 46 46 47 47 export interface Power { 48 48 name: string; 49 - forceSelect?: boolean; 49 + forceSelect?: true; 50 50 description: string; 51 51 image: { 52 52 src: string;