@wayke-se/components-react 3.8.0 → 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.
Files changed (498) hide show
  1. package/README.md +20 -11
  2. package/dist-node/index.js +1577 -603
  3. package/package.json +5 -5
  4. package/dist-node/index.js.map +0 -1
  5. package/dist-src/@types/action.js +0 -1
  6. package/dist-src/@types/codegen/types.js +0 -14
  7. package/dist-src/@types/filter.js +0 -1
  8. package/dist-src/@types/queryFilter.js +0 -1
  9. package/dist-src/@types/search.js +0 -1
  10. package/dist-src/@types/vehicle-properties.js +0 -1
  11. package/dist-src/State/CentralStorage/CentralStorageContext.js +0 -4
  12. package/dist-src/State/CentralStorage/CentralStorageProvider.js +0 -9
  13. package/dist-src/State/CentralStorage/useCentralStorage.js +0 -29
  14. package/dist-src/State/Path/PathContext.js +0 -2
  15. package/dist-src/State/Path/PathProvider.js +0 -47
  16. package/dist-src/State/Path/reducer.js +0 -15
  17. package/dist-src/State/Path/usePath.js +0 -10
  18. package/dist-src/State/RelatedSearch/RelatedSearchContext.js +0 -8
  19. package/dist-src/State/RelatedSearch/RelatedSearchProvider.js +0 -27
  20. package/dist-src/State/RelatedSearch/useRelatedSearch.js +0 -18
  21. package/dist-src/State/Search/SearchContext.js +0 -12
  22. package/dist-src/State/Search/SearchProvider.js +0 -178
  23. package/dist-src/State/Search/useSearch.js +0 -4
  24. package/dist-src/State/Settings/SettingsContext.js +0 -2
  25. package/dist-src/State/Settings/SettingsProvider.js +0 -4
  26. package/dist-src/State/Settings/useSettings.js +0 -4
  27. package/dist-src/components/AccessoryCard/index.js +0 -14
  28. package/dist-src/components/AccessoryCard/wrapper.js +0 -90
  29. package/dist-src/components/Accordion/index.js +0 -18
  30. package/dist-src/components/Accordion/wrapper.js +0 -92
  31. package/dist-src/components/ActionList/index.js +0 -18
  32. package/dist-src/components/ActionList/toggle-item.js +0 -24
  33. package/dist-src/components/Avatar/index.js +0 -4
  34. package/dist-src/components/Avatar/wrapper.js +0 -15
  35. package/dist-src/components/Badge/index.js +0 -4
  36. package/dist-src/components/Badge/wrapper.js +0 -24
  37. package/dist-src/components/Blockquote/index.js +0 -12
  38. package/dist-src/components/Blockquote/wrapper.js +0 -44
  39. package/dist-src/components/Button/index.js +0 -195
  40. package/dist-src/components/CheckMarkList/index.js +0 -9
  41. package/dist-src/components/CheckMarkList/wrapper.js +0 -26
  42. package/dist-src/components/Checklist/index.js +0 -14
  43. package/dist-src/components/Checklist/wrapper.js +0 -59
  44. package/dist-src/components/ColorSelect/index.js +0 -18
  45. package/dist-src/components/ColorSelect/wrapper.js +0 -69
  46. package/dist-src/components/ColumnRow/index.js +0 -17
  47. package/dist-src/components/Columns/index.js +0 -76
  48. package/dist-src/components/Container/index.js +0 -4
  49. package/dist-src/components/Container/wrapper.js +0 -12
  50. package/dist-src/components/Content/index.js +0 -4
  51. package/dist-src/components/Content/wrapper.js +0 -51
  52. package/dist-src/components/ContentLogo/index.js +0 -23
  53. package/dist-src/components/DataList/index.js +0 -6
  54. package/dist-src/components/DataList/wrapper.js +0 -24
  55. package/dist-src/components/DetailBox/index.js +0 -17
  56. package/dist-src/components/DetailBox/wrapper.js +0 -27
  57. package/dist-src/components/DocumentList/index.js +0 -23
  58. package/dist-src/components/DocumentList/wrapper.js +0 -55
  59. package/dist-src/components/ExtendContent/index.js +0 -24
  60. package/dist-src/components/ExtendContent/wrapper.js +0 -32
  61. package/dist-src/components/ExtendInfo/index.js +0 -15
  62. package/dist-src/components/ExtendInfo/wrapper.js +0 -56
  63. package/dist-src/components/Filter/index.js +0 -64
  64. package/dist-src/components/Filter/wrapper.js +0 -72
  65. package/dist-src/components/FilterPanel/checkListFacet.js +0 -29
  66. package/dist-src/components/FilterPanel/colorFacet.js +0 -29
  67. package/dist-src/components/FilterPanel/faceSelector.js +0 -32
  68. package/dist-src/components/FilterPanel/index.js +0 -24
  69. package/dist-src/components/FilterPanel/rangeFacet.js +0 -82
  70. package/dist-src/components/FinancialOptions/LoanModal.js +0 -127
  71. package/dist-src/components/FinancialOptions/index.js +0 -12
  72. package/dist-src/components/FinancialOptions/leasing.js +0 -56
  73. package/dist-src/components/FinancialOptions/loan.js +0 -54
  74. package/dist-src/components/Gallery/MediaButton.js +0 -7
  75. package/dist-src/components/Gallery/index.js +0 -122
  76. package/dist-src/components/Gallery/wrapper.js +0 -256
  77. package/dist-src/components/Grid/index.js +0 -61
  78. package/dist-src/components/Grid/wrapper.js +0 -26
  79. package/dist-src/components/Heading/index.js +0 -52
  80. package/dist-src/components/Icon/index.js +0 -38
  81. package/dist-src/components/Image/index.js +0 -5
  82. package/dist-src/components/InputCheckbox/index.js +0 -10
  83. package/dist-src/components/InputCheckbox/wrapper.js +0 -79
  84. package/dist-src/components/InputGroup/index.js +0 -21
  85. package/dist-src/components/InputLabel/index.js +0 -4
  86. package/dist-src/components/InputLabel/wrapper.js +0 -8
  87. package/dist-src/components/InputSearch/index.js +0 -12
  88. package/dist-src/components/InputSearch/wrapper.js +0 -90
  89. package/dist-src/components/InputSelect/index.js +0 -10
  90. package/dist-src/components/InputSelect/wrapper.js +0 -53
  91. package/dist-src/components/InputText/index.js +0 -5
  92. package/dist-src/components/InputText/wrapper.js +0 -54
  93. package/dist-src/components/InsuranceOptions/Insurance.js +0 -26
  94. package/dist-src/components/InsuranceOptions/InsuranceFree.js +0 -30
  95. package/dist-src/components/InsuranceOptions/InsuranceFreeModal.js +0 -19
  96. package/dist-src/components/InsuranceOptions/InsuranceModal.js +0 -105
  97. package/dist-src/components/InsuranceOptions/index.js +0 -15
  98. package/dist-src/components/Lightbox/index.js +0 -30
  99. package/dist-src/components/Lightbox/wrapper.js +0 -91
  100. package/dist-src/components/Link/index.js +0 -28
  101. package/dist-src/components/Loader/index.js +0 -7
  102. package/dist-src/components/Loader/wrapper.js +0 -37
  103. package/dist-src/components/LogoBox/index.js +0 -10
  104. package/dist-src/components/LogoBox/wrapper.js +0 -12
  105. package/dist-src/components/Map/index.js +0 -27
  106. package/dist-src/components/Map/wrapper.js +0 -25
  107. package/dist-src/components/Modal/index.js +0 -20
  108. package/dist-src/components/Modal/wrapper.js +0 -113
  109. package/dist-src/components/NavButton/index.js +0 -42
  110. package/dist-src/components/OpeningHours/index.js +0 -97
  111. package/dist-src/components/OptionBox/index.js +0 -7
  112. package/dist-src/components/OptionBox/wrapper.js +0 -49
  113. package/dist-src/components/OverflowBox/index.js +0 -4
  114. package/dist-src/components/OverflowBox/wrapper.js +0 -6
  115. package/dist-src/components/OverflowGrid/index.js +0 -56
  116. package/dist-src/components/OverflowGrid/wrapper.js +0 -144
  117. package/dist-src/components/Page/index.js +0 -30
  118. package/dist-src/components/Panel/index.js +0 -20
  119. package/dist-src/components/Panel/wrapper.js +0 -143
  120. package/dist-src/components/PhoneNumber/index.js +0 -13
  121. package/dist-src/components/Portal/index.js +0 -4
  122. package/dist-src/components/Portal/portal-element.js +0 -3
  123. package/dist-src/components/Portal/portal-namespace.js +0 -1
  124. package/dist-src/components/Portal/portal.js +0 -25
  125. package/dist-src/components/Price/index.js +0 -10
  126. package/dist-src/components/PriceBox/index.js +0 -6
  127. package/dist-src/components/PriceBox/wrapper.js +0 -34
  128. package/dist-src/components/PriceTable/index.js +0 -20
  129. package/dist-src/components/PriceTable/wrapper.js +0 -22
  130. package/dist-src/components/ProductCard/index.js +0 -45
  131. package/dist-src/components/ProductCard/wrapper.js +0 -134
  132. package/dist-src/components/ProductPage/index.js +0 -85
  133. package/dist-src/components/ProgressBar/index.js +0 -16
  134. package/dist-src/components/ProgressBar/wrapper.js +0 -24
  135. package/dist-src/components/RangeSlider/RangeSliderSimple.js +0 -26
  136. package/dist-src/components/RangeSlider/SliderWithLabel.js +0 -21
  137. package/dist-src/components/RangeSlider/handle.js +0 -5
  138. package/dist-src/components/RangeSlider/index.js +0 -50
  139. package/dist-src/components/RangeSlider/track.js +0 -6
  140. package/dist-src/components/RangeSlider/wrapper.js +0 -86
  141. package/dist-src/components/RangeSliderLabel/index.js +0 -6
  142. package/dist-src/components/RangeSliderLabel/wrapper.js +0 -24
  143. package/dist-src/components/Repeat/index.js +0 -17
  144. package/dist-src/components/Result/index.js +0 -40
  145. package/dist-src/components/Result/wrapper.js +0 -29
  146. package/dist-src/components/Root/index.js +0 -22
  147. package/dist-src/components/SearchBar/index.js +0 -18
  148. package/dist-src/components/SearchFilter/index.js +0 -23
  149. package/dist-src/components/SearchTerm/index.js +0 -8
  150. package/dist-src/components/SearchTerm/wrapper.js +0 -67
  151. package/dist-src/components/SectionHeader/index.js +0 -9
  152. package/dist-src/components/SectionHeader/wrapper.js +0 -13
  153. package/dist-src/components/Snackbar/index.js +0 -21
  154. package/dist-src/components/Snackbar/wrapper.js +0 -56
  155. package/dist-src/components/SortSelect/index.js +0 -10
  156. package/dist-src/components/SortSelect/wrapper.js +0 -48
  157. package/dist-src/components/Sphere/Sphere.js +0 -21
  158. package/dist-src/components/Sphere/SphereLightbox.js +0 -4
  159. package/dist-src/components/Sphere/SphereViewer.js +0 -54
  160. package/dist-src/components/Sphere/wrapper.js +0 -250
  161. package/dist-src/components/SrOnly/index.js +0 -13
  162. package/dist-src/components/StateIndicator/index.js +0 -23
  163. package/dist-src/components/SwitchBar/index.js +0 -23
  164. package/dist-src/components/SwitchBar/wrapper.js +0 -71
  165. package/dist-src/components/TableColumn/index.js +0 -14
  166. package/dist-src/components/TableList/index.js +0 -32
  167. package/dist-src/components/Tabs/index.js +0 -6
  168. package/dist-src/components/Tabs/wrapper.js +0 -68
  169. package/dist-src/components/ThreeSixty/Rotation.js +0 -95
  170. package/dist-src/components/ThreeSixty/ThreeSixtLightbox.js +0 -15
  171. package/dist-src/components/ThreeSixty/ThreeSixty.js +0 -25
  172. package/dist-src/components/UspList/index.js +0 -18
  173. package/dist-src/components/UspList/wrapper.js +0 -85
  174. package/dist-src/components/Utility/index.js +0 -13
  175. package/dist-src/components/Video/CustomPlayer.js +0 -8
  176. package/dist-src/components/Video/EmbeddedVideoLightbox.js +0 -18
  177. package/dist-src/components/Video/EmbededVideo.js +0 -38
  178. package/dist-src/components/Video/QuickNavEmbeded.js +0 -17
  179. package/dist-src/components/Video/QuickNavVideo.js +0 -6
  180. package/dist-src/components/Video/Video.js +0 -8
  181. package/dist-src/components/Video/VimeoPlayer.js +0 -6
  182. package/dist-src/components/Video/YoutubePlayer.js +0 -6
  183. package/dist-src/components/Video/useThumbnail.js +0 -25
  184. package/dist-src/components/Video/utils.js +0 -35
  185. package/dist-src/components/Video/wrapper.js +0 -19
  186. package/dist-src/hooks/useFetch.js +0 -69
  187. package/dist-src/hooks/useHasBeenVisible.js +0 -13
  188. package/dist-src/hooks/useHashGuid.js +0 -28
  189. package/dist-src/hooks/useInsurance.js +0 -12
  190. package/dist-src/hooks/useLoan.js +0 -12
  191. package/dist-src/hooks/useOnScreen.js +0 -15
  192. package/dist-src/hooks/useOutsideClick.js +0 -15
  193. package/dist-src/hooks/usePrevious.js +0 -9
  194. package/dist-src/hooks/useSearchItem.js +0 -7
  195. package/dist-src/hooks/useSearchItemBranch.js +0 -7
  196. package/dist-src/hooks/useSessionStorage.js +0 -23
  197. package/dist-src/hooks/useVimeoThumbnail.js +0 -18
  198. package/dist-src/index.js +0 -10
  199. package/dist-src/layout/helpers.js +0 -5
  200. package/dist-src/layout/keyframes.js +0 -20
  201. package/dist-src/layout/theme.js +0 -67
  202. package/dist-src/layouts/WaykeComposite.js +0 -23
  203. package/dist-src/layouts/WaykeCompositeWithProvider.js +0 -6
  204. package/dist-src/layouts/search/index.js +0 -55
  205. package/dist-src/layouts/searchItem/Accessories/AccessoryModal.js +0 -51
  206. package/dist-src/layouts/searchItem/Accessories/index.js +0 -32
  207. package/dist-src/layouts/searchItem/Branch.js +0 -55
  208. package/dist-src/layouts/searchItem/BranchModal.js +0 -36
  209. package/dist-src/layouts/searchItem/CheckList.js +0 -79
  210. package/dist-src/layouts/searchItem/DemoCarModal.js +0 -7
  211. package/dist-src/layouts/searchItem/Documents.js +0 -44
  212. package/dist-src/layouts/searchItem/ManufacturerPackagesOption.js +0 -25
  213. package/dist-src/layouts/searchItem/MetadataItem.js +0 -34
  214. package/dist-src/layouts/searchItem/PackageOptionModal.js +0 -15
  215. package/dist-src/layouts/searchItem/PackageOptions.js +0 -25
  216. package/dist-src/layouts/searchItem/Page404.js +0 -9
  217. package/dist-src/layouts/searchItem/PageLoading.js +0 -9
  218. package/dist-src/layouts/searchItem/Property.js +0 -51
  219. package/dist-src/layouts/searchItem/Related.js +0 -66
  220. package/dist-src/layouts/searchItem/index.js +0 -180
  221. package/dist-src/providers/WaykeItemProvidet.js +0 -16
  222. package/dist-src/providers/WaykeProvider.js +0 -18
  223. package/dist-src/providers/graphqlProvider.js +0 -7
  224. package/dist-src/providers/themeProvider.js +0 -5
  225. package/dist-src/queries/INSURANCE_CALCULATION.js +0 -41
  226. package/dist-src/queries/LOAN_CALCULATION.js +0 -36
  227. package/dist-src/queries/SEARCH_ITEM_BRANCH_QUERY.js +0 -136
  228. package/dist-src/queries/SEARCH_ITEM_QUERY.js +0 -256
  229. package/dist-src/utils/constants.js +0 -31
  230. package/dist-src/utils/converters.js +0 -31
  231. package/dist-src/utils/deep-copy.js +0 -5
  232. package/dist-src/utils/formats.js +0 -62
  233. package/dist-src/utils/metadata.min.js +0 -86
  234. package/dist-src/utils/phonenumbers.js +0 -12
  235. package/dist-src/utils/pubsub/Actions.js +0 -1
  236. package/dist-src/utils/pubsub/Events.js +0 -1
  237. package/dist-src/utils/pubsub/pubsub.js +0 -93
  238. package/dist-src/utils/regex.js +0 -10
  239. package/dist-src/utils/sortOptions.js +0 -32
  240. package/dist-src/utils/specification.js +0 -495
  241. package/dist-src/utils/ssn.js +0 -1
  242. package/dist-src/utils/url.js +0 -1
  243. package/dist-src/utils/vehicle-properties/compare-basic-properties.js +0 -36
  244. package/dist-src/utils/vehicle-properties/compare-categories.js +0 -27
  245. package/dist-src/utils/vehicle-properties/compare-properties.js +0 -3
  246. package/dist-src/utils/vehicle-properties/custom-property-adder.js +0 -143
  247. package/dist-src/utils/vehicle-properties/property-hint-enricher.js +0 -192
  248. package/dist-src/utils/vehicle-properties/property-remover.js +0 -27
  249. package/dist-src/utils/vehicle-properties/property-tree-creator.js +0 -127
  250. package/dist-src/utils/vehicle-properties/property-tree-sorter.js +0 -18
  251. package/dist-types/@types/action.d.ts +0 -3
  252. package/dist-types/@types/codegen/types.d.ts +0 -369
  253. package/dist-types/@types/filter.d.ts +0 -5
  254. package/dist-types/@types/queryFilter.d.ts +0 -5
  255. package/dist-types/@types/search.d.ts +0 -106
  256. package/dist-types/@types/vehicle-properties.d.ts +0 -29
  257. package/dist-types/State/CentralStorage/CentralStorageContext.d.ts +0 -6
  258. package/dist-types/State/CentralStorage/CentralStorageProvider.d.ts +0 -6
  259. package/dist-types/State/CentralStorage/useCentralStorage.d.ts +0 -6
  260. package/dist-types/State/Path/PathContext.d.ts +0 -9
  261. package/dist-types/State/Path/PathProvider.d.ts +0 -6
  262. package/dist-types/State/Path/reducer.d.ts +0 -14
  263. package/dist-types/State/Path/usePath.d.ts +0 -3
  264. package/dist-types/State/RelatedSearch/RelatedSearchContext.d.ts +0 -10
  265. package/dist-types/State/RelatedSearch/RelatedSearchProvider.d.ts +0 -9
  266. package/dist-types/State/RelatedSearch/useRelatedSearch.d.ts +0 -2
  267. package/dist-types/State/Search/SearchContext.d.ts +0 -15
  268. package/dist-types/State/Search/SearchProvider.d.ts +0 -10
  269. package/dist-types/State/Search/useSearch.d.ts +0 -2
  270. package/dist-types/State/Settings/SettingsContext.d.ts +0 -13
  271. package/dist-types/State/Settings/SettingsProvider.d.ts +0 -10
  272. package/dist-types/State/Settings/useSettings.d.ts +0 -2
  273. package/dist-types/components/AccessoryCard/index.d.ts +0 -16
  274. package/dist-types/components/AccessoryCard/wrapper.d.ts +0 -18
  275. package/dist-types/components/Accordion/index.d.ts +0 -13
  276. package/dist-types/components/Accordion/wrapper.d.ts +0 -16
  277. package/dist-types/components/ActionList/index.d.ts +0 -8
  278. package/dist-types/components/ActionList/toggle-item.d.ts +0 -10
  279. package/dist-types/components/Avatar/index.d.ts +0 -7
  280. package/dist-types/components/Avatar/wrapper.d.ts +0 -7
  281. package/dist-types/components/Badge/index.d.ts +0 -7
  282. package/dist-types/components/Badge/wrapper.d.ts +0 -7
  283. package/dist-types/components/Blockquote/index.d.ts +0 -9
  284. package/dist-types/components/Blockquote/wrapper.d.ts +0 -9
  285. package/dist-types/components/Button/index.d.ts +0 -52
  286. package/dist-types/components/CheckMarkList/index.d.ts +0 -7
  287. package/dist-types/components/CheckMarkList/wrapper.d.ts +0 -6
  288. package/dist-types/components/Checklist/index.d.ts +0 -13
  289. package/dist-types/components/Checklist/wrapper.d.ts +0 -11
  290. package/dist-types/components/ColorSelect/index.d.ts +0 -14
  291. package/dist-types/components/ColorSelect/wrapper.d.ts +0 -11
  292. package/dist-types/components/ColumnRow/index.d.ts +0 -2
  293. package/dist-types/components/Columns/index.d.ts +0 -16
  294. package/dist-types/components/Container/index.d.ts +0 -6
  295. package/dist-types/components/Container/wrapper.d.ts +0 -1
  296. package/dist-types/components/Content/index.d.ts +0 -6
  297. package/dist-types/components/Content/wrapper.d.ts +0 -4
  298. package/dist-types/components/ContentLogo/index.d.ts +0 -3
  299. package/dist-types/components/DataList/index.d.ts +0 -10
  300. package/dist-types/components/DataList/wrapper.d.ts +0 -6
  301. package/dist-types/components/DetailBox/index.d.ts +0 -8
  302. package/dist-types/components/DetailBox/wrapper.d.ts +0 -13
  303. package/dist-types/components/DocumentList/index.d.ts +0 -11
  304. package/dist-types/components/DocumentList/wrapper.d.ts +0 -11
  305. package/dist-types/components/ExtendContent/index.d.ts +0 -8
  306. package/dist-types/components/ExtendContent/wrapper.d.ts +0 -6
  307. package/dist-types/components/ExtendInfo/index.d.ts +0 -7
  308. package/dist-types/components/ExtendInfo/wrapper.d.ts +0 -10
  309. package/dist-types/components/Filter/index.d.ts +0 -7
  310. package/dist-types/components/Filter/wrapper.d.ts +0 -8
  311. package/dist-types/components/FilterPanel/checkListFacet.d.ts +0 -7
  312. package/dist-types/components/FilterPanel/colorFacet.d.ts +0 -7
  313. package/dist-types/components/FilterPanel/faceSelector.d.ts +0 -7
  314. package/dist-types/components/FilterPanel/index.d.ts +0 -18
  315. package/dist-types/components/FilterPanel/rangeFacet.d.ts +0 -9
  316. package/dist-types/components/FinancialOptions/LoanModal.d.ts +0 -9
  317. package/dist-types/components/FinancialOptions/index.d.ts +0 -8
  318. package/dist-types/components/FinancialOptions/leasing.d.ts +0 -7
  319. package/dist-types/components/FinancialOptions/loan.d.ts +0 -8
  320. package/dist-types/components/Gallery/MediaButton.d.ts +0 -7
  321. package/dist-types/components/Gallery/index.d.ts +0 -8
  322. package/dist-types/components/Gallery/wrapper.d.ts +0 -22
  323. package/dist-types/components/Grid/index.d.ts +0 -12
  324. package/dist-types/components/Grid/wrapper.d.ts +0 -3
  325. package/dist-types/components/Heading/index.d.ts +0 -29
  326. package/dist-types/components/Icon/index.d.ts +0 -17
  327. package/dist-types/components/Image/index.d.ts +0 -1
  328. package/dist-types/components/InputCheckbox/index.d.ts +0 -7
  329. package/dist-types/components/InputCheckbox/wrapper.d.ts +0 -13
  330. package/dist-types/components/InputGroup/index.d.ts +0 -2
  331. package/dist-types/components/InputLabel/index.d.ts +0 -7
  332. package/dist-types/components/InputLabel/wrapper.d.ts +0 -3
  333. package/dist-types/components/InputSearch/index.d.ts +0 -11
  334. package/dist-types/components/InputSearch/wrapper.d.ts +0 -15
  335. package/dist-types/components/InputSelect/index.d.ts +0 -14
  336. package/dist-types/components/InputSelect/wrapper.d.ts +0 -6
  337. package/dist-types/components/InputText/index.d.ts +0 -8
  338. package/dist-types/components/InputText/wrapper.d.ts +0 -5
  339. package/dist-types/components/InsuranceOptions/Insurance.d.ts +0 -9
  340. package/dist-types/components/InsuranceOptions/InsuranceFree.d.ts +0 -7
  341. package/dist-types/components/InsuranceOptions/InsuranceFreeModal.d.ts +0 -8
  342. package/dist-types/components/InsuranceOptions/InsuranceModal.d.ts +0 -10
  343. package/dist-types/components/InsuranceOptions/index.d.ts +0 -9
  344. package/dist-types/components/Lightbox/index.d.ts +0 -9
  345. package/dist-types/components/Lightbox/wrapper.d.ts +0 -9
  346. package/dist-types/components/Link/index.d.ts +0 -7
  347. package/dist-types/components/Loader/index.d.ts +0 -7
  348. package/dist-types/components/Loader/wrapper.d.ts +0 -9
  349. package/dist-types/components/LogoBox/index.d.ts +0 -9
  350. package/dist-types/components/LogoBox/wrapper.d.ts +0 -4
  351. package/dist-types/components/Map/index.d.ts +0 -7
  352. package/dist-types/components/Map/wrapper.d.ts +0 -4
  353. package/dist-types/components/Modal/index.d.ts +0 -9
  354. package/dist-types/components/Modal/wrapper.d.ts +0 -21
  355. package/dist-types/components/NavButton/index.d.ts +0 -3
  356. package/dist-types/components/OpeningHours/index.d.ts +0 -7
  357. package/dist-types/components/OptionBox/index.d.ts +0 -9
  358. package/dist-types/components/OptionBox/wrapper.d.ts +0 -8
  359. package/dist-types/components/OverflowBox/index.d.ts +0 -6
  360. package/dist-types/components/OverflowBox/wrapper.d.ts +0 -1
  361. package/dist-types/components/OverflowGrid/index.d.ts +0 -12
  362. package/dist-types/components/OverflowGrid/wrapper.d.ts +0 -18
  363. package/dist-types/components/Page/index.d.ts +0 -7
  364. package/dist-types/components/Panel/index.d.ts +0 -10
  365. package/dist-types/components/Panel/wrapper.d.ts +0 -22
  366. package/dist-types/components/PhoneNumber/index.d.ts +0 -6
  367. package/dist-types/components/Portal/index.d.ts +0 -4
  368. package/dist-types/components/Portal/portal-element.d.ts +0 -6
  369. package/dist-types/components/Portal/portal-namespace.d.ts +0 -1
  370. package/dist-types/components/Portal/portal.d.ts +0 -7
  371. package/dist-types/components/Price/index.d.ts +0 -4
  372. package/dist-types/components/PriceBox/index.d.ts +0 -11
  373. package/dist-types/components/PriceBox/wrapper.d.ts +0 -10
  374. package/dist-types/components/PriceTable/index.d.ts +0 -7
  375. package/dist-types/components/PriceTable/wrapper.d.ts +0 -4
  376. package/dist-types/components/ProductCard/index.d.ts +0 -20
  377. package/dist-types/components/ProductCard/wrapper.d.ts +0 -22
  378. package/dist-types/components/ProductPage/index.d.ts +0 -9
  379. package/dist-types/components/ProgressBar/index.d.ts +0 -8
  380. package/dist-types/components/ProgressBar/wrapper.d.ts +0 -6
  381. package/dist-types/components/RangeSlider/RangeSliderSimple.d.ts +0 -13
  382. package/dist-types/components/RangeSlider/SliderWithLabel.d.ts +0 -13
  383. package/dist-types/components/RangeSlider/handle.d.ts +0 -9
  384. package/dist-types/components/RangeSlider/index.d.ts +0 -13
  385. package/dist-types/components/RangeSlider/track.d.ts +0 -9
  386. package/dist-types/components/RangeSlider/wrapper.d.ts +0 -11
  387. package/dist-types/components/RangeSliderLabel/index.d.ts +0 -8
  388. package/dist-types/components/RangeSliderLabel/wrapper.d.ts +0 -10
  389. package/dist-types/components/Repeat/index.d.ts +0 -3
  390. package/dist-types/components/Result/index.d.ts +0 -6
  391. package/dist-types/components/Result/wrapper.d.ts +0 -9
  392. package/dist-types/components/Root/index.d.ts +0 -4
  393. package/dist-types/components/SearchBar/index.d.ts +0 -8
  394. package/dist-types/components/SearchFilter/index.d.ts +0 -3
  395. package/dist-types/components/SearchTerm/index.d.ts +0 -8
  396. package/dist-types/components/SearchTerm/wrapper.d.ts +0 -7
  397. package/dist-types/components/SectionHeader/index.d.ts +0 -8
  398. package/dist-types/components/SectionHeader/wrapper.d.ts +0 -3
  399. package/dist-types/components/Snackbar/index.d.ts +0 -9
  400. package/dist-types/components/Snackbar/wrapper.d.ts +0 -11
  401. package/dist-types/components/SortSelect/index.d.ts +0 -14
  402. package/dist-types/components/SortSelect/wrapper.d.ts +0 -6
  403. package/dist-types/components/Sphere/Sphere.d.ts +0 -10
  404. package/dist-types/components/Sphere/SphereLightbox.d.ts +0 -6
  405. package/dist-types/components/Sphere/SphereViewer.d.ts +0 -10
  406. package/dist-types/components/Sphere/wrapper.d.ts +0 -1
  407. package/dist-types/components/SrOnly/index.d.ts +0 -1
  408. package/dist-types/components/StateIndicator/index.d.ts +0 -5
  409. package/dist-types/components/SwitchBar/index.d.ts +0 -10
  410. package/dist-types/components/SwitchBar/wrapper.d.ts +0 -14
  411. package/dist-types/components/TableColumn/index.d.ts +0 -3
  412. package/dist-types/components/TableList/index.d.ts +0 -6
  413. package/dist-types/components/Tabs/index.d.ts +0 -12
  414. package/dist-types/components/Tabs/wrapper.d.ts +0 -12
  415. package/dist-types/components/ThreeSixty/Rotation.d.ts +0 -6
  416. package/dist-types/components/ThreeSixty/ThreeSixtLightbox.d.ts +0 -6
  417. package/dist-types/components/ThreeSixty/ThreeSixty.d.ts +0 -9
  418. package/dist-types/components/UspList/index.d.ts +0 -11
  419. package/dist-types/components/UspList/wrapper.d.ts +0 -11
  420. package/dist-types/components/Utility/index.d.ts +0 -8
  421. package/dist-types/components/Video/CustomPlayer.d.ts +0 -10
  422. package/dist-types/components/Video/EmbeddedVideoLightbox.d.ts +0 -8
  423. package/dist-types/components/Video/EmbededVideo.d.ts +0 -8
  424. package/dist-types/components/Video/QuickNavEmbeded.d.ts +0 -7
  425. package/dist-types/components/Video/QuickNavVideo.d.ts +0 -7
  426. package/dist-types/components/Video/Video.d.ts +0 -5
  427. package/dist-types/components/Video/VimeoPlayer.d.ts +0 -7
  428. package/dist-types/components/Video/YoutubePlayer.d.ts +0 -7
  429. package/dist-types/components/Video/useThumbnail.d.ts +0 -2
  430. package/dist-types/components/Video/utils.d.ts +0 -9
  431. package/dist-types/components/Video/wrapper.d.ts +0 -11
  432. package/dist-types/hooks/useFetch.d.ts +0 -7
  433. package/dist-types/hooks/useHasBeenVisible.d.ts +0 -2
  434. package/dist-types/hooks/useHashGuid.d.ts +0 -2
  435. package/dist-types/hooks/useInsurance.d.ts +0 -4
  436. package/dist-types/hooks/useLoan.d.ts +0 -4
  437. package/dist-types/hooks/useOnScreen.d.ts +0 -2
  438. package/dist-types/hooks/useOutsideClick.d.ts +0 -2
  439. package/dist-types/hooks/usePrevious.d.ts +0 -2
  440. package/dist-types/hooks/useSearchItem.d.ts +0 -4
  441. package/dist-types/hooks/useSearchItemBranch.d.ts +0 -4
  442. package/dist-types/hooks/useSessionStorage.d.ts +0 -7
  443. package/dist-types/hooks/useVimeoThumbnail.d.ts +0 -2
  444. package/dist-types/index.d.ts +0 -18
  445. package/dist-types/layout/helpers.d.ts +0 -1
  446. package/dist-types/layout/keyframes.d.ts +0 -3
  447. package/dist-types/layout/theme.d.ts +0 -49
  448. package/dist-types/layouts/WaykeComposite.d.ts +0 -6
  449. package/dist-types/layouts/WaykeCompositeWithProvider.d.ts +0 -9
  450. package/dist-types/layouts/search/index.d.ts +0 -16
  451. package/dist-types/layouts/searchItem/Accessories/AccessoryModal.d.ts +0 -8
  452. package/dist-types/layouts/searchItem/Accessories/index.d.ts +0 -7
  453. package/dist-types/layouts/searchItem/Branch.d.ts +0 -9
  454. package/dist-types/layouts/searchItem/BranchModal.d.ts +0 -9
  455. package/dist-types/layouts/searchItem/CheckList.d.ts +0 -14
  456. package/dist-types/layouts/searchItem/DemoCarModal.d.ts +0 -6
  457. package/dist-types/layouts/searchItem/Documents.d.ts +0 -7
  458. package/dist-types/layouts/searchItem/ManufacturerPackagesOption.d.ts +0 -7
  459. package/dist-types/layouts/searchItem/MetadataItem.d.ts +0 -10
  460. package/dist-types/layouts/searchItem/PackageOptionModal.d.ts +0 -17
  461. package/dist-types/layouts/searchItem/PackageOptions.d.ts +0 -7
  462. package/dist-types/layouts/searchItem/Page404.d.ts +0 -3
  463. package/dist-types/layouts/searchItem/PageLoading.d.ts +0 -3
  464. package/dist-types/layouts/searchItem/Property.d.ts +0 -8
  465. package/dist-types/layouts/searchItem/Related.d.ts +0 -11
  466. package/dist-types/layouts/searchItem/index.d.ts +0 -13
  467. package/dist-types/providers/WaykeItemProvidet.d.ts +0 -22
  468. package/dist-types/providers/WaykeProvider.d.ts +0 -24
  469. package/dist-types/providers/graphqlProvider.d.ts +0 -6
  470. package/dist-types/providers/themeProvider.d.ts +0 -6
  471. package/dist-types/queries/INSURANCE_CALCULATION.d.ts +0 -2
  472. package/dist-types/queries/LOAN_CALCULATION.d.ts +0 -2
  473. package/dist-types/queries/SEARCH_ITEM_BRANCH_QUERY.d.ts +0 -2
  474. package/dist-types/queries/SEARCH_ITEM_QUERY.d.ts +0 -2
  475. package/dist-types/utils/constants.d.ts +0 -63
  476. package/dist-types/utils/converters.d.ts +0 -1
  477. package/dist-types/utils/deep-copy.d.ts +0 -5
  478. package/dist-types/utils/formats.d.ts +0 -8
  479. package/dist-types/utils/metadata.min.d.ts +0 -11
  480. package/dist-types/utils/phonenumbers.d.ts +0 -1
  481. package/dist-types/utils/pubsub/Actions.d.ts +0 -16
  482. package/dist-types/utils/pubsub/Events.d.ts +0 -51
  483. package/dist-types/utils/pubsub/pubsub.d.ts +0 -32
  484. package/dist-types/utils/regex.d.ts +0 -3
  485. package/dist-types/utils/sortOptions.d.ts +0 -13
  486. package/dist-types/utils/specification.d.ts +0 -28
  487. package/dist-types/utils/ssn.d.ts +0 -1
  488. package/dist-types/utils/url.d.ts +0 -1
  489. package/dist-types/utils/vehicle-properties/compare-basic-properties.d.ts +0 -3
  490. package/dist-types/utils/vehicle-properties/compare-categories.d.ts +0 -3
  491. package/dist-types/utils/vehicle-properties/compare-properties.d.ts +0 -3
  492. package/dist-types/utils/vehicle-properties/custom-property-adder.d.ts +0 -12
  493. package/dist-types/utils/vehicle-properties/property-hint-enricher.d.ts +0 -10
  494. package/dist-types/utils/vehicle-properties/property-remover.d.ts +0 -7
  495. package/dist-types/utils/vehicle-properties/property-tree-creator.d.ts +0 -31
  496. package/dist-types/utils/vehicle-properties/property-tree-sorter.d.ts +0 -3
  497. package/dist-web/index.js +0 -8197
  498. package/dist-web/index.js.map +0 -1
@@ -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, "Visar ", valueCurrent.toString(), " av ", valueMax.toString(), " ", unit), React__default.createElement(Bar, null, React__default.createElement(BarActive, {
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
- }) => React.createElement(Wrapper$3, {
495
- inline: inline,
496
- center: center
497
- }, React.createElement(Spinner, {
498
- "aria-hidden": "true"
499
- }), React.createElement(SrOnly, null, "Laddar..."));
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
- }) => React__default.createElement(Wrapper$4, null, React__default.createElement(Select, {
810
- value: value,
811
- onChange: onChange,
812
- title: "Sortering",
813
- "aria-label": "Sortering"
814
- }, options.map(option => React__default.createElement(Option, {
815
- key: option.value,
816
- value: option.value
817
- }, option.displayName || option.value, unit ? ` ${unit}` : ''))), React__default.createElement(Icon, null, React__default.createElement(IconChevronDown, {
818
- block: true
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 'Publicerad äldst';
817
+ return i18next.t('search.sortOptions.publishedAsc');
835
818
  case SortOptionDisplayName.PublishedDesc:
836
- return 'Publicerad senast';
819
+ return i18next.t('search.sortOptions.publishedDesc');
837
820
  case SortOptionDisplayName.PriceAsc:
838
- return 'Pris lägst';
821
+ return i18next.t('search.sortOptions.priceAsc');
839
822
  case SortOptionDisplayName.Pricedesc:
840
- return 'Pris högst';
823
+ return i18next.t('search.sortOptions.priceDesc');
841
824
  case SortOptionDisplayName.ModelAsc:
842
- return 'Årsmodell äldst';
825
+ return i18next.t('search.sortOptions.modelAsc');
843
826
  case SortOptionDisplayName.Modeldesc:
844
- return 'Årsmodell nyast';
827
+ return i18next.t('search.sortOptions.modelDesc');
845
828
  case SortOptionDisplayName.MileageAsc:
846
- return 'Miltal lägst';
829
+ return i18next.t('search.sortOptions.mileageAsc');
847
830
  case SortOptionDisplayName.Mileagedesc:
848
- return 'Miltal högst';
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 ? void 0 : (_response$documentLis = response.documentList.sortOptions.find(x => x.selected)) === null || _response$documentLis === void 0 ? void 0 : _response$documentLis.query;
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(object, enumerableOnly) {
895
- var keys = Object.keys(object);
876
+ function ownKeys(e, r) {
877
+ var t = Object.keys(e);
896
878
  if (Object.getOwnPropertySymbols) {
897
- var symbols = Object.getOwnPropertySymbols(object);
898
- enumerableOnly && (symbols = symbols.filter(function (sym) {
899
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
900
- })), keys.push.apply(keys, symbols);
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 keys;
884
+ return t;
903
885
  }
904
- function _objectSpread2(target) {
905
- for (var i = 1; i < arguments.length; i++) {
906
- var source = null != arguments[i] ? arguments[i] : {};
907
- i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
908
- _defineProperty(target, key, source[key]);
909
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
910
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
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 target;
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: "St\u00E4ng panel",
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: "St\u00E4ng panel",
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: "Visa mer"
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, _initialFacet$filters2, _queryFilter$searchPa3;
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 ? void 0 : (_initialFacet$filters = initialFacet.filters[(initialFacet === null || initialFacet === void 0 ? void 0 : initialFacet.filters.length) - 1]) === null || _initialFacet$filters === void 0 ? void 0 : (_initialFacet$filters2 = _initialFacet$filters.displayName) === null || _initialFacet$filters2 === void 0 ? void 0 : _initialFacet$filters2.includes('+');
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: "kr",
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: "kr/m\u00E5n",
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: "mil",
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: "Filtrera",
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, "Rensa alla"))), React__default.createElement(FooterActionItem, null, React__default.createElement(ButtonPrimary, {
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, `Visa ${numberOfHits} ${numberOfHits === 1 ? 'bil' : 'bilar'}`)))))
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 ? void 0 : (_facets$filter = facets.filter(x => x.id !== 'segment')) === 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 => {
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: FacetIdToTitle(x.id)
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, null, React__default.createElement(LazyLoad, null, image ? React__default.createElement(React__default.Fragment, null, React__default.createElement(Picture, null, React__default.createElement(Source, {
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
- })))), 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, {
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, "Pris"), React__default.createElement(CurrentPrice, null, price)), leasingPrice && React__default.createElement(PriceCell, null, React__default.createElement(Label$3, null, "Privatleasing"), React__default.createElement(CurrentPrice, null, leasingPrice)), businessLeasingPrice && React__default.createElement(PriceCell, null, React__default.createElement(Label$3, null, "F\u00F6retagsleasing"), React__default.createElement(CurrentPrice, null, businessLeasingPrice))))));
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, _document$featuredIma2, _document$featuredIma3;
2473
- const img = (_document$featuredIma = document.featuredImage) === null || _document$featuredIma === void 0 ? void 0 : (_document$featuredIma2 = _document$featuredIma.files) === null || _document$featuredIma2 === void 0 ? void 0 : (_document$featuredIma3 = _document$featuredIma2[0]) === null || _document$featuredIma3 === void 0 ? void 0 : _document$featuredIma3.url;
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$branches$;
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 ? void 0 : (_document$branches$ = _document$branches[0]) === null || _document$branches$ === void 0 ? void 0 : _document$branches$.name : undefined,
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)} mil`
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)} kr`,
2531
- oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)} kr` : undefined,
2532
- leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)} kr/mån` : undefined,
2533
- businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)} kr/mån` : undefined
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
- }) => React__default.createElement(Wrapper$9, null, React__default.createElement(Query, null, children), onClear && React__default.createElement(Clear, {
2608
- onClick: onClear,
2609
- title: clearTitle ? clearTitle : 'Rensa fritext'
2610
- }, React__default.createElement(IconCancel, {
2611
- block: true
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: "S\u00F6k",
2767
- label: "S\u00F6k",
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: "Inga resultat"
3024
- }, "Det finns inga resultat som matchar din s\u00F6kning.")))))), React__default.createElement(PortalElement, {
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
- }) => React__default.createElement(List$6, null, React__default.createElement(Item$6, null, React__default.createElement(Label$5, null, React__default.createElement(VisualHeading, null, "Pris")), React__default.createElement(Value, null, React__default.createElement(Price$1, null, numberSeparator(price), " kr"))), 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), " kr"))));
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
- const ReactPannellum = React.lazy(() => Promise.resolve().then(() => require('react-pannellum')));
4044
- const config = {
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
- const c = _objectSpread2(_objectSpread2({}, config), {}, {
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(ReactPannellum, {
5051
+ }, React__default.createElement(Pannellum, {
4096
5052
  id: `a-${id}-${number}`,
4097
- sceneId: src,
4098
- imageSource: src,
4099
- config: c,
4100
- style: style
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: "Starta 360\u00B0 exteri\u00F6rt",
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: `Bild ${i + 1}`
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: `Bild ${i + 1}`
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: "St\u00E4ng"
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: "St\u00E4ng modal"
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: "St\u00E4ng modal"
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: `Bild ${index + 1}`
5531
+ alt: t('common.imageIndex', {
5532
+ index: index + 1
5533
+ }) || ''
4558
5534
  }), React__default.createElement(MediaButton, {
4559
- text: "Spela video",
5535
+ text: t('other.playVideo'),
4560
5536
  onClick: onClick
4561
5537
  }), modal && React__default.createElement(Modal, {
4562
- title: "Video",
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: "Spela video",
5550
+ text: t('other.playVideo'),
4575
5551
  onClick: onClick
4576
5552
  }), modal && React__default.createElement(Modal, {
4577
- title: "Video",
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: `Bild ${index + 1}`
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: "Starta 360\u00B0 interi\u00F6rt",
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: "Starta 360\u00B0 exteri\u00F6rt",
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: `Bild ${i + 1}`
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, _quickNavRef$current$;
4695
- const element = (_quickNavRef$current = quickNavRef.current) === null || _quickNavRef$current === void 0 ? void 0 : (_quickNavRef$current$ = _quickNavRef$current.querySelectorAll('li')) === null || _quickNavRef$current$ === void 0 ? void 0 : _quickNavRef$current$[newIndex];
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: `Bild ${i + 1}`
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: `Bild 1`
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: "St\u00E4ng"
4793
- }, React__default.createElement(ButtonContent, null, "St\u00E4ng")))), !navigationDisabled && mediaLength > 1 && React__default.createElement(React__default.Fragment, null, React__default.createElement(ArrowLeft, null, React__default.createElement(NavButton, {
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: "F\u00F6reg\u00E5ende bild"
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: "N\u00E4sta bild"
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: `Gå till bild ${i + 1}`
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: `Bild ${i + 1}`
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: `Bild ${i + 1}`
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: `Bild ${i + 1}`
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: `Gå till bild 0`
5836
+ title: t('other.goToImageIndex', {
5837
+ index: 1
5838
+ }) || ''
4833
5839
  }, React__default.createElement(QuickNavImg, {
4834
5840
  src: placeholder,
4835
- alt: `Bild 1`
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' ? 'Privatleasa' : type === 'business-leasing' ? 'Företagsleasa' : type;
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: 'Månadskostnad',
5304
- value: `${numberSeparator(monthlyCost || 0)} kr/mån`
6318
+ label: t('item.financialOptions.monthlyCost'),
6319
+ value: `${numberSeparator(monthlyCost || 0)} ${t('currency.monthly')}`
5305
6320
  }, {
5306
- label: 'Bindningstid',
6321
+ label: t('item.financialOptions.bindingTime'),
5307
6322
  value: `${duration === null || duration === void 0 ? void 0 : duration.current} månader`
5308
6323
  }, {
5309
- label: 'Årlig körsträcka',
5310
- value: `${numberSeparator((mileage === null || mileage === void 0 ? void 0 : mileage.current) || 0)} mil/år`
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)} kr/mån`)), 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), " mil/\u00E5r"), ' ', "i ", React__default.createElement(UtilityTextPrimary, null, duration === null || duration === void 0 ? void 0 : duration.current, " m\u00E5n"), ".", ' ')), name && React__default.createElement("p", null, React__default.createElement(ButtonInline, {
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
- }, "L\u00E4s mer")))));
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$loan$duration, _data$loan2, _data$loan2$downPayme, _data$loan3, _data$loan3$residual;
6565
+ var _data$loan, _data$loan2, _data$loan3;
5548
6566
  setTmp(data);
5549
6567
  setVariables({
5550
- duration: (data === null || data === void 0 ? void 0 : (_data$loan = data.loan) === null || _data$loan === void 0 ? void 0 : (_data$loan$duration = _data$loan.duration) === null || _data$loan$duration === void 0 ? void 0 : _data$loan$duration.current) || 0,
5551
- downPayment: (data === null || data === void 0 ? void 0 : (_data$loan2 = data.loan) === null || _data$loan2 === void 0 ? void 0 : (_data$loan2$downPayme = _data$loan2.downPayment) === null || _data$loan2$downPayme === void 0 ? void 0 : _data$loan2$downPayme.current) || 0,
5552
- residual: (data === null || data === void 0 ? void 0 : (_data$loan3 = data.loan) === null || _data$loan3 === void 0 ? void 0 : (_data$loan3$residual = _data$loan3.residual) === null || _data$loan3$residual === void 0 ? void 0 : _data$loan3$residual.current) || 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 ? void 0 : (_loan$downPayment = loan.downPayment) === null || _loan$downPayment === void 0 ? void 0 : _loan$downPayment.current) || 0;
5558
- const downPaymentMin = (loan === null || loan === void 0 ? void 0 : (_loan$downPayment2 = loan.downPayment) === null || _loan$downPayment2 === void 0 ? void 0 : _loan$downPayment2.min) || 0;
5559
- const downPaymentMax = (loan === null || loan === void 0 ? void 0 : (_loan$downPayment3 = loan.downPayment) === null || _loan$downPayment3 === void 0 ? void 0 : _loan$downPayment3.max) || 0;
5560
- const downPaymentStep = (loan === null || loan === void 0 ? void 0 : (_loan$downPayment4 = loan.downPayment) === null || _loan$downPayment4 === void 0 ? void 0 : _loan$downPayment4.step) || 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 ? void 0 : (_loan$duration = loan.duration) === null || _loan$duration === void 0 ? void 0 : _loan$duration.current) || 0;
5569
- const durationMin = (loan === null || loan === void 0 ? void 0 : (_loan$duration2 = loan.duration) === null || _loan$duration2 === void 0 ? void 0 : _loan$duration2.min) || 0;
5570
- const durationMax = (loan === null || loan === void 0 ? void 0 : (_loan$duration3 = loan.duration) === null || _loan$duration3 === void 0 ? void 0 : _loan$duration3.max) || 0;
5571
- const durationStep = (loan === null || loan === void 0 ? void 0 : (_loan$duration4 = loan.duration) === null || _loan$duration4 === void 0 ? void 0 : _loan$duration4.step) || 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 ? void 0 : (_loan$residual = loan.residual) === null || _loan$residual === void 0 ? void 0 : _loan$residual.current) || 0) * 100 || 0;
5580
- const residualMin = ((loan === null || loan === void 0 ? void 0 : (_loan$residual2 = loan.residual) === null || _loan$residual2 === void 0 ? void 0 : _loan$residual2.min) || 0) * 100 || 0;
5581
- const residualMax = ((loan === null || loan === void 0 ? void 0 : (_loan$residual3 = loan.residual) === null || _loan$residual3 === void 0 ? void 0 : _loan$residual3.max) || 0) * 100 || 0;
5582
- const residualStep = ((loan === null || loan === void 0 ? void 0 : (_loan$residual4 = loan.residual) === null || _loan$residual4 === void 0 ? void 0 : _loan$residual4.step) || 0) * 100 || 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: "L\u00E5nealternativ",
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 || 'Logotyp',
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: "Kontantinsatts",
6619
+ label: t('item.financialOptions.downPayment'),
5601
6620
  values: [downPaymentCurrent],
5602
6621
  domain: [downPaymentMin, downPaymentMax],
5603
6622
  steps: downPaymentSteps,
5604
- unit: "kr",
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: "Avbetalning",
6628
+ label: t('item.financialOptions.duration'),
5610
6629
  values: [durationCurrent],
5611
6630
  domain: [durationMin, durationMax],
5612
6631
  steps: durationSteps,
5613
- unit: "m\u00E5n",
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: "Restskuld",
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, `*Beräknat på ${interestText} % ränta (effektivt ${effectiveInterestText} %)${(loan === null || loan === void 0 ? void 0 : loan.mileage) !== null ? `och en årlig körsträcka om ${loan === null || loan === void 0 ? void 0 : loan.mileage} mil.` : ''}`)))), React__default.createElement(RepeatSmall, null, React__default.createElement(ButtonClear, {
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 ? 'Visa mindre information' : 'Visa mer information'
5629
- }, React__default.createElement(ButtonContent, null, extend ? 'Mindre information' : 'Mer information'))), React__default.createElement(React__default.Fragment, null, extend && React__default.createElement(ModalFoldout, null, React__default.createElement(ModalFoldoutBody, null, React__default.createElement(DataList, {
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: 'Ränta',
6657
+ label: t('item.financialOptions.interest'),
5632
6658
  value: `${interestText} %`
5633
6659
  }, {
5634
- label: 'Effektiv ränta',
6660
+ label: t('item.financialOptions.effectiveinterest'),
5635
6661
  value: `${effectiveInterestText} %`
5636
6662
  }, {
5637
- label: 'Uppläggningskostnad',
5638
- value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.setupFee) || 0)} kr`
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: 'Administrativa avgifter',
5641
- value: `${numberSeparator((financialOption === null || financialOption === void 0 ? void 0 : financialOption.administrationFee) || 0)} kr/mån`
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: 'Total kreditkostnad',
5644
- value: `${numberSeparator((loan === null || loan === void 0 ? void 0 : loan.totalCreditCost) || 0)} kr`
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$loan2$duration, _data$loan3;
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 ? void 0 : (_data$loan = data.loan) === null || _data$loan === void 0 ? void 0 : _data$loan.interest;
5660
- const duration = data === null || data === void 0 ? void 0 : (_data$loan2 = data.loan) === null || _data$loan2 === void 0 ? void 0 : (_data$loan2$duration = _data$loan2.duration) === null || _data$loan2$duration === void 0 ? void 0 : _data$loan2$duration.current;
5661
- const monthlyCost = data === null || data === void 0 ? void 0 : (_data$loan3 = data.loan) === null || _data$loan3 === void 0 ? void 0 : _data$loan3.monthlyCost;
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: "Logotyp"
5668
- }, React__default.createElement(OptionBoxHeading, null, "Laddar..."), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, "Laddar...")));
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: "Logotyp"
5677
- }, React__default.createElement(React__default.Fragment, null, React__default.createElement(OptionBoxHeading, null, `${numberSeparator(monthlyCost)} kr/mån*`), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, "Delbetala", ' ', financialOption.loanAmount && duration && React__default.createElement(React__default.Fragment, null, React__default.createElement(UtilityTextPrimary, null, numberSeparator(financialOption.loanAmount), " kr"), ' ', "i ", React__default.createElement(UtilityTextPrimary, null, duration, " m\u00E5n"), ".")), React__default.createElement("p", null, `*Beräknat på ${(interest * 100).toFixed(2)}% ränta. `, React__default.createElement(ButtonInline, {
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
- }, "L\u00E4s mer"))))));
6713
+ }, t('common.readMore')))))));
5680
6714
  };
5681
6715
 
5682
6716
  const FinancialOptions = ({
5683
6717
  id,
5684
6718
  financialOptions
5685
- }) => React__default.createElement(Repeat, null, React__default.createElement(RepeatTiny, null, React__default.createElement(VisualHeading, null, "Andra finansieringsalternativ")), React__default.createElement(RepeatTiny, null, financialOptions.map((financialOption, index) => React__default.createElement(React.Fragment, {
5686
- key: index
5687
- }, (financialOption.type === 'leasing' || financialOption.type === 'business-leasing') && React__default.createElement(Leasing, {
5688
- financialOption: financialOption
5689
- }), financialOption.type === 'loan' && React__default.createElement(Loan, {
5690
- id: id,
5691
- financialOption: 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 ? 'Mindre information' : 'Mer information';
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: "Mer information"
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: "F\u00F6rs\u00E4kring",
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 || 'Logotyp',
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
- }, "Personnummer"), React__default.createElement(InputText, {
7246
+ }, t('item.personalNumber')), React__default.createElement(InputText, {
6199
7247
  placeholder: "\u00C5\u00C5\u00C5\u00C5MMDD-XXXX",
6200
- label: "Personnummer",
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
- }, "Uppskattad k\u00F6rstr\u00E4cka per \u00E5r"), React__default.createElement(InputSelect, {
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: "Uppskattad k\u00F6rstr\u00E4cka per \u00E5r"
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, "Visa f\u00F6rs\u00E4kringar")))), false , React__default.createElement(RepeatSmall, null, React__default.createElement(Content$2, {
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, "Spara personnummer p\u00E5 denna dator f\u00F6r att direkt visa f\u00F6rs\u00E4kringskostnaderna i Wayke. Personnumret lagras inte hos Wayke utan finns bara sparad i din webbl\u00E4sare.")))), loading && React__default.createElement(Repeat, null, React__default.createElement(Loader, null)), error && React__default.createElement(Repeat, null, React__default.createElement(Snackbar, {
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: "Ett fel har intr\u00E4ffat"
6223
- }, "Kunde inte h\u00E4mta f\u00F6rs\u00E4kringar. V\u00E4nligen f\u00F6rs\u00F6k igen.")), 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, {
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
- }, "F\u00F6rk\u00F6psinformation och villkor (\u00F6ppnas i ny flik)")))), insurance.items && insurance.items.length > 0 && React__default.createElement(Repeat, null, React__default.createElement(H4, null, "F\u00F6rs\u00E4kringen inneh\u00E5ller"), insurance.items.map(item => React__default.createElement(RepeatSmall, {
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, "V\u00E4lj till"), insurance.addons.map(addon => React__default.createElement(RepeatSmall, {
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, "V\u00E4lj till f\u00F6rs\u00E4kring")), React__default.createElement(RepeatTiny, null, React__default.createElement(React__default.Fragment, null, insuranceOptions.map((insuranceOption, index) => React__default.createElement(OptionBox, {
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 || 'Logotyp'
6263
- }, React__default.createElement(OptionBoxHeading, null, "F\u00E5 prisf\u00F6rslag"), React__default.createElement(OptionBoxContent, null, React__default.createElement("p", null, React__default.createElement(ButtonInline, {
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
- }, "Mer information")))))))));
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 : 'Försäkring',
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
- }, "L\u00E4s mer om f\u00F6rs\u00E4kringen (\u00D6ppnas i ett nytt f\u00F6nster)")), (insuranceOptions === null || insuranceOptions === void 0 ? void 0 : insuranceOptions.logotype) && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
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 || 'Logotyp',
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 : 'Försäkring')), React__default.createElement(RepeatTiny, null, React__default.createElement(React__default.Fragment, null, insuranceOptions.map((insuranceOption, index) => React__default.createElement(OptionBox, {
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 || 'Logotyp'
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
- }, "Mer information")))))))));
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 : 'Läs mer (Öppnas i ett nytt fönster)')), packageOption.image && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
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: "Logotyp",
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' ? 'Ring' : type === 'mailto' ? 'Skicka ett mail till' : '';
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 email = (contact === null || contact === void 0 ? void 0 : contact.email) || (branch === null || branch === void 0 ? void 0 : (_branch$contact = branch.contact) === null || _branch$contact === void 0 ? void 0 : _branch$contact.email);
6425
- const phonenumber = (contact === null || contact === void 0 ? void 0 : contact.phonenumber) || (branch === null || branch === void 0 ? void 0 : (_branch$contact2 = branch.contact) === null || _branch$contact2 === void 0 ? void 0 : _branch$contact2.phonenumber);
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: "Visa mailadress",
7502
+ title: t('item.actions.showEmail'),
6435
7503
  value: email,
6436
7504
  type: "mailto"
6437
7505
  }), phonenumber && React__default.createElement(ToggleItem, {
6438
- title: "Visa telefonnummer",
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: "Mer information"
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: "Byt anl\u00E4ggning",
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, "V\u00E4lj den anl\u00E4ggning du vill visa kontaktuppgifter f\u00F6r."))), React__default.createElement(RepeatTiny, null, React__default.createElement(InputLabel, null, "V\u00E4lj anl\u00E4ggning"), React__default.createElement(InputSelect, {
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: "V\u00E4lj anl\u00E4ggning"
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
- }, React__default.createElement(ButtonContent, null, "V\u00E4lj"))));
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, "K\u00F6p bilen online"))), (ecommerce === null || ecommerce === void 0 ? void 0 : ecommerce.reserved) && React__default.createElement(RepeatTiny, null, React__default.createElement(SwitchBar, {
6767
- title: "Bilen \u00E4r reserverad",
6768
- body: "Denna bil \u00E4r reserverad av en annan k\u00F6pare."
6769
- }, React__default.createElement(Content$2, null, React__default.createElement("p", null, "Denna bil \u00E4r reserverad av en annan k\u00F6pare.")))), React__default.createElement(ActionList, {
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, "Tillg\u00E4nglig fr\u00E5n ", esm.format(new Date(availableFrom), 'dd MMMM yyyy', {
6780
- locale: sv
6781
- }))))), 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, "Inkl.", ' ', React__default.createElement(ButtonInline, {
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), ' ', "begagnatgaranti")), packageOptions === null || packageOptions === void 0 ? void 0 : packageOptions.map((packageOption, index) => React__default.createElement(CheckMarkListItem, {
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, "Inkl.", ' ', React__default.createElement(ButtonInline, {
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, "Hemleverans")))), ((branch === null || branch === void 0 ? void 0 : branch.connections.length) || 0) > 1 && React__default.createElement(Repeat, null, React__default.createElement(SwitchBar, {
6798
- title: "Centrallagerbil",
6799
- actionTitle: "Byt anl\u00E4ggning",
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, "Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar. Byt anl\u00E4ggning f\u00F6r att visa kontaktuppgifter till just den anl\u00E4ggningen.")))));
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 ? void 0 : _overflowElement$curr3.scroll({
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 ? void 0 : _overflowElement$curr8.scroll({
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 ? void 0 : _overflowElement$curr12.addEventListener('scroll', onScroll);
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
- }, "Relaterade fordon"))) : React__default.createElement(Repeat, null, React__default.createElement(SectionHeader, {
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
- }, "Senast inkomna"))), React__default.createElement(Repeat, null, React__default.createElement(OverflowGrid, {
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$featuredIma2, _document$featuredIma3, _document$branches, _document$branches$;
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 ? void 0 : (_document$featuredIma2 = _document$featuredIma.files) === null || _document$featuredIma2 === void 0 ? void 0 : (_document$featuredIma3 = _document$featuredIma2[0]) === null || _document$featuredIma3 === void 0 ? void 0 : _document$featuredIma3.url,
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 ? void 0 : (_document$branches$ = _document$branches[0]) === null || _document$branches$ === void 0 ? void 0 : _document$branches$.name : undefined,
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)} mil`
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)} kr`,
7154
- oldPrice: document.oldPrice !== undefined && document.price < document.oldPrice ? `${numberSeparator(document.oldPrice)} kr` : undefined,
7155
- leasingPrice: document.leasingPrice !== undefined ? `${numberSeparator(document.leasingPrice)} kr/mån` : undefined,
7156
- businessLeasingPrice: document.businessLeasingPrice !== undefined ? `${numberSeparator(document.businessLeasingPrice)} kr/mån` : undefined,
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 : 'Läs mer (Öppnas i ett nytt fönster)')), packageOption.image && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
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: "Logotyp",
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 'Mån';
8323
+ return i18next.t('common.mondayShort');
7238
8324
  case 'tuesday':
7239
- return 'Tis';
8325
+ return i18next.t('common.tuesdayShort');
7240
8326
  case 'wednesday':
7241
- return 'Ons';
8327
+ return i18next.t('common.wednesdayShort');
7242
8328
  case 'thursday':
7243
- return 'Tor';
8329
+ return i18next.t('common.thursdayShort');
7244
8330
  case 'friday':
7245
- return 'Fre';
8331
+ return i18next.t('common.fridayShort');
7246
8332
  case 'saturday':
7247
- return 'Lör';
8333
+ return i18next.t('common.saturdayShort');
7248
8334
  case 'sunday':
7249
- return 'Sön';
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 ? 'Öppetider idag' : 'Stängt idag',
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 ? 'Öppet' : 'Stängt',
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}` : 'Stängt'))), oh.map(o => React__default.createElement(TableColumnRow, {
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}` : 'Stängt'))))));
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, "Telefonnummer"), React__default.createElement(TableColumnCell, null, visible ? React__default.createElement(ButtonInlineBold, {
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: `Ring ${phoneNumber}`
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: "Visa telefonnummer"
7322
- }, React__default.createElement(ButtonContent, null, "Visa telefonnummer"))));
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: "Visa p\u00E5 Google Maps",
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: "Karta"
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, "Visa karta"))));
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 ? `Den här bilen finns på ${branch.name}` : branch !== null && branch !== void 0 && (_branch$location = branch.location) !== null && _branch$location !== void 0 && _branch$location.city ? `Den här bilen finns på vår anläggning i ${branch === null || branch === void 0 ? void 0 : (_branch$location2 = branch.location) === null || _branch$location2 === void 0 ? void 0 : _branch$location2.city}` : 'Kontakt')), React__default.createElement(Repeat, null, React__default.createElement(StaticMap, {
7420
- position: branch === null || branch === void 0 ? void 0 : (_branch$location3 = branch.location) === null || _branch$location3 === void 0 ? void 0 : _branch$location3.position
7421
- })), ((branch === null || branch === void 0 ? 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, "Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar.", ' ', React__default.createElement(ButtonInline, {
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
- }, "Klicka h\u00E4r f\u00F6r att visa kontaktuppgifter till en annan anl\u00E4ggning"), "."))), 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 ? void 0 : (_branch$location4 = branch.location) === null || _branch$location4 === void 0 ? void 0 : _branch$location4.streetAddress) && (branch === null || branch === void 0 ? 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, "Adress"), React__default.createElement(TableColumnCell, null, React__default.createElement(ButtonInlineBold, null, React__default.createElement(ButtonContent, null, `${branch === null || branch === void 0 ? void 0 : (_branch$location6 = branch.location) === null || _branch$location6 === void 0 ? void 0 : _branch$location6.streetAddress}, ${branch === null || branch === void 0 ? void 0 : (_branch$location7 = branch.location) === null || _branch$location7 === void 0 ? void 0 : _branch$location7.city}`)))), (branch === null || branch === void 0 ? void 0 : (_branch$contact = branch.contact) === null || _branch$contact === void 0 ? void 0 : _branch$contact.phonenumber) && React__default.createElement(PhoneNumber, {
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 ? void 0 : (_vehicle$branch = vehicle.branch) === null || _vehicle$branch === void 0 ? void 0 : _vehicle$branch.connections;
7583
- const branchId = centralStorageId ? connections === null || connections === void 0 ? void 0 : (_connections$find = connections.find(x => x.id === centralStorageId)) === null || _connections$find === void 0 ? void 0 : _connections$find.id : undefined;
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 = () => React__default.createElement(Page, null, React__default.createElement(PageSection, {
7606
- large: true
7607
- }, React__default.createElement(Container, null, React__default.createElement(H1, {
7608
- noMargin: true
7609
- }, "404"))));
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, _this$properties$prop4;
7630
- return !!((_this$properties$prop3 = this.properties[propertyKey].category) !== null && _this$properties$prop3 !== void 0 && (_this$properties$prop4 = _this$properties$prop3.subCategory) !== null && _this$properties$prop4 !== void 0 && _this$properties$prop4.id);
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$prop5, _this$properties$prop6;
7635
- return ((_this$properties$prop5 = this.properties[propertyKey].category) === null || _this$properties$prop5 === void 0 ? void 0 : (_this$properties$prop6 = _this$properties$prop5.subCategory) === null || _this$properties$prop6 === void 0 ? void 0 : _this$properties$prop6.id) === categoryId;
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: 'Basuppgifter',
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: 'Motor & Prestanda',
8936
+ name: i18next.t('category.engineAndPerformance'),
8013
8937
  subCategory: {
8014
8938
  id: 54,
8015
- name: 'Motor',
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('Varumärke').withValue(item.manufacturer).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Modell').withValue(item.modelSeries).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Version').withValue(item.modelName).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Modellår').withValue(item.modelYear).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).build();
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('Tillverkningsår').withValue(item.manufactureYear).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).build();
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 (!!item.mileage) {
8077
- newProperties.mileage = new PropertyBuilder().withName('Mätarställning').withValue(item.mileage).withType(NUMBER_TYPE).withCategory(BASIC_CATEGORY).withUnit('mil').build();
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('Växellåda').withValue(item.gearboxType).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Registreringsnummer').withValue(item.registrationNumber).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Bränslegrupp').withValue(item.fuelType).withType(TEXT_TYPE).withCategory(BASIC_CATEGORY).build();
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('Effekt').withValue(item.enginePower).withUnit('hk').withType(NUMBER_TYPE).withCategory(ENGINE_SUBCATEGORY).build();
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: "Ja"
8146
- }, React__default.createElement(SrOnly, null, "Ja"), React__default.createElement(IconCheck, {
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: "Nej"
8150
- }, React__default.createElement(SrOnly, null, "Nej"), React__default.createElement(IconCancel, {
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: `Mer information om ${name}`
8174
- }, name) : name), React__default.createElement(TableListValue, null, value !== undefined ? presentedValue : 'Uppgift saknas'), hint && foldout && React__default.createElement(Modal, {
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
- let newProperties = removeProperties(propertySet);
8300
- newProperties = addCustomProperties(vehicleData, newProperties);
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 ? 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;
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 ? void 0 : (_mappedProperties$cat2 = mappedProperties.categories) === null || _mappedProperties$cat2 === void 0 ? void 0 : _mappedProperties$cat2.find(category => category.id === activeCategoryId);
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 ? void 0 : (_mappedProperties$cat3 = mappedProperties.categories) === null || _mappedProperties$cat3 === void 0 ? void 0 : _mappedProperties$cat3.map(category => ({
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
- }) => React__default.createElement(Modal, {
8331
- title: "Demobil",
8332
- onClose: onClose
8333
- }, React__default.createElement(Content$2, null, React__default.createElement("p", null, "En demobil \u00E4r en bil som st\u00E5tt i utst\u00E4llning eller som p\u00E5 annat s\u00E4tt anv\u00E4nts f\u00F6r att visa upp en viss modell. Bilarna \u00E4r ofta v\u00E4lutrustade och har blivit v\u00E4l omh\u00E4ndertagna. Dessutom har de vanligtvis g\u00E5tt f\u00E5 mil och har fortfarande nybilsgarantierna kvar.")));
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
- }, "\u00D6ppna"))));
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': 'Energideklaration för däck',
8419
- 'content declaration': 'Varudeklaration',
8420
- other: 'Övriga dokument'
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
- }, "Dokument")), categorised.map(group => React__default.createElement(Repeat, {
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
- }) => React__default.createElement(Wrapper$z, null, image ? React__default.createElement(Image$4, {
8552
- src: image.src,
8553
- srcSet: image.srcSet,
8554
- alt: image.alt
8555
- }) : 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, {
8556
- src: branding.src,
8557
- srcSet: branding.srcSet,
8558
- alt: branding.alt
8559
- })), price && React__default.createElement(Price$2, null, price), preamble && React__default.createElement(Preamble, null, preamble), readMoreCta && React__default.createElement(ReadMoreBtn, {
8560
- onClick: readMoreCta
8561
- }, "L\u00E4s mer")));
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: 'Kontantpris',
8645
- price: `${numberSeparator(accessory.price)} kr`,
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: 'Tidigare pris',
8651
- price: `${numberSeparator(accessory.salePrice)} kr`,
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: 'Monteringskostnad',
8658
- price: `${numberSeparator(accessory.assemblyPrice)} kr`,
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 || 'Logotyp',
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
- }, "Art. nr."), React__default.createElement("div", null, accessory.articleNumber)), accessory.productPage && accessory.productPage.url && React__default.createElement(Repeat, null, React__default.createElement(Link$1, {
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: `Mer information om ${accessory.name}`,
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 || 'Läs mer', " (\u00F6ppnas i ny flik)")));
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
- }, "Tillbeh\u00F6r")), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, "Tillbeh\u00F6r som passar till detta fordon."))), React__default.createElement(Repeat, null, React__default.createElement(OverflowGrid, {
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)} kr`,
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$vehicle3$data, _result$vehicle4, _branch$flags;
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, _result$vehicle2$data, _result$vehicle2$data2;
8790
- return result === null || result === void 0 ? void 0 : (_result$vehicle2 = result.vehicle) === null || _result$vehicle2 === void 0 ? void 0 : (_result$vehicle2$data = _result$vehicle2.data) === null || _result$vehicle2$data === void 0 ? void 0 : (_result$vehicle2$data2 = _result$vehicle2$data.options) === null || _result$vehicle2$data2 === void 0 ? void 0 : _result$vehicle2$data2.filter(notEmpty).map(opt => ({
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 ? void 0 : (_result$vehicle3 = result.vehicle) === null || _result$vehicle3 === void 0 ? void 0 : (_result$vehicle3$data = _result$vehicle3.data) === null || _result$vehicle3$data === void 0 ? void 0 : _result$vehicle3$data.options]);
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: 'Demobil',
9806
+ title: i18next.t('item.demoCar'),
8837
9807
  onClick: onToggleDemoCarModal
8838
9808
  });
8839
9809
  }
8840
9810
  uspList.push({
8841
- title: `${numberSeparator(mileage)} mil`
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: "Tillbaka till bils\u00F6k"
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, "Tillbaka till bils\u00F6k")))) : null, (manufacturer === null || manufacturer === void 0 ? void 0 : manufacturer.logotype) && React__default.createElement(Repeat, null, React__default.createElement(LogoBox, {
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
- }, "Biluppgifter")), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, "Information direkt fr\u00E5n Transportstyrelsen och tillverkaren."))), React__default.createElement(Repeat, null, React__default.createElement(PropertySet, {
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
- }, "Utrustning")), React__default.createElement(Repeat, null, React__default.createElement(Content$2, null, React__default.createElement("p", null, "Kompletterande uppgifter om bilen."))), React__default.createElement(Repeat, null, React__default.createElement(ExtendContent, {
8916
- actionTitle: "Visa mer",
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 ? void 0 : (_response$documentLis = response.documentList.pagination.nextPage) === null || _response$documentLis === void 0 ? void 0 : _response$documentLis.query),
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 ? void 0 : initialQueryParams.append(key, value);
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,