From 0e13b74b3b365eaeff7a03f7f961721d081251b9 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Sat, 26 Jul 2025 14:16:12 -0500 Subject: [PATCH] fix: multi-choice filter styles --- assets/components/download-option-tr.js | 1 - .../controllers/result_filter_controller.js | 76 ++++++------------- assets/styles/app.css | 12 ++- templates/components/Filter.html.twig | 18 ++--- 4 files changed, 42 insertions(+), 65 deletions(-) diff --git a/assets/components/download-option-tr.js b/assets/components/download-option-tr.js index 15c60aa..d6f3787 100644 --- a/assets/components/download-option-tr.js +++ b/assets/components/download-option-tr.js @@ -166,7 +166,6 @@ export default class DownloadOptionTr extends HTMLTableRowElement { if (selectedOptions.length === 0 || (selectedOptions.length === 1 && selectedOptions[0] === "") || - (selectedOptions.length === 1 && selectedOptions[0] === "-") || (selectedOptions.length === 1 && selectedOptions[0] === "n/a") ) { return true; diff --git a/assets/controllers/result_filter_controller.js b/assets/controllers/result_filter_controller.js index 6de0e4b..5bff603 100644 --- a/assets/controllers/result_filter_controller.js +++ b/assets/controllers/result_filter_controller.js @@ -19,6 +19,8 @@ export default class extends Controller { "quality": "", } + defaultOptions = ''; + static outlets = ['tv-episode-list'] static targets = ['resolution', 'codec', 'language', 'provider', 'season', 'quality', 'selectAll', 'downloadSelected'] static values = { @@ -65,68 +67,33 @@ export default class extends Controller { this.languages.push(language); } }); - - this.languageTarget.innerHTML = ''; - this.languageTarget.innerHTML += this.languages.sort() - .map((language) => { - const preferred = this.languageTarget.dataset.preferred.split(','); - if (preferred.includes(language.toLowerCase())) { - return ''; - } - return ''; - }) - .join(); + const preferred = JSON.parse(this.languageTarget.dataset.preferred); + this.languageTarget.innerHTML = this.#serializeSelectOptions(this.languages); + this.languageTarget.tomselect.items = preferred; } addProviders(option) { if (!this.providers.includes(option.provider)) { this.providers.push(option.provider); } - - const preferred = this.providerTarget.dataset.preferred; - if (preferred) { - this.providerTarget.innerHTML = ''; - this.providerTarget.innerHTML += ''; - } else { - this.providerTarget.innerHTML = ''; - } - - this.providerTarget.innerHTML += this.providers.sort() - .map((provider) => { - const preferred = this.languageTarget.dataset.preferred; - if (preferred === provider) { - return; - } - return '' - }) - .join(); + const preferred = JSON.parse(this.providerTarget.dataset.preferred); + this.providerTarget.innerHTML = this.#serializeSelectOptions(this.providers); + this.providerTarget.tomselect.items = preferred; } addQualities(option) { - if (!this.qualities.includes(option.quality)) { - if (option.quality.toLowerCase() in this.reverseMappedQualitiesValue) { - this.qualities.push(option.quality); + if (option.quality.toLowerCase() in this.reverseMappedQualitiesValue) { + let quality = this.reverseMappedQualitiesValue[option.quality.toLowerCase()]; + // converts api returned quality with a value the system recognizes + option.quality = quality; + if (!this.qualities.includes(option.quality)) { + this.qualities.push(quality); } } - - const preferred = this.qualityTarget.dataset.preferred; - if (preferred) { - this.qualityTarget.innerHTML = ''; - this.qualityTarget.innerHTML += ''; - } else { - this.qualityTarget.innerHTML = ''; - } - - this.qualityTarget.innerHTML += this.qualities.sort() - .map((quality) => { - const preferred = this.qualityTarget.dataset.preferred; - if (preferred === quality) { - return; - } - return '' - }) - .join(); + const preferred = JSON.parse(this.qualityTarget.dataset.preferred) ?? []; + this.qualityTarget.innerHTML = this.#serializeSelectOptions(this.qualities); + this.qualityTarget.tomselect.items = preferred; } async filter() { @@ -169,7 +136,14 @@ export default class extends Controller { } #fetchValuesFromNodeList(nodeList) { - console.log([...nodeList].map(option => option.value)) return [...nodeList].map(option => option.value) } + + #serializeSelectOptions(options) { + return this.defaultOptions + options.sort() + .map((option) => { + return '' + }) + .join(); + } } diff --git a/assets/styles/app.css b/assets/styles/app.css index ad2628a..8fad09c 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -173,13 +173,19 @@ dialog[data-dialog-target="dialog"][closing] { .item[data-ts-item] { background-image: none !important; border: none; - @apply bg-orange-500; + box-shadow: none; + text-shadow: none; + @apply bg-orange-500 rounded-ms font-bold; } @apply border-b-2 border-b-orange-600 bg-transparent; } + + .ts-wrapper.plugin-remove_button:not(.rtl) .item .remove { + @apply border-l border-l-orange-600 !important; + } } -.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove { - @apply border-l-orange-800; +.filter-label { + @apply flex flex-col gap-1 justify-between; } diff --git a/templates/components/Filter.html.twig b/templates/components/Filter.html.twig index c16d1cf..1c857f5 100644 --- a/templates/components/Filter.html.twig +++ b/templates/components/Filter.html.twig @@ -6,8 +6,8 @@ data-result-filter-tv-episode-list-outlet=".episode-list" data-action="change->result-filter#filter action-button:downloadSeason@window->result-filter#downloadSeason" > -
-