Revenge/src/ui/settings/pages/General.tsx
2023-02-26 22:56:36 +00:00

139 lines
No EOL
5.1 KiB
TypeScript

import { ReactNative as RN, url, invites } from "@metro/common";
import { getAssetIDByName } from "@ui/assets";
import { Forms, Summary } from "@ui/components";
import { DISCORD_SERVER, GITHUB } from "@lib/constants";
import { getDebugInfo } from "@lib/debug";
import { useProxy } from "@lib/storage";
import settings from "@lib/settings";
import Version from "@ui/settings/components/Version";
import ErrorBoundary from "@ui/components/ErrorBoundary";
const { FormRow, FormSwitchRow, FormSection, FormDivider } = Forms;
const debugInfo = getDebugInfo();
export default function General() {
useProxy(settings);
const versions = [
{
label: "Vendetta",
version: debugInfo.vendetta.version,
icon: "ic_progress_wrench_24px",
},
{
label: "Discord",
version: `${debugInfo.discord.version} (${debugInfo.discord.build})`,
icon: "Discord",
},
{
label: "React",
version: debugInfo.react.version,
icon: "ic_category_16px",
},
{
label: "React Native",
version: debugInfo.react.nativeVersion,
icon: "mobile",
},
{
label: "Bytecode",
version: debugInfo.hermes.bytecodeVersion,
icon: "ic_server_security_24px",
},
];
const platformInfo = [
{
label: "Loader",
version: debugInfo.vendetta.loader,
icon: "ic_download_24px",
},
{
label: "Operating System",
version: `${debugInfo.os.name} ${debugInfo.os.version}`,
icon: "ic_cog_24px"
},
...(debugInfo.os.sdk ? [{
label: "SDK",
version: debugInfo.os.sdk,
icon: "ic_profile_badge_verified_developer_color"
}] : []),
{
label: "Manufacturer",
version: debugInfo.device.manufacturer,
icon: "ic_badge_staff"
},
{
label: "Brand",
version: debugInfo.device.brand,
icon: "ic_settings_boost_24px"
},
{
label: "Model",
version: debugInfo.device.model,
icon: "ic_phonelink_24px"
},
{
label: RN.Platform.select({ android: "Codename", ios: "Machine ID" })!,
version: debugInfo.device.codename,
icon: "ic_compose_24px"
}
];
return (
<ErrorBoundary>
<RN.ScrollView style={{ flex: 1 }} contentContainerStyle={{ paddingBottom: 38 }}>
<FormSection title="Links" titleStyleType="no_border">
<FormRow
label="Discord Server"
leading={<FormRow.Icon source={getAssetIDByName("Discord")} />}
trailing={FormRow.Arrow}
onPress={() => invites.acceptInviteAndTransitionToInviteChannel({ inviteKey: DISCORD_SERVER })}
/>
<FormDivider />
<FormRow
label="GitHub"
leading={<FormRow.Icon source={getAssetIDByName("img_account_sync_github_white")} />}
trailing={FormRow.Arrow}
onPress={() => url.openURL(GITHUB)}
/>
</FormSection>
<FormSection title="Actions">
<FormRow
label="Reload Discord"
leading={<FormRow.Icon source={getAssetIDByName("ic_message_retry")} />}
onPress={() => RN.NativeModules.BundleUpdaterManager.reload()}
/>
<FormDivider />
<FormSwitchRow
label="Developer Settings"
leading={<FormRow.Icon source={getAssetIDByName("ic_progress_wrench_24px")} />}
value={settings.developerSettings}
onValueChange={(v: boolean) => {
settings.developerSettings = v;
}}
/>
</FormSection>
<FormSection title="Info">
<Summary label="Versions" icon="ic_information_filled_24px">
{versions.map((v, i) => (
<>
<Version label={v.label} version={v.version} icon={v.icon} />
{i !== versions.length - 1 && <FormDivider />}
</>
))}
</Summary>
<FormDivider />
<Summary label="Platform" icon="ic_mobile_device">
{platformInfo.map((p, i) => (
<>
<Version label={p.label} version={p.version} icon={p.icon} />
{i !== platformInfo.length - 1 && <FormDivider />}
</>
))}
</Summary>
</FormSection>
</RN.ScrollView>
</ErrorBoundary>
)
}