mirror of
https://github.com/SteamDeckHomebrew/decky-plugin-template.git
synced 2026-05-19 23:20:07 +02:00
106 lines
2.5 KiB
TypeScript
Executable File
106 lines
2.5 KiB
TypeScript
Executable File
import {
|
|
ButtonItem,
|
|
definePlugin,
|
|
DialogButton,
|
|
Menu,
|
|
MenuItem,
|
|
PanelSection,
|
|
PanelSectionRow,
|
|
Router,
|
|
ServerAPI,
|
|
showContextMenu,
|
|
staticClasses,
|
|
} from "decky-frontend-lib";
|
|
import { VFC } from "react";
|
|
import { FaShip } from "react-icons/fa";
|
|
|
|
import logo from "../assets/logo.png";
|
|
|
|
// interface AddMethodArgs {
|
|
// left: number;
|
|
// right: number;
|
|
// }
|
|
|
|
const Content: VFC<{ serverAPI: ServerAPI }> = ({}) => {
|
|
// const [result, setResult] = useState<number | undefined>();
|
|
|
|
// const onClick = async () => {
|
|
// const result = await serverAPI.callPluginMethod<AddMethodArgs, number>(
|
|
// "add",
|
|
// {
|
|
// left: 2,
|
|
// right: 2,
|
|
// }
|
|
// );
|
|
// if (result.success) {
|
|
// setResult(result.result);
|
|
// }
|
|
// };
|
|
|
|
return (
|
|
<PanelSection title="Panel Section">
|
|
<PanelSectionRow>
|
|
<ButtonItem
|
|
layout="below"
|
|
onClick={(e) =>
|
|
showContextMenu(
|
|
<Menu label="Menu" cancelText="CAAAANCEL" onCancel={() => {}}>
|
|
<MenuItem onSelected={() => {}}>Item #1</MenuItem>
|
|
<MenuItem onSelected={() => {}}>Item #2</MenuItem>
|
|
<MenuItem onSelected={() => {}}>Item #3</MenuItem>
|
|
</Menu>,
|
|
e.currentTarget ?? window
|
|
)
|
|
}
|
|
>
|
|
Server says yolo
|
|
</ButtonItem>
|
|
</PanelSectionRow>
|
|
|
|
<PanelSectionRow>
|
|
<div style={{ display: "flex", justifyContent: "center" }}>
|
|
<img src={logo} />
|
|
</div>
|
|
</PanelSectionRow>
|
|
|
|
<PanelSectionRow>
|
|
<ButtonItem
|
|
layout="below"
|
|
onClick={() => {
|
|
Router.CloseSideMenus();
|
|
Router.Navigate("/decky-plugin-test");
|
|
}}
|
|
>
|
|
Router
|
|
</ButtonItem>
|
|
</PanelSectionRow>
|
|
</PanelSection>
|
|
);
|
|
};
|
|
|
|
const DeckyPluginRouterTest: VFC = () => {
|
|
return (
|
|
<div style={{ marginTop: "50px", color: "white" }}>
|
|
Hello World!
|
|
<DialogButton onClick={() => Router.NavigateToLibraryTab()}>
|
|
Go to Library
|
|
</DialogButton>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default definePlugin((serverApi: ServerAPI) => {
|
|
serverApi.routerHook.addRoute("/decky-plugin-test", DeckyPluginRouterTest, {
|
|
exact: true,
|
|
});
|
|
|
|
return {
|
|
title: <div className={staticClasses.Title}>Example Plugin</div>,
|
|
content: <Content serverAPI={serverApi} />,
|
|
icon: <FaShip />,
|
|
onDismount() {
|
|
serverApi.routerHook.removeRoute("/decky-plugin-test");
|
|
},
|
|
};
|
|
});
|