migrate to new modal api

This commit is contained in:
Vendicated
2026-08-17 02:40:16 +02:00
parent 1c9f6871c2
commit 04e902705e
4 changed files with 128 additions and 189 deletions
+49 -67
View File
@@ -8,7 +8,6 @@ import "./screenSharePicker.css";
import { classNameFactory } from "@vencord/types/api/Styles"; import { classNameFactory } from "@vencord/types/api/Styles";
import { import {
BaseText,
Button, Button,
Card, Card,
CogWheel, CogWheel,
@@ -20,18 +19,18 @@ import {
RestartIcon, RestartIcon,
Span Span
} from "@vencord/types/components"; } from "@vencord/types/components";
import { Logger, useAwaiter, useForceUpdater } from "@vencord/types/utils";
import { onceReady } from "@vencord/types/webpack";
import { import {
closeModal, closeModal,
Logger, FluxDispatcher,
ModalCloseButton, MediaEngineStore,
Modals, Modal,
ModalSize,
openModal, openModal,
useAwaiter, Select,
useForceUpdater UserStore,
} from "@vencord/types/utils"; useState
import { onceReady } from "@vencord/types/webpack"; } from "@vencord/types/webpack/common";
import { FluxDispatcher, MediaEngineStore, Select, UserStore, useState } from "@vencord/types/webpack/common";
import { Node } from "@vencord/venmic"; import { Node } from "@vencord/venmic";
import type { Dispatch, SetStateAction } from "react"; import type { Dispatch, SetStateAction } from "react";
import { addPatch } from "renderer/patches/shared"; import { addPatch } from "renderer/patches/shared";
@@ -220,15 +219,13 @@ function AudioSettingsModal({
const Settings = useSettings(); const Settings = useSettings();
return ( return (
<Modals.ModalRoot {...modalProps} size={ModalSize.MEDIUM}> <Modal
<Modals.ModalHeader className={cl("header")}> {...modalProps}
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}> size="lg"
Audio Settings title="Audio Settings"
</BaseText> actions={[{ text: "Back", variant: "secondary", onClick: close }]}
<ModalCloseButton onClick={close} /> >
</Modals.ModalHeader> <div className={cl("venmic-settings")}>
<Modals.ModalContent className={cl("modal", "venmic-settings")}>
<FormSwitch <FormSwitch
title="Initial Mute" title="Initial Mute"
description="Fix an initial audio spike caused by chromium." description="Fix an initial audio spike caused by chromium."
@@ -319,13 +316,8 @@ function AudioSettingsModal({
value={Settings.audio?.deviceSelect ?? false} value={Settings.audio?.deviceSelect ?? false}
disabled={Settings.audio?.ignoreDevices} disabled={Settings.audio?.ignoreDevices}
/> />
</Modals.ModalContent> </div>
<Modals.ModalFooter className={cl("footer")}> </Modal>
<Button variant="secondary" onClick={close}>
Back
</Button>
</Modals.ModalFooter>
</Modals.ModalRoot>
); );
} }
@@ -723,30 +715,7 @@ function ModalComponent({
frameRate: "30" frameRate: "30"
}); });
return ( function handleGoLive() {
<Modals.ModalRoot {...modalProps} size={ModalSize.MEDIUM}>
<Modals.ModalHeader className={cl("header")}>
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
Screen Share Picker
</BaseText>
<ModalCloseButton onClick={close} />
</Modals.ModalHeader>
<Modals.ModalContent className={cl("modal")}>
{!selected ? (
<ScreenPicker screens={screens} chooseScreen={setSelected} />
) : (
<StreamSettingsUi
source={screens.find(s => s.id === selected)!}
settings={settings}
setSettings={setSettings}
skipPicker={skipPicker}
/>
)}
</Modals.ModalContent>
<Modals.ModalFooter className={cl("footer")}>
<Button
disabled={!selected}
onClick={() => {
currentSettings = settings; currentSettings = settings;
try { try {
const frameRate = Number(qualitySettings.frameRate); const frameRate = Number(qualitySettings.frameRate);
@@ -790,10 +759,7 @@ function ModalComponent({
try { try {
await track.applyConstraints(constraints); await track.applyConstraints(constraints);
logger.info( logger.info("Applied constraints successfully. New constraints:", track.getConstraints());
"Applied constraints successfully. New constraints:",
track.getConstraints()
);
} catch (e) { } catch (e) {
logger.error("Failed to apply constraints.", e); logger.error("Failed to apply constraints.", e);
} }
@@ -803,21 +769,37 @@ function ModalComponent({
} }
close(); close();
}} }
>
Go Live
</Button>
{selected && !skipPicker ? ( const showGoBack = selected && !skipPicker;
<Button variant="secondary" onClick={() => setSelected(void 0)}> return (
Back <Modal
</Button> {...modalProps}
size="lg"
title="Screen Share Picker"
actions={[
{
text: showGoBack ? "Back" : "Cancel",
variant: "secondary",
onClick: () => (showGoBack ? setSelected(void 0) : close())
},
{
text: "Go Live",
disabled: !selected,
onClick: handleGoLive
}
]}
>
{!selected ? (
<ScreenPicker screens={screens} chooseScreen={setSelected} />
) : ( ) : (
<Button variant="secondary" onClick={close}> <StreamSettingsUi
Cancel source={screens.find(s => s.id === selected)!}
</Button> settings={settings}
setSettings={setSettings}
skipPicker={skipPicker}
/>
)} )}
</Modals.ModalFooter> </Modal>
</Modals.ModalRoot>
); );
} }
@@ -1,7 +1,3 @@
.vcd-screen-picker-modal {
padding: 1em;
}
.vcd-screen-picker-header-close-button { .vcd-screen-picker-header-close-button {
margin-left: auto; margin-left: auto;
} }
@@ -4,18 +4,9 @@
* SPDX-License-Identifier: GPL-3.0-or-later * SPDX-License-Identifier: GPL-3.0-or-later
*/ */
import { BaseText, Button, Heading, Paragraph, TextButton } from "@vencord/types/components"; import { Button, Heading, Paragraph, TextButton } from "@vencord/types/components";
import { import { Margins, useForceUpdater } from "@vencord/types/utils";
Margins, import { Modal, openModal, Toasts } from "@vencord/types/webpack/common";
ModalCloseButton,
ModalContent,
ModalHeader,
ModalRoot,
ModalSize,
openModal,
useForceUpdater
} from "@vencord/types/utils";
import { Toasts } from "@vencord/types/webpack/common";
import { Settings } from "shared/settings"; import { Settings } from "shared/settings";
import { cl, SettingsComponent } from "./Settings"; import { cl, SettingsComponent } from "./Settings";
@@ -26,20 +17,11 @@ export const DeveloperOptionsButton: SettingsComponent = ({ settings }) => {
function openDeveloperOptionsModal(settings: Settings) { function openDeveloperOptionsModal(settings: Settings) {
openModal(props => ( openModal(props => (
<ModalRoot {...props} size={ModalSize.MEDIUM}> <Modal {...props} size="lg" title="Vesktop Developer Options">
<ModalHeader> <Heading tag="h4">Vencord Location</Heading>
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
Vesktop Developer Options
</BaseText>
<ModalCloseButton onClick={props.onClose} />
</ModalHeader>
<ModalContent>
<div style={{ padding: "1em 0" }}>
<Heading tag="h5">Vencord Location</Heading>
<VencordLocationPicker settings={settings} /> <VencordLocationPicker settings={settings} />
<Heading tag="h5" className={Margins.top16}> <Heading tag="h4" className={Margins.top16}>
Debugging Debugging
</Heading> </Heading>
<div className={cl("button-grid")}> <div className={cl("button-grid")}>
@@ -48,9 +30,7 @@ function openDeveloperOptionsModal(settings: Settings) {
Open chrome://webrtc-internals Open chrome://webrtc-internals
</Button> </Button>
</div> </div>
</div> </Modal>
</ModalContent>
</ModalRoot>
)); ));
} }
@@ -7,18 +7,8 @@
import "./UserAssets.css"; import "./UserAssets.css";
import { BaseText, Button, FormSwitch } from "@vencord/types/components"; import { BaseText, Button, FormSwitch } from "@vencord/types/components";
import { import { Margins, wordsFromCamel, wordsToTitle } from "@vencord/types/utils";
Margins, import { Modal, openModal, showToast, useState } from "@vencord/types/webpack/common";
ModalCloseButton,
ModalContent,
ModalHeader,
ModalRoot,
ModalSize,
openModal,
wordsFromCamel,
wordsToTitle
} from "@vencord/types/utils";
import { showToast, useState } from "@vencord/types/webpack/common";
import { UserAssetType } from "main/userAssets"; import { UserAssetType } from "main/userAssets";
import { useSettings } from "renderer/settings"; import { useSettings } from "renderer/settings";
@@ -32,22 +22,13 @@ export const UserAssetsButton: SettingsComponent = () => {
function openAssetsModal() { function openAssetsModal() {
openModal(props => ( openModal(props => (
<ModalRoot {...props} size={ModalSize.MEDIUM}> <Modal {...props} size="lg" title="User Assets">
<ModalHeader>
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
User Assets
</BaseText>
<ModalCloseButton onClick={props.onClose} />
</ModalHeader>
<ModalContent>
<div className="vcd-user-assets"> <div className="vcd-user-assets">
{CUSTOMIZABLE_ASSETS.map(asset => ( {CUSTOMIZABLE_ASSETS.map(asset => (
<Asset key={asset} asset={asset} /> <Asset key={asset} asset={asset} />
))} ))}
</div> </div>
</ModalContent> </Modal>
</ModalRoot>
)); ));
} }