Initial Settings UI work
This commit is contained in:
12
src/shared/settings.d.ts
vendored
Normal file
12
src/shared/settings.d.ts
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
export interface Settings {
|
||||
maximized?: boolean;
|
||||
minimized?: boolean;
|
||||
windowBounds?: {
|
||||
x: number;
|
||||
y: number;
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
discordBranch?: "stable" | "canary" | "ptb";
|
||||
openLinksWithElectron?: boolean;
|
||||
}
|
||||
20
src/shared/utils/makeChangeListenerProxy.ts
Normal file
20
src/shared/utils/makeChangeListenerProxy.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export function makeChangeListenerProxy<T extends object>(object: T, onChange: (object: T) => void, _root = object): T {
|
||||
return new Proxy(object, {
|
||||
get(target, key) {
|
||||
const v = target[key];
|
||||
if (typeof v === "object" && !Array.isArray(v) && v !== null)
|
||||
return makeChangeListenerProxy(v, onChange, _root);
|
||||
|
||||
return v;
|
||||
},
|
||||
|
||||
set(target, key, value) {
|
||||
if (target[key] === value) return true;
|
||||
|
||||
Reflect.set(target, key, value);
|
||||
onChange(_root);
|
||||
|
||||
return true;
|
||||
},
|
||||
});
|
||||
}
|
||||
13
src/shared/utils/monkeyPatch.ts
Normal file
13
src/shared/utils/monkeyPatch.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
type Func = (...args: any[]) => any;
|
||||
|
||||
export function monkeyPatch<O extends object>(object: O, key: keyof O, replacement: (original: Func, ...args: any[]) => any): void {
|
||||
const original = object[key] as Func;
|
||||
|
||||
const replacer = object[key] = function (this: unknown, ...args: any[]) {
|
||||
return replacement.call(this, original, ...args);
|
||||
} as any;
|
||||
|
||||
Object.defineProperties(replacer, Object.getOwnPropertyDescriptors(original));
|
||||
replacer.toString = () => original.toString();
|
||||
replacer.$$original = original;
|
||||
}
|
||||
Reference in New Issue
Block a user