@bytebrand/fe-ui-core-autobahn 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/autode-logo.svg +6 -6
- package/cards/CarCard.tsx +174 -174
- package/cards/CarRow.tsx +186 -182
- package/cards/cardParts.tsx +529 -489
- package/cards/index.ts +37 -35
- package/cards/types.ts +122 -114
- package/chrome/Footer.tsx +189 -189
- package/chrome/TopBar.tsx +405 -405
- package/chrome/index.ts +20 -20
- package/chrome/svg.d.ts +11 -11
- package/compat/AccardionSection/AccardionSection.styl +45 -45
- package/compat/AccardionSection/AccardionSection.tsx +56 -56
- package/compat/AccordionWidget/AccordionWidget.styl +220 -220
- package/compat/AccordionWidget/AccordionWidget.tsx +257 -257
- package/compat/AccordionWrapper/AccordionItem/AccordionItem.styl +34 -34
- package/compat/AccordionWrapper/AccordionItem/AccordionItem.tsx +64 -64
- package/compat/AccordionWrapper/AccordionWrapper.tsx +34 -34
- package/compat/AdvantageItem/AdvantageItem.styl +47 -47
- package/compat/AdvantageItem/AdvantageItem.tsx +26 -26
- package/compat/Alternative/DealerInfo.styl +116 -116
- package/compat/Alternative/DealerInfo.tsx +171 -171
- package/compat/Badge/Badge.styl +44 -44
- package/compat/Badge/Badge.tsx +25 -25
- package/compat/BodyTypeIcons/Audi.tsx +9 -9
- package/compat/BodyTypeIcons/Bmw.tsx +860 -860
- package/compat/BodyTypeIcons/Ford.tsx +31 -31
- package/compat/BodyTypeIcons/IconsConfig.tsx +44 -44
- package/compat/BodyTypeIcons/IconsConfigCompact.tsx +30 -30
- package/compat/BodyTypeIcons/Mazda.tsx +44 -44
- package/compat/BodyTypeIcons/MercedesBenz.tsx +38 -38
- package/compat/BodyTypeIcons/Opel.tsx +19 -19
- package/compat/BodyTypeIcons/Search.tsx +19 -19
- package/compat/BodyTypeIcons/SelectorCategoryCombi.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryCompact.tsx +20 -20
- package/compat/BodyTypeIcons/SelectorCategoryConvertible.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryCoupe.tsx +60 -60
- package/compat/BodyTypeIcons/SelectorCategoryMinibus.tsx +64 -64
- package/compat/BodyTypeIcons/SelectorCategorySedan.tsx +69 -69
- package/compat/BodyTypeIcons/SelectorCategorySuv.tsx +77 -77
- package/compat/BodyTypeIcons/SelectorCategoryTransporter.tsx +68 -68
- package/compat/BodyTypeIcons/SelectorCategoryVan.tsx +72 -72
- package/compat/BodyTypeIcons/Volkswagen.tsx +330 -330
- package/compat/BodyTypeIcons/index.ts +17 -17
- package/compat/Button/Button.tsx +65 -65
- package/compat/ButtonOld/Button.styl +65 -65
- package/compat/ButtonOld/Button.tsx +84 -84
- package/compat/Checkbox/Checkbox.styl +119 -119
- package/compat/Checkbox/Checkbox.tsx +151 -151
- package/compat/Checkbox/FormCheckbox.styl +22 -22
- package/compat/Checkbox/FormCheckbox.tsx +86 -86
- package/compat/Co2Widget/CO2Efficiency.styl +219 -219
- package/compat/Co2Widget/CO2Efficiency.tsx +93 -93
- package/compat/ContactInfo/ContactInfo.styl +22 -22
- package/compat/ContactInfo/ContactInfo.tsx +161 -161
- package/compat/ContactInfo/TemporaryTranslation.ts +11 -11
- package/compat/CookieModal/CookieModal.tsx +49 -49
- package/compat/CookieModal/Modal.tsx +43 -43
- package/compat/CookieModal/ModalsConfig.tsx +23 -23
- package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.styl +86 -86
- package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.tsx +184 -184
- package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.styl +66 -66
- package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.tsx +51 -51
- package/compat/CookieModal/modals/TestModal.tsx +7 -7
- package/compat/CookieModal/useModal.ts +13 -13
- package/compat/CustomerQuote/CustomerQuote.styl +79 -79
- package/compat/CustomerQuote/CustomerQuote.tsx +68 -68
- package/compat/CustomerQuotesSlider/CustomerQuotesSlider.styl +46 -46
- package/compat/CustomerQuotesSlider/CustomerQuotesSlider.tsx +79 -79
- package/compat/CustomerQuotesSlider/SliderArrow.tsx +20 -20
- package/compat/CustomerQuotesSlider/slider.global.styl +2 -2
- package/compat/ExpansionPanel/ExpansionPanel.tsx +68 -68
- package/compat/FirstInfoBlock/FirstInfoBlock.styl +33 -33
- package/compat/FirstInfoBlock/FirstInfoBlock.tsx +49 -49
- package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.styl +66 -66
- package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.tsx +21 -21
- package/compat/FormattedNumber/FormattedNumber.styl +1 -1
- package/compat/FormattedNumber/FormattedNumber.tsx +90 -90
- package/compat/IconContainer/IconContainer.styl +23 -23
- package/compat/IconContainer/IconContainer.tsx +34 -34
- package/compat/Image/Image.styl +109 -109
- package/compat/Image/Image.tsx +302 -302
- package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.styl +7 -7
- package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.tsx +30 -30
- package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.styl +122 -122
- package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.tsx +199 -199
- package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.styl +3 -3
- package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.tsx +15 -15
- package/compat/ImageSettings/OptionsTable/OptionsTable.styl +47 -47
- package/compat/ImageSettings/OptionsTable/OptionsTable.tsx +122 -122
- package/compat/ImageSettings/PricePlan/PricePlan.styl +63 -63
- package/compat/ImageSettings/PricePlan/PricePlan.tsx +32 -32
- package/compat/ImageSettings/index.ts +42 -42
- package/compat/ImagesSet/ImagesSet.styl +27 -27
- package/compat/ImagesSet/ImagesSet.tsx +76 -76
- package/compat/InfoBlockWrapper/InfoBlockWrapper.styl +41 -41
- package/compat/InfoBlockWrapper/InfoBlockWrapper.tsx +46 -46
- package/compat/Loader/Loader.styl +39 -39
- package/compat/Loader/Loader.tsx +32 -32
- package/compat/MagnifyGlass/MagnifyGlass.styl +33 -33
- package/compat/MagnifyGlass/MagnifyGlass.tsx +213 -213
- package/compat/MdAccordionGroup/MdAccordionGroup.tsx +53 -53
- package/compat/MdCheckbox/MdCheckbox.tsx +69 -69
- package/compat/MdField/MdField.tsx +100 -100
- package/compat/MdSelect/MdSelect.tsx +103 -103
- package/compat/MdSwitch/MdSwitch.tsx +29 -29
- package/compat/MdTabs/MdTabs.tsx +47 -47
- package/compat/MdTooltip/MdTooltip.tsx +31 -31
- package/compat/OfferDetailedSection/OfferDetailedSection.styl +31 -31
- package/compat/OfferDetailedSection/OfferDetailedSection.tsx +100 -100
- package/compat/OfferDetailedSection/partials/PanelConfig.styl +131 -131
- package/compat/OfferDetailedSection/partials/PanelConfig.tsx +121 -121
- package/compat/OfferPanel/AboAccordion/AboAccordion.styl +24 -24
- package/compat/OfferPanel/AboAccordion/AboAccordion.tsx +128 -128
- package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.styl +11 -11
- package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.tsx +35 -35
- package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.styl +20 -20
- package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.tsx +25 -25
- package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.styl +13 -13
- package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.tsx +39 -39
- package/compat/OfferPanel/MuiOfferPeriod/MuiOfferPeriod.tsx +42 -42
- package/compat/OfferPanel/OfferCheckboxGroup/CheckboxContainer.tsx +140 -140
- package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.styl +144 -144
- package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.tsx +23 -23
- package/compat/OfferPanel/OfferPanel.styl +193 -193
- package/compat/OfferPanel/OfferPanel.tsx +81 -81
- package/compat/OfferPanel/OfferPeriod/OfferPeriod.styl +24 -24
- package/compat/OfferPanel/OfferPeriod/OfferPeriod.tsx +45 -45
- package/compat/OfferPanel/RangeGroup/RangeGroup.tsx +39 -39
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styl +119 -119
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styled.tsx +33 -33
- package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.tsx +122 -122
- package/compat/PriceRating/PriceRating.styl +47 -47
- package/compat/PriceRating/PriceRating.tsx +64 -64
- package/compat/PriceRatingDetailed/PriceRatingDetailed.styl +120 -120
- package/compat/PriceRatingDetailed/PriceRatingDetailed.tsx +191 -191
- package/compat/PricingToolBlock/PricingTool.styl +6 -6
- package/compat/PricingToolBlock/PricingTool.tsx +29 -29
- package/compat/Radio/Radio.styl +115 -115
- package/compat/Radio/Radio.tsx +141 -141
- package/compat/Radio/RadioGroup.styl +5 -5
- package/compat/Radio/RadioGroup.tsx +65 -65
- package/compat/Range/Range.tsx +79 -79
- package/compat/RateSearchValue/RateSearchValue.styl +22 -22
- package/compat/RateSearchValue/RateSearchValue.tsx +55 -55
- package/compat/RateSearchWidget/RateSearchWidget.styl +106 -106
- package/compat/RateSearchWidget/RateSearchWidget.tsx +163 -163
- package/compat/ServiceBlockItem/ServiceBlockItem.styl +47 -47
- package/compat/ServiceBlockItem/ServiceBlockItem.tsx +25 -25
- package/compat/SkeletonItem/SkeletonItem.styl +80 -80
- package/compat/SkeletonItem/SkeletonItem.tsx +80 -80
- package/compat/StarButton/StarButton.styl +39 -39
- package/compat/StarButton/StarButton.tsx +31 -31
- package/compat/TabPanel/TabPanel.tsx +28 -28
- package/compat/TimePicker/TimePicker.styl +22 -22
- package/compat/TimePicker/TimePicker.tsx +156 -156
- package/compat/Tooltip/Tooltip.styl +117 -117
- package/compat/Tooltip/Tooltip.tsx +63 -63
- package/compat/Usp/Usp.styl +78 -78
- package/compat/Usp/Usp.tsx +30 -30
- package/compat/Usp/uspTranslate.ts +12 -12
- package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.styl +36 -36
- package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.tsx +178 -178
- package/compat/VehicleDetailedSidebar/partials/Price.styl +27 -27
- package/compat/VehicleDetailedSidebar/partials/Price.tsx +41 -41
- package/compat/VehicleDetailedSidebar/partials/PriceContent.styl +123 -123
- package/compat/VehicleDetailedSidebar/partials/PriceContent.tsx +128 -128
- package/compat/VehicleDetailedSidebar/partials/Properties.styl +58 -58
- package/compat/VehicleDetailedSidebar/partials/Properties.tsx +155 -155
- package/compat/VehicleDetailedSidebar/partials/Title.styl +35 -35
- package/compat/VehicleDetailedSidebar/partials/Title.tsx +33 -33
- package/compat/VehicleDetailedSlider/VehicleDetailedSlider.styl +146 -146
- package/compat/VehicleDetailedSlider/VehicleDetailedSlider.tsx +382 -382
- package/compat/VehicleDetailedSlider/partials/MobileStast.tsx +61 -61
- package/compat/VehicleDetailedSlider/partials/MobileStats.styl +71 -71
- package/compat/VehicleDetailedSlider/partials/PriceData.styl +50 -50
- package/compat/VehicleDetailedSlider/partials/PriceData.tsx +67 -67
- package/compat/VehicleDetailedSlider/partials/Stats.styl +80 -80
- package/compat/VehicleDetailedSlider/partials/Stats.tsx +62 -62
- package/compat/VehicleDetailedSlider/partials/Title.styl +44 -44
- package/compat/VehicleDetailedSlider/partials/Title.tsx +36 -36
- package/compat/VehicleFormattedPrice/VehicleFormattedPrice.styl +148 -148
- package/compat/VehicleFormattedPrice/VehicleFormattedPrice.tsx +163 -163
- package/compat/VehicleSlider/VehicleSlider.styl +62 -62
- package/compat/VehicleSlider/VehicleSlider.tsx +125 -125
- package/compat/VehicleSlider/VehicleSliderForSRL.tsx +175 -175
- package/compat/VehicleSmallCard/SeoText/SeoText.styl +8 -8
- package/compat/VehicleSmallCard/SeoText/SeoText.tsx +16 -16
- package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +204 -204
- package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +199 -199
- package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +273 -273
- package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +179 -179
- package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +165 -165
- package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +299 -299
- package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +32 -32
- package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.tsx +35 -35
- package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.styl +135 -135
- package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +91 -91
- package/compat/VehicleSmallCard/VehicleSmallCard.styl +309 -309
- package/compat/VehicleSmallCard/VehicleSmallCard.tsx +448 -448
- package/compat/index.ts +77 -77
- package/compat/legacy-theme/mixins.styl +93 -93
- package/compat/legacy-theme/priceReviewColors.styl +12 -12
- package/compat/legacy-theme/slider.global.styl +5 -5
- package/compat/legacy-theme/theme.styl +136 -136
- package/compat/withLabel/withLabel.styl +33 -33
- package/compat/withLabel/withLabel.tsx +44 -44
- package/compat/withStats/withStats.styl +174 -174
- package/compat/withStats/withStats.tsx +238 -238
- package/constants/RateSearchWidget.ts +15 -15
- package/constants/Search.ts +290 -290
- package/constants/SearchWidget.ts +108 -108
- package/constants/app.ts +223 -223
- package/constants/common.ts +127 -127
- package/constants/core.ts +131 -131
- package/constants/highlights.ts +165 -165
- package/constants/price.ts +9 -9
- package/constants/selectors.ts +38 -38
- package/constants.ts +91 -91
- package/data/DataTransformers.ts +88 -88
- package/data/fieldMapping.ts +364 -342
- package/data/toAutobahnCar.ts +455 -442
- package/iconsvg/IconSVG.tsx +30 -30
- package/iconsvg/IconSVGConfig.tsx +768 -768
- package/iconsvg/SVG/AboPartner.tsx +16 -16
- package/iconsvg/SVG/ArrowQuotes.tsx +22 -22
- package/iconsvg/SVG/CloseIcon.tsx +17 -17
- package/iconsvg/SVG/CloseIconSelect.tsx +18 -18
- package/iconsvg/SVG/ClosedLockIcon.tsx +18 -18
- package/iconsvg/SVG/DealerCheckIcon.tsx +18 -18
- package/iconsvg/SVG/DealerPopoverMail.tsx +21 -21
- package/iconsvg/SVG/DealerPopoverPhone.tsx +21 -21
- package/iconsvg/SVG/GrayPhoneIcon.tsx +22 -22
- package/iconsvg/SVG/InternetIcon.tsx +18 -18
- package/iconsvg/SVG/WhiteEnvelopeIcon.tsx +21 -21
- package/iconsvg/SVG/bodyType/Cabrio.tsx +23 -23
- package/iconsvg/SVG/bodyType/Coupe.tsx +22 -22
- package/iconsvg/SVG/bodyType/Minibus.tsx +22 -22
- package/iconsvg/SVG/bodyType/Other.tsx +25 -25
- package/iconsvg/SVG/bodyType/Sedan.tsx +22 -22
- package/iconsvg/SVG/bodyType/SelectorCategoryCombi.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryCompact.tsx +20 -20
- package/iconsvg/SVG/bodyType/SelectorCategoryConvertible.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryCoupe.tsx +60 -60
- package/iconsvg/SVG/bodyType/SelectorCategoryMinibus.tsx +64 -64
- package/iconsvg/SVG/bodyType/SelectorCategoryOther.tsx +60 -60
- package/iconsvg/SVG/bodyType/SelectorCategorySedan.tsx +69 -69
- package/iconsvg/SVG/bodyType/SelectorCategorySuv.tsx +77 -77
- package/iconsvg/SVG/bodyType/SelectorCategoryTransporter.tsx +68 -68
- package/iconsvg/SVG/bodyType/SelectorCategoryVan.tsx +72 -72
- package/iconsvg/SVG/bodyType/Small.tsx +23 -23
- package/iconsvg/SVG/bodyType/Suv.tsx +23 -23
- package/iconsvg/SVG/bodyType/Van.tsx +23 -23
- package/iconsvg/SVG/bodyType/Wagon.tsx +23 -23
- package/iconsvg/SVG/common/AddIcon.tsx +16 -16
- package/iconsvg/SVG/common/AddPlus.tsx +16 -16
- package/iconsvg/SVG/common/AddressDashboard.tsx +29 -29
- package/iconsvg/SVG/common/AddressIcon.tsx +20 -20
- package/iconsvg/SVG/common/ArrowDetailedAccordionBlue.tsx +26 -26
- package/iconsvg/SVG/common/ArrowDownBlue.tsx +21 -21
- package/iconsvg/SVG/common/ArrowSelect.tsx +23 -23
- package/iconsvg/SVG/common/ArrowStepDown.tsx +18 -18
- package/iconsvg/SVG/common/Autocheck.tsx +19 -19
- package/iconsvg/SVG/common/AutodeLogo.tsx +36 -36
- package/iconsvg/SVG/common/Avatar.tsx +17 -17
- package/iconsvg/SVG/common/BellGray.tsx +19 -19
- package/iconsvg/SVG/common/BigInfoTransparent.tsx +13 -13
- package/iconsvg/SVG/common/Browse.tsx +20 -20
- package/iconsvg/SVG/common/Calendar.tsx +24 -24
- package/iconsvg/SVG/common/CallbackDashboard.tsx +30 -30
- package/iconsvg/SVG/common/Camera.tsx +17 -17
- package/iconsvg/SVG/common/Car.tsx +16 -16
- package/iconsvg/SVG/common/CarBody.tsx +19 -19
- package/iconsvg/SVG/common/CarFront.tsx +43 -43
- package/iconsvg/SVG/common/CarInspectionCheck.tsx +21 -21
- package/iconsvg/SVG/common/CarInspectionScheme0.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme1.tsx +53 -53
- package/iconsvg/SVG/common/CarInspectionScheme2.tsx +52 -52
- package/iconsvg/SVG/common/CarInspectionScheme3.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme4.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme5.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionScheme6.tsx +32 -32
- package/iconsvg/SVG/common/CarInspectionSchemeGeneral copy.tsx +24 -24
- package/iconsvg/SVG/common/CarInspectionSchemeGeneral.tsx +24 -24
- package/iconsvg/SVG/common/CheckBlue.tsx +18 -18
- package/iconsvg/SVG/common/CheckGreen.tsx +22 -22
- package/iconsvg/SVG/common/CheckMark.tsx +16 -16
- package/iconsvg/SVG/common/CheckWhite.tsx +19 -19
- package/iconsvg/SVG/common/Chevron.tsx +17 -17
- package/iconsvg/SVG/common/CircledCheckmark.tsx +25 -25
- package/iconsvg/SVG/common/Clock.tsx +18 -18
- package/iconsvg/SVG/common/Close.tsx +19 -19
- package/iconsvg/SVG/common/CloseGrey.tsx +22 -22
- package/iconsvg/SVG/common/ContactEmail.tsx +21 -21
- package/iconsvg/SVG/common/ContactPhone.tsx +28 -28
- package/iconsvg/SVG/common/CopyIcon copy.tsx +22 -22
- package/iconsvg/SVG/common/CopyIcon.tsx +22 -22
- package/iconsvg/SVG/common/CopyIconForDealer.tsx +21 -21
- package/iconsvg/SVG/common/DashboardIcon.tsx +20 -20
- package/iconsvg/SVG/common/DashboardQuestionMark.tsx +20 -20
- package/iconsvg/SVG/common/DealersIcon.tsx +20 -20
- package/iconsvg/SVG/common/DeleteCircle.tsx +31 -31
- package/iconsvg/SVG/common/DeleteV1Icon.tsx +18 -18
- package/iconsvg/SVG/common/DeliveryDashboard.tsx +25 -25
- package/iconsvg/SVG/common/DeliveryMail.tsx +24 -24
- package/iconsvg/SVG/common/Discount100De.tsx +18 -18
- package/iconsvg/SVG/common/Discount100En.tsx +19 -19
- package/iconsvg/SVG/common/Discount66De.tsx +28 -28
- package/iconsvg/SVG/common/Discount66En.tsx +20 -20
- package/iconsvg/SVG/common/DoneIcon.tsx +18 -18
- package/iconsvg/SVG/common/EditCircle.tsx +32 -32
- package/iconsvg/SVG/common/EditPriceIcon.tsx +20 -20
- package/iconsvg/SVG/common/EuroCurrency.tsx +18 -18
- package/iconsvg/SVG/common/Export.tsx +20 -20
- package/iconsvg/SVG/common/Eye.tsx +17 -17
- package/iconsvg/SVG/common/EyeCatch.tsx +19 -19
- package/iconsvg/SVG/common/FavoritesIcon.tsx +20 -20
- package/iconsvg/SVG/common/FilterRange.tsx +16 -16
- package/iconsvg/SVG/common/FilterToolBlack.tsx +23 -23
- package/iconsvg/SVG/common/FlagDe.tsx +21 -21
- package/iconsvg/SVG/common/FlagEn.tsx +43 -43
- package/iconsvg/SVG/common/GrayEnvelopeIcon.tsx +19 -19
- package/iconsvg/SVG/common/HamburgerMenuIcon.tsx +18 -18
- package/iconsvg/SVG/common/HandingOverDashboard.tsx +32 -32
- package/iconsvg/SVG/common/ImageSettingsIcon.tsx +20 -20
- package/iconsvg/SVG/common/Info.tsx +16 -16
- package/iconsvg/SVG/common/InfoIcon.tsx +17 -17
- package/iconsvg/SVG/common/InfoTransparent.tsx +18 -18
- package/iconsvg/SVG/common/LogoutIcon.tsx +20 -20
- package/iconsvg/SVG/common/MagnifyingGlass.tsx +31 -31
- package/iconsvg/SVG/common/MenuArrow.tsx +16 -16
- package/iconsvg/SVG/common/MenuGrey.tsx +22 -22
- package/iconsvg/SVG/common/MobileDeLogo.tsx +108 -108
- package/iconsvg/SVG/common/MyOrderIcon.tsx +20 -20
- package/iconsvg/SVG/common/MyVehiclesIcon.tsx +20 -20
- package/iconsvg/SVG/common/NewFlagDe.tsx +25 -25
- package/iconsvg/SVG/common/NewFlagEn.tsx +34 -34
- package/iconsvg/SVG/common/OrderReceivedDashboard.tsx +27 -27
- package/iconsvg/SVG/common/Package.tsx +30 -30
- package/iconsvg/SVG/common/Phone.tsx +18 -18
- package/iconsvg/SVG/common/PhoneGrey.tsx +22 -22
- package/iconsvg/SVG/common/PickupDashboard.tsx +30 -30
- package/iconsvg/SVG/common/Picture.tsx +24 -24
- package/iconsvg/SVG/common/Pictures.tsx +32 -32
- package/iconsvg/SVG/common/Plus.tsx +16 -16
- package/iconsvg/SVG/common/PlusNew.tsx +16 -16
- package/iconsvg/SVG/common/PreparationDashboard.tsx +29 -29
- package/iconsvg/SVG/common/ProfileDashboard.tsx +24 -24
- package/iconsvg/SVG/common/ProfileIcon.tsx +17 -17
- package/iconsvg/SVG/common/Question.tsx +19 -19
- package/iconsvg/SVG/common/QuestionBold.tsx +25 -25
- package/iconsvg/SVG/common/RegistrationDashboard.tsx +31 -31
- package/iconsvg/SVG/common/SavedSearchsIcon.tsx +20 -20
- package/iconsvg/SVG/common/Search.tsx +19 -19
- package/iconsvg/SVG/common/SearchGrey.tsx +22 -22
- package/iconsvg/SVG/common/SettingPenIcon.tsx +20 -20
- package/iconsvg/SVG/common/Share.tsx +16 -16
- package/iconsvg/SVG/common/ShoppingCart.tsx +18 -18
- package/iconsvg/SVG/common/SliderArrow.tsx +21 -21
- package/iconsvg/SVG/common/SliderEye.tsx +17 -17
- package/iconsvg/SVG/common/SortUpDownArrows.tsx +18 -18
- package/iconsvg/SVG/common/Speedometer.tsx +23 -23
- package/iconsvg/SVG/common/Star.tsx +20 -20
- package/iconsvg/SVG/common/StarNew.tsx +16 -16
- package/iconsvg/SVG/common/StarOutline.tsx +20 -20
- package/iconsvg/SVG/common/StarRoundedCorners.tsx +18 -18
- package/iconsvg/SVG/common/Stats.tsx +17 -17
- package/iconsvg/SVG/common/Step1.tsx +21 -21
- package/iconsvg/SVG/common/Step2.tsx +20 -20
- package/iconsvg/SVG/common/Step3.tsx +21 -21
- package/iconsvg/SVG/common/SupportCallbackIcon.tsx +20 -20
- package/iconsvg/SVG/common/Telephone.tsx +22 -22
- package/iconsvg/SVG/common/Time.tsx +17 -17
- package/iconsvg/SVG/common/Timetable.tsx +18 -18
- package/iconsvg/SVG/common/Trash.tsx +22 -22
- package/iconsvg/SVG/common/TrashRed.tsx +23 -23
- package/iconsvg/SVG/common/Upload.tsx +17 -17
- package/iconsvg/SVG/common/UserGrey.tsx +22 -22
- package/iconsvg/SVG/common/UserProfileIcon.tsx +20 -20
- package/iconsvg/SVG/common/ValidateFailure.tsx +21 -21
- package/iconsvg/SVG/common/ValidateSuccess.tsx +21 -21
- package/iconsvg/SVG/common/WarningTriangle.tsx +20 -20
- package/iconsvg/SVG/common/WhiteArrowUp.tsx +21 -21
- package/iconsvg/SVG/common/WhiteKey.tsx +21 -21
- package/iconsvg/SVG/common/WhitePeople.tsx +23 -23
- package/iconsvg/SVG/common/WhiteTick.tsx +19 -19
- package/iconsvg/SVG/flags/AT.tsx +19 -19
- package/iconsvg/SVG/flags/BE.tsx +20 -20
- package/iconsvg/SVG/flags/BG.tsx +20 -20
- package/iconsvg/SVG/flags/CH.tsx +22 -22
- package/iconsvg/SVG/flags/CZ.tsx +18 -18
- package/iconsvg/SVG/flags/DE.tsx +18 -18
- package/iconsvg/SVG/flags/DK.tsx +18 -18
- package/iconsvg/SVG/flags/ES.tsx +2585 -2585
- package/iconsvg/SVG/flags/FI.tsx +18 -18
- package/iconsvg/SVG/flags/FR.tsx +20 -20
- package/iconsvg/SVG/flags/GB.tsx +26 -26
- package/iconsvg/SVG/flags/HR.tsx +135 -135
- package/iconsvg/SVG/flags/HU.tsx +20 -20
- package/iconsvg/SVG/flags/IT.tsx +20 -20
- package/iconsvg/SVG/flags/LI.tsx +106 -106
- package/iconsvg/SVG/flags/LU.tsx +18 -18
- package/iconsvg/SVG/flags/NL.tsx +18 -18
- package/iconsvg/SVG/flags/NO.tsx +20 -20
- package/iconsvg/SVG/flags/PL.tsx +19 -19
- package/iconsvg/SVG/flags/RO.tsx +20 -20
- package/iconsvg/SVG/flags/RU.tsx +20 -20
- package/iconsvg/SVG/flags/SE.tsx +20 -20
- package/iconsvg/SVG/flags/SI.tsx +54 -54
- package/iconsvg/SVG/flags/SK.tsx +34 -34
- package/iconsvg/SVG/flags/UA.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/14DaysReturnPolicy.tsx +18 -18
- package/iconsvg/SVG/infoBlocks/AlertInfo.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/Autocheck.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/CheckTheStory.tsx +22 -22
- package/iconsvg/SVG/infoBlocks/CustomerServiceWhite.tsx +16 -16
- package/iconsvg/SVG/infoBlocks/Guarantee.tsx +16 -16
- package/iconsvg/SVG/infoBlocks/OrderWhite.tsx +13 -13
- package/iconsvg/SVG/infoBlocks/PriceGuarantee.tsx +19 -19
- package/iconsvg/SVG/infoBlocks/PriceGuaranteeWhite.tsx +17 -17
- package/iconsvg/SVG/infoBlocks/TransportAndDelivery.tsx +21 -21
- package/iconsvg/SVG/infoBlocks/Warranty.tsx +23 -23
- package/iconsvg/SVG/popower/Mail.tsx +18 -18
- package/iconsvg/SVG/popower/Phone.tsx +19 -19
- package/iconsvg/SVG/popower/Schedule.tsx +18 -18
- package/iconsvg/SVG/searchWidgets/drive/AAllWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/AllWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/FrontWheelDrive.tsx +25 -25
- package/iconsvg/SVG/searchWidgets/drive/OtherWheelDrive.tsx +26 -26
- package/iconsvg/SVG/searchWidgets/drive/RearWheelDrive.tsx +25 -25
- package/iconsvg/SVG/searchWidgets/fuel/FuelDiesel.tsx +18 -18
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectrical.tsx +19 -19
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalDiesel.tsx +34 -34
- package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalPetrol.tsx +20 -20
- package/iconsvg/SVG/searchWidgets/fuel/FuelEthanol.tsx +53 -53
- package/iconsvg/SVG/searchWidgets/fuel/FuelHydrogen.tsx +24 -24
- package/iconsvg/SVG/searchWidgets/fuel/FuelLpg.tsx +24 -24
- package/iconsvg/SVG/searchWidgets/fuel/FuelNaturalGas.tsx +23 -23
- package/iconsvg/SVG/searchWidgets/fuel/FuelOther.tsx +28 -28
- package/iconsvg/SVG/searchWidgets/fuel/FuelPetrol.tsx +18 -18
- package/iconsvg/SVG/settings/Account.tsx +17 -17
- package/iconsvg/SVG/settings/DataUsage.tsx +17 -17
- package/iconsvg/SVG/settings/MarketResearch.tsx +17 -17
- package/iconsvg/SVG/settings/Newsletter.tsx +17 -17
- package/iconsvg/SVG/settings/RemoveEye.tsx +17 -17
- package/iconsvg/SVG/settings/RemoveEyeOff.tsx +17 -17
- package/iconsvg/SVG/settings/Security.tsx +17 -17
- package/iconsvg/SVG/settings/Warning.tsx +17 -17
- package/iconsvg/SVG/slider/360.tsx +23 -23
- package/iconsvg/SVG/slider/360New.tsx +20 -20
- package/iconsvg/SVG/slider/Checked.tsx +19 -19
- package/iconsvg/SVG/slider/DiscountRibbon.tsx +51 -51
- package/iconsvg/SVG/slider/DiscountRibbonMobile.tsx +47 -47
- package/iconsvg/SVG/slider/DiscountRibbonNew.tsx +29 -29
- package/iconsvg/SVG/slider/Easy.tsx +19 -19
- package/iconsvg/SVG/slider/Fullscreen.tsx +16 -16
- package/iconsvg/SVG/slider/FullscreenWindow.tsx +23 -23
- package/iconsvg/SVG/slider/Safe.tsx +19 -19
- package/iconsvg/SVG/slider/ToBuy.tsx +19 -19
- package/iconsvg/SVG/slider/YoutubeButton.tsx +26 -26
- package/iconsvg/SVG/slider/ZoomIn.tsx +21 -21
- package/iconsvg/SVG/slider/ZoomOut.tsx +21 -21
- package/iconsvg/SVG/social/AndroidLogo.tsx +18 -18
- package/iconsvg/SVG/social/Apple.tsx +19 -19
- package/iconsvg/SVG/social/FacebookF.tsx +19 -19
- package/iconsvg/SVG/social/GooglePlusG.tsx +19 -19
- package/iconsvg/SVG/social/Instagram.tsx +17 -17
- package/iconsvg/SVG/social/Pinterest.tsx +19 -19
- package/iconsvg/SVG/social/SharingInterface.tsx +21 -21
- package/iconsvg/SVG/social/Twitter.tsx +19 -19
- package/iconsvg/SVG/social/Youtube.tsx +19 -19
- package/iconsvg/SVG/vehicle/AboIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Abs.tsx +24 -24
- package/iconsvg/SVG/vehicle/AirCond.tsx +34 -34
- package/iconsvg/SVG/vehicle/Airbag.tsx +21 -21
- package/iconsvg/SVG/vehicle/AuxiliaryHeating.tsx +23 -23
- package/iconsvg/SVG/vehicle/Bluetooth.tsx +22 -22
- package/iconsvg/SVG/vehicle/BuyIcon.tsx +15 -15
- package/iconsvg/SVG/vehicle/CarAvailability.tsx +22 -22
- package/iconsvg/SVG/vehicle/CarInspectionCheck.tsx +21 -21
- package/iconsvg/SVG/vehicle/CarInspectionCross.tsx +21 -21
- package/iconsvg/SVG/vehicle/CheckoutChecked.tsx +15 -15
- package/iconsvg/SVG/vehicle/Co2.tsx +24 -24
- package/iconsvg/SVG/vehicle/CruiseControl.tsx +25 -25
- package/iconsvg/SVG/vehicle/Date.tsx +21 -21
- package/iconsvg/SVG/vehicle/Delivery.tsx +12 -12
- package/iconsvg/SVG/vehicle/Diesel.tsx +28 -28
- package/iconsvg/SVG/vehicle/Display.tsx +25 -25
- package/iconsvg/SVG/vehicle/Done.tsx +11 -11
- package/iconsvg/SVG/vehicle/Door.tsx +19 -19
- package/iconsvg/SVG/vehicle/DoubleDone.tsx +18 -18
- package/iconsvg/SVG/vehicle/EditIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/EmergencyBrakeAssistant.tsx +27 -27
- package/iconsvg/SVG/vehicle/Eps.tsx +24 -24
- package/iconsvg/SVG/vehicle/Esp.tsx +24 -24
- package/iconsvg/SVG/vehicle/FinancingIcon.tsx +20 -20
- package/iconsvg/SVG/vehicle/FuelConsumption.tsx +20 -20
- package/iconsvg/SVG/vehicle/Fueling.tsx +22 -22
- package/iconsvg/SVG/vehicle/FullDrive.tsx +24 -24
- package/iconsvg/SVG/vehicle/GasElectric.tsx +28 -28
- package/iconsvg/SVG/vehicle/HandsFreePhoneSystem.tsx +24 -24
- package/iconsvg/SVG/vehicle/Kw.tsx +23 -23
- package/iconsvg/SVG/vehicle/LastCrawledAt.tsx +22 -22
- package/iconsvg/SVG/vehicle/LeasingIcon.tsx +14 -14
- package/iconsvg/SVG/vehicle/Led.tsx +24 -24
- package/iconsvg/SVG/vehicle/LightSensor.tsx +22 -22
- package/iconsvg/SVG/vehicle/LinkAlternative.tsx +15 -15
- package/iconsvg/SVG/vehicle/Location.tsx +17 -17
- package/iconsvg/SVG/vehicle/MinusIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Mirror.tsx +19 -19
- package/iconsvg/SVG/vehicle/Navigation.tsx +27 -27
- package/iconsvg/SVG/vehicle/NewCar.tsx +21 -21
- package/iconsvg/SVG/vehicle/NoImage.tsx +17 -17
- package/iconsvg/SVG/vehicle/Owner.tsx +18 -18
- package/iconsvg/SVG/vehicle/PanoramicRoof.tsx +23 -23
- package/iconsvg/SVG/vehicle/ParkingAssistants.tsx +24 -24
- package/iconsvg/SVG/vehicle/PickYourself.tsx +18 -18
- package/iconsvg/SVG/vehicle/PlusIcon.tsx +11 -11
- package/iconsvg/SVG/vehicle/Power.tsx +21 -21
- package/iconsvg/SVG/vehicle/Ps.tsx +19 -19
- package/iconsvg/SVG/vehicle/Question.tsx +24 -24
- package/iconsvg/SVG/vehicle/Seats.tsx +21 -21
- package/iconsvg/SVG/vehicle/SeatsHeating.tsx +26 -26
- package/iconsvg/SVG/vehicle/SelectorGearboxAutomatic.tsx +24 -24
- package/iconsvg/SVG/vehicle/SelectorGearboxManualShift.tsx +19 -19
- package/iconsvg/SVG/vehicle/SelectorGearboxOther.tsx +24 -24
- package/iconsvg/SVG/vehicle/SelectorGearboxSemiAutomatic.tsx +30 -30
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeAlcantara.tsx +225 -225
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeFabric.tsx +29 -29
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeFullLeather.tsx +29 -29
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeOther.tsx +26 -26
- package/iconsvg/SVG/vehicle/SelectorInteriorTypePartLeather.tsx +142 -142
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeSyntheticLeather.tsx +27 -27
- package/iconsvg/SVG/vehicle/SelectorInteriorTypeVelours.tsx +39 -39
- package/iconsvg/SVG/vehicle/Shield.tsx +39 -39
- package/iconsvg/SVG/vehicle/Speedometer.tsx +17 -17
- package/iconsvg/SVG/vehicle/StartStopSystem.tsx +30 -30
- package/iconsvg/SVG/vehicle/Stop.tsx +25 -25
- package/iconsvg/SVG/vehicle/TickMark.tsx +21 -21
- package/iconsvg/SVG/vehicle/TrafficSignRecognition.tsx +29 -29
- package/iconsvg/SVG/vehicle/TrailerCoupling.tsx +24 -24
- package/iconsvg/SVG/vehicle/Transmission.tsx +27 -27
- package/iconsvg/SVG/vehicle/Wheel.tsx +43 -43
- package/iconsvg/SVG/vehicle/Wipers.tsx +22 -22
- package/iconsvg/SVG/vehicle/Wrench.tsx +17 -17
- package/iconsvg/index.ts +7 -7
- package/index.ts +18 -18
- package/locales/de/autobahn.json +676 -671
- package/locales/en/autobahn.json +676 -671
- package/locales/legacy/SearchDetailedPage.ts +205 -205
- package/locales/legacy/cbd.ts +719 -719
- package/locales/legacy/common.ts +109 -109
- package/locales/legacy/data.ts +1118 -1118
- package/locales/legacy/priceRating.ts +10 -10
- package/locales/legacy/sortingOptions.ts +21 -21
- package/media/images/raiting-stars-min.svg +7 -7
- package/media/images/refresh-button.svg +49 -49
- package/media/images/user-icon.svg +16 -16
- package/media/svg/infoBlocks/whyAutodeIconSet-F.svg +9 -9
- package/media/svg/infoBlocks/whyAutodeIconSet-G.svg +8 -8
- package/media/svg/infoBlocks/whyAutodeIconSet-Q.svg +6 -6
- package/media/svg/infoBlocks/whyAutodeIconSet-R.svg +9 -9
- package/media/svg/usp/icon1.svg +16 -16
- package/media/svg/usp/icon2.svg +13 -13
- package/media/svg/usp/icon3.svg +10 -10
- package/media/svg/usp/icon4.svg +14 -14
- package/package.json +30 -30
- package/schemes/AggregationScheme.ts +73 -73
- package/searchFilters/filterOptions.ts +119 -119
- package/searchFilters/filterProps.ts +35 -35
- package/searchFilters/index.ts +15 -15
- package/theme/autobahn.css +25 -25
- package/theme/colors_and_type.css +113 -113
- package/theme/md3.css +2045 -2034
- package/types/types.ts +373 -373
- package/types.ts +8 -8
- package/ui/Accordion.tsx +134 -134
- package/ui/Button.tsx +62 -62
- package/ui/CardCarousel.tsx +133 -133
- package/ui/Chip.tsx +29 -29
- package/ui/DatePicker.tsx +145 -145
- package/ui/Dropdown.tsx +205 -205
- package/ui/FileUpload.tsx +154 -154
- package/ui/FormCheckbox.tsx +79 -79
- package/ui/FormDropdown.tsx +327 -327
- package/ui/FormField.tsx +88 -88
- package/ui/FormRadio.tsx +93 -93
- package/ui/FormRadioGroup.tsx +106 -106
- package/ui/Icon.tsx +391 -391
- package/ui/IconButton.tsx +44 -44
- package/ui/Modal.tsx +187 -187
- package/ui/Pagination.tsx +140 -140
- package/ui/Price.tsx +25 -25
- package/ui/PriceEvalBar.tsx +48 -48
- package/ui/SaveChip.tsx +34 -34
- package/ui/Segmented.tsx +48 -48
- package/ui/Skeleton.tsx +75 -75
- package/ui/Spec.tsx +24 -24
- package/ui/Stars.tsx +29 -29
- package/ui/StatChip.tsx +21 -21
- package/ui/Stepper.tsx +106 -106
- package/ui/Switch.tsx +65 -65
- package/ui/Table.tsx +156 -156
- package/ui/Textarea.tsx +58 -58
- package/ui/index.ts +88 -88
- package/utils/CommonUtils.ts +648 -648
- package/utils/DateUtils.ts +101 -101
- package/utils/index.ts +74 -74
- package/utils/power.ts +11 -11
- package/utils/query.ts +21 -21
- package/vdp/FinanceCalculator.tsx +465 -465
- package/vdp/VdpModules.tsx +1490 -1490
- package/vdp/VdpViewer.tsx +209 -209
- package/vdp/index.ts +75 -75
- package/vdp/types.ts +197 -197
- package/vehiclesProps/cbdSelectors.ts +117 -117
- package/vehiclesProps/decoratedLightProps.tsx +572 -572
- package/vehiclesProps/decoratedProps.tsx +1746 -1746
- package/vehiclesProps/equipment.ts +129 -129
- package/vehiclesProps/vehicleDetails.ts +428 -428
- package/widgets/SearchBox.tsx +256 -256
- package/widgets/index.ts +5 -5
package/widgets/SearchBox.tsx
CHANGED
|
@@ -1,256 +1,256 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — md3 compact search box.
|
|
2
|
-
//
|
|
3
|
-
// Shared replacement for the legacy fe-ui-core `SearchWidget` as it was used by
|
|
4
|
-
// fe-wp-widgets' SearchWidgetContainer (and, later, fe-landing): a compact
|
|
5
|
-
// make / model / price search form with a live result counter and a
|
|
6
|
-
// "Detailsuche" escape hatch. The legacy widget's second tab ("Schnellsuche"
|
|
7
|
-
// brand panel) and the rate-search modal are NOT ported — the md3 design is a
|
|
8
|
-
// single compact panel.
|
|
9
|
-
//
|
|
10
|
-
// CONTRACT (mirrors the legacy container wiring):
|
|
11
|
-
// - `filters` is the CONTROLLED legacy filter-state object keyed by the
|
|
12
|
-
// SearchWidget constants (MANUFACTURER / MODEL / PRICE {from,to} / …).
|
|
13
|
-
// Values keep the legacy shapes: make/model are `{ value, label, isSeries? }`
|
|
14
|
-
// option objects (or '' when empty), PRICE is `{ from, to }` of raw numbers
|
|
15
|
-
// as strings. This keeps `buildQueryForSearch` / `buildBodyForRequest`
|
|
16
|
-
// working unchanged on the caller side.
|
|
17
|
-
// - `onFilterChange(value, name)` fires exactly like the legacy widget:
|
|
18
|
-
// make → `{value,label}` | `''`; model → `{value,label,isSeries?}` | `''`;
|
|
19
|
-
// price → the whole `{from,to}` object under the PRICE name.
|
|
20
|
-
// - submit builds the SRP query with the shared `buildQueryForSearch(filters)`
|
|
21
|
-
// and navigates via plain `window.location` (inside the event handler only —
|
|
22
|
-
// the component itself is SSR-safe: no window access at render).
|
|
23
|
-
//
|
|
24
|
-
// Pure / presentational: data (makes/models/counter) is injected by the host
|
|
25
|
-
// container, which owns the API calls. Renders correctly only inside a
|
|
26
|
-
// `<div className="md3">` subtree with theme/autobahn.css loaded.
|
|
27
|
-
|
|
28
|
-
import React from 'react';
|
|
29
|
-
|
|
30
|
-
import { Button, Dropdown, DropdownOption } from '../ui';
|
|
31
|
-
import { MANUFACTURER, MODEL, PRICE, PRICE_OPTIONS } from '../constants/SearchWidget';
|
|
32
|
-
import { buildQueryForSearch, sliceLessThan, sliceMoreThan } from '../utils/CommonUtils';
|
|
33
|
-
import { TranslationFunction } from '../types';
|
|
34
|
-
|
|
35
|
-
/** Option shape produced by the hosts' make/model transforms (top/regular headers use isDisabled). */
|
|
36
|
-
export interface SearchBoxOption {
|
|
37
|
-
value: string | number;
|
|
38
|
-
label: string;
|
|
39
|
-
/** group-header rows ('top' / 'regular') — shown but not selectable. */
|
|
40
|
-
isDisabled?: boolean;
|
|
41
|
-
/** model-series rows — selectable; the query builder maps them to mainData_series. */
|
|
42
|
-
isSeries?: boolean;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Legacy filter-state object (keys = SearchWidget constants). */
|
|
46
|
-
export interface SearchBoxFilters {
|
|
47
|
-
[key: string]: any;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface SearchBoxProps {
|
|
51
|
-
/** manufacturer options (host: transformManufacturers over car-makemodel-mapping). */
|
|
52
|
-
makes?: SearchBoxOption[];
|
|
53
|
-
/** model options for the selected make (host: transformModelsGeneral). */
|
|
54
|
-
models?: SearchBoxOption[];
|
|
55
|
-
/** CONTROLLED legacy filter state (MANUFACTURER / MODEL / PRICE {from,to} / …). */
|
|
56
|
-
filters: SearchBoxFilters;
|
|
57
|
-
/** live result count for the current filters (host: POST /count/car with buildBodyForRequest). */
|
|
58
|
-
counter?: number;
|
|
59
|
-
/** true while the counter request is in flight. */
|
|
60
|
-
counterLoading?: boolean;
|
|
61
|
-
/** legacy change contract — see the header comment for the emitted value shapes. */
|
|
62
|
-
onFilterChange: (value: any, name: string) => void;
|
|
63
|
-
/** override submit; receives the built query string. Default: window.location → `/{searchPath}?{query}`. */
|
|
64
|
-
onSearch?: (query: string) => void;
|
|
65
|
-
/** override the Detailsuche link; receives the built query string. Default: `/{detailedSearchPath}?{query}`. */
|
|
66
|
-
onDetailedSearch?: (query: string) => void;
|
|
67
|
-
/** SRP path for the default submit navigation. */
|
|
68
|
-
searchPath?: string;
|
|
69
|
-
/** detailed-search path for the default Detailsuche navigation. */
|
|
70
|
-
detailedSearchPath?: string;
|
|
71
|
-
/** hide the Detailsuche link (legacy isDealerWPpage behaviour). */
|
|
72
|
-
showDetailedSearch?: boolean;
|
|
73
|
-
/** optional heading above the fields; omitted → no heading. */
|
|
74
|
-
title?: string;
|
|
75
|
-
/** extra class on the panel (layout hooks). */
|
|
76
|
-
className?: string;
|
|
77
|
-
/** i18n translate (autobahn:searchBox.*). Optional — built-in German fallbacks are used without it. */
|
|
78
|
-
t?: TranslationFunction;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** built-in German copy (used when no `t` is injected or a key is missing). */
|
|
82
|
-
const DE_FALLBACK: Record<string, string> = {
|
|
83
|
-
make: 'Marke',
|
|
84
|
-
model: 'Modell',
|
|
85
|
-
priceFrom: 'Preis von',
|
|
86
|
-
priceTo: 'Preis bis',
|
|
87
|
-
any: 'beliebig',
|
|
88
|
-
showResults: 'Ergebnisse anzeigen',
|
|
89
|
-
detailedSearch: 'Detailsuche',
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const SearchBox: React.FunctionComponent<SearchBoxProps> = ({
|
|
93
|
-
makes = [],
|
|
94
|
-
models = [],
|
|
95
|
-
filters,
|
|
96
|
-
counter,
|
|
97
|
-
counterLoading = false,
|
|
98
|
-
onFilterChange,
|
|
99
|
-
onSearch,
|
|
100
|
-
onDetailedSearch,
|
|
101
|
-
searchPath = 'search',
|
|
102
|
-
detailedSearchPath = 'search/detailed',
|
|
103
|
-
showDetailedSearch = true,
|
|
104
|
-
title,
|
|
105
|
-
className,
|
|
106
|
-
t,
|
|
107
|
-
}) => {
|
|
108
|
-
// translate with fallback: i18next echoes the key back when it is missing.
|
|
109
|
-
const tr = (key: string): string => {
|
|
110
|
-
const fallback = DE_FALLBACK[key] || key;
|
|
111
|
-
if (!t) return fallback;
|
|
112
|
-
const full = `autobahn:searchBox.${key}`;
|
|
113
|
-
const out = t(full);
|
|
114
|
-
return out && out !== full ? out : fallback;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
// A model list contains a selectable SERIES row followed by its models, and the
|
|
118
|
-
// series title can equal a model title (series 'Golf' → model 'Golf'). The md3
|
|
119
|
-
// Dropdown identifies options by VALUE, so series rows get a marker prefix to
|
|
120
|
-
// keep the two selectable; it is stripped again on commit.
|
|
121
|
-
const SERIES_PREFIX = 'series'; // U+2063 invisible separators - cannot occur in real titles
|
|
122
|
-
const encodeValue = (o: SearchBoxOption): string => (o.isSeries ? SERIES_PREFIX : '') + String(o.value);
|
|
123
|
-
|
|
124
|
-
// ---- current values out of the legacy filter state -----------------------------------------
|
|
125
|
-
const makeValue =
|
|
126
|
-
filters[MANUFACTURER] && filters[MANUFACTURER].value != null ? String(filters[MANUFACTURER].value) : '';
|
|
127
|
-
const modelValue =
|
|
128
|
-
filters[MODEL] && filters[MODEL].value != null ? encodeValue(filters[MODEL] as SearchBoxOption) : '';
|
|
129
|
-
const price = filters[PRICE] && typeof filters[PRICE] === 'object' ? filters[PRICE] : { from: '', to: '' };
|
|
130
|
-
|
|
131
|
-
// ---- options --------------------------------------------------------------------------------
|
|
132
|
-
const clearOption: DropdownOption = { value: '', label: tr('any') };
|
|
133
|
-
const toDropdownOptions = (list: SearchBoxOption[]): DropdownOption[] =>
|
|
134
|
-
list.map((o) => ({ value: encodeValue(o), label: String(o.label), disabled: !!o.isDisabled }));
|
|
135
|
-
|
|
136
|
-
const makeOptions = toDropdownOptions(makes);
|
|
137
|
-
const modelOptions = toDropdownOptions(models);
|
|
138
|
-
|
|
139
|
-
const priceOptions = (nums: number[]): DropdownOption[] => [
|
|
140
|
-
clearOption,
|
|
141
|
-
...nums.map((n) => ({ value: String(n), label: `${n.toLocaleString('de-DE')} €` })),
|
|
142
|
-
];
|
|
143
|
-
// keep from ≤ to (legacy DropDownGroup behaviour).
|
|
144
|
-
const priceFromOptions = priceOptions(sliceLessThan(PRICE_OPTIONS, price.to));
|
|
145
|
-
const priceToOptions = priceOptions(sliceMoreThan(PRICE_OPTIONS, price.from));
|
|
146
|
-
|
|
147
|
-
// ---- change handlers (legacy onFilterChange value shapes) ----------------------------------
|
|
148
|
-
const commitOption = (name: string, source: SearchBoxOption[]) => (next: string) => {
|
|
149
|
-
if (!next) {
|
|
150
|
-
onFilterChange('', name);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const match = source.find((o) => encodeValue(o) === next);
|
|
154
|
-
onFilterChange(
|
|
155
|
-
match
|
|
156
|
-
? { value: match.value, label: match.label, ...(match.isSeries ? { isSeries: true } : {}) }
|
|
157
|
-
: { value: next, label: next },
|
|
158
|
-
name,
|
|
159
|
-
);
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
const commitPrice = (bound: 'from' | 'to') => (next: string) =>
|
|
163
|
-
onFilterChange({ ...price, [bound]: next }, PRICE);
|
|
164
|
-
|
|
165
|
-
// ---- submit (window access only inside handlers → SSR-safe) --------------------------------
|
|
166
|
-
const navigate = (path: string, query: string) => {
|
|
167
|
-
if (typeof window === 'undefined') return;
|
|
168
|
-
window.location.href = `${window.location.origin}/${path}${query ? `?${query}` : ''}`;
|
|
169
|
-
};
|
|
170
|
-
const submit = () => {
|
|
171
|
-
const query = buildQueryForSearch(filters);
|
|
172
|
-
if (onSearch) return onSearch(query);
|
|
173
|
-
navigate(searchPath, query);
|
|
174
|
-
};
|
|
175
|
-
const detailed = () => {
|
|
176
|
-
const query = buildQueryForSearch(filters);
|
|
177
|
-
if (onDetailedSearch) return onDetailedSearch(query);
|
|
178
|
-
navigate(detailedSearchPath, query);
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const field = (label: string, control: React.ReactNode) => (
|
|
182
|
-
<div className="mfd">
|
|
183
|
-
<label className="md-label-sm mfield-label mfd-label">{label}</label>
|
|
184
|
-
{control}
|
|
185
|
-
</div>
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
const resultsLabel =
|
|
189
|
-
!counterLoading && counter != null
|
|
190
|
-
? `${counter.toLocaleString('de-DE')} ${tr('showResults')}`
|
|
191
|
-
: tr('showResults');
|
|
192
|
-
|
|
193
|
-
return (
|
|
194
|
-
<section
|
|
195
|
-
className={'mcard sbx' + (className ? ` ${className}` : '')}
|
|
196
|
-
style={{ padding: 16, display: 'flex', flexDirection: 'column', gap: 12 }}
|
|
197
|
-
>
|
|
198
|
-
{title ? <h2 className="md-title" style={{ margin: 0 }}>{title}</h2> : null}
|
|
199
|
-
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))', gap: 10 }}>
|
|
200
|
-
{field(
|
|
201
|
-
tr('make'),
|
|
202
|
-
<Dropdown
|
|
203
|
-
value={makeValue}
|
|
204
|
-
options={makeValue ? [clearOption, ...makeOptions] : makeOptions}
|
|
205
|
-
onChange={commitOption(MANUFACTURER, makes)}
|
|
206
|
-
placeholder={tr('make')}
|
|
207
|
-
ariaLabel={tr('make')}
|
|
208
|
-
/>,
|
|
209
|
-
)}
|
|
210
|
-
{field(
|
|
211
|
-
tr('model'),
|
|
212
|
-
<Dropdown
|
|
213
|
-
value={modelValue}
|
|
214
|
-
options={modelValue ? [clearOption, ...modelOptions] : modelOptions}
|
|
215
|
-
onChange={commitOption(MODEL, models)}
|
|
216
|
-
placeholder={tr('model')}
|
|
217
|
-
ariaLabel={tr('model')}
|
|
218
|
-
disabled={!makeValue}
|
|
219
|
-
/>,
|
|
220
|
-
)}
|
|
221
|
-
{field(
|
|
222
|
-
tr('priceFrom'),
|
|
223
|
-
<Dropdown
|
|
224
|
-
value={price.from != null ? String(price.from) : ''}
|
|
225
|
-
options={priceFromOptions}
|
|
226
|
-
onChange={commitPrice('from')}
|
|
227
|
-
placeholder={tr('any')}
|
|
228
|
-
ariaLabel={tr('priceFrom')}
|
|
229
|
-
/>,
|
|
230
|
-
)}
|
|
231
|
-
{field(
|
|
232
|
-
tr('priceTo'),
|
|
233
|
-
<Dropdown
|
|
234
|
-
value={price.to != null ? String(price.to) : ''}
|
|
235
|
-
options={priceToOptions}
|
|
236
|
-
onChange={commitPrice('to')}
|
|
237
|
-
placeholder={tr('any')}
|
|
238
|
-
ariaLabel={tr('priceTo')}
|
|
239
|
-
/>,
|
|
240
|
-
)}
|
|
241
|
-
</div>
|
|
242
|
-
<div style={{ display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }}>
|
|
243
|
-
<Button icon="search" onClick={submit}>
|
|
244
|
-
{resultsLabel}
|
|
245
|
-
</Button>
|
|
246
|
-
{showDetailedSearch && (
|
|
247
|
-
<Button variant="text" onClick={detailed}>
|
|
248
|
-
{tr('detailedSearch')}
|
|
249
|
-
</Button>
|
|
250
|
-
)}
|
|
251
|
-
</div>
|
|
252
|
-
</section>
|
|
253
|
-
);
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
export default SearchBox;
|
|
1
|
+
// Autobahn (auto.de redesign) — md3 compact search box.
|
|
2
|
+
//
|
|
3
|
+
// Shared replacement for the legacy fe-ui-core `SearchWidget` as it was used by
|
|
4
|
+
// fe-wp-widgets' SearchWidgetContainer (and, later, fe-landing): a compact
|
|
5
|
+
// make / model / price search form with a live result counter and a
|
|
6
|
+
// "Detailsuche" escape hatch. The legacy widget's second tab ("Schnellsuche"
|
|
7
|
+
// brand panel) and the rate-search modal are NOT ported — the md3 design is a
|
|
8
|
+
// single compact panel.
|
|
9
|
+
//
|
|
10
|
+
// CONTRACT (mirrors the legacy container wiring):
|
|
11
|
+
// - `filters` is the CONTROLLED legacy filter-state object keyed by the
|
|
12
|
+
// SearchWidget constants (MANUFACTURER / MODEL / PRICE {from,to} / …).
|
|
13
|
+
// Values keep the legacy shapes: make/model are `{ value, label, isSeries? }`
|
|
14
|
+
// option objects (or '' when empty), PRICE is `{ from, to }` of raw numbers
|
|
15
|
+
// as strings. This keeps `buildQueryForSearch` / `buildBodyForRequest`
|
|
16
|
+
// working unchanged on the caller side.
|
|
17
|
+
// - `onFilterChange(value, name)` fires exactly like the legacy widget:
|
|
18
|
+
// make → `{value,label}` | `''`; model → `{value,label,isSeries?}` | `''`;
|
|
19
|
+
// price → the whole `{from,to}` object under the PRICE name.
|
|
20
|
+
// - submit builds the SRP query with the shared `buildQueryForSearch(filters)`
|
|
21
|
+
// and navigates via plain `window.location` (inside the event handler only —
|
|
22
|
+
// the component itself is SSR-safe: no window access at render).
|
|
23
|
+
//
|
|
24
|
+
// Pure / presentational: data (makes/models/counter) is injected by the host
|
|
25
|
+
// container, which owns the API calls. Renders correctly only inside a
|
|
26
|
+
// `<div className="md3">` subtree with theme/autobahn.css loaded.
|
|
27
|
+
|
|
28
|
+
import React from 'react';
|
|
29
|
+
|
|
30
|
+
import { Button, Dropdown, DropdownOption } from '../ui';
|
|
31
|
+
import { MANUFACTURER, MODEL, PRICE, PRICE_OPTIONS } from '../constants/SearchWidget';
|
|
32
|
+
import { buildQueryForSearch, sliceLessThan, sliceMoreThan } from '../utils/CommonUtils';
|
|
33
|
+
import { TranslationFunction } from '../types';
|
|
34
|
+
|
|
35
|
+
/** Option shape produced by the hosts' make/model transforms (top/regular headers use isDisabled). */
|
|
36
|
+
export interface SearchBoxOption {
|
|
37
|
+
value: string | number;
|
|
38
|
+
label: string;
|
|
39
|
+
/** group-header rows ('top' / 'regular') — shown but not selectable. */
|
|
40
|
+
isDisabled?: boolean;
|
|
41
|
+
/** model-series rows — selectable; the query builder maps them to mainData_series. */
|
|
42
|
+
isSeries?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Legacy filter-state object (keys = SearchWidget constants). */
|
|
46
|
+
export interface SearchBoxFilters {
|
|
47
|
+
[key: string]: any;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface SearchBoxProps {
|
|
51
|
+
/** manufacturer options (host: transformManufacturers over car-makemodel-mapping). */
|
|
52
|
+
makes?: SearchBoxOption[];
|
|
53
|
+
/** model options for the selected make (host: transformModelsGeneral). */
|
|
54
|
+
models?: SearchBoxOption[];
|
|
55
|
+
/** CONTROLLED legacy filter state (MANUFACTURER / MODEL / PRICE {from,to} / …). */
|
|
56
|
+
filters: SearchBoxFilters;
|
|
57
|
+
/** live result count for the current filters (host: POST /count/car with buildBodyForRequest). */
|
|
58
|
+
counter?: number;
|
|
59
|
+
/** true while the counter request is in flight. */
|
|
60
|
+
counterLoading?: boolean;
|
|
61
|
+
/** legacy change contract — see the header comment for the emitted value shapes. */
|
|
62
|
+
onFilterChange: (value: any, name: string) => void;
|
|
63
|
+
/** override submit; receives the built query string. Default: window.location → `/{searchPath}?{query}`. */
|
|
64
|
+
onSearch?: (query: string) => void;
|
|
65
|
+
/** override the Detailsuche link; receives the built query string. Default: `/{detailedSearchPath}?{query}`. */
|
|
66
|
+
onDetailedSearch?: (query: string) => void;
|
|
67
|
+
/** SRP path for the default submit navigation. */
|
|
68
|
+
searchPath?: string;
|
|
69
|
+
/** detailed-search path for the default Detailsuche navigation. */
|
|
70
|
+
detailedSearchPath?: string;
|
|
71
|
+
/** hide the Detailsuche link (legacy isDealerWPpage behaviour). */
|
|
72
|
+
showDetailedSearch?: boolean;
|
|
73
|
+
/** optional heading above the fields; omitted → no heading. */
|
|
74
|
+
title?: string;
|
|
75
|
+
/** extra class on the panel (layout hooks). */
|
|
76
|
+
className?: string;
|
|
77
|
+
/** i18n translate (autobahn:searchBox.*). Optional — built-in German fallbacks are used without it. */
|
|
78
|
+
t?: TranslationFunction;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** built-in German copy (used when no `t` is injected or a key is missing). */
|
|
82
|
+
const DE_FALLBACK: Record<string, string> = {
|
|
83
|
+
make: 'Marke',
|
|
84
|
+
model: 'Modell',
|
|
85
|
+
priceFrom: 'Preis von',
|
|
86
|
+
priceTo: 'Preis bis',
|
|
87
|
+
any: 'beliebig',
|
|
88
|
+
showResults: 'Ergebnisse anzeigen',
|
|
89
|
+
detailedSearch: 'Detailsuche',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const SearchBox: React.FunctionComponent<SearchBoxProps> = ({
|
|
93
|
+
makes = [],
|
|
94
|
+
models = [],
|
|
95
|
+
filters,
|
|
96
|
+
counter,
|
|
97
|
+
counterLoading = false,
|
|
98
|
+
onFilterChange,
|
|
99
|
+
onSearch,
|
|
100
|
+
onDetailedSearch,
|
|
101
|
+
searchPath = 'search',
|
|
102
|
+
detailedSearchPath = 'search/detailed',
|
|
103
|
+
showDetailedSearch = true,
|
|
104
|
+
title,
|
|
105
|
+
className,
|
|
106
|
+
t,
|
|
107
|
+
}) => {
|
|
108
|
+
// translate with fallback: i18next echoes the key back when it is missing.
|
|
109
|
+
const tr = (key: string): string => {
|
|
110
|
+
const fallback = DE_FALLBACK[key] || key;
|
|
111
|
+
if (!t) return fallback;
|
|
112
|
+
const full = `autobahn:searchBox.${key}`;
|
|
113
|
+
const out = t(full);
|
|
114
|
+
return out && out !== full ? out : fallback;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// A model list contains a selectable SERIES row followed by its models, and the
|
|
118
|
+
// series title can equal a model title (series 'Golf' → model 'Golf'). The md3
|
|
119
|
+
// Dropdown identifies options by VALUE, so series rows get a marker prefix to
|
|
120
|
+
// keep the two selectable; it is stripped again on commit.
|
|
121
|
+
const SERIES_PREFIX = 'series'; // U+2063 invisible separators - cannot occur in real titles
|
|
122
|
+
const encodeValue = (o: SearchBoxOption): string => (o.isSeries ? SERIES_PREFIX : '') + String(o.value);
|
|
123
|
+
|
|
124
|
+
// ---- current values out of the legacy filter state -----------------------------------------
|
|
125
|
+
const makeValue =
|
|
126
|
+
filters[MANUFACTURER] && filters[MANUFACTURER].value != null ? String(filters[MANUFACTURER].value) : '';
|
|
127
|
+
const modelValue =
|
|
128
|
+
filters[MODEL] && filters[MODEL].value != null ? encodeValue(filters[MODEL] as SearchBoxOption) : '';
|
|
129
|
+
const price = filters[PRICE] && typeof filters[PRICE] === 'object' ? filters[PRICE] : { from: '', to: '' };
|
|
130
|
+
|
|
131
|
+
// ---- options --------------------------------------------------------------------------------
|
|
132
|
+
const clearOption: DropdownOption = { value: '', label: tr('any') };
|
|
133
|
+
const toDropdownOptions = (list: SearchBoxOption[]): DropdownOption[] =>
|
|
134
|
+
list.map((o) => ({ value: encodeValue(o), label: String(o.label), disabled: !!o.isDisabled }));
|
|
135
|
+
|
|
136
|
+
const makeOptions = toDropdownOptions(makes);
|
|
137
|
+
const modelOptions = toDropdownOptions(models);
|
|
138
|
+
|
|
139
|
+
const priceOptions = (nums: number[]): DropdownOption[] => [
|
|
140
|
+
clearOption,
|
|
141
|
+
...nums.map((n) => ({ value: String(n), label: `${n.toLocaleString('de-DE')} €` })),
|
|
142
|
+
];
|
|
143
|
+
// keep from ≤ to (legacy DropDownGroup behaviour).
|
|
144
|
+
const priceFromOptions = priceOptions(sliceLessThan(PRICE_OPTIONS, price.to));
|
|
145
|
+
const priceToOptions = priceOptions(sliceMoreThan(PRICE_OPTIONS, price.from));
|
|
146
|
+
|
|
147
|
+
// ---- change handlers (legacy onFilterChange value shapes) ----------------------------------
|
|
148
|
+
const commitOption = (name: string, source: SearchBoxOption[]) => (next: string) => {
|
|
149
|
+
if (!next) {
|
|
150
|
+
onFilterChange('', name);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const match = source.find((o) => encodeValue(o) === next);
|
|
154
|
+
onFilterChange(
|
|
155
|
+
match
|
|
156
|
+
? { value: match.value, label: match.label, ...(match.isSeries ? { isSeries: true } : {}) }
|
|
157
|
+
: { value: next, label: next },
|
|
158
|
+
name,
|
|
159
|
+
);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const commitPrice = (bound: 'from' | 'to') => (next: string) =>
|
|
163
|
+
onFilterChange({ ...price, [bound]: next }, PRICE);
|
|
164
|
+
|
|
165
|
+
// ---- submit (window access only inside handlers → SSR-safe) --------------------------------
|
|
166
|
+
const navigate = (path: string, query: string) => {
|
|
167
|
+
if (typeof window === 'undefined') return;
|
|
168
|
+
window.location.href = `${window.location.origin}/${path}${query ? `?${query}` : ''}`;
|
|
169
|
+
};
|
|
170
|
+
const submit = () => {
|
|
171
|
+
const query = buildQueryForSearch(filters);
|
|
172
|
+
if (onSearch) return onSearch(query);
|
|
173
|
+
navigate(searchPath, query);
|
|
174
|
+
};
|
|
175
|
+
const detailed = () => {
|
|
176
|
+
const query = buildQueryForSearch(filters);
|
|
177
|
+
if (onDetailedSearch) return onDetailedSearch(query);
|
|
178
|
+
navigate(detailedSearchPath, query);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const field = (label: string, control: React.ReactNode) => (
|
|
182
|
+
<div className="mfd">
|
|
183
|
+
<label className="md-label-sm mfield-label mfd-label">{label}</label>
|
|
184
|
+
{control}
|
|
185
|
+
</div>
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
const resultsLabel =
|
|
189
|
+
!counterLoading && counter != null
|
|
190
|
+
? `${counter.toLocaleString('de-DE')} ${tr('showResults')}`
|
|
191
|
+
: tr('showResults');
|
|
192
|
+
|
|
193
|
+
return (
|
|
194
|
+
<section
|
|
195
|
+
className={'mcard sbx' + (className ? ` ${className}` : '')}
|
|
196
|
+
style={{ padding: 16, display: 'flex', flexDirection: 'column', gap: 12 }}
|
|
197
|
+
>
|
|
198
|
+
{title ? <h2 className="md-title" style={{ margin: 0 }}>{title}</h2> : null}
|
|
199
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))', gap: 10 }}>
|
|
200
|
+
{field(
|
|
201
|
+
tr('make'),
|
|
202
|
+
<Dropdown
|
|
203
|
+
value={makeValue}
|
|
204
|
+
options={makeValue ? [clearOption, ...makeOptions] : makeOptions}
|
|
205
|
+
onChange={commitOption(MANUFACTURER, makes)}
|
|
206
|
+
placeholder={tr('make')}
|
|
207
|
+
ariaLabel={tr('make')}
|
|
208
|
+
/>,
|
|
209
|
+
)}
|
|
210
|
+
{field(
|
|
211
|
+
tr('model'),
|
|
212
|
+
<Dropdown
|
|
213
|
+
value={modelValue}
|
|
214
|
+
options={modelValue ? [clearOption, ...modelOptions] : modelOptions}
|
|
215
|
+
onChange={commitOption(MODEL, models)}
|
|
216
|
+
placeholder={tr('model')}
|
|
217
|
+
ariaLabel={tr('model')}
|
|
218
|
+
disabled={!makeValue}
|
|
219
|
+
/>,
|
|
220
|
+
)}
|
|
221
|
+
{field(
|
|
222
|
+
tr('priceFrom'),
|
|
223
|
+
<Dropdown
|
|
224
|
+
value={price.from != null ? String(price.from) : ''}
|
|
225
|
+
options={priceFromOptions}
|
|
226
|
+
onChange={commitPrice('from')}
|
|
227
|
+
placeholder={tr('any')}
|
|
228
|
+
ariaLabel={tr('priceFrom')}
|
|
229
|
+
/>,
|
|
230
|
+
)}
|
|
231
|
+
{field(
|
|
232
|
+
tr('priceTo'),
|
|
233
|
+
<Dropdown
|
|
234
|
+
value={price.to != null ? String(price.to) : ''}
|
|
235
|
+
options={priceToOptions}
|
|
236
|
+
onChange={commitPrice('to')}
|
|
237
|
+
placeholder={tr('any')}
|
|
238
|
+
ariaLabel={tr('priceTo')}
|
|
239
|
+
/>,
|
|
240
|
+
)}
|
|
241
|
+
</div>
|
|
242
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 10, flexWrap: 'wrap' }}>
|
|
243
|
+
<Button icon="search" onClick={submit}>
|
|
244
|
+
{resultsLabel}
|
|
245
|
+
</Button>
|
|
246
|
+
{showDetailedSearch && (
|
|
247
|
+
<Button variant="text" onClick={detailed}>
|
|
248
|
+
{tr('detailedSearch')}
|
|
249
|
+
</Button>
|
|
250
|
+
)}
|
|
251
|
+
</div>
|
|
252
|
+
</section>
|
|
253
|
+
);
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
export default SearchBox;
|
package/widgets/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// Autobahn (auto.de redesign) — standalone embeddable widgets.
|
|
2
|
-
// Higher-level md3 blocks composed from ui/ primitives, shared by
|
|
3
|
-
// fe-wp-widgets (WordPress) and fe-landing (SSR) — SSR-safe by contract.
|
|
4
|
-
export { default as SearchBox } from './SearchBox';
|
|
5
|
-
export type { SearchBoxProps, SearchBoxOption, SearchBoxFilters } from './SearchBox';
|
|
1
|
+
// Autobahn (auto.de redesign) — standalone embeddable widgets.
|
|
2
|
+
// Higher-level md3 blocks composed from ui/ primitives, shared by
|
|
3
|
+
// fe-wp-widgets (WordPress) and fe-landing (SSR) — SSR-safe by contract.
|
|
4
|
+
export { default as SearchBox } from './SearchBox';
|
|
5
|
+
export type { SearchBoxProps, SearchBoxOption, SearchBoxFilters } from './SearchBox';
|