WIP Migrate filter panel

This commit is contained in:
Björn Fromme
2021-10-12 16:03:52 +02:00
parent 33cda815ce
commit c6bb54e8de
2 changed files with 289 additions and 229 deletions
@@ -8,263 +8,323 @@
pluginName="Ajax" pluginName="Ajax"
data="{'search-target': 'form'}"> data="{'search-target': 'form'}">
<div class="p-8 bg-cover text-white" <div class="mb-4 p-4 bg-ep-primary text-white"
style="background-image: url( {f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/winter.jpg')} )"> data-controller="collapse"
data-collapse-collapsed-value="true">
<div class="mb-4" <button data-action="click->collapse#toggle"
data-controller="collapse" class="flex items-center justify-between w-full">
data-collapse-collapsed-value="true"> <span class="uppercase font-bold">
<button data-action="click->collapse#toggle" Reisezeitraum {ep:dateRange(dateFrom: filterSettings.dateFrom, dateTo: filterSettings.dateTo, includeLabel: 0)}
class="flex items-center justify-between w-full"> </span>
<span class="uppercase font-bold text-lg"> <svg class="w-6 h-6 text-white transform"
Reisezeitraum {ep:dateRange(dateFrom: filterSettings.dateFrom, dateTo: filterSettings.dateTo, includeLabel: 0)} data-collapse-target="icon">
</span> <use href="#icon-arrow-right"></use>
<svg class="w-6 h-6 text-white transform" </svg>
data-collapse-target="icon"> </button>
<use href="#icon-arrow-right"></use> <div data-collapse-target="container"
</svg> class="pt-2">
</button> <f:form.hidden property="dateFrom"
<div data-collapse-target="container"> data="{'search-target': 'dateFrom'}"/>
<f:form.hidden property="dateFrom" <f:form.hidden property="dateTo"
data="{'search-target': 'dateFrom'}"/> data="{'search-target': 'dateTo'}"/>
<f:form.hidden property="dateTo" <div data-controller="datepicker"
data="{'search-target': 'dateTo'}"/> <f:if condition="{filterSettings.dateFrom} && {filterSettings.dateTo}">
<div data-controller="datepicker" data-datepicker-date-from-value="{filterSettings.dateFrom}"
<f:if condition="{filterSettings.dateFrom} && {filterSettings.dateTo}"> data-datepicker-date-to-value="{filterSettings.dateTo}"
data-datepicker-date-from-value="{filterSettings.dateFrom}" </f:if>
data-datepicker-date-to-value="{filterSettings.dateTo}" data-datepicker-min-date-value="{f:format.date(date: 'now', format: 'Y-m-d')}">
</f:if> <f:if condition="{settings.datePickerPresets}">
data-datepicker-min-date-value="{f:format.date(date: 'now', format: 'Y-m-d')}"> <div class="flex items-center justify-between pb-2">
<f:if condition="{settings.datePickerPresets}"> <f:for each="{settings.datePickerPresets}" as="preset">
<div class="flex items-center justify-between pb-2"> <button class="daterange__preset"
<f:for each="{settings.datePickerPresets}" as="preset"> data-preset='{preset -> f:format.json()}'
<button class="daterange__preset" data-action="datepicker#selectPreset">
data-preset='{preset -> f:format.json()}' <span>
data-action="datepicker#selectPreset"> {preset.label}
<span> </span>
{preset.label} </button>
</span> </f:for>
</button>
</f:for>
</div>
</f:if>
<input type="hidden"
data-datepicker-target="field">
<div class="flex items-center justify-between pt-2">
<button class="daterange__button focus:outline-none">
schließen
</button>
<button class="daterange__button focus:outline-none"
data-action="datepicker#reset">
zurücksetzen
</button>
</div> </div>
</f:if>
<input type="hidden"
data-datepicker-target="field">
<div class="flex items-center justify-between pt-2">
<button class="daterange__button focus:outline-none">
schließen
</button>
<button class="daterange__button focus:outline-none"
data-action="datepicker#reset">
zurücksetzen
</button>
</div> </div>
</div> </div>
</div> </div>
</div>
<div data-controller="collapse" <div class="mb-4 p-4 bg-ep-primary text-white"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.conceptUids}', then: 'false', else: 'true')}"> data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.conceptUids}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Reisekonzepte
</span>
<svg class="w-6 h-6 text-white transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container"
class="pt-2">
<ul class="mb-0 p-0 space-y-2">
<f:for each="{filterOptions.concepts}" as="concept">
<li>
<label>
<f:form.checkbox class="mr-2 rounded-full w-5 h-5 border-white ring-0 bg-transparent focus:ring-0 focus:border-none text-ep-primary"
property="conceptUids"
data="{action: 'search#filter'}"
value="{concept.uid}"/>
{concept.name}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<div class="px-4 divide-y">
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.countryUids} || {filterSettings.regionUids}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle" <button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full"> class="flex items-center justify-between w-full">
<span class="uppercase font-bold text-lg"> <span class="uppercase font-bold">
Reisekonzepte Reiseziel
</span> </span>
<svg class="w-6 h-6 text-white transform" <svg class="w-6 h-6 transform"
data-collapse-target="icon"> data-collapse-target="icon">
<use href="#icon-arrow-right"></use> <use href="#icon-arrow-right"></use>
</svg> </svg>
</button> </button>
<div data-collapse-target="container"> <div data-collapse-target="container">
<ul class="mb-0 p-0"> <ul class="mb-0 p-0">
<f:for each="{filterOptions.concepts}" as="concept"> <f:for each="{filterOptions.destinations}" as="destination">
<li> <li>
<f:form.checkbox class="mr-2 rounded-full w-6 h-6 border-0 ring-0 focus:border-0 focus:ring-0" <f:form.checkbox class="mr-2"
property="conceptUids" property="countryUids"
data="{action: 'search#filter'}" data="{action: 'search#filter'}"
value="{concept.uid}"/> value="{destination.country.uid}"/>
{concept.name} {destination.country.label}
<f:if condition="{destination.regions}">
<ul class="pl-4 pt-1">
<f:for each="{destination.regions}" as="region">
<li>
<f:form.checkbox class="mr-2"
property="regionUids"
data="{action: 'search#filter'}"
value="{region.uid}"/>
{region.label}
</li>
</f:for>
</ul>
</f:if>
</li> </li>
</f:for> </f:for>
</ul> </ul>
</div> </div>
</div> </div>
</div> <div class="py-2"
data-controller="collapse"
<div data-controller="collapse" data-collapse-collapsed-value="{f:if(condition: '{filterSettings.priceRanges}', then: 'false', else: 'true')}">
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.countryUids} || {filterSettings.regionUids}', then: 'false', else: 'true')}"> <button data-action="click->collapse#toggle"
<button data-action="click->collapse#toggle"> class="flex items-center justify-between w-full">
Reiseziel <span class="uppercase font-bold">
</button> Preis
<div data-collapse-target="container"> </span>
<ul class="mb-0 p-0"> <svg class="w-6 h-6 transform"
<f:for each="{filterOptions.destinations}" as="destination"> data-collapse-target="icon">
<li> <use href="#icon-arrow-right"></use>
<f:form.checkbox class="mr-2" </svg>
property="countryUids" </button>
data="{action: 'search#filter'}" <div data-collapse-target="container">
value="{destination.country.uid}"/> <ul class="mb-0 p-0">
{destination.country.label} <f:for each="{filterOptions.priceRanges}" as="range">
<f:if condition="{destination.regions}">
<ul class="pl-4 pt-1">
<f:for each="{destination.regions}" as="region">
<li>
<f:form.checkbox class="mr-2"
property="regionUids"
data="{action: 'search#filter'}"
value="{region.uid}"/>
{region.label}
</li>
</f:for>
</ul>
</f:if>
</li>
</f:for>
</ul>
</div>
</div>
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.priceRanges}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle">
Preis
</button>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<f:for each="{filterOptions.priceRanges}" as="range">
<li>
<label>
<f:form.checkbox class="mr-2"
property="priceRanges"
data="{action: 'search#filter'}"
value="{range.uid}"/>
{ep:priceRange(min: range.min, max: range.max)}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.pax} > 1', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle">
Personen
</button>
<div data-collapse-target="container">
<div class="border rounded">
<f:form.select property="pax"
options="{filterOptions.pax}"
data="{action: 'search#filter'}"/>
</div>
</div>
</div>
<f:variable name="hotelTypes" value="{
1: 'Ferienwohnung',
2: 'Sportclub',
3: 'Appartment',
4: 'Gästehaus',
5: 'Pension'
}"/>
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.hotelTypes}', then: 'false', else: 'true')}">
<label data-action="click->collapse#toggle">
Unterkunft
</label>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<f:for each="{filterOptions.hotelTypes}" as="type">
<li>
<label>
<f:form.checkbox class="mr-2"
property="hotelTypes"
data="{action: 'search#filter'}"
value="{type}"/>
{hotelTypes.{type}}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.boardTypes}', then: 'false', else: 'true')}">
<label data-action="click->collapse#toggle">
Verpflegung
</label>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<f:for each="{filterOptions.boardTypes}" as="type">
<f:if condition="{type.label}">
<li> <li>
<label> <label>
<f:form.checkbox class="mr-2" <f:form.checkbox class="mr-2"
property="boardTypes" property="priceRanges"
data="{action: 'search#filter'}" data="{action: 'search#filter'}"
value="{type.uid}"/> value="{range.uid}"/>
{type.label} {ep:priceRange(min: range.min, max: range.max)}
</label> </label>
</li> </li>
</f:if> </f:for>
</f:for>
</ul>
</div>
</div>
<f:variable name="roomTypes" value="{
1: 'EZ',
2: 'DZ / 2er',
3: '3er',
4: '4er',
5: 'ab 5 Pers.',
6: 'mit anderen'
}"/>
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.roomTypes}', then: 'false', else: 'true')}">
<label data-action="click->collapse#toggle">
Zimmerarten/Apart.
</label>
<div data-collapse-target="container">
<ul class="mb-0 p-0 p-0">
<f:for each="{filterOptions.roomTypes}" as="type">
<li>
<label>
<f:form.checkbox class="mr-2"
property="roomTypes"
data="{action: 'search#filter'}"
value="{type}"/>
{roomTypes.{type}}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<f:if condition="{filterOptions.busAvailable}">
<div data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: filterSettings.bus, then: 'false', else: 'true')}">
<label data-action="click->collapse#toggle">
Anreise
</label>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<li>
<label>
<f:form.checkbox class="mr-2"
property="bus"
data="{action: 'search#filter'}"
value="1"/>
Busanreise
</label>
</li>
</ul> </ul>
</div> </div>
</div> </div>
</f:if>
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.pax} > 1', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Personen
</span>
<svg class="w-6 h-6 transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container">
<div class="border rounded">
<f:form.select property="pax"
options="{filterOptions.pax}"
data="{action: 'search#filter'}"/>
</div>
</div>
</div>
<f:variable name="hotelTypes" value="{
1: 'Ferienwohnung',
2: 'Sportclub',
3: 'Appartment',
4: 'Gästehaus',
5: 'Pension'
}"/>
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.hotelTypes}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Unterkunft
</span>
<svg class="w-6 h-6 transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<f:for each="{filterOptions.hotelTypes}" as="type">
<li>
<label>
<f:form.checkbox class="mr-2"
property="hotelTypes"
data="{action: 'search#filter'}"
value="{type}"/>
{hotelTypes.{type}}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.boardTypes}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Verpflegung
</span>
<svg class="w-6 h-6 transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<f:for each="{filterOptions.boardTypes}" as="type">
<f:if condition="{type.label}">
<li>
<label>
<f:form.checkbox class="mr-2"
property="boardTypes"
data="{action: 'search#filter'}"
value="{type.uid}"/>
{type.label}
</label>
</li>
</f:if>
</f:for>
</ul>
</div>
</div>
<f:variable name="roomTypes" value="{
1: 'EZ',
2: 'DZ / 2er',
3: '3er',
4: '4er',
5: 'ab 5 Pers.',
6: 'mit anderen'
}"/>
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: '{filterSettings.roomTypes}', then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Zimmerarten/Apart.
</span>
<svg class="w-6 h-6 transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container">
<ul class="mb-0 p-0 p-0">
<f:for each="{filterOptions.roomTypes}" as="type">
<li>
<label>
<f:form.checkbox class="mr-2"
property="roomTypes"
data="{action: 'search#filter'}"
value="{type}"/>
{roomTypes.{type}}
</label>
</li>
</f:for>
</ul>
</div>
</div>
<f:if condition="{filterOptions.busAvailable}">
<div class="py-2"
data-controller="collapse"
data-collapse-collapsed-value="{f:if(condition: filterSettings.bus, then: 'false', else: 'true')}">
<button data-action="click->collapse#toggle"
class="flex items-center justify-between w-full">
<span class="uppercase font-bold">
Anreise
</span>
<svg class="w-6 h-6 transform"
data-collapse-target="icon">
<use href="#icon-arrow-right"></use>
</svg>
</button>
<div data-collapse-target="container">
<ul class="mb-0 p-0">
<li>
<label>
<f:form.checkbox class="mr-2"
property="bus"
data="{action: 'search#filter'}"
value="1"/>
Busanreise
</label>
</li>
</ul>
</div>
</div>
</f:if>
</div>
</f:form> </f:form>
@@ -6,13 +6,13 @@
<div class="col-span-3 lg:col-span-1 relative" <div class="col-span-3 lg:col-span-1 relative"
data-controller="collapse" data-controller="collapse"
data-collapse-until-value="991"> data-collapse-until-value="991">
<div class="lg:block bg-white" <div class="lg:block bg-white p-4"
data-collapse-target="container"> data-collapse-target="container">
<h3 class="headline headline--underlined px-8 py-4"> <h3 class="headline headline--underlined mb-4">
Filter Filter
</h3> </h3>
<f:render partial="Search/FilterPanel" arguments="{_all}"/> <f:render partial="Search/FilterPanel" arguments="{_all}"/>
<div class="px-8 py-4"> <div class="mt-4">
<button class="button button--secondary w-full" <button class="button button--secondary w-full"
data-action="search#reset"> data-action="search#reset">
Filter zurücksetzen Filter zurücksetzen