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

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 (274) hide show
  1. package/package.json +4 -2
  2. package/.editorconfig +0 -10
  3. package/.eslintrc.js +0 -62
  4. package/.github/workflows/release-to-production.yaml +0 -40
  5. package/.github/workflows/release-to-test.yaml +0 -40
  6. package/.prettierrc +0 -12
  7. package/assets/ajax-loader.gif +0 -0
  8. package/assets/default.css +0 -1
  9. package/assets/fonts/slick.eot +0 -0
  10. package/assets/fonts/slick.svg +0 -14
  11. package/assets/fonts/slick.ttf +0 -0
  12. package/assets/fonts/slick.woff +0 -0
  13. package/codegen.yml +0 -19
  14. package/esbuild/build.js +0 -39
  15. package/esbuild/common.js +0 -15
  16. package/esbuild/start.js +0 -21
  17. package/esbuild/www/index.html +0 -32
  18. package/example/src/@types/global.d.ts +0 -7
  19. package/example/src/@types/react-panellum.d.ts +0 -1
  20. package/example/src/App.tsx +0 -77
  21. package/example/src/assets/style/ecom.css +0 -63
  22. package/example/src/assets/style/theme.css +0 -83
  23. package/example/src/index.html +0 -26
  24. package/example/src/index.tsx +0 -11
  25. package/example/src/routes/HashRoute/index.tsx +0 -30
  26. package/example/src/routes/Home/index.tsx +0 -33
  27. package/example/src/routes/NotFound/index.tsx +0 -5
  28. package/example/src/routes/PathRoute/index.tsx +0 -35
  29. package/example/src/routes/Search/index.tsx +0 -28
  30. package/example/src/routes/SearchItem/index.tsx +0 -28
  31. package/example/src/routes/index.tsx +0 -25
  32. package/src/@types/action.ts +0 -3
  33. package/src/@types/codegen/types.ts +0 -366
  34. package/src/@types/filter.ts +0 -18
  35. package/src/@types/queryFilter.ts +0 -5
  36. package/src/@types/react-panellum.d.ts +0 -1
  37. package/src/@types/search.ts +0 -118
  38. package/src/@types/theme.d.ts +0 -5
  39. package/src/@types/vehicle-properties.ts +0 -33
  40. package/src/State/CentralStorage/CentralStorageContext.ts +0 -10
  41. package/src/State/CentralStorage/CentralStorageProvider.tsx +0 -21
  42. package/src/State/CentralStorage/useCentralStorage.ts +0 -37
  43. package/src/State/Path/PathContext.ts +0 -11
  44. package/src/State/Path/PathProvider.tsx +0 -66
  45. package/src/State/Path/reducer.ts +0 -30
  46. package/src/State/Path/usePath.ts +0 -13
  47. package/src/State/RelatedSearch/RelatedSearchContext.ts +0 -18
  48. package/src/State/RelatedSearch/RelatedSearchProvider.tsx +0 -55
  49. package/src/State/RelatedSearch/useRelatedSearch.ts +0 -20
  50. package/src/State/Search/SearchContext.ts +0 -27
  51. package/src/State/Search/SearchProvider.tsx +0 -243
  52. package/src/State/Search/useSearch.ts +0 -6
  53. package/src/State/Settings/SettingsContext.ts +0 -15
  54. package/src/State/Settings/SettingsProvider.tsx +0 -23
  55. package/src/State/Settings/useSettings.ts +0 -7
  56. package/src/components/Accordion/index.tsx +0 -57
  57. package/src/components/Accordion/wrapper.tsx +0 -107
  58. package/src/components/ActionList/index.tsx +0 -48
  59. package/src/components/ActionList/toggle-item.tsx +0 -59
  60. package/src/components/Avatar/index.tsx +0 -12
  61. package/src/components/Avatar/wrapper.tsx +0 -21
  62. package/src/components/Badge/index.tsx +0 -12
  63. package/src/components/Badge/wrapper.tsx +0 -32
  64. package/src/components/Blockquote/index.tsx +0 -32
  65. package/src/components/Blockquote/wrapper.tsx +0 -52
  66. package/src/components/Button/index.tsx +0 -226
  67. package/src/components/CheckMarkList/index.tsx +0 -21
  68. package/src/components/CheckMarkList/wrapper.tsx +0 -31
  69. package/src/components/Checklist/index.tsx +0 -51
  70. package/src/components/Checklist/wrapper.tsx +0 -65
  71. package/src/components/ColorSelect/index.tsx +0 -63
  72. package/src/components/ColorSelect/wrapper.tsx +0 -82
  73. package/src/components/ColumnRow/index.tsx +0 -20
  74. package/src/components/Container/index.tsx +0 -11
  75. package/src/components/Container/wrapper.tsx +0 -14
  76. package/src/components/Content/index.tsx +0 -15
  77. package/src/components/Content/wrapper.tsx +0 -61
  78. package/src/components/ContentLogo/index.tsx +0 -27
  79. package/src/components/DataList/index.tsx +0 -25
  80. package/src/components/DataList/wrapper.tsx +0 -29
  81. package/src/components/DetailBox/index.tsx +0 -34
  82. package/src/components/DetailBox/wrapper.tsx +0 -34
  83. package/src/components/ExtendContent/index.tsx +0 -43
  84. package/src/components/ExtendContent/wrapper.tsx +0 -41
  85. package/src/components/ExtendInfo/index.tsx +0 -32
  86. package/src/components/ExtendInfo/wrapper.tsx +0 -63
  87. package/src/components/Filter/index.tsx +0 -108
  88. package/src/components/Filter/wrapper.tsx +0 -79
  89. package/src/components/FilterPanel/checkListFacet.tsx +0 -46
  90. package/src/components/FilterPanel/colorFacet.tsx +0 -47
  91. package/src/components/FilterPanel/faceSelector.tsx +0 -53
  92. package/src/components/FilterPanel/index.tsx +0 -79
  93. package/src/components/FilterPanel/rangeFacet.tsx +0 -128
  94. package/src/components/FinancialOptions/LoanModal.tsx +0 -223
  95. package/src/components/FinancialOptions/index.tsx +0 -29
  96. package/src/components/FinancialOptions/leasing.tsx +0 -77
  97. package/src/components/FinancialOptions/loan.tsx +0 -87
  98. package/src/components/Gallery/MediaButton.tsx +0 -19
  99. package/src/components/Gallery/index.tsx +0 -227
  100. package/src/components/Gallery/wrapper.tsx +0 -323
  101. package/src/components/Grid/index.tsx +0 -87
  102. package/src/components/Grid/wrapper.tsx +0 -30
  103. package/src/components/Heading/index.tsx +0 -72
  104. package/src/components/Icon/index.tsx +0 -87
  105. package/src/components/InputCheckbox/index.tsx +0 -30
  106. package/src/components/InputCheckbox/wrapper.tsx +0 -87
  107. package/src/components/InputGroup/index.tsx +0 -24
  108. package/src/components/InputLabel/index.tsx +0 -14
  109. package/src/components/InputLabel/wrapper.tsx +0 -10
  110. package/src/components/InputSearch/index.tsx +0 -51
  111. package/src/components/InputSearch/wrapper.tsx +0 -97
  112. package/src/components/InputSelect/index.tsx +0 -35
  113. package/src/components/InputSelect/wrapper.tsx +0 -59
  114. package/src/components/InputText/index.tsx +0 -27
  115. package/src/components/InputText/wrapper.tsx +0 -57
  116. package/src/components/InsuranceOptions/Insurance.tsx +0 -60
  117. package/src/components/InsuranceOptions/InsuranceFree.tsx +0 -59
  118. package/src/components/InsuranceOptions/InsuranceFreeModal.tsx +0 -49
  119. package/src/components/InsuranceOptions/InsuranceModal.tsx +0 -253
  120. package/src/components/InsuranceOptions/index.tsx +0 -27
  121. package/src/components/Lightbox/index.tsx +0 -51
  122. package/src/components/Lightbox/wrapper.tsx +0 -97
  123. package/src/components/Loader/index.tsx +0 -18
  124. package/src/components/Loader/wrapper.tsx +0 -50
  125. package/src/components/LogoBox/index.tsx +0 -22
  126. package/src/components/LogoBox/wrapper.tsx +0 -19
  127. package/src/components/Map/index.tsx +0 -62
  128. package/src/components/Map/wrapper.tsx +0 -29
  129. package/src/components/Modal/index.tsx +0 -51
  130. package/src/components/Modal/wrapper.tsx +0 -127
  131. package/src/components/OpeningHours/index.tsx +0 -145
  132. package/src/components/OptionBox/index.tsx +0 -23
  133. package/src/components/OptionBox/wrapper.tsx +0 -56
  134. package/src/components/OverflowBox/index.tsx +0 -11
  135. package/src/components/OverflowBox/wrapper.tsx +0 -7
  136. package/src/components/OverflowGrid/index.tsx +0 -70
  137. package/src/components/Page/index.tsx +0 -46
  138. package/src/components/Panel/index.tsx +0 -50
  139. package/src/components/Panel/wrapper.tsx +0 -155
  140. package/src/components/Pdf/index.tsx +0 -46
  141. package/src/components/Pdf/wrapper.tsx +0 -61
  142. package/src/components/PhoneNumber/index.tsx +0 -33
  143. package/src/components/Portal/index.ts +0 -5
  144. package/src/components/Portal/portal-element.tsx +0 -9
  145. package/src/components/Portal/portal-namespace.ts +0 -1
  146. package/src/components/Portal/portal.tsx +0 -36
  147. package/src/components/Price/index.tsx +0 -12
  148. package/src/components/PriceTable/index.tsx +0 -34
  149. package/src/components/PriceTable/wrapper.tsx +0 -27
  150. package/src/components/ProductCard/index.tsx +0 -133
  151. package/src/components/ProductCard/wrapper.tsx +0 -147
  152. package/src/components/ProductPage/index.tsx +0 -99
  153. package/src/components/ProgressBar/index.tsx +0 -31
  154. package/src/components/ProgressBar/wrapper.tsx +0 -29
  155. package/src/components/RangeSlider/RangeSliderSimple.tsx +0 -90
  156. package/src/components/RangeSlider/SliderWithLabel.tsx +0 -62
  157. package/src/components/RangeSlider/handle.tsx +0 -26
  158. package/src/components/RangeSlider/index.tsx +0 -132
  159. package/src/components/RangeSlider/track.tsx +0 -19
  160. package/src/components/RangeSlider/wrapper.tsx +0 -93
  161. package/src/components/RangeSliderLabel/index.tsx +0 -18
  162. package/src/components/RangeSliderLabel/wrapper.tsx +0 -33
  163. package/src/components/Repeat/index.tsx +0 -21
  164. package/src/components/Result/index.tsx +0 -91
  165. package/src/components/Result/wrapper.tsx +0 -39
  166. package/src/components/Root/index.tsx +0 -24
  167. package/src/components/SearchBar/index.tsx +0 -48
  168. package/src/components/SearchFilter/index.tsx +0 -31
  169. package/src/components/SearchTerm/index.tsx +0 -23
  170. package/src/components/SearchTerm/wrapper.tsx +0 -71
  171. package/src/components/SectionHeader/index.tsx +0 -25
  172. package/src/components/SectionHeader/wrapper.tsx +0 -17
  173. package/src/components/Snackbar/index.tsx +0 -35
  174. package/src/components/Snackbar/wrapper.tsx +0 -65
  175. package/src/components/SortSelect/index.tsx +0 -35
  176. package/src/components/SortSelect/wrapper.tsx +0 -54
  177. package/src/components/Sphere/Sphere.tsx +0 -49
  178. package/src/components/Sphere/SphereLightbox.tsx +0 -10
  179. package/src/components/Sphere/SphereViewer.tsx +0 -81
  180. package/src/components/Sphere/wrapper.tsx +0 -253
  181. package/src/components/SrOnly/index.tsx +0 -14
  182. package/src/components/SwitchBar/index.tsx +0 -55
  183. package/src/components/SwitchBar/wrapper.tsx +0 -80
  184. package/src/components/TableColumn/index.tsx +0 -18
  185. package/src/components/TableList/index.tsx +0 -39
  186. package/src/components/Tabs/index.tsx +0 -34
  187. package/src/components/Tabs/wrapper.tsx +0 -82
  188. package/src/components/ThreeSixty/Rotation.tsx +0 -136
  189. package/src/components/ThreeSixty/ThreeSixtLightbox.tsx +0 -34
  190. package/src/components/ThreeSixty/ThreeSixty.tsx +0 -53
  191. package/src/components/UspList/index.tsx +0 -47
  192. package/src/components/UspList/wrapper.tsx +0 -92
  193. package/src/components/Utility/index.tsx +0 -17
  194. package/src/components/Video/CustomPlayer.tsx +0 -28
  195. package/src/components/Video/EmbeddedVideoLightbox.tsx +0 -31
  196. package/src/components/Video/EmbededVideo.tsx +0 -72
  197. package/src/components/Video/QuickNavEmbeded.tsx +0 -35
  198. package/src/components/Video/QuickNavVideo.tsx +0 -14
  199. package/src/components/Video/Video.tsx +0 -18
  200. package/src/components/Video/VimeoPlayer.tsx +0 -21
  201. package/src/components/Video/YoutubePlayer.tsx +0 -21
  202. package/src/components/Video/useThumbnail.ts +0 -28
  203. package/src/components/Video/utils.ts +0 -47
  204. package/src/components/Video/wrapper.tsx +0 -29
  205. package/src/hooks/useFetch.ts +0 -88
  206. package/src/hooks/useHasBeenVisible.ts +0 -17
  207. package/src/hooks/useHashGuid.ts +0 -33
  208. package/src/hooks/useInsurance.ts +0 -22
  209. package/src/hooks/useLoan.ts +0 -21
  210. package/src/hooks/useOnScreen.ts +0 -20
  211. package/src/hooks/useOutsideClick.ts +0 -19
  212. package/src/hooks/usePrevious.ts +0 -11
  213. package/src/hooks/useSearchItem.ts +0 -11
  214. package/src/hooks/useSearchItemBranch.ts +0 -14
  215. package/src/hooks/useSessionStorage.ts +0 -32
  216. package/src/hooks/useVimeoThumbnail.ts +0 -31
  217. package/src/images/map/marker.png +0 -0
  218. package/src/images/placeholders/staticmap.jpg +0 -0
  219. package/src/index-dev.tsx +0 -42
  220. package/src/index-esbuild.ts +0 -74
  221. package/src/index.ts +0 -72
  222. package/src/layout/helpers.tsx +0 -6
  223. package/src/layout/keyframes.tsx +0 -23
  224. package/src/layout/theme.ts +0 -60
  225. package/src/layouts/WaykeComposite.tsx +0 -64
  226. package/src/layouts/WaykeCompositeWithProvider.tsx +0 -17
  227. package/src/layouts/search/index.tsx +0 -124
  228. package/src/layouts/searchItem/Branch.tsx +0 -97
  229. package/src/layouts/searchItem/BranchModal.tsx +0 -67
  230. package/src/layouts/searchItem/CheckList.tsx +0 -146
  231. package/src/layouts/searchItem/ManufacturerPackagesOption.tsx +0 -54
  232. package/src/layouts/searchItem/MetadataItem.tsx +0 -74
  233. package/src/layouts/searchItem/PackageOptionModal.tsx +0 -54
  234. package/src/layouts/searchItem/PackageOptions.tsx +0 -58
  235. package/src/layouts/searchItem/Page404.tsx +0 -17
  236. package/src/layouts/searchItem/PageLoading.tsx +0 -17
  237. package/src/layouts/searchItem/Property.tsx +0 -134
  238. package/src/layouts/searchItem/Related.tsx +0 -120
  239. package/src/layouts/searchItem/index.tsx +0 -342
  240. package/src/providers/WaykeItemProvidet.tsx +0 -63
  241. package/src/providers/WaykeProvider.tsx +0 -75
  242. package/src/providers/graphqlProvider.tsx +0 -9
  243. package/src/providers/themeProvider.tsx +0 -15
  244. package/src/queries/INSURANCE_CALCULATION.ts +0 -43
  245. package/src/queries/LOAN_CALCULATION.ts +0 -39
  246. package/src/queries/SEARCH_ITEM_BRANCH_QUERY.ts +0 -120
  247. package/src/queries/SEARCH_ITEM_QUERY.ts +0 -237
  248. package/src/utils/constants.ts +0 -34
  249. package/src/utils/converters.ts +0 -45
  250. package/src/utils/deep-copy.ts +0 -6
  251. package/src/utils/formats.ts +0 -83
  252. package/src/utils/metadata.min.ts +0 -87
  253. package/src/utils/phonenumbers.ts +0 -17
  254. package/src/utils/pubsub/Actions.ts +0 -20
  255. package/src/utils/pubsub/Events.ts +0 -79
  256. package/src/utils/pubsub/pubsub.ts +0 -151
  257. package/src/utils/regex.ts +0 -13
  258. package/src/utils/sortOptions.ts +0 -36
  259. package/src/utils/specification.ts +0 -581
  260. package/src/utils/ssn.ts +0 -1
  261. package/src/utils/url.ts +0 -1
  262. package/src/utils/vehicle-properties/compare-basic-properties.ts +0 -63
  263. package/src/utils/vehicle-properties/compare-categories.ts +0 -45
  264. package/src/utils/vehicle-properties/compare-properties.ts +0 -5
  265. package/src/utils/vehicle-properties/custom-property-adder.ts +0 -163
  266. package/src/utils/vehicle-properties/property-hint-enricher.ts +0 -230
  267. package/src/utils/vehicle-properties/property-remover.ts +0 -28
  268. package/src/utils/vehicle-properties/property-tree-creator.ts +0 -171
  269. package/src/utils/vehicle-properties/property-tree-sorter.ts +0 -20
  270. package/tsconfig.build.json +0 -10
  271. package/tsconfig.eslint.json +0 -11
  272. package/tsconfig.json +0 -18
  273. package/webpack.analyze.js +0 -10
  274. package/webpack.config.js +0 -95
@@ -1,253 +0,0 @@
1
- import React, { useState, useCallback } from 'react';
2
-
3
- import Modal from '../Modal/index';
4
- import Content from '../Content/index';
5
- import { Repeat, RepeatTiny, RepeatSmall } from '../Repeat/index';
6
- import LogoBox from '../LogoBox/index';
7
- import DetailBox from '../DetailBox/index';
8
- import ExtendInfo from '../ExtendInfo/index';
9
- import Snackbar from '../Snackbar/index';
10
- import { UtilityTextBold } from '../Utility/index';
11
- import InputLabel from '../InputLabel/index';
12
- import InputText from '../InputText/index';
13
- import InputCheckbox from '../InputCheckbox/index';
14
- import InputSelect, { OptionProps } from '../InputSelect/index';
15
- import { H4 } from '../Heading/index';
16
- import { InputGroup, InputGroupColumn } from '../InputGroup/index';
17
- import { ButtonPrimary, ButtonContent, ButtonInline } from '../Button/index';
18
- import { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';
19
- import { ColumnRow, ColumnRowItem } from '../ColumnRow/index';
20
- import useInsuranceCalculation from '../../hooks/useInsurance';
21
- import { ssnIsValid } from '../../utils/ssn';
22
- import Loader from '../Loader/index';
23
- import { numberSeparator } from '../../utils/formats';
24
- import { DrivingDistance, InsuranceOption, Branch } from '../../@types/codegen/types';
25
- import PubSub from '../../utils/pubsub/pubsub';
26
-
27
- interface FormData {
28
- ssn: string;
29
- drivingDistance: DrivingDistance;
30
- }
31
-
32
- interface InsuranceModal {
33
- id: string;
34
- branch?: Branch | null;
35
- onClose: () => void;
36
- insuranceOptions: InsuranceOption;
37
- }
38
-
39
- const InsuranceModal = ({ id, branch, onClose, insuranceOptions }: InsuranceModal) => {
40
- const [form, setForm] = useState<FormData>({
41
- ssn: '',
42
- drivingDistance: DrivingDistance.Between0And1000,
43
- });
44
- const [payload, setPayload] = useState<FormData>();
45
- const { loading, data, error } = useInsuranceCalculation(
46
- id,
47
- branch?.id ? branch?.id : undefined,
48
- ssnIsValid(payload?.ssn) ? payload?.ssn : undefined,
49
- payload?.drivingDistance
50
- );
51
-
52
- const onChangeSsn = useCallback(
53
- (e: React.ChangeEvent<HTMLInputElement>) => setForm({ ...form, ssn: e.currentTarget.value }),
54
- [form]
55
- );
56
-
57
- const onChangeDrivingDistance = useCallback(
58
- (e: React.ChangeEvent<HTMLSelectElement>) =>
59
- setForm({ ...form, drivingDistance: e.currentTarget.value as DrivingDistance }),
60
- [form]
61
- );
62
-
63
- const onShowInsurances = useCallback(() => {
64
- PubSub.publish('InsuranceInterest');
65
- setPayload(form);
66
- }, [form]);
67
-
68
- const onKeyDown = useCallback(
69
- (e: React.KeyboardEvent<HTMLInputElement>) => {
70
- if (e.keyCode === 13 && ssnIsValid(form.ssn) && !loading) {
71
- onShowInsurances();
72
- }
73
- },
74
- [form]
75
- );
76
-
77
- const options: OptionProps[] = [
78
- { value: DrivingDistance.Between0And1000, displayName: '0 - 1000' },
79
- { value: DrivingDistance.Between1000And1500, displayName: '1000 - 1500' },
80
- { value: DrivingDistance.Between1500And2000, displayName: '1500 - 2000' },
81
- { value: DrivingDistance.Between2000And2500, displayName: '2000 - 2500' },
82
- { value: DrivingDistance.Over2500, displayName: '2500+' },
83
- ];
84
-
85
- return (
86
- <Modal title="Försäkring" onClose={onClose}>
87
- {(insuranceOptions?.description || insuranceOptions?.logotype) && (
88
- <Repeat>
89
- <ContentLogo>
90
- {insuranceOptions.description && (
91
- <ContentLogoText>
92
- <Content>
93
- <p>{insuranceOptions.description}</p>
94
- </Content>
95
- </ContentLogoText>
96
- )}
97
- {insuranceOptions.logotype && (
98
- <ContentLogoMedia>
99
- <LogoBox
100
- logo={insuranceOptions.logotype}
101
- alt={insuranceOptions.name || 'Logotyp'}
102
- wide
103
- />
104
- </ContentLogoMedia>
105
- )}
106
- </ContentLogo>
107
- </Repeat>
108
- )}
109
-
110
- <Repeat>
111
- <RepeatSmall>
112
- <RepeatTiny>
113
- <InputGroup>
114
- <InputGroupColumn>
115
- <InputLabel htmlFor="input-insurance-personalnumber">Personnummer</InputLabel>
116
- <InputText
117
- placeholder="ÅÅÅÅMMDD-XXXX"
118
- label="Personnummer"
119
- value={form.ssn}
120
- onChange={onChangeSsn}
121
- onKeyDown={onKeyDown}
122
- id="input-insurance-personalnumber"
123
- />
124
- </InputGroupColumn>
125
- <InputGroupColumn>
126
- <InputLabel htmlFor="input-insurance-mileage">
127
- Uppskattad körsträcka per år
128
- </InputLabel>
129
- <InputSelect
130
- value={form.drivingDistance}
131
- onChange={onChangeDrivingDistance}
132
- options={options}
133
- unit="mil"
134
- title="Uppskattad körsträcka per år"
135
- />
136
- </InputGroupColumn>
137
- </InputGroup>
138
- </RepeatTiny>
139
- <RepeatTiny>
140
- <ButtonPrimary
141
- fullWidth
142
- disabled={!ssnIsValid(form.ssn) || loading}
143
- onClick={onShowInsurances}
144
- >
145
- <ButtonContent>Visa försäkringar</ButtonContent>
146
- </ButtonPrimary>
147
- </RepeatTiny>
148
- </RepeatSmall>
149
- {false && (
150
- <RepeatSmall>
151
- <InputCheckbox id="input-insurance-save-personalnumber">
152
- Spara personnummer på denna enhet
153
- </InputCheckbox>
154
- </RepeatSmall>
155
- )}
156
- <RepeatSmall>
157
- <Content small>
158
- <p>
159
- Spara personnummer på denna dator för att direkt visa försäkringskostnaderna i Wayke.
160
- Personnumret lagras inte hos Wayke utan finns bara sparad i din webbläsare.
161
- </p>
162
- </Content>
163
- </RepeatSmall>
164
- </Repeat>
165
-
166
- {loading && (
167
- <Repeat>
168
- <Loader />
169
- </Repeat>
170
- )}
171
-
172
- {error && (
173
- <Repeat>
174
- <Snackbar severity="error" icon heading="Ett fel har inträffat">
175
- Kunde inte hämta försäkringar. Vänligen försök igen.
176
- </Snackbar>
177
- </Repeat>
178
- )}
179
-
180
- <>
181
- {data?.insurances && (
182
- <Repeat>
183
- {data?.insurances.map((insurance) => (
184
- <Repeat key={insurance.name}>
185
- <DetailBox
186
- heading={`${numberSeparator(insurance.price)} ${insurance.unit}`}
187
- description={insurance.name}
188
- >
189
- <Repeat>
190
- <>
191
- {insurance.description && (
192
- <RepeatTiny>
193
- <Content>
194
- <p>{insurance.description}</p>
195
- </Content>
196
- </RepeatTiny>
197
- )}
198
- </>
199
- <>
200
- {insurance.url && (
201
- <RepeatTiny>
202
- <ButtonInline
203
- as="a"
204
- href={insurance.url || ''}
205
- target="_blank"
206
- rel="noopener noreferrer nofollow"
207
- >
208
- Förköpsinformation och villkor (öppnas i ny flik)
209
- </ButtonInline>
210
- </RepeatTiny>
211
- )}
212
- </>
213
- </Repeat>
214
- {insurance.items && insurance.items.length > 0 && (
215
- <Repeat>
216
- <H4>Försäkringen innehåller</H4>
217
- {insurance.items.map((item) => (
218
- <RepeatSmall key={item.name || ''}>
219
- <ExtendInfo title={item.name || ''}>{item.description}</ExtendInfo>
220
- </RepeatSmall>
221
- ))}
222
- </Repeat>
223
- )}
224
- {insurance.addons && insurance.addons.length > 0 && (
225
- <Repeat>
226
- <H4>Välj till</H4>
227
- {insurance.addons.map((addon) => (
228
- <RepeatSmall key={addon.title || ''}>
229
- <ColumnRow>
230
- <ColumnRowItem>
231
- <ExtendInfo title={addon.title || ''}>{addon.description}</ExtendInfo>
232
- </ColumnRowItem>
233
- <ColumnRowItem>
234
- <UtilityTextBold>
235
- +{addon.price} {addon.unit}
236
- </UtilityTextBold>
237
- </ColumnRowItem>
238
- </ColumnRow>
239
- </RepeatSmall>
240
- ))}
241
- </Repeat>
242
- )}
243
- </DetailBox>
244
- </Repeat>
245
- ))}
246
- </Repeat>
247
- )}
248
- </>
249
- </Modal>
250
- );
251
- };
252
-
253
- export default InsuranceModal;
@@ -1,27 +0,0 @@
1
- import React from 'react';
2
- import { InsuranceOption, Branch } from '../../@types/codegen/types';
3
- import Insurance from './Insurance';
4
- import InsuranceFree from './InsuranceFree';
5
-
6
- interface InsuranceOptions {
7
- id: string;
8
- branch?: Branch | null;
9
- insuranceOptions: InsuranceOption[];
10
- }
11
-
12
- const InsuranceOptions = ({ id, branch, insuranceOptions }: InsuranceOptions) => {
13
- if (!insuranceOptions.length) {
14
- return null;
15
- }
16
-
17
- if (insuranceOptions.length > 0) {
18
- if (insuranceOptions[0].requiresDistance && insuranceOptions[0].requiresPersonalNumber)
19
- return <Insurance id={id} branch={branch} insuranceOptions={insuranceOptions} />;
20
-
21
- return <InsuranceFree insuranceOptions={insuranceOptions} />;
22
- }
23
-
24
- return null;
25
- };
26
-
27
- export default InsuranceOptions;
@@ -1,51 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Wrapper, UiBlock, Item, Img, CloseBtn } from './wrapper';
4
- import { IconCancel } from '../Icon/index';
5
- import EmbeddedVideoLightbox from '../Video/EmbeddedVideoLightbox';
6
- import SphereLightbox from '../Sphere/SphereLightbox';
7
- import ThreeSixtyLightbox from '../ThreeSixty/ThreeSixtLightbox';
8
- import { Media } from '../../@types/codegen/types';
9
-
10
- interface LightboxProps {
11
- index: number;
12
- media: Media[];
13
- onClose: () => void;
14
- }
15
-
16
- const Lightbox = ({ index, media, onClose }: LightboxProps) => {
17
- const onRef = (ref: HTMLDivElement | null) => {
18
- if (ref) {
19
- setTimeout(() => {
20
- ref.scrollIntoView();
21
- }, 300);
22
- }
23
- };
24
-
25
- const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {
26
- if (e.keyCode === 27) {
27
- onClose();
28
- }
29
- };
30
-
31
- return (
32
- <Wrapper ref={(ref) => ref?.focus()} onKeyDown={onKeyDown} tabIndex={0}>
33
- <UiBlock onClick={onClose} aria-hidden />
34
- {media.map((m, i) => (
35
- <Item key={i} ref={index === i ? onRef : undefined}>
36
- {m.type === 'image' && (
37
- <Img id={`lightbox-image-${i}`} src={m.files[0].url} alt={`Bild ${i + 1}`} />
38
- )}
39
- {m.type === 'threesixty' && <ThreeSixtyLightbox urls={m.files.map((x) => x.url)} />}
40
- {m.type === 'sphere' && <SphereLightbox url={m.files[0].url} />}
41
- {m.type === 'embedded' && <EmbeddedVideoLightbox url={m.files[0].url} />}
42
- </Item>
43
- ))}
44
- <CloseBtn onClick={onClose} title="Stäng">
45
- <IconCancel block />
46
- </CloseBtn>
47
- </Wrapper>
48
- );
49
- };
50
-
51
- export default Lightbox;
@@ -1,97 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
- import { ButtonReset } from '../Button/index';
5
-
6
- export const Wrapper = styled.div`
7
- position: fixed;
8
- top: 0;
9
- bottom: 0;
10
- left: 0;
11
- right: 0;
12
- padding: ${size(3)};
13
- z-index: 90;
14
- overflow: auto;
15
-
16
- ${(props) => props.theme.breakpoint.LtSm} {
17
- padding: ${size(2)};
18
- }
19
- `;
20
-
21
- export const UiBlock = styled.div.attrs(() => ({
22
- role: 'button',
23
- }))`
24
- position: fixed;
25
- top: 0;
26
- bottom: 0;
27
- left: 0;
28
- right: 0;
29
- background-color: rgba(0, 0, 0, 0.3);
30
- z-index: -1;
31
- `;
32
-
33
- export const Item = styled.div`
34
- position: relative;
35
-
36
- & + & {
37
- margin-top: ${size(1)};
38
- }
39
- `;
40
-
41
- export const Img = styled.img`
42
- position: relative;
43
- display: block;
44
- max-width: 100%;
45
- max-height: calc(100vh - ${size(6)});
46
- margin: 0 auto;
47
- z-index: 1;
48
-
49
- ${(props) => props.theme.breakpoint.LtSm} {
50
- max-height: calc(100vh - ${size(4)});
51
- }
52
- `;
53
-
54
- export const CloseBtn = styled(ButtonReset)`
55
- display: flex;
56
- align-items: center;
57
- justify-content: center;
58
- position: fixed;
59
- top: ${size(2)};
60
- right: ${size(2)};
61
- width: ${size(5)};
62
- height: ${size(5)};
63
- border-radius: 50%;
64
- background-color: ${(props) => props.theme.color.bg};
65
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
66
- transform-origin: 50% 50%;
67
- transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);
68
- z-index: 1;
69
-
70
- :before {
71
- content: '';
72
- position: absolute;
73
- top: 0;
74
- left: 0;
75
- width: 100%;
76
- height: 100%;
77
- background-color: ${(props) => props.theme.color.hoverOverlay};
78
- border-radius: 50%;
79
- opacity: 0;
80
- transition: opacity 150ms ease;
81
- }
82
-
83
- :hover {
84
- :before {
85
- opacity: 1;
86
- }
87
- }
88
-
89
- :active {
90
- transform: scale(0.97);
91
- }
92
-
93
- ${(props) => props.theme.breakpoint.LtSm} {
94
- top: ${size(1)};
95
- right: ${size(1)};
96
- }
97
- `;
@@ -1,18 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { Spinner, Wrapper } from './wrapper';
4
- import { SrOnly } from '../SrOnly/index';
5
-
6
- interface Props {
7
- inline?: boolean;
8
- center?: boolean;
9
- }
10
-
11
- const Loader = ({ inline, center }: Props) => (
12
- <Wrapper inline={inline} center={center}>
13
- <Spinner aria-hidden="true" />
14
- <SrOnly>Laddar...</SrOnly>
15
- </Wrapper>
16
- );
17
-
18
- export default Loader;
@@ -1,50 +0,0 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
- import { rotate } from '../../layout/keyframes';
5
-
6
- export const Spinner = styled.div`
7
- display: block;
8
- margin: 0 auto;
9
- width: ${size(4)};
10
- height: ${size(4)};
11
- border-radius: 50%;
12
- border: 2px solid currentColor;
13
- border-top-color: transparent;
14
- animation: ${rotate} 600ms linear infinite;
15
- `;
16
-
17
- type WrapperProps = React.DetailedHTMLProps<
18
- React.HTMLAttributes<HTMLDivElement>,
19
- HTMLDivElement
20
- > & {
21
- inline?: boolean;
22
- center?: boolean;
23
- };
24
-
25
- export const Wrapper = styled.div.attrs(() => ({
26
- className: 'wayke__theme wayke__color--primary-text',
27
- role: 'status',
28
- }))<WrapperProps>`
29
- ${({ inline }) =>
30
- inline &&
31
- css`
32
- display: inline-block;
33
- vertical-align: middle;
34
- color: currentColor !important;
35
-
36
- ${Spinner} {
37
- width: 1em;
38
- height: 1em;
39
- }
40
- `}
41
-
42
- ${({ center }) =>
43
- center &&
44
- css`
45
- position: absolute;
46
- top: 50%;
47
- left: 50%;
48
- transform: translate(-50%, -50%);
49
- `}
50
- `;
@@ -1,22 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { Logo } from './wrapper';
4
-
5
- interface ILogoBox {
6
- logo: string;
7
- logo2x?: string | null;
8
- alt?: string;
9
- wide?: boolean;
10
- }
11
-
12
- const LogoBox = ({ logo, logo2x, alt, wide }: ILogoBox) => {
13
- let logoRetina = logo;
14
-
15
- if (logo2x) {
16
- logoRetina = `${logo2x} 2x`;
17
- }
18
-
19
- return <Logo src={logo} srcSet={logoRetina} alt={alt} wide={wide} />;
20
- };
21
-
22
- export default LogoBox;
@@ -1,19 +0,0 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- import { size } from '../../layout/helpers';
4
-
5
- type LogoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {
6
- wide?: boolean;
7
- };
8
-
9
- export const Logo = styled.img<LogoProps>`
10
- display: block;
11
- max-width: ${size(9.5)};
12
- max-height: ${size(6)};
13
-
14
- ${({ wide }) =>
15
- wide &&
16
- css`
17
- max-width: ${size(20)};
18
- `}
19
- `;
@@ -1,62 +0,0 @@
1
- import React, { useState, useCallback } from 'react';
2
- import useSettings from '../../State/Settings/useSettings';
3
-
4
- import { Wrapper, Image, Placeholder, PlaceholderAction } from './wrapper';
5
- import { ButtonSecondary, ButtonContent } from '../Button/index';
6
- import { Position, Maybe } from '../../@types/codegen/types';
7
-
8
- interface StaticMapProps {
9
- position?: Maybe<Position>;
10
- }
11
-
12
- const StaticMap = ({ position }: StaticMapProps) => {
13
- const { googleMapsApiKey, googleMapsMarker } = useSettings();
14
- const [visible, setVisible] = useState(false);
15
-
16
- const onShowMap = useCallback((e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
17
- if (googleMapsApiKey) {
18
- e.preventDefault();
19
- setVisible(true);
20
- }
21
- }, []);
22
-
23
- if (!position) {
24
- return null;
25
- }
26
-
27
- const { latitude, longitude } = position;
28
-
29
- if (visible && googleMapsApiKey) {
30
- return (
31
- <Wrapper
32
- href={`http://maps.google.com/maps?q=${latitude},${longitude}`}
33
- title="Visa på Google Maps"
34
- target="_blank"
35
- rel="nofollow noopener noreferrer"
36
- >
37
- <Image
38
- src={`https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${
39
- googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''
40
- }%7C${latitude},${longitude}&key=${googleMapsApiKey}`}
41
- alt="Karta"
42
- />
43
- </Wrapper>
44
- );
45
- }
46
- return (
47
- <Placeholder
48
- href={`http://maps.google.com/maps?q=${latitude},${longitude}`}
49
- target="_blank"
50
- rel="noopener noreferrer nofollow"
51
- onClick={onShowMap}
52
- >
53
- <PlaceholderAction>
54
- <ButtonSecondary as="div">
55
- <ButtonContent>Visa karta</ButtonContent>
56
- </ButtonSecondary>
57
- </PlaceholderAction>
58
- </Placeholder>
59
- );
60
- };
61
-
62
- export default StaticMap;
@@ -1,29 +0,0 @@
1
- import styled from 'styled-components';
2
-
3
- export const Wrapper = styled.a`
4
- display: block;
5
- `;
6
-
7
- export const Image = styled.img`
8
- display: block;
9
- width: 100%;
10
- border-radius: 3px;
11
- `;
12
-
13
- export const Placeholder = styled.a`
14
- display: block;
15
- position: relative;
16
- width: 100%;
17
- height: 0;
18
- padding-bottom: 43.75%; // Proportions of Google Static Map (640x280)
19
- background-image: linear-gradient(-15deg, #dfe4ce, #c1d6ea, #dfe4ce);
20
- border-radius: 3px;
21
- color: ${(props) => props.theme.color.textDark};
22
- `;
23
-
24
- export const PlaceholderAction = styled.div`
25
- position: absolute;
26
- top: 50%;
27
- left: 50%;
28
- transform: translate(-50%, -50%);
29
- `;
@@ -1,51 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { Portal, PortalNamespace } from '../Portal/index';
4
-
5
- import { H1 } from '../Heading/index';
6
- import { IconCancel } from '../Icon/index';
7
- import {
8
- Body,
9
- Content,
10
- Dialog,
11
- Header,
12
- Heading,
13
- UiBlock,
14
- Wrapper,
15
- Close,
16
- CloseBtn,
17
- } from './wrapper';
18
-
19
- interface ModalProps {
20
- id?: string | null;
21
- title: string | null;
22
- children: React.ReactNode;
23
- onClose: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>) => void;
24
- }
25
-
26
- const Modal = ({ id, title, onClose, children }: ModalProps) => {
27
- return (
28
- <Portal id={id || PortalNamespace.DefaultPortal}>
29
- <Wrapper onClick={(e) => e.stopPropagation()}>
30
- <UiBlock onClick={onClose} title="Stäng modal" />
31
- <Dialog>
32
- <Content>
33
- <Header>
34
- <Heading>
35
- <H1 noMargin>{title}</H1>
36
- </Heading>
37
- <Close>
38
- <CloseBtn onClick={onClose} title="Stäng modal">
39
- <IconCancel block />
40
- </CloseBtn>
41
- </Close>
42
- </Header>
43
- <Body>{children}</Body>
44
- </Content>
45
- </Dialog>
46
- </Wrapper>
47
- </Portal>
48
- );
49
- };
50
-
51
- export default Modal;