Mark unavailable items in data and with 💀 in ui, add emojis to category names, hide filter groups if ! query,

This commit is contained in:
Mario Zechner 2023-06-21 17:07:31 +02:00
parent d9ed69f578
commit 60ecb68924
7 changed files with 36 additions and 12 deletions

View File

@ -99,6 +99,7 @@ function mergePriceHistory(oldItems, items) {
if (model.stores[item.store]?.removeOld) {
removed[item.store] = removed[item.store] ? removed[item.store] + 1 : 1;
} else {
item.unavailable = true;
items.push(item);
}
}
@ -178,6 +179,7 @@ function compress(items) {
data.push(item.id);
data.push(item.name);
data.push(item.category ?? "A0");
data.push(item.unavailable ? 1 : 0);
data.push(item.priceHistory.length);
for (price of item.priceHistory) {
data.push(uniqueDates[price.date.replaceAll("-", "")]);

View File

@ -4,7 +4,7 @@
// field. E.g. "Obst & Gemüse > Salate" has the code "13", "Kühlwaren > Tofu" has the code "4C"
exports.categories = [
{
name: "Obst & Gemüse",
name: "🍌🥑 Obst & Gemüse",
subcategories: [
/*00*/ "Obst",
/*01*/ "Gemüse",
@ -13,7 +13,7 @@ exports.categories = [
],
},
{
name: "Brot & Gebäck",
name: "🍞🥐 Brot & Gebäck",
subcategories: [
/*10*/ "Aufbackbrötchen & Toast",
/*11*/ "Brot & Gebäck",
@ -23,7 +23,7 @@ exports.categories = [
],
},
{
name: "Getränke",
name: "🥤🍺 Getränke",
subcategories: [
/*20*/ "Alkoholfreie Getränke",
/*21*/ "Bier & Radler",
@ -35,7 +35,7 @@ exports.categories = [
],
},
{
name: "Kühlwaren",
name: "🥚🥛🥩 Kühlwaren",
subcategories: [
/*30*/ "Schnelle Küche",
/*31*/ "Eier",
@ -52,7 +52,7 @@ exports.categories = [
],
},
{
name: "Tiefkühl",
name: "🧊🍦 Tiefkühl",
subcategories: [
/*40*/ "Eis",
/*41*/ "Unbekannt", // Not available in Billa hierarchy, left blank
@ -65,7 +65,7 @@ exports.categories = [
],
},
{
name: "Grundnahrungsmittel",
name: "🌾 Grundnahrungsmittel",
subcategories: [
/*50*/ "Asia & Mexican Produkte",
/*51*/ "Baby",
@ -86,7 +86,7 @@ exports.categories = [
],
},
{
name: "Süßes & Salziges",
name: "🍫🍿 Süßes & Salziges",
subcategories: [
/*60*/ "Biskotten & Eiswaffeln",
/*61*/ "Für kluge Naschkatzen",
@ -96,7 +96,7 @@ exports.categories = [
],
},
{
name: "Pflege",
name: "👄👶 Pflege",
subcategories: [
/*70*/ "Baby",
/*71*/ "Damenhygiene",
@ -114,7 +114,7 @@ exports.categories = [
],
},
{
name: "Haushalt",
name: "🧹🧺 Haushalt",
subcategories: [
/*80*/ "Büro- & Schulartikel",
/*81*/ "Garten",
@ -135,7 +135,7 @@ exports.categories = [
],
},
{
name: "Haustier",
name: "🐶🐱 Haustier",
subcategories: [
/*90*/ "Hunde",
/*91*/ "Katzen",

View File

@ -176,6 +176,7 @@ class Items extends Model {
const id = data[i++];
const name = data[i++];
const category = data[i++];
const unavailable = data[i++] == 1;
const numPrices = data[i++];
const prices = new Array(numPrices);
for (let j = 0; j < numPrices; j++) {
@ -197,6 +198,7 @@ class Items extends Model {
id,
name,
category,
unavailable,
price: prices[0].price,
priceHistory: prices,
isWeighted,

View File

@ -183,6 +183,11 @@ thead > tr {
@apply bg-emerald-600/50;
@apply border-emerald-500;
}
.customcheckbox.indigo {
@apply bg-indigo-200;
@apply border-indigo-300;
@apply hover:bg-indigo-300;
}
/* items filter */
.items-filter {

View File

@ -78,6 +78,7 @@ class ItemsFilter extends View {
<custom-checkbox
x-id="category-${index}" x-state x-change
label="${category.name}"
class="indigo"
></custom-checkbox>`
)
.join("")}
@ -274,6 +275,20 @@ class ItemsFilter extends View {
}
}
if (query.length > 0 && query.charAt(0) == "!") {
elements.stores.classList.add("hidden");
elements.priceChanges.classList.add("hidden");
elements.misc.classList.add("hidden");
elements.priceDirection.classList.add("hidden");
elements.categories.classList.add("hidden");
} else {
if (this._filterByStores) elements.stores.classList.remove("hidden");
if (this._filterByPriceChanges) elements.priceChanges.classList.add("hidden");
if (this._filterByMisc) elements.misc.classList.add("hidden");
if (this._filterByPriceDirection) elements.priceDirection.classList.add("hidden");
elements.categories.classList.add("hidden");
}
log(`ItemsFilter - Filtering ${this.model.items.length} took ${deltaTime(start).toFixed(4)} secs, ${filteredItems.length} results.`);
this.model.removeListener(this._listener);

View File

@ -294,7 +294,7 @@ class ItemsList extends View {
const elements = View.elements(itemDom);
elements.store.innerText = item.store;
elements.name.href = stores[item.store].getUrl(item);
elements.name.innerText = item.name;
elements.name.innerText = item.name + (item.unavailable ? " 💀" : "");
elements.quantity.innerText = (item.isWeighted ? "⚖ " : "") + `${quantity} ${unit}`;
elements.price.innerText = `${Number(showUnitPrice ? unitPrice : price).toFixed(2)} ${priceUnit}`;
elements.priceHistory.innerHTML = priceHistory;

View File

@ -105,7 +105,7 @@ exports.initializeCategoryMapping = async (rawItems) => {
exports.mapCategory = (rawItem) => {
const path = categoriesToPath(rawItem);
return exports.categoryLookup[path];
return exports.categoryLookup[path]?.code;
};
exports.urlBase = "https://www.mpreis.at/shop/p/";