mirror of
https://github.com/rommapp/romm.git
synced 2026-02-18 23:42:07 +01:00
feat: add logic operators for multi-value filters in collections and roms handlers
This commit is contained in:
@@ -294,6 +294,14 @@ class DBCollectionsHandler(DBBaseHandler):
|
||||
selected_status=criteria.get("selected_status"),
|
||||
regions=regions,
|
||||
languages=languages,
|
||||
# Logic operators for multi-value filters
|
||||
genres_logic=criteria.get("genres_logic", "any"),
|
||||
franchises_logic=criteria.get("franchises_logic", "any"),
|
||||
collections_logic=criteria.get("collections_logic", "any"),
|
||||
companies_logic=criteria.get("companies_logic", "any"),
|
||||
age_ratings_logic=criteria.get("age_ratings_logic", "any"),
|
||||
regions_logic=criteria.get("regions_logic", "any"),
|
||||
languages_logic=criteria.get("languages_logic", "any"),
|
||||
user_id=user_id,
|
||||
order_by=criteria.get("order_by", "name"),
|
||||
order_dir=criteria.get("order_dir", "asc"),
|
||||
|
||||
@@ -735,6 +735,14 @@ class DBRomsHandler(DBBaseHandler):
|
||||
selected_status=kwargs.get("selected_status", None),
|
||||
regions=kwargs.get("regions", None),
|
||||
languages=kwargs.get("languages", None),
|
||||
# Logic operators for multi-value filters
|
||||
genres_logic=kwargs.get("genres_logic", "any"),
|
||||
franchises_logic=kwargs.get("franchises_logic", "any"),
|
||||
collections_logic=kwargs.get("collections_logic", "any"),
|
||||
companies_logic=kwargs.get("companies_logic", "any"),
|
||||
age_ratings_logic=kwargs.get("age_ratings_logic", "any"),
|
||||
regions_logic=kwargs.get("regions_logic", "any"),
|
||||
languages_logic=kwargs.get("languages_logic", "any"),
|
||||
user_id=kwargs.get("user_id", None),
|
||||
)
|
||||
return session.scalars(roms).all()
|
||||
|
||||
@@ -42,6 +42,13 @@ const {
|
||||
selectedPlatforms,
|
||||
selectedRegions,
|
||||
selectedLanguages,
|
||||
genresLogic,
|
||||
franchisesLogic,
|
||||
collectionsLogic,
|
||||
companiesLogic,
|
||||
ageRatingsLogic,
|
||||
regionsLogic,
|
||||
languagesLogic,
|
||||
} = storeToRefs(galleryFilterStore);
|
||||
|
||||
const emitter = inject<Emitter<Events>>("emitter");
|
||||
@@ -133,16 +140,31 @@ async function createSmartCollection() {
|
||||
if (filterRA.value) filterCriteria.has_ra = true;
|
||||
if (filterMissing.value) filterCriteria.missing = true;
|
||||
if (filterVerified.value) filterCriteria.verified = true;
|
||||
if (selectedGenres.value && selectedGenres.value.length > 0)
|
||||
if (selectedGenres.value && selectedGenres.value.length > 0) {
|
||||
filterCriteria.genres = selectedGenres.value;
|
||||
if (selectedFranchises.value && selectedFranchises.value.length > 0)
|
||||
if (selectedGenres.value.length > 1)
|
||||
filterCriteria.genres_logic = genresLogic.value;
|
||||
}
|
||||
if (selectedFranchises.value && selectedFranchises.value.length > 0) {
|
||||
filterCriteria.franchises = selectedFranchises.value;
|
||||
if (selectedCollections.value && selectedCollections.value.length > 0)
|
||||
if (selectedFranchises.value.length > 1)
|
||||
filterCriteria.franchises_logic = franchisesLogic.value;
|
||||
}
|
||||
if (selectedCollections.value && selectedCollections.value.length > 0) {
|
||||
filterCriteria.collections = selectedCollections.value;
|
||||
if (selectedCompanies.value && selectedCompanies.value.length > 0)
|
||||
if (selectedCollections.value.length > 1)
|
||||
filterCriteria.collections_logic = collectionsLogic.value;
|
||||
}
|
||||
if (selectedCompanies.value && selectedCompanies.value.length > 0) {
|
||||
filterCriteria.companies = selectedCompanies.value;
|
||||
if (selectedAgeRatings.value && selectedAgeRatings.value.length > 0)
|
||||
if (selectedCompanies.value.length > 1)
|
||||
filterCriteria.companies_logic = companiesLogic.value;
|
||||
}
|
||||
if (selectedAgeRatings.value && selectedAgeRatings.value.length > 0) {
|
||||
filterCriteria.age_ratings = selectedAgeRatings.value;
|
||||
if (selectedAgeRatings.value.length > 1)
|
||||
filterCriteria.age_ratings_logic = ageRatingsLogic.value;
|
||||
}
|
||||
if (selectedStatuses.value && selectedStatuses.value.length > 0) {
|
||||
const statusKeys = selectedStatuses.value
|
||||
.filter((s): s is string => s !== null)
|
||||
@@ -152,10 +174,16 @@ async function createSmartCollection() {
|
||||
filterCriteria.selected_status = statusKeys;
|
||||
}
|
||||
}
|
||||
if (selectedRegions.value && selectedRegions.value.length > 0)
|
||||
if (selectedRegions.value && selectedRegions.value.length > 0) {
|
||||
filterCriteria.regions = selectedRegions.value;
|
||||
if (selectedLanguages.value && selectedLanguages.value.length > 0)
|
||||
if (selectedRegions.value.length > 1)
|
||||
filterCriteria.regions_logic = regionsLogic.value;
|
||||
}
|
||||
if (selectedLanguages.value && selectedLanguages.value.length > 0) {
|
||||
filterCriteria.languages = selectedLanguages.value;
|
||||
if (selectedLanguages.value.length > 1)
|
||||
filterCriteria.languages_logic = languagesLogic.value;
|
||||
}
|
||||
|
||||
const { data } = await collectionApi.createSmartCollection({
|
||||
smartCollection: {
|
||||
|
||||
Reference in New Issue
Block a user