Skip to content

Commit

Permalink
feat: Ruffle support dropdown
Browse files Browse the repository at this point in the history
  • Loading branch information
colin969 committed Feb 17, 2025
1 parent 55f13ac commit 54c5dd8
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 1 deletion.
22 changes: 22 additions & 0 deletions src/renderer/components/SearchBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,11 @@ export function SearchBar() {
const onClearTags = onClearFactory('tags');
const onSetAndToggleTags = onSetAndToggleFactory('tags');

const onWhitelistRuffleSupport = onWhitelistFactory('ruffleSupport');
const onBlacklistRuffleSupport = onBlacklistFactory('ruffleSupport');
const onClearRuffleSupport = onClearFactory('ruffleSupport');
const onSetAndToggleRuffleSupport = onSetAndToggleFactory('ruffleSupport');

const simpleSelectItems = (values: string[] | null): SearchableSelectItem[] => {
return values ? values.map(v => ({
value: v,
Expand All @@ -250,6 +255,13 @@ export function SearchBar() {
const developerItems = useMemo(() => simpleSelectItems(search.dropdowns.developers), [search.dropdowns.developers]);
const publisherItems = useMemo(() => simpleSelectItems(search.dropdowns.publishers), [search.dropdowns.publishers]);
const seriesItems = useMemo(() => simpleSelectItems(search.dropdowns.series), [search.dropdowns.series]);
const ruffleSupportItems: SearchableSelectItem[] = [{
value: '',
orderVal: ''
}, {
value: 'standalone',
orderVal: 'Standalone'
}];
const tagItems = useMemo((): TagSelectItem[] => {
if (search.dropdowns.tags) {
return search.dropdowns.tags.map(tag => {
Expand Down Expand Up @@ -422,6 +434,16 @@ export function SearchBar() {
return strings.libraries[item] || item;
}} />
)}
<SearchableSelect
title={strings.browse.ruffleSupport}
items={ruffleSupportItems}
andToggle={view.advancedFilter.andToggles.ruffleSupport}
selected={view.advancedFilter.ruffleSupport}
generateItem={genSelectItem}
onWhitelist={onWhitelistRuffleSupport}
onBlacklist={onBlacklistRuffleSupport}
onClear={onClearRuffleSupport}
onSetAndToggle={onSetAndToggleRuffleSupport} />
<SearchableSelect
title={strings.app.developer}
items={developerItems}
Expand Down
2 changes: 2 additions & 0 deletions src/shared/preferences/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,7 @@ function parseAdvancedFilterAndToggles(parser: IObjectParserProp<AdvancedFilterA
parser.prop('developer', v => output.developer = !!v, true);
parser.prop('publisher', v => output.publisher = !!v, true)
parser.prop('series', v => output.series = !!v, true);
parser.prop('ruffleSupport', v => output.ruffleSupport = !!v, true);
}

function parseAdvancedFilter(parser: IObjectParserProp<AdvancedFilter>, output: AdvancedFilter) {
Expand All @@ -429,6 +430,7 @@ function parseAdvancedFilter(parser: IObjectParserProp<AdvancedFilter>, output:
parser.prop('developer', true).mapRaw((item, index) => output.developer[index] = parseAdvancedFilterToggle(str(item)));
parser.prop('publisher', true).mapRaw((item, index) => output.publisher[index] = parseAdvancedFilterToggle(str(item)));
parser.prop('series', true).mapRaw((item, index) => output.series[index] = parseAdvancedFilterToggle(str(item)));
parser.prop('ruffleSupport', true).mapRaw((item, index) => output.ruffleSupport[index] = parseAdvancedFilterToggle(str(item)));
parseAdvancedFilterAndToggles(parser.prop('andToggles'), output.andToggles);
}

Expand Down
7 changes: 6 additions & 1 deletion src/shared/search/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export function getDefaultAdvancedFilter(library?: string): AdvancedFilter {
developer: {},
publisher: {},
series: {},
ruffleSupport: {},
andToggles: {
library: false,
playMode: false,
Expand All @@ -49,6 +50,7 @@ export function getDefaultAdvancedFilter(library?: string): AdvancedFilter {
developer: false,
publisher: false,
series: false,
ruffleSupport: false,
}
};
}
Expand Down Expand Up @@ -78,7 +80,8 @@ export function isAdvFilterEmpty(advFilter: AdvancedFilter): boolean {
Object.keys(advFilter.tags).length === 0 &&
Object.keys(advFilter.developer).length === 0 &&
Object.keys(advFilter.publisher).length === 0 &&
Object.keys(advFilter.series).length === 0
Object.keys(advFilter.series).length === 0 &&
Object.keys(advFilter.ruffleSupport).length === 0
);
}

Expand Down Expand Up @@ -170,6 +173,7 @@ export function parseAdvancedFilter(advFilter: AdvancedFilter): GameFilter {
nonExactWhitelistFunc('publisher', 'publisher');
exactWhitelistFunc('series', 'series');
exactWhitelistFunc('tags', 'tags');
exactWhitelistFunc('ruffleSupport', 'ruffleSupport');

exactBlacklistFunc('library', 'library');
exactBlacklistFunc('platform', 'platforms');
Expand All @@ -178,6 +182,7 @@ export function parseAdvancedFilter(advFilter: AdvancedFilter): GameFilter {
nonExactBlacklistFunc('publisher', 'publisher');
exactBlacklistFunc('series', 'series');
exactBlacklistFunc('tags', 'tags');
exactBlacklistFunc('ruffleSupport', 'ruffleSupport');

return filter;
}
Expand Down
2 changes: 2 additions & 0 deletions typings/flashpoint-launcher.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,7 @@ declare module 'flashpoint-launcher' {
developer: boolean;
publisher: boolean;
series: boolean;
ruffleSupport: boolean;
}

type AdvancedFilter = {
Expand All @@ -1120,6 +1121,7 @@ declare module 'flashpoint-launcher' {
developer: Record<string, AdvancedFilterToggle>;
publisher: Record<string, AdvancedFilterToggle>;
series: Record<string, AdvancedFilterToggle>;
ruffleSupport: Record<string, AdvancedFilterToggle>;
andToggles: AdvancedFilterAndToggles;
}

Expand Down

0 comments on commit 54c5dd8

Please sign in to comment.