Fix load order re-applying and transition between sidebar pages
This commit is contained in:
parent
de445627bf
commit
96599cb2c8
@ -290,14 +290,15 @@ const Map: React.FC = () => {
|
|||||||
clearSelectedCells();
|
clearSelectedCells();
|
||||||
selectCell(cell);
|
selectCell(cell);
|
||||||
}
|
}
|
||||||
} else if (
|
} else if (router.query.mod && typeof router.query.mod === "string") {
|
||||||
router.query.mod &&
|
if (selectedCells) {
|
||||||
typeof router.query.mod === "string" &&
|
clearSelectedCell();
|
||||||
selectedCells
|
setSidebarOpen(true);
|
||||||
) {
|
selectCells(selectedCells);
|
||||||
clearSelectedCell();
|
} else {
|
||||||
setSidebarOpen(true);
|
// TODO: this is so spaghetti
|
||||||
selectCells(selectedCells);
|
clearSelectedCell();
|
||||||
|
}
|
||||||
} else if (router.query.plugin && typeof router.query.plugin === "string") {
|
} else if (router.query.plugin && typeof router.query.plugin === "string") {
|
||||||
clearSelectedCells();
|
clearSelectedCells();
|
||||||
setSidebarOpen(true);
|
setSidebarOpen(true);
|
||||||
@ -320,9 +321,32 @@ const Map: React.FC = () => {
|
|||||||
selectCells(cells);
|
selectCells(cells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (plugins && plugins.length > 0 && pluginsPending === 0) {
|
||||||
clearSelectedCell();
|
|
||||||
clearSelectedCells();
|
clearSelectedCells();
|
||||||
|
clearSelectedCell();
|
||||||
|
const cells = plugins.reduce(
|
||||||
|
(acc: { x: number; y: number }[], plugin: PluginFile) => {
|
||||||
|
if (plugin.enabled && plugin.parsed) {
|
||||||
|
const newCells = [...acc];
|
||||||
|
for (const cell of plugin.parsed.cells) {
|
||||||
|
if (
|
||||||
|
cell.x !== undefined &&
|
||||||
|
cell.y !== undefined &&
|
||||||
|
cell.world_form_id === 60
|
||||||
|
) {
|
||||||
|
newCells.push({ x: cell.x, y: cell.y });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newCells;
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
},
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
selectCells(cells);
|
||||||
|
} else {
|
||||||
|
clearSelectedCells();
|
||||||
|
clearSelectedCell();
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
selectedCell,
|
selectedCell,
|
||||||
@ -346,49 +370,6 @@ const Map: React.FC = () => {
|
|||||||
}
|
}
|
||||||
}, [router.query.mod, clearSelectedMod, heatmapLoaded]);
|
}, [router.query.mod, clearSelectedMod, heatmapLoaded]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!heatmapLoaded) return; // wait for all map layers to load
|
|
||||||
if (
|
|
||||||
plugins &&
|
|
||||||
plugins.length > 0 &&
|
|
||||||
pluginsPending === 0 &&
|
|
||||||
!router.query.cell &&
|
|
||||||
!router.query.mod &&
|
|
||||||
!router.query.plugin
|
|
||||||
) {
|
|
||||||
clearSelectedCells();
|
|
||||||
const cells = plugins.reduce(
|
|
||||||
(acc: { x: number; y: number }[], plugin: PluginFile) => {
|
|
||||||
if (plugin.enabled && plugin.parsed) {
|
|
||||||
const newCells = [...acc];
|
|
||||||
for (const cell of plugin.parsed.cells) {
|
|
||||||
if (
|
|
||||||
cell.x !== undefined &&
|
|
||||||
cell.y !== undefined &&
|
|
||||||
cell.world_form_id === 60
|
|
||||||
) {
|
|
||||||
newCells.push({ x: cell.x, y: cell.y });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newCells;
|
|
||||||
}
|
|
||||||
return acc;
|
|
||||||
},
|
|
||||||
[]
|
|
||||||
);
|
|
||||||
selectCells(cells);
|
|
||||||
}
|
|
||||||
}, [
|
|
||||||
plugins,
|
|
||||||
pluginsPending,
|
|
||||||
heatmapLoaded,
|
|
||||||
clearSelectedCells,
|
|
||||||
selectCells,
|
|
||||||
router.query.cell,
|
|
||||||
router.query.mod,
|
|
||||||
router.query.plugin,
|
|
||||||
]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (map.current) return; // initialize map only once
|
if (map.current) return; // initialize map only once
|
||||||
map.current = new mapboxgl.Map({
|
map.current = new mapboxgl.Map({
|
||||||
|
@ -2,7 +2,7 @@ import { createPortal } from "react-dom";
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
|
|
||||||
import { useAppSelector, useAppDispatch } from "../lib/hooks";
|
import { useAppSelector, useAppDispatch } from "../lib/hooks";
|
||||||
import { setPluginsTxt } from "../slices/pluginsTxt";
|
import { setPluginsTxtAndApplyLoadOrder } from "../slices/pluginsTxt";
|
||||||
import { applyLoadOrder } from "../slices/plugins";
|
import { applyLoadOrder } from "../slices/plugins";
|
||||||
import styles from "../styles/PluginTxtEditor.module.css";
|
import styles from "../styles/PluginTxtEditor.module.css";
|
||||||
|
|
||||||
@ -24,8 +24,6 @@ const PluginsLoader: React.FC<Props> = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setPluginsTxtShown(false);
|
setPluginsTxtShown(false);
|
||||||
console.log("going to apply!");
|
|
||||||
dispatch(applyLoadOrder());
|
|
||||||
}, [dispatch, pluginsTxt]);
|
}, [dispatch, pluginsTxt]);
|
||||||
|
|
||||||
const onPluginsTxtButtonClick = async () => {
|
const onPluginsTxtButtonClick = async () => {
|
||||||
@ -69,7 +67,9 @@ const PluginsLoader: React.FC<Props> = () => {
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
dispatch(setPluginsTxt(editPluginsTxt ?? ""));
|
dispatch(
|
||||||
|
setPluginsTxtAndApplyLoadOrder(editPluginsTxt ?? "")
|
||||||
|
);
|
||||||
setPluginsTxtShown(false);
|
setPluginsTxtShown(false);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -4,7 +4,7 @@ import "mapbox-gl/dist/mapbox-gl.css";
|
|||||||
|
|
||||||
import Map from "../components/Map";
|
import Map from "../components/Map";
|
||||||
import { useAppDispatch } from "../lib/hooks";
|
import { useAppDispatch } from "../lib/hooks";
|
||||||
import { setPluginsTxt } from "../slices/pluginsTxt";
|
import { setPluginsTxtAndApplyLoadOrder } from "../slices/pluginsTxt";
|
||||||
|
|
||||||
const Home: NextPage = () => {
|
const Home: NextPage = () => {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
@ -74,7 +74,7 @@ const Home: NextPage = () => {
|
|||||||
if (evt.dataTransfer.items && evt.dataTransfer.items.length > 0) {
|
if (evt.dataTransfer.items && evt.dataTransfer.items.length > 0) {
|
||||||
const file = evt.dataTransfer.items[0].getAsFile();
|
const file = evt.dataTransfer.items[0].getAsFile();
|
||||||
if (file) {
|
if (file) {
|
||||||
dispatch(setPluginsTxt(await file.text()));
|
dispatch(setPluginsTxtAndApplyLoadOrder(await file.text()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
|
||||||
import { StateChangeTypes } from "downshift";
|
|
||||||
|
|
||||||
import type { AppState, AppThunk } from "../lib/store"
|
import type { AppState, AppThunk } from "../lib/store"
|
||||||
|
|
||||||
@ -98,7 +97,7 @@ export const applyLoadOrder = (): AppThunk => (dispatch, getState) => {
|
|||||||
dispatch(setPlugins([...originalPlugins.sort((a, b) => b.lastModified - a.lastModified), ...newPlugins]));
|
dispatch(setPlugins([...originalPlugins.sort((a, b) => b.lastModified - a.lastModified), ...newPlugins]));
|
||||||
}
|
}
|
||||||
|
|
||||||
export const addPluginInOrder = (plugin: PluginFile): AppThunk => (dispatch, getState) => {
|
export const addPluginInOrder = (plugin: PluginFile): AppThunk => (dispatch) => {
|
||||||
dispatch(addPlugin(plugin));
|
dispatch(addPlugin(plugin));
|
||||||
dispatch(applyLoadOrder());
|
dispatch(applyLoadOrder());
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
|
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
|
||||||
|
|
||||||
import type { AppState } from "../lib/store"
|
import type { AppState, AppThunk } from "../lib/store"
|
||||||
|
import { applyLoadOrder } from "./plugins";
|
||||||
|
|
||||||
export type PluginsTxtState = string;
|
export type PluginsTxtState = string;
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ export const pluginsTxtSlice = createSlice({
|
|||||||
initialState,
|
initialState,
|
||||||
reducers: {
|
reducers: {
|
||||||
setPluginsTxt: (state, action: PayloadAction<string>) => action.payload,
|
setPluginsTxt: (state, action: PayloadAction<string>) => action.payload,
|
||||||
clearPluginsTxt: (state) => "",
|
clearPluginsTxt: () => "",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -19,4 +20,9 @@ export const { setPluginsTxt, clearPluginsTxt } = pluginsTxtSlice.actions
|
|||||||
|
|
||||||
export const selectPluginsTxt = (state: AppState) => state.pluginsTxt
|
export const selectPluginsTxt = (state: AppState) => state.pluginsTxt
|
||||||
|
|
||||||
|
export const setPluginsTxtAndApplyLoadOrder = (pluginsTxt: string): AppThunk => (dispatch) => {
|
||||||
|
dispatch(setPluginsTxt(pluginsTxt));
|
||||||
|
dispatch(applyLoadOrder());
|
||||||
|
}
|
||||||
|
|
||||||
export default pluginsTxtSlice.reducer
|
export default pluginsTxtSlice.reducer
|
Loading…
Reference in New Issue
Block a user