Fix filter bars
This commit is contained in:
@@ -47,11 +47,6 @@
|
|||||||
*/
|
*/
|
||||||
function buildFilterJSON(form) {
|
function buildFilterJSON(form) {
|
||||||
var filter = {};
|
var filter = {};
|
||||||
var yearMin = numberValue(form, "filter-year-min");
|
|
||||||
var yearMax = numberValue(form, "filter-year-max");
|
|
||||||
var playMin = numberValue(form, "filter-playtime-min");
|
|
||||||
var playMax = numberValue(form, "filter-playtime-max");
|
|
||||||
var mastered = form.querySelector('[name="filter-mastered"]');
|
|
||||||
|
|
||||||
// ── Search field ──
|
// ── Search field ──
|
||||||
var searchInput = form.querySelector('[name="filter-search"]');
|
var searchInput = form.querySelector('[name="filter-search"]');
|
||||||
@@ -87,62 +82,73 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// ── Session-specific fields ──
|
// 1. Text Fields
|
||||||
var pageIsSessions =
|
var textFields = [
|
||||||
!!form.querySelector('[data-search-select][data-search-select-mode="filter"][data-name="game"]');
|
{ name: "filter-price_currency", key: "price_currency" },
|
||||||
|
{ name: "filter-converted_currency", key: "converted_currency" },
|
||||||
// Emulated checkbox (sessions page)
|
{ name: "filter-name", key: "name" },
|
||||||
var emulated = form.querySelector('[name="filter-emulated"]');
|
{ name: "filter-group", key: "group" }
|
||||||
if (emulated && emulated.checked) {
|
];
|
||||||
filter.emulated = criterion(true, null, "EQUALS");
|
textFields.forEach(function (tf) {
|
||||||
}
|
var el = form.querySelector('[name="' + tf.name + '"]');
|
||||||
|
if (el && el.value.trim()) {
|
||||||
// Active checkbox (sessions page)
|
filter[tf.key] = { value: el.value.trim(), modifier: "EQUALS" };
|
||||||
var active = form.querySelector('[name="filter-active"]');
|
|
||||||
if (active && active.checked) {
|
|
||||||
filter.is_active = criterion(true, null, "EQUALS");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (yearMin !== "" && yearMax !== "") {
|
|
||||||
filter.year_released = criterion(yearMin, yearMax, "BETWEEN");
|
|
||||||
} else if (yearMin !== "") {
|
|
||||||
filter.year_released = criterion(yearMin, null, "GREATER_THAN");
|
|
||||||
} else if (yearMax !== "") {
|
|
||||||
filter.year_released = criterion(yearMax, null, "LESS_THAN");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (playMin !== "" || playMax !== "") {
|
|
||||||
var pMin = playMin !== "" ? Math.round(playMin * 60) : 0;
|
|
||||||
var pMax = playMax !== "" ? Math.round(playMax * 60) : 0;
|
|
||||||
// Skip if both are 0 — means slider is at default (no real filter)
|
|
||||||
if (pMin === 0 && pMax === 0) {
|
|
||||||
// don't add filter
|
|
||||||
} else {
|
|
||||||
var durKey = pageIsSessions ? "duration_minutes" : "playtime_minutes";
|
|
||||||
if (playMin !== "" && playMax !== "") {
|
|
||||||
filter[durKey] = criterion(pMin, pMax, "BETWEEN");
|
|
||||||
} else if (playMin !== "") {
|
|
||||||
filter[durKey] = criterion(pMin, null, "GREATER_THAN");
|
|
||||||
} else if (playMax !== "") {
|
|
||||||
filter[durKey] = criterion(pMax, null, "LESS_THAN");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
// ── Purchase-specific: num_purchases ──
|
// 2. Boolean Fields (Checkboxes)
|
||||||
var numGamesMin = numberValue(form, "filter-num-purchases-min");
|
var booleanFields = [
|
||||||
var numGamesMax = numberValue(form, "filter-num-purchases-max");
|
{ name: "filter-mastered", key: "mastered" },
|
||||||
if (numGamesMin !== "" && numGamesMax !== "") {
|
{ name: "filter-emulated", key: "emulated" },
|
||||||
filter.num_purchases = criterion(parseInt(numGamesMin, 10), parseInt(numGamesMax, 10), "BETWEEN");
|
{ name: "filter-active", key: "is_active" },
|
||||||
} else if (numGamesMin !== "") {
|
{ name: "filter-has-purchases", key: "has_purchases" },
|
||||||
filter.num_purchases = criterion(parseInt(numGamesMin, 10), null, "GREATER_THAN");
|
{ name: "filter-has-playevents", key: "has_playevents" },
|
||||||
} else if (numGamesMax !== "") {
|
{ name: "filter-refunded", key: "is_refunded" },
|
||||||
filter.num_purchases = criterion(parseInt(numGamesMax, 10), null, "LESS_THAN");
|
{ name: "filter-infinite", key: "infinite" },
|
||||||
}
|
{ name: "filter-needs-price-update", key: "needs_price_update" }
|
||||||
|
];
|
||||||
|
booleanFields.forEach(function (bf) {
|
||||||
|
var el = form.querySelector('[name="' + bf.name + '"]');
|
||||||
|
if (el && el.checked) {
|
||||||
|
filter[bf.key] = criterion(true, null, "EQUALS");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (mastered && mastered.checked) {
|
// 3. Range Fields
|
||||||
filter.mastered = criterion(true, null, "EQUALS");
|
var rangeFields = [
|
||||||
}
|
{ prefix: "filter-year", key: "year_released" },
|
||||||
|
{ prefix: "filter-session-count", key: "session_count" },
|
||||||
|
{ prefix: "filter-session-average", key: "session_average" },
|
||||||
|
{ prefix: "filter-duration-total-minutes", key: "duration_total_minutes" },
|
||||||
|
{ prefix: "filter-duration-manual-minutes", key: "duration_manual_minutes" },
|
||||||
|
{ prefix: "filter-duration-calculated-minutes", key: "duration_calculated_minutes" },
|
||||||
|
{ prefix: "filter-num-purchases", key: "num_purchases" },
|
||||||
|
{ prefix: "filter-price", key: "price" },
|
||||||
|
{ prefix: "filter-days-to-finish", key: "days_to_finish" },
|
||||||
|
{ prefix: "filter-playtime", key: "playtime_minutes", convert: function(v) { return Math.round(v * 60); }, ignoreZeroZero: true }
|
||||||
|
];
|
||||||
|
|
||||||
|
rangeFields.forEach(function (rf) {
|
||||||
|
var vMin = numberValue(form, rf.prefix + "-min");
|
||||||
|
var vMax = numberValue(form, rf.prefix + "-max");
|
||||||
|
|
||||||
|
if (rf.convert) {
|
||||||
|
if (vMin !== "") vMin = rf.convert(vMin);
|
||||||
|
if (vMax !== "") vMax = rf.convert(vMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rf.ignoreZeroZero && vMin === 0 && vMax === 0) {
|
||||||
|
return; // skip if both are 0 means slider at default
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vMin !== "" && vMax !== "") {
|
||||||
|
filter[rf.key] = criterion(vMin, vMax, "BETWEEN");
|
||||||
|
} else if (vMin !== "") {
|
||||||
|
filter[rf.key] = criterion(vMin, null, "GREATER_THAN");
|
||||||
|
} else if (vMax !== "") {
|
||||||
|
filter[rf.key] = criterion(vMax, null, "LESS_THAN");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return filter;
|
return filter;
|
||||||
}
|
}
|
||||||
@@ -196,10 +202,19 @@
|
|||||||
if (!url) return;
|
if (!url) return;
|
||||||
|
|
||||||
var mode = "games";
|
var mode = "games";
|
||||||
if (window.location.pathname.indexOf("session") !== -1) mode = "sessions";
|
var path = window.location.pathname;
|
||||||
else if (window.location.pathname.indexOf("purchase") !== -1) mode = "purchases";
|
if (path.indexOf("session") !== -1) mode = "sessions";
|
||||||
|
else if (path.indexOf("purchase") !== -1) mode = "purchases";
|
||||||
|
else if (path.indexOf("device") !== -1) mode = "devices";
|
||||||
|
else if (path.indexOf("platform") !== -1) mode = "platforms";
|
||||||
|
else if (path.indexOf("playevent") !== -1) mode = "playevents";
|
||||||
|
|
||||||
fetch(url + "?mode=" + mode, { credentials: "same-origin" })
|
var query = "";
|
||||||
|
if (url.indexOf("mode=") === -1) {
|
||||||
|
query = (url.indexOf("?") !== -1 ? "&" : "?") + "mode=" + mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(url + query, { credentials: "same-origin" })
|
||||||
.then(function (r) {
|
.then(function (r) {
|
||||||
if (!r.ok) throw new Error("Failed to load presets");
|
if (!r.ok) throw new Error("Failed to load presets");
|
||||||
return r.text();
|
return r.text();
|
||||||
@@ -277,8 +292,12 @@
|
|||||||
var body = new URLSearchParams();
|
var body = new URLSearchParams();
|
||||||
body.append("name", name);
|
body.append("name", name);
|
||||||
var mode = "games";
|
var mode = "games";
|
||||||
if (window.location.pathname.indexOf("session") !== -1) mode = "sessions";
|
var path = window.location.pathname;
|
||||||
else if (window.location.pathname.indexOf("purchase") !== -1) mode = "purchases";
|
if (path.indexOf("session") !== -1) mode = "sessions";
|
||||||
|
else if (path.indexOf("purchase") !== -1) mode = "purchases";
|
||||||
|
else if (path.indexOf("device") !== -1) mode = "devices";
|
||||||
|
else if (path.indexOf("platform") !== -1) mode = "platforms";
|
||||||
|
else if (path.indexOf("playevent") !== -1) mode = "playevents";
|
||||||
body.append("mode", mode);
|
body.append("mode", mode);
|
||||||
body.append("filter", JSON.stringify(filterObj));
|
body.append("filter", JSON.stringify(filterObj));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user