this repo has no description

Warn on disabling default extensions (closes #126)

Changed files
+68 -19
packages
core
src
core-extensions
src
moonbase
webpackModules
ui
extensions
types
+17 -5
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/card.tsx
···
import { ExtensionState } from "../../../types";
-
import { ExtensionLoadSource } from "@moonlight-mod/types";
+
import { constants, ExtensionLoadSource } from "@moonlight-mod/types";
import { ExtensionCompat } from "@moonlight-mod/core/extension/loader";
import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
···
import ExtensionInfo from "./info";
import Settings from "./settings";
-
import installWithDependencyPopup from "./popup";
+
import { doBuiltinExtensionPopup, doMissingExtensionPopup } from "./popup";
export enum ExtensionPage {
Info,
···
submitting={busy}
disabled={ext.compat !== ExtensionCompat.Compatible || conflicting}
onClick={async () => {
-
await installWithDependencyPopup(uniqueId);
+
await MoonbaseSettingsStore.installExtension(uniqueId);
+
const deps = await MoonbaseSettingsStore.getDependencies(uniqueId);
+
if (deps != null) {
+
await doMissingExtensionPopup(deps);
+
}
}}
>
Install
···
: undefined
}
onChange={() => {
-
setRestartNeeded(true);
-
MoonbaseSettingsStore.setExtensionEnabled(uniqueId, !enabled);
+
const toggle = () => {
+
setRestartNeeded(true);
+
MoonbaseSettingsStore.setExtensionEnabled(uniqueId, !enabled);
+
};
+
+
if (enabled && constants.builtinExtensions.includes(ext.id)) {
+
doBuiltinExtensionPopup(uniqueId, toggle);
+
} else {
+
toggle();
+
}
}}
/>
</div>
+48 -14
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/popup.tsx
···
const { openModalLazy, useModalsStore, closeModal } = Components;
const Popup = spacepack.findByCode(".minorContainer", "secondaryAction")[0].exports.default;
+
function close() {
+
const ModalStore = useModalsStore.getState();
+
closeModal(ModalStore.default[0].key);
+
}
+
const presentableLoadSources: Record<ExtensionLoadSource, string> = {
[ExtensionLoadSource.Developer]: "Local extension", // should never show up
[ExtensionLoadSource.Core]: "Core extension",
···
);
}
-
function close() {
-
const ModalStore = useModalsStore.getState();
-
closeModal(ModalStore.default[0].key);
-
}
-
-
function OurPopup({
+
function MissingExtensionPopup({
deps,
transitionState
}: {
···
);
}
-
export async function doPopup(deps: Record<string, MoonbaseExtension[]>) {
+
export async function doMissingExtensionPopup(deps: Record<string, MoonbaseExtension[]>) {
await openModalLazy(async () => {
return ({ transitionState }: { transitionState: number | null }) => {
-
return <OurPopup transitionState={transitionState} deps={deps} />;
+
return <MissingExtensionPopup transitionState={transitionState} deps={deps} />;
};
});
}
-
export default async function installWithDependencyPopup(uniqueId: number) {
-
await MoonbaseSettingsStore.installExtension(uniqueId);
-
const deps = await MoonbaseSettingsStore.getDependencies(uniqueId);
-
if (deps != null) {
-
await doPopup(deps);
-
}
+
function BuiltinExtensionPopup({
+
transitionState,
+
uniqueId,
+
cb
+
}: {
+
transitionState: number | null;
+
uniqueId: number;
+
cb: () => void;
+
}) {
+
const { Text } = Components;
+
+
return (
+
<Popup
+
body={
+
<Flex>
+
<Text variant="text-md/normal">
+
This extension is enabled by default. Disabling it might have consequences. Are you sure you want to disable
+
it?
+
</Text>
+
</Flex>
+
}
+
cancelText="No"
+
confirmText="Yes"
+
onCancel={close}
+
onConfirm={() => {
+
close();
+
cb();
+
}}
+
title="Built in extension"
+
transitionState={transitionState}
+
/>
+
);
+
}
+
+
export async function doBuiltinExtensionPopup(uniqueId: number, cb: () => void) {
+
await openModalLazy(async () => {
+
return ({ transitionState }: { transitionState: number | null }) => {
+
return <BuiltinExtensionPopup transitionState={transitionState} uniqueId={uniqueId} cb={cb} />;
+
};
+
});
}
+1
packages/core/src/config.ts
···
const logger = new Logger("core/config");
const defaultConfig: Config = {
+
// If you're updating this, update `builtinExtensions` in constants as well
extensions: {
moonbase: true,
disableSentry: true,
+2
packages/types/src/constants.ts
···
export const apiLevel = 2;
export const mainRepo = "https://moonlight-mod.github.io/extensions-dist/repo.json";
+
// If you're updating this, update `defaultConfig` in core as well
+
export const builtinExtensions = ["moonbase", "disableSentry", "noTrack", "noHideToken"];