@wayke-se/components-react 3.8.1 → 3.9.0-beta.1
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/README.md +20 -11
- package/dist-node/index.js +1577 -603
- package/package.json +4 -4
- package/dist-node/index.js.map +0 -1
- package/dist-src/@types/action.js +0 -1
- package/dist-src/@types/codegen/types.js +0 -14
- package/dist-src/@types/filter.js +0 -1
- package/dist-src/@types/queryFilter.js +0 -1
- package/dist-src/@types/search.js +0 -1
- package/dist-src/@types/vehicle-properties.js +0 -1
- package/dist-src/State/CentralStorage/CentralStorageContext.js +0 -4
- package/dist-src/State/CentralStorage/CentralStorageProvider.js +0 -9
- package/dist-src/State/CentralStorage/useCentralStorage.js +0 -29
- package/dist-src/State/Path/PathContext.js +0 -2
- package/dist-src/State/Path/PathProvider.js +0 -47
- package/dist-src/State/Path/reducer.js +0 -15
- package/dist-src/State/Path/usePath.js +0 -10
- package/dist-src/State/RelatedSearch/RelatedSearchContext.js +0 -8
- package/dist-src/State/RelatedSearch/RelatedSearchProvider.js +0 -27
- package/dist-src/State/RelatedSearch/useRelatedSearch.js +0 -18
- package/dist-src/State/Search/SearchContext.js +0 -12
- package/dist-src/State/Search/SearchProvider.js +0 -178
- package/dist-src/State/Search/useSearch.js +0 -4
- package/dist-src/State/Settings/SettingsContext.js +0 -2
- package/dist-src/State/Settings/SettingsProvider.js +0 -4
- package/dist-src/State/Settings/useSettings.js +0 -4
- package/dist-src/components/AccessoryCard/index.js +0 -14
- package/dist-src/components/AccessoryCard/wrapper.js +0 -90
- package/dist-src/components/Accordion/index.js +0 -18
- package/dist-src/components/Accordion/wrapper.js +0 -92
- package/dist-src/components/ActionList/index.js +0 -18
- package/dist-src/components/ActionList/toggle-item.js +0 -24
- package/dist-src/components/Avatar/index.js +0 -4
- package/dist-src/components/Avatar/wrapper.js +0 -15
- package/dist-src/components/Badge/index.js +0 -4
- package/dist-src/components/Badge/wrapper.js +0 -24
- package/dist-src/components/Blockquote/index.js +0 -12
- package/dist-src/components/Blockquote/wrapper.js +0 -44
- package/dist-src/components/Button/index.js +0 -195
- package/dist-src/components/CheckMarkList/index.js +0 -9
- package/dist-src/components/CheckMarkList/wrapper.js +0 -26
- package/dist-src/components/Checklist/index.js +0 -14
- package/dist-src/components/Checklist/wrapper.js +0 -59
- package/dist-src/components/ColorSelect/index.js +0 -18
- package/dist-src/components/ColorSelect/wrapper.js +0 -69
- package/dist-src/components/ColumnRow/index.js +0 -17
- package/dist-src/components/Columns/index.js +0 -76
- package/dist-src/components/Container/index.js +0 -4
- package/dist-src/components/Container/wrapper.js +0 -12
- package/dist-src/components/Content/index.js +0 -4
- package/dist-src/components/Content/wrapper.js +0 -51
- package/dist-src/components/ContentLogo/index.js +0 -23
- package/dist-src/components/DataList/index.js +0 -6
- package/dist-src/components/DataList/wrapper.js +0 -24
- package/dist-src/components/DetailBox/index.js +0 -17
- package/dist-src/components/DetailBox/wrapper.js +0 -27
- package/dist-src/components/DocumentList/index.js +0 -23
- package/dist-src/components/DocumentList/wrapper.js +0 -55
- package/dist-src/components/ExtendContent/index.js +0 -24
- package/dist-src/components/ExtendContent/wrapper.js +0 -32
- package/dist-src/components/ExtendInfo/index.js +0 -15
- package/dist-src/components/ExtendInfo/wrapper.js +0 -56
- package/dist-src/components/Filter/index.js +0 -64
- package/dist-src/components/Filter/wrapper.js +0 -72
- package/dist-src/components/FilterPanel/checkListFacet.js +0 -29
- package/dist-src/components/FilterPanel/colorFacet.js +0 -29
- package/dist-src/components/FilterPanel/faceSelector.js +0 -32
- package/dist-src/components/FilterPanel/index.js +0 -24
- package/dist-src/components/FilterPanel/rangeFacet.js +0 -82
- package/dist-src/components/FinancialOptions/LoanModal.js +0 -127
- package/dist-src/components/FinancialOptions/index.js +0 -12
- package/dist-src/components/FinancialOptions/leasing.js +0 -56
- package/dist-src/components/FinancialOptions/loan.js +0 -54
- package/dist-src/components/Gallery/MediaButton.js +0 -7
- package/dist-src/components/Gallery/index.js +0 -122
- package/dist-src/components/Gallery/wrapper.js +0 -256
- package/dist-src/components/Grid/index.js +0 -61
- package/dist-src/components/Grid/wrapper.js +0 -26
- package/dist-src/components/Heading/index.js +0 -52
- package/dist-src/components/Icon/index.js +0 -38
- package/dist-src/components/Image/index.js +0 -5
- package/dist-src/components/InputCheckbox/index.js +0 -10
- package/dist-src/components/InputCheckbox/wrapper.js +0 -79
- package/dist-src/components/InputGroup/index.js +0 -21
- package/dist-src/components/InputLabel/index.js +0 -4
- package/dist-src/components/InputLabel/wrapper.js +0 -8
- package/dist-src/components/InputSearch/index.js +0 -12
- package/dist-src/components/InputSearch/wrapper.js +0 -90
- package/dist-src/components/InputSelect/index.js +0 -10
- package/dist-src/components/InputSelect/wrapper.js +0 -53
- package/dist-src/components/InputText/index.js +0 -5
- package/dist-src/components/InputText/wrapper.js +0 -54
- package/dist-src/components/InsuranceOptions/Insurance.js +0 -26
- package/dist-src/components/InsuranceOptions/InsuranceFree.js +0 -30
- package/dist-src/components/InsuranceOptions/InsuranceFreeModal.js +0 -19
- package/dist-src/components/InsuranceOptions/InsuranceModal.js +0 -105
- package/dist-src/components/InsuranceOptions/index.js +0 -15
- package/dist-src/components/Lightbox/index.js +0 -30
- package/dist-src/components/Lightbox/wrapper.js +0 -91
- package/dist-src/components/Link/index.js +0 -28
- package/dist-src/components/Loader/index.js +0 -7
- package/dist-src/components/Loader/wrapper.js +0 -37
- package/dist-src/components/LogoBox/index.js +0 -10
- package/dist-src/components/LogoBox/wrapper.js +0 -12
- package/dist-src/components/Map/index.js +0 -27
- package/dist-src/components/Map/wrapper.js +0 -25
- package/dist-src/components/Modal/index.js +0 -20
- package/dist-src/components/Modal/wrapper.js +0 -113
- package/dist-src/components/NavButton/index.js +0 -42
- package/dist-src/components/OpeningHours/index.js +0 -97
- package/dist-src/components/OptionBox/index.js +0 -7
- package/dist-src/components/OptionBox/wrapper.js +0 -49
- package/dist-src/components/OverflowBox/index.js +0 -4
- package/dist-src/components/OverflowBox/wrapper.js +0 -6
- package/dist-src/components/OverflowGrid/index.js +0 -56
- package/dist-src/components/OverflowGrid/wrapper.js +0 -144
- package/dist-src/components/Page/index.js +0 -30
- package/dist-src/components/Panel/index.js +0 -20
- package/dist-src/components/Panel/wrapper.js +0 -143
- package/dist-src/components/PhoneNumber/index.js +0 -13
- package/dist-src/components/Portal/index.js +0 -4
- package/dist-src/components/Portal/portal-element.js +0 -3
- package/dist-src/components/Portal/portal-namespace.js +0 -1
- package/dist-src/components/Portal/portal.js +0 -25
- package/dist-src/components/Price/index.js +0 -10
- package/dist-src/components/PriceBox/index.js +0 -6
- package/dist-src/components/PriceBox/wrapper.js +0 -34
- package/dist-src/components/PriceTable/index.js +0 -20
- package/dist-src/components/PriceTable/wrapper.js +0 -22
- package/dist-src/components/ProductCard/index.js +0 -45
- package/dist-src/components/ProductCard/wrapper.js +0 -134
- package/dist-src/components/ProductPage/index.js +0 -85
- package/dist-src/components/ProgressBar/index.js +0 -16
- package/dist-src/components/ProgressBar/wrapper.js +0 -24
- package/dist-src/components/RangeSlider/RangeSliderSimple.js +0 -26
- package/dist-src/components/RangeSlider/SliderWithLabel.js +0 -21
- package/dist-src/components/RangeSlider/handle.js +0 -5
- package/dist-src/components/RangeSlider/index.js +0 -50
- package/dist-src/components/RangeSlider/track.js +0 -6
- package/dist-src/components/RangeSlider/wrapper.js +0 -86
- package/dist-src/components/RangeSliderLabel/index.js +0 -6
- package/dist-src/components/RangeSliderLabel/wrapper.js +0 -24
- package/dist-src/components/Repeat/index.js +0 -17
- package/dist-src/components/Result/index.js +0 -40
- package/dist-src/components/Result/wrapper.js +0 -29
- package/dist-src/components/Root/index.js +0 -22
- package/dist-src/components/SearchBar/index.js +0 -18
- package/dist-src/components/SearchFilter/index.js +0 -23
- package/dist-src/components/SearchTerm/index.js +0 -8
- package/dist-src/components/SearchTerm/wrapper.js +0 -67
- package/dist-src/components/SectionHeader/index.js +0 -9
- package/dist-src/components/SectionHeader/wrapper.js +0 -13
- package/dist-src/components/Snackbar/index.js +0 -21
- package/dist-src/components/Snackbar/wrapper.js +0 -56
- package/dist-src/components/SortSelect/index.js +0 -10
- package/dist-src/components/SortSelect/wrapper.js +0 -48
- package/dist-src/components/Sphere/Sphere.js +0 -21
- package/dist-src/components/Sphere/SphereLightbox.js +0 -4
- package/dist-src/components/Sphere/SphereViewer.js +0 -54
- package/dist-src/components/Sphere/wrapper.js +0 -250
- package/dist-src/components/SrOnly/index.js +0 -13
- package/dist-src/components/StateIndicator/index.js +0 -23
- package/dist-src/components/SwitchBar/index.js +0 -23
- package/dist-src/components/SwitchBar/wrapper.js +0 -71
- package/dist-src/components/TableColumn/index.js +0 -14
- package/dist-src/components/TableList/index.js +0 -32
- package/dist-src/components/Tabs/index.js +0 -6
- package/dist-src/components/Tabs/wrapper.js +0 -68
- package/dist-src/components/ThreeSixty/Rotation.js +0 -95
- package/dist-src/components/ThreeSixty/ThreeSixtLightbox.js +0 -15
- package/dist-src/components/ThreeSixty/ThreeSixty.js +0 -25
- package/dist-src/components/UspList/index.js +0 -18
- package/dist-src/components/UspList/wrapper.js +0 -85
- package/dist-src/components/Utility/index.js +0 -13
- package/dist-src/components/Video/CustomPlayer.js +0 -8
- package/dist-src/components/Video/EmbeddedVideoLightbox.js +0 -18
- package/dist-src/components/Video/EmbededVideo.js +0 -38
- package/dist-src/components/Video/QuickNavEmbeded.js +0 -17
- package/dist-src/components/Video/QuickNavVideo.js +0 -6
- package/dist-src/components/Video/Video.js +0 -8
- package/dist-src/components/Video/VimeoPlayer.js +0 -6
- package/dist-src/components/Video/YoutubePlayer.js +0 -6
- package/dist-src/components/Video/useThumbnail.js +0 -25
- package/dist-src/components/Video/utils.js +0 -35
- package/dist-src/components/Video/wrapper.js +0 -19
- package/dist-src/hooks/useFetch.js +0 -69
- package/dist-src/hooks/useHasBeenVisible.js +0 -13
- package/dist-src/hooks/useHashGuid.js +0 -28
- package/dist-src/hooks/useInsurance.js +0 -12
- package/dist-src/hooks/useLoan.js +0 -12
- package/dist-src/hooks/useOnScreen.js +0 -15
- package/dist-src/hooks/useOutsideClick.js +0 -15
- package/dist-src/hooks/usePrevious.js +0 -9
- package/dist-src/hooks/useSearchItem.js +0 -7
- package/dist-src/hooks/useSearchItemBranch.js +0 -7
- package/dist-src/hooks/useSessionStorage.js +0 -23
- package/dist-src/hooks/useVimeoThumbnail.js +0 -18
- package/dist-src/index.js +0 -10
- package/dist-src/layout/helpers.js +0 -5
- package/dist-src/layout/keyframes.js +0 -20
- package/dist-src/layout/theme.js +0 -67
- package/dist-src/layouts/WaykeComposite.js +0 -23
- package/dist-src/layouts/WaykeCompositeWithProvider.js +0 -6
- package/dist-src/layouts/search/index.js +0 -55
- package/dist-src/layouts/searchItem/Accessories/AccessoryModal.js +0 -51
- package/dist-src/layouts/searchItem/Accessories/index.js +0 -32
- package/dist-src/layouts/searchItem/Branch.js +0 -55
- package/dist-src/layouts/searchItem/BranchModal.js +0 -36
- package/dist-src/layouts/searchItem/CheckList.js +0 -79
- package/dist-src/layouts/searchItem/DemoCarModal.js +0 -7
- package/dist-src/layouts/searchItem/Documents.js +0 -44
- package/dist-src/layouts/searchItem/ManufacturerPackagesOption.js +0 -25
- package/dist-src/layouts/searchItem/MetadataItem.js +0 -34
- package/dist-src/layouts/searchItem/PackageOptionModal.js +0 -15
- package/dist-src/layouts/searchItem/PackageOptions.js +0 -25
- package/dist-src/layouts/searchItem/Page404.js +0 -9
- package/dist-src/layouts/searchItem/PageLoading.js +0 -9
- package/dist-src/layouts/searchItem/Property.js +0 -51
- package/dist-src/layouts/searchItem/Related.js +0 -66
- package/dist-src/layouts/searchItem/index.js +0 -180
- package/dist-src/providers/WaykeItemProvidet.js +0 -16
- package/dist-src/providers/WaykeProvider.js +0 -18
- package/dist-src/providers/graphqlProvider.js +0 -7
- package/dist-src/providers/themeProvider.js +0 -5
- package/dist-src/queries/INSURANCE_CALCULATION.js +0 -41
- package/dist-src/queries/LOAN_CALCULATION.js +0 -36
- package/dist-src/queries/SEARCH_ITEM_BRANCH_QUERY.js +0 -136
- package/dist-src/queries/SEARCH_ITEM_QUERY.js +0 -256
- package/dist-src/utils/constants.js +0 -31
- package/dist-src/utils/converters.js +0 -31
- package/dist-src/utils/deep-copy.js +0 -5
- package/dist-src/utils/formats.js +0 -62
- package/dist-src/utils/metadata.min.js +0 -86
- package/dist-src/utils/phonenumbers.js +0 -12
- package/dist-src/utils/pubsub/Actions.js +0 -1
- package/dist-src/utils/pubsub/Events.js +0 -1
- package/dist-src/utils/pubsub/pubsub.js +0 -93
- package/dist-src/utils/regex.js +0 -10
- package/dist-src/utils/sortOptions.js +0 -32
- package/dist-src/utils/specification.js +0 -495
- package/dist-src/utils/ssn.js +0 -1
- package/dist-src/utils/url.js +0 -1
- package/dist-src/utils/vehicle-properties/compare-basic-properties.js +0 -36
- package/dist-src/utils/vehicle-properties/compare-categories.js +0 -27
- package/dist-src/utils/vehicle-properties/compare-properties.js +0 -3
- package/dist-src/utils/vehicle-properties/custom-property-adder.js +0 -143
- package/dist-src/utils/vehicle-properties/property-hint-enricher.js +0 -192
- package/dist-src/utils/vehicle-properties/property-remover.js +0 -27
- package/dist-src/utils/vehicle-properties/property-tree-creator.js +0 -127
- package/dist-src/utils/vehicle-properties/property-tree-sorter.js +0 -18
- package/dist-types/@types/action.d.ts +0 -3
- package/dist-types/@types/codegen/types.d.ts +0 -369
- package/dist-types/@types/filter.d.ts +0 -5
- package/dist-types/@types/queryFilter.d.ts +0 -5
- package/dist-types/@types/search.d.ts +0 -106
- package/dist-types/@types/vehicle-properties.d.ts +0 -29
- package/dist-types/State/CentralStorage/CentralStorageContext.d.ts +0 -6
- package/dist-types/State/CentralStorage/CentralStorageProvider.d.ts +0 -6
- package/dist-types/State/CentralStorage/useCentralStorage.d.ts +0 -6
- package/dist-types/State/Path/PathContext.d.ts +0 -9
- package/dist-types/State/Path/PathProvider.d.ts +0 -6
- package/dist-types/State/Path/reducer.d.ts +0 -14
- package/dist-types/State/Path/usePath.d.ts +0 -3
- package/dist-types/State/RelatedSearch/RelatedSearchContext.d.ts +0 -10
- package/dist-types/State/RelatedSearch/RelatedSearchProvider.d.ts +0 -9
- package/dist-types/State/RelatedSearch/useRelatedSearch.d.ts +0 -2
- package/dist-types/State/Search/SearchContext.d.ts +0 -15
- package/dist-types/State/Search/SearchProvider.d.ts +0 -10
- package/dist-types/State/Search/useSearch.d.ts +0 -2
- package/dist-types/State/Settings/SettingsContext.d.ts +0 -13
- package/dist-types/State/Settings/SettingsProvider.d.ts +0 -10
- package/dist-types/State/Settings/useSettings.d.ts +0 -2
- package/dist-types/components/AccessoryCard/index.d.ts +0 -16
- package/dist-types/components/AccessoryCard/wrapper.d.ts +0 -18
- package/dist-types/components/Accordion/index.d.ts +0 -13
- package/dist-types/components/Accordion/wrapper.d.ts +0 -16
- package/dist-types/components/ActionList/index.d.ts +0 -8
- package/dist-types/components/ActionList/toggle-item.d.ts +0 -10
- package/dist-types/components/Avatar/index.d.ts +0 -7
- package/dist-types/components/Avatar/wrapper.d.ts +0 -7
- package/dist-types/components/Badge/index.d.ts +0 -7
- package/dist-types/components/Badge/wrapper.d.ts +0 -7
- package/dist-types/components/Blockquote/index.d.ts +0 -9
- package/dist-types/components/Blockquote/wrapper.d.ts +0 -9
- package/dist-types/components/Button/index.d.ts +0 -52
- package/dist-types/components/CheckMarkList/index.d.ts +0 -7
- package/dist-types/components/CheckMarkList/wrapper.d.ts +0 -6
- package/dist-types/components/Checklist/index.d.ts +0 -13
- package/dist-types/components/Checklist/wrapper.d.ts +0 -11
- package/dist-types/components/ColorSelect/index.d.ts +0 -14
- package/dist-types/components/ColorSelect/wrapper.d.ts +0 -11
- package/dist-types/components/ColumnRow/index.d.ts +0 -2
- package/dist-types/components/Columns/index.d.ts +0 -16
- package/dist-types/components/Container/index.d.ts +0 -6
- package/dist-types/components/Container/wrapper.d.ts +0 -1
- package/dist-types/components/Content/index.d.ts +0 -6
- package/dist-types/components/Content/wrapper.d.ts +0 -4
- package/dist-types/components/ContentLogo/index.d.ts +0 -3
- package/dist-types/components/DataList/index.d.ts +0 -10
- package/dist-types/components/DataList/wrapper.d.ts +0 -6
- package/dist-types/components/DetailBox/index.d.ts +0 -8
- package/dist-types/components/DetailBox/wrapper.d.ts +0 -13
- package/dist-types/components/DocumentList/index.d.ts +0 -11
- package/dist-types/components/DocumentList/wrapper.d.ts +0 -11
- package/dist-types/components/ExtendContent/index.d.ts +0 -8
- package/dist-types/components/ExtendContent/wrapper.d.ts +0 -6
- package/dist-types/components/ExtendInfo/index.d.ts +0 -7
- package/dist-types/components/ExtendInfo/wrapper.d.ts +0 -10
- package/dist-types/components/Filter/index.d.ts +0 -7
- package/dist-types/components/Filter/wrapper.d.ts +0 -8
- package/dist-types/components/FilterPanel/checkListFacet.d.ts +0 -7
- package/dist-types/components/FilterPanel/colorFacet.d.ts +0 -7
- package/dist-types/components/FilterPanel/faceSelector.d.ts +0 -7
- package/dist-types/components/FilterPanel/index.d.ts +0 -18
- package/dist-types/components/FilterPanel/rangeFacet.d.ts +0 -9
- package/dist-types/components/FinancialOptions/LoanModal.d.ts +0 -9
- package/dist-types/components/FinancialOptions/index.d.ts +0 -8
- package/dist-types/components/FinancialOptions/leasing.d.ts +0 -7
- package/dist-types/components/FinancialOptions/loan.d.ts +0 -8
- package/dist-types/components/Gallery/MediaButton.d.ts +0 -7
- package/dist-types/components/Gallery/index.d.ts +0 -8
- package/dist-types/components/Gallery/wrapper.d.ts +0 -22
- package/dist-types/components/Grid/index.d.ts +0 -12
- package/dist-types/components/Grid/wrapper.d.ts +0 -3
- package/dist-types/components/Heading/index.d.ts +0 -29
- package/dist-types/components/Icon/index.d.ts +0 -17
- package/dist-types/components/Image/index.d.ts +0 -1
- package/dist-types/components/InputCheckbox/index.d.ts +0 -7
- package/dist-types/components/InputCheckbox/wrapper.d.ts +0 -13
- package/dist-types/components/InputGroup/index.d.ts +0 -2
- package/dist-types/components/InputLabel/index.d.ts +0 -7
- package/dist-types/components/InputLabel/wrapper.d.ts +0 -3
- package/dist-types/components/InputSearch/index.d.ts +0 -11
- package/dist-types/components/InputSearch/wrapper.d.ts +0 -15
- package/dist-types/components/InputSelect/index.d.ts +0 -14
- package/dist-types/components/InputSelect/wrapper.d.ts +0 -6
- package/dist-types/components/InputText/index.d.ts +0 -8
- package/dist-types/components/InputText/wrapper.d.ts +0 -5
- package/dist-types/components/InsuranceOptions/Insurance.d.ts +0 -9
- package/dist-types/components/InsuranceOptions/InsuranceFree.d.ts +0 -7
- package/dist-types/components/InsuranceOptions/InsuranceFreeModal.d.ts +0 -8
- package/dist-types/components/InsuranceOptions/InsuranceModal.d.ts +0 -10
- package/dist-types/components/InsuranceOptions/index.d.ts +0 -9
- package/dist-types/components/Lightbox/index.d.ts +0 -9
- package/dist-types/components/Lightbox/wrapper.d.ts +0 -9
- package/dist-types/components/Link/index.d.ts +0 -7
- package/dist-types/components/Loader/index.d.ts +0 -7
- package/dist-types/components/Loader/wrapper.d.ts +0 -9
- package/dist-types/components/LogoBox/index.d.ts +0 -9
- package/dist-types/components/LogoBox/wrapper.d.ts +0 -4
- package/dist-types/components/Map/index.d.ts +0 -7
- package/dist-types/components/Map/wrapper.d.ts +0 -4
- package/dist-types/components/Modal/index.d.ts +0 -9
- package/dist-types/components/Modal/wrapper.d.ts +0 -21
- package/dist-types/components/NavButton/index.d.ts +0 -3
- package/dist-types/components/OpeningHours/index.d.ts +0 -7
- package/dist-types/components/OptionBox/index.d.ts +0 -9
- package/dist-types/components/OptionBox/wrapper.d.ts +0 -8
- package/dist-types/components/OverflowBox/index.d.ts +0 -6
- package/dist-types/components/OverflowBox/wrapper.d.ts +0 -1
- package/dist-types/components/OverflowGrid/index.d.ts +0 -12
- package/dist-types/components/OverflowGrid/wrapper.d.ts +0 -18
- package/dist-types/components/Page/index.d.ts +0 -7
- package/dist-types/components/Panel/index.d.ts +0 -10
- package/dist-types/components/Panel/wrapper.d.ts +0 -22
- package/dist-types/components/PhoneNumber/index.d.ts +0 -6
- package/dist-types/components/Portal/index.d.ts +0 -4
- package/dist-types/components/Portal/portal-element.d.ts +0 -6
- package/dist-types/components/Portal/portal-namespace.d.ts +0 -1
- package/dist-types/components/Portal/portal.d.ts +0 -7
- package/dist-types/components/Price/index.d.ts +0 -4
- package/dist-types/components/PriceBox/index.d.ts +0 -11
- package/dist-types/components/PriceBox/wrapper.d.ts +0 -10
- package/dist-types/components/PriceTable/index.d.ts +0 -7
- package/dist-types/components/PriceTable/wrapper.d.ts +0 -4
- package/dist-types/components/ProductCard/index.d.ts +0 -20
- package/dist-types/components/ProductCard/wrapper.d.ts +0 -22
- package/dist-types/components/ProductPage/index.d.ts +0 -9
- package/dist-types/components/ProgressBar/index.d.ts +0 -8
- package/dist-types/components/ProgressBar/wrapper.d.ts +0 -6
- package/dist-types/components/RangeSlider/RangeSliderSimple.d.ts +0 -13
- package/dist-types/components/RangeSlider/SliderWithLabel.d.ts +0 -13
- package/dist-types/components/RangeSlider/handle.d.ts +0 -9
- package/dist-types/components/RangeSlider/index.d.ts +0 -13
- package/dist-types/components/RangeSlider/track.d.ts +0 -9
- package/dist-types/components/RangeSlider/wrapper.d.ts +0 -11
- package/dist-types/components/RangeSliderLabel/index.d.ts +0 -8
- package/dist-types/components/RangeSliderLabel/wrapper.d.ts +0 -10
- package/dist-types/components/Repeat/index.d.ts +0 -3
- package/dist-types/components/Result/index.d.ts +0 -6
- package/dist-types/components/Result/wrapper.d.ts +0 -9
- package/dist-types/components/Root/index.d.ts +0 -4
- package/dist-types/components/SearchBar/index.d.ts +0 -8
- package/dist-types/components/SearchFilter/index.d.ts +0 -3
- package/dist-types/components/SearchTerm/index.d.ts +0 -8
- package/dist-types/components/SearchTerm/wrapper.d.ts +0 -7
- package/dist-types/components/SectionHeader/index.d.ts +0 -8
- package/dist-types/components/SectionHeader/wrapper.d.ts +0 -3
- package/dist-types/components/Snackbar/index.d.ts +0 -9
- package/dist-types/components/Snackbar/wrapper.d.ts +0 -11
- package/dist-types/components/SortSelect/index.d.ts +0 -14
- package/dist-types/components/SortSelect/wrapper.d.ts +0 -6
- package/dist-types/components/Sphere/Sphere.d.ts +0 -10
- package/dist-types/components/Sphere/SphereLightbox.d.ts +0 -6
- package/dist-types/components/Sphere/SphereViewer.d.ts +0 -10
- package/dist-types/components/Sphere/wrapper.d.ts +0 -1
- package/dist-types/components/SrOnly/index.d.ts +0 -1
- package/dist-types/components/StateIndicator/index.d.ts +0 -5
- package/dist-types/components/SwitchBar/index.d.ts +0 -10
- package/dist-types/components/SwitchBar/wrapper.d.ts +0 -14
- package/dist-types/components/TableColumn/index.d.ts +0 -3
- package/dist-types/components/TableList/index.d.ts +0 -6
- package/dist-types/components/Tabs/index.d.ts +0 -12
- package/dist-types/components/Tabs/wrapper.d.ts +0 -12
- package/dist-types/components/ThreeSixty/Rotation.d.ts +0 -6
- package/dist-types/components/ThreeSixty/ThreeSixtLightbox.d.ts +0 -6
- package/dist-types/components/ThreeSixty/ThreeSixty.d.ts +0 -9
- package/dist-types/components/UspList/index.d.ts +0 -11
- package/dist-types/components/UspList/wrapper.d.ts +0 -11
- package/dist-types/components/Utility/index.d.ts +0 -8
- package/dist-types/components/Video/CustomPlayer.d.ts +0 -10
- package/dist-types/components/Video/EmbeddedVideoLightbox.d.ts +0 -8
- package/dist-types/components/Video/EmbededVideo.d.ts +0 -8
- package/dist-types/components/Video/QuickNavEmbeded.d.ts +0 -7
- package/dist-types/components/Video/QuickNavVideo.d.ts +0 -7
- package/dist-types/components/Video/Video.d.ts +0 -5
- package/dist-types/components/Video/VimeoPlayer.d.ts +0 -7
- package/dist-types/components/Video/YoutubePlayer.d.ts +0 -7
- package/dist-types/components/Video/useThumbnail.d.ts +0 -2
- package/dist-types/components/Video/utils.d.ts +0 -9
- package/dist-types/components/Video/wrapper.d.ts +0 -11
- package/dist-types/hooks/useFetch.d.ts +0 -7
- package/dist-types/hooks/useHasBeenVisible.d.ts +0 -2
- package/dist-types/hooks/useHashGuid.d.ts +0 -2
- package/dist-types/hooks/useInsurance.d.ts +0 -4
- package/dist-types/hooks/useLoan.d.ts +0 -4
- package/dist-types/hooks/useOnScreen.d.ts +0 -2
- package/dist-types/hooks/useOutsideClick.d.ts +0 -2
- package/dist-types/hooks/usePrevious.d.ts +0 -2
- package/dist-types/hooks/useSearchItem.d.ts +0 -4
- package/dist-types/hooks/useSearchItemBranch.d.ts +0 -4
- package/dist-types/hooks/useSessionStorage.d.ts +0 -7
- package/dist-types/hooks/useVimeoThumbnail.d.ts +0 -2
- package/dist-types/index.d.ts +0 -18
- package/dist-types/layout/helpers.d.ts +0 -1
- package/dist-types/layout/keyframes.d.ts +0 -3
- package/dist-types/layout/theme.d.ts +0 -49
- package/dist-types/layouts/WaykeComposite.d.ts +0 -6
- package/dist-types/layouts/WaykeCompositeWithProvider.d.ts +0 -9
- package/dist-types/layouts/search/index.d.ts +0 -16
- package/dist-types/layouts/searchItem/Accessories/AccessoryModal.d.ts +0 -8
- package/dist-types/layouts/searchItem/Accessories/index.d.ts +0 -7
- package/dist-types/layouts/searchItem/Branch.d.ts +0 -9
- package/dist-types/layouts/searchItem/BranchModal.d.ts +0 -9
- package/dist-types/layouts/searchItem/CheckList.d.ts +0 -14
- package/dist-types/layouts/searchItem/DemoCarModal.d.ts +0 -6
- package/dist-types/layouts/searchItem/Documents.d.ts +0 -7
- package/dist-types/layouts/searchItem/ManufacturerPackagesOption.d.ts +0 -7
- package/dist-types/layouts/searchItem/MetadataItem.d.ts +0 -10
- package/dist-types/layouts/searchItem/PackageOptionModal.d.ts +0 -17
- package/dist-types/layouts/searchItem/PackageOptions.d.ts +0 -7
- package/dist-types/layouts/searchItem/Page404.d.ts +0 -3
- package/dist-types/layouts/searchItem/PageLoading.d.ts +0 -3
- package/dist-types/layouts/searchItem/Property.d.ts +0 -8
- package/dist-types/layouts/searchItem/Related.d.ts +0 -11
- package/dist-types/layouts/searchItem/index.d.ts +0 -13
- package/dist-types/providers/WaykeItemProvidet.d.ts +0 -22
- package/dist-types/providers/WaykeProvider.d.ts +0 -24
- package/dist-types/providers/graphqlProvider.d.ts +0 -6
- package/dist-types/providers/themeProvider.d.ts +0 -6
- package/dist-types/queries/INSURANCE_CALCULATION.d.ts +0 -2
- package/dist-types/queries/LOAN_CALCULATION.d.ts +0 -2
- package/dist-types/queries/SEARCH_ITEM_BRANCH_QUERY.d.ts +0 -2
- package/dist-types/queries/SEARCH_ITEM_QUERY.d.ts +0 -2
- package/dist-types/utils/constants.d.ts +0 -63
- package/dist-types/utils/converters.d.ts +0 -1
- package/dist-types/utils/deep-copy.d.ts +0 -5
- package/dist-types/utils/formats.d.ts +0 -8
- package/dist-types/utils/metadata.min.d.ts +0 -11
- package/dist-types/utils/phonenumbers.d.ts +0 -1
- package/dist-types/utils/pubsub/Actions.d.ts +0 -16
- package/dist-types/utils/pubsub/Events.d.ts +0 -51
- package/dist-types/utils/pubsub/pubsub.d.ts +0 -32
- package/dist-types/utils/regex.d.ts +0 -3
- package/dist-types/utils/sortOptions.d.ts +0 -13
- package/dist-types/utils/specification.d.ts +0 -28
- package/dist-types/utils/ssn.d.ts +0 -1
- package/dist-types/utils/url.d.ts +0 -1
- package/dist-types/utils/vehicle-properties/compare-basic-properties.d.ts +0 -3
- package/dist-types/utils/vehicle-properties/compare-categories.d.ts +0 -3
- package/dist-types/utils/vehicle-properties/compare-properties.d.ts +0 -3
- package/dist-types/utils/vehicle-properties/custom-property-adder.d.ts +0 -12
- package/dist-types/utils/vehicle-properties/property-hint-enricher.d.ts +0 -10
- package/dist-types/utils/vehicle-properties/property-remover.d.ts +0 -7
- package/dist-types/utils/vehicle-properties/property-tree-creator.d.ts +0 -31
- package/dist-types/utils/vehicle-properties/property-tree-sorter.d.ts +0 -3
- package/dist-web/index.js +0 -8197
- package/dist-web/index.js.map +0 -1
package/dist-node/index.js
CHANGED
|
@@ -8,11 +8,12 @@ var React = require('react');
|
|
|
8
8
|
var React__default = _interopDefault(React);
|
|
9
9
|
var styled = require('styled-components');
|
|
10
10
|
var styled__default = _interopDefault(styled);
|
|
11
|
+
var reactI18next = require('react-i18next');
|
|
11
12
|
var dateFns = require('date-fns');
|
|
12
13
|
var locale = require('date-fns/locale');
|
|
14
|
+
var i18next = _interopDefault(require('i18next'));
|
|
13
15
|
var ReactDOM = _interopDefault(require('react-dom'));
|
|
14
16
|
var reactCompoundSlider = require('react-compound-slider');
|
|
15
|
-
var LazyLoad = _interopDefault(require('react-lazyload'));
|
|
16
17
|
var WaykeEcomWeb = _interopDefault(require('@wayke-se/ecom-web'));
|
|
17
18
|
var Slider$1 = _interopDefault(require('react-slick'));
|
|
18
19
|
var scrollIntoView = _interopDefault(require('scroll-into-view-if-needed'));
|
|
@@ -194,12 +195,17 @@ const BarActive = styled__default.div.attrs(() => ({
|
|
|
194
195
|
`;
|
|
195
196
|
|
|
196
197
|
const ProgressBar = ({
|
|
197
|
-
unit,
|
|
198
198
|
valueCurrent,
|
|
199
199
|
valueMax
|
|
200
200
|
}) => {
|
|
201
|
+
const {
|
|
202
|
+
t
|
|
203
|
+
} = reactI18next.useTranslation();
|
|
201
204
|
const barWidth = valueCurrent / valueMax * 100;
|
|
202
|
-
return React__default.createElement(Wrapper$2, null, React__default.createElement(Description, null,
|
|
205
|
+
return React__default.createElement(Wrapper$2, null, React__default.createElement(Description, null, t('other.showingNumberOfResults', {
|
|
206
|
+
current: valueCurrent,
|
|
207
|
+
count: valueMax
|
|
208
|
+
})), React__default.createElement(Bar, null, React__default.createElement(BarActive, {
|
|
203
209
|
style: {
|
|
204
210
|
width: `${barWidth}%`
|
|
205
211
|
},
|
|
@@ -491,12 +497,17 @@ const SrOnly = styled__default.div`
|
|
|
491
497
|
const Loader = ({
|
|
492
498
|
inline,
|
|
493
499
|
center
|
|
494
|
-
}) =>
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
+
}) => {
|
|
501
|
+
const {
|
|
502
|
+
t
|
|
503
|
+
} = reactI18next.useTranslation();
|
|
504
|
+
return React.createElement(Wrapper$3, {
|
|
505
|
+
inline: inline,
|
|
506
|
+
center: center
|
|
507
|
+
}, React.createElement(Spinner, {
|
|
508
|
+
"aria-hidden": "true"
|
|
509
|
+
}), React.createElement(SrOnly, null, t('other.loading')));
|
|
510
|
+
};
|
|
500
511
|
|
|
501
512
|
const MANUFACTURER = 'manufacturer';
|
|
502
513
|
const MODEL_SERIES = 'modelSeries';
|
|
@@ -512,6 +523,7 @@ const MILEAGE = 'mileage';
|
|
|
512
523
|
const MODEL_YEAR = 'modelYear';
|
|
513
524
|
const LEASING_PRICE = 'leasingPrice';
|
|
514
525
|
const BUSINESS_LEASING_PRICE = 'businessLeasingPrice';
|
|
526
|
+
const ODOMETER_VALUE_AS_KM = 'odometerValueAsKm';
|
|
515
527
|
const COLOR_WHITE = {
|
|
516
528
|
displayName: 'Vit',
|
|
517
529
|
hex: '#ffffff'
|
|
@@ -576,40 +588,6 @@ const numberSeparator = (value, n = 0, x = 3, s = ' ', c = '.') => {
|
|
|
576
588
|
const num = value.toFixed(Math.max(0, ~~n));
|
|
577
589
|
return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), `$&${s || ','}`);
|
|
578
590
|
};
|
|
579
|
-
const FacetIdToTitle = f => {
|
|
580
|
-
switch (f) {
|
|
581
|
-
case MANUFACTURER:
|
|
582
|
-
return 'Tillverkare';
|
|
583
|
-
case MODEL_SERIES:
|
|
584
|
-
return 'Modell';
|
|
585
|
-
case FUEL_TYPE:
|
|
586
|
-
return 'Drivmedel';
|
|
587
|
-
case GEARBOX_TYPE:
|
|
588
|
-
return 'Växellåda';
|
|
589
|
-
case SEGMENT:
|
|
590
|
-
return 'Segment';
|
|
591
|
-
case DRIVING_WHEEL:
|
|
592
|
-
return 'Drivhjul';
|
|
593
|
-
case ENVIRONMENT_CLASS:
|
|
594
|
-
return 'Miljöklass';
|
|
595
|
-
case COLOR:
|
|
596
|
-
return 'Färg';
|
|
597
|
-
case PRICE:
|
|
598
|
-
return 'Pris';
|
|
599
|
-
case BRANCH:
|
|
600
|
-
return 'Anläggning';
|
|
601
|
-
case MILEAGE:
|
|
602
|
-
return 'Miltal';
|
|
603
|
-
case MODEL_YEAR:
|
|
604
|
-
return 'Modellår';
|
|
605
|
-
case LEASING_PRICE:
|
|
606
|
-
return 'Privatleasing';
|
|
607
|
-
case BUSINESS_LEASING_PRICE:
|
|
608
|
-
return 'Företagsleasing';
|
|
609
|
-
default:
|
|
610
|
-
return f;
|
|
611
|
-
}
|
|
612
|
-
};
|
|
613
591
|
const dateTimeFormat = {
|
|
614
592
|
YearMonth: 1,
|
|
615
593
|
DayMonth: 2,
|
|
@@ -806,17 +784,22 @@ const SortSelect = ({
|
|
|
806
784
|
options,
|
|
807
785
|
onChange,
|
|
808
786
|
unit
|
|
809
|
-
}) =>
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
787
|
+
}) => {
|
|
788
|
+
const {
|
|
789
|
+
t
|
|
790
|
+
} = reactI18next.useTranslation();
|
|
791
|
+
return React__default.createElement(Wrapper$4, null, React__default.createElement(Select, {
|
|
792
|
+
value: value,
|
|
793
|
+
onChange: onChange,
|
|
794
|
+
title: t('search.sortButton.text'),
|
|
795
|
+
"aria-label": t('search.sortButton.text')
|
|
796
|
+
}, options.map(option => React__default.createElement(Option, {
|
|
797
|
+
key: option.value,
|
|
798
|
+
value: option.value
|
|
799
|
+
}, option.displayName || option.value, unit ? ` ${unit}` : ''))), React__default.createElement(Icon, null, React__default.createElement(IconChevronDown, {
|
|
800
|
+
block: true
|
|
801
|
+
})));
|
|
802
|
+
};
|
|
820
803
|
|
|
821
804
|
const SortOptionDisplayName = {
|
|
822
805
|
PublishedAsc: 'published-asc',
|
|
@@ -831,21 +814,21 @@ const SortOptionDisplayName = {
|
|
|
831
814
|
const getTranslatedSortOptionDisplayName = str => {
|
|
832
815
|
switch (str) {
|
|
833
816
|
case SortOptionDisplayName.PublishedAsc:
|
|
834
|
-
return '
|
|
817
|
+
return i18next.t('search.sortOptions.publishedAsc');
|
|
835
818
|
case SortOptionDisplayName.PublishedDesc:
|
|
836
|
-
return '
|
|
819
|
+
return i18next.t('search.sortOptions.publishedDesc');
|
|
837
820
|
case SortOptionDisplayName.PriceAsc:
|
|
838
|
-
return '
|
|
821
|
+
return i18next.t('search.sortOptions.priceAsc');
|
|
839
822
|
case SortOptionDisplayName.Pricedesc:
|
|
840
|
-
return '
|
|
823
|
+
return i18next.t('search.sortOptions.priceDesc');
|
|
841
824
|
case SortOptionDisplayName.ModelAsc:
|
|
842
|
-
return '
|
|
825
|
+
return i18next.t('search.sortOptions.modelAsc');
|
|
843
826
|
case SortOptionDisplayName.Modeldesc:
|
|
844
|
-
return '
|
|
827
|
+
return i18next.t('search.sortOptions.modelDesc');
|
|
845
828
|
case SortOptionDisplayName.MileageAsc:
|
|
846
|
-
return '
|
|
829
|
+
return i18next.t('search.sortOptions.mileageAsc');
|
|
847
830
|
case SortOptionDisplayName.Mileagedesc:
|
|
848
|
-
return '
|
|
831
|
+
return i18next.t('search.sortOptions.mileageDesc');
|
|
849
832
|
default:
|
|
850
833
|
return str;
|
|
851
834
|
}
|
|
@@ -867,7 +850,7 @@ const Result = ({
|
|
|
867
850
|
const numberOfDocuments = (documents === null || documents === void 0 ? void 0 : documents.length) || 0;
|
|
868
851
|
const numberOfHits = (response === null || response === void 0 ? void 0 : response.documentList.numberOfHits) || 0;
|
|
869
852
|
const useSkeletons = !!(queryFilter !== null && queryFilter !== void 0 && queryFilter.concatResult);
|
|
870
|
-
const selectedSortOption = response === null || response === void 0
|
|
853
|
+
const selectedSortOption = response === null || response === void 0 || (_response$documentLis = response.documentList.sortOptions.find(x => x.selected)) === null || _response$documentLis === void 0 ? void 0 : _response$documentLis.query;
|
|
871
854
|
const sortOptions = response === null || response === void 0 ? void 0 : response.documentList.sortOptions.filter(x => x.displayName !== 'relevance').map(so => ({
|
|
872
855
|
value: so.query,
|
|
873
856
|
displayName: getTranslatedSortOptionDisplayName(so.displayName)
|
|
@@ -880,7 +863,6 @@ const Result = ({
|
|
|
880
863
|
options: sortOptions,
|
|
881
864
|
onChange: onSortOptionChange
|
|
882
865
|
}))), React__default.createElement(Body, null, children), React__default.createElement(Footer, null, React__default.createElement(FooterProgress, null, React__default.createElement(ProgressBar, {
|
|
883
|
-
unit: "bilar",
|
|
884
866
|
valueCurrent: numberOfDocuments,
|
|
885
867
|
valueMax: numberOfHits
|
|
886
868
|
})), numberOfDocuments !== numberOfHits && React__default.createElement(FooterAction, null, React__default.createElement(ButtonSecondary, {
|
|
@@ -891,26 +873,26 @@ const Result = ({
|
|
|
891
873
|
}, React__default.createElement(ButtonContent, null, "Visa fler")))));
|
|
892
874
|
};
|
|
893
875
|
|
|
894
|
-
function ownKeys(
|
|
895
|
-
var
|
|
876
|
+
function ownKeys(e, r) {
|
|
877
|
+
var t = Object.keys(e);
|
|
896
878
|
if (Object.getOwnPropertySymbols) {
|
|
897
|
-
var
|
|
898
|
-
|
|
899
|
-
return Object.getOwnPropertyDescriptor(
|
|
900
|
-
})),
|
|
879
|
+
var o = Object.getOwnPropertySymbols(e);
|
|
880
|
+
r && (o = o.filter(function (r) {
|
|
881
|
+
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
882
|
+
})), t.push.apply(t, o);
|
|
901
883
|
}
|
|
902
|
-
return
|
|
884
|
+
return t;
|
|
903
885
|
}
|
|
904
|
-
function _objectSpread2(
|
|
905
|
-
for (var
|
|
906
|
-
var
|
|
907
|
-
|
|
908
|
-
_defineProperty(
|
|
909
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(
|
|
910
|
-
Object.defineProperty(
|
|
886
|
+
function _objectSpread2(e) {
|
|
887
|
+
for (var r = 1; r < arguments.length; r++) {
|
|
888
|
+
var t = null != arguments[r] ? arguments[r] : {};
|
|
889
|
+
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
|
|
890
|
+
_defineProperty(e, r, t[r]);
|
|
891
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
|
|
892
|
+
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
911
893
|
});
|
|
912
894
|
}
|
|
913
|
-
return
|
|
895
|
+
return e;
|
|
914
896
|
}
|
|
915
897
|
function _defineProperty(obj, key, value) {
|
|
916
898
|
key = _toPropertyKey(key);
|
|
@@ -1246,16 +1228,18 @@ const Panel = ({
|
|
|
1246
1228
|
onClose,
|
|
1247
1229
|
children
|
|
1248
1230
|
}) => {
|
|
1231
|
+
const {
|
|
1232
|
+
t
|
|
1233
|
+
} = reactI18next.useTranslation();
|
|
1249
1234
|
return React.createElement(Portal$1, {
|
|
1250
1235
|
id: id || DefaultPortal
|
|
1251
1236
|
}, React.createElement(Wrapper$5, null, React.createElement(UiBlock, {
|
|
1252
|
-
title:
|
|
1237
|
+
title: t('other.closePanel') || '',
|
|
1253
1238
|
onClick: onClose
|
|
1254
1239
|
}), React.createElement(PanelWrapper, null, React.createElement(Header$1, null, React.createElement(Heading, null, React.createElement(H1, {
|
|
1255
1240
|
noMargin: true
|
|
1256
1241
|
}, title)), React.createElement(Close, null, React.createElement(CloseBtn, {
|
|
1257
|
-
title:
|
|
1258
|
-
"aria-label": "St\u00E4ng panel",
|
|
1242
|
+
title: t('other.closePanel') || '',
|
|
1259
1243
|
onClick: onClose
|
|
1260
1244
|
}, React.createElement(IconCancel, {
|
|
1261
1245
|
block: true
|
|
@@ -1359,13 +1343,16 @@ const AccordionItem = ({
|
|
|
1359
1343
|
activeCount,
|
|
1360
1344
|
isActive
|
|
1361
1345
|
}) => {
|
|
1346
|
+
const {
|
|
1347
|
+
t
|
|
1348
|
+
} = reactI18next.useTranslation();
|
|
1362
1349
|
const [extend, setExtend] = React.useState(isActive || false);
|
|
1363
1350
|
const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);
|
|
1364
1351
|
return React__default.createElement(Item$1, {
|
|
1365
1352
|
isOpen: extend
|
|
1366
1353
|
}, React__default.createElement(Header$2, {
|
|
1367
1354
|
onClick: onToggleExtend,
|
|
1368
|
-
title:
|
|
1355
|
+
title: t('common.showMore') || ''
|
|
1369
1356
|
}, React__default.createElement(Label$1, null, React__default.createElement(Heading$1, {
|
|
1370
1357
|
className: activeCount && activeCount > 0 ? 'wayke__theme wayke__font--bold' : ''
|
|
1371
1358
|
}, heading), activeCount && activeCount > 0 && React__default.createElement(Indicator$1, null, React__default.createElement(IndicatorValue$1, null, activeCount))), React__default.createElement(Icon$2, null, React__default.createElement(IconChevronDown, {
|
|
@@ -1929,7 +1916,7 @@ const RangeFacet = ({
|
|
|
1929
1916
|
unit,
|
|
1930
1917
|
formatValues
|
|
1931
1918
|
}) => {
|
|
1932
|
-
var _initialFacet$filters,
|
|
1919
|
+
var _initialFacet$filters, _queryFilter$searchPa3;
|
|
1933
1920
|
const {
|
|
1934
1921
|
loading,
|
|
1935
1922
|
queryFilter,
|
|
@@ -1937,7 +1924,7 @@ const RangeFacet = ({
|
|
|
1937
1924
|
onFilterUpdate
|
|
1938
1925
|
} = useSearch();
|
|
1939
1926
|
const initialFacet = initialFacets === null || initialFacets === void 0 ? void 0 : initialFacets.find(x => x.id === facet.id);
|
|
1940
|
-
const maxPrefix = initialFacet === null || initialFacet === void 0
|
|
1927
|
+
const maxPrefix = initialFacet === null || initialFacet === void 0 || (_initialFacet$filters = initialFacet.filters[(initialFacet === null || initialFacet === void 0 ? void 0 : initialFacet.filters.length) - 1]) === null || _initialFacet$filters === void 0 || (_initialFacet$filters = _initialFacet$filters.displayName) === null || _initialFacet$filters === void 0 ? void 0 : _initialFacet$filters.includes('+');
|
|
1941
1928
|
const [state, setValues] = React.useState(undefined);
|
|
1942
1929
|
React.useEffect(() => {
|
|
1943
1930
|
const _initialAllValues = (initialFacet === null || initialFacet === void 0 ? void 0 : initialFacet.filters.map(f => parseInt(f.displayName.replace(/[\<\>+-]+/g, ''), 10))) || [1, 2];
|
|
@@ -1999,6 +1986,9 @@ const RangeFacet = ({
|
|
|
1999
1986
|
const FacetSelector = ({
|
|
2000
1987
|
facet
|
|
2001
1988
|
}) => {
|
|
1989
|
+
const {
|
|
1990
|
+
t
|
|
1991
|
+
} = reactI18next.useTranslation();
|
|
2002
1992
|
switch (facet.id) {
|
|
2003
1993
|
case MANUFACTURER:
|
|
2004
1994
|
case MODEL_SERIES:
|
|
@@ -2018,20 +2008,26 @@ const FacetSelector = ({
|
|
|
2018
2008
|
case PRICE:
|
|
2019
2009
|
return React__default.createElement(RangeFacet, {
|
|
2020
2010
|
facet: facet,
|
|
2021
|
-
unit:
|
|
2011
|
+
unit: t('currency.default'),
|
|
2022
2012
|
formatValues: true
|
|
2023
2013
|
});
|
|
2024
2014
|
case BUSINESS_LEASING_PRICE:
|
|
2025
2015
|
case LEASING_PRICE:
|
|
2026
2016
|
return React__default.createElement(RangeFacet, {
|
|
2027
2017
|
facet: facet,
|
|
2028
|
-
unit:
|
|
2018
|
+
unit: t('currency.monthly'),
|
|
2019
|
+
formatValues: true
|
|
2020
|
+
});
|
|
2021
|
+
case ODOMETER_VALUE_AS_KM:
|
|
2022
|
+
return React__default.createElement(RangeFacet, {
|
|
2023
|
+
facet: facet,
|
|
2024
|
+
unit: t('odometer.Kilometer'),
|
|
2029
2025
|
formatValues: true
|
|
2030
2026
|
});
|
|
2031
2027
|
case MILEAGE:
|
|
2032
2028
|
return React__default.createElement(RangeFacet, {
|
|
2033
2029
|
facet: facet,
|
|
2034
|
-
unit:
|
|
2030
|
+
unit: t('odometer.ScandinavianMile'),
|
|
2035
2031
|
formatValues: true
|
|
2036
2032
|
});
|
|
2037
2033
|
case MODEL_YEAR:
|
|
@@ -2052,19 +2048,25 @@ const FilterPanel = ({
|
|
|
2052
2048
|
onFilterUpdate,
|
|
2053
2049
|
onClose
|
|
2054
2050
|
}) => {
|
|
2051
|
+
const {
|
|
2052
|
+
t
|
|
2053
|
+
} = reactI18next.useTranslation();
|
|
2055
2054
|
const onClearFilters = React.useCallback(() => onFilterUpdate(''), []);
|
|
2056
2055
|
return React__default.createElement(Panel, {
|
|
2057
|
-
title:
|
|
2056
|
+
title: t('search.filter'),
|
|
2058
2057
|
onClose: onClose,
|
|
2059
2058
|
footer: React__default.createElement(React__default.Fragment, null, React__default.createElement(FooterAction$1, null, React__default.createElement(FooterActionItem, null, React__default.createElement(ButtonSecondary, {
|
|
2060
2059
|
fullWidth: true,
|
|
2061
2060
|
disabled: loading,
|
|
2062
2061
|
onClick: onClearFilters
|
|
2063
|
-
}, React__default.createElement(ButtonContent, null,
|
|
2062
|
+
}, React__default.createElement(ButtonContent, null, t('search.clearAllFilters.text')))), React__default.createElement(FooterActionItem, null, React__default.createElement(ButtonPrimary, {
|
|
2064
2063
|
fullWidth: true,
|
|
2065
2064
|
disabled: loading,
|
|
2066
2065
|
onClick: onClose
|
|
2067
|
-
}, React__default.createElement(ButtonContent, null,
|
|
2066
|
+
}, React__default.createElement(ButtonContent, null, t('search.showNumberOfCustomUnit', {
|
|
2067
|
+
count: numberOfHits || 0,
|
|
2068
|
+
unit: t(`search.result.${(numberOfHits || 0) === 1 ? 'singular' : 'plural'}`)
|
|
2069
|
+
}))))))
|
|
2068
2070
|
}, React__default.createElement(Accordion, null, filteredFacets.filter(x => x.filters.length).map(f => React__default.createElement(AccordionItem, {
|
|
2069
2071
|
key: f.displayName,
|
|
2070
2072
|
heading: f.displayName,
|
|
@@ -2086,10 +2088,24 @@ const isSelected = (f, searchParams) => {
|
|
|
2086
2088
|
return f.filters.filter(filter => filter.selected).length;
|
|
2087
2089
|
}
|
|
2088
2090
|
};
|
|
2091
|
+
const filterOdometer = (id, marketCode = 'SE', filterList) => {
|
|
2092
|
+
if (filterList) return true;
|
|
2093
|
+
if (id === 'mileage') {
|
|
2094
|
+
return marketCode === 'SE' ? true : false;
|
|
2095
|
+
}
|
|
2096
|
+
if (id === 'odometerValueAsKm') {
|
|
2097
|
+
return marketCode === 'NO' ? true : false;
|
|
2098
|
+
}
|
|
2099
|
+
return true;
|
|
2100
|
+
};
|
|
2089
2101
|
const Filter = ({
|
|
2102
|
+
marketCode,
|
|
2090
2103
|
filterList
|
|
2091
2104
|
}) => {
|
|
2092
2105
|
var _facets$filter;
|
|
2106
|
+
const {
|
|
2107
|
+
t
|
|
2108
|
+
} = reactI18next.useTranslation();
|
|
2093
2109
|
const {
|
|
2094
2110
|
queryFilter,
|
|
2095
2111
|
initialFacets,
|
|
@@ -2105,7 +2121,7 @@ const Filter = ({
|
|
|
2105
2121
|
return null;
|
|
2106
2122
|
}
|
|
2107
2123
|
const filterNames = filterList ? filterList.map(x => x.filterName) : undefined;
|
|
2108
|
-
const filteredFacets = facets === null || facets === void 0
|
|
2124
|
+
const filteredFacets = facets === null || facets === void 0 || (_facets$filter = facets.filter(x => x.id !== 'segment' && filterOdometer(x.id, marketCode, filterNames))) === null || _facets$filter === void 0 ? void 0 : _facets$filter.filter(f => filterNames ? filterNames.includes(f.id) : true).sort((a, b) => filterNames ? filterNames.indexOf(a.id) - filterNames.indexOf(b.id) : 0).map(x => {
|
|
2109
2125
|
const match = filterList === null || filterList === void 0 ? void 0 : filterList.find(y => y.filterName === x.id);
|
|
2110
2126
|
if (match !== null && match !== void 0 && match.displayName) {
|
|
2111
2127
|
return _objectSpread2(_objectSpread2({}, x), {}, {
|
|
@@ -2113,7 +2129,7 @@ const Filter = ({
|
|
|
2113
2129
|
});
|
|
2114
2130
|
}
|
|
2115
2131
|
return _objectSpread2(_objectSpread2({}, x), {}, {
|
|
2116
|
-
displayName:
|
|
2132
|
+
displayName: t(`filter.${x.id}`)
|
|
2117
2133
|
});
|
|
2118
2134
|
});
|
|
2119
2135
|
return React__default.createElement(React__default.Fragment, null, initialFacets && facet && React__default.createElement(FilterPanel, {
|
|
@@ -2415,6 +2431,29 @@ const usePath = () => {
|
|
|
2415
2431
|
return context;
|
|
2416
2432
|
};
|
|
2417
2433
|
|
|
2434
|
+
const useIsInViewport = options => {
|
|
2435
|
+
const containerRef = React.useRef(null);
|
|
2436
|
+
const [isVisible, setIsVisible] = React.useState(false);
|
|
2437
|
+
const [intersectionRatio, setIntersectionRatio] = React.useState(0);
|
|
2438
|
+
const callbackFunction = (entries, observer) => {
|
|
2439
|
+
const [entry] = entries;
|
|
2440
|
+
setIsVisible(entry.isIntersecting);
|
|
2441
|
+
setIntersectionRatio(entry.intersectionRatio);
|
|
2442
|
+
if (entry.isIntersecting && options !== null && options !== void 0 && options.persistVisibility && containerRef.current) {
|
|
2443
|
+
observer.unobserve(containerRef.current);
|
|
2444
|
+
containerRef.current = null;
|
|
2445
|
+
}
|
|
2446
|
+
};
|
|
2447
|
+
React.useEffect(() => {
|
|
2448
|
+
const observer = new IntersectionObserver(callbackFunction, options);
|
|
2449
|
+
if (containerRef.current) observer.observe(containerRef.current);
|
|
2450
|
+
return () => {
|
|
2451
|
+
if (containerRef.current) observer.unobserve(containerRef.current);
|
|
2452
|
+
};
|
|
2453
|
+
}, [containerRef, options]);
|
|
2454
|
+
return [containerRef, isVisible, intersectionRatio];
|
|
2455
|
+
};
|
|
2456
|
+
|
|
2418
2457
|
const ProductCard = ({
|
|
2419
2458
|
id,
|
|
2420
2459
|
title,
|
|
@@ -2431,6 +2470,12 @@ const ProductCard = ({
|
|
|
2431
2470
|
businessLeasingPrice,
|
|
2432
2471
|
onClick
|
|
2433
2472
|
}) => {
|
|
2473
|
+
const {
|
|
2474
|
+
t
|
|
2475
|
+
} = reactI18next.useTranslation();
|
|
2476
|
+
const [containerRef, isVisible] = useIsInViewport({
|
|
2477
|
+
persistVisibility: true
|
|
2478
|
+
});
|
|
2434
2479
|
const {
|
|
2435
2480
|
pushState
|
|
2436
2481
|
} = usePath();
|
|
@@ -2446,7 +2491,9 @@ const ProductCard = ({
|
|
|
2446
2491
|
}, [id, pathRoute, href]);
|
|
2447
2492
|
return React__default.createElement(Wrapper$8, {
|
|
2448
2493
|
onClick: _onClick
|
|
2449
|
-
}, React__default.createElement(Image,
|
|
2494
|
+
}, React__default.createElement(Image, {
|
|
2495
|
+
ref: containerRef
|
|
2496
|
+
}, isVisible && image ? React__default.createElement(React__default.Fragment, null, React__default.createElement(Picture, null, React__default.createElement(Source, {
|
|
2450
2497
|
type: "image/webp",
|
|
2451
2498
|
srcSet: `${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`,
|
|
2452
2499
|
sizes: "(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)"
|
|
@@ -2457,7 +2504,7 @@ const ProductCard = ({
|
|
|
2457
2504
|
alt: title
|
|
2458
2505
|
}))) : React__default.createElement(Picture, null, React__default.createElement(Img, {
|
|
2459
2506
|
src: placeholderImage || DEFAULT_PLACEHOLDER_IMAGE
|
|
2460
|
-
})))
|
|
2507
|
+
}))), React__default.createElement(Content, null, React__default.createElement(ContentBody, null, branchName && React__default.createElement(PreHeading, null, branchName), React__default.createElement(Heading$2, null, href ? React__default.createElement(Link, {
|
|
2461
2508
|
onClick: onHrefClick,
|
|
2462
2509
|
href: href,
|
|
2463
2510
|
title: title,
|
|
@@ -2465,12 +2512,12 @@ const ProductCard = ({
|
|
|
2465
2512
|
}, title) : title), description && React__default.createElement(Description$1, null, description), uspList && React__default.createElement(Usp, null, React__default.createElement(UspList, {
|
|
2466
2513
|
small: true,
|
|
2467
2514
|
items: uspList
|
|
2468
|
-
}))), React__default.createElement(ContentFooter, null, React__default.createElement(Price, null, React__default.createElement(PriceCell, null, oldPrice ? React__default.createElement(OldPrice, null, oldPrice) : React__default.createElement(Label$3, null,
|
|
2515
|
+
}))), React__default.createElement(ContentFooter, null, React__default.createElement(Price, null, React__default.createElement(PriceCell, null, oldPrice ? React__default.createElement(OldPrice, null, oldPrice) : React__default.createElement(Label$3, null, t('productCard.price')), React__default.createElement(CurrentPrice, null, price)), leasingPrice && React__default.createElement(PriceCell, null, React__default.createElement(Label$3, null, t('productCard.privateLeasing')), React__default.createElement(CurrentPrice, null, leasingPrice)), businessLeasingPrice && React__default.createElement(PriceCell, null, React__default.createElement(Label$3, null, t('productCard.businessLeasing')), React__default.createElement(CurrentPrice, null, businessLeasingPrice))))));
|
|
2469
2516
|
};
|
|
2470
2517
|
|
|
2471
2518
|
const resolveImage = document => {
|
|
2472
|
-
var _document$featuredIma
|
|
2473
|
-
const img = (_document$featuredIma = document.featuredImage) === null || _document$featuredIma === void 0
|
|
2519
|
+
var _document$featuredIma;
|
|
2520
|
+
const img = (_document$featuredIma = document.featuredImage) === null || _document$featuredIma === void 0 || (_document$featuredIma = _document$featuredIma.files) === null || _document$featuredIma === void 0 || (_document$featuredIma = _document$featuredIma[0]) === null || _document$featuredIma === void 0 ? void 0 : _document$featuredIma.url;
|
|
2474
2521
|
if (img) {
|
|
2475
2522
|
return `${img}?w=567&q=72`;
|
|
2476
2523
|
}
|
|
@@ -2488,7 +2535,7 @@ const Grid = ({
|
|
|
2488
2535
|
return null;
|
|
2489
2536
|
}
|
|
2490
2537
|
return React__default.createElement(Wrapper$7, null, React__default.createElement(List$4, null, documents.map(document => {
|
|
2491
|
-
var _document$branches, _document$
|
|
2538
|
+
var _document$branches, _document$odometerRea, _document$odometerRea2;
|
|
2492
2539
|
/*
|
|
2493
2540
|
const _path = pathRoute?.replace(/^\/|\/$/g, '');
|
|
2494
2541
|
const prefix = _path ? `/${_path}/` : '/';
|
|
@@ -2517,20 +2564,20 @@ const Grid = ({
|
|
|
2517
2564
|
image: resolveImage(document),
|
|
2518
2565
|
placeholderImage: placeholderImage,
|
|
2519
2566
|
description: document.shortDescription,
|
|
2520
|
-
branchName: displayBranchName ? (_document$branches = document.branches) === null || _document$branches === void 0
|
|
2567
|
+
branchName: displayBranchName ? (_document$branches = document.branches) === null || _document$branches === void 0 || (_document$branches = _document$branches[0]) === null || _document$branches === void 0 ? void 0 : _document$branches.name : undefined,
|
|
2521
2568
|
uspList: [{
|
|
2522
2569
|
title: document.modelYear
|
|
2523
2570
|
}, {
|
|
2524
|
-
title: `${numberSeparator(document.mileage)}
|
|
2571
|
+
title: `${numberSeparator(((_document$odometerRea = document.odometerReading) === null || _document$odometerRea === void 0 ? void 0 : _document$odometerRea.value) || document.mileage)} ${i18next.t(`odometer.${((_document$odometerRea2 = document.odometerReading) === null || _document$odometerRea2 === void 0 ? void 0 : _document$odometerRea2.unit) || 'ScandinavianMile'}`)}`
|
|
2525
2572
|
}, {
|
|
2526
2573
|
title: document.gearboxType
|
|
2527
2574
|
}, {
|
|
2528
2575
|
title: document.fuelType
|
|
2529
2576
|
}],
|
|
2530
|
-
price: `${numberSeparator(document.price)}
|
|
2531
|
-
oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)}
|
|
2532
|
-
leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)}
|
|
2533
|
-
businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)}
|
|
2577
|
+
price: `${numberSeparator(document.price)} ${i18next.t('currency.default')}`,
|
|
2578
|
+
oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)} ${i18next.t('currency.default')}` : undefined,
|
|
2579
|
+
leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)} ${i18next.t('currency.monthly')}` : undefined,
|
|
2580
|
+
businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)} ${i18next.t('currency.monthly')}` : undefined
|
|
2534
2581
|
}));
|
|
2535
2582
|
})));
|
|
2536
2583
|
};
|
|
@@ -2604,12 +2651,17 @@ const SearchTerm = ({
|
|
|
2604
2651
|
children,
|
|
2605
2652
|
onClear,
|
|
2606
2653
|
clearTitle
|
|
2607
|
-
}) =>
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
}
|
|
2611
|
-
|
|
2612
|
-
|
|
2654
|
+
}) => {
|
|
2655
|
+
const {
|
|
2656
|
+
t
|
|
2657
|
+
} = reactI18next.useTranslation();
|
|
2658
|
+
return React__default.createElement(Wrapper$9, null, React__default.createElement(Query, null, children), onClear && React__default.createElement(Clear, {
|
|
2659
|
+
onClick: onClear,
|
|
2660
|
+
title: clearTitle ? clearTitle : t('search.freeText')
|
|
2661
|
+
}, React__default.createElement(IconCancel, {
|
|
2662
|
+
block: true
|
|
2663
|
+
})));
|
|
2664
|
+
};
|
|
2613
2665
|
|
|
2614
2666
|
const Wrapper$a = styled__default.div.attrs(() => ({
|
|
2615
2667
|
role: 'search'
|
|
@@ -2746,6 +2798,9 @@ const SearchBar = ({
|
|
|
2746
2798
|
setValue,
|
|
2747
2799
|
onSearch
|
|
2748
2800
|
}) => {
|
|
2801
|
+
const {
|
|
2802
|
+
t
|
|
2803
|
+
} = reactI18next.useTranslation();
|
|
2749
2804
|
const ref = React.useRef(null);
|
|
2750
2805
|
const onChange = React.useCallback(e => setValue(e.currentTarget.value), []);
|
|
2751
2806
|
useOutsideClick(ref, () => setValue(''));
|
|
@@ -2763,8 +2818,8 @@ const SearchBar = ({
|
|
|
2763
2818
|
onChange: onChange,
|
|
2764
2819
|
onKeyDown: onKeyDown,
|
|
2765
2820
|
onSearch: _onSearch,
|
|
2766
|
-
placeholder:
|
|
2767
|
-
label:
|
|
2821
|
+
placeholder: t('searchBar.placeholder'),
|
|
2822
|
+
label: t('searchBar.placeholder'),
|
|
2768
2823
|
id: "main-search"
|
|
2769
2824
|
});
|
|
2770
2825
|
};
|
|
@@ -2961,7 +3016,932 @@ PubSub.publish = (eventName, ...args) => {
|
|
|
2961
3016
|
}
|
|
2962
3017
|
};
|
|
2963
3018
|
|
|
3019
|
+
const getLanguage = marketCode => {
|
|
3020
|
+
switch (marketCode) {
|
|
3021
|
+
case 'NO':
|
|
3022
|
+
return 'nb-NO';
|
|
3023
|
+
case 'SE':
|
|
3024
|
+
return 'sv-SE';
|
|
3025
|
+
default:
|
|
3026
|
+
return 'en-US';
|
|
3027
|
+
}
|
|
3028
|
+
};
|
|
3029
|
+
const initializeI18n = (marketCode = 'SE') => {
|
|
3030
|
+
return new Promise(resolve => {
|
|
3031
|
+
if (i18next.isInitialized) {
|
|
3032
|
+
resolve(true);
|
|
3033
|
+
return;
|
|
3034
|
+
}
|
|
3035
|
+
i18next.use(reactI18next.initReactI18next).init({
|
|
3036
|
+
lng: getLanguage(marketCode),
|
|
3037
|
+
fallbackLng: 'en-US',
|
|
3038
|
+
interpolation: {
|
|
3039
|
+
escapeValue: false
|
|
3040
|
+
},
|
|
3041
|
+
debug: true,
|
|
3042
|
+
resources: {
|
|
3043
|
+
'sv-SE': {
|
|
3044
|
+
translation: {
|
|
3045
|
+
navigation: {
|
|
3046
|
+
backToSearch: 'Tillbaka till bilsök'
|
|
3047
|
+
},
|
|
3048
|
+
filter: {
|
|
3049
|
+
manufacturer: 'Tillverkare',
|
|
3050
|
+
modelSeries: 'Modell',
|
|
3051
|
+
fuelType: 'Drivmedel',
|
|
3052
|
+
gearboxType: 'Växellåda',
|
|
3053
|
+
branch: 'Anläggning',
|
|
3054
|
+
color: 'Färg',
|
|
3055
|
+
environmentClass: 'Miljöklass',
|
|
3056
|
+
'properties.segment': 'Segment',
|
|
3057
|
+
drivingWheel: 'Drivhjul',
|
|
3058
|
+
price: 'Pris',
|
|
3059
|
+
mileage: 'Miltal',
|
|
3060
|
+
modelYear: 'Modellår',
|
|
3061
|
+
odometerValueAsKm: 'Mätarställning',
|
|
3062
|
+
leasingPrice: 'Privatleasing',
|
|
3063
|
+
businessLeasingPrice: 'Företagsleasa'
|
|
3064
|
+
},
|
|
3065
|
+
currency: {
|
|
3066
|
+
default: 'kr',
|
|
3067
|
+
monthly: 'kr/mån'
|
|
3068
|
+
},
|
|
3069
|
+
category: {
|
|
3070
|
+
basic: 'Basuppgifter',
|
|
3071
|
+
engineAndPerformance: 'Motor & Prestanda'
|
|
3072
|
+
},
|
|
3073
|
+
subCategory: {
|
|
3074
|
+
engine: 'Motor'
|
|
3075
|
+
},
|
|
3076
|
+
customProperty: {
|
|
3077
|
+
manufacturer: {
|
|
3078
|
+
displayName: 'Varumärke',
|
|
3079
|
+
hint: ''
|
|
3080
|
+
},
|
|
3081
|
+
modelSeries: {
|
|
3082
|
+
displayName: 'Modell',
|
|
3083
|
+
hint: ''
|
|
3084
|
+
},
|
|
3085
|
+
modelName: {
|
|
3086
|
+
displayName: 'Version',
|
|
3087
|
+
hint: 'Vilket utförande av bilmodellen det är.'
|
|
3088
|
+
},
|
|
3089
|
+
modelYear: {
|
|
3090
|
+
displayName: 'Modellår',
|
|
3091
|
+
hint: 'Modellår sätts av tillverkaren. Handlaren ändrar ibland modellåret för att matcha transportstyrelsens definition för <i>årsmodell</i>. Definitionen för årsmodell innebär att bilar tillverkade andra halvan av året får nästa års modellår.'
|
|
3092
|
+
},
|
|
3093
|
+
manufactureYear: {
|
|
3094
|
+
displayName: 'Tillverkningsår',
|
|
3095
|
+
hint: 'Året bilen tillverkades.'
|
|
3096
|
+
},
|
|
3097
|
+
odometer: {
|
|
3098
|
+
displayName: 'Mätarställning',
|
|
3099
|
+
hint: ''
|
|
3100
|
+
},
|
|
3101
|
+
gearboxType: {
|
|
3102
|
+
displayName: 'Växellåda',
|
|
3103
|
+
hint: ''
|
|
3104
|
+
},
|
|
3105
|
+
registrationNumber: {
|
|
3106
|
+
displayName: 'Registreringsnummer',
|
|
3107
|
+
hint: ''
|
|
3108
|
+
},
|
|
3109
|
+
fuelType: {
|
|
3110
|
+
displayName: 'Bränslegrupp',
|
|
3111
|
+
hint: 'Vad bilen ska tankas med och drivs av.'
|
|
3112
|
+
},
|
|
3113
|
+
enginePower: {
|
|
3114
|
+
displayName: 'Effekt',
|
|
3115
|
+
unit: 'hk'
|
|
3116
|
+
}
|
|
3117
|
+
},
|
|
3118
|
+
odometer: {
|
|
3119
|
+
Kilometer: 'km',
|
|
3120
|
+
ScandinavianMile: 'mil'
|
|
3121
|
+
},
|
|
3122
|
+
common: {
|
|
3123
|
+
yes: 'Ja',
|
|
3124
|
+
no: 'Nej',
|
|
3125
|
+
logotype: 'Logotyp',
|
|
3126
|
+
close: 'Stäng',
|
|
3127
|
+
showMore: 'Visa mer',
|
|
3128
|
+
readMore: 'Läs mer',
|
|
3129
|
+
showMoreInformation: 'Visa mer information',
|
|
3130
|
+
showLessInformation: 'Visa mindre information',
|
|
3131
|
+
choose: 'Välj',
|
|
3132
|
+
address: 'Adress',
|
|
3133
|
+
mondayShort: 'Mån',
|
|
3134
|
+
tuesdayShort: 'Tis',
|
|
3135
|
+
wednesdayShort: 'Ons',
|
|
3136
|
+
thursdayShort: 'Tor',
|
|
3137
|
+
fridayShort: 'Fre',
|
|
3138
|
+
saturdayShort: 'Lör',
|
|
3139
|
+
sundayShort: 'Sön',
|
|
3140
|
+
moreInformation: 'Mer information',
|
|
3141
|
+
lessInformation: 'Mindre information',
|
|
3142
|
+
anErrorHasOccured: 'Ett fel har inträffat',
|
|
3143
|
+
opensInNewTab: 'Öppnas i ny flik',
|
|
3144
|
+
open: 'Öppna',
|
|
3145
|
+
imageIndex: 'Bild {{index}}'
|
|
3146
|
+
},
|
|
3147
|
+
item: {
|
|
3148
|
+
relatedVehicles: 'Relaterade fordon',
|
|
3149
|
+
latestVehicles: 'Senast inkomna',
|
|
3150
|
+
readMoreInNewTab: 'Läs mer (öppnas i ny flik)',
|
|
3151
|
+
moreInfoAboutSubject: 'Mer information om {{subject}}',
|
|
3152
|
+
dataNotAvailable: 'Uppgift saknas',
|
|
3153
|
+
showOnGoogleMaps: 'Visa på Google Maps',
|
|
3154
|
+
googleMapsMapAlt: 'Karta',
|
|
3155
|
+
googleMapsPlaceholderInit: 'Visa karta',
|
|
3156
|
+
demoCar: 'Demobil',
|
|
3157
|
+
demoCarDescription: 'En demobil är en bil som stått i utställning eller som på annat sätt använts för att visa upp en viss modell. Bilarna är ofta välutrustade och har blivit väl omhändertagna. Dessutom har de vanligtvis gått få mil och har fortfarande nybilsgarantierna kvar.',
|
|
3158
|
+
carData: 'Biluppgifter',
|
|
3159
|
+
carDataDescription: 'Information direkt från Transportstyrelsen och tillverkaren.',
|
|
3160
|
+
equipment: 'Utrustning',
|
|
3161
|
+
equipmentDescription: 'Kompletterande uppgifter om bilen.',
|
|
3162
|
+
documents: 'Dokument',
|
|
3163
|
+
documentTypes: {
|
|
3164
|
+
tireEnergyDeclaration: 'Energideklaration för däck',
|
|
3165
|
+
goodsDeclaration: 'Varudeklaration',
|
|
3166
|
+
other: 'Övriga dokument'
|
|
3167
|
+
},
|
|
3168
|
+
carIsReserved: 'Bilen är reserverad',
|
|
3169
|
+
carIsReservedDescription: 'Denna bil är reserverad av en annan köpare.',
|
|
3170
|
+
carIsReservedModalBody: 'Denna bil är reserverad av en annan köpare.',
|
|
3171
|
+
centralWarehouseCar: 'Centrallagerbil',
|
|
3172
|
+
centralWarehouseCarDescription: 'Denna bil tillhör ett centrallager och går att köpa genom flera anläggningar. Byt anläggning för att visa kontaktuppgifter till just den anläggningen.',
|
|
3173
|
+
centralWarehouseCarDescriptionShort: 'Denna bil tillhör ett centrallager och går att köpa genom flera anläggningar.',
|
|
3174
|
+
clickHereToShowContactToAnotherBranch: ' Klicka här för att visa kontaktuppgifter till en annan anläggning',
|
|
3175
|
+
switchBranch: 'Byt anläggning',
|
|
3176
|
+
switchBranchDescription: 'Välj den anläggning du vill visa kontaktuppgifter för.',
|
|
3177
|
+
chooseBranch: 'Välj anläggning',
|
|
3178
|
+
chooseSelectedBranch: 'Välj vald anläggning',
|
|
3179
|
+
availableFromDate: 'Tillgänglig från {{date}}',
|
|
3180
|
+
includingShort: 'Inkl.',
|
|
3181
|
+
usedWarrany: 'Begagnatgaranti',
|
|
3182
|
+
homeDelivery: 'Hemleverans',
|
|
3183
|
+
thisCarsIsLocatedAt: 'Den här bilen finns på',
|
|
3184
|
+
thisCarIsAvailableAtOurBranch: 'Den här bilen finns på vår anläggning i {{location}}',
|
|
3185
|
+
contact: 'Kontakt',
|
|
3186
|
+
start360Exterior: 'Starta 360° exteriört',
|
|
3187
|
+
start360Interior: 'Starta 360° interiört',
|
|
3188
|
+
openingHoursToday: 'Öppetider idag',
|
|
3189
|
+
closedToday: 'Stängt idag',
|
|
3190
|
+
open: 'Öppet',
|
|
3191
|
+
closed: 'Stängt',
|
|
3192
|
+
addInsurance: 'Välj till försäkring',
|
|
3193
|
+
getInsuranceQuote: 'Få prisförslag',
|
|
3194
|
+
insurance: 'Försäkring',
|
|
3195
|
+
readMoreAboutInsuranceInNewTab: 'Läs mer om försäkringen (öppnas i ny flik)',
|
|
3196
|
+
personalNumber: 'Personnummer',
|
|
3197
|
+
estimatedAnualMileage: 'Uppskattad körsträcka per år',
|
|
3198
|
+
showInsurances: 'Visa försäkringar',
|
|
3199
|
+
savePersonalNumberOnThisDevice: 'Spara personnummer på denna enhet',
|
|
3200
|
+
savePersonalNumberOnThisDeviceHelp: 'Spara personnummer på denna dator för att direkt visa försäkringskostnaderna i Wayke. Personnumret lagras inte hos Wayke utan finns bara sparad i din webbläsare.',
|
|
3201
|
+
couldNotfetchInsurances: 'Kunde inte hämta försäkringar. Vänligen försök igen.',
|
|
3202
|
+
openPrePurchaseInformationInNewTab: 'Förköpsinformation och villkor (öppnas i ny flik)',
|
|
3203
|
+
insuranceIncludes: 'Försäkringen innehåller',
|
|
3204
|
+
addInsuranceHeading: 'Lägg till',
|
|
3205
|
+
financialOptions: {
|
|
3206
|
+
otherFinancialOptions: 'Andra finansieringsalternativ',
|
|
3207
|
+
privateLease: 'Privatleasa',
|
|
3208
|
+
businessLease: 'Företagsleasa',
|
|
3209
|
+
monthlyCost: 'Månadskostnad',
|
|
3210
|
+
bindingTime: 'Bindningstid',
|
|
3211
|
+
annualMileage: 'Årlig körsträcka',
|
|
3212
|
+
payInInstallments: 'Delbetala',
|
|
3213
|
+
payInInstallmentsDetailed: 'Delbetala {{amount}} i {{duration}} mån',
|
|
3214
|
+
disclaimer: 'Beräknat på {{interest}} ränta.',
|
|
3215
|
+
loanOptions: 'Lånealternativ',
|
|
3216
|
+
downPayment: 'Kontantinsats',
|
|
3217
|
+
duration: 'Avbetalning',
|
|
3218
|
+
residual: 'Restskuld',
|
|
3219
|
+
interest: 'Ränta',
|
|
3220
|
+
effectiveinterest: 'Effektiv ränta',
|
|
3221
|
+
setupFee: 'Uppläggningskostnad',
|
|
3222
|
+
administrationFee: 'Administrativa avgifter',
|
|
3223
|
+
totalCreditCost: 'Total kreditkostnad',
|
|
3224
|
+
milagePerYear: 'mil/år',
|
|
3225
|
+
months: 'mån',
|
|
3226
|
+
loanOptionsDisclaimer: 'Beräknat på {{interest}} % ränta (effektivt {{effectiveInterest}} %).',
|
|
3227
|
+
loanOptionsDisclaimerMileage: 'Beräknat på {{interest}} % ränta (effektivt {{effectiveInterest}} %) och en årlig körsträcka om {{mileage}} mil.'
|
|
3228
|
+
},
|
|
3229
|
+
actions: {
|
|
3230
|
+
emailSubject: '{{hostName}} – Jag är intresserad av {{vehicle}}',
|
|
3231
|
+
openform: 'Öppna formulär',
|
|
3232
|
+
buyOnline: 'Köp bilen online',
|
|
3233
|
+
showEmail: 'Visa mailadress',
|
|
3234
|
+
showPhoneNumber: 'Visa telefonnummer',
|
|
3235
|
+
callNumber: 'Ring',
|
|
3236
|
+
sendEmailTo: 'Skicka ett mail till'
|
|
3237
|
+
},
|
|
3238
|
+
accessories: {
|
|
3239
|
+
accessories: 'Tillbehör',
|
|
3240
|
+
accessoriesDescription: 'Tillbehör som passar till detta fordon.',
|
|
3241
|
+
price: 'Kontantpris',
|
|
3242
|
+
oldPrice: 'Tidigare pris',
|
|
3243
|
+
installationCost: 'Monteringskostnad',
|
|
3244
|
+
articleNumberShort: 'Art. nr.',
|
|
3245
|
+
moreInformationAboutAccessory: 'Mer information om {{accessory}}'
|
|
3246
|
+
}
|
|
3247
|
+
},
|
|
3248
|
+
productCard: {
|
|
3249
|
+
price: 'Pris',
|
|
3250
|
+
privateLeasing: 'Privatleasing'
|
|
3251
|
+
},
|
|
3252
|
+
search: {
|
|
3253
|
+
filter: 'Filter',
|
|
3254
|
+
sort: 'Sortera',
|
|
3255
|
+
showMore: {
|
|
3256
|
+
text: 'Visa fler',
|
|
3257
|
+
title: 'Visa fler resultat'
|
|
3258
|
+
},
|
|
3259
|
+
filterButton: {
|
|
3260
|
+
text: 'Filtrera',
|
|
3261
|
+
title: 'Visa filter'
|
|
3262
|
+
},
|
|
3263
|
+
sortButton: {
|
|
3264
|
+
text: 'Sortera',
|
|
3265
|
+
title: 'Välj sorteringsordning'
|
|
3266
|
+
},
|
|
3267
|
+
searchResult: 'Sökresultat',
|
|
3268
|
+
snackbarNoSearchResults: {
|
|
3269
|
+
heading: 'Inga resultat',
|
|
3270
|
+
body: 'Sökningen gav inga resultat'
|
|
3271
|
+
},
|
|
3272
|
+
snackBarClearFreeText: {
|
|
3273
|
+
heading: 'Inga resultat',
|
|
3274
|
+
body: 'Rensa fritexten för att se alla filter'
|
|
3275
|
+
},
|
|
3276
|
+
sortOptions: {
|
|
3277
|
+
relevance: 'Relevans',
|
|
3278
|
+
publishedAsc: 'Publicerad (äldst)',
|
|
3279
|
+
publishedDesc: 'Publicerad (senast)',
|
|
3280
|
+
priceAsc: 'Pris (lägst)',
|
|
3281
|
+
priceDesc: 'Pris (högst)',
|
|
3282
|
+
modelAsc: 'Årsmodell (äldst)',
|
|
3283
|
+
modelDesc: 'Årsmodell (nyast)',
|
|
3284
|
+
mileageAsc: 'Miltal (lägst)',
|
|
3285
|
+
mileageDesc: 'Miltal (högst)'
|
|
3286
|
+
},
|
|
3287
|
+
clearAllFilters: {
|
|
3288
|
+
text: 'Rensa alla filter',
|
|
3289
|
+
title: 'Rensa alla filter'
|
|
3290
|
+
},
|
|
3291
|
+
showNumberOfCustomUnit: 'Visa {{count}} {{unit}}',
|
|
3292
|
+
result: {
|
|
3293
|
+
singular: 'Bil',
|
|
3294
|
+
plural: 'Bilar'
|
|
3295
|
+
},
|
|
3296
|
+
freeText: 'Fritext',
|
|
3297
|
+
from: 'Från',
|
|
3298
|
+
to: 'Till',
|
|
3299
|
+
min: 'Min',
|
|
3300
|
+
max: 'Max'
|
|
3301
|
+
},
|
|
3302
|
+
searchBar: {
|
|
3303
|
+
title: 'Sök',
|
|
3304
|
+
placeholder: 'Sök din bil',
|
|
3305
|
+
button: {
|
|
3306
|
+
text: 'Sök',
|
|
3307
|
+
title: 'Sök'
|
|
3308
|
+
},
|
|
3309
|
+
searchResults: 'Sökträffar',
|
|
3310
|
+
showAllRsults: 'Visa alla bilar'
|
|
3311
|
+
},
|
|
3312
|
+
other: {
|
|
3313
|
+
loading: 'Laddar...',
|
|
3314
|
+
error404: '404',
|
|
3315
|
+
showingNumberOfResults_one: 'Visar {{current}} av {{count}} resultat',
|
|
3316
|
+
showingNumberOfResults_other: 'Visar {{current}} av {{count}} resultat',
|
|
3317
|
+
closeModal: 'Stäng modal',
|
|
3318
|
+
closePanel: 'Stäng panel',
|
|
3319
|
+
goToHeading: 'Gå till {{heading}}',
|
|
3320
|
+
openDoumentt: 'Öppna {{document}}',
|
|
3321
|
+
previousImage: 'Föregående bild',
|
|
3322
|
+
nextImage: 'Nästa bild',
|
|
3323
|
+
goToImageIndex: 'Gå till bild {{index}}',
|
|
3324
|
+
phoneNumber: 'Telefonnummer',
|
|
3325
|
+
showPhoneNumber: 'Visa telefonnummer',
|
|
3326
|
+
callPhoneNumber: 'Ring {{phoneNumber}}',
|
|
3327
|
+
price: 'Pris',
|
|
3328
|
+
privateLeasingPrice: 'Privatleasing',
|
|
3329
|
+
video: 'Video',
|
|
3330
|
+
playVideo: 'Spela video',
|
|
3331
|
+
searchResults: 'Sökträffar',
|
|
3332
|
+
showAllCars: 'Visa alla bilar'
|
|
3333
|
+
}
|
|
3334
|
+
}
|
|
3335
|
+
},
|
|
3336
|
+
'nb-NO': {
|
|
3337
|
+
translation: {
|
|
3338
|
+
navigation: {
|
|
3339
|
+
backToSearch: 'Tilbake til bilsøk'
|
|
3340
|
+
},
|
|
3341
|
+
filter: {
|
|
3342
|
+
manufacturer: 'Produsent',
|
|
3343
|
+
modelSeries: 'Modell',
|
|
3344
|
+
fuelType: 'Drivstofftype',
|
|
3345
|
+
gearboxType: 'Girkassetype',
|
|
3346
|
+
branch: 'Anlegget',
|
|
3347
|
+
color: 'Farge',
|
|
3348
|
+
environmentClass: 'Miljøklasse',
|
|
3349
|
+
'properties.segment': 'Segment',
|
|
3350
|
+
drivingWheel: 'Drivhjul',
|
|
3351
|
+
price: 'Pris',
|
|
3352
|
+
mileage: 'Kilometerstand',
|
|
3353
|
+
modelYear: 'Modellår',
|
|
3354
|
+
odometerValueAsKm: 'Kilometerstand',
|
|
3355
|
+
leasingPrice: 'Privatleasing',
|
|
3356
|
+
businessLease: 'Bedriftsleasing'
|
|
3357
|
+
},
|
|
3358
|
+
currency: {
|
|
3359
|
+
default: 'kr',
|
|
3360
|
+
monthly: 'kr/mnd'
|
|
3361
|
+
},
|
|
3362
|
+
category: {
|
|
3363
|
+
basic: 'Grunnopplysninger',
|
|
3364
|
+
engineAndPerformance: 'Motor og ytelse'
|
|
3365
|
+
},
|
|
3366
|
+
subCategory: {
|
|
3367
|
+
engine: 'Motor'
|
|
3368
|
+
},
|
|
3369
|
+
customProperty: {
|
|
3370
|
+
manufacturer: {
|
|
3371
|
+
displayName: 'Produsent',
|
|
3372
|
+
hint: ''
|
|
3373
|
+
},
|
|
3374
|
+
modelSeries: {
|
|
3375
|
+
displayName: 'Modell',
|
|
3376
|
+
hint: ''
|
|
3377
|
+
},
|
|
3378
|
+
modelName: {
|
|
3379
|
+
displayName: 'Versjon',
|
|
3380
|
+
hint: 'Hvilken versjon av bilmodellen det er.'
|
|
3381
|
+
},
|
|
3382
|
+
modelYear: {
|
|
3383
|
+
displayName: 'Årsmodell',
|
|
3384
|
+
hint: 'Modellåret settes av produsenten. Forhandlere endrer av og til modellåret for å matche transportmyndighetens definisjon av modellåret. Definisjonen av modellåret innebærer at biler produsert i den siste halvdelen av året får neste års modellår.'
|
|
3385
|
+
},
|
|
3386
|
+
manufactureYear: {
|
|
3387
|
+
displayName: 'Produksjonsår',
|
|
3388
|
+
hint: 'Året bilen ble produsert.'
|
|
3389
|
+
},
|
|
3390
|
+
odometer: {
|
|
3391
|
+
displayName: 'Kilometerstand',
|
|
3392
|
+
hint: ''
|
|
3393
|
+
},
|
|
3394
|
+
gearboxType: {
|
|
3395
|
+
displayName: 'Girkasse',
|
|
3396
|
+
hint: ''
|
|
3397
|
+
},
|
|
3398
|
+
registrationNumber: {
|
|
3399
|
+
displayName: 'Registreringsnummer',
|
|
3400
|
+
hint: ''
|
|
3401
|
+
},
|
|
3402
|
+
fuelType: {
|
|
3403
|
+
displayName: 'Drivstofftype',
|
|
3404
|
+
hint: 'Hva bilen skal tankes med og drives av.'
|
|
3405
|
+
},
|
|
3406
|
+
enginePower: {
|
|
3407
|
+
displayName: 'Effekt',
|
|
3408
|
+
unit: 'hk'
|
|
3409
|
+
}
|
|
3410
|
+
},
|
|
3411
|
+
odometer: {
|
|
3412
|
+
Kilometer: 'km',
|
|
3413
|
+
ScandinavianMile: 'mil'
|
|
3414
|
+
},
|
|
3415
|
+
common: {
|
|
3416
|
+
yes: 'Ja',
|
|
3417
|
+
no: 'nei',
|
|
3418
|
+
logotype: 'Logotype',
|
|
3419
|
+
close: 'Close',
|
|
3420
|
+
showMore: 'Vis mer',
|
|
3421
|
+
readMore: 'Les mer',
|
|
3422
|
+
showMoreInformation: 'Vis mer informasjon',
|
|
3423
|
+
showLessInformation: 'Vis mindre informasjon',
|
|
3424
|
+
choose: 'Velg',
|
|
3425
|
+
address: 'Adresse',
|
|
3426
|
+
mondayShort: 'man',
|
|
3427
|
+
tuesdayShort: 'tirs',
|
|
3428
|
+
wednesdayShort: 'Wednesday',
|
|
3429
|
+
thursdayShort: 'Thursday',
|
|
3430
|
+
FridayShort: 'fre',
|
|
3431
|
+
saturdayShort: 'lørdag',
|
|
3432
|
+
sundayShort: 'Søn',
|
|
3433
|
+
moreInformation: 'Mer informasjon',
|
|
3434
|
+
lessInformation: 'Mindre informasjon',
|
|
3435
|
+
anErrorHasOccured: 'Det har oppstått en feil',
|
|
3436
|
+
opensInNewTab: 'Åpnes i ny fane',
|
|
3437
|
+
open: 'Åpne',
|
|
3438
|
+
imageIndex: 'Bilde {{indeks}}'
|
|
3439
|
+
},
|
|
3440
|
+
item: {
|
|
3441
|
+
relatedVehicles: 'Relaterte kjøretøy',
|
|
3442
|
+
latestVehicles: 'Sist mottatt',
|
|
3443
|
+
readMoreInNewTab: 'Les mer (åpnes i ny fane)',
|
|
3444
|
+
moreInfoAboutSubject: 'Mer informasjon om {{subject}}',
|
|
3445
|
+
dataNotAvailable: 'Data ikke tilgjengelig',
|
|
3446
|
+
showOnGoogleMaps: 'Vis på Google Maps',
|
|
3447
|
+
googleMapsMapAlt: 'Kart',
|
|
3448
|
+
googleMapsPlaceholderInit: 'Vis kart',
|
|
3449
|
+
demoCar: 'Demo Car',
|
|
3450
|
+
demoCarDescription: 'En demobil er en bil som har vært utstilt eller som har blitt brukt på annen måte for å vise frem en bestemt modell. Bilene er ofte godt utstyrt og har blitt tatt godt vare på. Dessuten har de vanligvis bare noen få kilometer på seg og har fortsatt garantien på nybilen.',
|
|
3451
|
+
carData: 'Bildata',
|
|
3452
|
+
carDataDescription: 'Informasjon direkte fra Transportstyrelsen og produsenten.',
|
|
3453
|
+
equipment: 'Utstyr',
|
|
3454
|
+
equipmentDescription: 'Ytterligere informasjon om bilen.',
|
|
3455
|
+
documents: 'Dokumenter',
|
|
3456
|
+
documentTypes: {
|
|
3457
|
+
tireEnergyDeclaration: 'Energideklarasjon for dekk',
|
|
3458
|
+
goodsDeclaration: 'Varedeklarasjon',
|
|
3459
|
+
other: 'Andre dokumenter'
|
|
3460
|
+
},
|
|
3461
|
+
carIsReserved: 'Bilen er reservert',
|
|
3462
|
+
carIsReservedDescription: 'Denne bilen er reservert av en annen kjøper.',
|
|
3463
|
+
carIsReservedModalBody: 'Denne bilen er reservert av en annen kjøper.',
|
|
3464
|
+
centralWarehouseCar: 'Sentrallagerbil',
|
|
3465
|
+
centralWarehouseCarDescription: 'Denne bilen tilhører et sentrallager og kan kjøpes gjennom flere fasiliteter. Endre anlegget for å vise kontaktinformasjon for det bestemte anlegget.',
|
|
3466
|
+
centralWarehouseCarDescriptionShort: 'Denne bilen tilhører et sentrallager og kan kjøpes gjennom flere fasiliteter.',
|
|
3467
|
+
clickHereToShowContactToAnotherBranch: 'Klikk her for å se kontaktdetaljer for et annet anlegg',
|
|
3468
|
+
switchBranch: 'Switch Branch',
|
|
3469
|
+
switchBranchDescription: 'Velg filialen du vil vise kontaktdetaljer for.',
|
|
3470
|
+
selectBranch: 'Choose Branch',
|
|
3471
|
+
chooseSelectedBranch: 'Velg valgt gren',
|
|
3472
|
+
availableFromDate: 'Tilgjengelig fra {{date}}',
|
|
3473
|
+
includingShort: 'Inkl.',
|
|
3474
|
+
usedWarrany: 'Bruktgaranti',
|
|
3475
|
+
homeDelivery: 'Hjemlevering',
|
|
3476
|
+
thisCarsIsLocatedAt: 'Denne bilen er på',
|
|
3477
|
+
thisCarIsAvailableAtOurBranch: 'Denne bilen er tilgjengelig i vår filial i {{location}}',
|
|
3478
|
+
contact: 'Kontakt',
|
|
3479
|
+
start360Exterior: 'Start 360° eksteriør',
|
|
3480
|
+
start360Interior: 'Start 360° interiør',
|
|
3481
|
+
openingHoursToday: 'Åpningstider i dag',
|
|
3482
|
+
closedToday: 'Stengt i dag',
|
|
3483
|
+
open: 'Åpne',
|
|
3484
|
+
closed: 'Stengt',
|
|
3485
|
+
addInsurance: 'Velg til forsikring',
|
|
3486
|
+
getInsuranceQuote: 'Få tilbud',
|
|
3487
|
+
insurance: 'Forsikring',
|
|
3488
|
+
readMoreAboutInsuranceInNewTab: 'Les mer om forsikring (åpnes i ny fane)',
|
|
3489
|
+
personalNumber: 'Personnummer',
|
|
3490
|
+
estimatedAnualMileage: 'Estimert kjørelengde per år',
|
|
3491
|
+
showInsurances: 'Vis forsikringer',
|
|
3492
|
+
savePersonalNumberOnThisDevice: 'Lagre personlig nummer på denne enheten',
|
|
3493
|
+
savePersonalNumberOnThisDeviceHelp: 'Lagre personnummeret på denne datamaskinen for å direkte se forsikringskostnadene i Wayke. Personnummeret lagres ikke hos Wayke, men lagres kun i nettleseren din.',
|
|
3494
|
+
couldNotfetchInsurances: 'Kunne ikke hente forsikringer. Vær så snill, prøv på nytt.',
|
|
3495
|
+
openPrePurchaseInformationInNewTab: 'Informasjon og vilkår før kjøp (åpnes i ny fane)',
|
|
3496
|
+
insuranceIncludes: 'Forsikringen inkluderer',
|
|
3497
|
+
addInsuranceHeading: 'Add',
|
|
3498
|
+
financialOptions: {
|
|
3499
|
+
otherFinancialOptions: 'Andre finansieringsalternativer',
|
|
3500
|
+
privateLease: 'PrivateLease',
|
|
3501
|
+
businessLease: 'Etagslease',
|
|
3502
|
+
monthlyCost: 'Månedlig kostnad',
|
|
3503
|
+
bindingTime: 'Bindingstid',
|
|
3504
|
+
annualMileage: 'Annual Mileage',
|
|
3505
|
+
payInInstallments: 'Betal i avdrag',
|
|
3506
|
+
payInInstallmentsDetailed: 'Betal delvis {{amount}} i {{duration}} måneder',
|
|
3507
|
+
disclaimer: 'Beregnet til {{interest}} rente.',
|
|
3508
|
+
loanOptions: 'Lånealternativer',
|
|
3509
|
+
downPayment: 'Kontantinnskudd',
|
|
3510
|
+
duration: 'Avbetaling',
|
|
3511
|
+
residual: 'Restgjeld',
|
|
3512
|
+
interesse: 'Interesse',
|
|
3513
|
+
effectiveinterest: 'Effektiv interesse',
|
|
3514
|
+
setupFee: 'Oppsettskostnad',
|
|
3515
|
+
administrationFee: 'Administrative gebyrer',
|
|
3516
|
+
totalCreditCost: 'Total kredittkostnad',
|
|
3517
|
+
milagePerYear: 'skandinaviske mil/år',
|
|
3518
|
+
months: 'mnd',
|
|
3519
|
+
loanOptionsDisclaimer: 'Beregnet til {{interest}} % rente (effektiv {{effectiveInterest}} %).',
|
|
3520
|
+
loanOptionsDisclaimerMileage: 'Beregnet på {{interest}} % rente (effektiv {{effectiveInterest}} %) og en årlig kjørelengde på {{mileage}} miles.'
|
|
3521
|
+
},
|
|
3522
|
+
actions: {
|
|
3523
|
+
emailSubject: '{{hostName}} - Jeg er interessert i {{vehicle}}',
|
|
3524
|
+
openform: 'Åpent skjema',
|
|
3525
|
+
buyOnline: 'Kjøp bilen på nett',
|
|
3526
|
+
showEmail: 'Vis e-postadresse',
|
|
3527
|
+
showPhoneNumber: 'Vis telefonnummer',
|
|
3528
|
+
callNumber: 'Ring',
|
|
3529
|
+
sendEmailTo: 'Send en e-post til'
|
|
3530
|
+
},
|
|
3531
|
+
accessories: {
|
|
3532
|
+
accessories: 'Tilbehør',
|
|
3533
|
+
accessoriesDescription: 'Tilbehør som passer for dette kjøretøyet.',
|
|
3534
|
+
price: 'Kontantpris',
|
|
3535
|
+
oldPrice: 'Forrige pris',
|
|
3536
|
+
installationCost: 'Installasjonskostnad',
|
|
3537
|
+
articleNumberShort: 'Art. Nei.',
|
|
3538
|
+
moreInformationAboutAccessory: 'Mer informasjon om {{accessory}}'
|
|
3539
|
+
}
|
|
3540
|
+
},
|
|
3541
|
+
productCard: {
|
|
3542
|
+
price: 'Pris',
|
|
3543
|
+
privateLeasing: 'Privatleasing'
|
|
3544
|
+
},
|
|
3545
|
+
search: {
|
|
3546
|
+
filter: 'Filter',
|
|
3547
|
+
sort: 'Sorter',
|
|
3548
|
+
showMore: {
|
|
3549
|
+
text: 'Vis mer',
|
|
3550
|
+
title: 'Vis flere resultater'
|
|
3551
|
+
},
|
|
3552
|
+
filterButton: {
|
|
3553
|
+
text: 'Filter',
|
|
3554
|
+
title: 'Vis filter'
|
|
3555
|
+
},
|
|
3556
|
+
sortButton: {
|
|
3557
|
+
text: 'Sorter',
|
|
3558
|
+
title: 'Velg sorteringsrekkefølge'
|
|
3559
|
+
},
|
|
3560
|
+
searchResult: 'Søkeresultat',
|
|
3561
|
+
snackbarNoSearchResults: {
|
|
3562
|
+
heading: 'Ingen resultater',
|
|
3563
|
+
body: 'Søket ga ingen resultater'
|
|
3564
|
+
},
|
|
3565
|
+
snackBarClearFreeText: {
|
|
3566
|
+
heading: 'Ingen resultater',
|
|
3567
|
+
body: 'Tøm friteksten for å se alle filtre'
|
|
3568
|
+
},
|
|
3569
|
+
sortOptions: {
|
|
3570
|
+
relevance: 'Relevans',
|
|
3571
|
+
publishedAsc: 'Publisert (eldste)',
|
|
3572
|
+
publishedDesc: 'Publisert (siste)',
|
|
3573
|
+
priceAsc: 'Pris (laveste)',
|
|
3574
|
+
priceDesc: 'Pris (maksimum)',
|
|
3575
|
+
modelAsc: 'Årsmodell (eldste)',
|
|
3576
|
+
modelDesc: 'Årsmodell (nyeste)',
|
|
3577
|
+
mileageAsc: 'Kilometerstand (lavest)',
|
|
3578
|
+
mileageDesc: 'Kilometerstand (maksimum)'
|
|
3579
|
+
},
|
|
3580
|
+
clearAllFilters: {
|
|
3581
|
+
text: 'Tøm alle filtre',
|
|
3582
|
+
title: 'Tøm alle filtre'
|
|
3583
|
+
},
|
|
3584
|
+
showNumberOfCustomUnit: 'Vis {{count}} {{unit}}',
|
|
3585
|
+
result: {
|
|
3586
|
+
singular: 'Bil',
|
|
3587
|
+
plural: 'Biler'
|
|
3588
|
+
},
|
|
3589
|
+
freeText: 'Gratis tekst',
|
|
3590
|
+
from: 'Fra',
|
|
3591
|
+
to: 'Til',
|
|
3592
|
+
min: 'Min',
|
|
3593
|
+
max: 'Max'
|
|
3594
|
+
},
|
|
3595
|
+
searchBar: {
|
|
3596
|
+
title: 'Søk',
|
|
3597
|
+
placeholder: 'Søk i bilen din',
|
|
3598
|
+
button: {
|
|
3599
|
+
text: 'Søk',
|
|
3600
|
+
title: 'Søk'
|
|
3601
|
+
},
|
|
3602
|
+
searchResults: 'Søkeresultater',
|
|
3603
|
+
showAllRsults: 'Vis alle biler'
|
|
3604
|
+
},
|
|
3605
|
+
other: {
|
|
3606
|
+
loading: 'Laster...',
|
|
3607
|
+
error404: '404',
|
|
3608
|
+
showingNumberOfResults_one: 'Viser {{current}} av {{count}} resultater',
|
|
3609
|
+
showingNumberOfResults_other: 'Viser {{current}} av {{count}} resultater',
|
|
3610
|
+
closeModal: 'Close Modal',
|
|
3611
|
+
closePanel: 'Lukk panel',
|
|
3612
|
+
goToHeading: 'Gå til {{heading}}',
|
|
3613
|
+
openDoumentt: 'Åpne {{dokument}}',
|
|
3614
|
+
previousImage: 'Forrige bilde',
|
|
3615
|
+
nextImage: 'Neste bilde',
|
|
3616
|
+
goToImageIndex: 'Gå til bilde {{indeks}}',
|
|
3617
|
+
phoneNumber: 'Phone Number',
|
|
3618
|
+
showPhoneNumber: 'Vis telefonnummer',
|
|
3619
|
+
callPhoneNumber: 'Ring {{phoneNumber}}',
|
|
3620
|
+
price: 'Pris',
|
|
3621
|
+
privateLeasingPrice: 'Privatleasing',
|
|
3622
|
+
video: 'Video',
|
|
3623
|
+
playVideo: 'Spill av video',
|
|
3624
|
+
searchResults: 'Søkeresultater',
|
|
3625
|
+
showAllCars: 'Vis alle biler'
|
|
3626
|
+
}
|
|
3627
|
+
}
|
|
3628
|
+
},
|
|
3629
|
+
'en-US': {
|
|
3630
|
+
translation: {
|
|
3631
|
+
navigation: {
|
|
3632
|
+
backToSearch: 'Back to car search'
|
|
3633
|
+
},
|
|
3634
|
+
filter: {
|
|
3635
|
+
manufacturer: 'Manufacturer',
|
|
3636
|
+
modelSeries: 'Model',
|
|
3637
|
+
fuelType: 'Fuel Type',
|
|
3638
|
+
gearboxType: 'Gearbox Type',
|
|
3639
|
+
branch: 'Branch',
|
|
3640
|
+
color: 'Color',
|
|
3641
|
+
environmentClass: 'Environmental Class',
|
|
3642
|
+
'properties.segment': 'Segment',
|
|
3643
|
+
drivingWheel: 'Driving Wheel',
|
|
3644
|
+
price: 'Price',
|
|
3645
|
+
mileage: 'Mileage',
|
|
3646
|
+
modelYear: 'Model Year',
|
|
3647
|
+
odometerValueAsKm: 'Meter setting',
|
|
3648
|
+
leasingPrice: 'Private leasing',
|
|
3649
|
+
businessLeasingPrice: 'Business leasing'
|
|
3650
|
+
},
|
|
3651
|
+
currency: {
|
|
3652
|
+
default: 'kr',
|
|
3653
|
+
monthly: 'kr/month'
|
|
3654
|
+
},
|
|
3655
|
+
category: {
|
|
3656
|
+
basic: 'Basic Information',
|
|
3657
|
+
engineAndPerformance: 'Engine & Performance'
|
|
3658
|
+
},
|
|
3659
|
+
subCategory: {
|
|
3660
|
+
engine: 'Engine'
|
|
3661
|
+
},
|
|
3662
|
+
customProperty: {
|
|
3663
|
+
manufacturer: {
|
|
3664
|
+
displayName: 'Brand',
|
|
3665
|
+
hint: ''
|
|
3666
|
+
},
|
|
3667
|
+
modelSeries: {
|
|
3668
|
+
displayName: 'Model',
|
|
3669
|
+
hint: ''
|
|
3670
|
+
},
|
|
3671
|
+
modelName: {
|
|
3672
|
+
displayName: 'Version',
|
|
3673
|
+
hint: 'Which version of the car model it is.'
|
|
3674
|
+
},
|
|
3675
|
+
modelYear: {
|
|
3676
|
+
displayName: 'Model year',
|
|
3677
|
+
hint: 'The model year is set by the manufacturer. Dealers sometimes change the model year to match the transport authority`s definition of the model year. The definition of the model year means that cars manufactured in the latter half of the year are given the next year`s model year.'
|
|
3678
|
+
},
|
|
3679
|
+
manufactureYear: {
|
|
3680
|
+
displayName: 'Manufacture year',
|
|
3681
|
+
hint: 'The year the car was manufactured.'
|
|
3682
|
+
},
|
|
3683
|
+
odometer: {
|
|
3684
|
+
displayName: 'Odometer reading',
|
|
3685
|
+
hint: ''
|
|
3686
|
+
},
|
|
3687
|
+
gearboxType: {
|
|
3688
|
+
displayName: 'Gearbox',
|
|
3689
|
+
hint: ''
|
|
3690
|
+
},
|
|
3691
|
+
registrationNumber: {
|
|
3692
|
+
displayName: 'Registration number',
|
|
3693
|
+
hint: ''
|
|
3694
|
+
},
|
|
3695
|
+
fuelType: {
|
|
3696
|
+
displayName: 'Fuel type',
|
|
3697
|
+
hint: 'What the car should be fueled with and powered by.'
|
|
3698
|
+
},
|
|
3699
|
+
enginePower: {
|
|
3700
|
+
displayName: 'Power',
|
|
3701
|
+
unit: 'hp'
|
|
3702
|
+
}
|
|
3703
|
+
},
|
|
3704
|
+
odometer: {
|
|
3705
|
+
Kilometer: 'km',
|
|
3706
|
+
ScandinavianMile: 'mil'
|
|
3707
|
+
},
|
|
3708
|
+
common: {
|
|
3709
|
+
yes: 'Yes',
|
|
3710
|
+
no: 'No',
|
|
3711
|
+
logotype: 'Logotype',
|
|
3712
|
+
close: 'Close',
|
|
3713
|
+
showMore: 'Show more',
|
|
3714
|
+
readMore: 'Read more',
|
|
3715
|
+
showMoreInformation: 'Show more information',
|
|
3716
|
+
showLessInformation: 'Show less information',
|
|
3717
|
+
choose: 'Choose',
|
|
3718
|
+
address: 'Address',
|
|
3719
|
+
mondayShort: 'Mon',
|
|
3720
|
+
tuesdayShort: 'Tues',
|
|
3721
|
+
wednesdayShort: 'Wednesday',
|
|
3722
|
+
thursdayShort: 'Thursday',
|
|
3723
|
+
fridayShort: 'Fri',
|
|
3724
|
+
saturdayShort: 'Sat',
|
|
3725
|
+
sundayShort: 'Sun',
|
|
3726
|
+
moreInformation: 'More information',
|
|
3727
|
+
lessInformation: 'Less information',
|
|
3728
|
+
anErrorHasOccured: 'An error has occurred',
|
|
3729
|
+
opensInNewTab: 'Opens in new tab',
|
|
3730
|
+
open: 'Open',
|
|
3731
|
+
imageIndex: 'Image {{index}}'
|
|
3732
|
+
},
|
|
3733
|
+
item: {
|
|
3734
|
+
relatedVehicles: 'Related Vehicles',
|
|
3735
|
+
latestVehicles: 'Latest received',
|
|
3736
|
+
readMoreInNewTab: 'Read more (opens in new tab)',
|
|
3737
|
+
moreInfoAboutSubject: 'More information about {{subject}}',
|
|
3738
|
+
dataNotAvailable: 'Data not available',
|
|
3739
|
+
showOnGoogleMaps: 'Show on Google Maps',
|
|
3740
|
+
googleMapsMapAlt: 'Map',
|
|
3741
|
+
googleMapsPlaceholderInit: 'Show Map',
|
|
3742
|
+
demoCar: 'Demo Car',
|
|
3743
|
+
demoCarDescription: 'A demo car is a car that has been on display or that has been used in some other way to show off a certain model. The cars are often well equipped and have been well looked after. Also, they usually have only a few miles on them and still have their new car warranties.',
|
|
3744
|
+
carData: 'Car Data',
|
|
3745
|
+
carDataDescription: 'Information directly from the Swedish Transport Agency and the manufacturer.',
|
|
3746
|
+
equipment: 'Equipment',
|
|
3747
|
+
equipmentDescription: 'Additional information about the car.',
|
|
3748
|
+
documents: 'Documents',
|
|
3749
|
+
documentTypes: {
|
|
3750
|
+
tireEnergyDeclaration: 'Energy declaration for tyres',
|
|
3751
|
+
goodsDeclaration: 'Goods declaration',
|
|
3752
|
+
other: 'Other documents'
|
|
3753
|
+
},
|
|
3754
|
+
carIsReserved: 'The car is reserved',
|
|
3755
|
+
carIsReservedDescription: 'This car is reserved by another buyer.',
|
|
3756
|
+
carIsReservedModalBody: 'This car is reserved by another buyer.',
|
|
3757
|
+
centralWarehouseCar: 'Central warehouse car',
|
|
3758
|
+
centralWarehouseCarDescription: 'This car belongs to a central warehouse and can be purchased through several facilities. Change facility to display contact information for that particular facility.',
|
|
3759
|
+
centralWarehouseCarDescriptionShort: 'This car belongs to a central warehouse and can be purchased through several facilities.',
|
|
3760
|
+
clickHereToShowContactToAnotherBranch: 'Click here to view contact details for another facility',
|
|
3761
|
+
switchBranch: 'Switch Branch',
|
|
3762
|
+
switchBranchDescription: 'Select the branch you want to display contact details for.',
|
|
3763
|
+
chooseBranch: 'Choose branch',
|
|
3764
|
+
chooseSelectedBranch: 'Choose selected branch',
|
|
3765
|
+
availableFromDate: 'Available from {{date}}',
|
|
3766
|
+
includingShort: 'Incl.',
|
|
3767
|
+
usedWarrany: 'Used Warranty',
|
|
3768
|
+
homeDelivery: 'Home delivery',
|
|
3769
|
+
thisCarsIsLocatedAt: 'This car is on',
|
|
3770
|
+
thisCarIsAvailableAtOurBranch: 'This car is available at our branch in {{location}}',
|
|
3771
|
+
contact: 'Contact',
|
|
3772
|
+
start360Exterior: 'Start 360° exterior',
|
|
3773
|
+
start360Interior: 'Start 360° interior',
|
|
3774
|
+
openingHoursToday: 'Opening hours today',
|
|
3775
|
+
closedToday: 'Closed today',
|
|
3776
|
+
open: 'Open',
|
|
3777
|
+
closed: 'Closed',
|
|
3778
|
+
addInsurance: 'Select insurance',
|
|
3779
|
+
getInsuranceQuote: 'Get Quote',
|
|
3780
|
+
insurance: 'Insurance',
|
|
3781
|
+
readMoreAboutInsuranceInNewTab: 'Read more about insurance (opens in new tab)',
|
|
3782
|
+
personalNumber: 'Personal number',
|
|
3783
|
+
estimatedAnnualMileage: 'Estimated mileage per year',
|
|
3784
|
+
showInsurances: 'Show insurances',
|
|
3785
|
+
savePersonalNumberOnThisDevice: 'Save personal number on this device',
|
|
3786
|
+
savePersonalNumberOnThisDeviceHelp: 'Save social security number on this computer to directly view the insurance costs in Wayke. The social security number is not stored at Wayke, but is only saved in your browser.',
|
|
3787
|
+
couldNotfetchInsurances: 'Could not fetch insurances. Please try again.',
|
|
3788
|
+
openPrePurchaseInformationInNewTab: 'Pre-Purchase Information and Terms (opens in new tab)',
|
|
3789
|
+
insuranceIncludes: 'The insurance includes',
|
|
3790
|
+
addInsuranceHeading: 'Add',
|
|
3791
|
+
financialOptions: {
|
|
3792
|
+
otherFinancialOptions: 'Other financing options',
|
|
3793
|
+
privateLease: 'PrivateLease',
|
|
3794
|
+
businessLease: 'Etagslease',
|
|
3795
|
+
monthlyCost: 'Monthly cost',
|
|
3796
|
+
bindingTime: 'Binding Time',
|
|
3797
|
+
annualMileage: 'Annual Mileage',
|
|
3798
|
+
payInInstallments: 'Pay In Installments',
|
|
3799
|
+
payInInstallmentsDetailed: 'Partially pay {{amount}} in {{duration}} months',
|
|
3800
|
+
disclaimer: 'Calculated at {{interest}} interest.',
|
|
3801
|
+
loanOptions: 'Loan Options',
|
|
3802
|
+
downPayment: 'Cash Deposit',
|
|
3803
|
+
duration: 'Instalment',
|
|
3804
|
+
residual: 'Residual debt',
|
|
3805
|
+
interest: 'Interest',
|
|
3806
|
+
effectiveinterest: 'Effective interest',
|
|
3807
|
+
setupFee: 'Setup cost',
|
|
3808
|
+
administrationFee: 'Administrative fees',
|
|
3809
|
+
totalCreditCost: 'Total Credit Cost',
|
|
3810
|
+
milagePerYear: 'mil/år',
|
|
3811
|
+
months: 'mnd',
|
|
3812
|
+
loanOptionsDisclaimer: 'Calculated at {{interest}} % interest (effective {{effectiveInterest}} %).',
|
|
3813
|
+
loanOptionsDisclaimerMileage: 'Calculated on {{interest}} % interest (effective {{effectiveInterest}} %) and an annual mileage of {{mileage}} miles.'
|
|
3814
|
+
},
|
|
3815
|
+
actions: {
|
|
3816
|
+
emailSubject: "{{hostName}} - I'm interested in {{vehicle}}",
|
|
3817
|
+
openform: 'Open form',
|
|
3818
|
+
buyOnline: 'Buy the car online',
|
|
3819
|
+
showEmail: 'Show email address',
|
|
3820
|
+
showPhoneNumber: 'Show phone number',
|
|
3821
|
+
callNumber: 'Call',
|
|
3822
|
+
sendEmailTo: 'Send an email to'
|
|
3823
|
+
},
|
|
3824
|
+
accessories: {
|
|
3825
|
+
accessories: 'Accessories',
|
|
3826
|
+
accessoriesDescription: 'Accessories suitable for this vehicle.',
|
|
3827
|
+
price: 'Cash price',
|
|
3828
|
+
oldPrice: 'Previous Price',
|
|
3829
|
+
installationCost: 'Installation cost',
|
|
3830
|
+
articleNumberShort: 'Art. no.',
|
|
3831
|
+
moreInformationAboutAccessory: 'More information about {{accessory}}'
|
|
3832
|
+
}
|
|
3833
|
+
},
|
|
3834
|
+
productCard: {
|
|
3835
|
+
price: 'Price',
|
|
3836
|
+
privateLeasing: 'Privatleasing'
|
|
3837
|
+
},
|
|
3838
|
+
search: {
|
|
3839
|
+
filter: 'Filter',
|
|
3840
|
+
sort: 'Sort',
|
|
3841
|
+
showMore: {
|
|
3842
|
+
text: 'Show more',
|
|
3843
|
+
title: 'Show more results'
|
|
3844
|
+
},
|
|
3845
|
+
filterButton: {
|
|
3846
|
+
text: 'Filter',
|
|
3847
|
+
title: 'Show filter'
|
|
3848
|
+
},
|
|
3849
|
+
sortButton: {
|
|
3850
|
+
text: 'Sort',
|
|
3851
|
+
title: 'Select sort order'
|
|
3852
|
+
},
|
|
3853
|
+
searchResult: 'Search Result',
|
|
3854
|
+
snackbarNoSearchResults: {
|
|
3855
|
+
heading: 'No results',
|
|
3856
|
+
body: 'The search returned no results'
|
|
3857
|
+
},
|
|
3858
|
+
snackBarClearFreeText: {
|
|
3859
|
+
heading: 'No results',
|
|
3860
|
+
body: 'Clear the free text to see all filters'
|
|
3861
|
+
},
|
|
3862
|
+
sortOptions: {
|
|
3863
|
+
relevance: 'Relevance',
|
|
3864
|
+
publishedAsc: 'Published (oldest)',
|
|
3865
|
+
publishedDesc: 'Published (latest)',
|
|
3866
|
+
priceAsc: 'Price (Lowest)',
|
|
3867
|
+
priceDesc: 'Price (Maximum)',
|
|
3868
|
+
modelAsc: 'Year model (oldest)',
|
|
3869
|
+
modelDesc: 'Year Model (Newest)',
|
|
3870
|
+
mileageAsc: 'Mileage (lowest)',
|
|
3871
|
+
mileageDesc: 'Mileage (maximum)'
|
|
3872
|
+
},
|
|
3873
|
+
clearAllFilters: {
|
|
3874
|
+
text: 'Clear all filters',
|
|
3875
|
+
title: 'Clear all filters'
|
|
3876
|
+
},
|
|
3877
|
+
showNumberOfCustomUnit: 'Show {{count}} {{unit}}',
|
|
3878
|
+
result: {
|
|
3879
|
+
singular: 'Car',
|
|
3880
|
+
plural: 'Cars'
|
|
3881
|
+
},
|
|
3882
|
+
freeText: 'Free text',
|
|
3883
|
+
from: 'From',
|
|
3884
|
+
to: 'To',
|
|
3885
|
+
min: 'Min',
|
|
3886
|
+
max: 'Max'
|
|
3887
|
+
},
|
|
3888
|
+
searchBar: {
|
|
3889
|
+
title: 'Search',
|
|
3890
|
+
placeholder: 'Search your car',
|
|
3891
|
+
button: {
|
|
3892
|
+
text: 'Search',
|
|
3893
|
+
title: 'Search'
|
|
3894
|
+
},
|
|
3895
|
+
searchResults: 'Search Results',
|
|
3896
|
+
showAllRsults: 'Show all cars'
|
|
3897
|
+
},
|
|
3898
|
+
other: {
|
|
3899
|
+
loading: 'Loading...',
|
|
3900
|
+
error404: '404',
|
|
3901
|
+
showingNumberOfResults_one: 'Showing {{current}} of {{count}} results',
|
|
3902
|
+
showingNumberOfResults_other: 'Showing {{current}} of {{count}} results',
|
|
3903
|
+
closeModal: 'Close Modal',
|
|
3904
|
+
closePanel: 'Close panel',
|
|
3905
|
+
goToHeading: 'Go to {{heading}}',
|
|
3906
|
+
openDoumentt: 'Open {{document}}',
|
|
3907
|
+
previousImage: 'Previous Image',
|
|
3908
|
+
nextImage: 'Next Image',
|
|
3909
|
+
goToImageIndex: 'Go to image {{index}}',
|
|
3910
|
+
phoneNumber: 'Phone Number',
|
|
3911
|
+
showPhoneNumber: 'Show phone number',
|
|
3912
|
+
callPhoneNumber: 'Call {{phoneNumber}}',
|
|
3913
|
+
price: 'Price',
|
|
3914
|
+
privateLeasingPrice: 'Private Leasing',
|
|
3915
|
+
video: 'Video',
|
|
3916
|
+
playVideo: 'Play video',
|
|
3917
|
+
searchResults: 'Search Results',
|
|
3918
|
+
showAllCars: 'Show all cars'
|
|
3919
|
+
}
|
|
3920
|
+
}
|
|
3921
|
+
}
|
|
3922
|
+
}
|
|
3923
|
+
}, () => {
|
|
3924
|
+
resolve(true);
|
|
3925
|
+
});
|
|
3926
|
+
});
|
|
3927
|
+
};
|
|
3928
|
+
|
|
3929
|
+
const useInitializeTranslation = marketCode => {
|
|
3930
|
+
const [initialized, setInitialized] = React.useState(() => !!i18next.isInitialized);
|
|
3931
|
+
const initialize = React.useCallback(async m => {
|
|
3932
|
+
await initializeI18n(m);
|
|
3933
|
+
setInitialized(true);
|
|
3934
|
+
}, []);
|
|
3935
|
+
React.useEffect(() => {
|
|
3936
|
+
if (!i18next.isInitialized) {
|
|
3937
|
+
initialize(marketCode);
|
|
3938
|
+
}
|
|
3939
|
+
}, []);
|
|
3940
|
+
return initialized;
|
|
3941
|
+
};
|
|
3942
|
+
|
|
2964
3943
|
const WaykeSearch = ({
|
|
3944
|
+
marketCode,
|
|
2965
3945
|
filterList,
|
|
2966
3946
|
initialQueryParams,
|
|
2967
3947
|
hashRoute,
|
|
@@ -2980,6 +3960,7 @@ const WaykeSearch = ({
|
|
|
2980
3960
|
onFilterUpdate,
|
|
2981
3961
|
onInitialize
|
|
2982
3962
|
} = useSearch();
|
|
3963
|
+
const initialized = useInitializeTranslation(marketCode);
|
|
2983
3964
|
React.useEffect(() => {
|
|
2984
3965
|
if (modifyDocumentTitleSearch) {
|
|
2985
3966
|
document.title = modifyDocumentTitleSearch;
|
|
@@ -2998,10 +3979,12 @@ const WaykeSearch = ({
|
|
|
2998
3979
|
onFilterUpdate(nextQuery.toString());
|
|
2999
3980
|
}, [queryFilter.searchParams]);
|
|
3000
3981
|
const searchQuery = React.useMemo(() => queryFilter.searchParams.get('query'), [documents]);
|
|
3982
|
+
if (!initialized) return null;
|
|
3001
3983
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(Page, null, !removeSearchBar && React__default.createElement(PageSection, null, React__default.createElement(Container, null, React__default.createElement(SearchFilter, null))), searchQuery && React__default.createElement(PageSection, null, React__default.createElement(Container, null, React__default.createElement(SearchTerm, {
|
|
3002
3984
|
onClear: onClearQuery
|
|
3003
3985
|
}, searchQuery))), !removeFilterOptions && React__default.createElement(PageSection, null, React__default.createElement(Container, null, React__default.createElement(Filter, {
|
|
3004
|
-
filterList: filterList
|
|
3986
|
+
filterList: filterList,
|
|
3987
|
+
marketCode: marketCode
|
|
3005
3988
|
}))), React__default.createElement(PageSection, {
|
|
3006
3989
|
accent: true,
|
|
3007
3990
|
fillSpace: true,
|
|
@@ -3020,8 +4003,8 @@ const WaykeSearch = ({
|
|
|
3020
4003
|
}), !error && documents && documents.length === 0 && React__default.createElement(Snackbar, {
|
|
3021
4004
|
severity: "warning",
|
|
3022
4005
|
icon: true,
|
|
3023
|
-
heading:
|
|
3024
|
-
},
|
|
4006
|
+
heading: i18next.t('search.snackbarNoSearchResults.heading') || undefined
|
|
4007
|
+
}, i18next.t('search.snackbarNoSearchResults.body'))))))), React__default.createElement(PortalElement, {
|
|
3025
4008
|
id: DefaultPortal
|
|
3026
4009
|
}));
|
|
3027
4010
|
};
|
|
@@ -3060,7 +4043,12 @@ const OldPrice$1 = styled__default.div`
|
|
|
3060
4043
|
const PriceTable = ({
|
|
3061
4044
|
price,
|
|
3062
4045
|
discount
|
|
3063
|
-
}) =>
|
|
4046
|
+
}) => {
|
|
4047
|
+
const {
|
|
4048
|
+
t
|
|
4049
|
+
} = reactI18next.useTranslation();
|
|
4050
|
+
return React__default.createElement(List$6, null, React__default.createElement(Item$6, null, React__default.createElement(Label$5, null, React__default.createElement(VisualHeading, null, t('other.price'))), React__default.createElement(Value, null, React__default.createElement(Price$1, null, numberSeparator(price), " ", t('currency.default')))), discount !== undefined && React__default.createElement(Item$6, null, React__default.createElement(Label$5, null), React__default.createElement(Value, null, React__default.createElement(OldPrice$1, null, numberSeparator(price + discount), " ", t('currency.default')))));
|
|
4051
|
+
};
|
|
3064
4052
|
|
|
3065
4053
|
const Logo = styled__default.img`
|
|
3066
4054
|
display: block;
|
|
@@ -4040,36 +5028,8 @@ const Wrapper$j = styled__default.div`
|
|
|
4040
5028
|
}
|
|
4041
5029
|
`;
|
|
4042
5030
|
|
|
4043
|
-
|
|
4044
|
-
const
|
|
4045
|
-
type: 'equirectangular',
|
|
4046
|
-
autoRotate: -2,
|
|
4047
|
-
autoLoad: true,
|
|
4048
|
-
uiText: {
|
|
4049
|
-
bylineLabel: 'by %s',
|
|
4050
|
-
noPanoramaError: 'No panorama image was specified.',
|
|
4051
|
-
fileAccessError: 'The file %s could not be accessed.',
|
|
4052
|
-
malformedURLError: 'There is something wrong with the panorama URL.',
|
|
4053
|
-
iOS8WebGLError: "Due to iOS 8's broken WebGL implementation, only progressive encoded JPEGs work for your device (this panorama uses standard encoding).",
|
|
4054
|
-
genericWebGLError: 'Your browser does not have the necessary WebGL support to display this panorama.',
|
|
4055
|
-
textureSizeError: "This panorama is too big for your device! It's %spx wide, but your device only supports images up to %spx wide. Try another device. (If you're the author, try scaling down the image.)",
|
|
4056
|
-
unknownError: 'Unknown error. Check developer console.',
|
|
4057
|
-
loadButtonLabel: 'Starta 360° interiört',
|
|
4058
|
-
loadingLabel: 'Laddar...'
|
|
4059
|
-
},
|
|
4060
|
-
preview: '/images/placeholders/placeholder_product_card.jpg',
|
|
4061
|
-
compass: true,
|
|
4062
|
-
showZoomCtrl: true,
|
|
4063
|
-
keyboardZoom: false,
|
|
4064
|
-
mouseZoom: false,
|
|
4065
|
-
hfov: 180
|
|
4066
|
-
};
|
|
4067
|
-
const style = {
|
|
4068
|
-
height: 0,
|
|
4069
|
-
width: '100%',
|
|
4070
|
-
paddingBottom: '66.666%',
|
|
4071
|
-
touchAction: 'manipulation'
|
|
4072
|
-
};
|
|
5031
|
+
// Skip loading pannellum with video
|
|
5032
|
+
const Pannellum = React.lazy(() => Promise.resolve().then(() => require('@wayke-se/pannellum-react')));
|
|
4073
5033
|
const SphereViewer = ({
|
|
4074
5034
|
id,
|
|
4075
5035
|
src,
|
|
@@ -4086,18 +5046,16 @@ const SphereViewer = ({
|
|
|
4086
5046
|
}
|
|
4087
5047
|
}, 100);
|
|
4088
5048
|
}, []);
|
|
4089
|
-
|
|
4090
|
-
preview,
|
|
4091
|
-
autoLoad
|
|
4092
|
-
});
|
|
4093
|
-
return React__default.createElement(Wrapper$j, null, React__default.createElement(React__default.Suspense, {
|
|
5049
|
+
return React__default.createElement(Wrapper$j, null, React__default.createElement(React.Suspense, {
|
|
4094
5050
|
fallback: React__default.createElement(Loader, null)
|
|
4095
|
-
}, React__default.createElement(
|
|
5051
|
+
}, React__default.createElement(Pannellum, {
|
|
4096
5052
|
id: `a-${id}-${number}`,
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
5053
|
+
panorama: src,
|
|
5054
|
+
hfov: 120,
|
|
5055
|
+
autoLoad: autoLoad,
|
|
5056
|
+
compass: true,
|
|
5057
|
+
width: '100%',
|
|
5058
|
+
preview: preview
|
|
4101
5059
|
})));
|
|
4102
5060
|
};
|
|
4103
5061
|
|
|
@@ -4235,6 +5193,9 @@ const Rotation = ({
|
|
|
4235
5193
|
const ThreeSixtyLightbox = ({
|
|
4236
5194
|
urls
|
|
4237
5195
|
}) => {
|
|
5196
|
+
const {
|
|
5197
|
+
t
|
|
5198
|
+
} = reactI18next.useTranslation();
|
|
4238
5199
|
const [started, setStarted] = React.useState(false);
|
|
4239
5200
|
const onStart = React.useCallback(() => setStarted(true), []);
|
|
4240
5201
|
if (!started) {
|
|
@@ -4242,14 +5203,16 @@ const ThreeSixtyLightbox = ({
|
|
|
4242
5203
|
src: urls[0],
|
|
4243
5204
|
alt: "alt"
|
|
4244
5205
|
}), React__default.createElement(MediaButton, {
|
|
4245
|
-
text:
|
|
5206
|
+
text: t('item.start360Exterior'),
|
|
4246
5207
|
onClick: onStart
|
|
4247
5208
|
}));
|
|
4248
5209
|
}
|
|
4249
5210
|
return React__default.createElement(Rotation, null, urls.map((image, i) => React__default.createElement(Img$1, {
|
|
4250
5211
|
key: image,
|
|
4251
5212
|
src: image,
|
|
4252
|
-
alt:
|
|
5213
|
+
alt: t('common.imageIndex', {
|
|
5214
|
+
index: i + 1
|
|
5215
|
+
}) || ''
|
|
4253
5216
|
})));
|
|
4254
5217
|
};
|
|
4255
5218
|
|
|
@@ -4258,6 +5221,9 @@ const Lightbox = ({
|
|
|
4258
5221
|
media,
|
|
4259
5222
|
onClose
|
|
4260
5223
|
}) => {
|
|
5224
|
+
const {
|
|
5225
|
+
t
|
|
5226
|
+
} = reactI18next.useTranslation();
|
|
4261
5227
|
const onRef = ref => {
|
|
4262
5228
|
if (ref) {
|
|
4263
5229
|
setTimeout(() => {
|
|
@@ -4283,7 +5249,9 @@ const Lightbox = ({
|
|
|
4283
5249
|
}, m.type === 'image' && React__default.createElement(Img$1, {
|
|
4284
5250
|
id: `lightbox-image-${i}`,
|
|
4285
5251
|
src: m.files[0].url,
|
|
4286
|
-
alt:
|
|
5252
|
+
alt: t('common.imageIndex', {
|
|
5253
|
+
index: i + 1
|
|
5254
|
+
}) || ''
|
|
4287
5255
|
}), m.type === 'threesixty' && React__default.createElement(ThreeSixtyLightbox, {
|
|
4288
5256
|
urls: m.files.map(x => x.url)
|
|
4289
5257
|
}), m.type === 'sphere' && React__default.createElement(SphereLightbox, {
|
|
@@ -4292,7 +5260,7 @@ const Lightbox = ({
|
|
|
4292
5260
|
url: m.files[0].url
|
|
4293
5261
|
}))), React__default.createElement(CloseBtn$1, {
|
|
4294
5262
|
onClick: onClose,
|
|
4295
|
-
title:
|
|
5263
|
+
title: t('common.close') || ''
|
|
4296
5264
|
}, React__default.createElement(IconCancel, {
|
|
4297
5265
|
block: true
|
|
4298
5266
|
})));
|
|
@@ -4515,18 +5483,21 @@ const Modal = ({
|
|
|
4515
5483
|
onClose,
|
|
4516
5484
|
children
|
|
4517
5485
|
}) => {
|
|
5486
|
+
const {
|
|
5487
|
+
t
|
|
5488
|
+
} = reactI18next.useTranslation();
|
|
4518
5489
|
return React.createElement(Portal$1, {
|
|
4519
5490
|
id: id || DefaultPortal
|
|
4520
5491
|
}, React.createElement(Wrapper$k, {
|
|
4521
5492
|
onClick: e => e.stopPropagation()
|
|
4522
5493
|
}, React.createElement(UiBlock$2, {
|
|
4523
5494
|
onClick: onClose,
|
|
4524
|
-
title:
|
|
5495
|
+
title: t('other.closeModal') || ''
|
|
4525
5496
|
}), React.createElement(Dialog, null, React.createElement(Content$3, null, React.createElement(Header$3, null, React.createElement(Heading$4, null, React.createElement(H1, {
|
|
4526
5497
|
noMargin: true
|
|
4527
5498
|
}, title)), React.createElement(Close$1, null, React.createElement(CloseBtn$2, {
|
|
4528
5499
|
onClick: onClose,
|
|
4529
|
-
title:
|
|
5500
|
+
title: t('other.closeModal') || ''
|
|
4530
5501
|
}, React.createElement(IconCancel, {
|
|
4531
5502
|
block: true
|
|
4532
5503
|
})))), React.createElement(Body$3, null, children)))));
|
|
@@ -4536,6 +5507,9 @@ const GalleryEmbed = ({
|
|
|
4536
5507
|
src,
|
|
4537
5508
|
index
|
|
4538
5509
|
}) => {
|
|
5510
|
+
const {
|
|
5511
|
+
t
|
|
5512
|
+
} = reactI18next.useTranslation();
|
|
4539
5513
|
const [modal, setModal] = React.useState();
|
|
4540
5514
|
const thumbnail = useThumbnail(src);
|
|
4541
5515
|
const onClick = e => {
|
|
@@ -4554,12 +5528,14 @@ const GalleryEmbed = ({
|
|
|
4554
5528
|
onLoad: onLoad,
|
|
4555
5529
|
src: thumbnail[0],
|
|
4556
5530
|
onError: onError,
|
|
4557
|
-
alt:
|
|
5531
|
+
alt: t('common.imageIndex', {
|
|
5532
|
+
index: index + 1
|
|
5533
|
+
}) || ''
|
|
4558
5534
|
}), React__default.createElement(MediaButton, {
|
|
4559
|
-
text:
|
|
5535
|
+
text: t('other.playVideo'),
|
|
4560
5536
|
onClick: onClick
|
|
4561
5537
|
}), modal && React__default.createElement(Modal, {
|
|
4562
|
-
title:
|
|
5538
|
+
title: t('other.video'),
|
|
4563
5539
|
onClose: onCloseModal
|
|
4564
5540
|
}, React__default.createElement(VideoPlayer, {
|
|
4565
5541
|
url: modal
|
|
@@ -4571,10 +5547,10 @@ const GalleryEmbed = ({
|
|
|
4571
5547
|
controls: false,
|
|
4572
5548
|
url: src
|
|
4573
5549
|
}), React__default.createElement(MediaButton, {
|
|
4574
|
-
text:
|
|
5550
|
+
text: t('other.playVideo'),
|
|
4575
5551
|
onClick: onClick
|
|
4576
5552
|
}), modal && React__default.createElement(Modal, {
|
|
4577
|
-
title:
|
|
5553
|
+
title: t('other.video'),
|
|
4578
5554
|
onClose: onCloseModal
|
|
4579
5555
|
}, React__default.createElement(VideoPlayer, {
|
|
4580
5556
|
url: modal
|
|
@@ -4586,6 +5562,9 @@ const QuickNavEmbeded = ({
|
|
|
4586
5562
|
src,
|
|
4587
5563
|
index
|
|
4588
5564
|
}) => {
|
|
5565
|
+
const {
|
|
5566
|
+
t
|
|
5567
|
+
} = reactI18next.useTranslation();
|
|
4589
5568
|
const thumbnail = useThumbnail(src);
|
|
4590
5569
|
const onError = React.useCallback(e => onImageError(e, thumbnail), [thumbnail]);
|
|
4591
5570
|
const onLoad = React.useCallback(e => onImageLoad(e, thumbnail), [thumbnail]);
|
|
@@ -4594,7 +5573,9 @@ const QuickNavEmbeded = ({
|
|
|
4594
5573
|
onLoad: onLoad,
|
|
4595
5574
|
src: thumbnail[0],
|
|
4596
5575
|
onError: onError,
|
|
4597
|
-
alt:
|
|
5576
|
+
alt: t('common.imageIndex', {
|
|
5577
|
+
index: index + 1
|
|
5578
|
+
}) || ''
|
|
4598
5579
|
});
|
|
4599
5580
|
if (customVideo) return React__default.createElement(CustomPlayer, {
|
|
4600
5581
|
key: index,
|
|
@@ -4616,12 +5597,15 @@ const Sphere = ({
|
|
|
4616
5597
|
onDisableNavigation,
|
|
4617
5598
|
navigationDisabled
|
|
4618
5599
|
}) => {
|
|
5600
|
+
const {
|
|
5601
|
+
t
|
|
5602
|
+
} = reactI18next.useTranslation();
|
|
4619
5603
|
if (!visible || !navigationDisabled && visible) {
|
|
4620
5604
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(ImageFull, {
|
|
4621
5605
|
src: preview,
|
|
4622
5606
|
alt: "alt"
|
|
4623
5607
|
}), React__default.createElement(MediaButton, {
|
|
4624
|
-
text:
|
|
5608
|
+
text: t('item.start360Interior'),
|
|
4625
5609
|
onClick: e => onMediaClick(e, onDisableNavigation)
|
|
4626
5610
|
}));
|
|
4627
5611
|
}
|
|
@@ -4648,12 +5632,15 @@ const ThreeSixty = ({
|
|
|
4648
5632
|
onDisableNavigation,
|
|
4649
5633
|
navigationDisabled
|
|
4650
5634
|
}) => {
|
|
5635
|
+
const {
|
|
5636
|
+
t
|
|
5637
|
+
} = reactI18next.useTranslation();
|
|
4651
5638
|
if (!visible || !navigationDisabled && visible) {
|
|
4652
5639
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(Image$1, {
|
|
4653
5640
|
src: urls[0],
|
|
4654
5641
|
alt: "alt"
|
|
4655
5642
|
}), React__default.createElement(MediaButton, {
|
|
4656
|
-
text:
|
|
5643
|
+
text: t('item.start360Exterior'),
|
|
4657
5644
|
onClick: e => onMediaClick$1(e, onDisableNavigation)
|
|
4658
5645
|
}));
|
|
4659
5646
|
}
|
|
@@ -4666,7 +5653,9 @@ const ThreeSixty = ({
|
|
|
4666
5653
|
}, React__default.createElement(Rotation, null, urls.map((image, i) => React__default.createElement(Image$1, {
|
|
4667
5654
|
key: image,
|
|
4668
5655
|
src: image,
|
|
4669
|
-
alt:
|
|
5656
|
+
alt: t('common.imageIndex', {
|
|
5657
|
+
index: i + 1
|
|
5658
|
+
}) || ''
|
|
4670
5659
|
}))));
|
|
4671
5660
|
}
|
|
4672
5661
|
return null;
|
|
@@ -4684,6 +5673,9 @@ const Gallery = ({
|
|
|
4684
5673
|
media,
|
|
4685
5674
|
placeholderImage
|
|
4686
5675
|
}) => {
|
|
5676
|
+
const {
|
|
5677
|
+
t
|
|
5678
|
+
} = reactI18next.useTranslation();
|
|
4687
5679
|
const slider = React.useRef(null);
|
|
4688
5680
|
const quickNavRef = React.useRef(null);
|
|
4689
5681
|
const isDragging = React.useRef(false);
|
|
@@ -4691,8 +5683,8 @@ const Gallery = ({
|
|
|
4691
5683
|
const [lightbox, setLightbox] = React.useState(false);
|
|
4692
5684
|
const [navigationDisabled, setNavigationDisabled] = React.useState(false);
|
|
4693
5685
|
const beforeChange = React.useCallback((_, newIndex) => {
|
|
4694
|
-
var _quickNavRef$current
|
|
4695
|
-
const element = (_quickNavRef$current = quickNavRef.current) === null || _quickNavRef$current === void 0
|
|
5686
|
+
var _quickNavRef$current;
|
|
5687
|
+
const element = (_quickNavRef$current = quickNavRef.current) === null || _quickNavRef$current === void 0 || (_quickNavRef$current = _quickNavRef$current.querySelectorAll('li')) === null || _quickNavRef$current === void 0 ? void 0 : _quickNavRef$current[newIndex];
|
|
4696
5688
|
if (element) {
|
|
4697
5689
|
scrollIntoView(element, {
|
|
4698
5690
|
scrollMode: 'if-needed',
|
|
@@ -4766,7 +5758,9 @@ const Gallery = ({
|
|
|
4766
5758
|
key: m.files[0].url || i
|
|
4767
5759
|
}, m.type === 'image' && React__default.createElement(Image$1, {
|
|
4768
5760
|
src: (_m$files$0$formats$fi = m.files[0].formats.filter(notEmpty).find(x => x.format === '1170x')) === null || _m$files$0$formats$fi === void 0 ? void 0 : _m$files$0$formats$fi.url,
|
|
4769
|
-
alt:
|
|
5761
|
+
alt: t('common.imageIndex', {
|
|
5762
|
+
index: i + 1
|
|
5763
|
+
}) || ''
|
|
4770
5764
|
}), m.type === 'threesixty' && React__default.createElement(ThreeSixty, {
|
|
4771
5765
|
urls: m.files.map(x => x.url),
|
|
4772
5766
|
visible: i === index,
|
|
@@ -4786,18 +5780,20 @@ const Gallery = ({
|
|
|
4786
5780
|
key: placeholder
|
|
4787
5781
|
}, React__default.createElement(Image$1, {
|
|
4788
5782
|
src: placeholder,
|
|
4789
|
-
alt:
|
|
5783
|
+
alt: t('common.imageIndex', {
|
|
5784
|
+
index: 1
|
|
5785
|
+
}) || ''
|
|
4790
5786
|
}))), navigationDisabled && mediaLength > 1 && React__default.createElement(EnableNavigationButton, null, React__default.createElement(ButtonSecondary, {
|
|
4791
5787
|
onClick: onEnableNavigation,
|
|
4792
|
-
title:
|
|
4793
|
-
}, React__default.createElement(ButtonContent, null,
|
|
5788
|
+
title: t('common.close') || ''
|
|
5789
|
+
}, React__default.createElement(ButtonContent, null, t('common.close'))))), !navigationDisabled && mediaLength > 1 && React__default.createElement(React__default.Fragment, null, React__default.createElement(ArrowLeft, null, React__default.createElement(NavButton, {
|
|
4794
5790
|
onClick: prevImage,
|
|
4795
|
-
title:
|
|
5791
|
+
title: t('other.previousImage') || ''
|
|
4796
5792
|
}, React__default.createElement(IconChevronLeft, {
|
|
4797
5793
|
block: true
|
|
4798
5794
|
}))), React__default.createElement(ArrowRight, null, React__default.createElement(NavButton, {
|
|
4799
5795
|
onClick: nextImage,
|
|
4800
|
-
title:
|
|
5796
|
+
title: t('other.nextImage') || ''
|
|
4801
5797
|
}, React__default.createElement(IconChevronRight, {
|
|
4802
5798
|
block: true
|
|
4803
5799
|
}))))), React__default.createElement(Alt, null, React__default.createElement(QuickNav, {
|
|
@@ -4810,29 +5806,41 @@ const Gallery = ({
|
|
|
4810
5806
|
active: index === i
|
|
4811
5807
|
}, React__default.createElement(QuickNavBtn, {
|
|
4812
5808
|
onClick: () => goTo(i),
|
|
4813
|
-
title:
|
|
5809
|
+
title: t('other.goToImageIndex', {
|
|
5810
|
+
index: i + 1
|
|
5811
|
+
}) || ''
|
|
4814
5812
|
}, m.type === 'image' && React__default.createElement(QuickNavImg, {
|
|
4815
5813
|
src: src,
|
|
4816
|
-
alt:
|
|
5814
|
+
alt: t('common.imageIndex', {
|
|
5815
|
+
index: i + 1
|
|
5816
|
+
}) || ''
|
|
4817
5817
|
}), m.type === 'threesixty' && React__default.createElement(QuickNavImg, {
|
|
4818
5818
|
src: src,
|
|
4819
|
-
alt:
|
|
5819
|
+
alt: t('common.imageIndex', {
|
|
5820
|
+
index: i + 1
|
|
5821
|
+
}) || ''
|
|
4820
5822
|
}), m.type === 'embedded' && React__default.createElement(QuickNavEmbeded, {
|
|
4821
5823
|
src: src,
|
|
4822
5824
|
index: i
|
|
4823
5825
|
}), m.type === 'sphere' && React__default.createElement(QuickNavImg, {
|
|
4824
5826
|
src: m.files[0].url,
|
|
4825
|
-
alt:
|
|
5827
|
+
alt: t('common.imageIndex', {
|
|
5828
|
+
index: i + 1
|
|
5829
|
+
}) || ''
|
|
4826
5830
|
})));
|
|
4827
5831
|
}) : React__default.createElement(QuickNavItem, {
|
|
4828
5832
|
key: placeholder,
|
|
4829
5833
|
active: true
|
|
4830
5834
|
}, React__default.createElement(QuickNavBtn, {
|
|
4831
5835
|
onClick: () => goTo(0),
|
|
4832
|
-
title:
|
|
5836
|
+
title: t('other.goToImageIndex', {
|
|
5837
|
+
index: 1
|
|
5838
|
+
}) || ''
|
|
4833
5839
|
}, React__default.createElement(QuickNavImg, {
|
|
4834
5840
|
src: placeholder,
|
|
4835
|
-
alt:
|
|
5841
|
+
alt: t('common.imageIndex', {
|
|
5842
|
+
index: 1
|
|
5843
|
+
}) || ''
|
|
4836
5844
|
})))))), lightbox && !!(media !== null && media !== void 0 && media.length) && React__default.createElement(Lightbox, {
|
|
4837
5845
|
media: media,
|
|
4838
5846
|
index: index,
|
|
@@ -5082,6 +6090,10 @@ const SEARCH_ITEM_QUERY = client.gql`
|
|
|
5082
6090
|
manufactureYear
|
|
5083
6091
|
manufacturer
|
|
5084
6092
|
mileage
|
|
6093
|
+
odometerReading {
|
|
6094
|
+
value
|
|
6095
|
+
unit
|
|
6096
|
+
}
|
|
5085
6097
|
modelName
|
|
5086
6098
|
modelSeries
|
|
5087
6099
|
modelYear
|
|
@@ -5276,6 +6288,9 @@ const DataList = ({
|
|
|
5276
6288
|
const Leasing = ({
|
|
5277
6289
|
financialOption
|
|
5278
6290
|
}) => {
|
|
6291
|
+
const {
|
|
6292
|
+
t
|
|
6293
|
+
} = reactI18next.useTranslation();
|
|
5279
6294
|
const [modal, setModal] = React.useState(false);
|
|
5280
6295
|
const toggleModal = React.useCallback(() => setModal(!modal), [modal]);
|
|
5281
6296
|
const {
|
|
@@ -5287,7 +6302,7 @@ const Leasing = ({
|
|
|
5287
6302
|
type,
|
|
5288
6303
|
name
|
|
5289
6304
|
} = financialOption;
|
|
5290
|
-
const title = type === 'leasing' ? '
|
|
6305
|
+
const title = type === 'leasing' ? t('item.financialOptions.privateLease') : type === 'business-leasing' ? t('item.financialOptions.businessLease') : type;
|
|
5291
6306
|
return React__default.createElement(React__default.Fragment, null, modal && React__default.createElement(Modal, {
|
|
5292
6307
|
title: title,
|
|
5293
6308
|
onClose: toggleModal
|
|
@@ -5300,18 +6315,18 @@ const Leasing = ({
|
|
|
5300
6315
|
}
|
|
5301
6316
|
}), React__default.createElement(ModalFoldout, null, React__default.createElement(ModalFoldoutBody, null, React__default.createElement(DataList, {
|
|
5302
6317
|
items: [{
|
|
5303
|
-
label: '
|
|
5304
|
-
value: `${numberSeparator(monthlyCost || 0)}
|
|
6318
|
+
label: t('item.financialOptions.monthlyCost'),
|
|
6319
|
+
value: `${numberSeparator(monthlyCost || 0)} ${t('currency.monthly')}`
|
|
5305
6320
|
}, {
|
|
5306
|
-
label: '
|
|
6321
|
+
label: t('item.financialOptions.bindingTime'),
|
|
5307
6322
|
value: `${duration === null || duration === void 0 ? void 0 : duration.current} månader`
|
|
5308
6323
|
}, {
|
|
5309
|
-
label: '
|
|
5310
|
-
value: `${numberSeparator((mileage === null || mileage === void 0 ? void 0 : mileage.current) || 0)}
|
|
6324
|
+
label: t('item.financialOptions.annualMileage'),
|
|
6325
|
+
value: `${numberSeparator((mileage === null || mileage === void 0 ? void 0 : mileage.current) || 0)} ${t('item.financialOptions.mileagePeryear')}`
|
|
5311
6326
|
}]
|
|
5312
|
-
})))), React__default.createElement(OptionBox, null, React__default.createElement(React__default.Fragment, null, monthlyCost !== null && monthlyCost !== undefined && React__default.createElement(OptionBoxHeading, null, `ca ${numberSeparator(monthlyCost)}
|
|
6327
|
+
})))), React__default.createElement(OptionBox, null, React__default.createElement(React__default.Fragment, null, monthlyCost !== null && monthlyCost !== undefined && React__default.createElement(OptionBoxHeading, null, `ca ${numberSeparator(monthlyCost)} ${t('currency.monthly')}`)), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, title, ' ', (mileage === null || mileage === void 0 ? void 0 : mileage.current) && (duration === null || duration === void 0 ? void 0 : duration.current) && React__default.createElement(React__default.Fragment, null, React__default.createElement(UtilityTextPrimary, null, numberSeparator(mileage === null || mileage === void 0 ? void 0 : mileage.current), " ", t('item.financialOptions.mileagePeryear')), ' ', "i", ' ', React__default.createElement(UtilityTextPrimary, null, duration === null || duration === void 0 ? void 0 : duration.current, " ", t('item.financialOptions.months')), ".", ' ')), name && React__default.createElement("p", null, React__default.createElement(ButtonInline, {
|
|
5313
6328
|
onClick: toggleModal
|
|
5314
|
-
},
|
|
6329
|
+
}, t('common.readMore'))))));
|
|
5315
6330
|
};
|
|
5316
6331
|
|
|
5317
6332
|
const FinancialOptionDetail$1 = client.gql`
|
|
@@ -5520,6 +6535,9 @@ const LoanModal = ({
|
|
|
5520
6535
|
onClose
|
|
5521
6536
|
}) => {
|
|
5522
6537
|
var _financialOption$dura, _financialOption$down, _financialOption$resi, _loan$downPayment, _loan$downPayment2, _loan$downPayment3, _loan$downPayment4, _loan$duration, _loan$duration2, _loan$duration3, _loan$duration4, _loan$residual, _loan$residual2, _loan$residual3, _loan$residual4;
|
|
6538
|
+
const {
|
|
6539
|
+
t
|
|
6540
|
+
} = reactI18next.useTranslation();
|
|
5523
6541
|
const [tmp, setTmp] = React.useState();
|
|
5524
6542
|
const [extend, setExtend] = React__default.useState(false);
|
|
5525
6543
|
const onToggleExtend = React__default.useCallback(() => {
|
|
@@ -5544,20 +6562,20 @@ const LoanModal = ({
|
|
|
5544
6562
|
} = useLoanCalculation(id, duration, downPayment, residual);
|
|
5545
6563
|
React.useEffect(() => {
|
|
5546
6564
|
if (data) {
|
|
5547
|
-
var _data$loan, _data$
|
|
6565
|
+
var _data$loan, _data$loan2, _data$loan3;
|
|
5548
6566
|
setTmp(data);
|
|
5549
6567
|
setVariables({
|
|
5550
|
-
duration: (data === null || data === void 0
|
|
5551
|
-
downPayment: (data === null || data === void 0
|
|
5552
|
-
residual: (data === null || data === void 0
|
|
6568
|
+
duration: (data === null || data === void 0 || (_data$loan = data.loan) === null || _data$loan === void 0 || (_data$loan = _data$loan.duration) === null || _data$loan === void 0 ? void 0 : _data$loan.current) || 0,
|
|
6569
|
+
downPayment: (data === null || data === void 0 || (_data$loan2 = data.loan) === null || _data$loan2 === void 0 || (_data$loan2 = _data$loan2.downPayment) === null || _data$loan2 === void 0 ? void 0 : _data$loan2.current) || 0,
|
|
6570
|
+
residual: (data === null || data === void 0 || (_data$loan3 = data.loan) === null || _data$loan3 === void 0 || (_data$loan3 = _data$loan3.residual) === null || _data$loan3 === void 0 ? void 0 : _data$loan3.current) || 0
|
|
5553
6571
|
});
|
|
5554
6572
|
}
|
|
5555
6573
|
}, [data]);
|
|
5556
6574
|
const loan = (data === null || data === void 0 ? void 0 : data.loan) || (tmp === null || tmp === void 0 ? void 0 : tmp.loan);
|
|
5557
|
-
const downPaymentCurrent = (loan === null || loan === void 0
|
|
5558
|
-
const downPaymentMin = (loan === null || loan === void 0
|
|
5559
|
-
const downPaymentMax = (loan === null || loan === void 0
|
|
5560
|
-
const downPaymentStep = (loan === null || loan === void 0
|
|
6575
|
+
const downPaymentCurrent = (loan === null || loan === void 0 || (_loan$downPayment = loan.downPayment) === null || _loan$downPayment === void 0 ? void 0 : _loan$downPayment.current) || 0;
|
|
6576
|
+
const downPaymentMin = (loan === null || loan === void 0 || (_loan$downPayment2 = loan.downPayment) === null || _loan$downPayment2 === void 0 ? void 0 : _loan$downPayment2.min) || 0;
|
|
6577
|
+
const downPaymentMax = (loan === null || loan === void 0 || (_loan$downPayment3 = loan.downPayment) === null || _loan$downPayment3 === void 0 ? void 0 : _loan$downPayment3.max) || 0;
|
|
6578
|
+
const downPaymentStep = (loan === null || loan === void 0 || (_loan$downPayment4 = loan.downPayment) === null || _loan$downPayment4 === void 0 ? void 0 : _loan$downPayment4.step) || 0;
|
|
5561
6579
|
const downPaymentSteps = stepGenerator(downPaymentStep, downPaymentMax);
|
|
5562
6580
|
const onDownPaymentChange = React.useCallback(values => {
|
|
5563
6581
|
PubSub.publish('FinanceInterest');
|
|
@@ -5565,10 +6583,10 @@ const LoanModal = ({
|
|
|
5565
6583
|
downPayment: values[0]
|
|
5566
6584
|
}));
|
|
5567
6585
|
}, [variables]);
|
|
5568
|
-
const durationCurrent = (loan === null || loan === void 0
|
|
5569
|
-
const durationMin = (loan === null || loan === void 0
|
|
5570
|
-
const durationMax = (loan === null || loan === void 0
|
|
5571
|
-
const durationStep = (loan === null || loan === void 0
|
|
6586
|
+
const durationCurrent = (loan === null || loan === void 0 || (_loan$duration = loan.duration) === null || _loan$duration === void 0 ? void 0 : _loan$duration.current) || 0;
|
|
6587
|
+
const durationMin = (loan === null || loan === void 0 || (_loan$duration2 = loan.duration) === null || _loan$duration2 === void 0 ? void 0 : _loan$duration2.min) || 0;
|
|
6588
|
+
const durationMax = (loan === null || loan === void 0 || (_loan$duration3 = loan.duration) === null || _loan$duration3 === void 0 ? void 0 : _loan$duration3.max) || 0;
|
|
6589
|
+
const durationStep = (loan === null || loan === void 0 || (_loan$duration4 = loan.duration) === null || _loan$duration4 === void 0 ? void 0 : _loan$duration4.step) || 0;
|
|
5572
6590
|
const durationSteps = stepGenerator(durationStep, durationMax);
|
|
5573
6591
|
const onDurationChange = React.useCallback(values => {
|
|
5574
6592
|
PubSub.publish('FinanceInterest');
|
|
@@ -5576,10 +6594,10 @@ const LoanModal = ({
|
|
|
5576
6594
|
duration: values[0]
|
|
5577
6595
|
}));
|
|
5578
6596
|
}, [variables]);
|
|
5579
|
-
const residualCurrent = ((loan === null || loan === void 0
|
|
5580
|
-
const residualMin = ((loan === null || loan === void 0
|
|
5581
|
-
const residualMax = ((loan === null || loan === void 0
|
|
5582
|
-
const residualStep = ((loan === null || loan === void 0
|
|
6597
|
+
const residualCurrent = ((loan === null || loan === void 0 || (_loan$residual = loan.residual) === null || _loan$residual === void 0 ? void 0 : _loan$residual.current) || 0) * 100 || 0;
|
|
6598
|
+
const residualMin = ((loan === null || loan === void 0 || (_loan$residual2 = loan.residual) === null || _loan$residual2 === void 0 ? void 0 : _loan$residual2.min) || 0) * 100 || 0;
|
|
6599
|
+
const residualMax = ((loan === null || loan === void 0 || (_loan$residual3 = loan.residual) === null || _loan$residual3 === void 0 ? void 0 : _loan$residual3.max) || 0) * 100 || 0;
|
|
6600
|
+
const residualStep = ((loan === null || loan === void 0 || (_loan$residual4 = loan.residual) === null || _loan$residual4 === void 0 ? void 0 : _loan$residual4.step) || 0) * 100 || 0;
|
|
5583
6601
|
const residualSteps = stepGenerator(residualStep, residualMax);
|
|
5584
6602
|
const onResidualChange = React.useCallback(values => {
|
|
5585
6603
|
PubSub.publish('FinanceInterest');
|
|
@@ -5589,59 +6607,67 @@ const LoanModal = ({
|
|
|
5589
6607
|
}, [variables]);
|
|
5590
6608
|
const interestText = (((loan === null || loan === void 0 ? void 0 : loan.interest) || 0) * 100).toFixed(2);
|
|
5591
6609
|
const effectiveInterestText = (((loan === null || loan === void 0 ? void 0 : loan.effectiveInterest) || 0) * 100).toFixed(2);
|
|
6610
|
+
const monthlyCost = loan === null || loan === void 0 ? void 0 : loan.monthlyCost;
|
|
5592
6611
|
return React__default.createElement(Modal, {
|
|
5593
|
-
title:
|
|
6612
|
+
title: t('item.financialOptions.loanOptions'),
|
|
5594
6613
|
onClose: onClose
|
|
5595
6614
|
}, React__default.createElement(Repeat, null, React__default.createElement(ContentLogo, null, (financialOption === null || financialOption === void 0 ? void 0 : financialOption.description) && React__default.createElement(ContentLogoText, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, financialOption.description))), (financialOption === null || financialOption === void 0 ? void 0 : financialOption.image) && React__default.createElement(ContentLogoMedia, null, React__default.createElement(LogoBox, {
|
|
5596
6615
|
logo: financialOption.image,
|
|
5597
|
-
alt: financialOption.name || '
|
|
6616
|
+
alt: financialOption.name || t('common.logotype'),
|
|
5598
6617
|
wide: true
|
|
5599
6618
|
})))), React__default.createElement(Repeat, null, React__default.createElement(RepeatSmall, null, React__default.createElement(SliderWithLabel, {
|
|
5600
|
-
label:
|
|
6619
|
+
label: t('item.financialOptions.downPayment'),
|
|
5601
6620
|
values: [downPaymentCurrent],
|
|
5602
6621
|
domain: [downPaymentMin, downPaymentMax],
|
|
5603
6622
|
steps: downPaymentSteps,
|
|
5604
|
-
unit:
|
|
6623
|
+
unit: t('currency.default'),
|
|
5605
6624
|
formatValues: true,
|
|
5606
6625
|
loading: loading,
|
|
5607
6626
|
onChange: onDownPaymentChange
|
|
5608
6627
|
})), React__default.createElement(RepeatSmall, null, React__default.createElement(SliderWithLabel, {
|
|
5609
|
-
label:
|
|
6628
|
+
label: t('item.financialOptions.duration'),
|
|
5610
6629
|
values: [durationCurrent],
|
|
5611
6630
|
domain: [durationMin, durationMax],
|
|
5612
6631
|
steps: durationSteps,
|
|
5613
|
-
unit:
|
|
6632
|
+
unit: t('item.financialOptions.months'),
|
|
5614
6633
|
loading: loading,
|
|
5615
6634
|
onChange: onDurationChange
|
|
5616
6635
|
})), residual !== undefined && residualMax !== 0 && React__default.createElement(RepeatSmall, null, React__default.createElement(SliderWithLabel, {
|
|
5617
|
-
label:
|
|
6636
|
+
label: t('item.financialOptions.residual'),
|
|
5618
6637
|
values: [residualCurrent],
|
|
5619
6638
|
domain: [residualMin, residualMax],
|
|
5620
6639
|
steps: residualSteps,
|
|
5621
6640
|
unit: "%",
|
|
5622
6641
|
loading: loading,
|
|
5623
6642
|
onChange: onResidualChange
|
|
5624
|
-
})), React__default.createElement(RepeatSmall, null, React__default.createElement(RepeatTiny, null, React__default.createElement(Content$2, {
|
|
6643
|
+
})), React__default.createElement(RepeatSmall, null, React__default.createElement(RepeatTiny, null, monthlyCost !== null && monthlyCost !== undefined && React__default.createElement(Content$2, null, `${numberSeparator(monthlyCost)} ${t('currency.monthly')}*`), React__default.createElement(Content$2, {
|
|
5625
6644
|
small: true
|
|
5626
|
-
}, React__default.createElement("p", null,
|
|
6645
|
+
}, React__default.createElement("p", null, "*", (loan === null || loan === void 0 ? void 0 : loan.mileage) !== null ? t('item.financialOptions.loanOptionsDisclaimerMileage', {
|
|
6646
|
+
interest: interestText,
|
|
6647
|
+
effectiveInterest: effectiveInterestText,
|
|
6648
|
+
mileage: loan === null || loan === void 0 ? void 0 : loan.mileage
|
|
6649
|
+
}) : t('item.financialOptions.loanOptionsDisclaimer', {
|
|
6650
|
+
interest: interestText,
|
|
6651
|
+
effectiveInterest: effectiveInterestText
|
|
6652
|
+
}))))), React__default.createElement(RepeatSmall, null, React__default.createElement(ButtonClear, {
|
|
5627
6653
|
onClick: onToggleExtend,
|
|
5628
|
-
title: extend ? '
|
|
5629
|
-
}, React__default.createElement(ButtonContent, null, extend ? '
|
|
6654
|
+
title: extend ? t('common.showLessInformation') || '' : t('common.showMoreInformation') || ''
|
|
6655
|
+
}, React__default.createElement(ButtonContent, null, extend ? t('common.lessInformation') : t('common.showMoreInformation')))), React__default.createElement(React__default.Fragment, null, extend && React__default.createElement(ModalFoldout, null, React__default.createElement(ModalFoldoutBody, null, React__default.createElement(DataList, {
|
|
5630
6656
|
items: [{
|
|
5631
|
-
label: '
|
|
6657
|
+
label: t('item.financialOptions.interest'),
|
|
5632
6658
|
value: `${interestText} %`
|
|
5633
6659
|
}, {
|
|
5634
|
-
label: '
|
|
6660
|
+
label: t('item.financialOptions.effectiveinterest'),
|
|
5635
6661
|
value: `${effectiveInterestText} %`
|
|
5636
6662
|
}, {
|
|
5637
|
-
label: '
|
|
5638
|
-
value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.setupFee) || 0)}
|
|
6663
|
+
label: t('item.financialOptions.setupFee'),
|
|
6664
|
+
value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.setupFee) || 0)} ${t('currency.default')}`
|
|
5639
6665
|
}, {
|
|
5640
|
-
label: '
|
|
5641
|
-
value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.administrationFee) || 0)}
|
|
6666
|
+
label: t('item.financialOptions.administrationFee'),
|
|
6667
|
+
value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.administrationFee) || 0)} ${t('currency.monthly')}`
|
|
5642
6668
|
}, {
|
|
5643
|
-
label: '
|
|
5644
|
-
value: `${numberSeparator((loan === null || loan === void 0 ? void 0 : loan.totalCreditCost) || 0)}
|
|
6669
|
+
label: t('item.financialOptions.totalCreditCost'),
|
|
6670
|
+
value: `${numberSeparator((loan === null || loan === void 0 ? void 0 : loan.totalCreditCost) || 0)} ${t('currency.default')}`
|
|
5645
6671
|
}]
|
|
5646
6672
|
}))))));
|
|
5647
6673
|
};
|
|
@@ -5650,22 +6676,25 @@ const Loan = ({
|
|
|
5650
6676
|
id,
|
|
5651
6677
|
financialOption
|
|
5652
6678
|
}) => {
|
|
5653
|
-
var _financialOption$dura, _financialOption$down, _financialOption$resi, _data$loan, _data$loan2, _data$
|
|
6679
|
+
var _financialOption$dura, _financialOption$down, _financialOption$resi, _data$loan, _data$loan2, _data$loan3;
|
|
6680
|
+
const {
|
|
6681
|
+
t
|
|
6682
|
+
} = reactI18next.useTranslation();
|
|
5654
6683
|
const [modal, setModal] = React.useState(false);
|
|
5655
6684
|
const toggleModal = React.useCallback(() => setModal(!modal), [modal]);
|
|
5656
6685
|
const {
|
|
5657
6686
|
data
|
|
5658
6687
|
} = useLoanCalculation(id, (_financialOption$dura = financialOption.duration) === null || _financialOption$dura === void 0 ? void 0 : _financialOption$dura.current, (_financialOption$down = financialOption.downPayment) === null || _financialOption$down === void 0 ? void 0 : _financialOption$down.current, (_financialOption$resi = financialOption.residual) === null || _financialOption$resi === void 0 ? void 0 : _financialOption$resi.current);
|
|
5659
|
-
const interest = data === null || data === void 0
|
|
5660
|
-
const duration = data === null || data === void 0
|
|
5661
|
-
const monthlyCost = data === null || data === void 0
|
|
6688
|
+
const interest = data === null || data === void 0 || (_data$loan = data.loan) === null || _data$loan === void 0 ? void 0 : _data$loan.interest;
|
|
6689
|
+
const duration = data === null || data === void 0 || (_data$loan2 = data.loan) === null || _data$loan2 === void 0 || (_data$loan2 = _data$loan2.duration) === null || _data$loan2 === void 0 ? void 0 : _data$loan2.current;
|
|
6690
|
+
const monthlyCost = data === null || data === void 0 || (_data$loan3 = data.loan) === null || _data$loan3 === void 0 ? void 0 : _data$loan3.monthlyCost;
|
|
5662
6691
|
const logo = (financialOption === null || financialOption === void 0 ? void 0 : financialOption.logotype) || 'https://placehold.it/67x10';
|
|
5663
6692
|
// Skeleton?
|
|
5664
6693
|
if (financialOption.loanAmount === undefined || financialOption.loanAmount === null || interest === undefined || duration === undefined || monthlyCost === undefined || interest === null || duration === null || monthlyCost === null) {
|
|
5665
6694
|
return React__default.createElement(OptionBox, {
|
|
5666
6695
|
logo: logo,
|
|
5667
|
-
logoAlt:
|
|
5668
|
-
}, React__default.createElement(OptionBoxHeading, null,
|
|
6696
|
+
logoAlt: t('common.logotype')
|
|
6697
|
+
}, React__default.createElement(OptionBoxHeading, null, t('other.loading')), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, t('other.loading'))));
|
|
5669
6698
|
}
|
|
5670
6699
|
return React__default.createElement(React__default.Fragment, null, modal && React__default.createElement(LoanModal, {
|
|
5671
6700
|
id: id,
|
|
@@ -5673,23 +6702,33 @@ const Loan = ({
|
|
|
5673
6702
|
onClose: toggleModal
|
|
5674
6703
|
}), React__default.createElement(OptionBox, {
|
|
5675
6704
|
logo: logo,
|
|
5676
|
-
logoAlt:
|
|
5677
|
-
}, React__default.createElement(React__default.Fragment, null, React__default.createElement(OptionBoxHeading, null, `${numberSeparator(monthlyCost)}
|
|
6705
|
+
logoAlt: t('common.logotype')
|
|
6706
|
+
}, React__default.createElement(React__default.Fragment, null, React__default.createElement(OptionBoxHeading, null, `${numberSeparator(monthlyCost)} ${t('currency.monthly')}*`), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, financialOption.loanAmount && duration ? t('item.financialOptions.payInInstallmentsDetailed', {
|
|
6707
|
+
amount: `${numberSeparator(financialOption.loanAmount)} kr`,
|
|
6708
|
+
duration
|
|
6709
|
+
}) : t('item.financialOptions.payInInstallments')), React__default.createElement("p", null, "*", t('item.financialOptions.disclaimer', {
|
|
6710
|
+
interest: `${(interest * 100).toFixed(2)}%`
|
|
6711
|
+
}), ' ', React__default.createElement(ButtonInline, {
|
|
5678
6712
|
onClick: toggleModal
|
|
5679
|
-
},
|
|
6713
|
+
}, t('common.readMore')))))));
|
|
5680
6714
|
};
|
|
5681
6715
|
|
|
5682
6716
|
const FinancialOptions = ({
|
|
5683
6717
|
id,
|
|
5684
6718
|
financialOptions
|
|
5685
|
-
}) =>
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
financialOption
|
|
5692
|
-
|
|
6719
|
+
}) => {
|
|
6720
|
+
const {
|
|
6721
|
+
t
|
|
6722
|
+
} = reactI18next.useTranslation();
|
|
6723
|
+
return React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null, t('item.financialOptions.otherFinancialOptions'))), React__default.createElement(RepeatTiny, null, financialOptions.map((financialOption, index) => React__default.createElement(React.Fragment, {
|
|
6724
|
+
key: index
|
|
6725
|
+
}, (financialOption.type === 'leasing' || financialOption.type === 'business-leasing') && React__default.createElement(Leasing, {
|
|
6726
|
+
financialOption: financialOption
|
|
6727
|
+
}), financialOption.type === 'loan' && React__default.createElement(Loan, {
|
|
6728
|
+
id: id,
|
|
6729
|
+
financialOption: financialOption
|
|
6730
|
+
})))));
|
|
6731
|
+
};
|
|
5693
6732
|
|
|
5694
6733
|
const Wrapper$n = styled__default.article`
|
|
5695
6734
|
box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);
|
|
@@ -5721,9 +6760,12 @@ const DetailBox = ({
|
|
|
5721
6760
|
description,
|
|
5722
6761
|
children
|
|
5723
6762
|
}) => {
|
|
6763
|
+
const {
|
|
6764
|
+
t
|
|
6765
|
+
} = reactI18next.useTranslation();
|
|
5724
6766
|
const [extend, setExtend] = React__default.useState(false);
|
|
5725
6767
|
const onToggleExtend = React__default.useCallback(() => setExtend(!extend), [extend]);
|
|
5726
|
-
const extendBtnText = extend ? '
|
|
6768
|
+
const extendBtnText = extend ? t('common.lessInformation') : t('common.moreInformation');
|
|
5727
6769
|
return React__default.createElement(Wrapper$n, null, React__default.createElement(Main$1, null, React__default.createElement(Heading$5, null, heading), description && React__default.createElement(Description$2, null, description), React__default.createElement(Footer$2, null, React__default.createElement(ButtonClear, {
|
|
5728
6770
|
onClick: onToggleExtend
|
|
5729
6771
|
}, React__default.createElement(ButtonContent, null, extendBtnText)))), extend && React__default.createElement(Foldout, null, children));
|
|
@@ -5787,11 +6829,14 @@ const ExtendInfo = ({
|
|
|
5787
6829
|
title,
|
|
5788
6830
|
children
|
|
5789
6831
|
}) => {
|
|
6832
|
+
const {
|
|
6833
|
+
t
|
|
6834
|
+
} = reactI18next.useTranslation();
|
|
5790
6835
|
const [extend, setExtend] = React.useState(false);
|
|
5791
6836
|
const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);
|
|
5792
6837
|
return React__default.createElement(Wrapper$o, null, React__default.createElement(Header$4, null, React__default.createElement(Title, null, title), children && React__default.createElement(Info$1, null, React__default.createElement(InfoBtn, {
|
|
5793
6838
|
onClick: onToggleExtend,
|
|
5794
|
-
title:
|
|
6839
|
+
title: t('common.moreInformation') || ''
|
|
5795
6840
|
}, React__default.createElement(IconInfo, {
|
|
5796
6841
|
block: true
|
|
5797
6842
|
})))), extend && React__default.createElement(Extend$1, null, children));
|
|
@@ -6145,6 +7190,9 @@ const InsuranceModal = ({
|
|
|
6145
7190
|
onClose,
|
|
6146
7191
|
insuranceOptions
|
|
6147
7192
|
}) => {
|
|
7193
|
+
const {
|
|
7194
|
+
t
|
|
7195
|
+
} = reactI18next.useTranslation();
|
|
6148
7196
|
const [form, setForm] = React.useState({
|
|
6149
7197
|
ssn: '',
|
|
6150
7198
|
drivingDistance: DrivingDistance.Between0And1000
|
|
@@ -6187,40 +7235,40 @@ const InsuranceModal = ({
|
|
|
6187
7235
|
displayName: '2500+'
|
|
6188
7236
|
}];
|
|
6189
7237
|
return React__default.createElement(Modal, {
|
|
6190
|
-
title:
|
|
7238
|
+
title: t('item.insurance'),
|
|
6191
7239
|
onClose: onClose
|
|
6192
7240
|
}, ((insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.description) || (insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.logotype)) && React__default.createElement(Repeat, null, React__default.createElement(ContentLogo, null, insuranceOptions.description && React__default.createElement(ContentLogoText, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, insuranceOptions.description))), insuranceOptions.logotype && React__default.createElement(ContentLogoMedia, null, React__default.createElement(LogoBox, {
|
|
6193
7241
|
logo: insuranceOptions.logotype,
|
|
6194
|
-
alt: insuranceOptions.name || '
|
|
7242
|
+
alt: insuranceOptions.name || t('common.logotype'),
|
|
6195
7243
|
wide: true
|
|
6196
7244
|
})))), React__default.createElement(Repeat, null, React__default.createElement(RepeatSmall, null, React__default.createElement(RepeatTiny, null, React__default.createElement(InputGroup, null, React__default.createElement(InputGroupColumn, null, React__default.createElement(InputLabel, {
|
|
6197
7245
|
htmlFor: "input-insurance-personalnumber"
|
|
6198
|
-
},
|
|
7246
|
+
}, t('item.personalNumber')), React__default.createElement(InputText, {
|
|
6199
7247
|
placeholder: "\u00C5\u00C5\u00C5\u00C5MMDD-XXXX",
|
|
6200
|
-
label:
|
|
7248
|
+
label: t('item.personalNumber'),
|
|
6201
7249
|
value: form.ssn,
|
|
6202
7250
|
onChange: onChangeSsn,
|
|
6203
7251
|
onKeyDown: onKeyDown,
|
|
6204
7252
|
id: "input-insurance-personalnumber"
|
|
6205
7253
|
})), React__default.createElement(InputGroupColumn, null, React__default.createElement(InputLabel, {
|
|
6206
7254
|
htmlFor: "input-insurance-mileage"
|
|
6207
|
-
},
|
|
7255
|
+
}, t('item.estimatedAnualMileage')), React__default.createElement(InputSelect, {
|
|
6208
7256
|
value: form.drivingDistance,
|
|
6209
7257
|
onChange: onChangeDrivingDistance,
|
|
6210
7258
|
options: options,
|
|
6211
7259
|
unit: "mil",
|
|
6212
|
-
title:
|
|
7260
|
+
title: t('item.estimatedAnualMileage')
|
|
6213
7261
|
})))), React__default.createElement(RepeatTiny, null, React__default.createElement(ButtonPrimary, {
|
|
6214
7262
|
fullWidth: true,
|
|
6215
7263
|
disabled: !ssnIsValid(form.ssn) || loading,
|
|
6216
7264
|
onClick: onShowInsurances
|
|
6217
|
-
}, React__default.createElement(ButtonContent, null,
|
|
7265
|
+
}, React__default.createElement(ButtonContent, null, t('item.showInsurances'))))), false , React__default.createElement(RepeatSmall, null, React__default.createElement(Content$2, {
|
|
6218
7266
|
small: true
|
|
6219
|
-
}, React__default.createElement("p", null,
|
|
7267
|
+
}, React__default.createElement("p", null, t('item.savePersonalNumberOnThisDeviceHelp'))))), loading && React__default.createElement(Repeat, null, React__default.createElement(Loader, null)), error && React__default.createElement(Repeat, null, React__default.createElement(Snackbar, {
|
|
6220
7268
|
severity: "error",
|
|
6221
7269
|
icon: true,
|
|
6222
|
-
heading:
|
|
6223
|
-
},
|
|
7270
|
+
heading: t('common.anErrorHasOccured') || undefined
|
|
7271
|
+
}, t('item.couldNotfetchInsurances'))), React__default.createElement(React__default.Fragment, null, (data === null || data === void 0 ? void 0 : data.insurances) && React__default.createElement(Repeat, null, data === null || data === void 0 ? void 0 : data.insurances.map(insurance => React__default.createElement(Repeat, {
|
|
6224
7272
|
key: insurance.name
|
|
6225
7273
|
}, React__default.createElement(DetailBox, {
|
|
6226
7274
|
heading: `${numberSeparator(insurance.price)} ${insurance.unit}`,
|
|
@@ -6229,12 +7277,13 @@ const InsuranceModal = ({
|
|
|
6229
7277
|
as: "a",
|
|
6230
7278
|
href: insurance.url || '',
|
|
6231
7279
|
target: "_blank",
|
|
6232
|
-
rel: "noopener noreferrer nofollow"
|
|
6233
|
-
|
|
7280
|
+
rel: "noopener noreferrer nofollow",
|
|
7281
|
+
title: t('item.openPrePurchaseInformationInNewTab') || ''
|
|
7282
|
+
}, t('item.openPrePurchaseInformationInNewTab'))))), insurance.items && insurance.items.length > 0 && React__default.createElement(Repeat, null, React__default.createElement(H4, null, t('item.insuranceIncludes')), insurance.items.map(item => React__default.createElement(RepeatSmall, {
|
|
6234
7283
|
key: item.name || ''
|
|
6235
7284
|
}, React__default.createElement(ExtendInfo, {
|
|
6236
7285
|
title: item.name || ''
|
|
6237
|
-
}, item.description)))), insurance.addons && insurance.addons.length > 0 && React__default.createElement(Repeat, null, React__default.createElement(H4, null,
|
|
7286
|
+
}, item.description)))), insurance.addons && insurance.addons.length > 0 && React__default.createElement(Repeat, null, React__default.createElement(H4, null, t('item.addInsuranceHeading')), insurance.addons.map(addon => React__default.createElement(RepeatSmall, {
|
|
6238
7287
|
key: addon.title || ''
|
|
6239
7288
|
}, React__default.createElement(ColumnRow, null, React__default.createElement(ColumnRowItem, null, React__default.createElement(ExtendInfo, {
|
|
6240
7289
|
title: addon.title || ''
|
|
@@ -6246,6 +7295,9 @@ const Insurance = ({
|
|
|
6246
7295
|
branch,
|
|
6247
7296
|
insuranceOptions
|
|
6248
7297
|
}) => {
|
|
7298
|
+
const {
|
|
7299
|
+
t
|
|
7300
|
+
} = reactI18next.useTranslation();
|
|
6249
7301
|
const [modal, setModal] = React.useState(false);
|
|
6250
7302
|
const toggleModal = React.useCallback(() => setModal(!modal), [modal]);
|
|
6251
7303
|
if (!insuranceOptions.length) {
|
|
@@ -6256,13 +7308,13 @@ const Insurance = ({
|
|
|
6256
7308
|
branch: branch,
|
|
6257
7309
|
onClose: toggleModal,
|
|
6258
7310
|
insuranceOptions: insuranceOptions[0]
|
|
6259
|
-
}), React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null,
|
|
7311
|
+
}), React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null, t('item.addInsurance'))), React__default.createElement(RepeatTiny, null, React__default.createElement(React__default.Fragment, null, insuranceOptions.map((insuranceOption, index) => React__default.createElement(OptionBox, {
|
|
6260
7312
|
key: `${insuranceOption.url}-${index}`,
|
|
6261
7313
|
logo: insuranceOption.logotype || undefined,
|
|
6262
|
-
logoAlt: insuranceOption.name || '
|
|
6263
|
-
}, React__default.createElement(OptionBoxHeading, null,
|
|
7314
|
+
logoAlt: insuranceOption.name || t('common.logotype')
|
|
7315
|
+
}, React__default.createElement(OptionBoxHeading, null, t('item.getInsuranceQuote')), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, React__default.createElement(ButtonInline, {
|
|
6264
7316
|
onClick: toggleModal
|
|
6265
|
-
},
|
|
7317
|
+
}, t('common.moreInformation'))))))))));
|
|
6266
7318
|
};
|
|
6267
7319
|
|
|
6268
7320
|
const InsuranceFreeModal = ({
|
|
@@ -6270,8 +7322,11 @@ const InsuranceFreeModal = ({
|
|
|
6270
7322
|
insuranceOptions
|
|
6271
7323
|
}) => {
|
|
6272
7324
|
var _insuranceOptions$ins;
|
|
7325
|
+
const {
|
|
7326
|
+
t
|
|
7327
|
+
} = reactI18next.useTranslation();
|
|
6273
7328
|
return React__default.createElement(Modal, {
|
|
6274
|
-
title: (_insuranceOptions$ins = insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.insuranceHeader) !== null && _insuranceOptions$ins !== void 0 ? _insuranceOptions$ins : '
|
|
7329
|
+
title: (_insuranceOptions$ins = insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.insuranceHeader) !== null && _insuranceOptions$ins !== void 0 ? _insuranceOptions$ins : t('item.insurance'),
|
|
6275
7330
|
onClose: onClose
|
|
6276
7331
|
}, (insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.longDescription) && React__default.createElement(Repeat, null, React__default.createElement(Content$2, {
|
|
6277
7332
|
dangerouslySetInnerHTML: {
|
|
@@ -6280,11 +7335,12 @@ const InsuranceFreeModal = ({
|
|
|
6280
7335
|
})), (insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.url) && React__default.createElement(Repeat, null, React__default.createElement(ButtonInline, {
|
|
6281
7336
|
as: "a",
|
|
6282
7337
|
href: insuranceOptions.url,
|
|
7338
|
+
title: t('item.readMoreAboutInsuranceInNewTab') || '',
|
|
6283
7339
|
target: "_blank",
|
|
6284
7340
|
rel: "noopener noreferrer"
|
|
6285
|
-
},
|
|
7341
|
+
}, t('item.readMoreAboutInsuranceInNewTab'))), (insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.logotype) && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
|
|
6286
7342
|
logo: insuranceOptions.logotype,
|
|
6287
|
-
alt: insuranceOptions.name || '
|
|
7343
|
+
alt: insuranceOptions.name || t('common.logotype'),
|
|
6288
7344
|
wide: true
|
|
6289
7345
|
})));
|
|
6290
7346
|
};
|
|
@@ -6293,6 +7349,9 @@ const Insurance$1 = ({
|
|
|
6293
7349
|
insuranceOptions
|
|
6294
7350
|
}) => {
|
|
6295
7351
|
var _insuranceOptions$0$i, _insuranceOptions$;
|
|
7352
|
+
const {
|
|
7353
|
+
t
|
|
7354
|
+
} = reactI18next.useTranslation();
|
|
6296
7355
|
const [modal, setModal] = React.useState(false);
|
|
6297
7356
|
const toggleModal = React.useCallback(() => setModal(!modal), [modal]);
|
|
6298
7357
|
if (!insuranceOptions.length) {
|
|
@@ -6301,17 +7360,17 @@ const Insurance$1 = ({
|
|
|
6301
7360
|
return React__default.createElement(React__default.Fragment, null, modal && React__default.createElement(InsuranceFreeModal, {
|
|
6302
7361
|
onClose: toggleModal,
|
|
6303
7362
|
insuranceOptions: insuranceOptions[0]
|
|
6304
|
-
}), React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null, (_insuranceOptions$0$i = (_insuranceOptions$ = insuranceOptions[0]) === null || _insuranceOptions$ === void 0 ? void 0 : _insuranceOptions$.insuranceHeader) !== null && _insuranceOptions$0$i !== void 0 ? _insuranceOptions$0$i : '
|
|
7363
|
+
}), React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null, (_insuranceOptions$0$i = (_insuranceOptions$ = insuranceOptions[0]) === null || _insuranceOptions$ === void 0 ? void 0 : _insuranceOptions$.insuranceHeader) !== null && _insuranceOptions$0$i !== void 0 ? _insuranceOptions$0$i : t('item.insurance'))), React__default.createElement(RepeatTiny, null, React__default.createElement(React__default.Fragment, null, insuranceOptions.map((insuranceOption, index) => React__default.createElement(OptionBox, {
|
|
6305
7364
|
key: `${insuranceOption.url}-${index}`,
|
|
6306
7365
|
logo: insuranceOption.logotype || undefined,
|
|
6307
|
-
logoAlt: insuranceOption.name || '
|
|
7366
|
+
logoAlt: insuranceOption.name || t('common.logotype')
|
|
6308
7367
|
}, insuranceOption.description && React__default.createElement(Content$2, {
|
|
6309
7368
|
dangerouslySetInnerHTML: {
|
|
6310
7369
|
__html: marked.marked(insuranceOption.description)
|
|
6311
7370
|
}
|
|
6312
7371
|
}), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, React__default.createElement(ButtonInline, {
|
|
6313
7372
|
onClick: toggleModal
|
|
6314
|
-
},
|
|
7373
|
+
}, t('common.moreInformation'))))))))));
|
|
6315
7374
|
};
|
|
6316
7375
|
|
|
6317
7376
|
const InsuranceOptions = ({
|
|
@@ -6339,6 +7398,9 @@ const ManufacturerPackageOption = ({
|
|
|
6339
7398
|
packageOption
|
|
6340
7399
|
}) => {
|
|
6341
7400
|
var _packageOption$link;
|
|
7401
|
+
const {
|
|
7402
|
+
t
|
|
7403
|
+
} = reactI18next.useTranslation();
|
|
6342
7404
|
if (!packageOption) {
|
|
6343
7405
|
return null;
|
|
6344
7406
|
}
|
|
@@ -6353,9 +7415,9 @@ const ManufacturerPackageOption = ({
|
|
|
6353
7415
|
href: packageOption.link.url,
|
|
6354
7416
|
target: "_blank",
|
|
6355
7417
|
rel: "noopener noreferrer"
|
|
6356
|
-
}, packageOption.link.title ? packageOption.link.title :
|
|
7418
|
+
}, packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab'))), packageOption.image && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
|
|
6357
7419
|
logo: packageOption.image,
|
|
6358
|
-
alt:
|
|
7420
|
+
alt: t('common.logotype') || '',
|
|
6359
7421
|
wide: true
|
|
6360
7422
|
})));
|
|
6361
7423
|
};
|
|
@@ -6367,6 +7429,9 @@ const ToggleItem = ({
|
|
|
6367
7429
|
onClickVisible,
|
|
6368
7430
|
onClickValue
|
|
6369
7431
|
}) => {
|
|
7432
|
+
const {
|
|
7433
|
+
t
|
|
7434
|
+
} = reactI18next.useTranslation();
|
|
6370
7435
|
const [visible, setVisible] = React.useState(false);
|
|
6371
7436
|
const _onClickValue = React.useCallback(() => {
|
|
6372
7437
|
if (onClickValue) {
|
|
@@ -6381,7 +7446,7 @@ const ToggleItem = ({
|
|
|
6381
7446
|
}
|
|
6382
7447
|
}
|
|
6383
7448
|
}, [visible]);
|
|
6384
|
-
const visibleTitle = type === 'tel' ? '
|
|
7449
|
+
const visibleTitle = type === 'tel' ? t('item.actions.callNumber') : type === 'mailto' ? t('item.actions.sendEmailTo') : '';
|
|
6385
7450
|
return React__default.createElement(RepeatTiny, null, visible ? React__default.createElement(ButtonSecondary, {
|
|
6386
7451
|
onClick: _onClickValue,
|
|
6387
7452
|
as: "a",
|
|
@@ -6421,8 +7486,11 @@ const ActionList = ({
|
|
|
6421
7486
|
branch
|
|
6422
7487
|
}) => {
|
|
6423
7488
|
var _branch$contact, _branch$contact2;
|
|
6424
|
-
const
|
|
6425
|
-
|
|
7489
|
+
const {
|
|
7490
|
+
t
|
|
7491
|
+
} = reactI18next.useTranslation();
|
|
7492
|
+
const email = (contact === null || contact === void 0 ? void 0 : contact.email) || (branch === null || branch === void 0 || (_branch$contact = branch.contact) === null || _branch$contact === void 0 ? void 0 : _branch$contact.email);
|
|
7493
|
+
const phonenumber = (contact === null || contact === void 0 ? void 0 : contact.phonenumber) || (branch === null || branch === void 0 || (_branch$contact2 = branch.contact) === null || _branch$contact2 === void 0 ? void 0 : _branch$contact2.phonenumber);
|
|
6426
7494
|
const onClickMailVisible = React.useCallback(() => PubSub.publish('MailVisible'), []);
|
|
6427
7495
|
const onClickPhoneVisible = React.useCallback(() => PubSub.publish('PhonenumberVisible'), []);
|
|
6428
7496
|
const onClickPhoneValue = React.useCallback(() => PubSub.publish('PhonenumberCall'), []);
|
|
@@ -6431,11 +7499,11 @@ const ActionList = ({
|
|
|
6431
7499
|
}
|
|
6432
7500
|
return React__default.createElement(React__default.Fragment, null, email && React__default.createElement(ToggleItem, {
|
|
6433
7501
|
onClickVisible: onClickMailVisible,
|
|
6434
|
-
title:
|
|
7502
|
+
title: t('item.actions.showEmail'),
|
|
6435
7503
|
value: email,
|
|
6436
7504
|
type: "mailto"
|
|
6437
7505
|
}), phonenumber && React__default.createElement(ToggleItem, {
|
|
6438
|
-
title:
|
|
7506
|
+
title: t('item.actions.showPhoneNumber'),
|
|
6439
7507
|
value: formatPhonenumber(phonenumber),
|
|
6440
7508
|
type: "tel",
|
|
6441
7509
|
onClickVisible: onClickPhoneVisible,
|
|
@@ -6649,11 +7717,14 @@ const SwitchBar = ({
|
|
|
6649
7717
|
children,
|
|
6650
7718
|
onClick
|
|
6651
7719
|
}) => {
|
|
7720
|
+
const {
|
|
7721
|
+
t
|
|
7722
|
+
} = reactI18next.useTranslation();
|
|
6652
7723
|
const [info, setInfo] = React.useState(false);
|
|
6653
7724
|
const onToggleInfo = React.useCallback(() => setInfo(!info), [info]);
|
|
6654
7725
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(Wrapper$t, null, React__default.createElement(Header$5, null, React__default.createElement(Info$2, null, React__default.createElement(InfoContent, null, React__default.createElement(Title$1, null, title)), children && React__default.createElement(InfoContent, null, React__default.createElement(InfoBtn$1, {
|
|
6655
7726
|
onClick: onToggleInfo,
|
|
6656
|
-
title:
|
|
7727
|
+
title: t('common.moreInformation') || ''
|
|
6657
7728
|
}, React__default.createElement(IconInfo, {
|
|
6658
7729
|
block: true
|
|
6659
7730
|
})))), actionTitle && React__default.createElement(Action$6, null, React__default.createElement(ButtonInline, {
|
|
@@ -6674,6 +7745,9 @@ const BranchModal = ({
|
|
|
6674
7745
|
connections,
|
|
6675
7746
|
onClose
|
|
6676
7747
|
}) => {
|
|
7748
|
+
const {
|
|
7749
|
+
t
|
|
7750
|
+
} = reactI18next.useTranslation();
|
|
6677
7751
|
const {
|
|
6678
7752
|
centralStorageId,
|
|
6679
7753
|
setCentralStorageId
|
|
@@ -6689,21 +7763,22 @@ const BranchModal = ({
|
|
|
6689
7763
|
return null;
|
|
6690
7764
|
}
|
|
6691
7765
|
return React__default.createElement(Modal, {
|
|
6692
|
-
title:
|
|
7766
|
+
title: t('item.switchBranch'),
|
|
6693
7767
|
onClose: onClose
|
|
6694
|
-
}, React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(Content$2, null, React__default.createElement("p", null,
|
|
7768
|
+
}, React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.switchBranchDescription')))), React__default.createElement(RepeatTiny, null, React__default.createElement(InputLabel, null, t('item.chooseBranch')), React__default.createElement(InputSelect, {
|
|
6695
7769
|
value: localValue,
|
|
6696
7770
|
onChange: onChange,
|
|
6697
7771
|
options: connections === null || connections === void 0 ? void 0 : connections.map(x => ({
|
|
6698
7772
|
value: x.id,
|
|
6699
7773
|
displayName: x.name
|
|
6700
7774
|
})),
|
|
6701
|
-
title:
|
|
7775
|
+
title: t('item.chooseBranch')
|
|
6702
7776
|
}))), React__default.createElement(Repeat, null, React__default.createElement(ButtonPrimary, {
|
|
6703
7777
|
disabled: loading,
|
|
6704
7778
|
fullWidth: true,
|
|
6705
|
-
onClick: () => onConfirm(localValue)
|
|
6706
|
-
|
|
7779
|
+
onClick: () => onConfirm(localValue),
|
|
7780
|
+
title: t('item.chooseSelectedBranch') || ''
|
|
7781
|
+
}, React__default.createElement(ButtonContent, null, t('common.choose')))));
|
|
6707
7782
|
};
|
|
6708
7783
|
|
|
6709
7784
|
const PackageOptionModal = ({
|
|
@@ -6740,6 +7815,9 @@ const CheckList = ({
|
|
|
6740
7815
|
toggleEcomModal,
|
|
6741
7816
|
loadingCentralStorageVehicle
|
|
6742
7817
|
}) => {
|
|
7818
|
+
const {
|
|
7819
|
+
t
|
|
7820
|
+
} = reactI18next.useTranslation();
|
|
6743
7821
|
const [modalBranch, setModalBranch] = React.useState(false);
|
|
6744
7822
|
const openModalBranch = React.useCallback(() => setModalBranch(true), []);
|
|
6745
7823
|
const closeModalBranch = React.useCallback(() => setModalBranch(false), []);
|
|
@@ -6763,10 +7841,10 @@ const CheckList = ({
|
|
|
6763
7841
|
disabled: !!ecommerce.reserved,
|
|
6764
7842
|
fullWidth: true,
|
|
6765
7843
|
onClick: toggleEcomModal
|
|
6766
|
-
}, React__default.createElement(ButtonContent, null,
|
|
6767
|
-
title:
|
|
6768
|
-
body:
|
|
6769
|
-
}, React__default.createElement(Content$2, null, React__default.createElement("p", null,
|
|
7844
|
+
}, React__default.createElement(ButtonContent, null, t('item.actions.buyOnline')))), (ecommerce === null || ecommerce === void 0 ? void 0 : ecommerce.reserved) && React__default.createElement(RepeatTiny, null, React__default.createElement(SwitchBar, {
|
|
7845
|
+
title: t('item.carIsReserved'),
|
|
7846
|
+
body: t('item.carIsReservedDescription') || undefined
|
|
7847
|
+
}, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.carIsReservedModalBody'))))), React__default.createElement(ActionList, {
|
|
6770
7848
|
branch: branch,
|
|
6771
7849
|
contact: contact
|
|
6772
7850
|
})), React__default.createElement(Repeat, null, availableFrom && new Date(availableFrom).valueOf() > new Date().valueOf() && React__default.createElement(RepeatTiny, null, React__default.createElement(Columns, {
|
|
@@ -6776,29 +7854,31 @@ const CheckList = ({
|
|
|
6776
7854
|
noShrink: true
|
|
6777
7855
|
}, React__default.createElement(StateIndicator, {
|
|
6778
7856
|
"$tone": "pending"
|
|
6779
|
-
})), React__default.createElement(Column, null, React__default.createElement(UtilityFontSizeSmall, null,
|
|
6780
|
-
|
|
6781
|
-
|
|
7857
|
+
})), React__default.createElement(Column, null, React__default.createElement(UtilityFontSizeSmall, null, t('item.availableFromDate', {
|
|
7858
|
+
date: esm.format(new Date(availableFrom), 'dd MMMM yyyy', {
|
|
7859
|
+
locale: sv
|
|
7860
|
+
})
|
|
7861
|
+
}))))), React__default.createElement(RepeatTiny, null, React__default.createElement(CheckMarkList, null, (packageOption === null || packageOption === void 0 ? void 0 : packageOption.title) && React__default.createElement(CheckMarkListItem, null, React__default.createElement(React__default.Fragment, null, t('item.includingShort'), ' ', React__default.createElement(ButtonInline, {
|
|
6782
7862
|
onClick: () => onOpen({
|
|
6783
7863
|
title: packageOption === null || packageOption === void 0 ? void 0 : packageOption.title,
|
|
6784
7864
|
image: packageOption === null || packageOption === void 0 ? void 0 : packageOption.image,
|
|
6785
7865
|
description: packageOption === null || packageOption === void 0 ? void 0 : packageOption.description,
|
|
6786
7866
|
link: packageOption === null || packageOption === void 0 ? void 0 : packageOption.link
|
|
6787
7867
|
})
|
|
6788
|
-
}, packageOption.title), ' ',
|
|
7868
|
+
}, packageOption.title), ' ', t('item.usedWarrany').toLowerCase())), packageOptions === null || packageOptions === void 0 ? void 0 : packageOptions.map((packageOption, index) => React__default.createElement(CheckMarkListItem, {
|
|
6789
7869
|
key: packageOption.title || index
|
|
6790
|
-
}, React__default.createElement(React__default.Fragment, null,
|
|
7870
|
+
}, React__default.createElement(React__default.Fragment, null, t('item.includingShort'), ' ', React__default.createElement(ButtonInline, {
|
|
6791
7871
|
onClick: () => onOpen({
|
|
6792
7872
|
title: packageOption === null || packageOption === void 0 ? void 0 : packageOption.title,
|
|
6793
7873
|
image: packageOption === null || packageOption === void 0 ? void 0 : packageOption.image,
|
|
6794
7874
|
description: packageOption === null || packageOption === void 0 ? void 0 : packageOption.description,
|
|
6795
7875
|
link: packageOption === null || packageOption === void 0 ? void 0 : packageOption.link
|
|
6796
7876
|
})
|
|
6797
|
-
}, packageOption.title)))), (ecommerce === null || ecommerce === void 0 ? void 0 : ecommerce.withHomeDelivery) && React__default.createElement(CheckMarkListItem, null,
|
|
6798
|
-
title:
|
|
6799
|
-
actionTitle:
|
|
7877
|
+
}, packageOption.title)))), (ecommerce === null || ecommerce === void 0 ? void 0 : ecommerce.withHomeDelivery) && React__default.createElement(CheckMarkListItem, null, t('item.homeDelivery'))))), ((branch === null || branch === void 0 ? void 0 : branch.connections.length) || 0) > 1 && React__default.createElement(Repeat, null, React__default.createElement(SwitchBar, {
|
|
7878
|
+
title: t('item.centralWarehouseCar'),
|
|
7879
|
+
actionTitle: t('item.switchBranch') || '',
|
|
6800
7880
|
onClick: openModalBranch
|
|
6801
|
-
}, React__default.createElement(Content$2, null, React__default.createElement("p", null,
|
|
7881
|
+
}, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.centralWarehouseCarDescription'))))));
|
|
6802
7882
|
};
|
|
6803
7883
|
|
|
6804
7884
|
const Wrapper$u = styled__default.div`
|
|
@@ -6987,7 +8067,7 @@ const OverflowGrid = ({
|
|
|
6987
8067
|
const scrollLeft = ((_overflowElement$curr2 = overflowElement.current) === null || _overflowElement$curr2 === void 0 ? void 0 : _overflowElement$curr2.scrollLeft) || 0;
|
|
6988
8068
|
if (scrollLeft > 0) {
|
|
6989
8069
|
var _overflowElement$curr3;
|
|
6990
|
-
(_overflowElement$curr3 = overflowElement.current) === null || _overflowElement$curr3 === void 0
|
|
8070
|
+
(_overflowElement$curr3 = overflowElement.current) === null || _overflowElement$curr3 === void 0 || _overflowElement$curr3.scroll({
|
|
6991
8071
|
left: scrollLeft - itemWidth,
|
|
6992
8072
|
behavior: 'smooth'
|
|
6993
8073
|
});
|
|
@@ -7002,7 +8082,7 @@ const OverflowGrid = ({
|
|
|
7002
8082
|
const overflowElementScrollWidth = scrollWidth - overflowElementWidth;
|
|
7003
8083
|
if (overflowElementScrollWidth !== scrollLeft) {
|
|
7004
8084
|
var _overflowElement$curr8;
|
|
7005
|
-
(_overflowElement$curr8 = overflowElement.current) === null || _overflowElement$curr8 === void 0
|
|
8085
|
+
(_overflowElement$curr8 = overflowElement.current) === null || _overflowElement$curr8 === void 0 || _overflowElement$curr8.scroll({
|
|
7006
8086
|
left: scrollLeft + itemWidth,
|
|
7007
8087
|
behavior: 'smooth'
|
|
7008
8088
|
});
|
|
@@ -7023,7 +8103,7 @@ const OverflowGrid = ({
|
|
|
7023
8103
|
React.useEffect(() => {
|
|
7024
8104
|
var _overflowElement$curr12;
|
|
7025
8105
|
onScroll();
|
|
7026
|
-
(_overflowElement$curr12 = overflowElement.current) === null || _overflowElement$curr12 === void 0
|
|
8106
|
+
(_overflowElement$curr12 = overflowElement.current) === null || _overflowElement$curr12 === void 0 || _overflowElement$curr12.addEventListener('scroll', onScroll);
|
|
7027
8107
|
return () => {
|
|
7028
8108
|
var _overflowElement$curr13;
|
|
7029
8109
|
return (_overflowElement$curr13 = overflowElement.current) === null || _overflowElement$curr13 === void 0 ? void 0 : _overflowElement$curr13.removeEventListener('scroll', onScroll);
|
|
@@ -7091,6 +8171,9 @@ const Related = ({
|
|
|
7091
8171
|
displayBranchName,
|
|
7092
8172
|
onClickSearchItem
|
|
7093
8173
|
}) => {
|
|
8174
|
+
const {
|
|
8175
|
+
t
|
|
8176
|
+
} = reactI18next.useTranslation();
|
|
7094
8177
|
const {
|
|
7095
8178
|
loading,
|
|
7096
8179
|
response,
|
|
@@ -7116,19 +8199,19 @@ const Related = ({
|
|
|
7116
8199
|
onClick: () => {}
|
|
7117
8200
|
}, React__default.createElement(H2, {
|
|
7118
8201
|
noMargin: true
|
|
7119
|
-
},
|
|
8202
|
+
}, t('item.relatedVehicles')))) : React__default.createElement(Repeat, null, React__default.createElement(SectionHeader, {
|
|
7120
8203
|
onClick: () => {},
|
|
7121
8204
|
actionTitle: "Visa alla"
|
|
7122
8205
|
}, React__default.createElement(H2, {
|
|
7123
8206
|
noMargin: true
|
|
7124
|
-
},
|
|
8207
|
+
}, t('item.latestVehicles')))), React__default.createElement(Repeat, null, React__default.createElement(OverflowGrid, {
|
|
7125
8208
|
accentBg: true,
|
|
7126
8209
|
columns: 1.05,
|
|
7127
8210
|
columnsSm: 2.1,
|
|
7128
8211
|
columnsMd: 3,
|
|
7129
8212
|
spacing: 2,
|
|
7130
8213
|
items: response === null || response === void 0 ? void 0 : response.documentList.documents.map(document => {
|
|
7131
|
-
var _document$featuredIma, _document$
|
|
8214
|
+
var _document$featuredIma, _document$branches, _document$odometerRea, _document$odometerRea2;
|
|
7132
8215
|
const prefix = pathRoute ? `/${pathRoute}` : '/';
|
|
7133
8216
|
const r = regexPathGuid();
|
|
7134
8217
|
const pathRouteUrl = window.location.pathname === '/' ? `${prefix}${document._id}` : r.test(`${pathRoute}${id}`) ? window.location.pathname.replace(r, document._id) : `${window.location.pathname}${prefix}${document._id}`;
|
|
@@ -7138,22 +8221,22 @@ const Related = ({
|
|
|
7138
8221
|
onClick: onItemClicked,
|
|
7139
8222
|
title: document.title,
|
|
7140
8223
|
href: pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined,
|
|
7141
|
-
image: (_document$featuredIma = document.featuredImage) === null || _document$featuredIma === void 0
|
|
8224
|
+
image: (_document$featuredIma = document.featuredImage) === null || _document$featuredIma === void 0 || (_document$featuredIma = _document$featuredIma.files) === null || _document$featuredIma === void 0 || (_document$featuredIma = _document$featuredIma[0]) === null || _document$featuredIma === void 0 ? void 0 : _document$featuredIma.url,
|
|
7142
8225
|
description: document.shortDescription,
|
|
7143
|
-
branchName: displayBranchName ? (_document$branches = document.branches) === null || _document$branches === void 0
|
|
8226
|
+
branchName: displayBranchName ? (_document$branches = document.branches) === null || _document$branches === void 0 || (_document$branches = _document$branches[0]) === null || _document$branches === void 0 ? void 0 : _document$branches.name : undefined,
|
|
7144
8227
|
uspList: [{
|
|
7145
8228
|
title: document.modelYear
|
|
7146
8229
|
}, {
|
|
7147
|
-
title: `${numberSeparator(document.mileage)}
|
|
8230
|
+
title: `${numberSeparator(((_document$odometerRea = document.odometerReading) === null || _document$odometerRea === void 0 ? void 0 : _document$odometerRea.value) || document.mileage)} ${t(`odometer.${((_document$odometerRea2 = document.odometerReading) === null || _document$odometerRea2 === void 0 ? void 0 : _document$odometerRea2.unit) || 'ScandinavianMile'}`)}`
|
|
7148
8231
|
}, {
|
|
7149
8232
|
title: document.gearboxType
|
|
7150
8233
|
}, {
|
|
7151
8234
|
title: document.fuelType
|
|
7152
8235
|
}],
|
|
7153
|
-
price: `${numberSeparator(document.price)}
|
|
7154
|
-
oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)}
|
|
7155
|
-
leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)}
|
|
7156
|
-
businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)}
|
|
8236
|
+
price: `${numberSeparator(document.price)} ${t('currency.default')}`,
|
|
8237
|
+
oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)} ${t('currency.default')}` : undefined,
|
|
8238
|
+
leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)} ${t('currency.monthly')}` : undefined,
|
|
8239
|
+
businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)} ${t('currency.monthly')}` : undefined,
|
|
7157
8240
|
pathRoute: pathRoute
|
|
7158
8241
|
});
|
|
7159
8242
|
})
|
|
@@ -7163,6 +8246,9 @@ const Related = ({
|
|
|
7163
8246
|
const PackageOptions = ({
|
|
7164
8247
|
packageOptions
|
|
7165
8248
|
}) => {
|
|
8249
|
+
const {
|
|
8250
|
+
t
|
|
8251
|
+
} = reactI18next.useTranslation();
|
|
7166
8252
|
if (!packageOptions) {
|
|
7167
8253
|
return null;
|
|
7168
8254
|
}
|
|
@@ -7181,9 +8267,9 @@ const PackageOptions = ({
|
|
|
7181
8267
|
href: packageOption.link.url,
|
|
7182
8268
|
target: "_blank",
|
|
7183
8269
|
rel: "noopener noreferrer"
|
|
7184
|
-
}, packageOption.link.title ? packageOption.link.title :
|
|
8270
|
+
}, packageOption.link.title ? packageOption.link.title : t('item.readMoreInNewTab'))), packageOption.image && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
|
|
7185
8271
|
logo: packageOption.image,
|
|
7186
|
-
alt:
|
|
8272
|
+
alt: t('common.logotype') || '',
|
|
7187
8273
|
wide: true
|
|
7188
8274
|
})));
|
|
7189
8275
|
}));
|
|
@@ -7234,19 +8320,19 @@ const KeyOrder = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'satur
|
|
|
7234
8320
|
const TranslateWeekDays = d => {
|
|
7235
8321
|
switch (d) {
|
|
7236
8322
|
case 'monday':
|
|
7237
|
-
return '
|
|
8323
|
+
return i18next.t('common.mondayShort');
|
|
7238
8324
|
case 'tuesday':
|
|
7239
|
-
return '
|
|
8325
|
+
return i18next.t('common.tuesdayShort');
|
|
7240
8326
|
case 'wednesday':
|
|
7241
|
-
return '
|
|
8327
|
+
return i18next.t('common.wednesdayShort');
|
|
7242
8328
|
case 'thursday':
|
|
7243
|
-
return '
|
|
8329
|
+
return i18next.t('common.thursdayShort');
|
|
7244
8330
|
case 'friday':
|
|
7245
|
-
return '
|
|
8331
|
+
return i18next.t('common.fridayShort');
|
|
7246
8332
|
case 'saturday':
|
|
7247
|
-
return '
|
|
8333
|
+
return i18next.t('common.saturdayShort');
|
|
7248
8334
|
case 'sunday':
|
|
7249
|
-
return '
|
|
8335
|
+
return i18next.t('common.sundayShort');
|
|
7250
8336
|
}
|
|
7251
8337
|
};
|
|
7252
8338
|
const arr = [];
|
|
@@ -7270,7 +8356,7 @@ const GetOpeningHoursToday = o => {
|
|
|
7270
8356
|
const day = KeyOrder[dayNumber === 0 ? 6 : dayNumber - 1];
|
|
7271
8357
|
const current = o[day];
|
|
7272
8358
|
return {
|
|
7273
|
-
title: current ? '
|
|
8359
|
+
title: current ? i18next.t('item.openingHoursToday') : i18next.t('item.closedToday'),
|
|
7274
8360
|
from: current === null || current === void 0 ? void 0 : current.from,
|
|
7275
8361
|
until: current === null || current === void 0 ? void 0 : current.until
|
|
7276
8362
|
};
|
|
@@ -7282,6 +8368,9 @@ const valuOfDateString = s => {
|
|
|
7282
8368
|
const OpeningHours = ({
|
|
7283
8369
|
openingHours
|
|
7284
8370
|
}) => {
|
|
8371
|
+
const {
|
|
8372
|
+
t
|
|
8373
|
+
} = reactI18next.useTranslation();
|
|
7285
8374
|
const today = React.useMemo(() => openingHours ? GetOpeningHoursToday(openingHours) : null, [openingHours]);
|
|
7286
8375
|
const currentlyOpen = React.useMemo(() => {
|
|
7287
8376
|
try {
|
|
@@ -7300,26 +8389,31 @@ const OpeningHours = ({
|
|
|
7300
8389
|
return null;
|
|
7301
8390
|
}
|
|
7302
8391
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(RepeatSmall, null, React__default.createElement(Badge, {
|
|
7303
|
-
label: currentlyOpen ? '
|
|
8392
|
+
label: currentlyOpen ? t('item.open') : t('item.closed'),
|
|
7304
8393
|
severity: currentlyOpen ? 'positive' : 'negative'
|
|
7305
|
-
})), React__default.createElement(RepeatSmall, null, React__default.createElement(TableColumn, null, React__default.createElement(TableColumnRow, null, React__default.createElement(TableColumnCell, null, React__default.createElement(UtilityTextBold, null, today === null || today === void 0 ? void 0 : today.title)), React__default.createElement(TableColumnCell, null, React__default.createElement(UtilityTextBold, null, today !== null && today !== void 0 && today.from ? `${today.from}-${today.until}` : '
|
|
8394
|
+
})), React__default.createElement(RepeatSmall, null, React__default.createElement(TableColumn, null, React__default.createElement(TableColumnRow, null, React__default.createElement(TableColumnCell, null, React__default.createElement(UtilityTextBold, null, today === null || today === void 0 ? void 0 : today.title)), React__default.createElement(TableColumnCell, null, React__default.createElement(UtilityTextBold, null, today !== null && today !== void 0 && today.from ? `${today.from}-${today.until}` : t('item.closed')))), oh.map(o => React__default.createElement(TableColumnRow, {
|
|
7306
8395
|
key: o.titleFrom
|
|
7307
|
-
}, React__default.createElement(TableColumnCell, null, o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom), React__default.createElement(TableColumnCell, null, o.from ? `${o.from}-${o.until}` : '
|
|
8396
|
+
}, React__default.createElement(TableColumnCell, null, o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom), React__default.createElement(TableColumnCell, null, o.from ? `${o.from}-${o.until}` : t('item.closed')))))));
|
|
7308
8397
|
};
|
|
7309
8398
|
|
|
7310
8399
|
const PhoneNumber = ({
|
|
7311
8400
|
phoneNumber
|
|
7312
8401
|
}) => {
|
|
8402
|
+
const {
|
|
8403
|
+
t
|
|
8404
|
+
} = reactI18next.useTranslation();
|
|
7313
8405
|
const [visible, setVisible] = React.useState(false);
|
|
7314
8406
|
const onClick = React.useCallback(() => !visible && setVisible(true), [visible]);
|
|
7315
|
-
return React__default.createElement(TableColumnRow, null, React__default.createElement(TableColumnCell, null,
|
|
8407
|
+
return React__default.createElement(TableColumnRow, null, React__default.createElement(TableColumnCell, null, t('other.phoneNumber')), React__default.createElement(TableColumnCell, null, visible ? React__default.createElement(ButtonInlineBold, {
|
|
7316
8408
|
as: "a",
|
|
7317
8409
|
href: `tel:${phoneNumber}`,
|
|
7318
|
-
title:
|
|
8410
|
+
title: t('other.callPhoneNumber', {
|
|
8411
|
+
phoneNumber
|
|
8412
|
+
}) || ''
|
|
7319
8413
|
}, React__default.createElement(ButtonContent, null, phoneNumber)) : React__default.createElement(ButtonInlineBold, {
|
|
7320
8414
|
onClick: onClick,
|
|
7321
|
-
title:
|
|
7322
|
-
}, React__default.createElement(ButtonContent, null,
|
|
8415
|
+
title: t('other.showPhoneNumber') || ''
|
|
8416
|
+
}, React__default.createElement(ButtonContent, null, t('other.showPhoneNumber')))));
|
|
7323
8417
|
};
|
|
7324
8418
|
|
|
7325
8419
|
const SettingsContext = React.createContext({});
|
|
@@ -7354,6 +8448,9 @@ const PlaceholderAction = styled__default.div`
|
|
|
7354
8448
|
const StaticMap = ({
|
|
7355
8449
|
position
|
|
7356
8450
|
}) => {
|
|
8451
|
+
const {
|
|
8452
|
+
t
|
|
8453
|
+
} = reactI18next.useTranslation();
|
|
7357
8454
|
const {
|
|
7358
8455
|
googleMapsApiKey,
|
|
7359
8456
|
googleMapsMarker
|
|
@@ -7375,12 +8472,12 @@ const StaticMap = ({
|
|
|
7375
8472
|
if (visible && googleMapsApiKey) {
|
|
7376
8473
|
return React__default.createElement(Wrapper$x, {
|
|
7377
8474
|
href: `http://maps.google.com/maps?q=${latitude},${longitude}`,
|
|
7378
|
-
title:
|
|
8475
|
+
title: t('item.showOnGoogleMaps'),
|
|
7379
8476
|
target: "_blank",
|
|
7380
8477
|
rel: "nofollow noopener noreferrer"
|
|
7381
8478
|
}, React__default.createElement(Image$3, {
|
|
7382
8479
|
src: `https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''}%7C${latitude},${longitude}&key=${googleMapsApiKey}`,
|
|
7383
|
-
alt:
|
|
8480
|
+
alt: t('item.googleMapsMapAlt')
|
|
7384
8481
|
}));
|
|
7385
8482
|
}
|
|
7386
8483
|
return React__default.createElement(Placeholder, {
|
|
@@ -7390,7 +8487,7 @@ const StaticMap = ({
|
|
|
7390
8487
|
onClick: onShowMap
|
|
7391
8488
|
}, React__default.createElement(PlaceholderAction, null, React__default.createElement(ButtonSecondary, {
|
|
7392
8489
|
as: "div"
|
|
7393
|
-
}, React__default.createElement(ButtonContent, null,
|
|
8490
|
+
}, React__default.createElement(ButtonContent, null, t('item.googleMapsPlaceholderInit')))));
|
|
7394
8491
|
};
|
|
7395
8492
|
|
|
7396
8493
|
const Branch = ({
|
|
@@ -7399,6 +8496,9 @@ const Branch = ({
|
|
|
7399
8496
|
displayBranchName
|
|
7400
8497
|
}) => {
|
|
7401
8498
|
var _branch$location, _branch$location2, _branch$location3, _branch$connections, _branch$location4, _branch$location5, _branch$location6, _branch$location7, _branch$contact;
|
|
8499
|
+
const {
|
|
8500
|
+
t
|
|
8501
|
+
} = reactI18next.useTranslation();
|
|
7402
8502
|
const [modal, setModal] = React.useState(false);
|
|
7403
8503
|
const openModal = React.useCallback(() => setModal(true), []);
|
|
7404
8504
|
const closeModal = React.useCallback(() => setModal(false), []);
|
|
@@ -7416,14 +8516,17 @@ const Branch = ({
|
|
|
7416
8516
|
onClose: closeModal
|
|
7417
8517
|
}), React__default.createElement(Repeat, null, React__default.createElement(H2, {
|
|
7418
8518
|
noMargin: true
|
|
7419
|
-
}, displayBranchName ?
|
|
7420
|
-
|
|
7421
|
-
})
|
|
8519
|
+
}, displayBranchName ? `${t('item.thisCarsIsLocatedAt')} ${branch.name}` : branch !== null && branch !== void 0 && (_branch$location = branch.location) !== null && _branch$location !== void 0 && _branch$location.city ? t('item.thisCarIsAvailableAtOurBranch', {
|
|
8520
|
+
location: branch === null || branch === void 0 || (_branch$location2 = branch.location) === null || _branch$location2 === void 0 ? void 0 : _branch$location2.city
|
|
8521
|
+
}) : t('item.contact'))), React__default.createElement(Repeat, null, React__default.createElement(StaticMap, {
|
|
8522
|
+
position: branch === null || branch === void 0 || (_branch$location3 = branch.location) === null || _branch$location3 === void 0 ? void 0 : _branch$location3.position
|
|
8523
|
+
})), ((branch === null || branch === void 0 || (_branch$connections = branch.connections) === null || _branch$connections === void 0 ? void 0 : _branch$connections.length) || 0) > 1 && React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.centralWarehouseCarDescriptionShort'), ' ', React__default.createElement(ButtonInline, {
|
|
7422
8524
|
as: "span",
|
|
7423
8525
|
role: "button",
|
|
7424
8526
|
onClick: openModal,
|
|
7425
|
-
inline: true
|
|
7426
|
-
|
|
8527
|
+
inline: true,
|
|
8528
|
+
title: t('item.clickHereToShowContactToAnotherBranch') || ''
|
|
8529
|
+
}, t('item.clickHereToShowContactToAnotherBranch')), "."))), React__default.createElement(Repeat, null, React__default.createElement(ProductPageContentLimit, null, React__default.createElement(Repeat, null, React__default.createElement(TableColumn, null, (branch === null || branch === void 0 || (_branch$location4 = branch.location) === null || _branch$location4 === void 0 ? void 0 : _branch$location4.streetAddress) && (branch === null || branch === void 0 || (_branch$location5 = branch.location) === null || _branch$location5 === void 0 ? void 0 : _branch$location5.city) && React__default.createElement(TableColumnRow, null, React__default.createElement(TableColumnCell, null, t('common.address')), React__default.createElement(TableColumnCell, null, React__default.createElement(ButtonInlineBold, null, React__default.createElement(ButtonContent, null, `${branch === null || branch === void 0 || (_branch$location6 = branch.location) === null || _branch$location6 === void 0 ? void 0 : _branch$location6.streetAddress}, ${branch === null || branch === void 0 || (_branch$location7 = branch.location) === null || _branch$location7 === void 0 ? void 0 : _branch$location7.city}`)))), (branch === null || branch === void 0 || (_branch$contact = branch.contact) === null || _branch$contact === void 0 ? void 0 : _branch$contact.phonenumber) && React__default.createElement(PhoneNumber, {
|
|
7427
8530
|
phoneNumber: formatPhonenumber(branch.contact.phonenumber)
|
|
7428
8531
|
}))), (branch === null || branch === void 0 ? void 0 : branch.openingHours) && React__default.createElement(Repeat, null, React__default.createElement(OpeningHours, {
|
|
7429
8532
|
openingHours: branch.openingHours
|
|
@@ -7579,8 +8682,8 @@ const useCentralStorage = vehicle => {
|
|
|
7579
8682
|
centralStorageId,
|
|
7580
8683
|
setCentralStorageId
|
|
7581
8684
|
} = React.useContext(CentralStorageContext);
|
|
7582
|
-
const connections = vehicle === null || vehicle === void 0
|
|
7583
|
-
const branchId = centralStorageId ? connections === null || connections === void 0
|
|
8685
|
+
const connections = vehicle === null || vehicle === void 0 || (_vehicle$branch = vehicle.branch) === null || _vehicle$branch === void 0 ? void 0 : _vehicle$branch.connections;
|
|
8686
|
+
const branchId = centralStorageId ? connections === null || connections === void 0 || (_connections$find = connections.find(x => x.id === centralStorageId)) === null || _connections$find === void 0 ? void 0 : _connections$find.id : undefined;
|
|
7584
8687
|
const {
|
|
7585
8688
|
data,
|
|
7586
8689
|
loading
|
|
@@ -7602,11 +8705,16 @@ const useCentralStorage = vehicle => {
|
|
|
7602
8705
|
};
|
|
7603
8706
|
};
|
|
7604
8707
|
|
|
7605
|
-
const Page404 = () =>
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
8708
|
+
const Page404 = () => {
|
|
8709
|
+
const {
|
|
8710
|
+
t
|
|
8711
|
+
} = reactI18next.useTranslation();
|
|
8712
|
+
return React__default.createElement(Page, null, React__default.createElement(PageSection, {
|
|
8713
|
+
large: true
|
|
8714
|
+
}, React__default.createElement(Container, null, React__default.createElement(H1, {
|
|
8715
|
+
noMargin: true
|
|
8716
|
+
}, t('other.error404')))));
|
|
8717
|
+
};
|
|
7610
8718
|
|
|
7611
8719
|
const PageLoading = () => React__default.createElement(Page, null, React__default.createElement(PageSection, {
|
|
7612
8720
|
large: true
|
|
@@ -7626,13 +8734,13 @@ class PropertyTreeCreator {
|
|
|
7626
8734
|
return ((_this$properties$prop2 = this.properties[propertyKey].category) === null || _this$properties$prop2 === void 0 ? void 0 : _this$properties$prop2.id) === categoryId;
|
|
7627
8735
|
};
|
|
7628
8736
|
this.propertiesWithSubCategory = propertyKey => {
|
|
7629
|
-
var _this$properties$prop3
|
|
7630
|
-
return !!((_this$properties$prop3 = this.properties[propertyKey].category) !== null && _this$properties$prop3 !== void 0 && (_this$properties$
|
|
8737
|
+
var _this$properties$prop3;
|
|
8738
|
+
return !!((_this$properties$prop3 = this.properties[propertyKey].category) !== null && _this$properties$prop3 !== void 0 && (_this$properties$prop3 = _this$properties$prop3.subCategory) !== null && _this$properties$prop3 !== void 0 && _this$properties$prop3.id);
|
|
7631
8739
|
};
|
|
7632
8740
|
this.propertiesWithoutSubCategory = propertyKey => !this.propertiesWithSubCategory(propertyKey);
|
|
7633
8741
|
this.hasSubCategoryWithId = (propertyKey, categoryId) => {
|
|
7634
|
-
var _this$properties$
|
|
7635
|
-
return ((_this$properties$
|
|
8742
|
+
var _this$properties$prop4;
|
|
8743
|
+
return ((_this$properties$prop4 = this.properties[propertyKey].category) === null || _this$properties$prop4 === void 0 || (_this$properties$prop4 = _this$properties$prop4.subCategory) === null || _this$properties$prop4 === void 0 ? void 0 : _this$properties$prop4.id) === categoryId;
|
|
7636
8744
|
};
|
|
7637
8745
|
this.properties = properties;
|
|
7638
8746
|
}
|
|
@@ -7816,203 +8924,19 @@ const sort = tree => {
|
|
|
7816
8924
|
*/
|
|
7817
8925
|
const deepCopy = object => JSON.parse(JSON.stringify(object));
|
|
7818
8926
|
|
|
7819
|
-
const HINTS = Object.freeze({
|
|
7820
|
-
abs: 'Förhindrar att bromsarna låser sig och reducerar bromssträckan.',
|
|
7821
|
-
acceleration: 'Antal sekunder som bilen behöver för att ta sig till 100 km/h.',
|
|
7822
|
-
adultOccupantNCAP: 'Poängen för skydd av vuxna bestäms genom tester av frontalkrockar, sidokrockar och whiplash som utförs för att bedöma det skydd som bilen erbjuder för vuxna förare och passagerare samt bedöma tillgängliga åtgärder för snabb och säker räddning.',
|
|
7823
|
-
aeb: 'Bilen är utrustad med ett bromssystem som hjälper dig att undvika olyckor. Beroende på vilken nivå av AEB bilen är utrustad med kan de upptäcka även cyklister och fotgängare, främst i lägre hastigheter i stadsmiljö men även vid högre hastigheter och landsvägskörning. Bilen förvarnar föraren om potentiell fara och hjälper även till att bromsa för att säkerställa att olyckor undviks så långt det går.',
|
|
7824
|
-
airbagCutOffSwitch: 'Det går att koppla ur krockkudden på passagerarsidan för att kunna sätta dit en barnstol.',
|
|
7825
|
-
airbagDriver: 'Krockkudde för föraren.',
|
|
7826
|
-
airbagFrontal: '',
|
|
7827
|
-
airbagFrontalHead: '',
|
|
7828
|
-
airbagKnees: '',
|
|
7829
|
-
airbagPassenger: 'Krockkudde för passagerare.',
|
|
7830
|
-
airbagSideChest: '',
|
|
7831
|
-
airbagSidePelvis: '',
|
|
7832
|
-
alcolock: 'För att kunna starta bilen behövs ett blåstest som mäter alkoholnivån.',
|
|
7833
|
-
androidAuto: 'Bilen har stöd för dig med Androidtelefon att koppla upp den direkt till bilen. Då följer bland annat navigering, meddelanden samt musiken med från telefonen.',
|
|
7834
|
-
annualBonus: 'Det här fordonet är berättigat till klimatbonus. Bonusen delas ut till den första registrerade ägaren efter 6 månader. Klicka <a target="_blank" rel="noopener noreferrer" title="Läs mer om bonus/malus" href="https://www.transportstyrelsen.se/bonusmalus">här</a> för att läsa mer.',
|
|
7835
|
-
annualMalus: 'Bilen har en förhöjd skatt de tre första åren och därefter gäller ordinarie skatt.',
|
|
7836
|
-
annualTax: 'Summan fordonsskatt som måste betalas varje år.',
|
|
7837
|
-
antiTheftAlarm: 'Bilen har ett larmsystem vid försök till inbrott.',
|
|
7838
|
-
appConnect: 'Med App Connect kan du koppla din mobiltelefon så att anpassade appar syns direkt i bilens display. Fungerar både för iPhone och Android.',
|
|
7839
|
-
appleCarPlay: 'Bilen har stöd för Apple i bilens inbyggda display, så du enkelt kan koppla upp din telefon och prata med bilen med hjälp av Siri.',
|
|
7840
|
-
aux: 'Bilen har en AUX-ingång, för att exempelvis spela musik från en telefon.',
|
|
7841
|
-
auxiliaryLamps: '',
|
|
7842
|
-
batteryCapacity: 'Anger hur många kilowatt-timmar batteriet innehar.',
|
|
7843
|
-
batteryWarrantyDistance: '',
|
|
7844
|
-
batteryWarrantyTime: '',
|
|
7845
|
-
blindSpotWarner: 'En varningslampa indikerar i ytterbackspegeln när ett fordon befinner sig i döda vinkeln.',
|
|
7846
|
-
bluetooth: 'Bilen kan ansluta enheter via Bluetooth, för exempelvis mobilsamtal eller musik.',
|
|
7847
|
-
bluetoothAudio: 'Bilen kan ansluta enheter via Bluetooth för att lyssna på musik.',
|
|
7848
|
-
bluetoothPhone: 'Bilen kan ansluta enheter via Bluetooth för telefonsamtal.',
|
|
7849
|
-
brakeAssistance: 'Säkerhetssystem som kan hjälpa till att bromsa och undvika olyckor.',
|
|
7850
|
-
carDamageWarrantyDistance: '',
|
|
7851
|
-
carDamageWarrantyTime: '',
|
|
7852
|
-
centerDisplay: 'Bilen har en skärm mitt i bilen, mellan förare och passagerare.',
|
|
7853
|
-
centralLocking: 'Elektriskt låssystem, som gör att alla dörrar låses och öppnas samtidigt.',
|
|
7854
|
-
chargeTimeNormal: 'Hur lång tid tar det att ladda bilen i ett standard elnät.',
|
|
7855
|
-
chargeTimeQuick: 'Hur lång tid tar det att ladda bilen med en snabbladdare anpassad för laddning av elbilar.',
|
|
7856
|
-
chassis: 'Vilken typ/form bilen har.',
|
|
7857
|
-
childOccupantNCAP: 'Bedömningen av skyddet av barn täcker tre viktiga aspekter: det skydd som erbjuds av bilbarnstolar i frontal- och sidokrockstest; fordonets möjligheter att inhysa bilbarnstolar med olika storlek och utformning; och tillgängliga åtgärder för säker transport av barn i bilen.',
|
|
7858
|
-
childSafetyLocks: 'Dörrarna låses automatiskt när man kör iväg, så att de inte ska öppnas under körning.',
|
|
7859
|
-
childSeatBeltPassenger: 'Passagerarsätet har utfällbar sittkudde för barn.',
|
|
7860
|
-
childSeatBeltRear: 'Baksätet har utfällbar sittkudde för barn.',
|
|
7861
|
-
co2: 'Anger hur mycket koldioxid fordonet släpper ut enligt mätmetoden NEDC baserat på teoretisk körning.',
|
|
7862
|
-
colorName: '',
|
|
7863
|
-
combinedEmissionsWLTP: 'Anger hur mycket koldioxid fordonet släpper ut enligt mätmetoden WLTP baserat på verklig körning.',
|
|
7864
|
-
cruiseControl: 'Hjälpmedel som håller bilens hastighet automatiskt.',
|
|
7865
|
-
curtainAirbags: '',
|
|
7866
|
-
displacementCC: 'Den sammanlagda volymen av motorns cylindrar. Mäts i kubikcentimeter.',
|
|
7867
|
-
displacementLitres: 'Den sammanlagda volymen av motorns cylindrar. Mäts i liter.',
|
|
7868
|
-
driverAlertnessDetection: 'Varningssignal uppstår när körningssättet tyder på bristande uppmärksamhet.',
|
|
7869
|
-
drivingWheel: 'Vilka hjul som motorn ger kraft till och snurrar.',
|
|
7870
|
-
electricalEngine: '',
|
|
7871
|
-
electricalRange: 'Räckvidd enligt mätmetoden WLTP baserat på verklig körning',
|
|
7872
|
-
electricalRangeEPA: 'Räckvidd enligt den amerikanska mätmetoden EPA. Enligt många den allra strängaste metoden.',
|
|
7873
|
-
electricalRangeNEDC: 'Räckvidd enligt mätmetoden NEDC baserat på teoretisk körning.',
|
|
7874
|
-
electricalRangeWLTP: 'Räckvidd enligt mätmetoden WLTP baserat på verklig körning.',
|
|
7875
|
-
electricalSeatDriver: 'Bilens förarstol går att manövrera med el för mjukare och mer precis positionering.',
|
|
7876
|
-
electricalSeatPassenger: 'Bilens passagerarstol går att manövrera med el.',
|
|
7877
|
-
emergencyCalling: 'Bilen kan automatiskt larma SOS vid en olycka.',
|
|
7878
|
-
engineConfiguration: 'Anger fordonets typ av motor, vilken typ av cylindrar den innehar.',
|
|
7879
|
-
engineCylinders: "Antalet ger en indikation på motorns storlek. Ett 'vanligt' antal ligger på 4 st.",
|
|
7880
|
-
engineName: '',
|
|
7881
|
-
engineVolume: '',
|
|
7882
|
-
enrichmentProviderEquipPackages: '',
|
|
7883
|
-
enrichmentProviderExteriorPackages: '',
|
|
7884
|
-
enrichmentProviderInteriorPackages: '',
|
|
7885
|
-
enrichmentProviderTrimPackages: '',
|
|
7886
|
-
environmentClass: 'Används för att ställa krav på fordonets utsläpp.',
|
|
7887
|
-
finish: '',
|
|
7888
|
-
fuelConsumptionCityDriving: 'Bränsleförbrukning vid stadskörning.',
|
|
7889
|
-
fuelConsumptionCountryRoadDriving: 'Bränsleförbrukning vid landsvägskörning.',
|
|
7890
|
-
fuelConsumptionMixedDrivingNEDC: 'Bränsleförbrukning vid blandad körning.',
|
|
7891
|
-
fuelConsumptionMixedDrivingWLTP: 'Bränsleförbrukning vid blandad körning.',
|
|
7892
|
-
fuelConsumptionMixedDriving: 'Bränsleförbrukning vid blandad körning. Dvs. stadskörning och landsvägskörning under en och samma färd.',
|
|
7893
|
-
fuelType: 'Vad bilen ska tankas med och drivs av.',
|
|
7894
|
-
gearboxName: '',
|
|
7895
|
-
gestureControls: 'Mittskärmen går att manövrera med rörelser.',
|
|
7896
|
-
gps: 'Bilen är utrustad med navigationsutrustning så du enkelt kan ta dig dit du ska.',
|
|
7897
|
-
grossWeight: 'Anger bilens vikt inklusive max tillåten lastvikt.',
|
|
7898
|
-
groundClearence: 'Avståndet mellan bilens undersida och marken.',
|
|
7899
|
-
hasAutomaticGearbox: '',
|
|
7900
|
-
hdmi: 'Bilen har en HDMI-port.',
|
|
7901
|
-
headRoomFront: 'Lägsta takhöjden i framsätet.',
|
|
7902
|
-
headRoomRear: 'Lägsta takhöjden i baksätet.',
|
|
7903
|
-
headUpDisplay: 'Bilen är utrustad med en projicerad display i ditt synfält, så du kan se exempelvis nuvarande hastighet utan att behöva vända bort blicken från vägen.',
|
|
7904
|
-
heatedSteeringWheel: '',
|
|
7905
|
-
height: 'Avståndet från bilens undersida till översida.',
|
|
7906
|
-
hybridComponentsWarrantyDistance: '',
|
|
7907
|
-
hybridComponentsWarrantyTime: '',
|
|
7908
|
-
interiorMaterial: 'Material på interiören i bilen, dvs detaljer i bilens insida.',
|
|
7909
|
-
isofixRearSeat: 'Universell fästanordning för barnstolar.',
|
|
7910
|
-
keylessEntry: 'Bilens dörrar och bagage öppnas när den känner av att bilnyckeln är i närheten och du tar tag i handtaget. Du behöver därmed inte använda nyckeln i sig för att öppna bilens dörrar. ',
|
|
7911
|
-
keylessStart: 'Bilen startas med ett knapptryck istället för att bilnyckeln behöver vridas om. Det räcker med att bilnyckeln befinner sig i bilen (kan du mao ha den i fickan hela bilresan).',
|
|
7912
|
-
laneAssistance: 'Funktion som hjälper till att hålla bilen inom körfältet.',
|
|
7913
|
-
legRoomFront: 'Avstånd mellan instrumentpanelen och framsäte.',
|
|
7914
|
-
legRoomRear: 'Avstånd mellan framsätets rygg och baksätet',
|
|
7915
|
-
length: 'Avståndet från bilens baksida till framsida.',
|
|
7916
|
-
lowBeam: '',
|
|
7917
|
-
mainBeam: '',
|
|
7918
|
-
mainBeamAssistance: 'Bilen slår på och av helljuset per automatik, så du slipper göra det själv.',
|
|
7919
|
-
manufactureYear: 'Året bilen tillverkades.',
|
|
7920
|
-
massage: 'Bilens säte har inbyggd massage.',
|
|
7921
|
-
maxLoadWeight: '',
|
|
7922
|
-
maxRoofWeight: 'Hur många kilo last taket klarar av.',
|
|
7923
|
-
maxSpeed: 'Högsta hastigheten som bilen går att köra.',
|
|
7924
|
-
maxTrailerLoadBraked8Percent: '',
|
|
7925
|
-
maxTrailerLoadUnbraked: 'Vikten du får dra på ett släp som inte är utrustat med egna bromsar.',
|
|
7926
|
-
mildHybrid: 'Bilen är utrustad med en elmotor som fungerar både som startmotor och generator och stöttar förbränningsmotorn, vilket ger lägre bränsleförbrukning och därmed minskade utsläppsnivåer.',
|
|
7927
|
-
mileage: 'Antal mil som bilen har körts. I bilen anges det i kilometer istället.',
|
|
7928
|
-
modelName: 'Vilket utförande av bilmodellen det är.',
|
|
7929
|
-
modelYear: 'Modellår sätts av tillverkaren. Handlaren ändrar ibland modellåret för att matcha transportstyrelsens definition för <i>årsmodell</i>. Definitionen för årsmodell innebär att bilar tillverkade andra halvan av året får nästa års modellår.',
|
|
7930
|
-
ncapStar: 'Universellt säkerhetsbetyg för bilar, fler stjärnor innebär högre säkerhet. Skalan går från 0 till 5 där 5 är det högsta betyget. Så här beskriver Euro NCAP själva att slutbetyget ska utläsas: <br/>' + '<br/>' + '5 stjärnor: Som helhet utmärkt prestanda inom krockskydd och väl utrustad med omfattande teknik för att undvika kollisioner<br/><br/>' + '4 stjärnor: Som helhet bra prestanda inom krockskydd, det kan finnas ytterligare teknik för att undvika kollisioner<br/><br/>' + '3 stjärnor: Åtminstone genomsnittligt passagerarskydd men inte alltid utrustad med de senaste funktionerna för att undvika kollisioner<br/><br/>' + '2 stjärnor: Nominellt krockskydd men saknar teknik för att undvika kollisioner<br/><br/>' + '1 stjärna: Marginellt krockskydd och viss teknik för att undvika kollisioner<br/><br/>' + '0 stjärnor: Uppfyller standarder för typgodkännande så att fordonet får säljas men saknar kritisk modern säkerhetsteknik.',
|
|
7931
|
-
ncapYear: 'Året som bilen säkerhets- och krocktestades.',
|
|
7932
|
-
newVehicleWarrantyDistance: '',
|
|
7933
|
-
newVehicleWarrantyTime: '',
|
|
7934
|
-
noiseReducingWindows: 'Bilens rutor är ljudisolerade för högre komfort.',
|
|
7935
|
-
numberOfGears: 'Antal växlar i växellådan.',
|
|
7936
|
-
numberOfSpeakers: 'Anger totalt antal högtalare i bilen, ju fler högtalare desto häftigare ljud!',
|
|
7937
|
-
numberOfUSBPorts: '',
|
|
7938
|
-
otherAirbags: '',
|
|
7939
|
-
parkingAssistance: 'Funktion som assisterar vid fickparkering.',
|
|
7940
|
-
parkingSensorsFront: 'Ljudsignal som indikerar när bilens främre del närmar sig ett objekt.',
|
|
7941
|
-
parkingSensorsRear: 'Ljudsignal som indikerar när bilens bakre del närmar sig ett objekt.',
|
|
7942
|
-
pedestrianNCAP: 'Euro NCAP bedömer hur väl bilar skyddar sina passagerare men testar även hur bilar skyddar oskyddade trafikanter – fotgängare och cyklister – som de kan kollidera med.',
|
|
7943
|
-
preHeater: 'Värmer motorn när det är kallt ute för att underlätta start.',
|
|
7944
|
-
rainSensors: 'Vindrutetorkarna aktiveras och anpassas automatiskt i förhållande till regnet.',
|
|
7945
|
-
remoteStart: 'Möjliggör att du kan starta bilens motor med hjälp av exempelvis en app i telefonen',
|
|
7946
|
-
rimSize: 'Fälgstorlek angivet i tum.',
|
|
7947
|
-
roofColor: 'Någon del av bilen, ex taket skiljer sig i kulör mot övriga bilen.',
|
|
7948
|
-
roofRailing: 'Bilen har takreling som du kan fästa takräcken i.',
|
|
7949
|
-
safetyAssistNCAP: 'Poängen för förarstödsystem bestäms genom tester av de viktigaste förarstöd teknikerna som stöder säker körning för att undvika och begränsa olyckor.',
|
|
7950
|
-
seats: 'Antal personer som får åka i bilen.',
|
|
7951
|
-
segment: 'Vilken typ av bil det handlar om - t.ex. familjebil',
|
|
7952
|
-
serviceWeight: 'Anger hur mycket bilen väger med en passagerare som väger ca 75kg.',
|
|
7953
|
-
shoulderRoomFront: 'Avstånd i bredd för bilens framsäte.',
|
|
7954
|
-
shoulderRoomRear: 'Avstånd i bredd för bilens baksäte.',
|
|
7955
|
-
sideMirrorFolding: 'Bilens yttre backspeglar går att automatiskt fälla in, exempelvis bra på trånga parkeringar.',
|
|
7956
|
-
speakerBrand: '',
|
|
7957
|
-
startAndStop: 'Bilens motor stoppas när bilen står still för att minska utsläppen.',
|
|
7958
|
-
steeringWheelMaterial: '',
|
|
7959
|
-
sunRoof: '',
|
|
7960
|
-
tankVolume: 'Antal liter bränsle som ryms i tanken.',
|
|
7961
|
-
timingBeltServiceIntervalDistance: 'Bilen är utrustad med kamrem som måste bytas vid olika distansintervall.',
|
|
7962
|
-
timingBeltServiceIntervalTime: 'Bilen är utrustad med kamrem som måste bytas vid olika tidsintervall.',
|
|
7963
|
-
tintedWindows: 'Bilens rutor har en mörkare toning.',
|
|
7964
|
-
tiresFront: 'Däckdimension fram. Presenteras i höjd/bredd och inom ett spann. Däcken som sitter på bilen måste alltså falla inom det spannet.',
|
|
7965
|
-
tiresRear: 'Däckdimension bak. Presenteras i höjd/bredd och inom ett spann. Däcken som sitter på bilen måste alltså falla inom det spannet.',
|
|
7966
|
-
torque: 'Bilens vridkraft. Hög siffra möjliggör att t.ex. dra tunga släp. Dieselmotorer har generellt mer vridmoment.',
|
|
7967
|
-
touchScreen: 'Mittskärmen i bilen är en pekskärm.',
|
|
7968
|
-
towHitch: '',
|
|
7969
|
-
towHitchDetachable: '',
|
|
7970
|
-
towHitchFoldable: '',
|
|
7971
|
-
trafficSignRecognition: 'Bilen är utrustad med kameror som läser av gällande trafikskyltar.',
|
|
7972
|
-
trailerTotalWeightB: 'Vikten man får dra med släp och ett vanligt B-körkort.',
|
|
7973
|
-
transmissionKnobMaterial: '',
|
|
7974
|
-
trcSystem: 'Får bilen att skicka kraft till hjulet som har bästa kontakt med underlaget.',
|
|
7975
|
-
tripComputer: 'I färddatorn som sitter framför ratten kan du se lite information om motorn och bränsleförbrukningen, bland annat kan du ofta läsa ut den återstående körsträckan på nuvarande bränslevolym.',
|
|
7976
|
-
trunkDepth: '',
|
|
7977
|
-
trunkHeight: '',
|
|
7978
|
-
trunkOutlet: '',
|
|
7979
|
-
trunkSpace: 'Volym på bagageutrymmet med uppfällda säten. Det mäts i liter.',
|
|
7980
|
-
trunkSpaceFront: '',
|
|
7981
|
-
trunkWidth: '',
|
|
7982
|
-
typeOfElectricCar: 'Anger om bilen drivs av el eller om den är en hybrid av el och bränsle.',
|
|
7983
|
-
upholstery: '',
|
|
7984
|
-
usb: 'Bilen är utrustad med en USB-port',
|
|
7985
|
-
ventilatedSeats: 'Bilens stolar har ventilation inbyggd, bland annat bra för att få bort fukt från sätena.',
|
|
7986
|
-
wheelBase: 'Avståndet mellan fram- och bakhjul.',
|
|
7987
|
-
wiFi: 'Bilen är utrustad med ett internt WIFI som du kan koppla upp dina egna enheter mot.',
|
|
7988
|
-
width: 'Avståndet mellan bilens båda yttre långsidor.',
|
|
7989
|
-
windowLifts: '',
|
|
7990
|
-
wirelessPhoneCharger: 'Bilen är utrustad med induktionsladdare, så att telefoner som stödjer trådlös laddning kan laddas i bilen utan laddningssladd.'
|
|
7991
|
-
});
|
|
7992
|
-
const enrichWithHint = properties => {
|
|
7993
|
-
const clone = deepCopy(properties);
|
|
7994
|
-
const keys = Object.keys(clone);
|
|
7995
|
-
keys.forEach(key => {
|
|
7996
|
-
if (!!HINTS[key]) {
|
|
7997
|
-
clone[key].hint = HINTS[key];
|
|
7998
|
-
}
|
|
7999
|
-
});
|
|
8000
|
-
return clone;
|
|
8001
|
-
};
|
|
8002
|
-
|
|
8003
8927
|
const TEXT_TYPE = 'text';
|
|
8004
8928
|
const NUMBER_TYPE = 'number';
|
|
8005
8929
|
const BASIC_CATEGORY = Object.freeze({
|
|
8006
8930
|
id: 1000,
|
|
8007
|
-
name: '
|
|
8931
|
+
name: i18next.t('category.basic'),
|
|
8008
8932
|
subCategory: null
|
|
8009
8933
|
});
|
|
8010
8934
|
const ENGINE_SUBCATEGORY = Object.freeze({
|
|
8011
8935
|
id: 6,
|
|
8012
|
-
name: '
|
|
8936
|
+
name: i18next.t('category.engineAndPerformance'),
|
|
8013
8937
|
subCategory: {
|
|
8014
8938
|
id: 54,
|
|
8015
|
-
name: '
|
|
8939
|
+
name: i18next.t('subCategory.engine'),
|
|
8016
8940
|
subCategory: null
|
|
8017
8941
|
}
|
|
8018
8942
|
});
|
|
@@ -8029,6 +8953,12 @@ class PropertyBuilder {
|
|
|
8029
8953
|
this.name = name;
|
|
8030
8954
|
return this;
|
|
8031
8955
|
}
|
|
8956
|
+
withHint(hint) {
|
|
8957
|
+
if (hint) {
|
|
8958
|
+
this.hint = hint;
|
|
8959
|
+
}
|
|
8960
|
+
return this;
|
|
8961
|
+
}
|
|
8032
8962
|
withValue(value) {
|
|
8033
8963
|
this.value = value;
|
|
8034
8964
|
return this;
|
|
@@ -8059,34 +8989,36 @@ class PropertyBuilder {
|
|
|
8059
8989
|
var addCustomProperties = ((item, properties) => {
|
|
8060
8990
|
const newProperties = deepCopy(properties);
|
|
8061
8991
|
if (!!item.manufacturer) {
|
|
8062
|
-
newProperties.manufacturer = new PropertyBuilder().withName('
|
|
8992
|
+
newProperties.manufacturer = new PropertyBuilder().withName(i18next.t('customProperty.manufacturer.displayName')).withValue(item.manufacturer).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8063
8993
|
}
|
|
8064
8994
|
if (!!item.modelSeries) {
|
|
8065
|
-
newProperties.modelSeries = new PropertyBuilder().withName('
|
|
8995
|
+
newProperties.modelSeries = new PropertyBuilder().withName(i18next.t('customProperty.modelSeries.displayName')).withValue(item.modelSeries).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8066
8996
|
}
|
|
8067
8997
|
if (!!item.modelName) {
|
|
8068
|
-
newProperties.modelName = new PropertyBuilder().withName('
|
|
8998
|
+
newProperties.modelName = new PropertyBuilder().withName(i18next.t('customProperty.modelName.displayName')).withValue(item.modelName).withHint(i18next.t('customProperty.modelName.hint')).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8069
8999
|
}
|
|
8070
9000
|
if (!!item.modelYear) {
|
|
8071
|
-
newProperties.modelYear = new PropertyBuilder().withName('
|
|
9001
|
+
newProperties.modelYear = new PropertyBuilder().withName(i18next.t('customProperty.modelYear.displayName')).withValue(item.modelYear).withHint(i18next.t('customProperty.modelYear.hint')).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8072
9002
|
}
|
|
8073
9003
|
if (!!item.manufactureYear) {
|
|
8074
|
-
newProperties.manufactureYear = new PropertyBuilder().withName('
|
|
9004
|
+
newProperties.manufactureYear = new PropertyBuilder().withName(i18next.t('customProperty.manufactureYear.displayName')).withValue(item.manufactureYear).withHint(i18next.t('customProperty.manufactureYear.hint')).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8075
9005
|
}
|
|
8076
|
-
if (
|
|
8077
|
-
newProperties.mileage = new PropertyBuilder().withName('
|
|
9006
|
+
if (item.odometerReading) {
|
|
9007
|
+
newProperties.mileage = new PropertyBuilder().withName(i18next.t('customProperty.odometer.displayName')).withValue(item.odometerReading.value).withHint(i18next.t('customProperty.odometer.hint')).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).withUnit(i18next.t(`odometer.${item.odometerReading.unit}`)).build();
|
|
9008
|
+
} else if (!!item.mileage) {
|
|
9009
|
+
newProperties.mileage = new PropertyBuilder().withName(i18next.t('customProperty.odometer.displayName')).withValue(item.mileage).withHint(i18next.t('customProperty.odometer.hint')).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).withUnit(i18next.t('odometer.ScandinavianMile')).build();
|
|
8078
9010
|
}
|
|
8079
9011
|
if (!!item.gearboxType) {
|
|
8080
|
-
newProperties.gearboxType = new PropertyBuilder().withName('
|
|
9012
|
+
newProperties.gearboxType = new PropertyBuilder().withName(i18next.t('customProperty.gearboxType.displayName')).withValue(item.gearboxType).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8081
9013
|
}
|
|
8082
9014
|
if (!!item.registrationNumber) {
|
|
8083
|
-
newProperties.registrationNumber = new PropertyBuilder().withName('
|
|
9015
|
+
newProperties.registrationNumber = new PropertyBuilder().withName(i18next.t('customProperty.registrationNumber.displayName')).withValue(item.registrationNumber).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8084
9016
|
}
|
|
8085
9017
|
if (!!item.fuelType) {
|
|
8086
|
-
newProperties.fuelType = new PropertyBuilder().withName('
|
|
9018
|
+
newProperties.fuelType = new PropertyBuilder().withName(i18next.t('customProperty.fuelType.displayName')).withValue(item.fuelType).withHint(i18next.t('customProperty.fuelType.hint')).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
|
|
8087
9019
|
}
|
|
8088
9020
|
if (item.enginePower) {
|
|
8089
|
-
newProperties.enginePower = new PropertyBuilder().withName('
|
|
9021
|
+
newProperties.enginePower = new PropertyBuilder().withName(i18next.t('customProperty.enginePower.displayName')).withValue(item.enginePower).withUnit(i18next.t('customProperty.enginePower.unit')).withType(NUMBER_TYPE).withCategory(ENGINE_SUBCATEGORY).build();
|
|
8090
9022
|
}
|
|
8091
9023
|
return newProperties;
|
|
8092
9024
|
});
|
|
@@ -8142,12 +9074,12 @@ const TableListBooleanNeg = styled__default.div`
|
|
|
8142
9074
|
const formatValue = (value, unit) => {
|
|
8143
9075
|
if (typeof value === 'boolean') {
|
|
8144
9076
|
return value ? React__default.createElement(TableListBooleanPos, {
|
|
8145
|
-
title:
|
|
8146
|
-
}, React__default.createElement(SrOnly, null,
|
|
9077
|
+
title: i18next.t('common.yes') || ''
|
|
9078
|
+
}, React__default.createElement(SrOnly, null, i18next.t('common.yes')), React__default.createElement(IconCheck, {
|
|
8147
9079
|
block: true
|
|
8148
9080
|
})) : React__default.createElement(TableListBooleanNeg, {
|
|
8149
|
-
title:
|
|
8150
|
-
}, React__default.createElement(SrOnly, null,
|
|
9081
|
+
title: i18next.t('common.no') || ''
|
|
9082
|
+
}, React__default.createElement(SrOnly, null, i18next.t('common.no')), React__default.createElement(IconCancel, {
|
|
8151
9083
|
block: true
|
|
8152
9084
|
}));
|
|
8153
9085
|
}
|
|
@@ -8165,13 +9097,18 @@ const MetadataItem = ({
|
|
|
8165
9097
|
value,
|
|
8166
9098
|
unit
|
|
8167
9099
|
}) => {
|
|
9100
|
+
const {
|
|
9101
|
+
t
|
|
9102
|
+
} = reactI18next.useTranslation();
|
|
8168
9103
|
const [foldout, setFoldout] = React.useState(false);
|
|
8169
9104
|
const onToggleFoldout = React.useCallback(() => setFoldout(!foldout), [foldout]);
|
|
8170
9105
|
const presentedValue = formatValue(value, unit);
|
|
8171
9106
|
return React__default.createElement(TableListItem, null, React__default.createElement(TableListKey, null, hint ? React__default.createElement(ButtonInline, {
|
|
8172
9107
|
onClick: onToggleFoldout,
|
|
8173
|
-
title:
|
|
8174
|
-
|
|
9108
|
+
title: t('item.moreInfoAboutSubject', {
|
|
9109
|
+
subject: name
|
|
9110
|
+
}) || ''
|
|
9111
|
+
}, name) : name), React__default.createElement(TableListValue, null, value !== undefined ? presentedValue : t('item.dataNotAvailable')), hint && foldout && React__default.createElement(Modal, {
|
|
8175
9112
|
title: name,
|
|
8176
9113
|
onClose: onToggleFoldout
|
|
8177
9114
|
}, React__default.createElement(Content$2, {
|
|
@@ -8296,24 +9233,23 @@ const PropertySet = ({
|
|
|
8296
9233
|
if (!propertySet) {
|
|
8297
9234
|
return undefined;
|
|
8298
9235
|
}
|
|
8299
|
-
|
|
8300
|
-
|
|
8301
|
-
const enrichedProperties = enrichWithHint(newProperties);
|
|
9236
|
+
const newProperties = removeProperties(propertySet);
|
|
9237
|
+
const enrichedProperties = addCustomProperties(vehicleData, newProperties);
|
|
8302
9238
|
const tree = new PropertyTreeCreator(enrichedProperties).create();
|
|
8303
9239
|
sort(tree);
|
|
8304
9240
|
return tree;
|
|
8305
9241
|
}, [propertySet]);
|
|
8306
9242
|
React.useEffect(() => {
|
|
8307
9243
|
var _mappedProperties$cat;
|
|
8308
|
-
const categories = (mappedProperties === null || mappedProperties === void 0
|
|
9244
|
+
const categories = (mappedProperties === null || mappedProperties === void 0 || (_mappedProperties$cat = mappedProperties.categories) === null || _mappedProperties$cat === void 0 ? void 0 : _mappedProperties$cat.length) !== undefined ? mappedProperties === null || mappedProperties === void 0 ? void 0 : mappedProperties.categories : undefined;
|
|
8309
9245
|
if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {
|
|
8310
9246
|
setActiveCategoryId(categories[0].id);
|
|
8311
9247
|
}
|
|
8312
9248
|
}, [mappedProperties]);
|
|
8313
9249
|
const onTab = React.useCallback(id => setActiveCategoryId(parseInt(id, 10)), []);
|
|
8314
|
-
const activeCategory = mappedProperties === null || mappedProperties === void 0
|
|
9250
|
+
const activeCategory = mappedProperties === null || mappedProperties === void 0 || (_mappedProperties$cat2 = mappedProperties.categories) === null || _mappedProperties$cat2 === void 0 ? void 0 : _mappedProperties$cat2.find(category => category.id === activeCategoryId);
|
|
8315
9251
|
return React__default.createElement(React__default.Fragment, null, React__default.createElement(Repeat, null, React__default.createElement(Tabs, {
|
|
8316
|
-
tabs: (mappedProperties === null || mappedProperties === void 0
|
|
9252
|
+
tabs: (mappedProperties === null || mappedProperties === void 0 || (_mappedProperties$cat3 = mappedProperties.categories) === null || _mappedProperties$cat3 === void 0 ? void 0 : _mappedProperties$cat3.map(category => ({
|
|
8317
9253
|
name: `${category.id}`,
|
|
8318
9254
|
displayName: category.name
|
|
8319
9255
|
}))) || [],
|
|
@@ -8327,10 +9263,15 @@ const PropertySet = ({
|
|
|
8327
9263
|
|
|
8328
9264
|
const DemoCarModal = ({
|
|
8329
9265
|
onClose
|
|
8330
|
-
}) =>
|
|
8331
|
-
|
|
8332
|
-
|
|
8333
|
-
}
|
|
9266
|
+
}) => {
|
|
9267
|
+
const {
|
|
9268
|
+
t
|
|
9269
|
+
} = reactI18next.useTranslation();
|
|
9270
|
+
return React__default.createElement(Modal, {
|
|
9271
|
+
title: t('item.demoCar'),
|
|
9272
|
+
onClose: onClose
|
|
9273
|
+
}, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.demoCarDescription'))));
|
|
9274
|
+
};
|
|
8334
9275
|
|
|
8335
9276
|
const PdfListItem = styled__default.li.attrs(() => ({
|
|
8336
9277
|
className: 'wayke__theme wayke__color--primary-text'
|
|
@@ -8400,12 +9341,18 @@ const translateContentType = document => {
|
|
|
8400
9341
|
const PdfDownloadItem = ({
|
|
8401
9342
|
document
|
|
8402
9343
|
}) => {
|
|
9344
|
+
const {
|
|
9345
|
+
t
|
|
9346
|
+
} = reactI18next.useTranslation();
|
|
8403
9347
|
const contentType = React.useMemo(() => translateContentType(document), [document]);
|
|
8404
9348
|
return React__default.createElement(PdfListItem, null, React__default.createElement(PdfListInner, null, React__default.createElement(PdfColumn, null, React__default.createElement(PdfTitle, null, document.name), React__default.createElement(PdfSubtitle, null, contentType)), React__default.createElement(PdfColumn, null, React__default.createElement(PdfLink, {
|
|
8405
9349
|
href: document.url,
|
|
8406
9350
|
rel: "noopener noreferrer nofollow",
|
|
8407
|
-
target: "_blank"
|
|
8408
|
-
|
|
9351
|
+
target: "_blank",
|
|
9352
|
+
title: t('other.openDocument', {
|
|
9353
|
+
document: document.name
|
|
9354
|
+
})
|
|
9355
|
+
}, t('common.open')))));
|
|
8409
9356
|
};
|
|
8410
9357
|
const DocumentList = ({
|
|
8411
9358
|
documents
|
|
@@ -8415,9 +9362,9 @@ const DocumentList = ({
|
|
|
8415
9362
|
})));
|
|
8416
9363
|
|
|
8417
9364
|
const Translation = {
|
|
8418
|
-
'tyre-label': '
|
|
8419
|
-
'content declaration': '
|
|
8420
|
-
other: '
|
|
9365
|
+
'tyre-label': i18next.t('item.documentTypes.tireEnergyDeclaration'),
|
|
9366
|
+
'content declaration': i18next.t('item.documentTypes.goodsDeclaration'),
|
|
9367
|
+
other: i18next.t('item.documentTypes.other')
|
|
8421
9368
|
};
|
|
8422
9369
|
const SortOrder = {
|
|
8423
9370
|
'tyre-label': 2,
|
|
@@ -8427,6 +9374,9 @@ const SortOrder = {
|
|
|
8427
9374
|
const Documents = ({
|
|
8428
9375
|
documents
|
|
8429
9376
|
}) => {
|
|
9377
|
+
const {
|
|
9378
|
+
t
|
|
9379
|
+
} = reactI18next.useTranslation();
|
|
8430
9380
|
const categorised = documents.reduce((prev, curr) => {
|
|
8431
9381
|
const index = prev.findIndex(x => x.category === (curr.category || 'others'));
|
|
8432
9382
|
if (index > -1) {
|
|
@@ -8446,11 +9396,13 @@ const Documents = ({
|
|
|
8446
9396
|
const manyCategories = categorised.length > 1;
|
|
8447
9397
|
return React__default.createElement(ProductPageMainSection, null, React__default.createElement(Repeat, null, React__default.createElement(H2, {
|
|
8448
9398
|
noMargin: true
|
|
8449
|
-
},
|
|
9399
|
+
}, t('item.documents'))), React__default.createElement(Repeat, null, React__default.createElement(ExtendContent, {
|
|
9400
|
+
actionTitle: t('common.showMore')
|
|
9401
|
+
}, categorised.map(group => React__default.createElement(Repeat, {
|
|
8450
9402
|
key: group.category
|
|
8451
9403
|
}, manyCategories && React__default.createElement(H3, null, (Translation === null || Translation === void 0 ? void 0 : Translation[group.category]) || Translation.other), React__default.createElement(DocumentList, {
|
|
8452
9404
|
documents: group.documents
|
|
8453
|
-
}))));
|
|
9405
|
+
}))))));
|
|
8454
9406
|
};
|
|
8455
9407
|
|
|
8456
9408
|
const Wrapper$z = styled__default.div`
|
|
@@ -8548,17 +9500,23 @@ const AccessoryCard = ({
|
|
|
8548
9500
|
price,
|
|
8549
9501
|
preamble,
|
|
8550
9502
|
readMoreCta
|
|
8551
|
-
}) =>
|
|
8552
|
-
|
|
8553
|
-
|
|
8554
|
-
|
|
8555
|
-
|
|
8556
|
-
|
|
8557
|
-
|
|
8558
|
-
|
|
8559
|
-
})
|
|
8560
|
-
|
|
8561
|
-
|
|
9503
|
+
}) => {
|
|
9504
|
+
const {
|
|
9505
|
+
t
|
|
9506
|
+
} = reactI18next.useTranslation();
|
|
9507
|
+
return React__default.createElement(Wrapper$z, null, image ? React__default.createElement(Image$4, {
|
|
9508
|
+
src: image.src,
|
|
9509
|
+
srcSet: image.srcSet,
|
|
9510
|
+
alt: image.alt
|
|
9511
|
+
}) : React__default.createElement(ImageaPlaceholder, null, React__default.createElement(IconImage, null)), React__default.createElement(Body$5, null, React__default.createElement(Heading$7, null, React__default.createElement(Title$2, null, title), branding && React__default.createElement(Branding, {
|
|
9512
|
+
src: branding.src,
|
|
9513
|
+
srcSet: branding.srcSet,
|
|
9514
|
+
alt: branding.alt
|
|
9515
|
+
})), price && React__default.createElement(Price$2, null, price), preamble && React__default.createElement(Preamble, null, preamble), readMoreCta && React__default.createElement(ReadMoreBtn, {
|
|
9516
|
+
onClick: readMoreCta,
|
|
9517
|
+
title: t('common.readMore') || ''
|
|
9518
|
+
}, t('common.readMore'))));
|
|
9519
|
+
};
|
|
8562
9520
|
|
|
8563
9521
|
const Image$5 = styled__default.img`
|
|
8564
9522
|
display: block;
|
|
@@ -8640,22 +9598,25 @@ const AccesoryModal = ({
|
|
|
8640
9598
|
onClose
|
|
8641
9599
|
}) => {
|
|
8642
9600
|
var _accessory$images;
|
|
9601
|
+
const {
|
|
9602
|
+
t
|
|
9603
|
+
} = reactI18next.useTranslation();
|
|
8643
9604
|
const priceList = [{
|
|
8644
|
-
label: '
|
|
8645
|
-
price: `${numberSeparator(accessory.price)}
|
|
9605
|
+
label: t('item.accessories.price'),
|
|
9606
|
+
price: `${numberSeparator(accessory.price)} ${t('currency.default')}`,
|
|
8646
9607
|
oldPrice: false
|
|
8647
9608
|
}];
|
|
8648
9609
|
if (accessory.salePrice) {
|
|
8649
9610
|
priceList.push({
|
|
8650
|
-
label: '
|
|
8651
|
-
price: `${numberSeparator(accessory.salePrice)}
|
|
9611
|
+
label: t('item.accessories.oldPrice'),
|
|
9612
|
+
price: `${numberSeparator(accessory.salePrice)} ${t('currency.default')}`,
|
|
8652
9613
|
oldPrice: true
|
|
8653
9614
|
});
|
|
8654
9615
|
}
|
|
8655
9616
|
if (accessory.assemblyPrice) {
|
|
8656
9617
|
priceList.push({
|
|
8657
|
-
label: '
|
|
8658
|
-
price: `${numberSeparator(accessory.assemblyPrice)}
|
|
9618
|
+
label: t('item.accessories.installationCost'),
|
|
9619
|
+
price: `${numberSeparator(accessory.assemblyPrice)} ${t('currency.default')}`,
|
|
8659
9620
|
oldPrice: false
|
|
8660
9621
|
});
|
|
8661
9622
|
}
|
|
@@ -8668,7 +9629,7 @@ const AccesoryModal = ({
|
|
|
8668
9629
|
})), accessory.logotype && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
|
|
8669
9630
|
logo: `${accessory.logotype}?w=160`,
|
|
8670
9631
|
logo2x: `${accessory.logotype}?w=320`,
|
|
8671
|
-
alt: accessory.manufacturer || '
|
|
9632
|
+
alt: accessory.manufacturer || t('common.logotype') || '',
|
|
8672
9633
|
wide: true
|
|
8673
9634
|
})), React__default.createElement(Repeat, null, React__default.createElement(PriceBox, {
|
|
8674
9635
|
prices: priceList
|
|
@@ -8678,17 +9639,22 @@ const AccesoryModal = ({
|
|
|
8678
9639
|
}
|
|
8679
9640
|
})), accessory.articleNumber && React__default.createElement(Repeat, null, React__default.createElement(UtilityTextBold, {
|
|
8680
9641
|
as: "div"
|
|
8681
|
-
},
|
|
9642
|
+
}, t('item.accessories.articleNumberShort')), React__default.createElement("div", null, accessory.articleNumber)), accessory.productPage && accessory.productPage.url && React__default.createElement(Repeat, null, React__default.createElement(Link$1, {
|
|
8682
9643
|
href: accessory.productPage.url,
|
|
8683
|
-
title:
|
|
9644
|
+
title: t('item.accessories.moreInformationAboutAccessory', {
|
|
9645
|
+
accessory: accessory.name
|
|
9646
|
+
}) || '',
|
|
8684
9647
|
target: "_blank",
|
|
8685
9648
|
rel: "noopener noreferrer nofollow"
|
|
8686
|
-
}, accessory.productPage.title || '
|
|
9649
|
+
}, accessory.productPage.title || t('common.readMore'), " (", t('common.opensInNewTab'), ")")));
|
|
8687
9650
|
};
|
|
8688
9651
|
|
|
8689
9652
|
const AccessoriesSection = ({
|
|
8690
9653
|
accessories
|
|
8691
9654
|
}) => {
|
|
9655
|
+
const {
|
|
9656
|
+
t
|
|
9657
|
+
} = reactI18next.useTranslation();
|
|
8692
9658
|
const [modal, setModal] = React.useState();
|
|
8693
9659
|
const onOpenModal = accessory => setModal(accessory);
|
|
8694
9660
|
const onCloseModal = () => setModal(undefined);
|
|
@@ -8698,7 +9664,7 @@ const AccessoriesSection = ({
|
|
|
8698
9664
|
onClose: onCloseModal
|
|
8699
9665
|
}), React__default.createElement(ProductPageMainSection, null, React__default.createElement(Repeat, null, React__default.createElement(H2, {
|
|
8700
9666
|
noMargin: true
|
|
8701
|
-
},
|
|
9667
|
+
}, t('item.accessories.accessories'))), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, t('item.accessories.accessoriesDescription')))), React__default.createElement(Repeat, null, React__default.createElement(OverflowGrid, {
|
|
8702
9668
|
columns: 1.05,
|
|
8703
9669
|
columnsSm: 2.1,
|
|
8704
9670
|
columnsMd: 2,
|
|
@@ -8712,7 +9678,7 @@ const AccessoriesSection = ({
|
|
|
8712
9678
|
src: `${(_accessory$images2 = accessory.images) === null || _accessory$images2 === void 0 ? void 0 : _accessory$images2[0]}?w=539&h=303`,
|
|
8713
9679
|
alt: accessory.name
|
|
8714
9680
|
} : undefined,
|
|
8715
|
-
price: `${numberSeparator(accessory.price)}
|
|
9681
|
+
price: `${numberSeparator(accessory.price)} ${t('currency.default')}`,
|
|
8716
9682
|
preamble: accessory.excerpt,
|
|
8717
9683
|
readMoreCta: () => onOpenModal(accessory)
|
|
8718
9684
|
});
|
|
@@ -8721,6 +9687,7 @@ const AccessoriesSection = ({
|
|
|
8721
9687
|
};
|
|
8722
9688
|
|
|
8723
9689
|
const WaykeSearchItem = ({
|
|
9690
|
+
marketCode,
|
|
8724
9691
|
id,
|
|
8725
9692
|
hashRoute,
|
|
8726
9693
|
pathRoute,
|
|
@@ -8730,7 +9697,8 @@ const WaykeSearchItem = ({
|
|
|
8730
9697
|
displayBranchName,
|
|
8731
9698
|
onClickSearchItem
|
|
8732
9699
|
}) => {
|
|
8733
|
-
var _result$vehicle3, _result$
|
|
9700
|
+
var _result$vehicle3, _result$vehicle4, _branch$flags;
|
|
9701
|
+
const initialized = useInitializeTranslation(marketCode);
|
|
8734
9702
|
const {
|
|
8735
9703
|
ecomSettings
|
|
8736
9704
|
} = useSettings();
|
|
@@ -8786,12 +9754,13 @@ const WaykeSearchItem = ({
|
|
|
8786
9754
|
}
|
|
8787
9755
|
}, [result]);
|
|
8788
9756
|
const options = React.useMemo(() => {
|
|
8789
|
-
var _result$vehicle2
|
|
8790
|
-
return result === null || result === void 0
|
|
9757
|
+
var _result$vehicle2;
|
|
9758
|
+
return result === null || result === void 0 || (_result$vehicle2 = result.vehicle) === null || _result$vehicle2 === void 0 || (_result$vehicle2 = _result$vehicle2.data) === null || _result$vehicle2 === void 0 || (_result$vehicle2 = _result$vehicle2.options) === null || _result$vehicle2 === void 0 ? void 0 : _result$vehicle2.filter(notEmpty).map(opt => ({
|
|
8791
9759
|
title: opt
|
|
8792
9760
|
}));
|
|
8793
|
-
}, [result === null || result === void 0
|
|
9761
|
+
}, [result === null || result === void 0 || (_result$vehicle3 = result.vehicle) === null || _result$vehicle3 === void 0 || (_result$vehicle3 = _result$vehicle3.data) === null || _result$vehicle3 === void 0 ? void 0 : _result$vehicle3.options]);
|
|
8794
9762
|
const onShowMoreOptionsClick = React.useCallback(() => PubSub.publish('OptionsClick'), []);
|
|
9763
|
+
if (!initialized) return null;
|
|
8795
9764
|
if (loading) {
|
|
8796
9765
|
return React__default.createElement(PageLoading, null);
|
|
8797
9766
|
}
|
|
@@ -8824,6 +9793,7 @@ const WaykeSearchItem = ({
|
|
|
8824
9793
|
const {
|
|
8825
9794
|
fuelType,
|
|
8826
9795
|
mileage,
|
|
9796
|
+
odometerReading,
|
|
8827
9797
|
gearbox,
|
|
8828
9798
|
modelYear,
|
|
8829
9799
|
propertySet
|
|
@@ -8833,12 +9803,12 @@ const WaykeSearchItem = ({
|
|
|
8833
9803
|
}];
|
|
8834
9804
|
if (flags !== null && flags !== void 0 && flags.demoVersion) {
|
|
8835
9805
|
uspList.push({
|
|
8836
|
-
title: '
|
|
9806
|
+
title: i18next.t('item.demoCar'),
|
|
8837
9807
|
onClick: onToggleDemoCarModal
|
|
8838
9808
|
});
|
|
8839
9809
|
}
|
|
8840
9810
|
uspList.push({
|
|
8841
|
-
title: `${numberSeparator(mileage)}
|
|
9811
|
+
title: `${numberSeparator((odometerReading === null || odometerReading === void 0 ? void 0 : odometerReading.value) || mileage)} ${i18next.t(`odometer.${(odometerReading === null || odometerReading === void 0 ? void 0 : odometerReading.unit) || 'ScandinavianMile'}`)}`
|
|
8842
9812
|
});
|
|
8843
9813
|
if (gearbox) {
|
|
8844
9814
|
uspList.push({
|
|
@@ -8857,10 +9827,10 @@ const WaykeSearchItem = ({
|
|
|
8857
9827
|
}, !pathRoute && hashRoute ? React__default.createElement(Repeat, null, React__default.createElement(UtilityFontSizeSmall, null, React__default.createElement(ButtonInlineLight, {
|
|
8858
9828
|
as: "a",
|
|
8859
9829
|
href: "#",
|
|
8860
|
-
title:
|
|
9830
|
+
title: i18next.t('navigation.backToSearch')
|
|
8861
9831
|
}, React__default.createElement(ButtonContent, null, React__default.createElement(IconChevronLeft, {
|
|
8862
9832
|
block: true
|
|
8863
|
-
})), React__default.createElement(ButtonContent, null,
|
|
9833
|
+
})), React__default.createElement(ButtonContent, null, i18next.t('navigation.backToSearch'))))) : null, (manufacturer === null || manufacturer === void 0 ? void 0 : manufacturer.logotype) && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
|
|
8864
9834
|
logo: manufacturer.logotype,
|
|
8865
9835
|
alt: manufacturer.name
|
|
8866
9836
|
})), React__default.createElement(Repeat, null, React__default.createElement(RepeatSmall, null, React__default.createElement(H1, {
|
|
@@ -8903,7 +9873,7 @@ const WaykeSearchItem = ({
|
|
|
8903
9873
|
placeholderImage: placeholderImage
|
|
8904
9874
|
})), React__default.createElement(ProductPageMainSection, null, React__default.createElement(Repeat, null, React__default.createElement(H2, {
|
|
8905
9875
|
noMargin: true
|
|
8906
|
-
},
|
|
9876
|
+
}, i18next.t('item.carData'))), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, i18next.t('item.carDataDescription')))), React__default.createElement(Repeat, null, React__default.createElement(PropertySet, {
|
|
8907
9877
|
propertySet: propertySet,
|
|
8908
9878
|
vehicleData: vehicle.data
|
|
8909
9879
|
}))), description && React__default.createElement(ProductPageMainSection, null, React__default.createElement(Blockquote, {
|
|
@@ -8912,8 +9882,8 @@ const WaykeSearchItem = ({
|
|
|
8912
9882
|
avatar: (contact === null || contact === void 0 ? void 0 : contact.avatar) || undefined
|
|
8913
9883
|
}, !!description && React__default.createElement("p", null, description))), ((options === null || options === void 0 ? void 0 : options.length) || 0) > 0 && React__default.createElement(ProductPageMainSection, null, React__default.createElement(Repeat, null, React__default.createElement(H2, {
|
|
8914
9884
|
noMargin: true
|
|
8915
|
-
},
|
|
8916
|
-
actionTitle:
|
|
9885
|
+
}, i18next.t('item.equipment'))), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, i18next.t('item.equipmentDescription')))), React__default.createElement(Repeat, null, React__default.createElement(ExtendContent, {
|
|
9886
|
+
actionTitle: i18next.t('common.showMore'),
|
|
8917
9887
|
onClick: onShowMoreOptionsClick
|
|
8918
9888
|
}, React__default.createElement(UspList, {
|
|
8919
9889
|
items: options
|
|
@@ -9104,7 +10074,7 @@ const SearchProvider = ({
|
|
|
9104
10074
|
if (response) {
|
|
9105
10075
|
var _response$documentLis;
|
|
9106
10076
|
setQueryFilter({
|
|
9107
|
-
searchParams: new URLSearchParams(response === null || response === void 0
|
|
10077
|
+
searchParams: new URLSearchParams(response === null || response === void 0 || (_response$documentLis = response.documentList.pagination.nextPage) === null || _response$documentLis === void 0 ? void 0 : _response$documentLis.query),
|
|
9108
10078
|
concatResult: true
|
|
9109
10079
|
});
|
|
9110
10080
|
}
|
|
@@ -9117,7 +10087,7 @@ const SearchProvider = ({
|
|
|
9117
10087
|
_initialQueryParams.forEach((value, key) => {
|
|
9118
10088
|
var _initialQueryParams$g;
|
|
9119
10089
|
if (!(initialQueryParams !== null && initialQueryParams !== void 0 && (_initialQueryParams$g = initialQueryParams.getAll(key)) !== null && _initialQueryParams$g !== void 0 && _initialQueryParams$g.some(v => v === value))) {
|
|
9120
|
-
initialQueryParams === null || initialQueryParams === void 0
|
|
10090
|
+
initialQueryParams === null || initialQueryParams === void 0 || initialQueryParams.append(key, value);
|
|
9121
10091
|
}
|
|
9122
10092
|
});
|
|
9123
10093
|
}
|
|
@@ -9400,6 +10370,7 @@ const useHashGuid = () => {
|
|
|
9400
10370
|
};
|
|
9401
10371
|
|
|
9402
10372
|
const WaykeComposite = ({
|
|
10373
|
+
marketCode,
|
|
9403
10374
|
filterList,
|
|
9404
10375
|
initialQueryParams,
|
|
9405
10376
|
removeSearchBar,
|
|
@@ -9415,6 +10386,7 @@ const WaykeComposite = ({
|
|
|
9415
10386
|
const {
|
|
9416
10387
|
id: pathId
|
|
9417
10388
|
} = usePath();
|
|
10389
|
+
const initialized = useInitializeTranslation(marketCode);
|
|
9418
10390
|
React.useEffect(() => {
|
|
9419
10391
|
if (!pathRoute) {
|
|
9420
10392
|
if (hashId) {
|
|
@@ -9425,6 +10397,7 @@ const WaykeComposite = ({
|
|
|
9425
10397
|
}
|
|
9426
10398
|
}, [hashId]);
|
|
9427
10399
|
const id = pathId || hashId;
|
|
10400
|
+
if (!initialized) return null;
|
|
9428
10401
|
return React__default.createElement(React__default.Fragment, null, id ? React__default.createElement(WaykeSearchItem, {
|
|
9429
10402
|
id: id,
|
|
9430
10403
|
hashRoute: !pathRoute,
|
|
@@ -9434,6 +10407,7 @@ const WaykeComposite = ({
|
|
|
9434
10407
|
modifyDocumentTitleItem: modifyDocumentTitleItem,
|
|
9435
10408
|
displayBranchName: displayBranchName
|
|
9436
10409
|
}) : React__default.createElement(WaykeSearch, {
|
|
10410
|
+
marketCode: marketCode,
|
|
9437
10411
|
filterList: filterList,
|
|
9438
10412
|
initialQueryParams: initialQueryParams,
|
|
9439
10413
|
removeSearchBar: removeSearchBar,
|