Fix issues of the exported pages

- Fixed / opening "Redirecting.." view due to wrong whoAmI replacement
- Fixed page not opening because sidebar contained undefined items (static site can't have everything)
- Fixed some sidebar links being anchors instead of react-router links
- Fixed network page not opening due to missing extensionData json
- Fixed server page not opening due to missing extensionData and serverIdentifier json
- Added visual icon to the page when it is exported rather than dynamic for my own sanity
- Removed query page links from exported pages
This commit is contained in:
Aurora Lahtela 2022-12-04 11:06:05 +02:00
parent 143c64308f
commit ad6abacf7f
10 changed files with 45 additions and 26 deletions

View File

@ -132,11 +132,13 @@ public class NetworkPageExporter extends FileExporter {
"graph?type=hourlyUniqueAndNew",
"graph?type=serverPie",
"graph?type=joinAddressPie",
"graph?type=joinAddressByDay",
"graph?type=activity",
"graph?type=geolocation",
"graph?type=uniqueAndNew",
"network/pingTable",
"sessions"
"sessions",
"extensionData?server=" + serverUUID
);
}

View File

@ -142,6 +142,7 @@ public class ServerPageExporter extends FileExporter {
"playerVersus?server=" + serverUUID,
"playerbaseOverview?server=" + serverUUID,
"performanceOverview?server=" + serverUUID,
"graph?type=playersOnline&server=" + serverUUID,
"graph?type=optimizedPerformance&server=" + serverUUID,
"graph?type=aggregatedPing&server=" + serverUUID,
"graph?type=worldPie&server=" + serverUUID,
@ -150,12 +151,15 @@ public class ServerPageExporter extends FileExporter {
"graph?type=uniqueAndNew&server=" + serverUUID,
"graph?type=hourlyUniqueAndNew&server=" + serverUUID,
"graph?type=joinAddressPie&server=" + serverUUID,
"graph?type=joinAddressByDay&server=" + serverUUID,
"graph?type=serverCalendar&server=" + serverUUID,
"graph?type=punchCard&server=" + serverUUID,
"players?server=" + serverUUID,
"kills?server=" + serverUUID,
"pingTable?server=" + serverUUID,
"sessions?server=" + serverUUID
"sessions?server=" + serverUUID,
"extensionData?server=" + serverUUID,
"serverIdentity?server=" + serverUUID
);
}

View File

@ -306,7 +306,8 @@ public enum HtmlLang implements Lang {
WARNING_NO_GAME_SERVERS("html.description.noGameServers", "Some data requires Plan to be installed on game servers."),
WARNING_NO_GEOLOCATIONS("html.description.noGeolocations", "Geolocation gathering needs to be enabled in the config (Accept GeoLite2 EULA)."),
WARNING_NO_SPONGE_CHUNKS("html.description.noSpongeChunks", "Chunks unavailable on Sponge");
WARNING_NO_SPONGE_CHUNKS("html.description.noSpongeChunks", "Chunks unavailable on Sponge"),
EXPORTED_TITLE("html.label.exported", "Data export time");
private final String key;
private final String defaultValue;

View File

@ -1,7 +1,7 @@
import {useMetadata} from "../../hooks/metadataHook";
import {useAuth} from "../../hooks/authenticationHook";
import {FontAwesomeIcon as Fa} from "@fortawesome/react-fontawesome";
import {faBars, faCog, faDoorOpen, faPalette, faSyncAlt} from "@fortawesome/free-solid-svg-icons";
import {faBars, faClockRotateLeft, faCog, faDoorOpen, faPalette, faSyncAlt} from "@fortawesome/free-solid-svg-icons";
import DropdownMenu from "react-bootstrap-v5/lib/esm/DropdownMenu";
import DropdownItem from "react-bootstrap-v5/lib/esm/DropdownItem";
import {useTheme} from "../../hooks/themeHook";
@ -58,6 +58,7 @@ const Header = ({page, tab, hideUpdater}) => {
{!staticSite && <button onClick={requestUpdate}>
<Fa icon={faSyncAlt} spin={Boolean(updating)}/>
</button>}
{staticSite && <Fa icon={faClockRotateLeft} title={t('html.label.exported')}/>}
{' '}
<span className="refresh-time">{lastUpdate.formatted}</span>
</div>

View File

@ -23,12 +23,12 @@ const Divider = ({showMargin}) => (
<hr className={"sidebar-divider" + (showMargin ? '' : " my-0")}/>
)
const InnerItem = ({href, icon, name, nameShort, color}) => {
const InnerItem = ({href, icon, name, nameShort, color, external}) => {
if (!href) {
return (<hr className={"nav-servers dropdown-divider mx-3 my-2"}/>)
}
if (href.startsWith('/')) {
if (external) {
return (
<a href={href} className="collapse-item nav-button">
<Fa icon={icon} className={color ? "col-" + color : undefined}/>
@ -56,10 +56,11 @@ const Item = ({item, inner}) => {
}, [pathname, href, setCurrentTab, name, external])
if (inner) {
return (<InnerItem href={href} icon={icon} name={t(name)} nameShort={t(nameShort)} color={color}/>)
return (<InnerItem href={href} icon={icon} name={t(name)} nameShort={t(nameShort)} color={color}
external={external}/>)
}
if (href.startsWith('/')) {
if (external) {
return (
<li className={"nav-item nav-button"}>
<a href={baseAddress + href} className="nav-link">
@ -165,12 +166,14 @@ const SidebarCollapse = ({item, open, setOpen}) => {
<Collapse in={open}>
<div id={item.name + "-collapse"}>
<div className="bg-white py-2 collapse-inner rounded">
{item.contents.map((content, i) =>
<Item key={i}
inner
active={false}
item={content}
/>)}
{item.contents
.filter(content => content !== undefined)
.map((content, i) =>
<Item key={i}
inner
active={false}
item={content}
/>)}
</div>
</div>
</Collapse>

View File

@ -15,9 +15,11 @@ export const NavigationContextProvider = ({children}) => {
const pathname = window.location.href;
setItems(items);
for (const item of items) {
if (!item) continue;
if ('/' !== item.href && pathname.includes(item.href)) setCurrentTab(item.name);
if (item.contents) {
for (const subItem of item.contents) {
if (!subItem) continue;
if ('/' !== subItem.href && pathname.includes(subItem.href)) setCurrentTab(subItem.name);
}
}

View File

@ -2,7 +2,7 @@ import {doGetRequest, doSomePostRequest, standard200option, staticSite} from "./
export const fetchWhoAmI = async () => {
if (staticSite) {
return {authRequired: false, loggedIn: false}
return {data: {authRequired: false, loggedIn: false}, error: null};
}
const url = '/v1/whoami';
return doGetRequest(url);

View File

@ -95,11 +95,13 @@ const NetworkSidebar = () => {
}).forEach(item => items.push(item))
}
items.push(
{},
{name: 'html.label.links'},
{name: 'html.label.query', icon: faSearch, href: "/query"}
);
if (!staticSite) {
items.push(
{},
{name: 'html.label.links'},
{name: 'html.label.query', icon: faSearch, href: "/query"}
);
}
setSidebarItems(items);
window.document.title = `Plan | Network`;

View File

@ -9,6 +9,7 @@ import Header from "../../components/navigation/Header";
import ColorSelectorModal from "../../components/modal/ColorSelectorModal";
import {useMetadata} from "../../hooks/metadataHook";
import ErrorPage from "./ErrorPage";
import {staticSite} from "../../service/backendConfiguration";
const PlayersPage = () => {
const {t, i18n} = useTranslation();
@ -20,7 +21,7 @@ const PlayersPage = () => {
const {currentTab, setCurrentTab} = useNavigation();
useEffect(() => {
const items = [
const items = staticSite ? [] : [
{name: 'html.label.links'},
{name: 'html.label.query', icon: faSearch, href: "/query"},
]

View File

@ -29,6 +29,7 @@ import {useDataRequest} from "../../hooks/dataFetchHook";
import {fetchServerIdentity} from "../../service/serverService";
import {ServerExtensionContextProvider, useServerExtensionContext} from "../../hooks/serverExtensionDataContext";
import {iconTypeToFontAwesomeClass} from "../../util/icons";
import {staticSite} from "../../service/backendConfiguration";
const ServerSidebar = () => {
const {t, i18n} = useTranslation();
@ -93,11 +94,13 @@ const ServerSidebar = () => {
}).forEach(item => items.push(item))
}
items.push(
{},
{name: 'html.label.links'},
{name: 'html.label.query', icon: faSearch, href: "/query"}
);
if (!staticSite) {
items.push(
{},
{name: 'html.label.links'},
{name: 'html.label.query', icon: faSearch, href: "/query"}
);
}
setSidebarItems(items);
window.document.title = `Plan | Server Analysis`;