Skip to content

Commit 00b7ebc

Browse files
committed
Add get/set wrappers
1 parent 1071527 commit 00b7ebc

File tree

16 files changed

+233
-141
lines changed

16 files changed

+233
-141
lines changed

package-lock.json

Lines changed: 65 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@
6767
"@mantine/core": "^6.0.17",
6868
"@mantine/hooks": "^6.0.17",
6969
"@tabler/icons-react": "^2.26.0",
70+
"@tanstack/react-query": "^4.32.1",
7071
"react": "^18.2.0",
71-
"react-dom": "^18.2.0",
72-
"react-hook-form": "^7.45.2"
72+
"react-dom": "^18.2.0"
7373
}
7474
}

src/background.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import {Handle} from './lib/bridge/server';
22
import {InternalResponseBundle} from './lib/bridge/types';
33
import MessageSender = chrome.runtime.MessageSender;
4-
import {DEFAULT_SETTINGS, SettingsType} from './settings';
5-
import {StorageKey} from './lib/storage/keys';
6-
import {gStore} from './lib/storage/store';
74

85
function unifiedHandler(request: any, sender: MessageSender, sendResponse: (response?: any) => void) {
96
Handle(request, sender)
@@ -32,10 +29,3 @@ chrome.runtime.onMessageExternal.addListener((request, sender, sendResponse) =>
3229
unifiedHandler(request, sender, sendResponse);
3330
return true;
3431
});
35-
36-
gStore.get<SettingsType>(StorageKey.SETTINGS).then((settings) => {
37-
gStore.set<SettingsType>(StorageKey.SETTINGS, {
38-
...DEFAULT_SETTINGS,
39-
...(settings || {}),
40-
});
41-
});

src/lib/bridge/handlers/handlers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {StorageRemove} from './storage_remove';
1212
import {RequestType} from './types';
1313
import {FetchExtensionFile} from './fetch_extension_file';
1414
import {OpenOptionsPage} from './open_options_page';
15+
import {SettingsGet} from './settings_get';
16+
import {SettingsSet} from './settings_set';
1517

1618
export const HANDLERS_MAP: {[key in RequestType]: RequestHandler<any, any>} = {
1719
[RequestType.EXECUTE_SCRIPT_ON_PAGE]: ExecuteScriptOnPage,
@@ -26,4 +28,6 @@ export const HANDLERS_MAP: {[key in RequestType]: RequestHandler<any, any>} = {
2628
[RequestType.FETCH_SKIN_MODEL]: FetchSkinModel,
2729
[RequestType.FETCH_EXTENSION_FILE]: FetchExtensionFile,
2830
[RequestType.OPEN_OPTIONS_PAGE]: OpenOptionsPage,
31+
[RequestType.SETTINGS_GET]: SettingsGet,
32+
[RequestType.SETTINGS_SET]: SettingsSet,
2933
};
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
import {RequestHandler} from '../types';
21
import {RequestType} from './types';
3-
import {isFirefox} from '../../utils/detect';
2+
import {runtimeNamespace} from '../../utils/detect';
43
import {EmptyRequestHandler} from './main';
54

65
export const OpenOptionsPage = new EmptyRequestHandler<void>(RequestType.OPEN_OPTIONS_PAGE, async () => {
7-
if (isFirefox()) {
8-
return await browser.runtime.openOptionsPage();
9-
}
10-
11-
return chrome.runtime.openOptionsPage();
6+
return await runtimeNamespace().runtime.openOptionsPage();
127
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import {RequestHandler} from '../types';
2+
import {gStore} from '../../storage/store';
3+
import {ClientSend} from '../client';
4+
import {DynamicStorageKey, StorageKey, StorageRow} from '../../storage/keys';
5+
import {RequestType} from './types';
6+
import {GetSetting, Settings} from '../../../settings';
7+
8+
interface SettingsGetRequest<T extends keyof Settings> {
9+
name: T;
10+
}
11+
12+
interface SettingsGetResponse<T extends keyof Settings> {
13+
value: Settings[T];
14+
}
15+
16+
class SettingsGetHandler<T extends keyof Settings>
17+
implements RequestHandler<SettingsGetRequest<T>, SettingsGetResponse<T>>
18+
{
19+
getType(): RequestType {
20+
return RequestType.SETTINGS_GET;
21+
}
22+
23+
async handleRequest(
24+
request: SettingsGetRequest<T>,
25+
sender: chrome.runtime.MessageSender
26+
): Promise<SettingsGetResponse<T>> {
27+
const value = await GetSetting(request.name);
28+
29+
return {value};
30+
}
31+
}
32+
33+
export async function Get<T extends keyof Settings>(name: T): Promise<Settings[T]> {
34+
const resp = await ClientSend(new SettingsGetHandler<T>(), {name});
35+
return resp.value;
36+
}
37+
38+
export const SettingsGet = new SettingsGetHandler();
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import {RequestHandler} from '../types';
2+
import {gStore} from '../../storage/store';
3+
import {ClientSend} from '../client';
4+
import {DynamicStorageKey, StorageKey, StorageRow} from '../../storage/keys';
5+
import {RequestType} from './types';
6+
import {SetSetting, Settings} from '../../../settings';
7+
8+
interface SettingsSetRequest<T extends keyof Settings> {
9+
name: T;
10+
value: Settings[T];
11+
}
12+
13+
class SettingsSetHandler<T extends keyof Settings> implements RequestHandler<SettingsSetRequest<T>, void> {
14+
getType(): RequestType {
15+
return RequestType.SETTINGS_SET;
16+
}
17+
18+
async handleRequest(request: SettingsSetRequest<T>, sender: chrome.runtime.MessageSender): Promise<void> {
19+
await SetSetting(request.name, request.value);
20+
}
21+
}
22+
23+
export async function Set<T extends keyof Settings>(name: T, value: Settings[T]): Promise<void> {
24+
await ClientSend(new SettingsSetHandler<T>(), {name, value});
25+
}
26+
27+
export const SettingsSet = new SettingsSetHandler();

src/lib/bridge/handlers/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ export enum RequestType {
1111
FETCH_SKIN_MODEL,
1212
FETCH_EXTENSION_FILE,
1313
OPEN_OPTIONS_PAGE,
14+
SETTINGS_GET,
15+
SETTINGS_SET,
1416
}

src/lib/components/market/skin_viewer.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import {getMarketInspectLink} from './helpers';
1111
import {rgAsset, ListingData} from '../../types/steam';
1212
import {AppId, ContextId} from '../../types/steam_constants';
1313
import {isSkin} from '../../utils/skin';
14-
import {Get} from '../../bridge/handlers/storage_get';
15-
import {SETTINGS} from '../../storage/keys';
14+
import {Get} from '../../bridge/handlers/settings_get';
1615

1716
enum Showing {
1817
NONE,
@@ -82,9 +81,7 @@ export class SkinViewer extends FloatElement {
8281
async connectedCallback() {
8382
super.connectedCallback();
8483

85-
const settings = await Get(SETTINGS);
86-
87-
this.isEnabled = !!settings && settings.market['3d-screenshot-buttons'];
84+
this.isEnabled = await Get('3d-screenshot-buttons');
8885
}
8986

9087
loadingIfApplicable(text: string, type: Showing) {

src/lib/storage/keys.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Keys for use as the raw "key" in local/sync storage for a row
33
*/
4-
import {SettingsType} from '../../settings';
4+
import {StoredSettings} from '../../settings';
55
import {SerializedFilter} from '../filter/types';
66

77
export enum StorageKey {
@@ -47,4 +47,4 @@ export const PAGE_SIZE = newRow<number>(StorageKey.PAGE_SIZE);
4747
// Dynamic prefixes should be the market hash name of the item
4848
export const DYNAMIC_ITEM_FILTERS = newDynamicRow<SerializedFilter[]>(StorageKey.ITEM_FILTERS);
4949
export const GLOBAL_FILTERS = newRow<SerializedFilter[]>(StorageKey.GLOBAL_FILTERS);
50-
export const SETTINGS = newRow<SettingsType>(StorageKey.SETTINGS);
50+
export const SETTINGS = newRow<StoredSettings>(StorageKey.SETTINGS);

0 commit comments

Comments
 (0)