fix pinning after a group is solved and dont persist selection

This commit is contained in:
Joshua Seigler 2025-04-07 20:40:06 -07:00
parent da0284f294
commit f67606b944

View file

@ -19,7 +19,6 @@ type AppStore = {
selected: number[]; selected: number[];
solvedGroups: Answer[]; solvedGroups: Answer[];
puzzle: number[]; puzzle: number[];
get answers(): Answer[];
}; };
export default function useAppModel() { export default function useAppModel() {
@ -32,16 +31,23 @@ export default function useAppModel() {
selected: [], selected: [],
solvedGroups: [], solvedGroups: [],
puzzle: shuffleArray(Array.from({ length: 16 }, (_, i) => i)), puzzle: shuffleArray(Array.from({ length: 16 }, (_, i) => i)),
get answers(): Answer[] {
return connections.find((x) => x.id === store.puzzleId)!.answers;
},
}), }),
{ {
name: "slick-connections", name: "slick-connections",
storage, storage,
serialize(data) {
return JSON.stringify({
...data,
selected: [],
});
},
} }
); );
const answers = (): Answer[] => {
return connections.find((x) => x.id === store.puzzleId)!.answers;
};
const handleSelectGame = (newId: number) => { const handleSelectGame = (newId: number) => {
setStore({ setStore({
puzzleId: newId, puzzleId: newId,
@ -55,16 +61,16 @@ export default function useAppModel() {
const getFromPuzzle = (index: number) => { const getFromPuzzle = (index: number) => {
const puzzleIndex = store.puzzle[index]; const puzzleIndex = store.puzzle[index];
const [groupIndex, memberIndex] = fromIndex(puzzleIndex); const [groupIndex, memberIndex] = fromIndex(puzzleIndex);
const group = store.answers[groupIndex]; const group = answers()[groupIndex];
return { return {
group: group.group, group: group.group,
level: group.level, level: group.level,
answer: store.answers[groupIndex].members[memberIndex], answer: answers()[groupIndex].members[memberIndex],
}; };
}; };
const handleGuess = () => { const handleGuess = () => {
const selected = store.puzzle.length === 4 ? [0, 1, 2, 3] : store.selected const selected = store.puzzle.length === 4 ? [0, 1, 2, 3] : store.selected;
const selectedAnswers = selected.map((x) => getFromPuzzle(x)); const selectedAnswers = selected.map((x) => getFromPuzzle(x));
const { level } = selectedAnswers[0]; const { level } = selectedAnswers[0];
const isCorrect = selectedAnswers.every((x) => x.level === level); const isCorrect = selectedAnswers.every((x) => x.level === level);
@ -84,7 +90,7 @@ export default function useAppModel() {
), ),
selected: [], selected: [],
}); });
const newSolvedGroup = store.answers.find((x) => x.level === level); const newSolvedGroup = answers().find((x) => x.level === level);
if (newSolvedGroup != null) { if (newSolvedGroup != null) {
setStore({ setStore({
solvedGroups: [...store.solvedGroups, newSolvedGroup], solvedGroups: [...store.solvedGroups, newSolvedGroup],
@ -131,7 +137,7 @@ export default function useAppModel() {
.filter((x) => x >= store.pinnedCount) .filter((x) => x >= store.pinnedCount)
.map((x) => store.puzzle[x]); .map((x) => store.puzzle[x]);
const puzzleEnd = Array.from( const puzzleEnd = Array.from(
{ length: 16 - store.pinnedCount }, { length: store.puzzle.length - store.pinnedCount },
(_, i) => i + store.pinnedCount (_, i) => i + store.pinnedCount
) )
.filter((x) => !store.selected.includes(x)) .filter((x) => !store.selected.includes(x))