@wayke-se/components-react 3.0.0-beta.11 → 3.0.0-beta.13

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 (278) hide show
  1. package/dist/index.js +5529 -5460
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.mjs +320 -257
  4. package/dist/index.mjs.map +2 -2
  5. package/package.json +4 -2
  6. package/.editorconfig +0 -10
  7. package/.eslintrc.js +0 -62
  8. package/.github/workflows/release-to-production.yaml +0 -40
  9. package/.github/workflows/release-to-test.yaml +0 -40
  10. package/.prettierrc +0 -12
  11. package/assets/ajax-loader.gif +0 -0
  12. package/assets/default.css +0 -1
  13. package/assets/fonts/slick.eot +0 -0
  14. package/assets/fonts/slick.svg +0 -14
  15. package/assets/fonts/slick.ttf +0 -0
  16. package/assets/fonts/slick.woff +0 -0
  17. package/codegen.yml +0 -19
  18. package/esbuild/build.js +0 -39
  19. package/esbuild/common.js +0 -15
  20. package/esbuild/start.js +0 -21
  21. package/esbuild/www/index.html +0 -32
  22. package/example/src/@types/global.d.ts +0 -7
  23. package/example/src/@types/react-panellum.d.ts +0 -1
  24. package/example/src/App.tsx +0 -77
  25. package/example/src/assets/style/ecom.css +0 -63
  26. package/example/src/assets/style/theme.css +0 -83
  27. package/example/src/index.html +0 -26
  28. package/example/src/index.tsx +0 -11
  29. package/example/src/routes/HashRoute/index.tsx +0 -30
  30. package/example/src/routes/Home/index.tsx +0 -33
  31. package/example/src/routes/NotFound/index.tsx +0 -5
  32. package/example/src/routes/PathRoute/index.tsx +0 -35
  33. package/example/src/routes/Search/index.tsx +0 -28
  34. package/example/src/routes/SearchItem/index.tsx +0 -28
  35. package/example/src/routes/index.tsx +0 -25
  36. package/src/@types/action.ts +0 -3
  37. package/src/@types/codegen/types.ts +0 -366
  38. package/src/@types/filter.ts +0 -18
  39. package/src/@types/queryFilter.ts +0 -5
  40. package/src/@types/react-panellum.d.ts +0 -1
  41. package/src/@types/search.ts +0 -118
  42. package/src/@types/theme.d.ts +0 -5
  43. package/src/@types/vehicle-properties.ts +0 -33
  44. package/src/State/CentralStorage/CentralStorageContext.ts +0 -10
  45. package/src/State/CentralStorage/CentralStorageProvider.tsx +0 -21
  46. package/src/State/CentralStorage/useCentralStorage.ts +0 -37
  47. package/src/State/Path/PathContext.ts +0 -11
  48. package/src/State/Path/PathProvider.tsx +0 -66
  49. package/src/State/Path/reducer.ts +0 -30
  50. package/src/State/Path/usePath.ts +0 -13
  51. package/src/State/RelatedSearch/RelatedSearchContext.ts +0 -18
  52. package/src/State/RelatedSearch/RelatedSearchProvider.tsx +0 -55
  53. package/src/State/RelatedSearch/useRelatedSearch.ts +0 -20
  54. package/src/State/Search/SearchContext.ts +0 -27
  55. package/src/State/Search/SearchProvider.tsx +0 -243
  56. package/src/State/Search/useSearch.ts +0 -6
  57. package/src/State/Settings/SettingsContext.ts +0 -15
  58. package/src/State/Settings/SettingsProvider.tsx +0 -23
  59. package/src/State/Settings/useSettings.ts +0 -7
  60. package/src/components/Accordion/index.tsx +0 -57
  61. package/src/components/Accordion/wrapper.tsx +0 -107
  62. package/src/components/ActionList/index.tsx +0 -48
  63. package/src/components/ActionList/toggle-item.tsx +0 -59
  64. package/src/components/Avatar/index.tsx +0 -12
  65. package/src/components/Avatar/wrapper.tsx +0 -21
  66. package/src/components/Badge/index.tsx +0 -12
  67. package/src/components/Badge/wrapper.tsx +0 -32
  68. package/src/components/Blockquote/index.tsx +0 -32
  69. package/src/components/Blockquote/wrapper.tsx +0 -52
  70. package/src/components/Button/index.tsx +0 -226
  71. package/src/components/CheckMarkList/index.tsx +0 -21
  72. package/src/components/CheckMarkList/wrapper.tsx +0 -31
  73. package/src/components/Checklist/index.tsx +0 -51
  74. package/src/components/Checklist/wrapper.tsx +0 -65
  75. package/src/components/ColorSelect/index.tsx +0 -63
  76. package/src/components/ColorSelect/wrapper.tsx +0 -82
  77. package/src/components/ColumnRow/index.tsx +0 -20
  78. package/src/components/Container/index.tsx +0 -11
  79. package/src/components/Container/wrapper.tsx +0 -14
  80. package/src/components/Content/index.tsx +0 -15
  81. package/src/components/Content/wrapper.tsx +0 -61
  82. package/src/components/ContentLogo/index.tsx +0 -27
  83. package/src/components/DataList/index.tsx +0 -25
  84. package/src/components/DataList/wrapper.tsx +0 -29
  85. package/src/components/DetailBox/index.tsx +0 -34
  86. package/src/components/DetailBox/wrapper.tsx +0 -34
  87. package/src/components/ExtendContent/index.tsx +0 -43
  88. package/src/components/ExtendContent/wrapper.tsx +0 -41
  89. package/src/components/ExtendInfo/index.tsx +0 -32
  90. package/src/components/ExtendInfo/wrapper.tsx +0 -63
  91. package/src/components/Filter/index.tsx +0 -108
  92. package/src/components/Filter/wrapper.tsx +0 -79
  93. package/src/components/FilterPanel/checkListFacet.tsx +0 -46
  94. package/src/components/FilterPanel/colorFacet.tsx +0 -47
  95. package/src/components/FilterPanel/faceSelector.tsx +0 -53
  96. package/src/components/FilterPanel/index.tsx +0 -79
  97. package/src/components/FilterPanel/rangeFacet.tsx +0 -128
  98. package/src/components/FinancialOptions/LoanModal.tsx +0 -223
  99. package/src/components/FinancialOptions/index.tsx +0 -29
  100. package/src/components/FinancialOptions/leasing.tsx +0 -77
  101. package/src/components/FinancialOptions/loan.tsx +0 -87
  102. package/src/components/Gallery/MediaButton.tsx +0 -19
  103. package/src/components/Gallery/index.tsx +0 -227
  104. package/src/components/Gallery/wrapper.tsx +0 -323
  105. package/src/components/Grid/index.tsx +0 -87
  106. package/src/components/Grid/wrapper.tsx +0 -30
  107. package/src/components/Heading/index.tsx +0 -72
  108. package/src/components/Icon/index.tsx +0 -87
  109. package/src/components/InputCheckbox/index.tsx +0 -30
  110. package/src/components/InputCheckbox/wrapper.tsx +0 -87
  111. package/src/components/InputGroup/index.tsx +0 -24
  112. package/src/components/InputLabel/index.tsx +0 -14
  113. package/src/components/InputLabel/wrapper.tsx +0 -10
  114. package/src/components/InputSearch/index.tsx +0 -51
  115. package/src/components/InputSearch/wrapper.tsx +0 -97
  116. package/src/components/InputSelect/index.tsx +0 -35
  117. package/src/components/InputSelect/wrapper.tsx +0 -59
  118. package/src/components/InputText/index.tsx +0 -27
  119. package/src/components/InputText/wrapper.tsx +0 -57
  120. package/src/components/InsuranceOptions/Insurance.tsx +0 -60
  121. package/src/components/InsuranceOptions/InsuranceFree.tsx +0 -59
  122. package/src/components/InsuranceOptions/InsuranceFreeModal.tsx +0 -49
  123. package/src/components/InsuranceOptions/InsuranceModal.tsx +0 -253
  124. package/src/components/InsuranceOptions/index.tsx +0 -27
  125. package/src/components/Lightbox/index.tsx +0 -51
  126. package/src/components/Lightbox/wrapper.tsx +0 -97
  127. package/src/components/Loader/index.tsx +0 -18
  128. package/src/components/Loader/wrapper.tsx +0 -50
  129. package/src/components/LogoBox/index.tsx +0 -22
  130. package/src/components/LogoBox/wrapper.tsx +0 -19
  131. package/src/components/Map/index.tsx +0 -62
  132. package/src/components/Map/wrapper.tsx +0 -29
  133. package/src/components/Modal/index.tsx +0 -51
  134. package/src/components/Modal/wrapper.tsx +0 -127
  135. package/src/components/OpeningHours/index.tsx +0 -145
  136. package/src/components/OptionBox/index.tsx +0 -23
  137. package/src/components/OptionBox/wrapper.tsx +0 -56
  138. package/src/components/OverflowBox/index.tsx +0 -11
  139. package/src/components/OverflowBox/wrapper.tsx +0 -7
  140. package/src/components/OverflowGrid/index.tsx +0 -70
  141. package/src/components/Page/index.tsx +0 -46
  142. package/src/components/Panel/index.tsx +0 -50
  143. package/src/components/Panel/wrapper.tsx +0 -155
  144. package/src/components/Pdf/index.tsx +0 -46
  145. package/src/components/Pdf/wrapper.tsx +0 -61
  146. package/src/components/PhoneNumber/index.tsx +0 -33
  147. package/src/components/Portal/index.ts +0 -5
  148. package/src/components/Portal/portal-element.tsx +0 -9
  149. package/src/components/Portal/portal-namespace.ts +0 -1
  150. package/src/components/Portal/portal.tsx +0 -36
  151. package/src/components/Price/index.tsx +0 -12
  152. package/src/components/PriceTable/index.tsx +0 -34
  153. package/src/components/PriceTable/wrapper.tsx +0 -27
  154. package/src/components/ProductCard/index.tsx +0 -133
  155. package/src/components/ProductCard/wrapper.tsx +0 -147
  156. package/src/components/ProductPage/index.tsx +0 -99
  157. package/src/components/ProgressBar/index.tsx +0 -31
  158. package/src/components/ProgressBar/wrapper.tsx +0 -29
  159. package/src/components/RangeSlider/RangeSliderSimple.tsx +0 -90
  160. package/src/components/RangeSlider/SliderWithLabel.tsx +0 -62
  161. package/src/components/RangeSlider/handle.tsx +0 -26
  162. package/src/components/RangeSlider/index.tsx +0 -132
  163. package/src/components/RangeSlider/track.tsx +0 -19
  164. package/src/components/RangeSlider/wrapper.tsx +0 -93
  165. package/src/components/RangeSliderLabel/index.tsx +0 -18
  166. package/src/components/RangeSliderLabel/wrapper.tsx +0 -33
  167. package/src/components/Repeat/index.tsx +0 -21
  168. package/src/components/Result/index.tsx +0 -91
  169. package/src/components/Result/wrapper.tsx +0 -39
  170. package/src/components/Root/index.tsx +0 -24
  171. package/src/components/SearchBar/index.tsx +0 -48
  172. package/src/components/SearchFilter/index.tsx +0 -31
  173. package/src/components/SearchTerm/index.tsx +0 -23
  174. package/src/components/SearchTerm/wrapper.tsx +0 -71
  175. package/src/components/SectionHeader/index.tsx +0 -25
  176. package/src/components/SectionHeader/wrapper.tsx +0 -17
  177. package/src/components/Snackbar/index.tsx +0 -35
  178. package/src/components/Snackbar/wrapper.tsx +0 -65
  179. package/src/components/SortSelect/index.tsx +0 -35
  180. package/src/components/SortSelect/wrapper.tsx +0 -54
  181. package/src/components/Sphere/Sphere.tsx +0 -49
  182. package/src/components/Sphere/SphereLightbox.tsx +0 -10
  183. package/src/components/Sphere/SphereViewer.tsx +0 -81
  184. package/src/components/Sphere/wrapper.tsx +0 -253
  185. package/src/components/SrOnly/index.tsx +0 -14
  186. package/src/components/SwitchBar/index.tsx +0 -55
  187. package/src/components/SwitchBar/wrapper.tsx +0 -80
  188. package/src/components/TableColumn/index.tsx +0 -18
  189. package/src/components/TableList/index.tsx +0 -39
  190. package/src/components/Tabs/index.tsx +0 -34
  191. package/src/components/Tabs/wrapper.tsx +0 -82
  192. package/src/components/ThreeSixty/Rotation.tsx +0 -136
  193. package/src/components/ThreeSixty/ThreeSixtLightbox.tsx +0 -34
  194. package/src/components/ThreeSixty/ThreeSixty.tsx +0 -53
  195. package/src/components/UspList/index.tsx +0 -47
  196. package/src/components/UspList/wrapper.tsx +0 -92
  197. package/src/components/Utility/index.tsx +0 -17
  198. package/src/components/Video/CustomPlayer.tsx +0 -28
  199. package/src/components/Video/EmbeddedVideoLightbox.tsx +0 -31
  200. package/src/components/Video/EmbededVideo.tsx +0 -72
  201. package/src/components/Video/QuickNavEmbeded.tsx +0 -35
  202. package/src/components/Video/QuickNavVideo.tsx +0 -14
  203. package/src/components/Video/Video.tsx +0 -18
  204. package/src/components/Video/VimeoPlayer.tsx +0 -21
  205. package/src/components/Video/YoutubePlayer.tsx +0 -21
  206. package/src/components/Video/useThumbnail.ts +0 -28
  207. package/src/components/Video/utils.ts +0 -47
  208. package/src/components/Video/wrapper.tsx +0 -29
  209. package/src/hooks/useFetch.ts +0 -88
  210. package/src/hooks/useHasBeenVisible.ts +0 -17
  211. package/src/hooks/useHashGuid.ts +0 -33
  212. package/src/hooks/useInsurance.ts +0 -22
  213. package/src/hooks/useLoan.ts +0 -21
  214. package/src/hooks/useOnScreen.ts +0 -20
  215. package/src/hooks/useOutsideClick.ts +0 -19
  216. package/src/hooks/usePrevious.ts +0 -11
  217. package/src/hooks/useSearchItem.ts +0 -11
  218. package/src/hooks/useSearchItemBranch.ts +0 -14
  219. package/src/hooks/useSessionStorage.ts +0 -32
  220. package/src/hooks/useVimeoThumbnail.ts +0 -31
  221. package/src/images/map/marker.png +0 -0
  222. package/src/images/placeholders/staticmap.jpg +0 -0
  223. package/src/index-dev.tsx +0 -42
  224. package/src/index-esbuild.ts +0 -74
  225. package/src/index.ts +0 -72
  226. package/src/layout/helpers.tsx +0 -6
  227. package/src/layout/keyframes.tsx +0 -23
  228. package/src/layout/theme.ts +0 -60
  229. package/src/layouts/WaykeComposite.tsx +0 -64
  230. package/src/layouts/WaykeCompositeWithProvider.tsx +0 -17
  231. package/src/layouts/search/index.tsx +0 -124
  232. package/src/layouts/searchItem/Branch.tsx +0 -97
  233. package/src/layouts/searchItem/BranchModal.tsx +0 -67
  234. package/src/layouts/searchItem/CheckList.tsx +0 -146
  235. package/src/layouts/searchItem/ManufacturerPackagesOption.tsx +0 -54
  236. package/src/layouts/searchItem/MetadataItem.tsx +0 -74
  237. package/src/layouts/searchItem/PackageOptionModal.tsx +0 -54
  238. package/src/layouts/searchItem/PackageOptions.tsx +0 -58
  239. package/src/layouts/searchItem/Page404.tsx +0 -17
  240. package/src/layouts/searchItem/PageLoading.tsx +0 -17
  241. package/src/layouts/searchItem/Property.tsx +0 -134
  242. package/src/layouts/searchItem/Related.tsx +0 -120
  243. package/src/layouts/searchItem/index.tsx +0 -342
  244. package/src/providers/WaykeItemProvidet.tsx +0 -63
  245. package/src/providers/WaykeProvider.tsx +0 -75
  246. package/src/providers/graphqlProvider.tsx +0 -9
  247. package/src/providers/themeProvider.tsx +0 -15
  248. package/src/queries/INSURANCE_CALCULATION.ts +0 -43
  249. package/src/queries/LOAN_CALCULATION.ts +0 -39
  250. package/src/queries/SEARCH_ITEM_BRANCH_QUERY.ts +0 -120
  251. package/src/queries/SEARCH_ITEM_QUERY.ts +0 -237
  252. package/src/utils/constants.ts +0 -34
  253. package/src/utils/converters.ts +0 -45
  254. package/src/utils/deep-copy.ts +0 -6
  255. package/src/utils/formats.ts +0 -83
  256. package/src/utils/metadata.min.ts +0 -87
  257. package/src/utils/phonenumbers.ts +0 -17
  258. package/src/utils/pubsub/Actions.ts +0 -20
  259. package/src/utils/pubsub/Events.ts +0 -79
  260. package/src/utils/pubsub/pubsub.ts +0 -151
  261. package/src/utils/regex.ts +0 -13
  262. package/src/utils/sortOptions.ts +0 -36
  263. package/src/utils/specification.ts +0 -581
  264. package/src/utils/ssn.ts +0 -1
  265. package/src/utils/url.ts +0 -1
  266. package/src/utils/vehicle-properties/compare-basic-properties.ts +0 -63
  267. package/src/utils/vehicle-properties/compare-categories.ts +0 -45
  268. package/src/utils/vehicle-properties/compare-properties.ts +0 -5
  269. package/src/utils/vehicle-properties/custom-property-adder.ts +0 -163
  270. package/src/utils/vehicle-properties/property-hint-enricher.ts +0 -230
  271. package/src/utils/vehicle-properties/property-remover.ts +0 -28
  272. package/src/utils/vehicle-properties/property-tree-creator.ts +0 -171
  273. package/src/utils/vehicle-properties/property-tree-sorter.ts +0 -20
  274. package/tsconfig.build.json +0 -10
  275. package/tsconfig.eslint.json +0 -11
  276. package/tsconfig.json +0 -18
  277. package/webpack.analyze.js +0 -10
  278. package/webpack.config.js +0 -95
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
-
3
- import Container from '../../components/Container/index';
4
- import { Page, PageSection } from '../../components/Page/index';
5
- import { H1 } from '../../components/Heading/index';
6
-
7
- const Page404 = () => (
8
- <Page>
9
- <PageSection large>
10
- <Container>
11
- <H1 noMargin>404</H1>
12
- </Container>
13
- </PageSection>
14
- </Page>
15
- );
16
-
17
- export default Page404;
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
-
3
- import Container from '../../components/Container/index';
4
- import { Page, PageSection } from '../../components/Page/index';
5
- import Loader from '../../components/Loader/index';
6
-
7
- const PageLoading = () => (
8
- <Page>
9
- <PageSection large>
10
- <Container>
11
- <Loader />
12
- </Container>
13
- </PageSection>
14
- </Page>
15
- );
16
-
17
- export default PageLoading;
@@ -1,134 +0,0 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { Category, Property } from '../../@types/vehicle-properties';
3
- import PropertyTreeCreator from '../../utils/vehicle-properties/property-tree-creator';
4
- import sortTree from '../../utils/vehicle-properties/property-tree-sorter';
5
- import enrichWithHint from '../../utils/vehicle-properties/property-hint-enricher';
6
- import addCustomProperties from '../../utils/vehicle-properties/custom-property-adder';
7
- import removeProperties from '../../utils/vehicle-properties/property-remover';
8
- import MetadataItem from './MetadataItem';
9
-
10
- import { H5 } from '../../components/Heading/index';
11
- import { Repeat } from '../../components/Repeat/index';
12
- import { TableList } from '../../components/TableList/index';
13
- import Tabs from '../../components/Tabs/index';
14
- import { VehicleData } from '../../@types/codegen/types';
15
-
16
- interface MetadataSubCategoryProps {
17
- name: string;
18
- properties: Property[];
19
- }
20
-
21
- const MetadataSubCategory = ({ name, properties }: MetadataSubCategoryProps) => (
22
- <Repeat>
23
- <H5 as="h3">{name}</H5>
24
- <TableList>
25
- {!!properties.length &&
26
- properties.map((property, index) => (
27
- <MetadataItem
28
- name={property.name}
29
- hint={property.hint}
30
- value={property.value}
31
- unit={property.unit}
32
- key={`${property.name}-${index}`}
33
- />
34
- ))}
35
- </TableList>
36
- </Repeat>
37
- );
38
-
39
- interface MetadataCaregoryProps {
40
- properties: Property[];
41
- subCategories: Category[];
42
- }
43
-
44
- const MetadataCategory = ({ properties, subCategories }: MetadataCaregoryProps) => (
45
- <div className="tab-section">
46
- {!!properties.length && (
47
- <Repeat>
48
- <TableList>
49
- {properties.map((property, index) => (
50
- <MetadataItem
51
- name={property.name}
52
- hint={property.hint}
53
- value={property.value}
54
- unit={property.unit}
55
- key={`${property.name}-${index}`}
56
- />
57
- ))}
58
- </TableList>
59
- </Repeat>
60
- )}
61
- {!!subCategories.length &&
62
- subCategories.map((subCategory, index) => (
63
- <MetadataSubCategory
64
- name={subCategory.name}
65
- properties={subCategory.properties}
66
- key={`${subCategory.name}-${index}`}
67
- />
68
- ))}
69
- </div>
70
- );
71
-
72
- interface PropertySetProps {
73
- propertySet: any;
74
- vehicleData: VehicleData;
75
- }
76
-
77
- const PropertySet = ({ propertySet, vehicleData }: PropertySetProps) => {
78
- const [activeCategoryId, setActiveCategoryId] = useState(-1);
79
- const mappedProperties = useMemo(() => {
80
- if (!propertySet) {
81
- return undefined;
82
- }
83
-
84
- let newProperties = removeProperties(propertySet);
85
- newProperties = addCustomProperties(vehicleData, newProperties);
86
- const enrichedProperties = enrichWithHint(newProperties);
87
-
88
- const tree = new PropertyTreeCreator(enrichedProperties).create();
89
- sortTree(tree);
90
- return tree;
91
- }, [propertySet]);
92
-
93
- useEffect(() => {
94
- const categories =
95
- mappedProperties?.categories?.length !== undefined ? mappedProperties?.categories : undefined;
96
-
97
- if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {
98
- setActiveCategoryId(categories[0].id);
99
- }
100
- }, [mappedProperties]);
101
-
102
- const onTab = useCallback((id: string) => setActiveCategoryId(parseInt(id, 10)), []);
103
-
104
- const activeCategory = mappedProperties?.categories?.find(
105
- (category) => category.id === activeCategoryId
106
- );
107
-
108
- return (
109
- <>
110
- <Repeat>
111
- <Tabs
112
- tabs={
113
- mappedProperties?.categories?.map((category) => ({
114
- name: `${category.id}`,
115
- displayName: category.name,
116
- })) || []
117
- }
118
- active={`${activeCategoryId}`}
119
- onClick={onTab}
120
- />
121
- </Repeat>
122
- {activeCategory && (
123
- <Repeat>
124
- <MetadataCategory
125
- properties={activeCategory.properties}
126
- subCategories={activeCategory.subCategories}
127
- />
128
- </Repeat>
129
- )}
130
- </>
131
- );
132
- };
133
-
134
- export default PropertySet;
@@ -1,120 +0,0 @@
1
- import React, { useCallback } from 'react';
2
-
3
- import Container from '../../components/Container/index';
4
- import { Repeat } from '../../components/Repeat/index';
5
-
6
- import { PageSection } from '../../components/Page/index';
7
- import SectionHeader from '../../components/SectionHeader/index';
8
- import {
9
- OverflowGridList,
10
- OverflowGrid,
11
- OverflowGridItem,
12
- } from '../../components/OverflowGrid/index';
13
- import ProductCard from '../../components/ProductCard/index';
14
- import { H2 } from '../../components/Heading/index';
15
- import useRelatedSearch from '../../State/RelatedSearch/useRelatedSearch';
16
- import Loader from '../../components/Loader/index';
17
- import { numberSeparator } from '../../utils/formats';
18
- import PubSub from '../../utils/pubsub/pubsub';
19
- import { regexPathGuid } from '../../utils/regex';
20
-
21
- interface RelatedProps {
22
- id: string;
23
- hashRoute?: boolean;
24
- pathRoute?: string;
25
- onClickSearchItem?: (id: string) => void;
26
- }
27
-
28
- const Related = ({ id, hashRoute, pathRoute, onClickSearchItem }: RelatedProps) => {
29
- const { loading, response, moreLikeThisUrl } = useRelatedSearch(id);
30
-
31
- const onItemClicked = useCallback((id: string) => {
32
- PubSub.publish('ItemClicked', id);
33
- if (onClickSearchItem) {
34
- onClickSearchItem(id);
35
- }
36
- }, []);
37
-
38
- if (!response?.documentList.documents.length || response?.documentList.documents.length === 0) {
39
- return null;
40
- }
41
-
42
- if (loading) {
43
- return <Loader />;
44
- }
45
-
46
- return (
47
- <PageSection accent large className="wayke__theme wayke__color--accent-bg">
48
- <Container>
49
- {moreLikeThisUrl ? (
50
- <Repeat>
51
- <SectionHeader onClick={() => {}}>
52
- <H2 noMargin>Relaterade fordon</H2>
53
- </SectionHeader>
54
- </Repeat>
55
- ) : (
56
- <Repeat>
57
- <SectionHeader onClick={() => {}} actionTitle="Visa alla">
58
- <H2 noMargin>Senast inkomna</H2>
59
- </SectionHeader>
60
- </Repeat>
61
- )}
62
-
63
- <Repeat>
64
- <OverflowGrid>
65
- <OverflowGridList>
66
- {response?.documentList.documents.map((document) => {
67
- const prefix = pathRoute ? `/${pathRoute}` : '/';
68
-
69
- const r = regexPathGuid(pathRoute);
70
-
71
- const pathRouteUrl =
72
- window.location.pathname === '/'
73
- ? `${prefix}${document._id}`
74
- : r.test(`${pathRoute}${id}`)
75
- ? window.location.pathname.replace(r, `${pathRoute}${document._id}`)
76
- : `${window.location.pathname}${prefix}${document._id}`;
77
-
78
- return (
79
- <OverflowGridItem key={document._id}>
80
- <ProductCard
81
- id={document._id}
82
- onClick={onItemClicked}
83
- title={document.title}
84
- href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}
85
- image={document.featuredImage?.files?.[0]?.url}
86
- description={document.shortDescription}
87
- uspList={[
88
- {
89
- title: document.modelYear,
90
- },
91
- {
92
- title: `${numberSeparator(document.mileage)} mil`,
93
- },
94
- {
95
- title: document.gearboxType,
96
- },
97
- {
98
- title: document.fuelType,
99
- },
100
- ]}
101
- price={`${numberSeparator(document.price)} kr`}
102
- oldPrice={
103
- document.oldPrice !== undefined && document.price < document.oldPrice
104
- ? `${numberSeparator(document.oldPrice)} kr`
105
- : undefined
106
- }
107
- pathRoute={pathRoute}
108
- />
109
- </OverflowGridItem>
110
- );
111
- })}
112
- </OverflowGridList>
113
- </OverflowGrid>
114
- </Repeat>
115
- </Container>
116
- </PageSection>
117
- );
118
- };
119
-
120
- export default Related;
@@ -1,342 +0,0 @@
1
- import React, { useMemo, useRef, useCallback, useEffect } from 'react';
2
- import WaykeEcomWeb from '@wayke-se/ecom-web';
3
-
4
- import Container from '../../components/Container/index';
5
- import UspList from '../../components/UspList/index';
6
- import { Repeat, RepeatSmall } from '../../components/Repeat/index';
7
- import PriceTable from '../../components/PriceTable/index';
8
- import LogoBox from '../../components/LogoBox/index';
9
- import Content from '../../components/Content/index';
10
- import Blockquote from '../../components/Blockquote/index';
11
- import ExtendContent from '../../components/ExtendContent/index';
12
- import Gallery from '../../components/Gallery/index';
13
- import { Page, PageSection } from '../../components/Page/index';
14
- import {
15
- ProductPage,
16
- ProductPageMainSection,
17
- ProductPageAside,
18
- ProductPageMain,
19
- ProductPageAsideSection,
20
- } from '../../components/ProductPage/index';
21
- import { H1, H2 } from '../../components/Heading/index';
22
- import { ButtonPrimary, ButtonContent, ButtonInlineLight } from '../../components/Button/index';
23
- import { UtilityFontSizeSmall } from '../../components/Utility/index';
24
- import { IconChevronLeft } from '../../components/Icon/index';
25
- import useSearchItem from '../../hooks/useSearchItem';
26
- import { notEmpty, numberSeparator, dateTimeFormat } from '../../utils/formats';
27
- import { PortalNamespace, PortalElement } from '../../components/Portal/index';
28
- import Modal from '../../components/Modal/index';
29
- import FinancialOptions from '../../components/FinancialOptions/index';
30
- import InsuranceOptions from '../../components/InsuranceOptions/index';
31
- import ManufacturerPackageOption from './ManufacturerPackagesOption';
32
- import CheckList from './CheckList';
33
- import Related from './Related';
34
- import PackageOptions from './PackageOptions';
35
- import Branch from './Branch';
36
- import useCentralStorage from '../../State/CentralStorage/useCentralStorage';
37
- import Page404 from './Page404';
38
- import PageLoading from './PageLoading';
39
- import PubSub from '../../utils/pubsub/pubsub';
40
- import Property from './Property';
41
- import PdfDownloadContainer from '../../components/Pdf/index';
42
- import useSettings from '../../State/Settings/useSettings';
43
-
44
- export interface WaykeSearchItemProps {
45
- id: string;
46
- hashRoute?: boolean;
47
- pathRoute?: string;
48
- disableResetScrollOnInit?: boolean;
49
- placeholderImage?: string;
50
- modifyDocumentTitleItem?: boolean;
51
- onClickSearchItem?: (id: string) => void;
52
- }
53
-
54
- const WaykeSearchItem = ({
55
- id,
56
- hashRoute,
57
- pathRoute,
58
- disableResetScrollOnInit,
59
- placeholderImage,
60
- modifyDocumentTitleItem,
61
- onClickSearchItem,
62
- }: WaykeSearchItemProps) => {
63
- const { ecomSettings } = useSettings();
64
- const ecomContext = useRef<WaykeEcomWeb | undefined>();
65
- const { loading, data: result } = useSearchItem(id);
66
- const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } =
67
- useCentralStorage(result?.vehicle);
68
-
69
- useEffect(() => {
70
- if (ecomSettings) {
71
- ecomContext.current = new WaykeEcomWeb({
72
- id,
73
- ecomSdkConfig: {
74
- api: {
75
- address: ecomSettings.url,
76
- },
77
- bankIdThumbprint: ecomSettings?.bankIdThumbprint,
78
- },
79
- logo: ecomSettings.serviceLogotypeUrl,
80
- logoX2: ecomSettings.serviceLogotypeUrl,
81
- onEvent(view, event, currentStep?, data?) {
82
- PubSub.publish('EcomOnUserEvent', view, event, currentStep, data);
83
- },
84
- });
85
- }
86
- return () => {
87
- if (ecomContext.current) {
88
- ecomContext.current.destroy();
89
- }
90
- };
91
- }, []);
92
-
93
- useEffect(() => {
94
- if (!disableResetScrollOnInit) {
95
- window.scrollTo(0, 0);
96
- }
97
- }, []);
98
-
99
- useEffect(() => {
100
- if (result?.vehicle?.data && modifyDocumentTitleItem) {
101
- const { vehicle } = result;
102
- const { registrationNumber } = vehicle.data;
103
- document.title = `${registrationNumber} | ${vehicle.title} | ${vehicle.shortDescription}`;
104
- }
105
- }, [result]);
106
-
107
- const options = useMemo(
108
- () => result?.vehicle?.data?.options?.filter(notEmpty).map((opt) => ({ title: opt })),
109
- [result?.vehicle?.data?.options]
110
- );
111
-
112
- const onShowMoreOptionsClick = useCallback(() => PubSub.publish('OptionsClick'), []);
113
-
114
- if (loading) {
115
- return <PageLoading />;
116
- }
117
-
118
- if (!result?.vehicle?.data) {
119
- return <Page404 />;
120
- }
121
-
122
- const { vehicle } = result;
123
- const contact = centralStorageVehicle?.contact;
124
- const branch = centralStorageVehicle?.branch;
125
- const {
126
- title,
127
- shortDescription,
128
- media,
129
- description,
130
- price,
131
- financialOptions,
132
- manufacturer,
133
- ecommerce,
134
- packageOptions,
135
- publishedAt,
136
- documents,
137
- } = vehicle;
138
- const insuranceOptions = centralStorageVehicle?.insuranceOptions
139
- ? centralStorageVehicle.insuranceOptions
140
- : vehicle.insuranceOptions;
141
- const { fuelType, mileage, gearbox, modelYear, propertySet } = vehicle.data;
142
-
143
- const uspList = [
144
- {
145
- title: modelYear,
146
- },
147
- {
148
- title: `${numberSeparator(mileage)} mil`,
149
- },
150
- ];
151
- if (gearbox) {
152
- uspList.push({ title: gearbox });
153
- }
154
-
155
- if (fuelType) {
156
- uspList.push({ title: fuelType });
157
- }
158
-
159
- return (
160
- <>
161
- <Page>
162
- <PageSection large>
163
- <Container>
164
- <ProductPage>
165
- <ProductPageAside>
166
- <ProductPageAsideSection mobileOrder={1}>
167
- {!pathRoute && hashRoute ? (
168
- <Repeat>
169
- <UtilityFontSizeSmall>
170
- <ButtonInlineLight as="a" href="#" title="Tillbaka till bilsök">
171
- <ButtonContent>
172
- <IconChevronLeft block />
173
- </ButtonContent>
174
- <ButtonContent>Tillbaka till bilsök</ButtonContent>
175
- </ButtonInlineLight>
176
- </UtilityFontSizeSmall>
177
- </Repeat>
178
- ) : null}
179
- {manufacturer?.logotype && (
180
- <Repeat>
181
- <LogoBox logo={manufacturer.logotype} alt={manufacturer.name} />
182
- </Repeat>
183
- )}
184
- <Repeat>
185
- <RepeatSmall>
186
- <H1 noMargin>{title}</H1>
187
- </RepeatSmall>
188
- {shortDescription && (
189
- <RepeatSmall>
190
- <div>{shortDescription}</div>
191
- </RepeatSmall>
192
- )}
193
- <RepeatSmall>
194
- <UspList small items={uspList} />
195
- </RepeatSmall>
196
- </Repeat>
197
- </ProductPageAsideSection>
198
-
199
- <ProductPageAsideSection mobileOrder={2}>
200
- <PriceTable price={price} />
201
- </ProductPageAsideSection>
202
-
203
- {(financialOptions.length > 0 || insuranceOptions.length > 0) && (
204
- <ProductPageAsideSection mobileOrder={4}>
205
- {financialOptions.length > 0 && (
206
- <FinancialOptions id={id} financialOptions={financialOptions} />
207
- )}
208
- {insuranceOptions.length > 0 && (
209
- <InsuranceOptions
210
- id={id}
211
- branch={centralStorageVehicle?.branch}
212
- insuranceOptions={insuranceOptions}
213
- />
214
- )}
215
- </ProductPageAsideSection>
216
- )}
217
-
218
- <ProductPageAsideSection mobileOrder={5}>
219
- <CheckList
220
- manufacturer={manufacturer}
221
- packageOptions={packageOptions}
222
- ecommerce={ecommerce}
223
- branch={branch}
224
- contact={centralStorageVehicle?.contact}
225
- loadingCentralStorageVehicle={loadingCentralStorageVehicle}
226
- toggleEcomModal={() => ecomContext.current?.start()}
227
- />
228
- </ProductPageAsideSection>
229
- </ProductPageAside>
230
- <ProductPageMain>
231
- <ProductPageAsideSection mobileOrder={3}>
232
- <Gallery media={media} placeholderImage={placeholderImage} />
233
- </ProductPageAsideSection>
234
-
235
- <ProductPageMainSection>
236
- <Repeat>
237
- <H2 noMargin>Biluppgifter</H2>
238
- </Repeat>
239
- <Repeat>
240
- <Content>
241
- <p>Information direkt från Transportstyrelsen och tillverkaren.</p>
242
- </Content>
243
- </Repeat>
244
- <Repeat>
245
- <Property propertySet={propertySet} vehicleData={vehicle.data} />
246
- </Repeat>
247
- </ProductPageMainSection>
248
-
249
- {description && (
250
- <ProductPageMainSection>
251
- <Blockquote
252
- author={contact && contact.name ? contact.name : null}
253
- date={
254
- publishedAt
255
- ? dateTimeFormat.format(publishedAt, dateTimeFormat.DayMonth)
256
- : undefined
257
- }
258
- avatar={contact?.avatar || undefined}
259
- >
260
- {!!description && <p>{description}</p>}
261
- </Blockquote>
262
- </ProductPageMainSection>
263
- )}
264
-
265
- {(options?.length || 0) > 0 && (
266
- <ProductPageMainSection>
267
- <Repeat>
268
- <H2 noMargin>Utrustning</H2>
269
- </Repeat>
270
- <Repeat>
271
- <Content>
272
- <p>Kompletterande uppgifter om bilen.</p>
273
- </Content>
274
- </Repeat>
275
- <Repeat>
276
- <ExtendContent actionTitle="Visa mer" onClick={onShowMoreOptionsClick}>
277
- <UspList items={options} />
278
- </ExtendContent>
279
- </Repeat>
280
- </ProductPageMainSection>
281
- )}
282
-
283
- {(documents.length || 0) > 0 && (
284
- <ProductPageMainSection>
285
- <Repeat>
286
- <H2 noMargin>Dokument</H2>
287
- </Repeat>
288
- <Repeat>
289
- <Content>
290
- <p>Tillhörande dokument för bilen.</p>
291
- </Content>
292
- </Repeat>
293
- <Repeat>
294
- <PdfDownloadContainer documents={documents} />
295
- </Repeat>
296
- </ProductPageMainSection>
297
- )}
298
-
299
- <ProductPageMainSection>
300
- <Branch branch={branch} loading={loadingCentralStorageVehicle} />
301
- {ecommerce && ecommerce.enabled && (
302
- <Repeat>
303
- <ButtonPrimary
304
- disabled={!!ecommerce.reserved}
305
- title="Köp bilen online"
306
- onClick={() => ecomContext.current?.start()}
307
- >
308
- Köp bilen online
309
- </ButtonPrimary>
310
- </Repeat>
311
- )}
312
- </ProductPageMainSection>
313
- <PackageOptions packageOptions={packageOptions} />
314
- <ManufacturerPackageOption packageOption={manufacturer?.packageOption} />
315
- </ProductPageMain>
316
- </ProductPage>
317
- </Container>
318
- </PageSection>
319
- <Related
320
- id={id}
321
- hashRoute={hashRoute}
322
- pathRoute={pathRoute}
323
- onClickSearchItem={onClickSearchItem}
324
- />
325
- </Page>
326
- {false && (
327
- <Modal title="Modal" onClose={() => {}}>
328
- <Content>
329
- <p>
330
- Priset är ett cirkapris och baserat på ditt avtals antal månader och din beräknade
331
- årliga körsträcka. Kostnad för försäkring och serviceavtal tillkommer. Kontakta
332
- säljare för komplett kostnadsförslag.{' '}
333
- </p>
334
- </Content>
335
- </Modal>
336
- )}
337
- <PortalElement id={PortalNamespace.DefaultPortal} />
338
- </>
339
- );
340
- };
341
-
342
- export default WaykeSearchItem;
@@ -1,63 +0,0 @@
1
- import React from 'react';
2
-
3
- import GraphqlProvider from './graphqlProvider';
4
- import Theme from './themeProvider';
5
- import Root from '../components/Root/index';
6
-
7
- import SettingsProvider from '../State/Settings/SettingsProvider';
8
- import RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';
9
- import CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';
10
- import PathProvider from '../State/Path/PathProvider';
11
-
12
- export interface EcomSettings {
13
- url: string;
14
- useBankId?: boolean;
15
- displayBankIdAlert?: boolean;
16
- serviceLogotypeUrl?: string;
17
- bankIdThumbprint?: string;
18
- }
19
-
20
- export interface WaykeItemProviderSettings {
21
- url: string;
22
- urlMlt?: string;
23
- graphQlUrl: string;
24
- apiKey?: string;
25
- ecomSettings?: EcomSettings;
26
- googleMapsApiKey?: string;
27
- googleMapsMarker?: string;
28
- }
29
-
30
- export type WaykeItemProviderProps = WaykeItemProviderSettings & {
31
- children?: React.ReactNode;
32
- };
33
-
34
- const WaykeItemProvider = ({
35
- url,
36
- urlMlt,
37
- apiKey,
38
- ecomSettings,
39
- graphQlUrl,
40
- googleMapsApiKey,
41
- googleMapsMarker,
42
- children,
43
- }: WaykeItemProviderProps) => (
44
- <PathProvider>
45
- <SettingsProvider
46
- googleMapsApiKey={googleMapsApiKey}
47
- googleMapsMarker={googleMapsMarker}
48
- ecomSettings={ecomSettings}
49
- >
50
- <CentralStorageProvider>
51
- <GraphqlProvider uri={graphQlUrl}>
52
- <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>
53
- <Theme>
54
- <Root>{children}</Root>
55
- </Theme>
56
- </RelatedSearchProvider>
57
- </GraphqlProvider>
58
- </CentralStorageProvider>
59
- </SettingsProvider>
60
- </PathProvider>
61
- );
62
-
63
- export default WaykeItemProvider;