|
1 | 1 | import { themeContext } from "@contexts/themeContext";
|
2 | 2 | import { Modal, RadioDropdown } from "..";
|
3 |
| -import { useContext, useState } from "react"; |
| 3 | +import { useContext, useState, useMemo, useEffect } from "react"; |
4 | 4 | import { Flags } from "ThemeTypes";
|
5 |
| -import { generatePreset, generatePresetFromThemeNames } from "backend"; |
| 5 | +import { generatePresetFromThemeNames } from "backend"; |
6 | 6 | import { twMerge } from "tailwind-merge";
|
7 | 7 |
|
8 | 8 | export function AddThemeToPresetButton() {
|
9 | 9 | const { themes, refreshThemes, selectedPreset } = useContext(themeContext);
|
10 |
| - const dropdownOptions = themes |
11 |
| - .filter( |
12 |
| - (e) => !selectedPreset?.dependencies.includes(e.name) && !e.flags.includes(Flags.isPreset) |
13 |
| - ) |
14 |
| - .map((e) => e.name); |
| 10 | + const dropdownOptions = useMemo( |
| 11 | + () => |
| 12 | + themes |
| 13 | + .filter( |
| 14 | + (e) => !selectedPreset?.dependencies.includes(e.name) && !e.flags.includes(Flags.isPreset) |
| 15 | + ) |
| 16 | + .map((e) => e.name), |
| 17 | + [themes] |
| 18 | + ); |
| 19 | + |
| 20 | + // This fixes the issue where if you selected an option and added it, the value would not reset to a new one |
| 21 | + // There may be a way to do this that doesn't involve a useEffect |
| 22 | + useEffect(() => { |
| 23 | + if (selectedPreset?.dependencies.includes(themeToAdd)) { |
| 24 | + setThemeToAdd(dropdownOptions[0]); |
| 25 | + } |
| 26 | + }, [themes, selectedPreset]); |
15 | 27 |
|
16 |
| - console.log(themes); |
17 | 28 | const [themeToAdd, setThemeToAdd] = useState<string>(dropdownOptions[0]);
|
18 | 29 |
|
19 | 30 | if (selectedPreset) {
|
|
0 commit comments