@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,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;