@wayke-se/components-react 3.0.0-beta.6 → 3.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/@wayke-se/ecom/dist-src/config/index.js", "../node_modules/@wayke-se/ecom/dist-src/errors/request-error.js", "../node_modules/@wayke-se/ecom/dist-src/errors/vehicle-unavailable-error.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/handle-response-error.js", "../node_modules/@wayke-se/ecom/dist-src/http/http-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/http/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/customers.js", "../node_modules/@wayke-se/ecom/dist-src/customers/address-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/customers/address-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/customers/customer-builder.js", "../node_modules/@wayke-se/ecom/dist-src/customers/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/insurances.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/insurance-options-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/insurance-options-response.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/orders.js", "../node_modules/@wayke-se/ecom/dist-src/orders/insurance-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-create-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-create-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-options-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/payments/payment-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-options-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/payment-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-credit-assessment-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/payments.js", "../node_modules/@wayke-se/ecom/dist-src/payments/payment-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/payments/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/vehicles.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-trade-builder.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/index.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/types.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/utils.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/auth.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/collect.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/cancel.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-auth-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-auth-response.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-collect-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/message-resolver.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-collect-response.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-cancel-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/get-status.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/new-case.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/sign.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/cancel-sign.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/decline.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/accept.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/sign-response.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/types.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-status.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-decision.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-recommendation.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/status-response.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/validator.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/index.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/types.js", "../node_modules/@wayke-se/ecom/dist-src/orders/types.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/types.js", "../src/layouts/search/index.tsx", "../src/components/Container/index.tsx", "../src/components/Container/wrapper.tsx", "../src/layout/theme.ts", "../src/layout/helpers.tsx", "../src/components/Page/index.tsx", "../src/components/Result/index.tsx", "../src/components/Result/wrapper.tsx", "../src/components/ProgressBar/index.tsx", "../src/components/ProgressBar/wrapper.tsx", "../src/components/Button/index.tsx", "../src/components/Utility/index.tsx", "../src/components/Loader/index.tsx", "../src/components/Loader/wrapper.tsx", "../src/layout/keyframes.tsx", "../src/components/SrOnly/index.tsx", "../src/utils/formats.ts", "../src/utils/constants.ts", "../src/State/Search/useSearch.ts", "../src/State/Search/SearchContext.ts", "../src/components/SortSelect/index.tsx", "../src/components/SortSelect/wrapper.tsx", "../src/components/Icon/index.tsx", "../src/utils/sortOptions.ts", "../src/components/Filter/index.tsx", "../src/components/Filter/wrapper.tsx", "../src/components/FilterPanel/index.tsx", "../src/components/Panel/index.tsx", "../src/components/Panel/wrapper.tsx", "../src/components/Heading/index.tsx", "../src/components/Portal/portal-namespace.ts", "../src/components/Portal/portal-element.tsx", "../src/components/Portal/portal.tsx", "../src/components/Accordion/index.tsx", "../src/components/Accordion/wrapper.tsx", "../src/components/Repeat/index.tsx", "../src/components/FilterPanel/faceSelector.tsx", "../src/components/FilterPanel/checkListFacet.tsx", "../src/components/Checklist/index.tsx", "../src/components/Checklist/wrapper.tsx", "../src/components/OverflowBox/index.tsx", "../src/components/OverflowBox/wrapper.tsx", "../src/components/FilterPanel/colorFacet.tsx", "../src/components/ColorSelect/index.tsx", "../src/components/ColorSelect/wrapper.tsx", "../src/utils/converters.ts", "../src/components/FilterPanel/rangeFacet.tsx", "../src/components/RangeSlider/index.tsx", "../src/components/RangeSlider/wrapper.tsx", "../src/components/RangeSlider/handle.tsx", "../src/components/RangeSlider/track.tsx", "../src/components/Grid/index.tsx", "../src/components/Grid/wrapper.tsx", "../src/components/ProductCard/index.tsx", "../src/components/ProductCard/wrapper.tsx", "../src/components/UspList/index.tsx", "../src/components/UspList/wrapper.tsx", "../src/State/Path/usePath.ts", "../src/State/Path/PathContext.ts", "../src/components/SearchTerm/index.tsx", "../src/components/SearchTerm/wrapper.tsx", "../src/components/SearchFilter/index.tsx", "../src/components/SearchBar/index.tsx", "../src/components/InputSearch/index.tsx", "../src/components/InputSearch/wrapper.tsx", "../src/hooks/useOutsideClick.ts", "../src/components/Snackbar/index.tsx", "../src/components/Snackbar/wrapper.tsx", "../src/utils/pubsub/pubsub.ts", "../src/layouts/searchItem/index.tsx", "../src/components/PriceTable/index.tsx", "../src/components/PriceTable/wrapper.tsx", "../src/components/Price/index.tsx", "../src/components/LogoBox/index.tsx", "../src/components/LogoBox/wrapper.tsx", "../src/components/Content/index.tsx", "../src/components/Content/wrapper.tsx", "../src/components/Blockquote/index.tsx", "../src/components/Blockquote/wrapper.tsx", "../src/components/Avatar/index.tsx", "../src/components/Avatar/wrapper.tsx", "../src/components/ExtendContent/index.tsx", "../src/components/ExtendContent/wrapper.tsx", "../src/components/Gallery/index.tsx", "../src/components/ProductPage/index.tsx", "../src/hooks/useSearchItem.ts", "../src/queries/SEARCH_ITEM_QUERY.ts", "../src/components/Modal/index.tsx", "../src/components/Modal/wrapper.tsx", "../src/components/FinancialOptions/index.tsx", "../src/components/FinancialOptions/leasing.tsx", "../src/components/OptionBox/index.tsx", "../src/components/OptionBox/wrapper.tsx", "../src/components/DataList/index.tsx", "../src/components/DataList/wrapper.tsx", "../src/components/FinancialOptions/loan.tsx", "../src/hooks/useLoan.ts", "../src/queries/LOAN_CALCULATION.ts", "../src/components/FinancialOptions/LoanModal.tsx", "../src/components/ContentLogo/index.tsx", "../src/components/RangeSlider/SliderWithLabel.tsx", "../src/components/RangeSliderLabel/index.tsx", "../src/components/RangeSliderLabel/wrapper.tsx", "../src/components/RangeSlider/RangeSliderSimple.tsx", "../src/components/InsuranceOptions/index.tsx", "../src/components/InsuranceOptions/Insurance.tsx", "../src/components/InsuranceOptions/InsuranceModal.tsx", "../src/components/DetailBox/index.tsx", "../src/components/DetailBox/wrapper.tsx", "../src/components/ExtendInfo/index.tsx", "../src/components/ExtendInfo/wrapper.tsx", "../src/components/InputLabel/index.tsx", "../src/components/InputLabel/wrapper.tsx", "../src/components/InputText/index.tsx", "../src/components/InputText/wrapper.tsx", "../src/components/InputCheckbox/index.tsx", "../src/components/InputCheckbox/wrapper.tsx", "../src/components/InputSelect/index.tsx", "../src/components/InputSelect/wrapper.tsx", "../src/components/InputGroup/index.tsx", "../src/components/ColumnRow/index.tsx", "../src/hooks/useInsurance.ts", "../src/queries/INSURANCE_CALCULATION.ts", "../src/utils/ssn.ts", "../src/components/InsuranceOptions/InsuranceFree.tsx", "../src/components/InsuranceOptions/InsuranceFreeModal.tsx", "../src/layouts/searchItem/ManufacturerPackagesOption.tsx", "../src/layouts/searchItem/CheckList.tsx", "../src/components/ActionList/index.tsx", "../src/components/ActionList/toggle-item.tsx", "../src/utils/phonenumbers.ts", "../src/utils/metadata.min.ts", "../src/components/CheckMarkList/index.tsx", "../src/components/CheckMarkList/wrapper.tsx", "../src/components/SwitchBar/index.tsx", "../src/components/SwitchBar/wrapper.tsx", "../src/layouts/searchItem/BranchModal.tsx", "../src/State/CentralStorage/CentralStorageContext.ts", "../src/layouts/searchItem/PackageOptionModal.tsx", "../src/layouts/searchItem/Related.tsx", "../src/components/SectionHeader/index.tsx", "../src/components/SectionHeader/wrapper.tsx", "../src/components/OverflowGrid/index.tsx", "../src/State/RelatedSearch/useRelatedSearch.ts", "../src/State/RelatedSearch/RelatedSearchContext.ts", "../src/utils/regex.ts", "../src/layouts/searchItem/PackageOptions.tsx", "../src/layouts/searchItem/Branch.tsx", "../src/components/TableColumn/index.tsx", "../src/components/OpeningHours/index.tsx", "../src/components/Badge/index.tsx", "../src/components/Badge/wrapper.tsx", "../src/components/PhoneNumber/index.tsx", "../src/components/Map/index.tsx", "../src/State/Settings/useSettings.ts", "../src/State/Settings/SettingsContext.ts", "../src/components/Map/wrapper.tsx", "../src/State/CentralStorage/useCentralStorage.ts", "../src/hooks/useSearchItemBranch.ts", "../src/queries/SEARCH_ITEM_BRANCH_QUERY.ts", "../src/layouts/searchItem/Page404.tsx", "../src/layouts/searchItem/PageLoading.tsx", "../src/layouts/searchItem/Property.tsx", "../src/utils/vehicle-properties/property-tree-creator.ts", "../src/utils/vehicle-properties/compare-categories.ts", "../src/utils/vehicle-properties/compare-properties.ts", "../src/utils/vehicle-properties/compare-basic-properties.ts", "../src/utils/vehicle-properties/property-tree-sorter.ts", "../src/utils/deep-copy.ts", "../src/utils/vehicle-properties/property-hint-enricher.ts", "../src/utils/vehicle-properties/custom-property-adder.ts", "../src/utils/vehicle-properties/property-remover.ts", "../src/layouts/searchItem/MetadataItem.tsx", "../src/components/TableList/index.tsx", "../src/components/Tabs/index.tsx", "../src/components/Tabs/wrapper.tsx", "../src/components/Pdf/index.tsx", "../src/components/Pdf/wrapper.tsx", "../src/providers/WaykeProvider.tsx", "../src/providers/graphqlProvider.tsx", "../src/providers/themeProvider.tsx", "../src/State/Search/SearchProvider.tsx", "../src/hooks/useFetch.ts", "../src/utils/url.ts", "../src/components/Root/index.tsx", "../src/hooks/useEcom.ts", "../src/State/Settings/SettingsProvider.tsx", "../src/State/RelatedSearch/RelatedSearchProvider.tsx", "../src/State/CentralStorage/CentralStorageProvider.tsx", "../src/hooks/useSessionStorage.ts", "../src/State/Path/PathProvider.tsx", "../src/hooks/usePrevious.ts", "../src/State/Path/reducer.ts", "../src/layouts/WaykeCompositeWithProvider.tsx", "../src/layouts/WaykeComposite.tsx", "../src/hooks/useHashGuid.ts", "../src/providers/WaykeItemProvidet.tsx", "../src/index.ts"],
4
- "sourcesContent": ["const createDefaultOrigin = () => {\n if (!window || !window.location)\n return undefined;\n const topic = window.location.host.replace(\"www.\", \"\");\n const channel = \"Web\";\n return {\n topic,\n channel,\n };\n};\nconst createDefaultConfig = () => {\n if (process.env.WAYKE_ECOM_API_ADDRESS) {\n return {\n api: {\n address: process.env.WAYKE_ECOM_API_ADDRESS,\n },\n origin: createDefaultOrigin(),\n };\n }\n return undefined;\n};\nclass Configuration {\n constructor() {\n this.config = createDefaultConfig();\n }\n static current() {\n if (Configuration.instance) {\n return Configuration.instance;\n }\n const instance = new Configuration();\n if (!instance.config) {\n throw Configuration.notBoundError;\n }\n Configuration.instance = instance;\n return Configuration.instance;\n }\n static bind(newConfig) {\n Configuration.instance = new Configuration();\n Configuration.instance.config = {\n api: {\n address: newConfig.api.address,\n },\n origin: newConfig.origin\n ? {\n topic: newConfig.origin.topic,\n channel: newConfig.origin.channel,\n }\n : createDefaultOrigin(),\n bankIdThumbprint: newConfig.bankIdThumbprint,\n };\n return Configuration.instance;\n }\n static destroy() {\n Configuration.instance = undefined;\n }\n getApiAddress() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.api.address;\n }\n getOrigin() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.origin;\n }\n useBankIdThumbprint() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return !!this.config.bankIdThumbprint;\n }\n getBankIdThumbprint() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.bankIdThumbprint;\n }\n}\nConfiguration.instance = undefined;\nConfiguration.notBoundError = new Error(\"Configuration not bound yet\");\nexport default Configuration;\n", "export class ResponseError extends Error {\n constructor(response, message) {\n super(message);\n this.response = response;\n Object.setPrototypeOf(this, ResponseError.prototype);\n }\n getResponse() {\n return this.response;\n }\n}\n", "export class VehicleUnavailableError extends Error {\n constructor() {\n super(\"The vehicle is not available for purchase\");\n Object.setPrototypeOf(this, VehicleUnavailableError.prototype);\n }\n}\n", "import { VehicleUnavailableError } from \"../../errors/vehicle-unavailable-error\";\nconst throwErrorByType = (errorBody) => {\n switch (errorBody.errorCode) {\n case 1:\n throw new VehicleUnavailableError();\n default:\n throw new Error(errorBody.message);\n }\n};\nconst handleResponseError = (error) => {\n const response = error.getResponse();\n return response.json().then(throwErrorByType);\n};\nexport default handleResponseError;\n", "export const BANK_ID_THUMBPRINT_HEADER = \"x-certificate-thumbprint\";\nclass HttpRequestBuilder {\n constructor() {\n this._method = \"get\";\n this._headers = {};\n this._body = null;\n }\n accept(acceptHeader) {\n this._headers.Accept = acceptHeader;\n return this;\n }\n method(method) {\n this._method = method;\n return this;\n }\n authorization(token) {\n this._headers.Authorization = `Bearer ${token}`;\n return this;\n }\n requestForgeryToken(token) {\n if (!token)\n throw new Error(\"Missing request forgery token\");\n this._headers[\"x-rf-token\"] = token;\n return this;\n }\n content(body, contentType = \"application/json\") {\n switch (contentType) {\n case \"application/json\":\n this._body = JSON.stringify(body);\n break;\n default:\n this._body = body;\n break;\n }\n if (contentType)\n this._headers[\"Content-Type\"] = contentType;\n return this;\n }\n bankIdThumbprint(thumbprint) {\n if (!thumbprint)\n throw new Error(\"Bank id thumbprint can not be falsy\");\n this._headers[BANK_ID_THUMBPRINT_HEADER] = thumbprint;\n return this;\n }\n build() {\n return {\n body: this._body,\n headers: this._headers,\n method: this._method,\n };\n }\n}\nexport default HttpRequestBuilder;\n", "import { ResponseError } from \"../errors/request-error\";\nimport handleResponseError from \"./apis/handle-response-error\";\nimport HttpRequestBuilder from \"./http-request-builder\";\nconst httpStatusCheck = (response, request) => {\n if (response.status >= 200 && response.status < 300) {\n return response;\n }\n if (process.env.NODE_ENV === \"development\") {\n console.group(`Asynchronous request failed!`);\n console.log(`URL was ${response.url}`);\n console.log(`Status code: ${response.status}`);\n console.log(`Request:`, request);\n console.groupEnd();\n }\n throw new ResponseError(response, String(response.status));\n};\nconst httpStateContext = {\n requestForgeryToken: undefined,\n};\nexport const context = () => ({ ...httpStateContext });\nexport const contextualize = (response) => {\n httpStateContext.requestForgeryToken =\n response.requestForgeryToken || httpStateContext.requestForgeryToken;\n return response;\n};\nexport const raw = (url, options) => fetch(url, options).then((response) => httpStatusCheck(response, options));\nconst noContentCodes = [\"202\", \"204\"];\nexport const json = (url, options) => raw(url, options)\n .then((response) => {\n if (noContentCodes.includes(String(response.status)))\n return null;\n return response.json();\n})\n .catch((err) => {\n if (err instanceof ResponseError) {\n return handleResponseError(err);\n }\n throw err;\n});\nexport const captureStateContext = (promise) => promise.then(contextualize);\nexport const builder = () => new HttpRequestBuilder();\n", "import * as http from \"../index\";\nconst buildLookupRequest = ({ requestForgeryToken, }) => http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .build();\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookupAddress = (lookupRequest, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v2/address?SocialId=${lookupRequest.personalNumber}`, buildLookupRequest(http.context())))\n .then(validateResponse);\n", "export class AddressLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing address lookup request\");\n }\n if (!request.personalNumber) {\n throw new Error(\"Missing personal number in address lookup request\");\n }\n }\n forCustomer(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class AddressLookupResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing address lookup response data\");\n }\n this.response = response;\n }\n getAddress() {\n return {\n city: this.response.city,\n name: this.response.name,\n givenName: this.response.givenName,\n surname: this.response.surname,\n postalCode: this.response.postalCode,\n street: this.response.street,\n street2: this.response.street2,\n distance: this.response.distance,\n };\n }\n}\n", "export class CustomerBuilder {\n constructor() {\n this.properties = {};\n }\n withAddress(address) {\n this.properties.address = address;\n this.properties.name = address.name;\n this.properties.givenName = address.givenName;\n this.properties.surname = address.surname;\n return this;\n }\n withPersonalNumber(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withEmail(email) {\n this.properties.email = email;\n return this;\n }\n withPhoneNumber(phoneNumber) {\n this.properties.phoneNumber = phoneNumber;\n return this;\n }\n withGivenName(givenName) {\n this.properties.givenName = givenName;\n return this;\n }\n withSurname(surname) {\n this.properties.surname = surname;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/customers\";\nimport { AddressLookupRequestBuilder } from \"./address-lookup-request-builder\";\nimport { AddressLookupResponse } from \"./address-lookup-response\";\nimport { CustomerBuilder } from \"./customer-builder\";\nexport const newAddressLookupRequest = () => new AddressLookupRequestBuilder();\nexport const newCustomer = () => new CustomerBuilder();\nexport const lookupAddress = (request) => {\n AddressLookupRequestBuilder.validateRequest(request);\n return api\n .lookupAddress(request, Configuration.current())\n .then((response) => new AddressLookupResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildInsuranceRequest = (request, { requestForgeryToken }) => {\n const content = {\n drivingDistance: request.drivingDistance,\n socialId: request.personalNumber,\n vehicleId: request.id,\n branchId: request.branchId,\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .content(content)\n .build();\n};\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const find = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v3/insurance`, buildInsuranceRequest(request, http.context())))\n .then(validateResponse);\n", "export class InsuranceOptionsRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing insurance options request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID for insurance options request\");\n }\n if (!request.personalNumber) {\n throw new Error(\"Missing personal number for insurance options request\");\n }\n if (!request.drivingDistance) {\n throw new Error(\"Missing driving distance for insurance options request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n forCustomer(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withDrivingDistance(drivingDistance) {\n this.properties.drivingDistance = drivingDistance;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class InsuranceOptionsResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing insurance options response data\");\n }\n this.response = response;\n }\n getInsuranceOptions() {\n return this.response.insurances;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/insurances\";\nimport { InsuranceOptionsRequestBuilder } from \"./insurance-options-request-builder\";\nimport { InsuranceOptionsResponse } from \"./insurance-options-response\";\nexport const newInsuranceOptionsRequest = () => new InsuranceOptionsRequestBuilder();\nexport const getOptions = (request) => {\n InsuranceOptionsRequestBuilder.validateRequest(request);\n return api\n .find(request, Configuration.current())\n .then((response) => new InsuranceOptionsResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildOptionsRequest = () => http.builder().method(\"get\").accept(\"application/json\").build();\nconst buildCreateRequest = (request, config, { requestForgeryToken }) => {\n const content = {\n vehicleId: request.id,\n tradeIn: request.tradein,\n insurance: request.insurance\n ? {\n ...request.insurance,\n socialId: request.insurance.personalNumber\n ? request.insurance.personalNumber\n : request.customer.personalNumber,\n }\n : undefined,\n payment: request.payment,\n delivery: request.deliveryType,\n customer: {\n socialId: request.customer.personalNumber,\n email: request.customer.email,\n phone: request.customer.phoneNumber,\n name: request.customer.name,\n address: request.customer.address,\n givenName: request.customer.givenName,\n surname: request.customer.surname,\n },\n accessories: request.accessories,\n urls: request.urls,\n origin: config.getOrigin(),\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .content(content)\n .build();\n};\nconst validateOptionsResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nconst validateCreateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nconst getInitUrl = ({ id, branchId }) => {\n const url = `/v3/orders/new?vehicleId=${id}`;\n if (!branchId)\n return url;\n return `${url}&branchId=${branchId}`;\n};\nexport const init = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}${getInitUrl(request)}`, buildOptionsRequest()))\n .then(validateOptionsResponse);\nconst getCreateUrl = () => \"/v3/orders\";\nexport const create = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}${getCreateUrl()}`, buildCreateRequest(request, config, http.context())))\n .then(validateCreateResponse);\n", "export class InsuranceBuilder {\n constructor() {\n this.properties = {};\n }\n forPersonalNumber(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withDrivingDistance(drivingDistance) {\n this.properties.drivingDistance = drivingDistance;\n return this;\n }\n withAddOns(addons) {\n this.properties.addons = addons;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreateRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing order creation request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in order creation request\");\n }\n if (!request.customer) {\n throw new Error(\"Missing customer in order creation request\");\n }\n if (!request.payment) {\n throw new Error(\"Missing payment in order creation request\");\n }\n if (!request.deliveryType) {\n throw new Error(\"Missing delivery type in order creation request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n withAccessories(accessories) {\n this.properties.accessories = accessories.map((a) => {\n return { id: a.id };\n });\n return this;\n }\n withCustomer(customer) {\n this.properties.customer = customer;\n return this;\n }\n withPayment(payment) {\n this.properties.payment = payment;\n return this;\n }\n withDeliveryType(deliveryType) {\n this.properties.deliveryType = deliveryType;\n return this;\n }\n withInsurance(insurance) {\n this.properties.insurance = insurance;\n return this;\n }\n withTradeIn(tradein) {\n this.properties.tradein = tradein;\n return this;\n }\n withUrls(redirect, payment) {\n this.properties.urls = { redirect, payment };\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreateResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing order create response data\");\n }\n this.response = response;\n }\n getId() {\n return this.response.id;\n }\n getPayment() {\n return this.response.payment;\n }\n getOrderNumber() {\n return this.response.orderNumber;\n }\n}\n", "export class OrderOptionsRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing order setup request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in order setup request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class PaymentLookupResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing payment lookup response data\");\n }\n this.response = response;\n }\n getCosts() {\n return {\n monthlyCost: this.response.monthlyCost,\n totalCreditCost: this.response.totalCreditCost,\n };\n }\n getFees() {\n return {\n setupFee: this.response.setupFee,\n administrationFee: this.response.administrationFee,\n };\n }\n getInterests() {\n return {\n interest: this.response.interest,\n effectiveInterest: this.response.effectiveInterest,\n };\n }\n getDurationSpec() {\n return this.response.duration;\n }\n getDownPaymentSpec() {\n return this.response.downPayment;\n }\n getResidualValueSpec() {\n return this.response.residual;\n }\n getTotalResidualValue() {\n return this.response.totalResidualValue;\n }\n getPublicURL() {\n return this.response.link;\n }\n shouldUseCreditScoring() {\n return this.response.useCreditScoring;\n }\n getFinancialProductCode() {\n return this.response.financialProductCode;\n }\n getPrice() {\n return this.response.vehiclePrice;\n }\n getCreditAmount() {\n return this.response.loanAmount;\n }\n hasPrivacyPolicy() {\n return !!this.response.privacyPolicyUrl;\n }\n getPrivacyPolicyUrl() {\n return this.response.privacyPolicyUrl;\n }\n}\n", "import { PaymentLookupResponse } from \"../payments/payment-lookup-response\";\nexport class OrderOptionsResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing order options response data\");\n }\n this.response = response;\n }\n getOrderVehicle() {\n return this.response.vehicle;\n }\n getAccessories() {\n if (!this.response.accessories || !this.response.accessories.length) {\n return [];\n }\n return this.response.accessories.map((accessory) => ({\n id: accessory.id,\n articleNumber: accessory.articleNumber,\n logoUrl: accessory.logoUrl,\n longDescription: accessory.longDescription,\n shortDescription: accessory.shortDescription,\n manufacturer: accessory.manufacturer,\n model: accessory.model,\n name: accessory.name,\n price: accessory.price,\n assemblyPrice: accessory.assemblyPrice,\n salePrice: accessory.salePrice,\n productPageLink: accessory.productPageLink,\n productPageLinkText: accessory.productPageLinkText,\n media: accessory.media\n ? accessory.media.map((m) => {\n return {\n externalId: m.externalId,\n sortOrder: m.sortOrder,\n url: m.url,\n };\n })\n : [],\n }));\n }\n requiresDealerSelection() {\n return this.response.dealers && this.response.dealers.length > 1;\n }\n getDealerSites() {\n if (!this.response.dealers || !this.response.dealers.length) {\n return [];\n }\n return this.response.dealers;\n }\n getPaymentOptions() {\n if (!this.response.payment || !this.response.payment.length) {\n return [];\n }\n return this.response.payment.map((payment) => ({\n loanDetails: payment.loanDetails\n ? new PaymentLookupResponse(payment.loanDetails)\n : undefined,\n logo: payment.logo,\n name: payment.name,\n price: payment.price,\n type: payment.type,\n unit: payment.unit,\n externalId: payment.externalId,\n }));\n }\n getDeliveryOptions() {\n if (!this.response.delivery || !this.response.delivery.length) {\n return [];\n }\n return this.response.delivery.map((delivery) => ({\n type: delivery.type,\n deliveryTime: delivery.deliveryTime,\n startupCost: delivery.startupCost,\n unitPrice: delivery.unitPrice,\n unit: delivery.unit,\n minQuantity: delivery.minQuantity,\n maxQuantity: delivery.maxQuantity,\n }));\n }\n getInsuranceOption() {\n return this.response.insurance\n ? {\n institute: this.response.insurance.institute,\n identifier: this.response.insurance.identifier,\n longDescription: this.response.insurance.longDescription,\n description: this.response.insurance.description,\n logo: this.response.insurance.logo,\n title: this.response.insurance.title,\n url: this.response.insurance.url,\n ecomInsuranceText: this.response.insurance.ecomInsuranceText,\n requiresDistance: this.response.insurance.requiresDistance,\n requiresPersonalNumber: this.response.insurance\n .requiresPersonalNumber,\n }\n : undefined;\n }\n getOrderConditions() {\n return this.response.conditions;\n }\n getOrderReturnConditions() {\n return this.response.returnConditions;\n }\n getConditionsPdfUri() {\n return this.response.conditionsPdfUri;\n }\n getContactInformation() {\n return this.response.contactInformation;\n }\n allowsTradeIn() {\n return this.response.tradeIn;\n }\n isUnavailable() {\n return this.response.unavailable;\n }\n isPaymentRequired() {\n return this.response.paymentRequired;\n }\n}\n", "export class PaymentBuilder {\n constructor() {\n this.properties = {};\n }\n withType(paymentType) {\n this.properties.type = paymentType;\n return this;\n }\n withDuration(duration) {\n this.properties.months = duration;\n return this;\n }\n withDownPayment(downPayment) {\n this.properties.downPayment = downPayment;\n return this;\n }\n withResidualValue(residualValue) {\n this.properties.residualValue = residualValue;\n return this;\n }\n withExternalId(externalId) {\n this.properties.externalId = externalId;\n return this;\n }\n withCreditAssessment(creditAssessment) {\n this.properties.creditAssessment = creditAssessment;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreditAssessmentBuilder {\n constructor() {\n this.properties = {};\n }\n withScoreId(scoreId) {\n this.properties.scoreId = scoreId;\n return this;\n }\n withFinancialProductCode(code) {\n this.properties.financialProductCode = code;\n return this;\n }\n withRecommendation(recommendation) {\n this.properties.recommendation = recommendation;\n return this;\n }\n withDecision(decision) {\n this.properties.decision = decision;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/orders\";\nimport { InsuranceBuilder } from \"./insurance-builder\";\nimport { OrderCreateRequestBuilder } from \"./order-create-request-builder\";\nimport { OrderCreateResponse } from \"./order-create-response\";\nimport { OrderOptionsRequestBuilder } from \"./order-options-request-builder\";\nimport { OrderOptionsResponse } from \"./order-options-response\";\nimport { PaymentBuilder } from \"./payment-builder\";\nimport { OrderCreditAssessmentBuilder } from \"./order-credit-assessment-builder\";\nexport const newOptionsRequest = () => new OrderOptionsRequestBuilder();\nexport const newCreateRequest = () => new OrderCreateRequestBuilder();\nexport const newInsurance = () => new InsuranceBuilder();\nexport const newPayment = () => new PaymentBuilder();\nexport const newCreditAssessment = () => new OrderCreditAssessmentBuilder();\nexport const getOptions = (request) => {\n OrderOptionsRequestBuilder.validateRequest(request);\n return api\n .init(request, Configuration.current())\n .then((response) => new OrderOptionsResponse(response));\n};\nexport const create = (request) => {\n OrderCreateRequestBuilder.validateRequest(request);\n return api\n .create(request, Configuration.current())\n .then((response) => new OrderCreateResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildLookupRequest = (lookupRequest) => {\n const content = {\n branchId: lookupRequest.branchId,\n duration: lookupRequest.duration,\n downPayment: lookupRequest.downPayment,\n residual: lookupRequest.residual,\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .content(content)\n .build();\n};\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookup = (lookupRequest, config) => http\n .json(`${config.getApiAddress()}/payment/${lookupRequest.id}`, buildLookupRequest(lookupRequest))\n .then(validateResponse);\n", "export class PaymentLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing payment lookup request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in payment lookup request\");\n }\n if (!request.duration || request.duration < 1) {\n throw new Error(\"Missing month duration in payment lookup request\");\n }\n if (!request.downPayment || request.downPayment < 1) {\n throw new Error(\"Missing cash deposit in payment lookup request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n withDuration(duration) {\n this.properties.duration = duration;\n return this;\n }\n withDownPayment(downPayment) {\n this.properties.downPayment = downPayment;\n return this;\n }\n withResidualValue(residual) {\n this.properties.residual = residual;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/payments\";\nimport { PaymentLookupRequestBuilder } from \"./payment-lookup-request-builder\";\nimport { PaymentLookupResponse } from \"./payment-lookup-response\";\nexport const newLookupRequest = () => new PaymentLookupRequestBuilder();\nexport const lookupPayment = (request) => {\n PaymentLookupRequestBuilder.validateRequest(request);\n return api\n .lookup(request, Configuration.current())\n .then((response) => new PaymentLookupResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildLookupRequest = ({ requestForgeryToken, }) => http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .build();\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookup = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v2/tradein/${request.registrationNumber}?mileage=${request.mileage}&condition=${request.condition}`, buildLookupRequest(http.context())))\n .then(validateResponse);\n", "export class VehicleLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing vehicle lookup request\");\n }\n if (!request.registrationNumber) {\n throw new Error(\"Missing registration number in vehicle lookup request\");\n }\n if (request.mileage && !request.condition) {\n throw new Error(\"Missing vehicle condition for valuation in vehicle lookup request\");\n }\n if (request.condition && !request.mileage) {\n throw new Error(\"Missing mileage for valuation in vehicle lookup request\");\n }\n }\n withRegistrationNumber(registrationNumber) {\n this.properties.registrationNumber = registrationNumber;\n return this;\n }\n withMileage(mileage) {\n this.properties.mileage = mileage;\n return this;\n }\n withCondition(condition) {\n this.properties.condition = condition;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class VehicleLookupResponse {\n constructor(response, registrationNumber) {\n if (!response) {\n throw new Error(\"Missing vehicle lookup response data\");\n }\n this.response = response;\n this.registrationNumber = registrationNumber;\n }\n getVehicle() {\n return {\n manufacturer: this.response.manufacturer,\n modelName: this.response.modelName,\n modelSeries: this.response.modelSeries,\n modelYear: this.response.modelYear,\n valuation: this.response.valuation,\n };\n }\n}\n", "export class VehicleTradeBuilder {\n constructor() {\n this.properties = {};\n }\n forVehicle(registrationNumber) {\n this.properties.registrationNumber = registrationNumber;\n return this;\n }\n withMileage(mileage) {\n this.properties.mileage = mileage;\n return this;\n }\n withCondition(condition) {\n this.properties.condition = condition;\n return this;\n }\n withComment(comment) {\n this.properties.comments = comment;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/vehicles\";\nimport { VehicleLookupRequestBuilder } from \"./vehicle-lookup-request-builder\";\nimport { VehicleLookupResponse } from \"./vehicle-lookup-response\";\nimport { VehicleTradeBuilder } from \"./vehicle-trade-builder\";\nexport const newLookupRequest = () => new VehicleLookupRequestBuilder();\nexport const newVehicleTrade = () => new VehicleTradeBuilder();\nexport const lookupVehicle = (request) => {\n VehicleLookupRequestBuilder.validateRequest(request);\n return api\n .lookup(request, Configuration.current())\n .then((response) => new VehicleLookupResponse(response, request.registrationNumber));\n};\n", "export var AuthMethod;\n(function (AuthMethod) {\n AuthMethod[\"SameDevice\"] = \"SameDevice\";\n AuthMethod[\"QrCode\"] = \"QrCode\";\n})(AuthMethod || (AuthMethod = {}));\nexport var AuthStatus;\n(function (AuthStatus) {\n AuthStatus[\"Pending\"] = \"pending\";\n AuthStatus[\"Failed\"] = \"failed\";\n AuthStatus[\"Complete\"] = \"complete\";\n AuthStatus[\"Unknown\"] = \"unknown\";\n})(AuthStatus || (AuthStatus = {}));\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const createRequest = () => {\n const requestForgeryToken = http.context().requestForgeryToken;\n const builder = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken);\n if (Configuration.current().useBankIdThumbprint()) {\n const thumbprint = Configuration.current().getBankIdThumbprint();\n builder.bankIdThumbprint(thumbprint);\n }\n const request = builder.build();\n return request;\n};\n", "import { AuthMethod, } from \"../../../bankid/types\";\nimport * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nconst getRoute = (method) => {\n switch (method) {\n case AuthMethod.QrCode:\n return \"/qr-code\";\n case AuthMethod.SameDevice:\n return \"/same-device\";\n default:\n throw new Error(\"BankId auth method not supported\");\n }\n};\nexport const getUrl = (requestOptions) => {\n const route = getRoute(requestOptions.method);\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/auth${route}`;\n return url;\n};\nexport const auth = (requestOptions) => {\n const url = getUrl(requestOptions);\n const request = createRequest();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nexport const getUrl = (orderRef) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/collect/${orderRef}`;\n return url;\n};\nexport const collect = (requestOptions) => {\n const url = getUrl(requestOptions.orderRef);\n const request = createRequest();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nexport const getUrl = (orderRef) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/cancel/${orderRef}`;\n return url;\n};\nexport const cancel = (requestOptions) => {\n const url = getUrl(requestOptions.orderRef);\n const request = createRequest();\n return http.raw(url, request);\n};\n", "import { auth as doAuthRequest } from \"./bankid/auth\";\nimport { collect as doCollectRequest } from \"./bankid/collect\";\nimport { cancel as doCancelRequest } from \"./bankid/cancel\";\nconst validate = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const auth = (requestOptions) => doAuthRequest(requestOptions).then(validate);\nexport const collect = (requestOptions) => doCollectRequest(requestOptions).then(validate);\nexport const cancel = (requestOptions) => doCancelRequest(requestOptions).then(() => true);\n", "export class BankIdAuthRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.method) {\n throw new Error(\"Missing auth method\");\n }\n }\n withMethod(method) {\n this.properties.method = method;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import { AuthMethod, } from \"./types\";\nexport class BankIdAuthResponse {\n constructor(response, method) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n if (!method) {\n throw new Error(\"Method can not be falsy\");\n }\n this.orderRef = response.orderRef;\n this.qrCodeAsBase64 = response.qrCodeAsBase64;\n this.autoLaunchUrl = response.autoLaunchUrl;\n this.method = method;\n }\n getMethod() {\n return this.method;\n }\n isQrCode() {\n return this.method === AuthMethod.QrCode;\n }\n isSameDevice() {\n return this.method === AuthMethod.SameDevice;\n }\n getOrderRef() {\n return this.orderRef;\n }\n getQrCode() {\n if (!this.isQrCode()) {\n throw new Error(\"Not qr code response\");\n }\n return this.qrCodeAsBase64;\n }\n getAutoLaunchUrl() {\n if (!this.isSameDevice()) {\n throw new Error(\"Not same device response\");\n }\n return this.autoLaunchUrl;\n }\n}\n", "export class BankIdCollectRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.orderRef) {\n throw new Error(\"Missing order ref\");\n }\n }\n withOrderRef(orderRef) {\n this.properties.orderRef = orderRef;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "const outstandingTransaction = () => \"Starta BankID-appen.\";\nconst noClient = () => \"Starta BankID-appen.\";\nconst started = () => \"S\u00F6ker efter BankID, det kan ta en liten stund... Om det har g\u00E5tt n\u00E5gra sekunder och inget BankID har hittats har du sannolikt inget BankID som g\u00E5r att anv\u00E4nda f\u00F6r den aktuella identifieringen/underskriften i den h\u00E4r enheten. Om du inte har n\u00E5got BankID kan du h\u00E4mta ett hos din internetbank.\";\nconst userSign = () => \"Skriv in din s\u00E4kerhetskod i BankID-appen och v\u00E4lj Legitimera eller Skriv under.\";\nconst expiredTransaction = () => \"BankID-appen svarar inte. Kontrollera att den \u00E4r startad och att du har internetanslutning. Om du inte har n\u00E5got giltigt BankID kan du h\u00E4mta ett hos din Bank. F\u00F6rs\u00F6k sedan igen.\";\nconst certificateErr = () => \"Det BankID du f\u00F6rs\u00F6ker anv\u00E4nda \u00E4r f\u00F6r gammalt eller sp\u00E4rrat. Anv\u00E4nd ett annat BankID eller h\u00E4mta ett nytt hos din internetbank.\";\nconst userCancel = () => \"\u00C5tg\u00E4rden avbruten.\";\nconst cancelled = () => \"\u00C5tg\u00E4rden avbruten. Fo\u0308rso\u0308k igen.\";\nconst startFailed = () => \"Starta BankID-appen.\";\nconst resolvers = {};\nresolvers[\"outstandingTransaction\"] = outstandingTransaction;\nresolvers[\"noClient\"] = noClient;\nresolvers[\"started\"] = started;\nresolvers[\"userSign\"] = userSign;\nresolvers[\"expiredTransaction\"] = expiredTransaction;\nresolvers[\"certificateErr\"] = certificateErr;\nresolvers[\"userCancel\"] = userCancel;\nresolvers[\"cancelled\"] = cancelled;\nresolvers[\"startFailed\"] = startFailed;\nexport default (hintCode) => {\n if (!hintCode) {\n return \"\";\n }\n const resolve = resolvers[hintCode];\n if (!resolve) {\n return \"\";\n }\n const message = resolve();\n return message;\n};\n", "import { AuthStatus, } from \"./types\";\nimport resolveMessage from \"./message-resolver\";\nexport class BankIdCollectResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n this.orderRef = response.orderRef;\n this.status = this.parseStatus(response.status);\n this.hintCode = response.hintCode;\n this.message = resolveMessage(response.hintCode);\n if (this.isCompleted() && !!response.completionData) {\n this.personalNumber = response.completionData.personalNumber;\n this.address = response.completionData.address;\n }\n }\n parseStatus(status) {\n switch (status) {\n case \"pending\":\n return AuthStatus.Pending;\n case \"complete\":\n return AuthStatus.Complete;\n case \"failed\":\n return AuthStatus.Failed;\n default:\n return AuthStatus.Unknown;\n }\n }\n getOrderRef() {\n return this.orderRef;\n }\n getStatus() {\n return this.status;\n }\n isPending() {\n return this.status === AuthStatus.Pending;\n }\n getHintCode() {\n return this.hintCode;\n }\n hasMessage() {\n return !!this.message;\n }\n getMessage() {\n return this.message;\n }\n shouldRenew() {\n return (this.hintCode === BankIdCollectResponse.START_FAILED_CODE ||\n this.hintCode === BankIdCollectResponse.USER_CANCEL_CODE);\n }\n isCompleted() {\n return this.status === AuthStatus.Complete;\n }\n getPersonalNumber() {\n return this.personalNumber;\n }\n getAddress() {\n return this.address;\n }\n}\nBankIdCollectResponse.START_FAILED_CODE = \"startFailed\";\nBankIdCollectResponse.USER_CANCEL_CODE = \"userCancel\";\n", "export class BankIdCancelRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.orderRef) {\n throw new Error(\"Missing order ref\");\n }\n }\n withOrderRef(orderRef) {\n this.properties.orderRef = orderRef;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import * as api from \"../http/apis/bankid\";\nimport { BankIdAuthRequestBuilder } from \"./bankid-auth-request-builder\";\nimport { BankIdAuthResponse } from \"./bankid-auth-response\";\nimport { BankIdCollectRequestBuilder } from \"./bankid-collect-request-builder\";\nimport { BankIdCollectResponse } from \"./bankid-collect-response\";\nimport { BankIdCancelRequestBuilder } from \"./bankid-cancel-request-builder\";\nexport const newAuthRequest = () => new BankIdAuthRequestBuilder();\nexport const newCollectRequest = () => new BankIdCollectRequestBuilder();\nexport const newCancelRequest = () => new BankIdCancelRequestBuilder();\nexport const auth = (request) => {\n BankIdAuthRequestBuilder.validate(request);\n return api\n .auth(request)\n .then((response) => new BankIdAuthResponse(response, request.method));\n};\nexport const collect = (request) => {\n BankIdCollectRequestBuilder.validate(request);\n return api\n .collect(request)\n .then((response) => new BankIdCollectResponse(response));\n};\nexport const cancel = (request) => {\n BankIdCancelRequestBuilder.validate(request);\n return api.cancel(request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestCaseStatus = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestNewCase = (inquery) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .content(inquery)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import { AuthMethod } from \"../../../bankid/types\";\nimport * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nconst getRoute = (method) => {\n switch (method) {\n case AuthMethod.QrCode:\n return \"/qr-code\";\n case AuthMethod.SameDevice:\n return \"/same-device\";\n default:\n throw new Error(\"BankId auth method not supported\");\n }\n};\nexport const getUrl = (requestOptions) => {\n const route = getRoute(requestOptions.method);\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/sign/${requestOptions.caseId}${route}`;\n return url;\n};\nexport const requestSignCase = (requestOptions) => {\n const url = getUrl(requestOptions);\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestCancelSignCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/sign/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"delete\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestDeclineCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"delete\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestAcceptCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}/accept`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"put\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import { requestCaseStatus } from \"./credit-assessment/get-status\";\nimport { requestNewCase } from \"./credit-assessment/new-case\";\nimport { requestSignCase } from \"./credit-assessment/sign\";\nimport { requestCancelSignCase } from \"./credit-assessment/cancel-sign\";\nimport { requestDeclineCase } from \"./credit-assessment/decline\";\nimport { requestAcceptCase } from \"./credit-assessment/accept\";\nconst validate = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const newCase = (inquiry) => requestNewCase(inquiry).then(validate);\nexport const getStatus = (caseId) => requestCaseStatus(caseId).then(validate);\nexport const signCase = (request) => requestSignCase(request).then(validate);\nexport const cancelSigning = (caseId) => requestCancelSignCase(caseId).then(() => true);\nexport const decline = (caseId) => requestDeclineCase(caseId).then(() => true);\nexport const accept = (caseId) => requestAcceptCase(caseId).then(() => true);\n", "import { AuthMethod } from \"../bankid/types\";\nexport class CreditAssessmentSignResponse {\n constructor(response, request) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n if (!request.method) {\n throw new Error(\"Method can not be falsy\");\n }\n this.qrCodeAsBase64 = response.qrCodeAsBase64;\n this.autoLaunchUrl = response.autoLaunchUrl;\n this.method = request.method;\n this.caseId = request.caseId;\n }\n getMethod() {\n return this.method;\n }\n isQrCode() {\n return this.method === AuthMethod.QrCode;\n }\n isSameDevice() {\n return this.method === AuthMethod.SameDevice;\n }\n getQrCode() {\n if (!this.isQrCode()) {\n throw new Error(\"Not qr code response\");\n }\n return this.qrCodeAsBase64;\n }\n getAutoLaunchUrl() {\n if (!this.isSameDevice()) {\n throw new Error(\"Not same device response\");\n }\n return this.autoLaunchUrl;\n }\n getCaseId() {\n return this.caseId;\n }\n}\n", "export var MaritalStatus;\n(function (MaritalStatus) {\n MaritalStatus[\"Married\"] = \"married\";\n MaritalStatus[\"Single\"] = \"single\";\n})(MaritalStatus || (MaritalStatus = {}));\nexport var Employment;\n(function (Employment) {\n Employment[\"Other\"] = \"other\";\n Employment[\"Retired\"] = \"retired\";\n Employment[\"FullTimeEmployed\"] = \"fullTimeEmployed\";\n Employment[\"Student\"] = \"student\";\n Employment[\"TemporarilyEmployed\"] = \"temporarilyEmployed\";\n Employment[\"SelfEmployed\"] = \"selfEmployed\";\n})(Employment || (Employment = {}));\nexport var CreditAssessmentStatus;\n(function (CreditAssessmentStatus) {\n CreditAssessmentStatus[\"Received\"] = \"received\";\n CreditAssessmentStatus[\"SigningInitiated\"] = \"signingInitiated\";\n CreditAssessmentStatus[\"SigningFailed\"] = \"signingFailed\";\n CreditAssessmentStatus[\"Signed\"] = \"signed\";\n CreditAssessmentStatus[\"ScoringInitiated\"] = \"scoringInitiated\";\n CreditAssessmentStatus[\"Scored\"] = \"scored\";\n CreditAssessmentStatus[\"NotScored\"] = \"notScored\";\n CreditAssessmentStatus[\"Accepted\"] = \"accepted\";\n CreditAssessmentStatus[\"Declined\"] = \"declined\";\n CreditAssessmentStatus[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentStatus || (CreditAssessmentStatus = {}));\nexport var CreditAssessmentDecision;\n(function (CreditAssessmentDecision) {\n CreditAssessmentDecision[\"Approved\"] = \"approved\";\n CreditAssessmentDecision[\"Rejected\"] = \"rejected\";\n CreditAssessmentDecision[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentDecision || (CreditAssessmentDecision = {}));\nexport var CreditAssessmentRecommendation;\n(function (CreditAssessmentRecommendation) {\n CreditAssessmentRecommendation[\"Approve\"] = \"approve\";\n CreditAssessmentRecommendation[\"AssessManually\"] = \"assessManually\";\n CreditAssessmentRecommendation[\"Reject\"] = \"reject\";\n CreditAssessmentRecommendation[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentRecommendation || (CreditAssessmentRecommendation = {}));\n", "import { CreditAssessmentStatus } from \"./types\";\nconst asStatus = (statusString) => {\n switch (statusString) {\n case \"received\":\n return CreditAssessmentStatus.Received;\n case \"signingInitiated\":\n return CreditAssessmentStatus.SigningInitiated;\n case \"signingFailed\":\n return CreditAssessmentStatus.SigningFailed;\n case \"signed\":\n return CreditAssessmentStatus.Signed;\n case \"scoringInitiated\":\n return CreditAssessmentStatus.ScoringInitiated;\n case \"scored\":\n return CreditAssessmentStatus.Scored;\n case \"notScored\":\n return CreditAssessmentStatus.NotScored;\n case \"accepted\":\n return CreditAssessmentStatus.Accepted;\n case \"declined\":\n return CreditAssessmentStatus.Declined;\n default:\n return CreditAssessmentStatus.Unknown;\n }\n};\nexport default asStatus;\n", "import { CreditAssessmentDecision } from \"./types\";\nconst asDecision = (text) => {\n switch (text) {\n case \"approved\":\n return CreditAssessmentDecision.Approved;\n case \"rejected\":\n return CreditAssessmentDecision.Rejected;\n default:\n return CreditAssessmentDecision.Unknown;\n }\n};\nexport default asDecision;\n", "import { CreditAssessmentRecommendation } from \"./types\";\nconst asRecommendation = (text) => {\n switch (text) {\n case \"approve\":\n return CreditAssessmentRecommendation.Approve;\n case \"assessManually\":\n return CreditAssessmentRecommendation.AssessManually;\n case \"reject\":\n return CreditAssessmentRecommendation.Reject;\n default:\n return CreditAssessmentRecommendation.Unknown;\n }\n};\nexport default asRecommendation;\n", "import { CreditAssessmentStatus, } from \"./types\";\nimport asStatus from \"./convert-status\";\nimport resolveMessage from \"../bankid/message-resolver\";\nimport asDecision from \"./convert-decision\";\nimport asRecommendation from \"./convert-recommendation\";\nexport class CreditAssessmentStatusResponse {\n constructor(response) {\n this.hintCode = response.bankIdHintCode;\n this.vfScoreCaseId = response.vfScoreCaseId;\n this.signingMessage = resolveMessage(response.bankIdHintCode);\n this.status = asStatus(response.status);\n this.decision = asDecision(response.decision);\n this.recommendation = asRecommendation(response.recommendation);\n }\n getSigningMessage() {\n return this.signingMessage;\n }\n shouldRenewSigning() {\n const hasFailedSigning = this.status === CreditAssessmentStatus.SigningFailed;\n const isRenewHintCode = this.hintCode ===\n CreditAssessmentStatusResponse.START_FAILED_CODE ||\n this.hintCode === CreditAssessmentStatusResponse.USER_CANCEL_CODE;\n return hasFailedSigning && isRenewHintCode;\n }\n isSigned() {\n return (this.status === CreditAssessmentStatus.Signed ||\n this.status === CreditAssessmentStatus.ScoringInitiated ||\n this.status === CreditAssessmentStatus.Scored ||\n this.status === CreditAssessmentStatus.NotScored ||\n this.status === CreditAssessmentStatus.Accepted);\n }\n getAddress() {\n throw new Error(\"Method not implemented.\");\n }\n getStatus() {\n return this.status;\n }\n hasPendingSigning() {\n return this.status === CreditAssessmentStatus.SigningInitiated;\n }\n getHintCode() {\n return this.hintCode;\n }\n hasPendingScoring() {\n return (this.status === CreditAssessmentStatus.Signed ||\n this.status === CreditAssessmentStatus.ScoringInitiated);\n }\n isScored() {\n return (this.status === CreditAssessmentStatus.Scored ||\n this.status === CreditAssessmentStatus.Accepted);\n }\n hasScoringError() {\n return this.status === CreditAssessmentStatus.NotScored;\n }\n getScoringId() {\n return this.vfScoreCaseId;\n }\n getRecommendation() {\n return this.recommendation;\n }\n getDecision() {\n return this.decision;\n }\n isAccepted() {\n return this.status === CreditAssessmentStatus.Accepted;\n }\n}\nCreditAssessmentStatusResponse.START_FAILED_CODE = \"startFailed\";\nCreditAssessmentStatusResponse.USER_CANCEL_CODE = \"userCancel\";\n", "export const validateHouseholdEconomy = (householdEconomy) => {\n if (!householdEconomy) {\n throw new TypeError(\"Household economy can not be falsy\");\n }\n if (!householdEconomy.employment) {\n throw new TypeError(\"Household economy must have employment\");\n }\n if (!householdEconomy.maritalStatus) {\n throw new TypeError(\"Household economy must have marital status\");\n }\n if (!householdEconomy.income && householdEconomy.income !== 0) {\n throw new TypeError(\"Household economy must have income\");\n }\n if (!householdEconomy.householdChildren &&\n householdEconomy.householdChildren !== 0) {\n throw new TypeError(\"Household economy must have household children\");\n }\n if (!householdEconomy.householdDebt &&\n householdEconomy.householdDebt !== 0) {\n throw new TypeError(\"Household economy must have household debt\");\n }\n if (!householdEconomy.householdHousingCost &&\n householdEconomy.householdHousingCost !== 0) {\n throw new TypeError(\"Household economy must have household housing cost\");\n }\n if (!householdEconomy.householdIncome &&\n householdEconomy.householdIncome !== 0) {\n throw new TypeError(\"Household economy must have household income\");\n }\n};\nexport const validateLoan = (loan) => {\n if (!loan) {\n throw new TypeError(\"Loan can not be falsy\");\n }\n if (!loan.financialProductId) {\n throw new TypeError(\"Loan must have financial product id\");\n }\n if (!loan.credit && loan.credit !== 0) {\n throw new TypeError(\"Loan must have credit\");\n }\n if (!loan.downPayment && loan.downPayment !== 0) {\n throw new TypeError(\"Loan must have down payment\");\n }\n if (!loan.interestRate && loan.interestRate !== 0) {\n throw new TypeError(\"Loan must have interest rate\");\n }\n if (!loan.monthlyCost && loan.monthlyCost !== 0) {\n throw new TypeError(\"Loan must have monthly cost\");\n }\n if (!loan.price && loan.price !== 0) {\n throw new TypeError(\"Loan must have price\");\n }\n};\nexport const validateCustomer = (customer) => {\n if (!customer) {\n throw new TypeError(\"Customer can not be falsy\");\n }\n if (!customer.socialId) {\n throw new TypeError(\"Customer must have social id\");\n }\n if (!customer.email) {\n throw new TypeError(\"Customer must have email\");\n }\n if (!customer.phone) {\n throw new TypeError(\"Customer must have phone\");\n }\n};\nexport const validateInquiry = (inquiry) => {\n if (!inquiry) {\n throw new TypeError(\"Inquiry can not be falsy\");\n }\n if (!inquiry.externalId) {\n throw new TypeError(\"Inquiry must have external id\");\n }\n validateHouseholdEconomy(inquiry.householdEconomy);\n validateLoan(inquiry.loan);\n validateCustomer(inquiry.customer);\n};\n", "import * as api from \"../http/apis/credit-assessment\";\nimport { CreditAssessmentSignResponse } from \"./sign-response\";\nimport { CreditAssessmentStatusResponse } from \"./status-response\";\nimport { validateInquiry } from \"./validator\";\nexport const newCase = (request) => {\n validateInquiry(request);\n return api.newCase(request);\n};\nexport const getStatus = (caseId) => api\n .getStatus(caseId)\n .then((response) => new CreditAssessmentStatusResponse(response));\nexport const signCase = (request) => api\n .signCase(request)\n .then((response) => new CreditAssessmentSignResponse(response, request));\nexport const cancelSigning = (caseId) => api.cancelSigning(caseId);\nexport const accept = (caseId) => api.accept(caseId);\nexport const decline = (caseId) => api.decline(caseId);\n", "export var DrivingDistance;\n(function (DrivingDistance) {\n DrivingDistance[\"Between0And1000\"] = \"Between0And1000\";\n DrivingDistance[\"Between1000And1500\"] = \"Between1000And1500\";\n DrivingDistance[\"Between1500And2000\"] = \"Between1500And2000\";\n DrivingDistance[\"Between2000And2500\"] = \"Between2000And2500\";\n DrivingDistance[\"Over2500\"] = \"Over2500\";\n})(DrivingDistance || (DrivingDistance = {}));\n", "export var DeliveryType;\n(function (DeliveryType) {\n DeliveryType[\"None\"] = \"None\";\n DeliveryType[\"Pickup\"] = \"Pickup\";\n DeliveryType[\"Delivery\"] = \"Delivery\";\n})(DeliveryType || (DeliveryType = {}));\nexport var PaymentType;\n(function (PaymentType) {\n PaymentType[\"Cash\"] = \"Cash\";\n PaymentType[\"Lease\"] = \"Lease\";\n PaymentType[\"Loan\"] = \"Loan\";\n})(PaymentType || (PaymentType = {}));\n", "export var VehicleCondition;\n(function (VehicleCondition) {\n VehicleCondition[\"VeryGood\"] = \"VeryGood\";\n VehicleCondition[\"Good\"] = \"Good\";\n VehicleCondition[\"Ok\"] = \"Ok\";\n})(VehicleCondition || (VehicleCondition = {}));\n", "import React, { useEffect, useCallback, useMemo } from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Result from '../../components/Result/index';\nimport Filter from '../../components/Filter/index';\nimport Grid from '../../components/Grid/index';\nimport SearchTerm from '../../components/SearchTerm/index';\nimport { PortalElement, PortalNamespace } from '../../components/Portal/index';\nimport SearchFilter from '../../components/SearchFilter/index';\nimport Snackbar from '../../components/Snackbar/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport PubSub from '../../utils/pubsub/pubsub';\n\nexport interface WaykeSearchProps {\n filterList?: SearchFilterTypes[];\n initialQueryParams?: URLSearchParams | string;\n removeSearchBar?: boolean;\n removeFilterOptions?: boolean;\n placeholderImage?: string;\n hashRoute?: boolean;\n pathRoute?: string;\n modifyDocumentTitleSearch?: string;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearch = ({\n filterList,\n initialQueryParams,\n hashRoute,\n pathRoute,\n removeSearchBar,\n placeholderImage,\n removeFilterOptions,\n modifyDocumentTitleSearch,\n onClickSearchItem,\n}: WaykeSearchProps) => {\n const { error, documents, queryFilter, onFilterUpdate, onInitialize } = useSearch();\n\n useEffect(() => {\n if (modifyDocumentTitleSearch) {\n document.title = modifyDocumentTitleSearch;\n }\n onInitialize(\n typeof initialQueryParams === 'string'\n ? new URLSearchParams(initialQueryParams)\n : initialQueryParams\n );\n }, []);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n const onClearQuery = useCallback(() => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n nextQuery.delete('query');\n onFilterUpdate(nextQuery.toString());\n }, [queryFilter.searchParams]);\n\n const searchQuery = useMemo(() => queryFilter.searchParams.get('query'), [documents]);\n\n return (\n <>\n <Page>\n {!removeSearchBar && (\n <PageSection>\n <Container>\n <SearchFilter />\n </Container>\n </PageSection>\n )}\n {searchQuery && (\n <PageSection>\n <Container>\n <SearchTerm onClear={onClearQuery}>{searchQuery}</SearchTerm>\n </Container>\n </PageSection>\n )}\n {!removeFilterOptions && (\n <PageSection>\n <Container>\n <Filter filterList={filterList} />\n </Container>\n </PageSection>\n )}\n <PageSection accent fillSpace className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n <Result>\n <>\n {error && (\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n )}\n {!error && documents && documents.length > 0 && (\n <Grid\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickItem={onItemClicked}\n documents={documents}\n placeholderImage={placeholderImage}\n />\n )}\n {!error && documents && documents.length === 0 && (\n <Snackbar severity=\"warning\" icon heading=\"Inga resultat\">\n Det finns inga resultat som matchar din s\u00F6kning.\n </Snackbar>\n )}\n </>\n </Result>\n </Container>\n </PageSection>\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearch;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Container = ({ children }: Props) => <Wrapper>{children}</Wrapper>;\n\nexport default Container;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n width: 100%;\n max-width: ${(props) => props.theme.distances.containerMaxWidth};\n margin: 0 auto;\n padding: 0 ${size(3)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: 0 ${size(2)};\n }\n`;\n", "const _colors = {\n black: '#000',\n white: '#fff',\n gray: '#ddd',\n grayLight: '#f8f8f8',\n grayLightTransparent: 'rgba(248, 248, 248, 0)',\n grayLightDarker: '#ebebeb',\n grayDark: '#717171',\n blue: '#1d61ca',\n ui: {\n greenLight: '#cdf5c8',\n green: '#2b8747',\n redLight: '#ffd0d0',\n red: '#c71f1f',\n yellowLight: '#fff4c7',\n blueLight: '#daf7fc',\n },\n};\n\nconst theme = {\n color: {\n bg: _colors.white,\n link: _colors.blue,\n accent: _colors.grayLight,\n accentTransparent: _colors.grayLightTransparent,\n accentDark: _colors.grayLightDarker,\n border: _colors.gray,\n textDark: _colors.black,\n textDarkLighten: _colors.grayDark,\n textLight: _colors.white,\n hoverOverlay: 'rgba(0, 0, 0, 0.04)',\n disabledBg: _colors.gray,\n disabledText: _colors.grayDark,\n placeholder: _colors.grayDark,\n ui: {\n positiveLight: _colors.ui.greenLight,\n positive: _colors.ui.green,\n neutralLight: _colors.ui.yellowLight,\n negativeLight: _colors.ui.redLight,\n negative: _colors.ui.red,\n infoLight: _colors.ui.blueLight,\n },\n },\n breakpoint: {\n Sm: '@media (min-width: 600px)',\n LtSm: '@media (max-width: 599px)',\n Md: '@media (min-width: 900px)',\n LtMd: '@media (max-width: 899px)',\n Lg: '@media (min-width: 1200px)',\n LtLg: '@media (max-width: 1199px)',\n },\n distances: {\n baseUnit: '8px',\n inputHeight: '48px',\n containerMaxWidth: '1312px',\n },\n};\n\nexport type Theme = typeof theme;\nexport default theme;\n", "import theme from './theme';\n\nexport const size = (multiplier = 1) => {\n const baseUnit = parseFloat(theme.distances.baseUnit);\n return `${multiplier * baseUnit}px`;\n};\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Page = styled.div``;\n\ntype PageSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n accent?: boolean;\n large?: boolean;\n fillSpace?: boolean;\n};\n\nexport const PageSection = styled.section<PageSectionProps>`\n margin-bottom: ${size(4)};\n\n ${({ accent }: { accent?: boolean }) =>\n accent &&\n css`\n padding: ${size(4)} 0;\n background-color: ${(props) => props.theme.color.accent};\n margin-bottom: 0;\n `}\n\n ${({ large }: { large?: boolean }) =>\n large &&\n css`\n margin-bottom: ${size(8)};\n `}\n\n ${({ accent, large }) =>\n accent &&\n large &&\n css`\n padding: ${size(8)} 0;\n margin-bottom: 0;\n `}\n\n ${({ fillSpace }: { fillSpace?: boolean }) =>\n fillSpace &&\n css`\n flex: 1 1 auto;\n `}\n`;\n", "import React, { useCallback } from 'react';\n\nimport {\n Wrapper,\n Header,\n HeaderCount,\n HeaderSort,\n Body,\n Footer,\n FooterProgress,\n FooterAction,\n ResultCount,\n} from './wrapper';\nimport ProgressBar from '../ProgressBar/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useSearch from '../../State/Search/useSearch';\nimport SortSelect, { OptionProps } from '../SortSelect/index';\nimport { getTranslatedSortOptionDisplayName } from '../../utils/sortOptions';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Result = ({ children }: Props) => {\n const { loading, response, documents, queryFilter, onLoadMore, onFilterUpdate } = useSearch();\n\n const onSortOptionChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => onFilterUpdate(e.currentTarget.value),\n []\n );\n\n const numberOfDocuments = documents?.length || 0;\n const numberOfHits = response?.documentList.numberOfHits || 0;\n const useSkeletons = !!queryFilter?.concatResult;\n\n const selectedSortOption = response?.documentList.sortOptions.find((x) => x.selected)?.query;\n const sortOptions = response?.documentList.sortOptions\n .filter((x) => x.displayName !== 'relevance')\n .map(\n (so): OptionProps => ({\n value: so.query,\n displayName: getTranslatedSortOptionDisplayName(so.displayName),\n })\n );\n\n if (loading && !useSkeletons) {\n return <Loader />;\n }\n return (\n <Wrapper>\n <Header>\n <HeaderCount>\n <ResultCount>{`${numberSeparator(numberOfHits)} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ResultCount>\n </HeaderCount>\n {sortOptions && selectedSortOption && (\n <HeaderSort>\n <SortSelect\n value={selectedSortOption}\n options={sortOptions}\n onChange={onSortOptionChange}\n />\n </HeaderSort>\n )}\n </Header>\n <Body>{children}</Body>\n <Footer>\n <FooterProgress>\n <ProgressBar unit=\"bilar\" valueCurrent={numberOfDocuments} valueMax={numberOfHits} />\n </FooterProgress>\n {numberOfDocuments !== numberOfHits && (\n <FooterAction>\n <ButtonSecondary\n disabled={loading}\n onClick={onLoadMore}\n title=\"Visa fler\"\n aria-label=\"Visa fler\"\n >\n <ButtonContent>Visa fler</ButtonContent>\n </ButtonSecondary>\n </FooterAction>\n )}\n </Footer>\n </Wrapper>\n );\n};\n\nexport default Result;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.header`\n display: flex;\n margin-bottom: ${size(4)};\n`;\n\nexport const HeaderCount = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const HeaderSort = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Body = styled.div``;\n\nexport const Footer = styled.footer`\n margin-top: ${size(8)};\n text-align: center;\n`;\n\nexport const FooterProgress = styled.div`\n max-width: 175px;\n margin: 0 auto;\n`;\n\nexport const FooterAction = styled.div`\n margin-top: ${size(3)};\n`;\n\nexport const ResultCount = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Description, Bar, BarActive } from './wrapper';\n\ninterface Props {\n unit: string;\n valueCurrent: number;\n valueMax: number;\n}\n\nconst ProgressBar = ({ unit, valueCurrent, valueMax }: Props) => {\n const barWidth = (valueCurrent / valueMax) * 100;\n\n return (\n <Wrapper>\n <Description>\n Visar {valueCurrent.toString()} av {valueMax.toString()} {unit}\n </Description>\n <Bar>\n <BarActive\n style={{ width: `${barWidth}%` }}\n aria-valuenow={valueCurrent}\n aria-valuemin={0}\n aria-valuemax={valueMax}\n />\n </Bar>\n </Wrapper>\n );\n};\n\nexport default ProgressBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n text-align: center;\n`;\n\nexport const Description = styled.div`\n margin-bottom: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n width: 100%;\n height: 2px;\n background-color: ${(props) => props.theme.color.accentDark};\n`;\n\nexport const BarActive = styled.div.attrs(() => ({\n role: 'progressbar',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background-color: ${(props) => props.theme.color.textDark};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { UtilityTextRight } from '../Utility/index';\n\nexport const ButtonReset = styled.button.attrs(() => ({\n type: 'button',\n}))`\n display: inline-block;\n vertical-align: middle;\n padding: 0;\n margin: 0;\n background-color: transparent;\n border: 0;\n border-radius: 0;\n font-family: sans-serif;\n font-weight: 400;\n font-size: 1em;\n color: currentColor;\n line-height: 1.2;\n text-align: center;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\ntype ButtonResetProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n fullWidth?: boolean;\n inputHeight?: boolean;\n};\n\nconst ButtonBase = styled(ButtonReset)<ButtonResetProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${size(1.75)} ${size(6)};\n border-radius: 3px;\n font-size: 1rem;\n line-height: 1.2;\n text-decoration: none;\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n &[disabled] {\n background-color: ${(props) => props.theme.color.disabledBg};\n border-color: ${(props) => props.theme.color.disabledBg};\n color: ${(props) => props.theme.color.disabledText};\n }\n\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n display: flex;\n width: 100%;\n `}\n\n ${({ inputHeight }) =>\n inputHeight &&\n css`\n height: ${(props) => props.theme.distances.inputHeight};\n `}\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(1.75)} ${size(2.5)};\n font-size: 0.875rem;\n }\n`;\n\nexport const ButtonPrimary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg wayke__font--bold',\n}))``;\n\nexport const ButtonSecondary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--secondary-bg wayke__font--bold',\n}))`\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const ButtonContent = styled.div`\n position: relative;\n z-index: 1;\n\n & + & {\n margin-left: ${size(0.5)};\n }\n`;\n\nexport const ButtonClear = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n position: relative;\n font-size: 0.875rem;\n padding: ${size(1.5)};\n margin: ${size(-1.5)};\n text-align: left;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n ${UtilityTextRight} & {\n text-align: right;\n }\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\ntype ButtonInlineProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n inline?: boolean;\n as?: string;\n};\n\nexport const ButtonInline = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n ${({ inline }) =>\n inline &&\n css`\n display: inline;\n `}\n`;\n\nexport const ButtonInlineBold = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nexport const ButtonInlineLight = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: none;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDarkLighten};\n }\n`;\n\nexport const ButtonInlinePrimary = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n", "import styled from 'styled-components';\n\nexport const UtilityTextRight = styled.div`\n text-align: right;\n`;\n\nexport const UtilityFontSizeSmall = styled.span`\n font-size: 0.875rem;\n`;\n\nexport const UtilityTextPrimary = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))``;\n\nexport const UtilityTextBold = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n", "import * as React from 'react';\n\nimport { Spinner, Wrapper } from './wrapper';\nimport { SrOnly } from '../SrOnly/index';\n\ninterface Props {\n inline?: boolean;\n center?: boolean;\n}\n\nconst Loader = ({ inline, center }: Props) => (\n <Wrapper inline={inline} center={center}>\n <Spinner aria-hidden=\"true\" />\n <SrOnly>Laddar...</SrOnly>\n </Wrapper>\n);\n\nexport default Loader;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { rotate } from '../../layout/keyframes';\n\nexport const Spinner = styled.div`\n display: block;\n margin: 0 auto;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ${rotate} 600ms linear infinite;\n`;\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n inline?: boolean;\n center?: boolean;\n};\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n role: 'status',\n}))<WrapperProps>`\n ${({ inline }) =>\n inline &&\n css`\n display: inline-block;\n vertical-align: middle;\n color: currentColor !important;\n\n ${Spinner} {\n width: 1em;\n height: 1em;\n }\n `}\n\n ${({ center }) =>\n center &&\n css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n `}\n`;\n", "import { keyframes } from 'styled-components';\n\nexport const noTransform = keyframes`\n to {\n transform: none;\n }\n`;\n\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n`;\n\nexport const rotate = keyframes`\n to {\n transform: rotate(360deg);\n }\n`;\n", "import styled from 'styled-components';\n\n// Adds element only visible to screen readers\nexport const SrOnly = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n", "import { format as formatFns } from 'date-fns';\nimport { sv } from 'date-fns/locale';\n\n// Filter function to remove any null/undefined values.\nexport const notEmpty = <TValue>(value: TValue | null | undefined): value is TValue =>\n value !== null && value !== undefined;\n\nexport const numberSeparator = (value: number, n = 0, x = 3, s = ' ', c = '.') => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const re = `\\\\d(?=(\\\\d{${x || 3}})+${n > 0 ? '\\\\D' : '$'})`;\n const num = value.toFixed(Math.max(0, ~~n));\n\n return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), `$&${s || ','}`);\n};\n\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n} from './constants';\n\nexport const FacetIdToTitle = (f: string) => {\n switch (f) {\n case MANUFACTURER:\n return 'Tillverkare';\n case MODEL_SERIES:\n return 'Modell';\n case FUEL_TYPE:\n return 'Drivmedel';\n case GEARBOX_TYPE:\n return 'V\u00E4xell\u00E5da';\n case SEGMENT:\n return 'Segment';\n case DRIVING_WHEEL:\n return 'Drivhjul';\n case ENVIRONMENT_CLASS:\n return 'Milj\u00F6klass';\n case COLOR:\n return 'F\u00E4rg';\n case PRICE:\n return 'Pris';\n case BRANCH:\n return 'Anl\u00E4ggning';\n case MILEAGE:\n return 'Miltal';\n case MODEL_YEAR:\n return 'Modell\u00E5r';\n case LEASING_PRICE:\n return 'Privatleasing';\n default:\n return f;\n }\n};\n\nexport const dateTimeFormat = {\n YearMonth: 1,\n DayMonth: 2,\n\n format: (value: string | Date, format: number) => {\n const date = new Date(value);\n switch (format) {\n case dateTimeFormat.YearMonth:\n return formatFns(date, 'MMMM yyyy', { locale: sv });\n case dateTimeFormat.DayMonth:\n return formatFns(date, 'd MMMM yyyy', { locale: sv });\n default:\n return formatFns(date, 'yyyy-MM-dd HH:mm', { locale: sv });\n }\n },\n};\n", "export const MANUFACTURER = 'manufacturer';\nexport const MODEL_SERIES = 'modelSeries';\nexport const FUEL_TYPE = 'fuelType';\nexport const GEARBOX_TYPE = 'gearboxType';\nexport const BRANCH = 'branch';\nexport const COLOR = 'color';\nexport const ENVIRONMENT_CLASS = 'environmentClass';\nexport const SEGMENT = 'properties.segment';\nexport const DRIVING_WHEEL = 'drivingWheel';\nexport const PRICE = 'price';\nexport const MILEAGE = 'mileage';\nexport const MODEL_YEAR = 'modelYear';\nexport const LEASING_PRICE = 'leasingPrice';\n\nexport const COLOR_WHITE = { displayName: 'Vit', hex: '#ffffff' };\nexport const COLOR_BLACK = { displayName: 'Svart', hex: '#000000' };\nexport const COLOR_GRAY = { displayName: 'Gr\u00E5', hex: '#808080' };\nexport const COLOR_SILVER = { displayName: 'Silver', hex: '#c0c0c0' };\nexport const COLOR_BLUE = { displayName: 'Bl\u00E5', hex: '#0000ff' };\nexport const COLOR_RED = { displayName: 'R\u00F6d', hex: '#ff0000' };\nexport const COLOR_BROWN = { displayName: 'Brun', hex: '#a52a2a' };\nexport const COLOR_GREEN = { displayName: 'Gr\u00F6n', hex: '#008000' };\nexport const COLOR_ORANGE = { displayName: 'Orange', hex: '#ffa500' };\nexport const COLOR_YELLOW = { displayName: 'Gul', hex: '#ffff00' };\nexport const COLOR_PURPLE = { displayName: 'Lila', hex: '#800080' };\nexport const COLOR_BEIGE = { displayName: 'Beige', hex: '#f5f5dc' };\n\n/*\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'https://cdn.wayke.se/wui/images/placeholders/placeholder_product_card.jpg';\n*/\n\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'data:image/jpeg;base64,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';\n", "import { useContext } from 'react';\nimport { SearchContext } from './SearchContext';\n\nconst useSearch = () => useContext(SearchContext);\n\nexport default useSearch;\n", "import { createContext } from 'react';\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\n\nexport interface SearchContextProps {\n loading: boolean;\n response?: Search;\n error: boolean;\n documents?: Document[];\n initialFacets?: Facet[];\n queryFilter: QueryFilter;\n onFilterUpdate: (nextQuery: string) => void;\n onLoadMore: () => void;\n onInitialize: (initialQueryParams?: URLSearchParams) => void;\n}\n\nexport const SearchContext = createContext<SearchContextProps>({\n loading: false,\n error: false,\n response: undefined,\n documents: undefined,\n initialFacets: undefined,\n queryFilter: { searchParams: new URLSearchParams() },\n onFilterUpdate: (_) => {},\n onLoadMore: () => {},\n onInitialize: (_) => {},\n});\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\nimport { DrivingDistance } from '../../@types/codegen';\n\nexport interface OptionProps {\n value: number | string | DrivingDistance;\n displayName?: number | string;\n}\n\ninterface SortSelectProps {\n value: string | number;\n options: OptionProps[];\n unit?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst SortSelect = ({ value, options, onChange, unit }: SortSelectProps) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title=\"Sortering\" aria-label=\"Sortering\">\n {options.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default SortSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\n\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0;\n padding-right: calc(${iconSize} + ${size(1)});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\ntype SharedIconProps = {\n block?: boolean;\n};\n\ntype IconProps = React.SVGProps<SVGSVGElement> & SharedIconProps;\n\nconst Icon = styled.svg.attrs(() => ({\n xmlns: 'http://www.w3.org/2000/svg',\n}))<IconProps>`\n display: inline-block;\n vertical-align: middle;\n width: 1em;\n height: 1em;\n fill: currentColor;\n\n ${({ block }) =>\n block &&\n css`\n display: block;\n `}\n`;\n\ntype IconInfoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> &\n SharedIconProps;\n\nexport const IconInfo = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 24 24\" block={block}>\n <path d=\"M12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm0 2c5.5234 0 10 4.4766 10 10s-4.4766 10-10 10S2 17.5234 2 12 6.4766 2 12 2zm0 3.8125c-.1836 0-.336-.004-.5.0313-.164.0351-.3164.125-.4375.2187-.121.0938-.211.2227-.2813.375s-.0937.332-.0937.5625c0 .2266.0234.4063.0938.5625.0703.1563.1601.2813.2812.375.121.0938.2734.1484.4375.1875.164.039.3164.0625.5.0625.1797 0 .371-.0234.5313-.0625.1601-.039.2851-.0938.4062-.1875.121-.0938.211-.2188.2813-.375.0703-.1523.125-.336.125-.5625 0-.2305-.0547-.4102-.125-.5625-.0704-.1523-.1602-.2813-.2813-.375-.121-.0938-.246-.1836-.4063-.2188-.1601-.0351-.3515-.0312-.5312-.0312zm-1.2188 3.3438v8.9687h2.4375V9.1562z\" />\n </Icon>\n);\n\nexport const IconCancel = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.7 14.3c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3s-.5-.1-.7-.3L8 9.4l-6.3 6.3c-.2.2-.4.3-.7.3s-.5-.1-.7-.3c-.4-.4-.4-1 0-1.4L6.6 8 .3 1.7C-.1 1.3-.1.7.3.3c.4-.4 1-.4 1.4 0L8 6.6 14.3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L9.4 8l6.3 6.3z\" />\n </Icon>\n);\n\nexport const IconChevronDown = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M17.7 5L9 13.7.3 5l.7-.7 8 8 8-8 .7.7z\" />\n </Icon>\n);\n\nexport const IconChevronLeft = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M13 17.7L4.3 9 13 .3l.7.7-8 8 8 8-.7.7z\" />\n </Icon>\n);\n\nexport const IconChevronRight = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M5 .3L13.7 9 5 17.7l-.7-.7 8-8-8-8L5 .3z\" />\n </Icon>\n);\n\nexport const IconCheck = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.6 4.3l-9.3 9.4c-.5.5-1.4.5-1.9 0l-4-4c-.5-.5-.5-1.4 0-1.9s1.3-.5 1.9 0l3.1 3.1 8.4-8.5c.5-.5 1.4-.5 1.9 0s.4 1.3-.1 1.9z\" />\n </Icon>\n);\n\nexport const IconRadio = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M13 8c0 2.8-2.2 5-5 5s-5-2.2-5-5 2.2-5 5-5 5 2.2 5 5zm3 0c0 4.4-3.6 8-8 8s-8-3.6-8-8 3.6-8 8-8 8 3.6 8 8zm-1 0c0-3.9-3.1-7-7-7S1 4.1 1 8s3.1 7 7 7 7-3.1 7-7z\" />\n </Icon>\n);\n\nexport const IconSearch = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.5 15.3L11 10.8c1.2-1.1 2-2.7 2-4.5C13 2.9 10.2.1 6.8.1S.5 2.8.5 6.2s2.8 6.2 6.2 6.2c1.3 0 2.5-.4 3.5-1.1l4.6 4.6.7-.6zM1.4 6.2C1.4 3.3 3.8 1 6.7 1S12 3.3 12 6.2c0 1.5-.7 2.9-1.7 3.9l-.7.5c-.8.5-1.8.8-2.8.8-3 .1-5.4-2.3-5.4-5.2z\" />\n </Icon>\n);\n\nexport const IconExclamationCircle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M14.482 21.893c0-0.857 0.694-1.551 1.551-1.551s1.551 0.694 1.551 1.551c0 0.857-0.694 1.551-1.551 1.551s-1.551-0.694-1.551-1.551zM16.033 2.838c-7.271 0-13.187 5.916-13.187 13.187s5.916 13.187 13.187 13.187 13.187-5.916 13.187-13.187c0-7.271-5.916-13.187-13.187-13.187zM16.033 27.203c-6.163 0-11.178-5.015-11.178-11.178s5.015-11.178 11.178-11.178c6.164 0 11.178 5.015 11.178 11.178s-5.014 11.178-11.178 11.178zM16.033 8.308c-0.555 0-1.004 0.45-1.004 1.004v8.227c0 0.555 0.45 1.004 1.004 1.004s1.004-0.45 1.004-1.004v-8.227c0-0.555-0.45-1.004-1.004-1.004z\" />\n </Icon>\n);\n\nexport const IconExclamationTriangle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M15.951 19.663c-0.457 0-0.828-0.37-0.828-0.828v-4.357c0-0.457 0.37-0.828 0.828-0.828s0.828 0.37 0.828 0.828v4.357c0 0.457-0.371 0.828-0.828 0.828zM15.952 22.906c-0.305 0-0.606-0.126-0.821-0.341s-0.338-0.514-0.338-0.818 0.122-0.606 0.338-0.821c0.431-0.43 1.209-0.43 1.639 0 0.215 0.215 0.341 0.516 0.341 0.821s-0.126 0.603-0.341 0.818c-0.215 0.215-0.513 0.341-0.818 0.341zM27.049 27.070h-22.196c-0.352 0-0.677-0.186-0.855-0.489s-0.184-0.677-0.014-0.985l11.098-20.105c0.175-0.317 0.508-0.513 0.87-0.513s0.695 0.197 0.87 0.513l11.098 20.105c0.17 0.308 0.165 0.683-0.014 0.985s-0.504 0.489-0.856 0.489zM6.536 25.083h18.83l-9.415-17.056-9.415 17.056z\" />\n </Icon>\n);\n", "const SortOptionDisplayName = {\n PublishedAsc: 'published-asc',\n PublishedDesc: 'published-desc',\n PriceAsc: 'price-asc',\n Pricedesc: 'price-desc',\n ModelAsc: 'model-asc',\n Modeldesc: 'model-desc',\n};\n\ntype SortOptionDisplayName =\n | 'relevance'\n | 'published-asc'\n | 'published-desc'\n | 'price-asc'\n | 'price-desc'\n | 'model-asc'\n | 'model-desc';\n\nexport const getTranslatedSortOptionDisplayName = (str: string | SortOptionDisplayName): string => {\n switch (str) {\n case SortOptionDisplayName.PublishedAsc:\n return 'Publicerad \u00E4ldst';\n case SortOptionDisplayName.PublishedDesc:\n return 'Publicerad senast';\n case SortOptionDisplayName.PriceAsc:\n return 'Pris l\u00E4gst';\n case SortOptionDisplayName.Pricedesc:\n return 'Pris h\u00F6gst';\n case SortOptionDisplayName.ModelAsc:\n return '\u00C5rsmodell \u00E4ldst';\n case SortOptionDisplayName.Modeldesc:\n return '\u00C5rsmodell nyast';\n default:\n return str;\n }\n};\n", "import React, { useState, useCallback } from 'react';\n\nimport { List, Item, Action, Label, Indicator, IndicatorValue } from './wrapper';\nimport { Facet } from '../../@types/search';\nimport { FacetIdToTitle } from '../../utils/formats';\nimport { PRICE, MILEAGE, MODEL_YEAR } from '../../utils/constants';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes, SearchFilterNameTypes } from '../../@types/filter';\nimport FilterPanel from '../FilterPanel/index';\n\nconst isSelected = (f: Facet, searchParams: URLSearchParams) => {\n switch (f.id) {\n case PRICE:\n case MILEAGE:\n case MODEL_YEAR:\n return searchParams.has(`${f.id}.min`) || searchParams.has(`${f.id}.max`) ? 1 : 0;\n default:\n return f.filters.filter((filter) => filter.selected).length;\n }\n};\n\ninterface FilterProps {\n filterList?: SearchFilterTypes[];\n}\n\nconst Filter = ({ filterList }: FilterProps) => {\n const { queryFilter, initialFacets, loading, response, onFilterUpdate } = useSearch();\n\n const facets = response?.facets;\n\n const [facet, setFacet] = useState<Facet>();\n const onSelectFacet = useCallback((nextFacet: Facet) => setFacet(nextFacet), []);\n const onClose = useCallback(() => setFacet(undefined), []);\n\n if (!facets) {\n return null;\n }\n const filterNames = filterList ? filterList.map((x) => x.filterName) : undefined;\n\n const filteredFacets = facets\n ?.filter((x) => x.id !== 'segment')\n ?.filter((f) => (filterNames ? filterNames.includes(f.id as SearchFilterNameTypes) : true))\n .sort((a, b) =>\n filterNames\n ? filterNames.indexOf(a.id as SearchFilterNameTypes) -\n filterNames.indexOf(b.id as SearchFilterNameTypes)\n : 0\n )\n .map((x) => {\n const match = filterList?.find((y) => y.filterName === x.id);\n if (match?.displayName) {\n return {\n ...x,\n displayName: match.displayName,\n };\n }\n return {\n ...x,\n displayName: FacetIdToTitle(x.id),\n };\n });\n\n return (\n <>\n {initialFacets && facet && (\n <FilterPanel\n filterList={filterList}\n facet={facet}\n loading={loading}\n filteredFacets={filteredFacets}\n numberOfHits={response?.documentList.numberOfHits || 0}\n onFilterUpdate={onFilterUpdate}\n onClose={onClose}\n />\n )}\n <List>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => {\n const selected = isSelected(f, queryFilter.searchParams);\n return (\n <Item key={f.id}>\n <Action\n onClick={() => onSelectFacet(f)}\n title={f.displayName}\n aria-label={f.displayName}\n className={\n selected > 0\n ? 'wayke__theme wayke__color--primary-bg wayke__font--bold'\n : 'wayke__theme wayke__font--regular'\n }\n >\n <Label>{f.displayName}</Label>\n {selected > 0 && (\n <Indicator>\n <IndicatorValue>{selected}</IndicatorValue>\n </Indicator>\n )}\n </Action>\n </Item>\n );\n })}\n </List>\n </>\n );\n};\n\nexport default Filter;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n`;\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(3)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n line-height: 1;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Label = styled.div`\n z-index: 1;\n`;\n\nexport const Indicator = styled.div`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n background-color: currentColor;\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n color: white;\n mix-blend-mode: difference;\n`;\n", "import React, { useCallback } from 'react';\n\nimport { Facet } from '../../@types/search';\nimport Panel from '../Panel/index';\nimport { FooterAction, FooterActionItem } from '../Panel/wrapper';\nimport { ButtonSecondary, ButtonContent, ButtonPrimary } from '../Button/index';\nimport Accordion, { AccordionItem } from '../Accordion/index';\nimport { Repeat } from '../Repeat/index';\nimport FacetSelector from './faceSelector';\nimport { SearchFilterTypes } from '../../@types/filter';\n\nexport interface FilterProps {\n label: string;\n activeFilters?: number;\n}\n\nexport interface Props {\n facet?: Facet;\n loading: boolean;\n filteredFacets: Facet[];\n filterList?: SearchFilterTypes[];\n numberOfHits: number;\n onClose: () => void;\n onFilterUpdate: (nextQuery: string) => void;\n}\n\nconst FilterPanel = ({\n facet,\n filteredFacets,\n numberOfHits,\n loading,\n onFilterUpdate,\n onClose,\n}: Props) => {\n const onClearFilters = useCallback(() => onFilterUpdate(''), []);\n\n return (\n <Panel\n title=\"Filtrera\"\n onClose={onClose}\n footer={\n <>\n <FooterAction>\n <FooterActionItem>\n <ButtonSecondary fullWidth disabled={loading} onClick={onClearFilters}>\n <ButtonContent>Rensa alla</ButtonContent>\n </ButtonSecondary>\n </FooterActionItem>\n <FooterActionItem>\n <ButtonPrimary fullWidth disabled={loading} onClick={onClose}>\n <ButtonContent>{`Visa ${numberOfHits} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ButtonContent>\n </ButtonPrimary>\n </FooterActionItem>\n </FooterAction>\n </>\n }\n >\n <Accordion>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => (\n <AccordionItem\n key={f.displayName}\n heading={f.displayName}\n isActive={f.id === facet?.id}\n >\n <Repeat>\n <FacetSelector facet={f} />\n </Repeat>\n </AccordionItem>\n ))}\n </Accordion>\n </Panel>\n );\n};\n\nexport default FilterPanel;\n", "import * as React from 'react';\n\nimport {\n PanelWrapper,\n Close,\n CloseBtn,\n Header,\n Heading,\n Body,\n Footer,\n UiBlock,\n Wrapper,\n} from './wrapper';\nimport { Portal, PortalNamespace } from '../Portal/index';\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\n\ninterface IPanelPortal {\n id?: string | null;\n title: string | null;\n onClose: () => void;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst Panel = ({ id, title, footer, onClose, children }: IPanelPortal) => {\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper>\n <UiBlock title=\"St\u00E4ng panel\" onClick={onClose} />\n <PanelWrapper>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn title=\"St\u00E4ng panel\" aria-label=\"St\u00E4ng panel\" onClick={onClose}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n {footer && <Footer>{footer}</Footer>}\n </PanelWrapper>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Panel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: relative;\n z-index: 80;\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n animation: ${fadeIn} 200ms ease;\n`;\n\nexport const PanelWrapper = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n background-color: ${(props) => props.theme.color.accent};\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n z-index: 1;\n animation: ${noTransform} 200ms ease forwards;\n\n ${(props) => props.theme.breakpoint.Sm} {\n max-width: 450px;\n transform: translateX(100%);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: auto;\n max-height: 100%;\n transform: translateY(100%);\n }\n`;\n\nexport const Header = styled.header`\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n min-height: 45px;\n padding: ${size(3)};\n padding-bottom: 0;\n\n :after {\n content: '';\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: ${size(3)};\n background-image: linear-gradient(\n ${(props) => props.theme.color.accent},\n ${(props) => props.theme.color.accentTransparent}\n );\n z-index: 1;\n }\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n padding: ${size(2)};\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n z-index: 2;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n opacity: 0;\n transition: opacity 200ms ease;\n z-index: -1;\n }\n\n :active {\n transform: scale(0.9);\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: ${size(3)};\n`;\n\nexport const Footer = styled.footer`\n position: relative;\n flex-shrink: 0;\n padding: ${size(3)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n`;\n\nexport const FooterAction = styled.div.attrs(() => ({\n role: 'group',\n}))`\n display: flex;\n align-items: center;\n margin: ${size(-0.5)};\n`;\n\nexport const FooterActionItem = styled.div`\n flex: 1 1 50%;\n padding: ${size(0.5)};\n\n ${ButtonReset} {\n padding: ${size(1.75)} ${size(2)};\n }\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype HeadingBaseProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n noMargin?: boolean;\n};\n\nconst HeadingBase = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<HeadingBaseProps>`\n margin-top: 0;\n margin-bottom: ${size(2)};\n font-weight: normal;\n line-height: 1.2;\n\n ${({ noMargin }) =>\n noMargin &&\n css`\n margin-bottom: 0;\n `}\n`;\n\nexport const H1 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h1',\n}))`\n font-size: 1.875rem;\n`;\n\nexport const H2 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h2',\n}))`\n font-size: 1.5rem;\n`;\n\n/*\nexport const H3 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h3',\n}))`\n font-size: 1.125rem;\n`;\n*/\n\nexport const H4 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h4',\n}))`\n font-size: 1rem;\n`;\n\nexport const H5 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h5',\n}))`\n font-size: 0.875rem;\n`;\n\n/*\nexport const H6 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h6',\n}))`\n font-size: 0.67rem;\n`;\n*/\n\nexport const VisualHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1em;\n`;\n", "export const DefaultPortal = 'DEFAULT_PORTAL';\n", "import * as React from 'react';\n\nexport interface IPortalElement {\n id: string;\n}\n\nconst PortalElement = ({ id }: IPortalElement) => <div id={id} />;\n\nexport default PortalElement;\n", "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport interface IPortal {\n id: string;\n children: React.ReactNode;\n}\n\nconst Portal = ({ id, children }: IPortal) => {\n const el = React.useRef(document.getElementById(id) || document.createElement('div'));\n if (!el.current) {\n return null;\n }\n\n const { current } = el;\n\n const [dynamic] = React.useState(!current.parentElement);\n\n React.useEffect(() => {\n if (dynamic) {\n current.id = id;\n if (document.body) {\n document.body.appendChild(current);\n }\n }\n return () => {\n if (dynamic && current.parentElement) {\n current.parentElement.removeChild(current);\n }\n };\n }, [id]);\n\n return ReactDOM.createPortal(children, current);\n};\n\nexport default React.memo<IPortal>(Portal);\n", "import React, { useState, useCallback } from 'react';\n\nimport {\n List,\n Item,\n Header,\n Label,\n Heading,\n Indicator,\n IndicatorValue,\n Icon,\n Body,\n} from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\n\nexport interface IAccordionItem {\n heading: string;\n activeCount?: number;\n children: React.ReactNode;\n isActive?: boolean;\n}\n\nexport interface IAccordion {\n children?: React.ReactNode;\n}\n\nexport const AccordionItem = ({ heading, children, activeCount, isActive }: IAccordionItem) => {\n const [extend, setExtend] = useState(isActive || false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Item isOpen={extend}>\n <Header onClick={onToggleExtend} title=\"Visa mer\">\n <Label>\n <Heading\n className={activeCount && activeCount > 0 ? 'wayke__theme wayke__font--bold' : ''}\n >\n {heading}\n </Heading>\n {activeCount && activeCount > 0 && (\n <Indicator>\n <IndicatorValue>{activeCount}</IndicatorValue>\n </Indicator>\n )}\n </Label>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Header>\n <Body>{children}</Body>\n </Item>\n );\n};\n\nconst Accordion = ({ children }: IAccordion) => <List>{children}</List>;\n\nexport default Accordion;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 1rem;\n`;\n\nexport const Header = styled(ButtonReset)`\n display: flex;\n align-items: center;\n width: 100%;\n padding: ${size(3)} 0;\n text-align: left;\n font: inherit;\n`;\n\nexport const Label = styled.div`\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n`;\n\nexport const Heading = styled.div`\n line-height: 1;\n`;\n\nexport const Indicator = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n`;\n\nexport const Icon = styled.div`\n position: relative;\n flex-shrink: 0;\n padding-left: ${size(1)};\n transition: color 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: 0;\n right: ${size(-1)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n z-index: -1;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Header}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n display: none;\n padding-bottom: ${size(3)};\n`;\n\ntype ItemProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLLIElement>, HTMLLIElement> & {\n isOpen?: boolean;\n};\n\nexport const Item = styled.li<ItemProps>`\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n\n ${({ isOpen }) =>\n isOpen &&\n css`\n ${Body} {\n display: block;\n }\n\n ${Icon} {\n svg {\n transform: rotate(180deg);\n }\n }\n `}\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Repeat = styled.div`\n & + & {\n margin-top: ${size(3)};\n }\n`;\n\nexport const RepeatTiny = styled.div`\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const RepeatSmall = styled.div`\n & + & {\n margin-top: ${size(2)};\n }\n`;\n", "import React from 'react';\n\nimport { Facet } from '../../@types/search';\nimport CheckListFacet from './checkListFacet';\nimport ColorSelectFacet from './colorFacet';\nimport RangeFacet from './rangeFacet';\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n} from '../../utils/constants';\n\ninterface FacetSelectorProps {\n facet: Facet;\n}\n\nconst FacetSelector = ({ facet }: FacetSelectorProps) => {\n switch (facet.id) {\n case MANUFACTURER:\n case MODEL_SERIES:\n case FUEL_TYPE:\n case GEARBOX_TYPE:\n case BRANCH:\n case ENVIRONMENT_CLASS:\n case SEGMENT:\n case DRIVING_WHEEL:\n return <CheckListFacet facet={facet} />;\n case COLOR:\n return <ColorSelectFacet facet={facet} />;\n case PRICE:\n return <RangeFacet facet={facet} unit=\"kr\" formatValues />;\n case LEASING_PRICE:\n return <RangeFacet facet={facet} unit=\"kr/m\u00E5n\" formatValues />;\n case MILEAGE:\n return <RangeFacet facet={facet} unit=\"mil\" formatValues />;\n case MODEL_YEAR:\n return <RangeFacet facet={facet} unit=\"\u00E5r\" />;\n default:\n return null;\n }\n};\n\nexport default FacetSelector;\n", "import React, { useState, useEffect, useCallback } from 'react';\nimport Checklist from '../Checklist/index';\nimport OverflowBox from '../OverflowBox/index';\nimport { Facet, FacetFilter } from '../../@types/search';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface ChecklistFacetProps {\n facet: Facet;\n}\n\nconst ChecklistFacet = ({ facet }: ChecklistFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <OverflowBox>\n <Checklist\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n }))}\n />\n </OverflowBox>\n );\n};\n\nexport default ChecklistFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, ActionIcon, ActionLabel } from './wrapper';\nimport { IconCheck, IconRadio } from '../Icon/index';\n\nexport interface IChecklistItem {\n label: string;\n onClick: () => void;\n active?: boolean;\n radio?: boolean;\n}\n\nexport interface IChecklist {\n items: IChecklistItem[];\n radio?: boolean;\n}\n\nconst ChecklistItem = ({ label, onClick, active, radio }: IChecklistItem) => (\n <Item>\n <Action onClick={onClick}>\n {active && <ActionIcon>{radio ? <IconRadio block /> : <IconCheck block />}</ActionIcon>}\n <ActionLabel\n className={active ? 'wayke__theme wayke__font--bold wayke__color--primary-text' : ''}\n >\n {label}\n </ActionLabel>\n </Action>\n </Item>\n);\n\nconst Checklist = ({ items, radio }: IChecklist) => {\n if (!items?.length) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ChecklistItem\n key={item.label}\n label={item.label}\n onClick={item.onClick}\n active={item.active}\n radio={radio}\n />\n ))}\n </List>\n );\n};\n\nexport default Checklist;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 0.875rem;\n overflow: hidden;\n`;\n\nexport const Item = styled.li`\n ${List} {\n padding-left: ${size(5)};\n margin: 0;\n }\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n text-align: left;\n font: inherit;\n padding: ${size(1)} 0;\n\n :before {\n content: '';\n position: absolute;\n left: 0;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 3px;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-top: 2px; // Magic number\n }\n`;\n\nexport const ActionIcon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n top: ${size(1)};\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n margin-top: 2px; // Magic number\n font-size: ${size(1.5)};\n`;\n\nexport const ActionLabel = styled.div`\n padding-left: ${size(3)};\n transition: transform 150ms ease;\n\n ${Action}:hover & {\n transform: translateX(${size(0.5)});\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst OverflowBox = ({ children }: IProps) => <Wrapper>{children}</Wrapper>;\n\nexport default OverflowBox;\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n max-height: 400px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, FacetFilter } from '../../@types/search';\nimport ColorSelect from '../ColorSelect/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { getHexColorFromDisplayName } from '../../utils/converters';\n\ninterface ColorSelectFacetProps {\n facet: Facet;\n}\n\nconst ColorSelectFacet = ({ facet }: ColorSelectFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <ColorSelect\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n hex: [getHexColorFromDisplayName(f.displayName)],\n }))}\n />\n );\n};\n\nexport default ColorSelectFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, Color, Label } from './wrapper';\n\nexport interface ItemProps {\n label: string;\n hex: string[];\n onClick?: () => void;\n active?: boolean;\n disabled?: boolean;\n boxShadow?: boolean;\n}\n\nexport interface Props {\n items?: ItemProps[];\n}\n\nconst ColorSelectItem = ({ label, hex, onClick, active, disabled, boxShadow }: ItemProps) => {\n return (\n <Item>\n <Action onClick={onClick} disabled={disabled} title={label} aria-label={label}>\n <Color\n style={{\n backgroundColor: hex.length === 1 ? hex[0] : '',\n backgroundImage: hex.length > 1 ? `linear-gradient(${hex.join()})` : '',\n }}\n active={active}\n boxShadow={boxShadow}\n className={active ? 'wayke__theme wayke__color--primary-text' : ''}\n />\n <Label\n className={active ? 'wayke__theme wayke__color--primary-text wayke__font--bold' : ''}\n >\n {label}\n </Label>\n </Action>\n </Item>\n );\n};\n\nconst ColorSelect = ({ items }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ColorSelectItem\n key={item.label}\n label={item.label}\n hex={item.hex}\n onClick={item.onClick}\n active={item.active}\n disabled={item.disabled}\n boxShadow={item.boxShadow}\n />\n ))}\n </List>\n );\n};\n\nexport default ColorSelect;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-1.5)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 33.333%;\n max-width: 33.333%;\n padding: ${size(1.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n font: inherit;\n\n &[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n`;\n\ntype ColorProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n active?: boolean;\n boxShadow?: boolean;\n};\n\nexport const Color = styled.div<ColorProps>`\n position: relative;\n width: ${size(3.75)};\n height: ${size(3.75)};\n border-radius: 50%;\n color: ${(props) => props.theme.color.border};\n\n :before {\n content: '';\n position: absolute;\n top: -5px;\n bottom: -5px;\n left: -5px;\n right: -5px;\n border: 2px solid;\n border-radius: 50%;\n display: none;\n }\n\n ${Action}:not([disabled]):hover & {\n :before {\n display: block;\n }\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n display: block;\n }\n `}\n\n ${({ boxShadow }) =>\n boxShadow &&\n css`\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);\n `}\n`;\n\nexport const Label = styled.div`\n margin-top: ${size(1.25)};\n font-size: 0.875rem;\n`;\n", "import {\n COLOR_WHITE,\n COLOR_BLACK,\n COLOR_GRAY,\n COLOR_SILVER,\n COLOR_BLUE,\n COLOR_RED,\n COLOR_BROWN,\n COLOR_GREEN,\n COLOR_ORANGE,\n COLOR_YELLOW,\n COLOR_PURPLE,\n COLOR_BEIGE,\n} from './constants';\n\nexport const getHexColorFromDisplayName = (displayName: string) => {\n switch (displayName) {\n case COLOR_WHITE.displayName:\n return COLOR_WHITE.hex;\n case COLOR_BLACK.displayName:\n return COLOR_BLACK.hex;\n case COLOR_GRAY.displayName:\n return COLOR_GRAY.hex;\n case COLOR_SILVER.displayName:\n return COLOR_SILVER.hex;\n case COLOR_BLUE.displayName:\n return COLOR_BLUE.hex;\n case COLOR_RED.displayName:\n return COLOR_RED.hex;\n case COLOR_BROWN.displayName:\n return COLOR_BROWN.hex;\n case COLOR_GREEN.displayName:\n return COLOR_GREEN.hex;\n case COLOR_ORANGE.displayName:\n return COLOR_ORANGE.hex;\n case COLOR_YELLOW.displayName:\n return COLOR_YELLOW.hex;\n case COLOR_PURPLE.displayName:\n return COLOR_PURPLE.hex;\n case COLOR_BEIGE.displayName:\n return COLOR_BEIGE.hex;\n default:\n return '#fff';\n }\n};\n", "import React, { useCallback, useState, useEffect } from 'react';\nimport { Facet } from '../../@types/search';\nimport RangeSlider from '../RangeSlider/index';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface RangeFacetProps {\n facet: Facet;\n unit?: string;\n formatValues?: boolean;\n}\n\nconst getInitialValues = (domain: number[], facet: Facet, searchParams: URLSearchParams) => {\n const facetMin = domain[0]; //parseInt(facet.filters[0].displayName, 10);\n const _queryMin = searchParams?.get(`${facet.id}.min`) || null;\n const facetMax = domain[domain.length - 1]; //parseInt(facet.filters[facet.filters.length - 1].displayName, 10);\n const _queryMax = searchParams?.get(`${facet.id}.max`) || null;\n\n const queryMin = parseInt(_queryMin === null ? `${facetMin}` : _queryMin, 10);\n const min = facetMin > queryMin ? facetMin : queryMin;\n const queryMax = parseInt(_queryMax === null ? `${facetMax}` : _queryMax, 10);\n const max = queryMax > facetMax ? facetMin : queryMax;\n\n return min || max ? [min ? min : domain[0], max ? max : domain[1]] : domain;\n};\n\nconst averageDelta = ([x, ...xs]: number[]) => {\n if (x === undefined) return NaN;\n\n return xs.reduce(([acc, last], x) => [acc + (x - last), x], [0, x])[0] / xs.length;\n};\n\nconst getSteps = (initialAllValues: number[]) => {\n const delta = averageDelta(initialAllValues);\n const max = Math.floor(initialAllValues[initialAllValues.length - 1] * 1000) / 1000;\n if (delta > 1000) return new Array(max / 1000 + 1).fill('').map((x, i) => i * 1000);\n if (delta <= 1000 && delta >= 500)\n return new Array(max / 500 + 1).fill('').map((x, i) => i * 500);\n return initialAllValues;\n};\n\nconst RangeFacet = ({ facet, unit, formatValues }: RangeFacetProps) => {\n const { loading, queryFilter, initialFacets, onFilterUpdate } = useSearch();\n const initialFacet = initialFacets?.find((x) => x.id === facet.id);\n const maxPrefix =\n initialFacet?.filters[initialFacet?.filters.length - 1]?.displayName?.includes('+');\n const [state, setValues] = useState<\n { id: string | undefined; steps: number[]; domain: number[]; values: number[] } | undefined\n >(undefined);\n\n useEffect(() => {\n const _initialAllValues = initialFacet?.filters.map((f) =>\n parseInt(f.displayName.replace(/[\\<\\>+-]+/g, ''), 10)\n ) || [1, 2];\n\n const _steps = getSteps(_initialAllValues);\n const domain = [_steps[0], _steps[_steps.length - 1]];\n\n setValues({\n id: initialFacet?.id,\n steps: _steps,\n domain: [_steps[0], _steps[_steps.length - 1]],\n values: initialFacet?.filters.length\n ? getInitialValues(domain, initialFacet, queryFilter.searchParams)\n : [0, 0],\n });\n }, [initialFacet?.id]);\n\n useEffect(() => {\n if (state?.id) {\n const init = initialFacet?.filters.length\n ? getInitialValues(state.domain, initialFacet, queryFilter.searchParams)\n : [0, 0];\n const minStr = queryFilter.searchParams?.get(`${facet.id}.min`);\n const maxStr = queryFilter.searchParams?.get(`${facet.id}.max`);\n\n const min = minStr ? parseFloat(minStr) : init[0];\n const max = maxStr ? parseFloat(maxStr) : init[1];\n if (min !== state.values[0] || max !== state.values[1]) {\n onChange([min, max]);\n }\n }\n }, [queryFilter.searchParams?.toString()]);\n\n const onChange = useCallback(\n (nextValues: readonly number[]) => {\n if (state?.id) {\n if (state.values[0] !== nextValues[0] || state.values[1] !== nextValues[1]) {\n setValues({ ...state, values: nextValues.slice() });\n const query = new URLSearchParams(queryFilter.searchParams);\n query.set('hits', '30');\n query.delete(`${facet.id}.min`);\n query.delete(`${facet.id}.max`);\n\n if (nextValues[0] !== state.domain[0]) {\n query.set(`${facet.id}.min`, `${nextValues[0]}`);\n }\n\n if (nextValues[1] !== state.domain[1]) {\n query.set(`${facet.id}.max`, `${nextValues[1]}`);\n }\n\n query.sort();\n onFilterUpdate(query.toString());\n }\n }\n },\n [queryFilter.searchParams, state]\n );\n\n return (\n <>\n {state && (\n <RangeSlider\n loading={loading}\n domain={state.domain}\n values={state.values}\n maxPrefix={maxPrefix ? '+' : undefined}\n steps={state.steps}\n unit={unit}\n onChange={onChange}\n formatValues={formatValues}\n />\n )}\n </>\n );\n};\n\nexport default RangeFacet;\n", "import React, { useState, useCallback, useEffect } from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport {\n Bar,\n RangeSpan,\n RangeSpanItem,\n Slider as OwnSlider,\n Track as OwnTrack,\n Handle as OwnHandle,\n} from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\nconst getSteps = (steps: number[]) => {\n let current = Number.MAX_SAFE_INTEGER;\n steps.forEach((step, index) => {\n if (index !== 0) {\n const c = step - steps[index - 1];\n if (c < current) {\n current = c;\n }\n }\n });\n return current;\n};\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n maxPrefix?: string;\n onChange: (values: readonly number[]) => void;\n}\n\nconst RangeSlider = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n maxPrefix,\n onChange,\n}: RangeSliderProps) => {\n const [current, setCurrent] = useState<number[]>(values);\n const onUpdate = useCallback(\n (nextValues: readonly number[]) => {\n if (!isNaN(nextValues[0]) && !isNaN(nextValues[1])) {\n setCurrent(nextValues.slice());\n }\n },\n [values]\n );\n\n const step = getSteps(steps);\n\n const currentMin = formatValues ? numberSeparator(current[0]) : current[0];\n const currentMax = formatValues ? numberSeparator(current[1]) : current[1];\n const equal = domain[0] === domain[1];\n const _maxPrefix = maxPrefix && domain[1] === current[1] ? maxPrefix : undefined;\n\n useEffect(() => {\n if (values[0] !== current[0] || values[1] !== current[1]) {\n setCurrent(values);\n }\n }, [values]);\n\n return (\n <>\n {equal ? (\n <OwnSlider>\n <Bar>\n <OwnTrack style={{ left: '0', width: '100%' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '0' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '100%' }} />\n </Bar>\n </OwnSlider>\n ) : (\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks left={false} right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n )}\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${_maxPrefix ? _maxPrefix : ''}${\n unit ? ` ${unit}` : ''\n }`}</RangeSpanItem>\n </RangeSpan>\n </>\n );\n};\n\nexport default RangeSlider;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const RangeSpan = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${size(1)};\n user-select: none;\n`;\n\nexport const RangeSpanItem = styled.div`\n font-size: 0.875rem;\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :first-child {\n flex: 1 1 auto;\n }\n\n :last-child {\n flex-shrink: 0;\n }\n`;\n\nexport const Slider = styled.div`\n padding: 10px 12px;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n height: 4px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -12px;\n right: -12px;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n`;\n\nexport const Track = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 0;\n height: 4px;\n margin-left: -12px;\n margin-right: -12px;\n`;\n\nexport const Handle = styled.div.attrs(() => ({\n role: 'slider',\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 50%;\n transform-origin: 50% 50%;\n display: block;\n width: 24px;\n height: 24px;\n margin-top: -12px;\n margin-left: -12px;\n border-radius: 50%;\n cursor: move;\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :active {\n transform: scale(1.3);\n\n :before {\n opacity: 1;\n }\n }\n`;\n", "import React from 'react';\nimport { Handle as OwnHandle } from './wrapper';\nimport { SliderItem, GetHandleProps } from 'react-compound-slider';\n\ninterface IHandleProps {\n domain: number[];\n handle: SliderItem;\n getHandleProps: GetHandleProps;\n}\n\nexport const Handle = ({\n domain: [min, max],\n handle: { id, value, percent },\n getHandleProps,\n}: IHandleProps) => (\n <OwnHandle\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n style={{\n left: `${percent}%`,\n }}\n {...getHandleProps(id)}\n />\n);\n", "import React from 'react';\nimport { Track as OwnTrack } from './wrapper';\nimport { SliderItem, GetTrackProps } from 'react-compound-slider';\n\ninterface ITrackProps {\n source: SliderItem;\n target: SliderItem;\n getTrackProps: GetTrackProps;\n}\n\nexport const Track = ({ source, target, getTrackProps }: ITrackProps) => (\n <OwnTrack\n style={{\n left: `${source.percent}%`,\n width: `${target.percent - source.percent}%`,\n }}\n {...getTrackProps()}\n />\n);\n", "import React from 'react';\n\nimport { Wrapper, List, Item } from './wrapper';\nimport ProductCard from '../ProductCard/index';\nimport { Document } from '../../@types/search';\nimport { numberSeparator } from '../../utils/formats';\n\nconst resolveImage = (document: Document) => {\n const img = document.featuredImage?.files?.[0]?.url;\n if (img) {\n return `${img}?w=567&q=72`;\n }\n return undefined;\n};\n\ninterface GridProps {\n documents?: Document[];\n hashRoute?: boolean;\n pathRoute?: string;\n placeholderImage?: string;\n onClickItem?: (id: string) => void;\n}\n\nconst Grid = ({ documents, placeholderImage, hashRoute, pathRoute, onClickItem }: GridProps) => {\n if (!documents) {\n return null;\n }\n\n return (\n <Wrapper>\n <List>\n {documents.map((document) => {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n\n const prefix = _path ? `/${_path}/` : '/';\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <Item key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onClickItem}\n title={document.title}\n pathRoute={pathRoute}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={resolveImage(document)}\n placeholderImage={placeholderImage}\n description={document.shortDescription}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(document.mileage)} mil`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} kr`}\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} kr`\n : undefined\n }\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} kr`\n : undefined\n }\n />\n </Item>\n );\n })}\n </List>\n </Wrapper>\n );\n};\n\nexport default Grid;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-2)} ${size(-1)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 100%;\n max-width: 100%;\n padding: ${size(2)} ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: 50%;\n max-width: 50%;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import React, { useCallback, useMemo } from 'react';\nimport LazyLoad from 'react-lazy-load';\n\nimport {\n Wrapper,\n Image,\n Picture,\n Source,\n Img,\n Content,\n ContentBody,\n ContentFooter,\n Heading,\n Link,\n Description,\n Usp,\n Price,\n CurrentPrice,\n OldPrice,\n PriceCell,\n Label,\n} from './wrapper';\nimport UspList, { ItemProps } from '../UspList/index';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport usePath from '../../State/Path/usePath';\n\ninterface Props {\n id: string;\n title: string;\n href?: string;\n image?: string;\n pathRoute?: string;\n placeholderImage?: string;\n description?: string;\n uspList?: ItemProps[];\n price: string;\n leasingPrice?: string;\n oldPrice?: string;\n onClick?: (id: string) => void;\n}\n\nconst ProductCard = ({\n id,\n title,\n href,\n image,\n pathRoute,\n placeholderImage,\n description,\n uspList,\n price,\n oldPrice,\n leasingPrice,\n onClick,\n}: Props) => {\n const { pushState } = usePath();\n const _onClick = useMemo(() => (onClick ? () => onClick(id) : undefined), [id]);\n\n const onHrefClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (!!pathRoute && href) {\n e.preventDefault();\n pushState(href);\n }\n },\n [id, pathRoute, href]\n );\n\n return (\n <Wrapper onClick={_onClick}>\n <Image>\n <LazyLoad>\n {image ? (\n <>\n <Picture>\n <Source\n type=\"image/webp\"\n srcSet={`${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n />\n <Img\n srcSet={`${image}?spec=822x548 822w, ${image}?spec=750x500 750w, ${image}?spec=411x274 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n src={`${image}?spec=411x274`}\n alt={title}\n />\n </Picture>\n </>\n ) : (\n <Picture>\n <Img src={placeholderImage || DEFAULT_PLACEHOLDER_IMAGE} />\n </Picture>\n )}\n </LazyLoad>\n </Image>\n <Content>\n <ContentBody>\n <Heading>\n {href ? (\n <Link onClick={onHrefClick} href={href} title={title} aria-label={title}>\n {title}\n </Link>\n ) : (\n title\n )}\n </Heading>\n {description && <Description>{description}</Description>}\n {uspList && (\n <Usp>\n <UspList small items={uspList} />\n </Usp>\n )}\n </ContentBody>\n <ContentFooter>\n <Price>\n <PriceCell>\n {oldPrice ? <OldPrice>{oldPrice}</OldPrice> : <Label>Pris</Label>}\n <CurrentPrice>{price}</CurrentPrice>\n </PriceCell>\n {leasingPrice && (\n <PriceCell>\n <Label>Leasingpris</Label>\n <CurrentPrice>{leasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n </Price>\n </ContentFooter>\n </Content>\n </Wrapper>\n );\n};\n\nexport default ProductCard;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.article`\n position: relative;\n height: 100%;\n display: flex;\n flex-direction: column;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :active {\n transform: scale(0.98);\n }\n`;\n\nexport const Image = styled.div`\n flex-shrink: 0;\n position: relative;\n height: 0;\n padding-bottom: 66.666%;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Wrapper}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Picture = styled.picture``;\n\nexport const Source = styled.source``;\n\nexport const Img = styled.img`\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n top: auto;\n left: auto;\n border-radius: 3px;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n margin-top: ${size(2)};\n`;\n\nexport const ContentBody = styled.div``;\n\nexport const ContentFooter = styled.div`\n margin-top: auto;\n padding-top: ${size(1)};\n`;\n\nexport const Heading = styled.h1.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n font-weight: 400;\n margin: 0;\n font-size: 1rem;\n`;\n\nexport const Link = styled.a`\n display: block;\n color: inherit;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n :focus {\n text-decoration: underline;\n }\n`;\n\nexport const Description = styled.div`\n font-size: 0.875rem;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: ${size(0.25)};\n`;\n\nexport const Usp = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Price = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 100%;\n`;\n\nexport const CurrentPrice = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1rem;\n margin-right: ${size(1)};\n`;\n\nexport const PriceCell = styled.div`\n flex: 1 1 auto;\n padding-right: ${size(1)};\n`;\n\nexport const OldPrice = styled.div`\n text-decoration: line-through;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n\nexport const Label = styled.label`\n color: ${(props) => props.theme.color.disabledText};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { List, Item, Box, ItemSection, Action } from './wrapper';\nimport { IconInfo } from '../Icon/index';\n\nexport interface ItemProps {\n title: string | number | null;\n onClick?: () => void;\n}\n\nexport interface Props {\n items?: ItemProps[];\n small?: boolean;\n}\n\nconst UspItem = ({ title, onClick }: ItemProps) => {\n return (\n <Item>\n <Box>\n <ItemSection>{title}</ItemSection>\n {onClick && (\n <ItemSection>\n <Action onClick={onClick}>\n <IconInfo block />\n </Action>\n </ItemSection>\n )}\n </Box>\n </Item>\n );\n};\n\nconst UspList = ({ items, small }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List isSmall={small}>\n {items.map((item, index) => (\n <UspItem key={`${item.title}-${index}`} title={item.title} onClick={item.onClick} />\n ))}\n </List>\n );\n};\n\nexport default UspList;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Box = styled.div`\n display: flex;\n align-items: center;\n background-color: ${(props) => props.theme.color.accentDark};\n padding: ${size(1)} ${size(1.5)};\n border-radius: 3px;\n font-size: 0.875rem;\n overflow-wrap: break-word;\n hyphens: auto;\n`;\n\nexport const ItemSection = styled.div`\n & + & {\n margin-left: ${size(1)};\n }\n`;\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n\n ${({ isSmall }: { isSmall?: boolean }) =>\n isSmall &&\n css`\n margin: ${size(-0.25)};\n\n ${Item} {\n padding: ${size(0.25)};\n }\n\n ${Box} {\n padding: ${size(0.5)} ${size(1)};\n font-size: 0.75rem;\n }\n\n ${ItemSection} {\n & + & {\n margin-left: ${size(0.5)};\n }\n }\n `}\n`;\n", "import { useContext } from 'react';\nimport { PathContext, PathContextProps } from './PathContext';\n\nconst usePath = (): PathContextProps => {\n const context = useContext(PathContext);\n\n if (!context) {\n throw new Error('usePath must be used within a PathProvider');\n }\n\n return context;\n};\nexport default usePath;\n", "import { createContext } from 'react';\n\nexport interface PathContextProps {\n path: string;\n previousPath?: string;\n id?: string;\n pushState: (id: string) => void;\n replaceState: (id: string) => void;\n}\n\nexport const PathContext = createContext<PathContextProps | undefined>(undefined);\n", "import React from 'react';\n\nimport { Wrapper, Query, Clear } from './wrapper';\nimport { IconCancel } from '../Icon/index';\n\ninterface Props {\n children: string;\n onClear?: () => void;\n clearTitle?: string;\n}\n\nconst SearchTerm = ({ children, onClear, clearTitle }: Props) => (\n <Wrapper>\n <Query>{children}</Query>\n {onClear && (\n <Clear onClick={onClear} title={clearTitle ? clearTitle : 'Rensa fritext'}>\n <IconCancel block />\n </Clear>\n )}\n </Wrapper>\n);\n\nexport default SearchTerm;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Query = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 2.25rem;\n min-width: 0;\n overflow-wrap: break-word;\n hyphens: auto;\n\n :before,\n :after {\n content: '\"';\n }\n`;\n\nexport const Clear = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-left: ${size(1)};\n font-size: ${size(1)};\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: ${size(-1)};\n right: ${size(-1)};\n border-radius: 50%;\n }\n\n :after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :after {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n", "import React, { useCallback, useState } from 'react';\nimport useSearch from '../../State/Search/useSearch';\nimport SearchBar from '../SearchBar/index';\n\nconst SearchFilter = () => {\n const [value, setValue] = useState('');\n const { queryFilter, onFilterUpdate } = useSearch();\n\n const onSearch = useCallback(\n (value: string) => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n if (value === nextQuery.get('query')) {\n return;\n }\n\n if (value) {\n nextQuery.set('query', value);\n } else {\n nextQuery.delete('qquery');\n }\n\n onFilterUpdate(nextQuery.toString());\n setValue('');\n },\n [queryFilter]\n );\n\n return <SearchBar value={value} setValue={setValue} onSearch={onSearch} />;\n};\n\nexport default SearchFilter;\n", "import React, { useCallback, useRef } from 'react';\nimport InputSearch from '../InputSearch/index';\nimport useOutsideClick from '../../hooks/useOutsideClick';\n\ninterface SearchBarProps {\n value: string;\n setValue: (value: string) => void;\n onSearch: (value: string) => void;\n}\n\nconst SearchBar = ({ value, setValue, onSearch }: SearchBarProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setValue(e.currentTarget.value),\n []\n );\n\n useOutsideClick(ref, () => setValue(''));\n\n const _onSearch = useCallback(() => {\n onSearch(value);\n }, [value]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13) {\n _onSearch();\n }\n },\n [value, _onSearch]\n );\n\n return (\n <InputSearch\n ref={ref}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onSearch={_onSearch}\n placeholder=\"S\u00F6k\"\n label=\"S\u00F6k\"\n id=\"main-search\"\n />\n );\n};\n\nexport default SearchBar;\n", "import React from 'react';\n\nimport { Wrapper, Search, Action, ActionBtn, Input, Label } from './wrapper';\nimport { IconSearch } from '../Icon/index';\n\ntype InputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\ntype Props = InputProps & {\n placeholder: string;\n label: string;\n value?: string;\n id: string;\n onSearch: () => void;\n};\n\nconst InputSearch = React.forwardRef(\n (\n { placeholder, label, value, id, onSearch, onChange, onKeyDown }: Props,\n ref:\n | ((instance: HTMLDivElement | null) => void)\n | React.RefObject<HTMLDivElement>\n | null\n | undefined\n ) => (\n <Wrapper ref={ref}>\n <Label htmlFor={id}>{label}</Label>\n <Search>\n <Input\n placeholder={placeholder}\n name=\"search\"\n value={value}\n id={id}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Search>\n <Action>\n <ActionBtn onClick={onSearch} title={`Genomf\u00F6r ${label}`} aria-label={`Genomf\u00F6r ${label}`}>\n <IconSearch block />\n </ActionBtn>\n </Action>\n </Wrapper>\n )\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'search',\n}))`\n display: flex;\n align-items: stretch;\n border-radius: 3px;\n`;\n\nexport const Label = styled.label`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const Search = styled.div`\n flex: 1 1 auto;\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accentDark};\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n`;\n\nexport const ActionBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) => props.theme.distances.inputHeight};\n height: ${(props) => props.theme.distances.inputHeight};\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n font-size: 1rem;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'search',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import { useEffect } from 'react';\n\nconst useOutsideClick = (ref: React.RefObject<HTMLElement>, callback: () => void) => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && e.target && !ref.current.contains(e.target as Node)) {\n callback();\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClick);\n\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n};\n\nexport default useOutsideClick;\n", "import React from 'react';\n\nimport { Wrapper, Icon, Content, Heading, Message } from './wrapper';\n\nimport { IconCheck, IconInfo, IconExclamationCircle, IconExclamationTriangle } from '../Icon/index';\n\ninterface Props {\n severity?: string;\n icon?: boolean;\n heading?: string;\n children?: React.ReactNode;\n}\n\nconst Snackbar = ({ severity, icon, heading, children }: Props) => {\n let iconSelector = <IconInfo block />;\n if (severity === 'error') {\n iconSelector = <IconExclamationCircle block />;\n } else if (severity === 'warning') {\n iconSelector = <IconExclamationTriangle block />;\n } else if (severity === 'success') {\n iconSelector = <IconCheck block />;\n }\n\n return (\n <Wrapper severity={severity}>\n {icon && <Icon>{iconSelector}</Icon>}\n <Content>\n {heading && <Heading>{heading}</Heading>}\n <Message>{children}</Message>\n </Content>\n </Wrapper>\n );\n};\n\nexport default Snackbar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getSnackbarBg = (severity: string | undefined): string => {\n let bg = theme.color.accent;\n\n if (severity === 'error') {\n bg = theme.color.ui.negativeLight;\n } else if (severity === 'warning') {\n bg = theme.color.ui.neutralLight;\n } else if (severity === 'info') {\n bg = theme.color.ui.infoLight;\n } else if (severity === 'success') {\n bg = theme.color.ui.positiveLight;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'alert',\n}))<Wrapper>`\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props): string => getSnackbarBg(props.severity)};\n color: ${(props): string => props.theme.color.textDark};\n border-radius: 3px;\n`;\n\nexport const Icon = styled.div`\n flex-shrink: 0;\n padding-right: ${size(2)};\n font-size: ${size(3)};\n\n > svg {\n display: block;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n font-size: 1rem;\n`;\n\nexport const Heading = styled.div`\n font-weight: 700;\n`;\n\nexport const Message = styled.div`\n > * {\n &:first-child {\n margin-top: 0;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n", "import {\n ActionAll,\n ActionNames,\n ActionOnFilterUpdate,\n ActionTypes,\n CallbackOnFilterUpdate,\n} from './Actions';\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './Events';\n\nexport type EventSubscriptions = {\n HashRouteChange: EventHashRouteChange[];\n ItemClicked: EventItemClicked[];\n EcomOnUserEvent: EventEcomOnUser[];\n ImagesClick: EventImagesClick[];\n OptionsClick: EventOptionsClick[];\n PhonenumberVisible: EventPhonenumberVisible[];\n PhonenumberCall: EventPhonenumberCall[];\n MailVisible: EventMailVisible[];\n InsuranceInterest: EventInsuranceInterest[];\n FinanceInterest: EventFinanceInterest[];\n All: EventAll[];\n};\n\nexport type ActionSubscriptions = {\n onFilterUpdate: ActionOnFilterUpdate[];\n All: ActionAll[];\n};\n\nclass PubSub {\n private static events: EventSubscriptions = {\n HashRouteChange: [],\n ItemClicked: [],\n EcomOnUserEvent: [],\n ImagesClick: [],\n OptionsClick: [],\n PhonenumberVisible: [],\n PhonenumberCall: [],\n MailVisible: [],\n InsuranceInterest: [],\n FinanceInterest: [],\n All: [],\n };\n\n private static actions: ActionSubscriptions = {\n onFilterUpdate: [],\n All: [],\n };\n\n public static subscribeAction = (event: ActionTypes) =>\n PubSub.actions[event.actionName].push(event as any);\n\n public static unsubscribeAction = (event: ActionTypes) => {\n if (PubSub.actions[event.actionName]) {\n for (let i = 0; i < PubSub.actions[event.actionName].length; i++) {\n if (PubSub.actions[event.actionName][i] === event) {\n PubSub.actions[event.actionName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publishAction = (eventName: ActionNames, ...args: any) => {\n if (PubSub.actions.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.actions[eventName]) {\n PubSub.actions[eventName].forEach((event: ActionTypes) => {\n switch (eventName) {\n case 'onFilterUpdate':\n (event.callback as CallbackOnFilterUpdate)(args[0]);\n break;\n default:\n break;\n }\n });\n }\n };\n\n public static subscribe = (event: EventType) => PubSub.events[event.eventName].push(event as any);\n\n public static unsubscribe = (event: EventType) => {\n if (PubSub.events[event.eventName]) {\n for (let i = 0; i < PubSub.events[event.eventName].length; i++) {\n if (PubSub.events[event.eventName][i] === event) {\n PubSub.events[event.eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publish = (eventName: EventNames, ...args: any) => {\n if (PubSub.events.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.events[eventName]) {\n PubSub.events[eventName].forEach((event: EventType) => {\n switch (eventName) {\n case 'HashRouteChange':\n (event.callback as CallbackHashRouteChange)(args[0]);\n break;\n case 'ItemClicked':\n (event.callback as CallbackEventItemClicked)(args[0]);\n break;\n case 'EcomOnUserEvent':\n (event.callback as CallbackEcomOnUserEvent)(args[0], args[1]);\n break;\n case 'ImagesClick':\n case 'OptionsClick':\n case 'PhonenumberVisible':\n case 'PhonenumberCall':\n case 'MailVisible':\n case 'InsuranceInterest':\n case 'FinanceInterest':\n (event.callback as CallbackEmpty)();\n break;\n default:\n break;\n }\n });\n }\n };\n}\nexport default PubSub;\n", "import React, { useMemo, useRef, useCallback, useEffect } from 'react';\nimport WaykeEcomWeb from '@wayke-se/ecom-web';\n// import '@wayke-se/ecom-web/dist/index.css';\n\nimport Container from '../../components/Container/index';\nimport UspList from '../../components/UspList/index';\nimport { Repeat, RepeatSmall } from '../../components/Repeat/index';\nimport PriceTable from '../../components/PriceTable/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport Content from '../../components/Content/index';\nimport Blockquote from '../../components/Blockquote/index';\nimport ExtendContent from '../../components/ExtendContent/index';\nimport Gallery from '../../components/Gallery/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport {\n ProductPage,\n ProductPageMainSection,\n ProductPageAside,\n ProductPageMain,\n ProductPageAsideSection,\n} from '../../components/ProductPage/index';\nimport { H1, H2 } from '../../components/Heading/index';\nimport { ButtonPrimary, ButtonContent, ButtonInlineLight } from '../../components/Button/index';\nimport { UtilityFontSizeSmall } from '../../components/Utility/index';\nimport { IconChevronLeft } from '../../components/Icon/index';\nimport useSearchItem from '../../hooks/useSearchItem';\nimport { notEmpty, numberSeparator, dateTimeFormat } from '../../utils/formats';\nimport { PortalNamespace, PortalElement } from '../../components/Portal/index';\nimport Modal from '../../components/Modal/index';\nimport FinancialOptions from '../../components/FinancialOptions/index';\nimport InsuranceOptions from '../../components/InsuranceOptions/index';\n// import Ecom from '../../components/Ecom/index';\nimport ManufacturerPackageOption from './ManufacturerPackagesOption';\nimport CheckList from './CheckList';\nimport Related from './Related';\nimport PackageOptions from './PackageOptions';\nimport Branch from './Branch';\nimport useCentralStorage from '../../State/CentralStorage/useCentralStorage';\nimport Page404 from './Page404';\nimport PageLoading from './PageLoading';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport Property from './Property';\nimport PdfDownloadContainer from '../../components/Pdf/index';\nimport useSettings from '../../State/Settings/useSettings';\n\nexport interface WaykeSearchItemProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n disableResetScrollOnInit?: boolean;\n placeholderImage?: string;\n modifyDocumentTitleItem?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearchItem = ({\n id,\n hashRoute,\n pathRoute,\n disableResetScrollOnInit,\n placeholderImage,\n modifyDocumentTitleItem,\n onClickSearchItem,\n}: WaykeSearchItemProps) => {\n const { ecomSettings } = useSettings();\n const ecomContext = useRef<WaykeEcomWeb | undefined>();\n\n const { loading, data: result } = useSearchItem(id);\n const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } =\n useCentralStorage(result?.vehicle);\n\n useEffect(() => {\n if (ecomSettings) {\n ecomContext.current = new WaykeEcomWeb({\n id,\n ecomSdkConfig: {\n api: {\n address: ecomSettings.url,\n },\n bankIdThumbprint: ecomSettings?.bankIdThumbprint,\n },\n logo: ecomSettings.serviceLogotypeUrl,\n onEvent(view, event, currentStep?, data?) {\n PubSub.publish('EcomOnUserEvent', view, event, currentStep, data);\n },\n });\n }\n return () => {\n if (ecomContext.current) {\n ecomContext.current.destroy();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!disableResetScrollOnInit) {\n window.scrollTo(0, 0);\n }\n }, []);\n\n useEffect(() => {\n if (result?.vehicle?.data && modifyDocumentTitleItem) {\n const { vehicle } = result;\n const { registrationNumber } = vehicle.data;\n document.title = `${registrationNumber} | ${vehicle.title} | ${vehicle.shortDescription}`;\n }\n }, [result]);\n\n const options = useMemo(\n () => result?.vehicle?.data?.options?.filter(notEmpty).map((opt) => ({ title: opt })),\n [result?.vehicle?.data?.options]\n );\n\n const onShowMoreOptionsClick = useCallback(() => PubSub.publish('OptionsClick'), []);\n\n if (loading) {\n return <PageLoading />;\n }\n\n if (!result?.vehicle?.data) {\n return <Page404 />;\n }\n\n const { vehicle } = result;\n const contact = centralStorageVehicle?.contact;\n const branch = centralStorageVehicle?.branch;\n const {\n title,\n shortDescription,\n media,\n description,\n price,\n financialOptions,\n manufacturer,\n ecommerce,\n packageOptions,\n publishedAt,\n documents,\n } = vehicle;\n const insuranceOptions = centralStorageVehicle?.insuranceOptions\n ? centralStorageVehicle.insuranceOptions\n : vehicle.insuranceOptions;\n const { fuelType, mileage, gearbox, modelYear, propertySet } = vehicle.data;\n\n const uspList = [\n {\n title: modelYear,\n },\n {\n title: `${numberSeparator(mileage)} mil`,\n },\n ];\n if (gearbox) {\n uspList.push({ title: gearbox });\n }\n\n if (fuelType) {\n uspList.push({ title: fuelType });\n }\n\n return (\n <>\n <Page>\n <PageSection large>\n <Container>\n <ProductPage>\n <ProductPageAside>\n <ProductPageAsideSection mobileOrder={1}>\n {!pathRoute && hashRoute ? (\n <Repeat>\n <UtilityFontSizeSmall>\n <ButtonInlineLight as=\"a\" href=\"#\" title=\"Tillbaka till bils\u00F6k\">\n <ButtonContent>\n <IconChevronLeft block />\n </ButtonContent>\n <ButtonContent>Tillbaka till bils\u00F6k</ButtonContent>\n </ButtonInlineLight>\n </UtilityFontSizeSmall>\n </Repeat>\n ) : null}\n {manufacturer?.logotype && (\n <Repeat>\n <LogoBox logo={manufacturer.logotype} alt={manufacturer.name} />\n </Repeat>\n )}\n <Repeat>\n <RepeatSmall>\n <H1 noMargin>{title}</H1>\n </RepeatSmall>\n {shortDescription && (\n <RepeatSmall>\n <div>{shortDescription}</div>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <UspList small items={uspList} />\n </RepeatSmall>\n </Repeat>\n </ProductPageAsideSection>\n\n <ProductPageAsideSection mobileOrder={2}>\n <PriceTable price={price} />\n </ProductPageAsideSection>\n\n {(financialOptions.length > 0 || insuranceOptions.length > 0) && (\n <ProductPageAsideSection mobileOrder={4}>\n {financialOptions.length > 0 && (\n <FinancialOptions id={id} financialOptions={financialOptions} />\n )}\n {insuranceOptions.length > 0 && (\n <InsuranceOptions\n id={id}\n branch={centralStorageVehicle?.branch}\n insuranceOptions={insuranceOptions}\n />\n )}\n </ProductPageAsideSection>\n )}\n\n <ProductPageAsideSection mobileOrder={5}>\n <CheckList\n manufacturer={manufacturer}\n packageOptions={packageOptions}\n ecommerce={ecommerce}\n branch={branch}\n contact={centralStorageVehicle?.contact}\n loadingCentralStorageVehicle={loadingCentralStorageVehicle}\n toggleEcomModal={() => ecomContext.current?.start()}\n />\n </ProductPageAsideSection>\n </ProductPageAside>\n <ProductPageMain>\n <ProductPageAsideSection mobileOrder={3}>\n <Gallery media={media} placeholderImage={placeholderImage} />\n </ProductPageAsideSection>\n\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Biluppgifter</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Information direkt fr\u00E5n Transportstyrelsen och tillverkaren.</p>\n </Content>\n </Repeat>\n <Repeat>\n <Property propertySet={propertySet} vehicleData={vehicle.data} />\n </Repeat>\n </ProductPageMainSection>\n\n {description && (\n <ProductPageMainSection>\n <Blockquote\n author={contact && contact.name ? contact.name : null}\n date={\n publishedAt\n ? dateTimeFormat.format(publishedAt, dateTimeFormat.DayMonth)\n : undefined\n }\n avatar={contact?.avatar || undefined}\n >\n {!!description && <p>{description}</p>}\n </Blockquote>\n </ProductPageMainSection>\n )}\n\n {(options?.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Utrustning</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Kompletterande uppgifter om bilen.</p>\n </Content>\n </Repeat>\n <Repeat>\n <ExtendContent actionTitle=\"Visa mer\" onClick={onShowMoreOptionsClick}>\n <UspList items={options} />\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n )}\n\n {(documents.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Dokument</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Tillh\u00F6rande dokument f\u00F6r bilen.</p>\n </Content>\n </Repeat>\n <Repeat>\n <PdfDownloadContainer documents={documents} />\n </Repeat>\n </ProductPageMainSection>\n )}\n\n <ProductPageMainSection>\n <Branch branch={branch} loading={loadingCentralStorageVehicle} />\n {ecommerce && ecommerce.enabled && (\n <Repeat>\n <ButtonPrimary\n disabled={!!ecommerce.reserved}\n title=\"K\u00F6p bilen online\"\n onClick={() => ecomContext.current?.start()}\n >\n K\u00F6p bilen online\n </ButtonPrimary>\n </Repeat>\n )}\n </ProductPageMainSection>\n <PackageOptions packageOptions={packageOptions} />\n <ManufacturerPackageOption packageOption={manufacturer?.packageOption} />\n </ProductPageMain>\n </ProductPage>\n </Container>\n </PageSection>\n <Related\n id={id}\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickSearchItem={onClickSearchItem}\n />\n </Page>\n {false && (\n <Modal title=\"Modal\" onClose={() => {}}>\n <Content>\n <p>\n Priset \u00E4r ett cirkapris och baserat p\u00E5 ditt avtals antal m\u00E5nader och din ber\u00E4knade\n \u00E5rliga k\u00F6rstr\u00E4cka. Kostnad f\u00F6r f\u00F6rs\u00E4kring och serviceavtal tillkommer. Kontakta\n s\u00E4ljare f\u00F6r komplett kostnadsf\u00F6rslag.{' '}\n </p>\n </Content>\n </Modal>\n )}\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearchItem;\n", "import React from 'react';\n\nimport { List, Item, Value, Label } from './wrapper';\nimport { VisualHeading } from '../Heading/index';\nimport { Price, OldPrice } from '../Price/index';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface PriceTableProps {\n price: number;\n oldPrice?: number;\n}\n\nconst PriceTable = ({ price, oldPrice }: PriceTableProps) => (\n <List>\n <Item>\n <Label>\n <VisualHeading>Pris</VisualHeading>\n </Label>\n <Value>\n <Price>{numberSeparator(price)} kr</Price>\n </Value>\n </Item>\n {oldPrice !== undefined && (\n <Item>\n <Label />\n <Value>\n <OldPrice>{numberSeparator(oldPrice)} kr</OldPrice>\n </Value>\n </Item>\n )}\n </List>\n);\n\nexport default PriceTable;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-end;\n line-height: 1;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div`\n flex-shrink: 0;\n`;\n", "import styled from 'styled-components';\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1.375rem;\n`;\n\nexport const OldPrice = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n text-decoration: line-through;\n`;\n", "import * as React from 'react';\n\nimport { Logo } from './wrapper';\n\ninterface ILogoBox {\n logo: string;\n logo2x?: string | null;\n alt?: string;\n wide?: boolean;\n}\n\nconst LogoBox = ({ logo, logo2x, alt, wide }: ILogoBox) => {\n let logoRetina = logo;\n\n if (logo2x) {\n logoRetina = `${logo2x} 2x`;\n }\n\n return <Logo src={logo} srcSet={logoRetina} alt={alt} wide={wide} />;\n};\n\nexport default LogoBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype LogoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n wide?: boolean;\n};\n\nexport const Logo = styled.img<LogoProps>`\n display: block;\n max-width: ${size(9.5)};\n max-height: ${size(6)};\n\n ${({ wide }) =>\n wide &&\n css`\n max-width: ${size(20)};\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n small?: boolean;\n};\n\nconst Content = ({ children, small, dangerouslySetInnerHTML }: Props) => (\n <Wrapper small={small} dangerouslySetInnerHTML={dangerouslySetInnerHTML}>\n {children}\n </Wrapper>\n);\n\nexport default Content;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n small?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n font-size: 1rem;\n line-height: 1.5;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: ${size(4)};\n margin-bottom: ${size(1)};\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n & + p,\n & + table {\n margin-top: ${size(1)};\n }\n }\n\n p {\n margin: ${size(2)} 0;\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n display: block;\n width: 100%;\n }\n\n ${({ small }) =>\n small &&\n css`\n font-size: 0.875rem;\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Quote, Author, AvatarWrapper, Info, Name, Date } from './wrapper';\nimport Avatar from '../Avatar/index';\n\ninterface Props {\n children: React.ReactNode;\n author?: string | null;\n avatar?: string;\n date?: string;\n}\n\nconst Blockquote = ({ children, author, avatar, date }: Props) => (\n <Wrapper>\n <Quote>{children}</Quote>\n {author && (\n <Author>\n {avatar && (\n <AvatarWrapper>\n <Avatar image={avatar} alt={`${author} avatar`} />\n </AvatarWrapper>\n )}\n <Info>\n <Name>{author}</Name>\n {date && <Date>{date}</Date>}\n </Info>\n </Author>\n )}\n </Wrapper>\n);\n\nexport default Blockquote;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.blockquote`\n display: flex;\n flex-direction: column;\n max-width: 600px;\n margin: 0 auto;\n\n ${(props) => props.theme.breakpoint.Sm} {\n align-items: center;\n }\n`;\n\nexport const Quote = styled.div`\n > * {\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const Author = styled.footer`\n display: inline-flex;\n align-items: center;\n margin-top: ${size(3)};\n\n ${(props) => props.theme.breakpoint.Md} {\n margin-top: ${size(4)};\n }\n`;\n\nexport const AvatarWrapper = styled.div`\n flex-shrink: 0;\n padding-right: ${size(1.5)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n font-size: 0.875rem;\n`;\n\nexport const Name = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Date = styled.div``;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n image: string;\n alt?: string;\n}\n\nconst Avatar = ({ image, alt }: Props) => <Wrapper image={image} aria-label={alt} />;\n\nexport default Avatar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface Wrapper {\n image: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'image',\n}))<Wrapper>`\n display: block;\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-image: ${(props): string => `url(${props.image})`};\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n background-color: ${(props) => props.theme.color.accent};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Extend, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n actionTitle: string;\n onClick?: () => void;\n}\n\nconst ExtendContent = ({ children, actionTitle, onClick }: Props) => {\n const [extend, setExtend] = useState(false);\n const onExtend = useCallback(() => {\n setExtend(true);\n if (onClick) {\n onClick();\n }\n }, []);\n\n const onRef = (ref: HTMLDivElement | null) => {\n const refHeight = ref?.clientHeight || 0;\n\n if (refHeight < 207) {\n setExtend(true);\n }\n };\n\n return (\n <Wrapper ref={onRef}>\n <Extend extended={extend}>{children}</Extend>\n {!extend && (\n <Action>\n <ButtonClear onClick={onExtend} title={actionTitle}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n );\n};\n\nexport default ExtendContent;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\ntype ExtendProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n extended?: boolean;\n};\n\nexport const Extend = styled.div<ExtendProps>`\n position: relative;\n max-height: 175px;\n overflow: hidden;\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(6)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n }\n\n ${({ extended }) =>\n extended &&\n css`\n max-height: none;\n\n :after {\n content: none;\n }\n `}\n`;\n\nexport const Action = styled.div`\n display: flex;\n justify-content: flex-end;\n margin-top: ${size(2)};\n`;\n", "import React, { useState, useCallback, useRef, useMemo } from 'react';\nimport Slider from 'react-slick';\nimport scrollIntoView from 'scroll-into-view-if-needed';\n/*\nimport {\n Wrapper,\n SliderWrapper,\n Item,\n Image,\n ArrowLeft,\n ArrowRight,\n Main,\n Alt,\n QuickNav,\n QuickNavItem,\n QuickNavBtn,\n QuickNavImg,\n EnableNavigationButton,\n} from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport Lightbox from '../Lightbox/index';\nimport EmbededVideo from '../Video/EmbededVideo';\nimport QuickNavEmbeded from '../Video/QuickNavEmbeded';\nimport { notEmpty } from '../../utils/formats';\nimport ThreeSixty from '../ThreeSixty/ThreeSixty';\n*/\nimport { Media } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\n\ninterface GalleryProps {\n media?: Media[];\n placeholderImage?: string;\n}\n\nconst sliderSettings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 300,\n slidesToShow: 1,\n slidesToScroll: 1,\n};\n\nconst Gallery = ({ media, placeholderImage }: GalleryProps) => {\n const slider = useRef<Slider>(null);\n const quickNavRef = useRef<HTMLUListElement>(null);\n const isDragging = useRef(false);\n const [index, setIndex] = useState(0);\n const [lightbox, setLightbox] = useState(false);\n const [navigationDisabled, setNavigationDisabled] = useState(false);\n\n const beforeChange = useCallback((_: number, newIndex: number) => {\n const element = quickNavRef.current?.querySelectorAll('li')?.[newIndex];\n if (element) {\n scrollIntoView(element, { scrollMode: 'if-needed', block: 'nearest', inline: 'nearest' });\n }\n setIndex(newIndex);\n }, []);\n\n const onMouseDown = useCallback(() => {\n if (isDragging.current) {\n isDragging.current = false;\n }\n }, []);\n const onMouseMove = useCallback(() => {\n if (!isDragging.current) {\n isDragging.current = true;\n }\n }, []);\n\n const onClick = useCallback(() => {\n PubSub.publish('ImagesClick');\n if (!isDragging.current && !lightbox && !!media?.length) {\n setLightbox(true);\n }\n }, [lightbox, media]);\n\n const nextImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickNext();\n }, [slider]);\n\n const prevImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickPrev();\n }, [slider]);\n\n const goTo = (target: number) => {\n if (!slider || !slider.current) {\n return;\n }\n if (slider.current) {\n setIndex(target);\n slider.current.slickGoTo(target);\n }\n };\n\n const onDisableNavigation = () => {\n if (!isDragging.current) setNavigationDisabled(true);\n };\n const onEnableNavigation = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n isDragging.current = false;\n setNavigationDisabled(false);\n };\n\n const onToggleLightbox = useCallback(() => setLightbox(!lightbox), [lightbox]);\n\n const mediaLength = media?.length || 0;\n const placeholder = useMemo(\n () => placeholderImage || DEFAULT_PLACEHOLDER_IMAGE,\n [placeholderImage]\n );\n\n return <p>heheh</p>;\n\n /*\n return (\n <>\n <Wrapper>\n <Main>\n <SliderWrapper onMouseDown={onMouseDown} onMouseMove={onMouseMove} onClick={onClick}>\n <Slider\n {...sliderSettings}\n swipe={!navigationDisabled}\n touchMove={!navigationDisabled}\n swipeToSlide={!navigationDisabled}\n ref={slider}\n beforeChange={beforeChange}\n >\n {!!media?.length ? (\n media\n .filter((x) => x.type !== 'sphere')\n .map((m, i) => (\n <Item key={m.files[0].url || i}>\n {m.type === 'image' && (\n <Image\n src={\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '1170x')\n ?.url\n }\n alt={`Bild ${i + 1}`}\n />\n )}\n {m.type === 'threesixty' && (\n <ThreeSixty\n urls={m.files.map((x) => x.url)}\n visible={i === index}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n {m.type === 'embedded' && <EmbededVideo src={m.files[0].url} index={i + 1} />}\n </Item>\n ))\n ) : (\n <Item key={placeholder}>\n <Image src={placeholder} alt={`Bild 1`} />\n </Item>\n )}\n </Slider>\n {navigationDisabled && mediaLength > 1 && (\n <EnableNavigationButton>\n <ButtonSecondary onClick={onEnableNavigation} title=\"St\u00E4ng\">\n <ButtonContent>St\u00E4ng</ButtonContent>\n </ButtonSecondary>\n </EnableNavigationButton>\n )}\n </SliderWrapper>\n {!navigationDisabled && mediaLength > 1 && (\n <>\n <ArrowLeft onClick={prevImage} title=\"F\u00F6reg\u00E5ende bild\">\n <IconChevronLeft block />\n </ArrowLeft>\n <ArrowRight onClick={nextImage} title=\"N\u00E4sta bild\">\n <IconChevronRight block />\n </ArrowRight>\n </>\n )}\n </Main>\n <Alt>\n <QuickNav ref={quickNavRef}>\n {!!media?.length ? (\n media.map((m, i) => {\n const src =\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '225x150')?.url ||\n m.files[0].url;\n return (\n <QuickNavItem key={src || i} active={index === i}>\n <QuickNavBtn onClick={() => goTo(i)} title={`G\u00E5 till bild ${i + 1}`}>\n {m.type === 'image' && <QuickNavImg src={src} alt={`Bild ${i + 1}`} />}\n {m.type === 'threesixty' && <QuickNavImg src={src} alt={`Bild ${i + 1}`} />}\n {m.type === 'embedded' && <QuickNavEmbeded src={src} index={i} />}\n {m.type === 'sphere' && (\n <QuickNavImg src={m.files[0].url} alt={`Bild ${i + 1}`} />\n )}\n </QuickNavBtn>\n </QuickNavItem>\n );\n })\n ) : (\n <QuickNavItem key={placeholder} active>\n <QuickNavBtn onClick={() => goTo(0)} title={`G\u00E5 till bild 0`}>\n <QuickNavImg src={placeholder} alt={`Bild 1`} />\n </QuickNavBtn>\n </QuickNavItem>\n )}\n </QuickNav>\n </Alt>\n </Wrapper>\n {lightbox && !!media?.length && (\n <Lightbox media={media} index={index} onClose={onToggleLightbox} />\n )}\n </>\n );\n */\n};\n\nexport default Gallery;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const ProductPage = styled.div`\n display: flex;\n flex-direction: column;\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-direction: row;\n }\n`;\n\nexport const ProductPageAside = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-shrink: 0;\n width: calc(375px + ${size(2)});\n padding-right: ${size(2)};\n }\n`;\n\nexport const ProductPageMain = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex: 1 1 100%;\n min-width: 0;\n padding-left: ${size(2)};\n }\n`;\n\ntype ProductPageAsideSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n mobileOrder?: number;\n};\n\nexport const ProductPageAsideSection = styled.div<ProductPageAsideSectionProps>`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: ${(props) => props.mobileOrder};\n\n & + & {\n margin-top: ${size(2)};\n }\n\n :last-child {\n margin-bottom: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-top: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-bottom: ${size(8)};\n }\n }\n`;\n\nexport const ProductPageMainSection = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: 99;\n padding: ${size(4)} 0;\n border-top: ${size(1)} solid ${(props) => props.theme.color.accent};\n\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n padding-left: ${size(2)};\n padding-right: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(8)};\n padding-top: ${size(8)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n }\n`;\n\nexport const ProductPageContentLimit = styled.div`\n max-width: 420px;\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_QUERY from '../queries/SEARCH_ITEM_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen';\n\nconst useSearchItem = (id?: string): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_QUERY, {\n variables: { id: id as string },\n skip: !id,\n });\n\nexport default useSearchItem;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_QUERY = gql`\n query SearchItem($id: ID!) {\n vehicle(id: $id) {\n id\n documents\n contact {\n name\n email\n phonenumber\n avatar\n }\n manufacturer {\n description\n logotype\n name\n packageOption {\n description\n image\n link {\n title\n url\n }\n title\n }\n }\n packageOptions {\n description\n image\n link {\n title\n url\n }\n title\n }\n publishedAt\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n data {\n enginePower\n equipmentLevel\n fuelType\n gearbox\n gearboxType\n manufactureYear\n manufacturer\n mileage\n modelName\n modelSeries\n modelYear\n properties\n propertySet\n options\n registrationNumber\n salesName\n vin\n }\n description\n ecommerce {\n enabled\n reserved\n withTradeIn\n withHomeDelivery\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n financialOptions {\n description\n administrationFee\n downPayment {\n ...FinancialOptionDetail\n }\n duration {\n ...FinancialOptionDetail\n }\n effectiveInterest\n image\n includes\n includes\n interest\n link {\n title\n url\n }\n loanAmount\n logotype\n mileage {\n ...FinancialOptionDetail\n }\n monthlyCost\n name\n residual {\n ...FinancialOptionDetail\n }\n setupFee\n terms\n totalCreditCost\n totalResidualValue\n type\n url\n }\n media {\n type\n files {\n formats {\n format\n url\n }\n url\n }\n }\n location {\n city\n county\n streetAddress\n postalCode\n }\n price\n shortDescription\n title\n }\n }\n ${HoursOpen}\n ${FinancialOptionDetail}\n`;\n\nexport default SEARCH_ITEM_QUERY;\n", "import * as React from 'react';\n\nimport { Portal, PortalNamespace } from '../Portal/index';\n\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\nimport {\n Body,\n Content,\n Dialog,\n Header,\n Heading,\n UiBlock,\n Wrapper,\n Close,\n CloseBtn,\n} from './wrapper';\n\ninterface ModalProps {\n id?: string | null;\n title: string | null;\n children: React.ReactNode;\n onClose: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst Modal = ({ id, title, onClose, children }: ModalProps) => {\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper onClick={(e) => e.stopPropagation()}>\n <UiBlock onClick={onClose} title=\"St\u00E4ng modal\" />\n <Dialog>\n <Content>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn onClick={onClose} title=\"St\u00E4ng modal\">\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n </Content>\n </Dialog>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Modal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\n\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n white-space: normal;\n text-align: left;\n z-index: 90;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${(props) => props.theme.breakpoint.Sm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n z-index: -1;\n\n ${(props) => props.theme.breakpoint.LtMd} {\n animation: ${fadeIn} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n animation: ${fadeIn} 400ms ease forwards;\n }\n`;\n\nexport const Dialog = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.color.bg};\n z-index: 1;\n width: 100%;\n max-width: 680px;\n max-height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n align-self: flex-end;\n transform: translateY(100%);\n animation: ${noTransform} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n transform: translateY(${size(2)});\n animation: ${fadeIn} 400ms ease, ${noTransform} 400ms ease forwards;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const Header = styled.header`\n display: flex;\n align-items: center;\n min-height: 60px;\n padding: ${size(3)};\n padding-bottom: 0;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: block;\n padding: ${size(2)};\n`;\n\nexport const Body = styled.div`\n padding: ${size(3)};\n`;\n\nexport const Image = styled.img`\n display: block;\n width: calc(100% + ${size(6)});\n margin-left: ${size(-3)};\n margin-bottom: ${size(3)};\n`;\n\nexport const ModalFoldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n margin: ${size(-3)};\n margin-top: ${size(3)};\n padding: ${size(3)};\n`;\n\nexport const ModalFoldoutBody = styled.div``;\n", "import React, { Fragment } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport Leasing from './leasing';\nimport Loan from './loan';\nimport { FinancialOption } from '../../@types/codegen';\n\ninterface FinancialOptionsProps {\n id: string;\n financialOptions: FinancialOption[];\n}\n\nconst FinancialOptions = ({ id, financialOptions }: FinancialOptionsProps) => (\n <Repeat>\n <RepeatTiny>\n <VisualHeading>Andra finansieringsalternativ</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n {financialOptions.map((financialOption, index) => (\n <Fragment key={index}>\n {financialOption.type === 'leasing' && <Leasing financialOption={financialOption} />}\n {financialOption.type === 'loan' && <Loan id={id} financialOption={financialOption} />}\n </Fragment>\n ))}\n </RepeatTiny>\n </Repeat>\n);\n\nexport default FinancialOptions;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility/index';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport Modal from '../Modal/index';\nimport { Image, ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption } from '../../@types/codegen';\n\ninterface LeasingProps {\n financialOption: FinancialOption;\n}\n\nconst Leasing = ({ financialOption }: LeasingProps) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { image, description, monthlyCost, duration, mileage } = financialOption;\n\n return (\n <>\n {modal && (\n <Modal title=\"Privatleasing\" onClose={toggleModal}>\n {image && <Image src={image} alt=\"Privatleasing\" />}\n {description && <Content dangerouslySetInnerHTML={{ __html: description }} />}\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: 'M\u00E5nadskostnad',\n value: `${numberSeparator(monthlyCost || 0)} kr/m\u00E5n`,\n },\n {\n label: 'Bindningstid',\n value: `${duration?.current} m\u00E5nader`,\n },\n {\n label: '\u00C5rlig k\u00F6rstr\u00E4cka',\n value: `${numberSeparator(mileage?.current || 0)} mil/\u00E5r`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n </Modal>\n )}\n <OptionBox>\n <>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <OptionBoxHeading>{`ca ${numberSeparator(monthlyCost)} kr/m\u00E5n`}</OptionBoxHeading>\n )}\n </>\n <OptionBoxContent>\n <p>\n Privatleasing{' '}\n {mileage?.current && duration?.current && (\n <>\n <UtilityTextPrimary>{numberSeparator(mileage?.current)} mil/\u00E5r</UtilityTextPrimary>{' '}\n i <UtilityTextPrimary>{duration?.current} m\u00E5n</UtilityTextPrimary>.{' '}\n </>\n )}\n </p>\n <p>\n <ButtonInline onClick={toggleModal}>L\u00E4s mer</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n </>\n );\n};\n\nexport default Leasing;\n", "import * as React from 'react';\n\nimport { Logo, LogoImg, Content, Wrapper } from './wrapper';\n\ninterface IOptionBox {\n logo?: string;\n logo2x?: string;\n logoAlt?: string;\n children: React.ReactNode;\n}\n\nconst OptionBox = ({ logo, logo2x, logoAlt, children }: IOptionBox) => (\n <Wrapper>\n {logo && (\n <Logo>\n <LogoImg src={logo} srcSet={logo2x} alt={logoAlt} />\n </Logo>\n )}\n <Content>{children}</Content>\n </Wrapper>\n);\n\nexport default OptionBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n padding: ${size(1)};\n border: 1px solid ${(props) => props.theme.color.border};\n border-radius: 3px;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Logo = styled.div`\n position: relative;\n flex-shrink: 0;\n margin-right: ${size(1)};\n width: ${size(9.5)};\n height: ${size(6)};\n`;\n\nexport const LogoImg = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: auto;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n text-align: right;\n line-height: 1.4;\n`;\n\nexport const OptionBoxHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n\nexport const OptionBoxContent = styled.div`\n margin-top: ${size(0.5)};\n font-size: 0.875rem;\n\n p {\n margin: 0;\n }\n`;\n", "import React from 'react';\n\nimport { List, Item, Label, Value } from './wrapper';\n\ninterface ItemProps {\n label: string;\n value: string;\n}\n\ninterface Props {\n items: ItemProps[];\n}\n\nconst DataList = ({ items }: Props) => (\n <List>\n {items.map((item) => (\n <Item key={item.label}>\n <Label>{item.label}</Label>\n <Value>{item.value}</Value>\n </Item>\n ))}\n </List>\n);\n\nexport default DataList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-start;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility/index';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useLoanCalculation from '../../hooks/useLoan';\nimport { FinancialOption } from '../../@types/codegen';\nimport LoanModal from './LoanModal';\n\ninterface LoanProps {\n id: string;\n financialOption: FinancialOption;\n}\n\nconst Loan = ({ id, financialOption }: LoanProps) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { data } = useLoanCalculation(\n id,\n financialOption.duration?.current,\n financialOption.downPayment?.current,\n financialOption.residual?.current\n );\n\n const interest = data?.loan?.interest;\n const duration = data?.loan?.duration?.current;\n const monthlyCost = data?.loan?.monthlyCost;\n\n const logo = financialOption?.logotype || 'https://placehold.it/67x10';\n\n // Skeleton?\n if (\n financialOption.loanAmount === undefined ||\n financialOption.loanAmount === null ||\n interest === undefined ||\n duration === undefined ||\n monthlyCost === undefined ||\n interest === null ||\n duration === null ||\n monthlyCost === null\n ) {\n return (\n <OptionBox logo={logo} logoAlt=\"Logotyp\">\n <OptionBoxHeading>Laddar...</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>Laddar...</p>\n </OptionBoxContent>\n </OptionBox>\n );\n }\n\n return (\n <>\n {modal && <LoanModal id={id} financialOption={financialOption} onClose={toggleModal} />}\n <OptionBox logo={logo} logoAlt=\"Logotyp\">\n <>\n <OptionBoxHeading>{`${numberSeparator(monthlyCost)} kr/m\u00E5n*`}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>\n Delbetala{' '}\n {financialOption.loanAmount && duration && (\n <>\n <UtilityTextPrimary>\n {numberSeparator(financialOption.loanAmount)} kr\n </UtilityTextPrimary>{' '}\n i <UtilityTextPrimary>{duration} m\u00E5n</UtilityTextPrimary>.\n </>\n )}\n </p>\n\n <p>\n {`*Ber\u00E4knat p\u00E5 ${(interest * 100).toFixed(2)}% r\u00E4nta. `}\n <ButtonInline onClick={toggleModal}>L\u00E4s mer</ButtonInline>\n </p>\n </OptionBoxContent>\n </>\n </OptionBox>\n </>\n );\n};\n\nexport default Loan;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport LOAN_CALCULATION from '../queries/LOAN_CALCULATION';\nimport { QueryLoanArgs, Query } from '../@types/codegen';\n\nconst useLoanCalculation = (\n id: string,\n duration?: number,\n downPayment?: number,\n residual?: number\n): QueryResult<Query, QueryLoanArgs> =>\n useQuery<Query, QueryLoanArgs>(LOAN_CALCULATION, {\n variables: {\n id,\n duration: duration as number,\n downPayment: downPayment as number,\n residual: (residual as number) || 0,\n },\n skip: duration === undefined || downPayment === undefined,\n });\n\nexport default useLoanCalculation;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst LOAN_CALCULATION = gql`\n query LoanCalculation($id: ID!, $duration: Int!, $downPayment: Int!, $residual: Float!) {\n loan(id: $id, duration: $duration, downPayment: $downPayment, residual: $residual) {\n downPayment {\n ...FinancialOptionDetail\n }\n effectiveInterest\n duration {\n ...FinancialOptionDetail\n }\n residual {\n ...FinancialOptionDetail\n }\n mileage {\n ...FinancialOptionDetail\n }\n interest\n loanAmount\n totalCreditCost\n totalResidualValue\n monthlyCost\n }\n }\n ${FinancialOptionDetail}\n`;\n\nexport default LOAN_CALCULATION;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport useLoanCalculation from '../../hooks/useLoan';\nimport Modal from '../Modal/index';\nimport { ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport LogoBox from '../LogoBox/index';\nimport { Repeat, RepeatSmall, RepeatTiny } from '../Repeat/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { ButtonClear, ButtonContent } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption, Query } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport SliderWithLabel from '../RangeSlider/SliderWithLabel';\n\nconst stepGenerator = (\n step: number,\n max: number,\n steps: number[] = [],\n current?: number\n): number[] => {\n if (step === 0 && current === undefined) return steps;\n\n if (current !== undefined && current >= max && step !== 0) {\n return steps;\n }\n\n const nextCurrent = current ? step + current : step;\n steps.push(nextCurrent);\n return stepGenerator(step, max, steps, nextCurrent);\n};\n\ninterface LoanModalProps {\n id: string;\n financialOption: FinancialOption;\n onClose: () => void;\n}\n\nconst LoanModal = ({ id, financialOption, onClose }: LoanModalProps) => {\n const [tmp, setTmp] = useState<Query>();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => {\n if (!extend) {\n PubSub.publish('FinanceInterest');\n }\n setExtend(!extend);\n }, [extend]);\n\n const [variables, setVariables] = useState({\n duration: financialOption.duration?.current,\n downPayment: financialOption.downPayment?.current,\n residual: financialOption.residual?.current,\n });\n\n const { duration, downPayment, residual } = variables;\n const { loading, data } = useLoanCalculation(id, duration, downPayment, residual);\n useEffect(() => {\n if (data) {\n setTmp(data);\n setVariables({\n duration: data?.loan?.duration?.current || 0,\n downPayment: data?.loan?.downPayment?.current || 0,\n residual: data?.loan?.residual?.current || 0,\n });\n }\n }, [data]);\n\n const loan = data?.loan || tmp?.loan;\n\n const downPaymentCurrent = loan?.downPayment?.current || 0;\n const downPaymentMin = loan?.downPayment?.min || 0;\n const downPaymentMax = loan?.downPayment?.max || 0;\n const downPaymentStep = loan?.downPayment?.step || 0;\n const downPaymentSteps = stepGenerator(downPaymentStep, downPaymentMax);\n const onDownPaymentChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, downPayment: values[0] });\n },\n [variables]\n );\n\n const durationCurrent = loan?.duration?.current || 0;\n const durationMin = loan?.duration?.min || 0;\n const durationMax = loan?.duration?.max || 0;\n const durationStep = loan?.duration?.step || 0;\n const durationSteps = stepGenerator(durationStep, durationMax);\n const onDurationChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, duration: values[0] });\n },\n [variables]\n );\n\n const residualCurrent = (loan?.residual?.current || 0) * 100 || 0;\n const residualMin = (loan?.residual?.min || 0) * 100 || 0;\n const residualMax = (loan?.residual?.max || 0) * 100 || 0;\n const residualStep = (loan?.residual?.step || 0) * 100 || 0;\n const residualSteps = stepGenerator(residualStep, residualMax);\n const onResidualChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, residual: values[0] / 100 });\n },\n [variables]\n );\n\n const interestText = ((loan?.interest || 0) * 100).toFixed(2);\n const effectiveInterestText = ((loan?.effectiveInterest || 0) * 100).toFixed(2);\n\n return (\n <Modal title=\"L\u00E5nealternativ\" onClose={onClose}>\n <Repeat>\n <ContentLogo>\n {financialOption?.description && (\n <ContentLogoText>\n <Content>\n <p>{financialOption.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {financialOption?.image && (\n <ContentLogoMedia>\n <LogoBox logo={financialOption.image} alt={financialOption.name || 'Logotyp'} wide />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n <Repeat>\n <RepeatSmall>\n <SliderWithLabel\n label=\"Kontantinsatts\"\n values={[downPaymentCurrent]}\n domain={[downPaymentMin, downPaymentMax]}\n steps={downPaymentSteps}\n unit=\"kr\"\n formatValues\n loading={loading}\n onChange={onDownPaymentChange}\n />\n </RepeatSmall>\n <RepeatSmall>\n <SliderWithLabel\n label=\"Avbetalning\"\n values={[durationCurrent]}\n domain={[durationMin, durationMax]}\n steps={durationSteps}\n unit=\"m\u00E5n\"\n loading={loading}\n onChange={onDurationChange}\n />\n </RepeatSmall>\n {residual !== undefined && residualMax !== 0 && (\n <RepeatSmall>\n <SliderWithLabel\n label=\"Restskuld\"\n values={[residualCurrent]}\n domain={[residualMin, residualMax]}\n steps={residualSteps}\n unit=\"%\"\n loading={loading}\n onChange={onResidualChange}\n />\n </RepeatSmall>\n )}\n <RepeatSmall>\n <RepeatTiny>\n <Content small>\n <p>{`*Ber\u00E4knat p\u00E5 ${interestText} % r\u00E4nta (effektivt ${effectiveInterestText} %)${\n loan?.mileage !== null ? `och en \u00E5rlig k\u00F6rstr\u00E4cka om ${loan?.mileage} mil.` : ''\n }`}</p>\n </Content>\n </RepeatTiny>\n </RepeatSmall>\n\n <RepeatSmall>\n <ButtonClear\n onClick={onToggleExtend}\n title={extend ? 'Visa mindre information' : 'Visa mer information'}\n >\n <ButtonContent>{extend ? 'Mindre information' : 'Mer information'}</ButtonContent>\n </ButtonClear>\n </RepeatSmall>\n <>\n {extend && (\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: 'R\u00E4nta',\n value: `${interestText} %`,\n },\n {\n label: 'Effektiv r\u00E4nta',\n value: `${effectiveInterestText} %`,\n },\n {\n label: 'Uppl\u00E4ggningskostnad',\n value: `${numberSeparator(financialOption?.setupFee || 0)} kr`,\n },\n {\n label: 'Administrativa avgifter',\n value: `${numberSeparator(financialOption?.administrationFee || 0)} kr/m\u00E5n`,\n },\n {\n label: 'Total kreditkostnad',\n value: `${numberSeparator(loan?.totalCreditCost || 0)} kr`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n )}\n </>\n </Repeat>\n </Modal>\n );\n};\n\nexport default LoanModal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ContentLogo = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n }\n`;\n\nexport const ContentLogoText = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 auto;\n }\n`;\n\nexport const ContentLogoMedia = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-top: ${size(2)};\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex-shrink: 0;\n padding-left: ${size(4)};\n }\n`;\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { numberSeparator } from '../../utils/formats';\nimport RangeSliderLabel from '../RangeSliderLabel/index';\nimport { RepeatTiny } from '../Repeat/index';\nimport RangeSliderSimple from './RangeSliderSimple';\n\ninterface SliderWithLabelProps {\n label: string;\n values: number[];\n domain: number[];\n steps: number[];\n loading: boolean;\n unit: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n}\n\nconst SliderWithLabel = ({\n label,\n values,\n domain,\n steps,\n loading,\n unit,\n formatValues,\n onChange,\n}: SliderWithLabelProps) => {\n const [local, setLocal] = useState<number[] | undefined>(steps);\n\n const onUpdate = useCallback((nextValues: readonly number[]) => {\n setLocal([...nextValues]);\n }, []);\n\n useEffect(() => {\n if (!loading) setLocal(undefined);\n }, [loading]);\n\n return (\n <>\n <RepeatTiny>\n <RangeSliderLabel\n label={label}\n value={`${numberSeparator(local?.[0] || values[0])}${unit ? ` ${unit}` : ''}`}\n />\n </RepeatTiny>\n <RepeatTiny>\n <RangeSliderSimple\n loading={loading}\n values={values}\n domain={domain}\n steps={steps}\n onChange={onChange}\n onUpdate={onUpdate}\n unit={unit}\n formatValues={formatValues}\n />\n </RepeatTiny>\n </>\n );\n};\n\nexport default SliderWithLabel;\n", "import React from 'react';\n\nimport { Wrapper, Label, Value } from './wrapper';\n\ninterface Props {\n label: string;\n value?: React.ReactNode;\n highlight?: boolean;\n}\n\nconst RangeSliderLabel = ({ label, value, highlight }: Props) => (\n <Wrapper>\n <Label>{label}</Label>\n {value && <Value isHighlighted={highlight}>{value}</Value>}\n </Wrapper>\n);\n\nexport default RangeSliderLabel;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const Label = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex: 1 1 auto;\n`;\n\ntype ValueProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n isHighlighted?: boolean;\n};\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))<ValueProps>`\n flex-shrink: 0;\n padding-left: ${size(2)};\n font-size: 1.125rem;\n\n ${({ isHighlighted }) =>\n isHighlighted &&\n css`\n font-size: 1.375rem;\n color: ${(props) => props.theme.color.textDark} !important;\n `}\n`;\n", "import React from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport { Bar, RangeSpan, RangeSpanItem, Slider as OwnSlider } from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n onUpdate?: (values: readonly number[]) => void;\n}\n\nconst RangeSliderSimple = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n onChange,\n onUpdate,\n}: RangeSliderProps) => {\n const first = steps[0];\n const second = steps[1];\n const step = second - first;\n\n const currentMin = formatValues ? numberSeparator(domain[0]) : domain[0];\n const currentMax = formatValues ? numberSeparator(domain[1]) : domain[1];\n\n if (steps.length < 2) {\n return null;\n }\n\n return (\n <>\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n {false && (\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n </RangeSpan>\n )}\n </>\n );\n};\n\nexport default RangeSliderSimple;\n", "import React from 'react';\nimport { InsuranceOption, Branch } from '../../@types/codegen';\nimport Insurance from './Insurance';\nimport InsuranceFree from './InsuranceFree';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst InsuranceOptions = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n if (!insuranceOptions.length) {\n return null;\n }\n\n if (insuranceOptions.length > 0) {\n if (insuranceOptions[0].requiresDistance && insuranceOptions[0].requiresPersonalNumber)\n return <Insurance id={id} branch={branch} insuranceOptions={insuranceOptions} />;\n\n return <InsuranceFree insuranceOptions={insuranceOptions} />;\n }\n\n return null;\n};\n\nexport default InsuranceOptions;\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption, Branch } from '../../@types/codegen';\nimport InsuranceModal from './InsuranceModal';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <InsuranceModal\n id={id}\n branch={branch}\n onClose={toggleModal}\n insuranceOptions={insuranceOptions[0]}\n />\n )}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>V\u00E4lj till f\u00F6rs\u00E4kring</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || 'Logotyp'}\n >\n <OptionBoxHeading>F\u00E5 prisf\u00F6rslag</OptionBoxHeading>\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>Mer information</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React, { useState, useCallback } from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat, RepeatTiny, RepeatSmall } from '../Repeat/index';\nimport LogoBox from '../LogoBox/index';\nimport DetailBox from '../DetailBox/index';\nimport ExtendInfo from '../ExtendInfo/index';\nimport Snackbar from '../Snackbar/index';\nimport { UtilityTextBold } from '../Utility/index';\nimport InputLabel from '../InputLabel/index';\nimport InputText from '../InputText/index';\nimport InputCheckbox from '../InputCheckbox/index';\nimport InputSelect, { OptionProps } from '../InputSelect/index';\nimport { H4 } from '../Heading/index';\nimport { InputGroup, InputGroupColumn } from '../InputGroup/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport { ColumnRow, ColumnRowItem } from '../ColumnRow/index';\nimport useInsuranceCalculation from '../../hooks/useInsurance';\nimport { ssnIsValid } from '../../utils/ssn';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { DrivingDistance, InsuranceOption, Branch } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\n\ninterface FormData {\n ssn: string;\n drivingDistance: DrivingDistance;\n}\n\ninterface InsuranceModal {\n id: string;\n branch?: Branch | null;\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceModal = ({ id, branch, onClose, insuranceOptions }: InsuranceModal) => {\n const [form, setForm] = useState<FormData>({\n ssn: '',\n drivingDistance: DrivingDistance.Between0And1000,\n });\n const [payload, setPayload] = useState<FormData>();\n const { loading, data, error } = useInsuranceCalculation(\n id,\n branch?.id ? branch?.id : undefined,\n ssnIsValid(payload?.ssn) ? payload?.ssn : undefined,\n payload?.drivingDistance\n );\n\n const onChangeSsn = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setForm({ ...form, ssn: e.currentTarget.value }),\n [form]\n );\n\n const onChangeDrivingDistance = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) =>\n setForm({ ...form, drivingDistance: e.currentTarget.value as DrivingDistance }),\n [form]\n );\n\n const onShowInsurances = useCallback(() => {\n PubSub.publish('InsuranceInterest');\n setPayload(form);\n }, [form]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13 && ssnIsValid(form.ssn) && !loading) {\n onShowInsurances();\n }\n },\n [form]\n );\n\n const options: OptionProps[] = [\n { value: DrivingDistance.Between0And1000, displayName: '0 - 1000' },\n { value: DrivingDistance.Between1000And1500, displayName: '1000 - 1500' },\n { value: DrivingDistance.Between1500And2000, displayName: '1500 - 2000' },\n { value: DrivingDistance.Between2000And2500, displayName: '2000 - 2500' },\n { value: DrivingDistance.Over2500, displayName: '2500+' },\n ];\n\n return (\n <Modal title=\"F\u00F6rs\u00E4kring\" onClose={onClose}>\n {(insuranceOptions?.description || insuranceOptions?.logotype) && (\n <Repeat>\n <ContentLogo>\n {insuranceOptions.description && (\n <ContentLogoText>\n <Content>\n <p>{insuranceOptions.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {insuranceOptions.logotype && (\n <ContentLogoMedia>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || 'Logotyp'}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n )}\n\n <Repeat>\n <RepeatSmall>\n <RepeatTiny>\n <InputGroup>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-personalnumber\">Personnummer</InputLabel>\n <InputText\n placeholder=\"\u00C5\u00C5\u00C5\u00C5MMDD-XXXX\"\n label=\"Personnummer\"\n value={form.ssn}\n onChange={onChangeSsn}\n onKeyDown={onKeyDown}\n id=\"input-insurance-personalnumber\"\n />\n </InputGroupColumn>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-mileage\">\n Uppskattad k\u00F6rstr\u00E4cka per \u00E5r\n </InputLabel>\n <InputSelect\n value={form.drivingDistance}\n onChange={onChangeDrivingDistance}\n options={options}\n unit=\"mil\"\n title=\"Uppskattad k\u00F6rstr\u00E4cka per \u00E5r\"\n />\n </InputGroupColumn>\n </InputGroup>\n </RepeatTiny>\n <RepeatTiny>\n <ButtonPrimary\n fullWidth\n disabled={!ssnIsValid(form.ssn) || loading}\n onClick={onShowInsurances}\n >\n <ButtonContent>Visa f\u00F6rs\u00E4kringar</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n </RepeatSmall>\n {false && (\n <RepeatSmall>\n <InputCheckbox id=\"input-insurance-save-personalnumber\">\n Spara personnummer p\u00E5 denna enhet\n </InputCheckbox>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <Content small>\n <p>\n Spara personnummer p\u00E5 denna dator f\u00F6r att direkt visa f\u00F6rs\u00E4kringskostnaderna i Wayke.\n Personnumret lagras inte hos Wayke utan finns bara sparad i din webbl\u00E4sare.\n </p>\n </Content>\n </RepeatSmall>\n </Repeat>\n\n {loading && (\n <Repeat>\n <Loader />\n </Repeat>\n )}\n\n {error && (\n <Repeat>\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n Kunde inte h\u00E4mta f\u00F6rs\u00E4kringar. V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n </Repeat>\n )}\n\n <>\n {data?.insurances && (\n <Repeat>\n {data?.insurances.map((insurance) => (\n <Repeat key={insurance.name}>\n <DetailBox\n heading={`${numberSeparator(insurance.price)} ${insurance.unit}`}\n description={insurance.name}\n >\n <Repeat>\n <>\n {insurance.description && (\n <RepeatTiny>\n <Content>\n <p>{insurance.description}</p>\n </Content>\n </RepeatTiny>\n )}\n </>\n <>\n {insurance.url && (\n <RepeatTiny>\n <ButtonInline\n as=\"a\"\n href={insurance.url || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n F\u00F6rk\u00F6psinformation och villkor (\u00F6ppnas i ny flik)\n </ButtonInline>\n </RepeatTiny>\n )}\n </>\n </Repeat>\n {insurance.items && insurance.items.length > 0 && (\n <Repeat>\n <H4>F\u00F6rs\u00E4kringen inneh\u00E5ller</H4>\n {insurance.items.map((item) => (\n <RepeatSmall key={item.name || ''}>\n <ExtendInfo title={item.name || ''}>{item.description}</ExtendInfo>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n {insurance.addons && insurance.addons.length > 0 && (\n <Repeat>\n <H4>V\u00E4lj till</H4>\n {insurance.addons.map((addon) => (\n <RepeatSmall key={addon.title || ''}>\n <ColumnRow>\n <ColumnRowItem>\n <ExtendInfo title={addon.title || ''}>{addon.description}</ExtendInfo>\n </ColumnRowItem>\n <ColumnRowItem>\n <UtilityTextBold>\n +{addon.price} {addon.unit}\n </UtilityTextBold>\n </ColumnRowItem>\n </ColumnRow>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n </DetailBox>\n </Repeat>\n ))}\n </Repeat>\n )}\n </>\n </Modal>\n );\n};\n\nexport default InsuranceModal;\n", "import React from 'react';\n\nimport { Wrapper, Main, Heading, Description, Footer, Foldout } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n heading: string;\n description?: string;\n children: React.ReactNode;\n}\n\nconst DetailBox = ({ heading, description, children }: Props) => {\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);\n\n const extendBtnText = extend ? 'Mindre information' : 'Mer information';\n\n return (\n <Wrapper>\n <Main>\n <Heading>{heading}</Heading>\n {description && <Description>{description}</Description>}\n <Footer>\n <ButtonClear onClick={onToggleExtend}>\n <ButtonContent>{extendBtnText}</ButtonContent>\n </ButtonClear>\n </Footer>\n </Main>\n {extend && <Foldout>{children}</Foldout>}\n </Wrapper>\n );\n};\n\nexport default DetailBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { H2 } from '../Heading/index';\n\nexport const Wrapper = styled.article`\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n overflow: hidden;\n`;\n\nexport const Main = styled.div`\n padding: ${size(2.5)};\n`;\n\nexport const Heading = styled(H2).attrs(() => ({\n as: 'h1',\n}))`\n margin-bottom: 0;\n`;\n\nexport const Description = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Footer = styled.div`\n margin-top: ${size(1)};\n color: red;\n`;\n\nexport const Foldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n padding: ${size(2.5)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Title, Info, InfoBtn, Extend } from './wrapper';\nimport { IconInfo } from '../Icon/index';\n\ninterface Props {\n title: string;\n children?: React.ReactNode;\n}\n\nconst ExtendInfo = ({ title, children }: Props) => {\n const [extend, setExtend] = useState(false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Wrapper>\n <Header>\n <Title>{title}</Title>\n {children && (\n <Info>\n <InfoBtn onClick={onToggleExtend} title=\"Mer information\">\n <IconInfo block />\n </InfoBtn>\n </Info>\n )}\n </Header>\n {extend && <Extend>{children}</Extend>}\n </Wrapper>\n );\n};\n\nexport default ExtendInfo;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Title = styled.div``;\n\nexport const Info = styled.div`\n margin-left: ${size(1)};\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n font: inherit;\n font-size: 1em;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Extend = styled.div`\n padding-top: ${size(1)};\n margin-top: ${size(1)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875em;\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: string;\n htmlFor?: string;\n}\n\nconst InputLabel = ({ children, htmlFor }: Props) => (\n <Wrapper htmlFor={htmlFor}>{children}</Wrapper>\n);\n\nexport default InputLabel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n margin-bottom: ${size(0.5)};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Input } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n value: string;\n placeholder: string;\n label: string;\n};\n\nconst InputText = ({ placeholder, label, value, id, onChange, onKeyDown }: Props) => (\n <Wrapper>\n <Input\n placeholder={placeholder}\n value={value}\n id={id}\n aria-label={label}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Wrapper>\n);\n\nexport default InputText;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'text',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import * as React from 'react';\n\nimport { Input, Label, LabelText, Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n id: string;\n children: React.ReactNode;\n};\n\nconst InputCheckbox = ({ children, ...props }: Props) => {\n const { id } = props;\n return (\n <Wrapper aria-labelledby={id ? `${id}-label` : undefined}>\n <Input\n {...(props as React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >)}\n />\n <Label id={`${id}-label`} htmlFor={id}>\n <LabelText>{children}</LabelText>\n </Label>\n </Wrapper>\n );\n};\n\nexport default InputCheckbox;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Label = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: flex;\n align-items: flex-start;\n font-size: 1rem;\n line-height: 1.2;\n cursor: pointer;\n\n :before {\n content: '';\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${size(2.5)};\n height: ${size(2.5)};\n margin-right: ${size(1)};\n background-color: ${(props) => props.theme.color.accent};\n color: currentColor;\n border: none;\n box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.07);\n text-align: center;\n font-size: 15px;\n cursor: pointer;\n border-radius: 3px;\n margin-top: -2px;\n }\n`;\n\nexport const Wrapper = styled((props) => <div {...props} />).attrs(({ type, checked }) => ({\n role: type || 'checkbox',\n 'aria-checked': checked,\n}))`\n ${({ error }) =>\n error &&\n css`\n ${Label} {\n color: ${(props) => props.theme.color.ui.negative};\n\n :before {\n background-color: ${(props) => props.theme.color.ui.negativeLight};\n }\n }\n `}\n`;\n\nexport const Input = styled((props) => (\n <input {...props} className={`${props.checked ? 'checked' : undefined} ${props.className}`} />\n)).attrs(({ type, checked }) => ({\n checked,\n type: type || 'checkbox',\n}))`\n position: fixed;\n left: -9999px;\n opacity: 0;\n\n &[disabled] {\n & + ${Label} {\n color: ${(props) => props.theme.color.disabledText};\n\n &:before {\n background-color: ${(props) => props.theme.color.disabledBg};\n cursor: not-allowed;\n }\n }\n }\n\n &:checked,\n &.checked {\n & + ${Label} {\n :before {\n content: '\u2713';\n }\n }\n }\n`;\n\nexport const LabelText = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\n\nexport interface OptionProps {\n value: number | string;\n displayName?: number | string | null;\n}\n\ninterface Props {\n value?: string | number;\n options?: OptionProps[];\n unit?: string;\n title: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst InputSelect = ({ value, options, onChange, unit, title }: Props) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title={title} aria-label={title}>\n {options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default InputSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\nconst selectPadding = size(2);\n\nexport const Wrapper = styled.div`\n position: relative;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0 ${selectPadding};\n padding-right: calc(${iconSize} + ${selectPadding});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: ${selectPadding};\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const InputGroup = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n margin: ${size(-0.5)};\n }\n`;\n\nexport const InputGroupColumn = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n & + & {\n margin-top: ${size(1)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 50%;\n padding: ${size(0.5)};\n }\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n`;\n\nexport const ColumnRowItem = styled.div`\n flex: 1 1 auto;\n\n :last-child:not(:only-child) {\n flex: 0 0 auto;\n }\n\n & + & {\n padding-left: ${size(2)};\n }\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport INSURANCE_CALCULATION from '../queries/INSURANCE_CALCULATION';\n\nimport { DrivingDistance, QueryInsurancesArgs, Query } from '../@types/codegen';\n\nconst useInsuranceCalculation = (\n id: string,\n branchId?: string,\n personalNumber?: string,\n drivingDistance?: DrivingDistance\n): QueryResult<Query, QueryInsurancesArgs> =>\n useQuery<Query, QueryInsurancesArgs>(INSURANCE_CALCULATION, {\n variables: {\n id,\n branch: branchId as string,\n personalNumber: personalNumber as string,\n drivingDistance: drivingDistance as DrivingDistance,\n },\n skip: personalNumber === undefined || drivingDistance === undefined || branchId === undefined,\n });\n\nexport default useInsuranceCalculation;\n", "import { gql } from '@apollo/client';\n\nconst INSURANCE_CALCULATION = gql`\n query InsuranceCalculation(\n $id: ID!\n $branch: ID\n $personalNumber: PersonalNumber!\n $drivingDistance: DrivingDistance!\n ) {\n insurances(\n id: $id\n branch: $branch\n personalNumber: $personalNumber\n drivingDistance: $drivingDistance\n ) {\n name\n price\n unit\n description\n logotype\n addons {\n id\n title\n description\n price\n unit\n exclusions\n }\n items {\n name\n description\n }\n legality {\n description\n url\n }\n terms\n url\n }\n }\n`;\n\nexport default INSURANCE_CALCULATION;\n", "export const ssnIsValid = (s?: string) => (s ? /^\\d{2,4}\\d{2}\\d{2}\\-?\\d{4}$/.test(s) : false);\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxContent } from '../OptionBox/wrapper';\nimport Content from '../Content/index';\nimport { marked } from 'marked';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption } from '../../@types/codegen';\nimport InsuranceFreeModal from './InsuranceFreeModal';\n\ninterface InsuranceOptions {\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ insuranceOptions }: InsuranceOptions) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && <InsuranceFreeModal onClose={toggleModal} insuranceOptions={insuranceOptions[0]} />}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{insuranceOptions[0]?.insuranceHeader ?? 'F\u00F6rs\u00E4kring'}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || 'Logotyp'}\n >\n {insuranceOption.description && (\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOption.description),\n }}\n />\n )}\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>Mer information</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat } from '../Repeat/index';\nimport { ButtonInline } from '../Button/index';\nimport LogoBox from '../LogoBox/index';\nimport { InsuranceOption } from '../../@types/codegen';\nimport { marked } from 'marked';\n\ninterface InsuranceFreeModal {\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceFreeModal = ({ onClose, insuranceOptions }: InsuranceFreeModal) => {\n return (\n <Modal title={insuranceOptions?.insuranceHeader ?? 'F\u00F6rs\u00E4kring'} onClose={onClose}>\n {insuranceOptions?.longDescription && (\n <Repeat>\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOptions.longDescription),\n }}\n ></Content>\n </Repeat>\n )}\n {insuranceOptions?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={insuranceOptions.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n L\u00E4s mer om f\u00F6rs\u00E4kringen (\u00D6ppnas i ett nytt f\u00F6nster)\n </ButtonInline>\n </Repeat>\n )}\n {insuranceOptions?.logotype && (\n <Repeat>\n <LogoBox logo={insuranceOptions.logotype} alt={insuranceOptions.name || 'Logotyp'} wide />\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default InsuranceFreeModal;\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { Maybe, PackageOption } from '../../@types/codegen';\n\ninterface ManufacturerPackageOption {\n packageOption?: Maybe<PackageOption>;\n}\n\nconst ManufacturerPackageOption = ({ packageOption }: ManufacturerPackageOption) => {\n if (!packageOption) {\n return null;\n }\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title\n ? packageOption.link.title\n : 'L\u00E4s mer (\u00D6ppnas i ett nytt f\u00F6nster)'}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt=\"Logotyp\" wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n );\n};\n\nexport default ManufacturerPackageOption;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport ActionList from '../../components/ActionList/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../../components/Button/index';\nimport CheckMarkList, { CheckMarkListItem } from '../../components/CheckMarkList/index';\nimport Content from '../../components/Content/index';\nimport SwitchBar from '../../components/SwitchBar/index';\nimport {\n Manufacturer,\n PackageOption,\n Ecommerce,\n ContactOptions,\n Branch,\n} from '../../@types/codegen';\nimport BranchModal from './BranchModal';\nimport PackageOptionModal, { PackageOptionModalData } from './PackageOptionModal';\n\ninterface CheckList {\n manufacturer?: Manufacturer | null;\n packageOptions: PackageOption[];\n ecommerce?: Ecommerce | null;\n branch?: Branch | null;\n contact?: ContactOptions | null;\n loadingCentralStorageVehicle: boolean;\n toggleEcomModal: () => void;\n}\n\nconst CheckList = ({\n manufacturer,\n packageOptions,\n ecommerce,\n branch,\n contact,\n toggleEcomModal,\n loadingCentralStorageVehicle,\n}: CheckList) => {\n const [modalBranch, setModalBranch] = useState(false);\n const openModalBranch = useCallback(() => setModalBranch(true), []);\n const closeModalBranch = useCallback(() => setModalBranch(false), []);\n\n const [modal, setModal] = useState<PackageOptionModalData>();\n const onOpen = useCallback((nextModal: PackageOptionModalData) => setModal(nextModal), []);\n const onClose = useCallback(() => setModal(undefined), []);\n\n useEffect(() => {\n if ((branch || contact) && modalBranch) {\n setModalBranch(false);\n }\n }, [branch, contact]);\n\n const packageOption = manufacturer?.packageOption;\n\n return (\n <>\n {modalBranch && (\n <BranchModal\n loading={loadingCentralStorageVehicle}\n connections={branch?.connections}\n onClose={closeModalBranch}\n />\n )}\n {modal && <PackageOptionModal packageOption={modal} onClose={onClose} />}\n <Repeat>\n <CheckMarkList>\n {packageOption?.title && (\n <CheckMarkListItem>\n <>\n Inkl.{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>{' '}\n begagnatgaranti\n </>\n </CheckMarkListItem>\n )}\n {packageOptions?.map((packageOption, index) => (\n <CheckMarkListItem key={packageOption.title || index}>\n <>\n Inkl.{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>\n </>\n </CheckMarkListItem>\n ))}\n {ecommerce?.withHomeDelivery && <CheckMarkListItem>Hemleverans</CheckMarkListItem>}\n </CheckMarkList>\n </Repeat>\n <Repeat>\n {ecommerce && ecommerce.enabled && (\n <RepeatTiny>\n <ButtonPrimary disabled={!!ecommerce.reserved} fullWidth onClick={toggleEcomModal}>\n <ButtonContent>K\u00F6p bilen online</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n )}\n {ecommerce?.reserved && (\n <RepeatTiny>\n <SwitchBar\n title=\"Bilen \u00E4r reserverad\"\n body=\"Denna bil \u00E4r reserverad av en annan k\u00F6pare.\"\n >\n <Content>\n <p>Denna bil \u00E4r reserverad av en annan k\u00F6pare.</p>\n </Content>\n </SwitchBar>\n </RepeatTiny>\n )}\n <ActionList branch={branch} contact={contact} />\n </Repeat>\n {(branch?.connections.length || 0) > 1 && (\n <Repeat>\n <SwitchBar title=\"Centrallagerbil\" actionTitle=\"Byt anl\u00E4ggning\" onClick={openModalBranch}>\n <Content>\n <p>\n Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar. Byt\n anl\u00E4ggning f\u00F6r att visa kontaktuppgifter till just den anl\u00E4ggningen.\n </p>\n </Content>\n </SwitchBar>\n </Repeat>\n )}\n </>\n );\n};\n\nexport default CheckList;\n", "import React, { useCallback } from 'react';\n\nimport ToggleItem from './toggle-item';\nimport { Maybe, ContactOptions, Branch } from '../../@types/codegen';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport PubSub from '../../utils/pubsub/pubsub';\n\ninterface ActionListProps {\n branch?: Maybe<Branch>;\n contact?: Maybe<ContactOptions>;\n}\n\nconst ActionList = ({ contact, branch }: ActionListProps) => {\n const email = contact?.email || branch?.contact?.email;\n const phonenumber = contact?.phonenumber || branch?.contact?.phonenumber;\n\n const onClickMailVisible = useCallback(() => PubSub.publish('MailVisible'), []);\n const onClickPhoneVisible = useCallback(() => PubSub.publish('PhonenumberVisible'), []);\n const onClickPhoneValue = useCallback(() => PubSub.publish('PhonenumberCall'), []);\n\n if (!email && !phonenumber) {\n return null;\n }\n\n return (\n <>\n {email && (\n <ToggleItem\n onClickVisible={onClickMailVisible}\n title=\"Visa mailadress\"\n value={email}\n type=\"mailto\"\n />\n )}\n {phonenumber && (\n <ToggleItem\n title=\"Visa telefonnummer\"\n value={formatPhonenumber(phonenumber)}\n type=\"tel\"\n onClickVisible={onClickPhoneVisible}\n onClickValue={onClickPhoneValue}\n />\n )}\n </>\n );\n};\n\nexport default ActionList;\n", "import React, { useState, useCallback } from 'react';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { RepeatTiny } from '../Repeat/index';\n\ninterface ToggleItemProps {\n title: string;\n value: string;\n type: 'tel' | 'mailto';\n onClickVisible?: () => void;\n onClickValue?: () => void;\n}\n\nconst initialValue: { [key: string]: boolean | undefined } = {};\n\nconst getInitialValue = (title: string) => title && !!initialValue[title];\n\nconst ToggleItem = ({ title, value, type, onClickVisible, onClickValue }: ToggleItemProps) => {\n const [visible, setVisible] = useState(() => getInitialValue(type));\n\n const _onClickValue = useCallback(() => {\n if (onClickValue) {\n onClickValue();\n }\n }, []);\n\n const onClick = useCallback(() => {\n if (!visible) {\n initialValue[type] = true;\n setVisible(true);\n if (onClickVisible) {\n onClickVisible();\n }\n }\n }, [visible]);\n\n const visibleTitle = type === 'tel' ? 'Ring' : type === 'mailto' ? 'Skicka ett mail till' : '';\n\n return (\n <RepeatTiny>\n {visible ? (\n <ButtonSecondary\n onClick={_onClickValue}\n as=\"a\"\n href={`${type}:${value}`}\n title={`${visibleTitle} ${value}`}\n fullWidth\n >\n <ButtonContent>{value}</ButtonContent>\n </ButtonSecondary>\n ) : (\n <ButtonSecondary onClick={onClick} title={title} fullWidth>\n <ButtonContent>{title}</ButtonContent>\n </ButtonSecondary>\n )}\n </RepeatTiny>\n );\n};\n\nexport default ToggleItem;\n", "import { MetadataJson, parsePhoneNumberFromString } from 'libphonenumber-js/core';\n\nimport metadata from './metadata.min';\n\nconst typedMetadata = metadata as unknown as MetadataJson;\n\nexport const formatPhonenumber = (text: string) => {\n try {\n const parsed = parsePhoneNumberFromString(\n text.replace('-', '').replace(/ /g, ''),\n typedMetadata\n );\n return parsed?.formatNational() || text;\n } catch (e) {\n return text;\n }\n};\n", "const Metadata = {\n version: '1.7.53',\n country_calling_codes: { '46': ['SE'] },\n countries: {\n SE: [\n '46',\n '00',\n '(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}',\n [6, 7, 8, 9, 10],\n [\n ['(\\\\d{2})(\\\\d{2,3})(\\\\d{2})', '$1-$2 $3', ['20'], '0$1', 0, '$1 $2 $3'],\n ['(\\\\d{3})(\\\\d{4})', '$1-$2', ['9(?:00|39|44)'], '0$1', 0, '$1 $2'],\n [\n '(\\\\d{2})(\\\\d{3})(\\\\d{2})',\n '$1-$2 $3',\n ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2,3})(\\\\d{2})',\n '$1-$2 $3',\n [\n '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])',\n ],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d{3})(\\\\d{2,3})(\\\\d{3})', '$1-$2 $3', ['9(?:00|39|44)'], '0$1', 0, '$1 $2 $3'],\n [\n '(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['10|7'], '0$1', 0, '$1 $2 $3 $4'],\n ['(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})', '$1-$2 $3 $4', ['9'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4 $5',\n ['[26]'],\n '0$1',\n 0,\n '$1 $2 $3 $4 $5',\n ],\n ],\n '0',\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}',\n [7, 8, 9],\n ],\n ['7[02369]\\\\d{7}', [9]],\n ['20\\\\d{4,7}', [6, 7, 8, 9]],\n ['649\\\\d{6}|9(?:00|39|44)[1-8]\\\\d{3,6}', [7, 8, 9, 10]],\n ['75[1-8]\\\\d{6}', [9]],\n 0,\n ['10[1-8]\\\\d{6}', [9]],\n ['74[02-9]\\\\d{6}', [9]],\n 0,\n ['77[0-7]\\\\d{6}', [9]],\n ],\n ],\n },\n nonGeographic: {},\n};\n\nexport default Metadata;\n", "import React from 'react';\n\nimport { List, Item, Icon, Label } from './wrapper';\nimport { IconCheck } from '../Icon/index';\n\nexport interface ICheckMarkList {\n children: React.ReactNode;\n}\n\nexport const CheckMarkListItem = ({ children }: ICheckMarkList) => (\n <Item>\n <Icon>\n <IconCheck block />\n </Icon>\n <Label>{children}</Label>\n </Item>\n);\n\nconst CheckMarkList = ({ children }: ICheckMarkList) => <List>{children}</List>;\n\nexport default CheckMarkList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n position: relative;\n font-size: 0.875rem;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Icon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n left: 0;\n top: 4px; // Magic number\n font-size: 0.875em;\n`;\n\nexport const Label = styled.div`\n padding-left: calc(1em + ${size(1)});\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Body, Info, Action, InfoContent, InfoBtn, Title } from './wrapper';\nimport Modal from '../Modal/index';\nimport { ButtonInline } from '../Button/index';\nimport { IconInfo } from '../Icon/index';\n\ninterface Props {\n title: string;\n body?: string;\n actionTitle?: string;\n children: React.ReactNode;\n onClick?: () => void;\n}\n\nconst SwitchBar = ({ title, body, actionTitle, children, onClick }: Props) => {\n const [info, setInfo] = useState(false);\n const onToggleInfo = useCallback(() => setInfo(!info), [info]);\n\n return (\n <>\n <Wrapper>\n <Header>\n <Info>\n <InfoContent>\n <Title>{title}</Title>\n </InfoContent>\n {children && (\n <InfoContent>\n <InfoBtn onClick={onToggleInfo} title=\"Mer information\">\n <IconInfo block />\n </InfoBtn>\n </InfoContent>\n )}\n </Info>\n {actionTitle && (\n <Action>\n <ButtonInline onClick={onClick} title={actionTitle}>\n {actionTitle}\n </ButtonInline>\n </Action>\n )}\n </Header>\n {body && <Body>{body}</Body>}\n </Wrapper>\n {info && (\n <Modal title={title} onClose={onToggleInfo}>\n {children}\n </Modal>\n )}\n </>\n );\n};\n\nexport default SwitchBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Body = styled.div`\n font-size: 0.875rem;\n margin-top: ${size(1)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const InfoContent = styled.div`\n & + & {\n margin-left: ${size(0.75)};\n }\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n", "import React, { useState, useCallback, useContext } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport InputSelect from '../../components/InputSelect/index';\nimport { ButtonPrimary, ButtonContent } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport InputLabel from '../../components/InputLabel/index';\nimport { BranchConnection } from '../../@types/codegen';\nimport { CentralStorageContext } from '../../State/CentralStorage/CentralStorageContext';\n\ninterface BranchModalProps {\n loading: boolean;\n connections?: BranchConnection[];\n onClose: () => void;\n}\n\nconst BranchModal = ({ loading, connections, onClose }: BranchModalProps) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n const [localValue, setLocalValue] = useState(centralStorageId);\n\n const onConfirm = useCallback((id: string) => {\n if (id) {\n setCentralStorageId(id);\n }\n }, []);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => setLocalValue(e.currentTarget.value),\n []\n );\n\n if (!localValue) {\n return null;\n }\n\n return (\n <Modal title=\"Byt anl\u00E4ggning\" onClose={onClose}>\n <Repeat>\n <RepeatTiny>\n <Content>\n <p>V\u00E4lj den anl\u00E4ggning du vill visa kontaktuppgifter f\u00F6r.</p>\n </Content>\n </RepeatTiny>\n <RepeatTiny>\n <InputLabel>V\u00E4lj anl\u00E4ggning</InputLabel>\n <InputSelect\n value={localValue}\n onChange={onChange}\n options={connections?.map((x) => ({\n value: x.id,\n displayName: x.name,\n }))}\n title=\"V\u00E4lj anl\u00E4ggning\"\n />\n </RepeatTiny>\n </Repeat>\n <Repeat>\n <ButtonPrimary disabled={loading} fullWidth onClick={() => onConfirm(localValue)}>\n <ButtonContent>V\u00E4lj</ButtonContent>\n </ButtonPrimary>\n </Repeat>\n </Modal>\n );\n};\n\nexport default BranchModal;\n", "import { createContext } from 'react';\n\nexport interface CentralStorageContextProps {\n centralStorageId?: string | null;\n setCentralStorageId: (id?: string) => void;\n}\n\nexport const CentralStorageContext = createContext<CentralStorageContextProps>({\n setCentralStorageId: (_) => {},\n});\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport LogoBox from '../../components/LogoBox/index';\n\ninterface ModelLink {\n href?: string | null;\n title?: string | null;\n}\n\nexport interface PackageOptionModalData {\n title?: string | null;\n image?: string | null;\n description?: string | null;\n link?: ModelLink | null;\n}\n\ninterface PackageOptionsModalProps {\n packageOption: PackageOptionModalData;\n onClose: () => void;\n}\n\nconst PackageOptionModal = ({ packageOption, onClose }: PackageOptionsModalProps) => (\n <Modal title={packageOption.title || ''} onClose={onClose}>\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={packageOption.title || undefined} wide />\n </Repeat>\n )}\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.href && packageOption.link.title && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {packageOption.link.title}\n </ButtonInline>\n </Repeat>\n )}\n </Modal>\n);\n\nexport default PackageOptionModal;\n", "import React, { useCallback } from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Repeat } from '../../components/Repeat/index';\n\nimport { PageSection } from '../../components/Page/index';\nimport SectionHeader from '../../components/SectionHeader/index';\nimport {\n OverflowGridList,\n OverflowGrid,\n OverflowGridItem,\n} from '../../components/OverflowGrid/index';\nimport ProductCard from '../../components/ProductCard/index';\nimport { H2 } from '../../components/Heading/index';\nimport useRelatedSearch from '../../State/RelatedSearch/useRelatedSearch';\nimport Loader from '../../components/Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { regexPathGuid } from '../../utils/regex';\n\ninterface RelatedProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst Related = ({ id, hashRoute, pathRoute, onClickSearchItem }: RelatedProps) => {\n const { loading, response, moreLikeThisUrl } = useRelatedSearch(id);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n if (!response?.documentList.documents.length || response?.documentList.documents.length === 0) {\n return null;\n }\n\n if (loading) {\n return <Loader />;\n }\n\n return (\n <PageSection accent large className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n {moreLikeThisUrl ? (\n <Repeat>\n <SectionHeader onClick={() => {}}>\n <H2 noMargin>Relaterade fordon</H2>\n </SectionHeader>\n </Repeat>\n ) : (\n <Repeat>\n <SectionHeader onClick={() => {}} actionTitle=\"Visa alla\">\n <H2 noMargin>Senast inkomna</H2>\n </SectionHeader>\n </Repeat>\n )}\n\n <Repeat>\n <OverflowGrid>\n <OverflowGridList>\n {response?.documentList.documents.map((document) => {\n const prefix = pathRoute ? `/${pathRoute}` : '/';\n\n const r = regexPathGuid(pathRoute);\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : r.test(`${pathRoute}${id}`)\n ? window.location.pathname.replace(r, `${pathRoute}${document._id}`)\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <OverflowGridItem key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onItemClicked}\n title={document.title}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={document.featuredImage?.files?.[0]?.url}\n description={document.shortDescription}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(document.mileage)} mil`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} kr`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} kr`\n : undefined\n }\n pathRoute={pathRoute}\n />\n </OverflowGridItem>\n );\n })}\n </OverflowGridList>\n </OverflowGrid>\n </Repeat>\n </Container>\n </PageSection>\n );\n};\n\nexport default Related;\n", "import React from 'react';\n\nimport { Wrapper, Heading, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n onClick?: () => void;\n actionTitle?: string;\n}\n\nconst SectionHeader = ({ children, onClick, actionTitle }: Props) => (\n <Wrapper>\n <Heading>{children}</Heading>\n {onClick && actionTitle && (\n <Action>\n <ButtonClear as=\"a\" href=\"#\" onClick={onClick}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n);\n\nexport default SectionHeader;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const OverflowGrid = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n margin-left: ${size(-3)};\n margin-right: ${size(-2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-1)};\n }\n }\n`;\n\nexport const OverflowGridList = styled.ul`\n display: flex;\n align-items: flex-start;\n list-style: none;\n padding: 0;\n margin: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0 ${size(3)};\n\n :after {\n content: '';\n flex: 0 0 auto;\n height: 1px;\n width: ${size(2)};\n }\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n padding: 0 ${size(2)};\n\n :after {\n width: ${size(1)};\n }\n }\n }\n`;\n\nexport const OverflowGridItem = styled.li`\n flex: 1 0 auto;\n width: calc(100% - ${size(2)});\n max-width: calc(100% - ${size(2)});\n padding: ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: calc(50% - ${size(3)});\n max-width: calc(50% - ${size(3)});\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import { useContext, useEffect } from 'react';\n\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\nconst useRelatedSearch = (id: string) => {\n const data = useContext(RelatedSearchContext);\n\n useEffect(() => {\n const searchParams = new URLSearchParams();\n searchParams.set('hits', '3');\n if (data.moreLikeThisUrl && id) {\n searchParams.set('id', id);\n }\n data.fetchRelated(searchParams);\n }, [id]);\n\n return data;\n};\n\nexport default useRelatedSearch;\n", "import { createContext } from 'react';\nimport { Search } from '../../@types/search';\n\nexport interface RelatedSearchContextProps {\n moreLikeThisUrl: boolean;\n loading: boolean;\n response?: Search;\n error: boolean;\n fetchRelated: (searchParmas: URLSearchParams) => void;\n}\n\nexport const RelatedSearchContext = createContext<RelatedSearchContextProps>({\n moreLikeThisUrl: false,\n loading: false,\n error: false,\n response: undefined,\n fetchRelated: (_) => {},\n});\n", "export const regexGuid =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst regexEndGuid = /[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\nexport const escapeRegExpString = (s: string) => s.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\nexport const regexPathGuid = (path?: string) => {\n if (!path) {\n return regexEndGuid;\n }\n const r = new RegExp(`${escapeRegExpString(path)}${regexEndGuid.source}`, 'gi');\n return r;\n};\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { PackageOption } from '../../@types/codegen';\n\ninterface PackageOptionsProps {\n packageOptions?: PackageOption[] | null;\n}\n\nconst PackageOptions = ({ packageOptions }: PackageOptionsProps) => {\n if (!packageOptions) {\n return null;\n }\n\n return (\n <>\n {packageOptions.map((packageOption, index) => (\n <ProductPageMainSection key={packageOption.title || index}>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title\n ? packageOption.link.title\n : 'L\u00E4s mer (\u00D6ppnas i ett nytt f\u00F6nster)'}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt=\"Logotyp\" wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n ))}\n </>\n );\n};\n\nexport default PackageOptions;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport Content from '../../components/Content/index';\nimport { ProductPageContentLimit } from '../../components/ProductPage/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonContent, ButtonInline, ButtonInlineBold } from '../../components/Button/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../../components/TableColumn/index';\n\nimport OpeningHours from '../../components/OpeningHours/index';\nimport PhoneNumber from '../../components/PhoneNumber/index';\nimport Map from '../../components/Map/index';\n\nimport { Branch, Maybe } from '../../@types/codegen';\nimport BranchModal from './BranchModal';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\n\ninterface BranchProps {\n branch?: Maybe<Branch>;\n loading: boolean;\n}\n\nconst Branch = ({ branch, loading }: BranchProps) => {\n const [modal, setModal] = useState(false);\n\n const openModal = useCallback(() => setModal(true), []);\n const closeModal = useCallback(() => setModal(false), []);\n\n useEffect(() => {\n if (branch && modal) {\n setModal(false);\n }\n }, [branch]);\n\n if (!branch) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <BranchModal loading={loading} connections={branch?.connections} onClose={closeModal} />\n )}\n <Repeat>\n <H2 noMargin>\n {branch?.location?.city\n ? `Den h\u00E4r bilen finns p\u00E5 v\u00E5r anl\u00E4ggning i ${branch?.location?.city}`\n : 'Kontakt'}\n </H2>\n </Repeat>\n <Repeat>\n <Map position={branch?.location?.position} />\n </Repeat>\n {(branch?.connections?.length || 0) > 1 && (\n <Repeat>\n <Content>\n <p>\n Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar.{' '}\n <ButtonInline as=\"span\" role=\"button\" onClick={openModal} inline>\n Klicka h\u00E4r f\u00F6r att visa kontaktuppgifter till en annan anl\u00E4ggning\n </ButtonInline>\n .\n </p>\n </Content>\n </Repeat>\n )}\n <Repeat>\n <ProductPageContentLimit>\n <Repeat>\n <TableColumn>\n {branch?.location?.streetAddress && branch?.location?.city && (\n <TableColumnRow>\n <TableColumnCell>Adress</TableColumnCell>\n <TableColumnCell>\n <ButtonInlineBold>\n <ButtonContent>{`${branch?.location?.streetAddress}, ${branch?.location?.city}`}</ButtonContent>\n </ButtonInlineBold>\n </TableColumnCell>\n </TableColumnRow>\n )}\n {branch?.contact?.phonenumber && (\n <PhoneNumber phoneNumber={formatPhonenumber(branch.contact.phonenumber)} />\n )}\n </TableColumn>\n </Repeat>\n {branch?.openingHours && (\n <Repeat>\n <OpeningHours openingHours={branch.openingHours} />\n </Repeat>\n )}\n </ProductPageContentLimit>\n </Repeat>\n </>\n );\n};\n\nexport default Branch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableColumn = styled.div`\n line-height: 1.2;\n`;\n\nexport const TableColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n margin: ${size(-1)};\n`;\n\nexport const TableColumnCell = styled.div`\n flex: 1 0 50%;\n padding: ${size(1)};\n`;\n", "import React, { useMemo } from 'react';\nimport { RepeatSmall } from '../Repeat/index';\nimport Badge from '../Badge/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { UtilityTextBold } from '../Utility/index';\n\nimport { OpeningHours, Maybe } from '../../@types/codegen';\n\ntype Days = Omit<OpeningHours, '__typename'>;\ntype KeyType = keyof Days;\nconst KeyOrder: KeyType[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst TranslateWeekDays = (d: KeyType) => {\n switch (d) {\n case 'monday':\n return 'M\u00E5n';\n case 'tuesday':\n return 'Tis';\n case 'wednesday':\n return 'Ons';\n case 'thursday':\n return 'Tor';\n case 'friday':\n return 'Fre';\n case 'saturday':\n return 'L\u00F6r';\n case 'sunday':\n return 'S\u00F6n';\n }\n};\n\ninterface OpeningHoursSample {\n titleFrom: string;\n titleTo?: string;\n from?: string | null;\n until?: string | null;\n}\n\nconst arr: OpeningHoursSample[] = [];\n\nconst GetOpeningHours = (o: OpeningHours) =>\n KeyOrder.reduce((prev, current) => {\n const title = TranslateWeekDays(current);\n const item = o[current];\n const previous = prev?.[prev.length - 1];\n if (previous && previous.from == item?.from && previous.until === item?.until) {\n prev[prev.length - 1].titleTo = title;\n } else {\n prev.push({\n titleFrom: title,\n from: item?.from,\n until: item?.until,\n });\n }\n\n return prev;\n }, arr.slice());\n\nconst GetOpeningHoursToday = (o: OpeningHours) => {\n const dayNumber = new Date().getDay();\n const day = KeyOrder[dayNumber === 0 ? 6 : dayNumber - 1] as KeyType;\n const current = o[day];\n return {\n title: current ? '\u00D6ppetider idag' : 'St\u00E4ngt idag',\n from: current?.from,\n until: current?.until,\n };\n};\n\nconst valuOfDateString = (s: string) => {\n const splitted = s.split(':').map((x) => parseInt(x, 10));\n return new Date().setHours(splitted[0], splitted[1]).valueOf();\n};\n\ninterface OpeningHoursProps {\n openingHours?: Maybe<OpeningHours>;\n}\n\nconst OpeningHours = ({ openingHours }: OpeningHoursProps) => {\n const today = useMemo(\n () => (openingHours ? GetOpeningHoursToday(openingHours) : null),\n [openingHours]\n );\n\n const currentlyOpen = useMemo(() => {\n try {\n if (today?.from && today?.until) {\n const currentDate = new Date().valueOf();\n const from = valuOfDateString(today.from);\n const until = valuOfDateString(today.until);\n return currentDate >= from && currentDate <= until;\n }\n } catch (e) {\n return false;\n }\n }, [today]);\n\n const oh = useMemo(() => (openingHours ? GetOpeningHours(openingHours) : null), [openingHours]);\n if (!oh) {\n return null;\n }\n\n return (\n <>\n <RepeatSmall>\n <Badge\n label={currentlyOpen ? '\u00D6ppet' : 'St\u00E4ngt'}\n severity={currentlyOpen ? 'positive' : 'negative'}\n />\n </RepeatSmall>\n <RepeatSmall>\n <TableColumn>\n <TableColumnRow>\n <TableColumnCell>\n <UtilityTextBold>{today?.title}</UtilityTextBold>\n </TableColumnCell>\n <TableColumnCell>\n <UtilityTextBold>\n {today?.from ? `${today.from}-${today.until}` : 'St\u00E4ngt'}\n </UtilityTextBold>\n </TableColumnCell>\n </TableColumnRow>\n {oh.map((o) => (\n <TableColumnRow key={o.titleFrom}>\n <TableColumnCell>\n {o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom}\n </TableColumnCell>\n <TableColumnCell>{o.from ? `${o.from}-${o.until}` : 'St\u00E4ngt'}</TableColumnCell>\n </TableColumnRow>\n ))}\n </TableColumn>\n </RepeatSmall>\n </>\n );\n};\n\nexport default OpeningHours;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n label: string;\n severity?: 'positive' | 'negative';\n}\n\nconst Badge = ({ label, severity }: Props) => <Wrapper severity={severity}>{label}</Wrapper>;\n\nexport default Badge;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getBg = (severity: string | undefined): string => {\n let bg = theme.color.textDark;\n\n if (severity === 'positive') {\n bg = theme.color.ui.positive;\n } else if (severity === 'negative') {\n bg = theme.color.ui.negative;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<Wrapper>`\n display: inline-block;\n background-color: ${(props): string => getBg(props.severity)};\n padding: ${size(0.75)} ${size(1.5)};\n color: ${(props) => props.theme.color.textLight};\n border-radius: 3px;\n font-size: 0.75rem;\n line-height: 1.2;\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { ButtonContent, ButtonInlineBold } from '../Button/index';\n\ninterface PhoneNumberProps {\n phoneNumber: string;\n}\n\nconst PhoneNumber = ({ phoneNumber }: PhoneNumberProps) => {\n const [visible, setVisible] = useState(false);\n\n const onClick = useCallback(() => !visible && setVisible(true), [visible]);\n\n return (\n <TableColumnRow>\n <TableColumnCell>Telefonnummer</TableColumnCell>\n <TableColumnCell>\n {visible ? (\n <ButtonInlineBold as=\"a\" href={`tel:${phoneNumber}`} title={`Ring ${phoneNumber}`}>\n <ButtonContent>{phoneNumber}</ButtonContent>\n </ButtonInlineBold>\n ) : (\n <ButtonInlineBold onClick={onClick} title=\"Visa telefonnummer\">\n <ButtonContent>Visa telefonnummer</ButtonContent>\n </ButtonInlineBold>\n )}\n </TableColumnCell>\n </TableColumnRow>\n );\n};\n\nexport default PhoneNumber;\n", "import React, { useState, useCallback } from 'react';\nimport useSettings from '../../State/Settings/useSettings';\n\nimport { Wrapper, Image, Placeholder, PlaceholderAction } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { Position, Maybe } from '../../@types/codegen';\n\ninterface StaticMapProps {\n position?: Maybe<Position>;\n}\n\nconst StaticMap = ({ position }: StaticMapProps) => {\n const { googleMapsApiKey, googleMapsMarker } = useSettings();\n const [visible, setVisible] = useState(false);\n\n const onShowMap = useCallback((e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (googleMapsApiKey) {\n e.preventDefault();\n setVisible(true);\n }\n }, []);\n\n if (!position) {\n return null;\n }\n\n const { latitude, longitude } = position;\n\n if (visible && googleMapsApiKey) {\n return (\n <Wrapper\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n title=\"Visa p\u00E5 Google Maps\"\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n >\n <Image\n src={`https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${\n googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''\n }%7C${latitude},${longitude}&key=${googleMapsApiKey}`}\n alt=\"Karta\"\n />\n </Wrapper>\n );\n }\n return (\n <Placeholder\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n onClick={onShowMap}\n >\n <PlaceholderAction>\n <ButtonSecondary as=\"div\">\n <ButtonContent>Visa karta</ButtonContent>\n </ButtonSecondary>\n </PlaceholderAction>\n </Placeholder>\n );\n};\n\nexport default StaticMap;\n", "import { useContext } from 'react';\n\nimport { SettingsContext } from './SettingsContext';\n\nconst useSettings = () => useContext(SettingsContext);\n\nexport default useSettings;\n", "import { createContext } from 'react';\n\nexport interface SettingsContextProps {\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n ecomSettings?: {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n };\n}\n\nexport const SettingsContext = createContext<SettingsContextProps>({});\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.a`\n display: block;\n`;\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n border-radius: 3px;\n`;\n\nexport const Placeholder = styled.a`\n display: block;\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 43.75%; // Proportions of Google Static Map (640x280)\n background-image: linear-gradient(-15deg, #dfe4ce, #c1d6ea, #dfe4ce);\n border-radius: 3px;\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const PlaceholderAction = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport { Vehicle } from '../../@types/codegen';\nimport useSearchItemBranch from '../../hooks/useSearchItemBranch';\n\nconst useCentralStorage = (vehicle?: Vehicle | null) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n\n const connections = vehicle?.branch?.connections;\n const branchId = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)?.id\n : undefined;\n\n const { data, loading } = useSearchItemBranch(vehicle?.id, branchId);\n\n useEffect(() => {\n if ((connections?.length || 0) > 0) {\n const match = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)\n : undefined;\n\n if (!match) {\n const first = connections?.[0];\n if (first) {\n setCentralStorageId(first.id);\n }\n }\n }\n }, [connections]);\n\n return {\n vehicle: (connections?.length || 0) > 0 ? data?.vehicle : vehicle,\n loading,\n };\n};\n\nexport default useCentralStorage;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_BRANCH_QUERY from '../queries/SEARCH_ITEM_BRANCH_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen';\n\nconst useSearchItemBranch = (\n id?: string | null,\n branch?: string | null\n): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_BRANCH_QUERY, {\n variables: { id: id as string, branch: branch as string },\n skip: !id || !branch,\n });\n\nexport default useSearchItemBranch;\n", "import { gql } from '@apollo/client';\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_BRANCH_QUERY = gql`\n query SearchItemBranch($id: ID!, $branch: ID) {\n vehicle(id: $id, branch: $branch) {\n contact {\n name\n email\n phonenumber\n avatar\n }\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n }\n }\n ${HoursOpen}\n`;\n\nexport default SEARCH_ITEM_BRANCH_QUERY;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport { H1 } from '../../components/Heading/index';\n\nconst Page404 = () => (\n <Page>\n <PageSection large>\n <Container>\n <H1 noMargin>404</H1>\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default Page404;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Loader from '../../components/Loader/index';\n\nconst PageLoading = () => (\n <Page>\n <PageSection large>\n <Container>\n <Loader />\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default PageLoading;\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Category, Property } from '../../@types/vehicle-properties';\nimport PropertyTreeCreator from '../../utils/vehicle-properties/property-tree-creator';\nimport sortTree from '../../utils/vehicle-properties/property-tree-sorter';\nimport enrichWithHint from '../../utils/vehicle-properties/property-hint-enricher';\nimport addCustomProperties from '../../utils/vehicle-properties/custom-property-adder';\nimport removeProperties from '../../utils/vehicle-properties/property-remover';\nimport MetadataItem from './MetadataItem';\n\nimport { H5 } from '../../components/Heading/index';\nimport { Repeat } from '../../components/Repeat/index';\nimport { TableList } from '../../components/TableList/index';\nimport Tabs from '../../components/Tabs/index';\nimport { VehicleData } from '../../@types/codegen';\n\ninterface MetadataSubCategoryProps {\n name: string;\n properties: Property[];\n}\n\nconst MetadataSubCategory = ({ name, properties }: MetadataSubCategoryProps) => (\n <Repeat>\n <H5 as=\"h3\">{name}</H5>\n <TableList>\n {!!properties.length &&\n properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n);\n\ninterface MetadataCaregoryProps {\n properties: Property[];\n subCategories: Category[];\n}\n\nconst MetadataCategory = ({ properties, subCategories }: MetadataCaregoryProps) => (\n <div className=\"tab-section\">\n {!!properties.length && (\n <Repeat>\n <TableList>\n {properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n )}\n {!!subCategories.length &&\n subCategories.map((subCategory, index) => (\n <MetadataSubCategory\n name={subCategory.name}\n properties={subCategory.properties}\n key={`${subCategory.name}-${index}`}\n />\n ))}\n </div>\n);\n\ninterface PropertySetProps {\n propertySet: any;\n vehicleData: VehicleData;\n}\n\nconst PropertySet = ({ propertySet, vehicleData }: PropertySetProps) => {\n const [activeCategoryId, setActiveCategoryId] = useState(-1);\n const mappedProperties = useMemo(() => {\n if (!propertySet) {\n return undefined;\n }\n\n let newProperties = removeProperties(propertySet);\n newProperties = addCustomProperties(vehicleData, newProperties);\n const enrichedProperties = enrichWithHint(newProperties);\n\n const tree = new PropertyTreeCreator(enrichedProperties).create();\n sortTree(tree);\n return tree;\n }, [propertySet]);\n\n useEffect(() => {\n const categories =\n mappedProperties?.categories?.length !== undefined ? mappedProperties?.categories : undefined;\n\n if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {\n setActiveCategoryId(categories[0].id);\n }\n }, [mappedProperties]);\n\n const onTab = useCallback((id: string) => setActiveCategoryId(parseInt(id, 10)), []);\n\n const activeCategory = mappedProperties?.categories?.find(\n (category) => category.id === activeCategoryId\n );\n\n return (\n <>\n <Repeat>\n <Tabs\n tabs={\n mappedProperties?.categories?.map((category) => ({\n name: `${category.id}`,\n displayName: category.name,\n })) || []\n }\n active={`${activeCategoryId}`}\n onClick={onTab}\n />\n </Repeat>\n {activeCategory && (\n <Repeat>\n <MetadataCategory\n properties={activeCategory.properties}\n subCategories={activeCategory.subCategories}\n />\n </Repeat>\n )}\n </>\n );\n};\n\nexport default PropertySet;\n", "import { EnhancedProperty, Tree, Category, ItemCategory } from '../../@types/vehicle-properties';\n\nclass PropertyTreeCreator {\n private properties: { [key: string]: EnhancedProperty };\n\n constructor(properties: { [key: string]: EnhancedProperty }) {\n this.properties = properties;\n }\n\n create(): Tree {\n const categories = this.createTreeCategories();\n const rootProperties = this.getRootProperties();\n if (rootProperties.length) {\n categories.push({\n name: PropertyTreeCreator.DEFAULT_CATEGORY_NAME,\n id: PropertyTreeCreator.DEFAULT_CATEGORY_ID,\n subCategories: [],\n properties: rootProperties,\n });\n }\n\n const tree = {\n categories,\n };\n\n return tree;\n }\n\n private getRootProperties() {\n const rootProperties = Object.keys(this.properties)\n .filter(this.propertiesWithoutCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n return rootProperties;\n }\n\n private propertiesWithCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.id;\n\n private propertiesWithoutCategory = (propertyKey: string) =>\n !this.propertiesWithCategory(propertyKey);\n\n private isList = (property: EnhancedProperty) =>\n property.type === PropertyTreeCreator.TEXT_LIST_TYPE;\n\n private isNonList = (property: EnhancedProperty) => !this.isList(property);\n\n private createTreeCategories() {\n const categories = this.getCategories();\n const treeCategories = this.convertToTreeCategories(categories);\n return treeCategories;\n }\n\n private getCategories() {\n const categories = Object.keys(this.properties)\n .filter(this.propertiesWithCategory)\n .map((key) => this.properties[key].category as unknown as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n return categories;\n }\n\n private convertToTreeCategories(categories: ItemCategory[]) {\n return categories.map((category) => {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, category.id))\n .filter(this.propertiesWithoutSubCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n const subCategories = this.createTreeSubCategories(category.id);\n\n return {\n id: category.id,\n name: category.name,\n properties,\n subCategories,\n };\n });\n }\n\n private hasCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.id === categoryId;\n\n private propertiesWithSubCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.subCategory?.id;\n\n private propertiesWithoutSubCategory = (propertyKey: string) =>\n !this.propertiesWithSubCategory(propertyKey);\n\n private createTreeSubCategories(categoryId: number) {\n const subCategories = this.getSubCategoriesOfCategory(categoryId);\n const convertedSubCategories = subCategories\n .map((subCategory) => this.convertSubCategory(subCategory))\n .filter((category) => category.properties.length > 0);\n const createdSubCategories = this.createListSubCategories(categoryId);\n const treeCategories = convertedSubCategories.concat(createdSubCategories);\n\n return treeCategories;\n }\n\n private getSubCategoriesOfCategory(id: number) {\n const categories = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, id))\n .filter(this.propertiesWithSubCategory)\n .map((key) => this.properties[key].category?.subCategory as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n\n return categories;\n }\n\n private convertSubCategory(subCategory: ItemCategory): Category {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasSubCategoryWithId(key, subCategory.id))\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n\n return {\n id: subCategory.id,\n name: subCategory.name,\n properties,\n subCategories: [],\n };\n }\n\n private hasSubCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.subCategory?.id === categoryId;\n\n private static distinctCategories = (\n category: ItemCategory,\n index: number,\n self: ItemCategory[]\n ) => {\n const firstOccuranceOfId = self.find((value) => value.id === category.id);\n return !!firstOccuranceOfId && self.indexOf(firstOccuranceOfId) === index;\n };\n\n private createListSubCategories(categoryId: number): Category[] {\n const listProperties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, categoryId))\n .map((key) => this.properties[key])\n .filter(this.isList)\n .filter((prop) => (prop.value as string[]).length > 0);\n\n const createdSubCategories = listProperties.map((property, index) => ({\n id: PropertyTreeCreator.LIST_CATEGORY_START_ID + index,\n name: property.name,\n properties: this.asBoolProperties(property),\n subCategories: [],\n }));\n\n return createdSubCategories;\n }\n\n private asBoolProperties(listProperty: EnhancedProperty) {\n const values = listProperty.value as string[];\n const boolProperties = values.map((prop) => ({\n name: prop,\n value: true,\n type: 'bool',\n unit: listProperty.unit,\n hint: listProperty.hint,\n }));\n return boolProperties;\n }\n\n static DEFAULT_CATEGORY_NAME = 'Okategoriserat';\n static DEFAULT_CATEGORY_ID = 0;\n static TEXT_LIST_TYPE = 'text-list';\n static LIST_CATEGORY_START_ID = 100000;\n}\n\nexport default PropertyTreeCreator;\n", "import { Category } from '../../@types/vehicle-properties';\n\ninterface ID_ORDER_TYPE {\n '1000': 1;\n '71': 2;\n '2': 3;\n '1': 4;\n '8': 5;\n '6': 6;\n '119': 7;\n}\n\nconst ID_ORDER: ID_ORDER_TYPE = Object.freeze({\n '1000': 1,\n '71': 2,\n '2': 3,\n '1': 4,\n '8': 5,\n '6': 6,\n '119': 7,\n});\n\ntype ID_ORDER_KEY = keyof ID_ORDER_TYPE;\n\nconst compareById = (firstId: string, secondId: string) => {\n const firstOrder = ID_ORDER[firstId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ID_ORDER[secondId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Category, second: Category) => {\n const result = compareById(`${first.id}`, `${second.id}`);\n\n if (result !== 0) {\n return result;\n }\n\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nexport default (first: Property, second: Property) => {\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nimport compareProperties from './compare-properties';\n\ninterface Order {\n Varum\u00E4rke: 1;\n Modell: 2;\n Version: 3;\n Modell\u00E5r: 4;\n Tillverknings\u00E5r: 5;\n M\u00E4tarst\u00E4llning: 6;\n V\u00E4xell\u00E5da: 7;\n F\u00E4rg: 8;\n Registreringsnummer: 9;\n Br\u00E4nslegrupp: 10;\n Kaross: 11;\n Segment: 12;\n Skatt: 13;\n Malus: 14;\n Bonus: 15;\n}\n\nconst ORDER: Order = Object.freeze({\n Varum\u00E4rke: 1,\n Modell: 2,\n Version: 3,\n Modell\u00E5r: 4,\n Tillverknings\u00E5r: 5,\n M\u00E4tarst\u00E4llning: 6,\n V\u00E4xell\u00E5da: 7,\n F\u00E4rg: 8,\n Registreringsnummer: 9,\n Br\u00E4nslegrupp: 10,\n Kaross: 11,\n Segment: 12,\n Skatt: 13,\n Malus: 14,\n Bonus: 15,\n});\n\ntype OrderKey = keyof Order;\n\nconst compareByPredefinedOrder = (firstId: string, secondId: string) => {\n const firstOrder = ORDER[firstId as OrderKey] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ORDER[secondId as OrderKey] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Property, second: Property) => {\n const result = compareByPredefinedOrder(`${first.name}`, `${second.name}`);\n\n if (result !== 0) {\n return result;\n }\n\n return compareProperties(first, second);\n};\n", "import { Tree } from '../../@types/vehicle-properties';\nimport compareCategories from './compare-categories';\nimport compareBasicProperties from './compare-basic-properties';\nimport compareProperties from './compare-properties';\n\nconst sort = (tree: Tree) => {\n tree.categories.sort(compareCategories);\n tree.categories.forEach((category) => {\n if (category.id === 1000) {\n category.properties.sort(compareBasicProperties);\n } else {\n category.properties.sort(compareProperties);\n category.subCategories.forEach((subCategory) => {\n subCategory.properties.sort(compareProperties);\n });\n }\n });\n};\n\nexport default sort;\n", "/**\n * Does not copy complex objects such as Date, functions etc.\n */\nconst deepCopy = <T extends Object>(object: T) => JSON.parse(JSON.stringify(object)) as T;\n\nexport default deepCopy;\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const HINTS = Object.freeze<{ [key: string]: string }>({\n abs: 'F\u00F6rhindrar att bromsarna l\u00E5ser sig och reducerar bromsstr\u00E4ckan.',\n acceleration: 'Antal sekunder som bilen beh\u00F6ver f\u00F6r att ta sig till 100 km/h.',\n adultOccupantNCAP:\n 'Po\u00E4ngen f\u00F6r skydd av vuxna best\u00E4ms genom tester av frontalkrockar, sidokrockar och whiplash som utf\u00F6rs f\u00F6r att bed\u00F6ma det skydd som bilen erbjuder f\u00F6r vuxna f\u00F6rare och passagerare samt bed\u00F6ma tillg\u00E4ngliga \u00E5tg\u00E4rder f\u00F6r snabb och s\u00E4ker r\u00E4ddning.',\n aeb: 'Bilen \u00E4r utrustad med ett bromssystem som hj\u00E4lper dig att undvika olyckor. Beroende p\u00E5 vilken niv\u00E5 av AEB bilen \u00E4r utrustad med kan de uppt\u00E4cka \u00E4ven cyklister och fotg\u00E4ngare, fr\u00E4mst i l\u00E4gre hastigheter i stadsmilj\u00F6 men \u00E4ven vid h\u00F6gre hastigheter och landsv\u00E4gsk\u00F6rning. Bilen f\u00F6rvarnar f\u00F6raren om potentiell fara och hj\u00E4lper \u00E4ven till att bromsa f\u00F6r att s\u00E4kerst\u00E4lla att olyckor undviks s\u00E5 l\u00E5ngt det g\u00E5r.',\n airbagCutOffSwitch:\n 'Det g\u00E5r att koppla ur krockkudden p\u00E5 passagerarsidan f\u00F6r att kunna s\u00E4tta dit en barnstol.',\n airbagDriver: 'Krockkudde f\u00F6r f\u00F6raren.',\n airbagFrontal: '',\n airbagFrontalHead: '',\n airbagKnees: '',\n airbagPassenger: 'Krockkudde f\u00F6r passagerare.',\n airbagSideChest: '',\n airbagSidePelvis: '',\n alcolock: 'F\u00F6r att kunna starta bilen beh\u00F6vs ett bl\u00E5stest som m\u00E4ter alkoholniv\u00E5n.',\n androidAuto:\n 'Bilen har st\u00F6d f\u00F6r dig med Androidtelefon att koppla upp den direkt till bilen. D\u00E5 f\u00F6ljer bland annat navigering, meddelanden samt musiken med fr\u00E5n telefonen.',\n annualBonus:\n 'Det h\u00E4r fordonet \u00E4r ber\u00E4ttigat till klimatbonus. Bonusen delas ut till den f\u00F6rsta registrerade \u00E4garen efter 6 m\u00E5nader. Klicka <a target=\"_blank\" rel=\"noopener noreferrer\" title=\"L\u00E4s mer om bonus/malus\" href=\"https://www.transportstyrelsen.se/bonusmalus\">h\u00E4r</a> f\u00F6r att l\u00E4sa mer.',\n annualMalus: 'Bilen har en f\u00F6rh\u00F6jd skatt de tre f\u00F6rsta \u00E5ren och d\u00E4refter g\u00E4ller ordinarie skatt.',\n annualTax: 'Summan fordonsskatt som m\u00E5ste betalas varje \u00E5r.',\n antiTheftAlarm: 'Bilen har ett larmsystem vid f\u00F6rs\u00F6k till inbrott.',\n appConnect:\n 'Med App Connect kan du koppla din mobiltelefon s\u00E5 att anpassade appar syns direkt i bilens display. Fungerar b\u00E5de f\u00F6r iPhone och Android.',\n appleCarPlay:\n 'Bilen har st\u00F6d f\u00F6r Apple i bilens inbyggda display, s\u00E5 du enkelt kan koppla upp din telefon och prata med bilen med hj\u00E4lp av Siri.',\n aux: 'Bilen har en AUX-ing\u00E5ng, f\u00F6r att exempelvis spela musik fr\u00E5n en telefon.',\n auxiliaryLamps: '',\n batteryCapacity: 'Anger hur m\u00E5nga kilowatt-timmar batteriet innehar.',\n batteryWarrantyDistance: '',\n batteryWarrantyTime: '',\n blindSpotWarner:\n 'En varningslampa indikerar i ytterbackspegeln n\u00E4r ett fordon befinner sig i d\u00F6da vinkeln.',\n bluetooth: 'Bilen kan ansluta enheter via Bluetooth, f\u00F6r exempelvis mobilsamtal eller musik.',\n bluetoothAudio: 'Bilen kan ansluta enheter via Bluetooth f\u00F6r att lyssna p\u00E5 musik.',\n bluetoothPhone: 'Bilen kan ansluta enheter via Bluetooth f\u00F6r telefonsamtal.',\n brakeAssistance: 'S\u00E4kerhetssystem som kan hj\u00E4lpa till att bromsa och undvika olyckor.',\n carDamageWarrantyDistance: '',\n carDamageWarrantyTime: '',\n centerDisplay: 'Bilen har en sk\u00E4rm mitt i bilen, mellan f\u00F6rare och passagerare.',\n centralLocking: 'Elektriskt l\u00E5ssystem, som g\u00F6r att alla d\u00F6rrar l\u00E5ses och \u00F6ppnas samtidigt.',\n chargeTimeNormal: 'Hur l\u00E5ng tid tar det att ladda bilen i ett standard eln\u00E4t.',\n chargeTimeQuick:\n 'Hur l\u00E5ng tid tar det att ladda bilen med en snabbladdare anpassad f\u00F6r laddning av elbilar.',\n chassis: 'Vilken typ/form bilen har.',\n childOccupantNCAP:\n 'Bed\u00F6mningen av skyddet av barn t\u00E4cker tre viktiga aspekter: det skydd som erbjuds av bilbarnstolar i frontal- och sidokrockstest; fordonets m\u00F6jligheter att inhysa bilbarnstolar med olika storlek och utformning; och tillg\u00E4ngliga \u00E5tg\u00E4rder f\u00F6r s\u00E4ker transport av barn i bilen.',\n childSafetyLocks:\n 'D\u00F6rrarna l\u00E5ses automatiskt n\u00E4r man k\u00F6r iv\u00E4g, s\u00E5 att de inte ska \u00F6ppnas under k\u00F6rning.',\n childSeatBeltPassenger: 'Passagerars\u00E4tet har utf\u00E4llbar sittkudde f\u00F6r barn.',\n childSeatBeltRear: 'Baks\u00E4tet har utf\u00E4llbar sittkudde f\u00F6r barn.',\n co2: 'Anger hur mycket koldioxid fordonet sl\u00E4pper ut enligt m\u00E4tmetoden NEDC baserat p\u00E5 teoretisk k\u00F6rning.',\n colorName: '',\n combinedEmissionsWLTP:\n 'Anger hur mycket koldioxid fordonet sl\u00E4pper ut enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning.',\n cruiseControl: 'Hj\u00E4lpmedel som h\u00E5ller bilens hastighet automatiskt.',\n curtainAirbags: '',\n displacementCC: 'Den sammanlagda volymen av motorns cylindrar. M\u00E4ts i kubikcentimeter.',\n displacementLitres: 'Den sammanlagda volymen av motorns cylindrar. M\u00E4ts i liter.',\n driverAlertnessDetection:\n 'Varningssignal uppst\u00E5r n\u00E4r k\u00F6rningss\u00E4ttet tyder p\u00E5 bristande uppm\u00E4rksamhet.',\n drivingWheel: 'Vilka hjul som motorn ger kraft till och snurrar.',\n electricalEngine: '',\n electricalRange: 'R\u00E4ckvidd enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning',\n electricalRangeEPA:\n 'R\u00E4ckvidd enligt den amerikanska m\u00E4tmetoden EPA. Enligt m\u00E5nga den allra str\u00E4ngaste metoden.',\n electricalRangeNEDC: 'R\u00E4ckvidd enligt m\u00E4tmetoden NEDC baserat p\u00E5 teoretisk k\u00F6rning.',\n electricalRangeWLTP: 'R\u00E4ckvidd enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning.',\n electricalSeatDriver:\n 'Bilens f\u00F6rarstol g\u00E5r att man\u00F6vrera med el f\u00F6r mjukare och mer precis positionering.',\n electricalSeatPassenger: 'Bilens passagerarstol g\u00E5r att man\u00F6vrera med el.',\n emergencyCalling: 'Bilen kan automatiskt larma SOS vid en olycka.',\n engineConfiguration: 'Anger fordonets typ av motor, vilken typ av cylindrar den innehar.',\n engineCylinders:\n \"Antalet ger en indikation p\u00E5 motorns storlek. Ett 'vanligt' antal ligger p\u00E5 4 st.\",\n engineName: '',\n engineVolume: '',\n enrichmentProviderEquipPackages: '',\n enrichmentProviderExteriorPackages: '',\n enrichmentProviderInteriorPackages: '',\n enrichmentProviderTrimPackages: '',\n environmentClass: 'Anv\u00E4nds f\u00F6r att st\u00E4lla krav p\u00E5 fordonets utsl\u00E4pp.',\n finish: '',\n fuelConsumptionCityDriving: 'Br\u00E4nslef\u00F6rbrukning vid stadsk\u00F6rning.',\n fuelConsumptionCountryRoadDriving: 'Br\u00E4nslef\u00F6rbrukning vid landsv\u00E4gsk\u00F6rning.',\n fuelConsumptionMixedDriving:\n 'Br\u00E4nslef\u00F6rbrukning vid blandad k\u00F6rning. Dvs. stadsk\u00F6rning och landsv\u00E4gsk\u00F6rning under en och samma f\u00E4rd.',\n fuelType: 'Vad bilen ska tankas med och drivs av.',\n gearboxName: '',\n gestureControls: 'Mittsk\u00E4rmen g\u00E5r att man\u00F6vrera med r\u00F6relser.',\n gps: 'Bilen \u00E4r utrustad med navigationsutrustning s\u00E5 du enkelt kan ta dig dit du ska.',\n grossWeight: 'Anger bilens vikt inklusive max till\u00E5ten lastvikt.',\n groundClearence: 'Avst\u00E5ndet mellan bilens undersida och marken.',\n hasAutomaticGearbox: '',\n hdmi: 'Bilen har en HDMI-port.',\n headRoomFront: 'L\u00E4gsta takh\u00F6jden i frams\u00E4tet.',\n headRoomRear: 'L\u00E4gsta takh\u00F6jden i baks\u00E4tet.',\n headUpDisplay:\n 'Bilen \u00E4r utrustad med en projicerad display i ditt synf\u00E4lt, s\u00E5 du kan se exempelvis nuvarande hastighet utan att beh\u00F6va v\u00E4nda bort blicken fr\u00E5n v\u00E4gen.',\n heatedSteeringWheel: '',\n height: 'Avst\u00E5ndet fr\u00E5n bilens undersida till \u00F6versida.',\n hybridComponentsWarrantyDistance: '',\n hybridComponentsWarrantyTime: '',\n interiorMaterial: 'Material p\u00E5 interi\u00F6ren i bilen, dvs detaljer i bilens insida.',\n isofixRearSeat: 'Universell f\u00E4stanordning f\u00F6r barnstolar.',\n keylessEntry:\n 'Bilens d\u00F6rrar och bagage \u00F6ppnas n\u00E4r den k\u00E4nner av att bilnyckeln \u00E4r i n\u00E4rheten och du tar tag i handtaget. Du beh\u00F6ver d\u00E4rmed inte anv\u00E4nda nyckeln i sig f\u00F6r att \u00F6ppna bilens d\u00F6rrar. ',\n keylessStart:\n 'Bilen startas med ett knapptryck ist\u00E4llet f\u00F6r att bilnyckeln beh\u00F6ver vridas om. Det r\u00E4cker med att bilnyckeln befinner sig i bilen (kan du mao ha den i fickan hela bilresan).',\n laneAssistance: 'Funktion som hj\u00E4lper till att h\u00E5lla bilen inom k\u00F6rf\u00E4ltet.',\n legRoomFront: 'Avst\u00E5nd mellan instrumentpanelen och frams\u00E4te.',\n legRoomRear: 'Avst\u00E5nd mellan frams\u00E4tets rygg och baks\u00E4tet',\n length: 'Avst\u00E5ndet fr\u00E5n bilens baksida till framsida.',\n lowBeam: '',\n mainBeam: '',\n mainBeamAssistance: 'Bilen sl\u00E5r p\u00E5 och av helljuset per automatik, s\u00E5 du slipper g\u00F6ra det sj\u00E4lv.',\n manufactureYear: '\u00C5ret bilen tillverkades.',\n massage: 'Bilens s\u00E4te har inbyggd massage.',\n maxLoadWeight: '',\n maxRoofWeight: 'Hur m\u00E5nga kilo last taket klarar av.',\n maxSpeed: 'H\u00F6gsta hastigheten som bilen g\u00E5r att k\u00F6ra.',\n maxTrailerLoadBraked8Percent: '',\n maxTrailerLoadUnbraked: 'Vikten du f\u00E5r dra p\u00E5 ett sl\u00E4p som inte \u00E4r utrustat med egna bromsar.',\n mildHybrid:\n 'Bilen \u00E4r utrustad med en elmotor som fungerar b\u00E5de som startmotor och generator och st\u00F6ttar f\u00F6rbr\u00E4nningsmotorn, vilket ger l\u00E4gre br\u00E4nslef\u00F6rbrukning och d\u00E4rmed minskade utsl\u00E4ppsniv\u00E5er.',\n mileage: 'Antal mil som bilen har k\u00F6rts. I bilen anges det i kilometer ist\u00E4llet.',\n modelName: 'Vilket utf\u00F6rande av bilmodellen det \u00E4r.',\n modelYear:\n 'Modell\u00E5r s\u00E4tts av tillverkaren. Handlaren \u00E4ndrar ibland modell\u00E5ret f\u00F6r att matcha transportstyrelsens definition f\u00F6r <i>\u00E5rsmodell</i>. Definitionen f\u00F6r \u00E5rsmodell inneb\u00E4r att bilar tillverkade andra halvan av \u00E5ret f\u00E5r n\u00E4sta \u00E5rs modell\u00E5r.',\n ncapStar:\n 'Universellt s\u00E4kerhetsbetyg f\u00F6r bilar, fler stj\u00E4rnor inneb\u00E4r h\u00F6gre s\u00E4kerhet. Skalan g\u00E5r fr\u00E5n 0 till 5 d\u00E4r 5 \u00E4r det h\u00F6gsta betyget. S\u00E5 h\u00E4r beskriver Euro NCAP sj\u00E4lva att slutbetyget ska utl\u00E4sas: <br/>' +\n '<br/>' +\n '5 stj\u00E4rnor: Som helhet utm\u00E4rkt prestanda inom krockskydd och v\u00E4l utrustad med omfattande teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '4 stj\u00E4rnor: Som helhet bra prestanda inom krockskydd, det kan finnas ytterligare teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '3 stj\u00E4rnor: \u00C5tminstone genomsnittligt passagerarskydd men inte alltid utrustad med de senaste funktionerna f\u00F6r att undvika kollisioner<br/><br/>' +\n '2 stj\u00E4rnor: Nominellt krockskydd men saknar teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '1 stj\u00E4rna: Marginellt krockskydd och viss teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '0 stj\u00E4rnor: Uppfyller standarder f\u00F6r typgodk\u00E4nnande s\u00E5 att fordonet f\u00E5r s\u00E4ljas men saknar kritisk modern s\u00E4kerhetsteknik.',\n ncapYear: '\u00C5ret som bilen s\u00E4kerhets- och krocktestades.',\n newVehicleWarrantyDistance: '',\n newVehicleWarrantyTime: '',\n noiseReducingWindows: 'Bilens rutor \u00E4r ljudisolerade f\u00F6r h\u00F6gre komfort.',\n numberOfGears: 'Antal v\u00E4xlar i v\u00E4xell\u00E5dan.',\n numberOfSpeakers: 'Anger totalt antal h\u00F6gtalare i bilen, ju fler h\u00F6gtalare desto h\u00E4ftigare ljud!',\n numberOfUSBPorts: '',\n otherAirbags: '',\n parkingAssistance: 'Funktion som assisterar vid fickparkering.',\n parkingSensorsFront: 'Ljudsignal som indikerar n\u00E4r bilens fr\u00E4mre del n\u00E4rmar sig ett objekt.',\n parkingSensorsRear: 'Ljudsignal som indikerar n\u00E4r bilens bakre del n\u00E4rmar sig ett objekt.',\n pedestrianNCAP:\n 'Euro NCAP bed\u00F6mer hur v\u00E4l bilar skyddar sina passagerare men testar \u00E4ven hur bilar skyddar oskyddade trafikanter \u2013 fotg\u00E4ngare och cyklister \u2013 som de kan kollidera med.',\n preHeater: 'V\u00E4rmer motorn n\u00E4r det \u00E4r kallt ute f\u00F6r att underl\u00E4tta start.',\n rainSensors: 'Vindrutetorkarna aktiveras och anpassas automatiskt i f\u00F6rh\u00E5llande till regnet.',\n remoteStart:\n 'M\u00F6jligg\u00F6r att du kan starta bilens motor med hj\u00E4lp av exempelvis en app i telefonen',\n rimSize: 'F\u00E4lgstorlek angivet i tum.',\n roofColor: 'N\u00E5gon del av bilen, ex taket skiljer sig i kul\u00F6r mot \u00F6vriga bilen.',\n roofRailing: 'Bilen har takreling som du kan f\u00E4sta takr\u00E4cken i.',\n safetyAssistNCAP:\n 'Po\u00E4ngen f\u00F6r f\u00F6rarst\u00F6dsystem best\u00E4ms genom tester av de viktigaste f\u00F6rarst\u00F6d teknikerna som st\u00F6der s\u00E4ker k\u00F6rning f\u00F6r att undvika och begr\u00E4nsa olyckor.',\n seats: 'Antal personer som f\u00E5r \u00E5ka i bilen.',\n segment: 'Vilken typ av bil det handlar om - t.ex. familjebil',\n serviceWeight: 'Anger hur mycket bilen v\u00E4ger med en passagerare som v\u00E4ger ca 75kg.',\n shoulderRoomFront: 'Avst\u00E5nd i bredd f\u00F6r bilens frams\u00E4te.',\n shoulderRoomRear: 'Avst\u00E5nd i bredd f\u00F6r bilens baks\u00E4te.',\n sideMirrorFolding:\n 'Bilens yttre backspeglar g\u00E5r att automatiskt f\u00E4lla in, exempelvis bra p\u00E5 tr\u00E5nga parkeringar.',\n speakerBrand: '',\n startAndStop: 'Bilens motor stoppas n\u00E4r bilen st\u00E5r still f\u00F6r att minska utsl\u00E4ppen.',\n steeringWheelMaterial: '',\n sunRoof: '',\n tankVolume: 'Antal liter br\u00E4nsle som ryms i tanken.',\n timingBeltServiceIntervalDistance:\n 'Bilen \u00E4r utrustad med kamrem som m\u00E5ste bytas vid olika distansintervall.',\n timingBeltServiceIntervalTime:\n 'Bilen \u00E4r utrustad med kamrem som m\u00E5ste bytas vid olika tidsintervall.',\n tintedWindows: 'Bilens rutor har en m\u00F6rkare toning.',\n tiresFront:\n 'D\u00E4ckdimension fram. Presenteras i h\u00F6jd/bredd och inom ett spann. D\u00E4cken som sitter p\u00E5 bilen m\u00E5ste allts\u00E5 falla inom det spannet.',\n tiresRear:\n 'D\u00E4ckdimension bak. Presenteras i h\u00F6jd/bredd och inom ett spann. D\u00E4cken som sitter p\u00E5 bilen m\u00E5ste allts\u00E5 falla inom det spannet.',\n torque:\n 'Bilens vridkraft. H\u00F6g siffra m\u00F6jligg\u00F6r att t.ex. dra tunga sl\u00E4p. Dieselmotorer har generellt mer vridmoment.',\n touchScreen: 'Mittsk\u00E4rmen i bilen \u00E4r en peksk\u00E4rm.',\n towHitch: '',\n towHitchDetachable: '',\n towHitchFoldable: '',\n trafficSignRecognition: 'Bilen \u00E4r utrustad med kameror som l\u00E4ser av g\u00E4llande trafikskyltar.',\n trailerTotalWeightB: 'Vikten man f\u00E5r dra med sl\u00E4p och ett vanligt B-k\u00F6rkort.',\n transmissionKnobMaterial: '',\n trcSystem: 'F\u00E5r bilen att skicka kraft till hjulet som har b\u00E4sta kontakt med underlaget.',\n tripComputer:\n 'I f\u00E4rddatorn som sitter framf\u00F6r ratten kan du se lite information om motorn och br\u00E4nslef\u00F6rbrukningen, bland annat kan du ofta l\u00E4sa ut den \u00E5terst\u00E5ende k\u00F6rstr\u00E4ckan p\u00E5 nuvarande br\u00E4nslevolym.',\n trunkDepth: '',\n trunkHeight: '',\n trunkOutlet: '',\n trunkSpace: 'Volym p\u00E5 bagageutrymmet med uppf\u00E4llda s\u00E4ten. Det m\u00E4ts i liter.',\n trunkSpaceFront: '',\n trunkWidth: '',\n typeOfElectricCar: 'Anger om bilen drivs av el eller om den \u00E4r en hybrid av el och br\u00E4nsle.',\n upholstery: '',\n usb: 'Bilen \u00E4r utrustad med en USB-port',\n ventilatedSeats:\n 'Bilens stolar har ventilation inbyggd, bland annat bra f\u00F6r att f\u00E5 bort fukt fr\u00E5n s\u00E4tena.',\n wheelBase: 'Avst\u00E5ndet mellan fram- och bakhjul.',\n wiFi: 'Bilen \u00E4r utrustad med ett internt WIFI som du kan koppla upp dina egna enheter mot.',\n width: 'Avst\u00E5ndet mellan bilens b\u00E5da yttre l\u00E5ngsidor.',\n windowLifts: '',\n wirelessPhoneCharger:\n 'Bilen \u00E4r utrustad med induktionsladdare, s\u00E5 att telefoner som st\u00F6djer tr\u00E5dl\u00F6s laddning kan laddas i bilen utan laddningssladd.',\n});\n\nconst enrichWithHint = (properties: { [key: string]: EnhancedProperty }) => {\n const clone = deepCopy(properties);\n\n const keys = Object.keys(clone);\n keys.forEach((key) => {\n if (!!HINTS[key]) {\n clone[key].hint = HINTS[key];\n }\n });\n\n return clone;\n};\n\nexport default enrichWithHint;\n", "import { VehicleData } from '../../@types/codegen';\nimport { EnhancedProperty, ItemCategory } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const TEXT_TYPE = 'text';\nexport const NUMBER_TYPE = 'number';\nexport const BASIC_CATEGORY: ItemCategory = Object.freeze({\n id: 1000,\n name: 'Basuppgifter',\n subCategory: null,\n});\nexport const ENGINE_SUBCATEGORY: ItemCategory = Object.freeze({\n id: 6,\n name: 'Motor & Prestanda',\n subCategory: {\n id: 54,\n name: 'Motor',\n subCategory: null,\n },\n});\n\nclass PropertyBuilder {\n name: string = '';\n value: string | number = '';\n type: string = 'unknown';\n unit: string | null = null;\n hint: string | null = null;\n category: ItemCategory | null = null;\n\n withName(name: string) {\n this.name = name;\n return this;\n }\n\n withValue(value: string | number) {\n this.value = value;\n return this;\n }\n\n withType(type: string) {\n this.type = type;\n return this;\n }\n\n withCategory(category: ItemCategory) {\n this.category = category;\n return this;\n }\n\n withUnit(unit: string) {\n this.unit = unit;\n return this;\n }\n\n build(): EnhancedProperty {\n return {\n name: this.name,\n value: this.value,\n type: this.type,\n unit: this.unit,\n hint: this.hint,\n category: this.category,\n };\n }\n}\n\nexport default (item: VehicleData, properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n if (!!item.manufacturer) {\n newProperties.manufacturer = new PropertyBuilder()\n .withName('Varum\u00E4rke')\n .withValue(item.manufacturer)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelSeries) {\n newProperties.modelSeries = new PropertyBuilder()\n .withName('Modell')\n .withValue(item.modelSeries)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelName) {\n newProperties.modelName = new PropertyBuilder()\n .withName('Version')\n .withValue(item.modelName)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelYear) {\n newProperties.modelYear = new PropertyBuilder()\n .withName('Modell\u00E5r')\n .withValue(item.modelYear)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.manufactureYear) {\n newProperties.manufactureYear = new PropertyBuilder()\n .withName('Tillverknings\u00E5r')\n .withValue(item.manufactureYear)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.mileage) {\n newProperties.mileage = new PropertyBuilder()\n .withName('M\u00E4tarst\u00E4llning')\n .withValue(item.mileage)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit('mil')\n .build();\n }\n\n if (!!item.gearboxType) {\n newProperties.gearboxType = new PropertyBuilder()\n .withName('V\u00E4xell\u00E5da')\n .withValue(item.gearboxType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.registrationNumber) {\n newProperties.registrationNumber = new PropertyBuilder()\n .withName('Registreringsnummer')\n .withValue(item.registrationNumber)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.fuelType) {\n newProperties.fuelType = new PropertyBuilder()\n .withName('Br\u00E4nslegrupp')\n .withValue(item.fuelType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.enginePower) {\n newProperties.enginePower = new PropertyBuilder()\n .withName('Effekt')\n .withValue(item.enginePower)\n .withUnit('hk')\n .withType(NUMBER_TYPE)\n .withCategory(ENGINE_SUBCATEGORY)\n .build();\n }\n\n return newProperties;\n};\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nconst PROPERTY_BLACK_LIST = Object.freeze(['towHitchFoldable']);\n\nconst isForbiddenProperty = (key: string) => PROPERTY_BLACK_LIST.includes(key);\n\nconst CATEGORY_WHITE_LIST = Object.freeze([1, 2, 6, 8, 71, 119, 1000]);\n\nconst hasForbiddenCategory = (property: EnhancedProperty) =>\n !property.category ||\n !property.category.id ||\n !CATEGORY_WHITE_LIST.includes(property.category.id);\n\nexport default (properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n Object.keys(properties).forEach((key) => {\n const property = properties[key];\n if (hasForbiddenCategory(property)) {\n delete newProperties[key];\n } else if (isForbiddenProperty(key)) {\n delete newProperties[key];\n }\n });\n\n return newProperties;\n};\n", "import React, { useState, useCallback } from 'react';\nimport { Property } from '../../@types/vehicle-properties';\n\nimport {\n TableListItem,\n TableListKey,\n TableListValue,\n TableListBooleanPos,\n TableListBooleanNeg,\n} from '../../components/TableList/index';\nimport { IconCheck, IconCancel } from '../../components/Icon/index';\nimport { SrOnly } from '../../components/SrOnly/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\n\nconst formatValue = (value: Property['value'], unit: Property['unit']) => {\n if (typeof value === 'boolean') {\n return value ? (\n <TableListBooleanPos title=\"Ja\">\n <SrOnly>Ja</SrOnly>\n <IconCheck block />\n </TableListBooleanPos>\n ) : (\n <TableListBooleanNeg title=\"Nej\">\n <SrOnly>Nej</SrOnly>\n <IconCancel block />\n </TableListBooleanNeg>\n );\n }\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n if (!!value && !!unit) {\n return `${value} ${unit}`;\n }\n return value;\n};\n\ninterface MetadataItemProps {\n name: string;\n hint?: string | null | undefined;\n value: Property['value'];\n unit: Property['unit'];\n}\n\nconst MetadataItem = ({ name, hint, value, unit }: MetadataItemProps) => {\n const [foldout, setFoldout] = useState(false);\n const onToggleFoldout = useCallback(() => setFoldout(!foldout), [foldout]);\n\n const presentedValue = formatValue(value, unit);\n\n return (\n <TableListItem>\n <TableListKey>\n {hint ? (\n <ButtonInline onClick={onToggleFoldout} title={`Mer information om ${name}`}>\n {name}\n </ButtonInline>\n ) : (\n name\n )}\n </TableListKey>\n <TableListValue>{value !== undefined ? presentedValue : 'Uppgift saknas'}</TableListValue>\n {hint && foldout && (\n <Modal title={name} onClose={onToggleFoldout}>\n <Content dangerouslySetInnerHTML={{ __html: hint }} />\n </Modal>\n )}\n </TableListItem>\n );\n};\n\nexport default MetadataItem;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n border-top: 1px solid ${(props) => props.theme.color.border};\n border-bottom: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875rem;\n`;\n\nexport const TableListItem = styled.li`\n display: flex;\n align-items: center;\n padding: ${size(1)} 0;\n\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n`;\n\nexport const TableListKey = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const TableListValue = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1)};\n`;\n\nexport const TableListBooleanPos = styled.div`\n color: ${(props) => props.theme.color.ui.positive};\n`;\n\nexport const TableListBooleanNeg = styled.div`\n color: ${(props) => props.theme.color.ui.negative};\n`;\n", "import * as React from 'react';\n\nimport { Action, Item, List, Wrapper } from './wrapper';\n\nexport interface ITabItem {\n name: string;\n displayName: string;\n}\n\nexport interface ITabInterface<T> {\n tabs: ITabItem[];\n active: string;\n onClick?: (name: T) => void;\n}\n\nconst Tabs = <T extends {}>({ tabs, active, onClick }: ITabInterface<T>) => (\n <Wrapper>\n <List>\n {tabs.map((tab) => (\n <Item key={tab.name}>\n <Action\n title={tab.displayName}\n onClick={onClick ? () => onClick(tab.name as unknown as T) : undefined}\n active={tab.name === active ? 'true' : undefined}\n >\n {tab.displayName}\n </Action>\n </Item>\n ))}\n </List>\n </Wrapper>\n);\n\nexport default Tabs;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { ButtonReset } from '../Button/index';\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n overflow: hidden;\n margin-top: ${size(-1)};\n margin-left: ${size(-1)};\n margin-right: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n white-space: nowrap;\n font-size: 0;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding-left: ${size(1)};\n padding-right: ${size(1)};\n }\n`;\n\nexport const Item = styled.li`\n display: inline-block;\n vertical-align: bottom;\n font-size: 1rem;\n`;\n\ntype ActionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n active?: boolean | string;\n};\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n role: 'tab',\n className: 'wayke__theme wayke__font--bold',\n}))<ActionProps>`\n position: relative;\n display: block;\n padding: ${size(1)};\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :hover {\n color: ${(props) => props.theme.color.textDark};\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: ${size(1)};\n right: ${size(1)};\n height: 2px;\n background-color: ${(props) => props.theme.color.textDark};\n transform: scaleY(0);\n transition: transform 200ms ease;\n z-index: 1;\n }\n\n ${(props) =>\n props.active &&\n css`\n color: ${(props) => props.theme.color.textDark};\n\n :after {\n transform: scaleY(1);\n }\n `}\n`;\n", "import React from 'react';\n\nimport { Scalars } from '../../@types/codegen';\nimport {\n PdfListItem,\n PdfSubtitle,\n PdfTitle,\n PdfContainer,\n PdfListInner,\n PdfLink,\n PdfColumn,\n} from './wrapper';\n\ninterface PdfDownloadItemProps {\n document: Scalars['FileDocument'];\n}\n\nexport const PdfDownloadItem = ({ document }: PdfDownloadItemProps) => (\n <PdfListItem>\n <PdfListInner>\n <PdfColumn>\n <PdfTitle>{document.name}</PdfTitle>\n <PdfSubtitle>{document.contentType}</PdfSubtitle>\n </PdfColumn>\n <PdfColumn>\n <PdfLink href={document.url} rel=\"noopener noreferrer nofollow\" target=\"_blank\">\n \u00D6ppna\n </PdfLink>\n </PdfColumn>\n </PdfListInner>\n </PdfListItem>\n);\n\ninterface PdfDownloadContainerProps {\n documents: Scalars['FileDocument'][];\n}\n\nexport const PdfDownloadContainer = ({ documents }: PdfDownloadContainerProps) => (\n <PdfContainer>\n {documents.map((document, i) => (\n <PdfDownloadItem key={`${document.url}-${i}`} document={document} />\n ))}\n </PdfContainer>\n);\n\nexport default PdfDownloadContainer;\n", "import styled from 'styled-components';\nimport { size } from '../../layout/helpers';\n\nexport const PdfListItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n flex: 0 0 50%;\n padding: ${size(1)};\n\n ${({ theme }) => theme.breakpoint.LtSm} {\n flex: 0 0 100%;\n }\n`;\n\nexport const PdfContainer = styled.ul`\n list-style: none;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n margin: ${size(-1)};\n`;\n\nexport const PdfLink = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n text-decoration: none;\n font-size: 0.875rem;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const PdfTitle = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\nexport const PdfSubtitle = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n`;\n\nexport const PdfColumn = styled.div`\n flex 0 0 auto;\n &:first-child {\n flex: 1 1 auto;\n }\n`;\n\nexport const PdfListInner = styled.div`\n position: relative;\n border: 1px solid ${(props) => props.theme.color.border};\n padding: ${size(1.5)};\n display: flex;\n align-items: center;\n :hover {\n background-color: ${(props) => props.theme.color.hoverOverlay};\n }\n`;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport SearchProvider from '../State/Search/SearchProvider';\nimport Root from '../components/Root/index';\n\nimport useEcom from '../hooks/useEcom';\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeProviderSettings {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n graphQlUrl: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n}\n\nexport type WaykeProviderProps = WaykeProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: WaykeProviderProps) => {\n useEcom(ecomSettings);\n\n return (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <SearchProvider\n url={url}\n apiKey={apiKey}\n useQueryParamsFromUrl={useQueryParamsFromUrl}\n pathRoute={pathRoute}\n >\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </SearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n );\n};\n\nexport default WaykeProvider;\n", "import React from 'react';\nimport { ApolloProvider as ApolloProviderBase, ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst GraphqlProvider = ({ uri, children }: { uri: string; children: React.ReactNode }) => {\n const client = new ApolloClient({ uri, cache: new InMemoryCache() });\n return <ApolloProviderBase client={client}>{children}</ApolloProviderBase>;\n};\n\nexport default GraphqlProvider;\n", "import React from 'react';\n\nimport { ThemeProvider as ThemeProviderBase } from 'styled-components';\n\nimport theme from '../layout/theme';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst ThemeProvider = ({ children }: ThemeProps) => (\n <ThemeProviderBase theme={theme}>{children}</ThemeProviderBase>\n);\n\nexport default ThemeProvider;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { SearchContext } from './SearchContext';\nimport { getUrlSearchParamsFromUrl } from '../../utils/url';\nimport { WaykePubSub } from '../../index';\nimport { ActionOnFilterUpdate } from '../../utils/pubsub/Actions';\nimport usePath from '../Path/usePath';\n\ninterface SearchProviderProps {\n url: string;\n apiKey?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n children: React.ReactNode;\n}\n\nconst initialSearchParams = new URLSearchParams();\ninitialSearchParams.set('hits', '30');\ninitialSearchParams.set('sort', 'published-desc');\n\nconst SearchProvider = ({\n url,\n apiKey,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: SearchProviderProps) => {\n const { replaceState, pushState } = usePath();\n const [queryFilter, setQueryFilter] = useState<QueryFilter>({\n searchParams: initialSearchParams,\n });\n\n const [initialFacets, setInitialFacets] = useState<Facet[]>();\n const [documents, setDocuments] = useState<Document[]>();\n const [initialize, setInitialize] = useState(false);\n\n const { data: initialDataRepsonse } = useFetch<Search>(\n `${url}?hits=0`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !!initialFacets\n );\n\n const query = queryFilter.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !initialize || !!queryFilter?.block\n );\n\n const popStateEvent = (event: PopStateEvent) => {\n const { currentTarget } = event;\n if (currentTarget) {\n const nextSearchParams = new URLSearchParams((currentTarget as Window).location.search);\n\n if (!nextSearchParams.has('sort')) {\n nextSearchParams.set('sort', 'published-desc');\n }\n\n setQueryFilter({\n searchParams: nextSearchParams,\n });\n }\n };\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n window.addEventListener('popstate', popStateEvent);\n }\n\n const onFilterUpdateEvent: ActionOnFilterUpdate = {\n actionName: 'onFilterUpdate',\n callback: onFilterUpdate,\n };\n\n WaykePubSub.subscribeAction(onFilterUpdateEvent);\n return () => {\n window.removeEventListener('popstate', popStateEvent);\n WaykePubSub.unsubscribeAction(onFilterUpdateEvent);\n };\n }, []);\n\n useEffect(() => {\n if (initialDataRepsonse) {\n setInitialFacets(initialDataRepsonse.facets);\n }\n }, [initialDataRepsonse]);\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n const nextSearchParams = new URLSearchParams(queryFilter.searchParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n if (nextSearchParams.get('sort') === 'published-desc') {\n nextSearchParams.delete('sort');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (initialize) {\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n const prefix = _path ? `/${_path}/` : '/';\n\n const index = _path ? window.location.pathname.indexOf(prefix) : -1;\n let pathname = window.location.pathname;\n if (index > -1) {\n pathname = pathname.substr(0, index);\n }\n\n pushState(`${pathname}${nextSearch}`);\n }\n }\n }\n }, [queryFilter, initialize, useQueryParamsFromUrl]);\n\n useEffect(() => {\n if (response) {\n if (!initialFacets && !useQueryParamsFromUrl) {\n setInitialFacets(response.facets);\n }\n\n if (useQueryParamsFromUrl && response.query?.parameters) {\n const nextSearchParams = new URLSearchParams(response.query.parameters);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n setQueryFilter({\n searchParams: new URLSearchParams(nextSearch),\n block: true,\n });\n }\n }\n\n if (queryFilter?.concatResult) {\n setDocuments([...(documents || []), ...(response.documentList.documents || [])]);\n } else {\n setDocuments(response.documentList.documents || []);\n }\n }\n }, [response, useQueryParamsFromUrl]);\n\n const onFilterUpdate = useCallback(\n (nextQuery: string) => {\n {\n if (!initialize) {\n setInitialize(true);\n }\n\n setQueryFilter({\n searchParams: new URLSearchParams(nextQuery),\n });\n }\n },\n [initialize]\n );\n\n const onLoadMore = useCallback(() => {\n if (response) {\n setQueryFilter({\n searchParams: new URLSearchParams(response?.documentList.pagination.nextPage?.query),\n concatResult: true,\n });\n }\n }, [response]);\n\n const onInitialize = useCallback(\n (_initialQueryParams?: URLSearchParams) => {\n if (!initialize) {\n const searchParamsFromUrl = getUrlSearchParamsFromUrl();\n\n const initialQueryParams = useQueryParamsFromUrl\n ? searchParamsFromUrl\n : _initialQueryParams;\n\n if (useQueryParamsFromUrl && _initialQueryParams) {\n _initialQueryParams.forEach((value, key) => {\n if (!initialQueryParams?.getAll(key)?.some((v) => v === value)) {\n initialQueryParams?.append(key, value);\n }\n });\n }\n\n if (initialQueryParams) {\n const nextSearchParams = new URLSearchParams(initialQueryParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n\n if (!initialQueryParams.has('hits')) {\n initialQueryParams.set('hits', '30');\n }\n if (!initialQueryParams.has('sort')) {\n initialQueryParams.set('sort', 'published-desc');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n\n setQueryFilter({\n searchParams: initialQueryParams,\n });\n replaceState(`${window.location.pathname}${nextSearch}`);\n }\n setInitialize(true);\n }\n },\n [initialize]\n );\n\n const value = {\n loading,\n error,\n response,\n documents,\n initialFacets,\n queryFilter,\n onFilterUpdate,\n onLoadMore,\n onInitialize,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n", "import { useEffect, useState, useCallback } from 'react';\n\nconst cache: { [key: string]: unknown | undefined } = {};\n\nconst getCachedResult = <T>(key: string) => (cache?.[key] as T) || undefined;\nconst setCachedResult = <T>(key: string, value: T) => {\n cache[key] = value;\n};\n\n/**\n * Reusing already fired request by attaching to same promise.\n * Usefull if multiple request is fetching from same endpoint, while\n * the first request has not been finished (so no cache exist yet).\n */\n\nlet pendingPromise: { [key: string]: Promise<globalThis.Response> } = {};\nconst isPendingPromise = (url: string) => !!pendingPromise[url];\nconst setPendingPromise = (url: string, promise: Promise<globalThis.Response>) => {\n pendingPromise = {\n ...pendingPromise,\n [url]: promise,\n };\n};\nconst clearPendingPromise = (url: string) => {\n delete pendingPromise[url];\n};\n\ninterface Response<T> {\n loading: boolean;\n data?: T;\n error: boolean;\n}\n\nconst useFetch = <T>(\n path: RequestInfo,\n options?: RequestInit,\n skip?: boolean,\n promiseCache?: boolean\n): Response<T> => {\n const [data, setData] = useState<T | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n const doFetch = useCallback(async () => {\n const key = path.toString();\n const cached = getCachedResult<T>(key);\n setError(false);\n if (cached) {\n setData(cached);\n return;\n }\n setLoading(true);\n try {\n const reusePromise = promiseCache && isPendingPromise(key);\n const request = reusePromise ? pendingPromise[key] : fetch(path, options);\n if (promiseCache) {\n setPendingPromise(key, request);\n }\n\n const result = await request;\n if (result.ok) {\n const json = await result.clone().json();\n setCachedResult(key, json);\n setData(json);\n }\n } catch (e) {\n setError(true);\n } finally {\n setLoading(false);\n clearPendingPromise(key);\n }\n return;\n }, [path, options]);\n\n useEffect(() => {\n if (!skip) {\n doFetch();\n }\n }, [path, skip]);\n\n return {\n loading,\n data,\n error,\n };\n};\n\nexport default useFetch;\n", "export const getUrlSearchParamsFromUrl = () => new URLSearchParams(window.location.search);\n", "import styled from 'styled-components';\n\nconst Root = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 1rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n\n a img {\n border: 0;\n }\n`;\n\nexport default Root;\n", "import { EcomSettings } from '../providers/WaykeProvider';\n\nconst useEcom = (ecomSettings?: EcomSettings) => {\n if (ecomSettings?.url) {\n import('@wayke-se/ecom').then(({ config }) => {\n config.bind({\n api: {\n address: ecomSettings.url,\n },\n /** Specifying an origin is optional **/\n origin: {\n topic: 'Wayke',\n channel: 'wayke.se',\n },\n bankIdThumbprint: ecomSettings.bankIdThumbprint,\n });\n });\n }\n};\n\nexport default useEcom;\n", "import React from 'react';\nimport { SettingsContext } from './SettingsContext';\nimport { EcomSettings } from '../../providers/WaykeProvider';\n\ninterface SettingsProps {\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n children: React.ReactNode;\n}\n\nconst SettingsProvider = ({\n googleMapsApiKey,\n googleMapsMarker,\n ecomSettings,\n children,\n}: SettingsProps) => (\n <SettingsContext.Provider value={{ ecomSettings, googleMapsApiKey, googleMapsMarker }}>\n {children}\n </SettingsContext.Provider>\n);\n\nexport default SettingsProvider;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\ninterface RelatedSearchProviderProps {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n children: React.ReactNode;\n}\n\nconst RelatedSearchProvider = ({ url, urlMlt, apiKey, children }: RelatedSearchProviderProps) => {\n const [queryFilter, setQueryFilter] = useState<QueryFilter>();\n\n const query = queryFilter?.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${urlMlt || url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !queryFilter\n );\n\n const fetchRelated = useCallback(\n (searchParams: URLSearchParams) =>\n setQueryFilter({\n searchParams,\n }),\n []\n );\n\n const value = {\n moreLikeThisUrl: !!urlMlt,\n loading,\n error,\n response,\n queryFilter,\n fetchRelated,\n };\n\n return <RelatedSearchContext.Provider value={value}>{children}</RelatedSearchContext.Provider>;\n};\n\nexport default RelatedSearchProvider;\n", "import React, { useCallback } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport useSessionStorage from '../../hooks/useSessionStorage';\n\ninterface CentralStorageProviderProps {\n children: React.ReactNode;\n}\n\nconst CentralStorageProvider = ({ children }: CentralStorageProviderProps) => {\n const { value, set, remove } = useSessionStorage('centralStorage');\n\n const setCentralStorageId = useCallback((id?: string) => (id ? set(id) : remove()), []);\n\n return (\n <CentralStorageContext.Provider value={{ centralStorageId: value, setCentralStorageId }}>\n {children}\n </CentralStorageContext.Provider>\n );\n};\n\nexport default CentralStorageProvider;\n", "import { useState, useCallback } from 'react';\n\nconst useSessionStorage = (key: string) => {\n const [value, setValue] = useState(sessionStorage.getItem(key));\n\n const set = useCallback(\n (v: string) => {\n sessionStorage.setItem(key, v);\n setValue(v);\n },\n [key]\n );\n\n const remove = useCallback(() => {\n sessionStorage.removeItem(key);\n setValue(null);\n }, [key]);\n\n const clear = useCallback(() => {\n sessionStorage.clear();\n setValue(null);\n }, [key]);\n\n return {\n value,\n set,\n remove,\n clear,\n };\n};\n\nexport default useSessionStorage;\n", "import React, { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport { PathContext, PathContextProps } from './PathContext';\nimport reducer, { initialState, SET_PATH } from './reducer';\n\nconst regexGuidAnyWhere =\n /(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}/g;\nconst POP_STATE = 'popstate';\n\ninterface PathProviderProps {\n children: React.ReactNode;\n}\n\nconst PathProvider = ({ children }: PathProviderProps) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n const previousPath = usePrevious(state.path);\n\n useEffect(() => {\n const onPopState = () => {\n dispatch({ type: SET_PATH, path: window.location.pathname });\n };\n\n window.addEventListener(POP_STATE, onPopState);\n return () => {\n window.removeEventListener(POP_STATE, onPopState);\n };\n }, []);\n\n const pushState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.pushState(null, '', `${path}`);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const replaceState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.replaceState(null, '', path);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const id = useMemo(() => state.path.match(regexGuidAnyWhere)?.pop(), [state.path]);\n\n const value: PathContextProps = useMemo(\n () => ({\n ...state,\n previousPath,\n id,\n pushState,\n replaceState,\n }),\n [state]\n );\n\n return <PathContext.Provider value={value}>{children}</PathContext.Provider>;\n};\n\nexport default PathProvider;\n", "import { useRef, useEffect } from 'react';\n\nconst usePrevious = <T>(value: T) => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport default usePrevious;\n", "import { BaseAction } from '../../@types/action';\n\nexport const SET_PATH = 'SET_PATH';\ntype SET_PATH_TYPE = BaseAction<typeof SET_PATH> & {\n path: string;\n};\n\ntype PathAction = SET_PATH_TYPE;\n\ninterface PathState {\n path: string;\n}\n\nexport const initialState: PathState = {\n path: window.location.pathname,\n};\n\nconst pathReducer = (state: PathState, action: PathAction) => {\n const next = { ...state };\n switch (action.type) {\n case SET_PATH:\n next.path = action.path;\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default pathReducer;\n", "import React from 'react';\n\nimport WaykeProvider, { WaykeProviderProps } from '../providers/WaykeProvider';\nimport WaykeComposite, { WaykeCompositeProps } from './WaykeComposite';\n\nexport interface WaykeCompositeWithProviderProps {\n provider: WaykeProviderProps;\n composite?: WaykeCompositeProps;\n}\n\nconst WaykeCompositeWithProvider = ({ provider, composite }: WaykeCompositeWithProviderProps) => (\n <WaykeProvider {...provider}>\n <WaykeComposite {...composite} />\n </WaykeProvider>\n);\n\nexport default WaykeCompositeWithProvider;\n", "import React, { useEffect } from 'react';\nimport useHashGuid from '../hooks/useHashGuid';\nimport PubSub from '../utils/pubsub/pubsub';\n\nimport WaykeSearch, { WaykeSearchProps } from './search/index';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './searchItem/index';\nimport usePath from '../State/Path/usePath';\n\nexport type WaykeCompositeProps = Omit<WaykeSearchProps & WaykeSearchItemProps, 'id'>;\n\nconst WaykeComposite = ({\n filterList,\n initialQueryParams,\n removeSearchBar,\n removeFilterOptions,\n disableResetScrollOnInit,\n placeholderImage,\n pathRoute,\n modifyDocumentTitleItem,\n modifyDocumentTitleSearch,\n}: WaykeCompositeProps) => {\n const hashId = useHashGuid();\n const { id: pathId } = usePath();\n\n useEffect(() => {\n if (!pathRoute) {\n if (hashId) {\n PubSub.publish('HashRouteChange', hashId);\n } else {\n PubSub.publish('HashRouteChange');\n }\n }\n }, [hashId]);\n\n const id = pathId || hashId;\n\n return (\n <>\n {id ? (\n <WaykeSearchItem\n id={id}\n hashRoute={!pathRoute}\n disableResetScrollOnInit={disableResetScrollOnInit}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n modifyDocumentTitleItem={modifyDocumentTitleItem}\n />\n ) : (\n <WaykeSearch\n filterList={filterList}\n initialQueryParams={initialQueryParams}\n removeSearchBar={removeSearchBar}\n hashRoute={!pathRoute}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n removeFilterOptions={removeFilterOptions}\n modifyDocumentTitleSearch={modifyDocumentTitleSearch}\n />\n )}\n </>\n );\n};\n\nexport default WaykeComposite;\n", "import { useState, useEffect } from 'react';\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst HASH_CHANGE = 'hashchange';\n\nconst getGuid = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n return regexGuid.test(guid) || !guid ? guid : undefined;\n};\n\nconst useHashGuid = () => {\n const [id, setId] = useState<string | undefined>(() => getGuid());\n const onHashChange = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n if (regexGuid.test(guid) || !guid) {\n setId(window.location.hash.substr(1, window.location.hash.length));\n } else {\n throw 'Invalid Guid';\n }\n };\n\n useEffect(() => {\n onHashChange();\n window.addEventListener(HASH_CHANGE, onHashChange);\n return () => {\n window.removeEventListener(HASH_CHANGE, onHashChange);\n };\n }, []);\n\n return id;\n};\n\nexport default useHashGuid;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport Root from '../components/Root/index';\n\nimport useEcom from '../hooks/useEcom';\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeItemProviderSettings {\n url: string;\n urlMlt?: string;\n graphQlUrl: string;\n apiKey?: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n}\n\nexport type WaykeItemProviderProps = WaykeItemProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeItemProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n children,\n}: WaykeItemProviderProps) => {\n useEcom(ecomSettings);\n\n return (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n );\n};\n\nexport default WaykeItemProvider;\n", "import './styles.scss';\n\nimport WaykeSearch, { WaykeSearchProps } from './layouts/search';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './layouts/searchItem';\nimport WaykeProvider, { WaykeProviderSettings } from './providers/WaykeProvider';\nimport WaykeComposite, {\n WaykeCompositeWithProviderProps,\n} from './layouts/WaykeCompositeWithProvider';\nimport SearchBar from './components/SearchBar/index';\nimport WaykeThemeProvider from './providers/themeProvider';\nimport WaykeItemProvider, { WaykeItemProviderSettings } from './providers/WaykeItemProvidet';\nimport WaykePubSub, { EventSubscriptions } from './utils/pubsub/pubsub';\nimport { SearchFilterTypes, SearchFilterNameTypes } from './@types/filter';\n\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './utils/pubsub/Events';\n\nexport {\n WaykeProvider,\n WaykeItemProvider,\n WaykeSearch,\n WaykeSearchItem,\n SearchBar,\n WaykeThemeProvider,\n WaykeItemProviderSettings,\n WaykePubSub,\n WaykeCompositeWithProviderProps,\n WaykeProviderSettings,\n WaykeSearchProps,\n WaykeSearchItemProps,\n SearchFilterTypes,\n SearchFilterNameTypes,\n EventSubscriptions,\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n};\n\nexport default WaykeComposite;\n"],
5
- "mappings": "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",
6
- "names": ["DrivingDistance", "lookupAddress", "validateResponse", "getOptions", "create", "buildLookupRequest", "lookup", "newLookupRequest", "getUrl", "auth", "collect", "cancel", "getRoute", "validate", "newCase", "getStatus", "signCase", "cancelSigning", "accept", "decline", "http\n .builder", "http\n .captureStateContext", "http.json", "http.context", "api\n .lookupAddress", "http\n .builder", "api\n .find", "http.builder", "api\n .init", "api\n .create", "http\n .json", "api\n .lookup", "AuthMethod", "AuthStatus", "builder", "http.captureStateContext", "http.raw", "doAuthRequest", "doCollectRequest", "doCancelRequest", "api\n .auth", "api\n .collect", "api.cancel", "MaritalStatus", "Employment", "CreditAssessmentStatus", "CreditAssessmentDecision", "CreditAssessmentRecommendation", "api.newCase", "api\n .getStatus", "api\n .signCase", "api.cancelSigning", "api.accept", "api.decline", "DeliveryType", "PaymentType", "VehicleCondition", "import_react", "styled", "React", "import_styled_components", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_styled_components", "import_styled_components", "styled", "styled", "React", "import_styled_components", "import_styled_components", "styled", "Wrapper", "import_styled_components", "styled", "Wrapper", "formatFns", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "React", "import_styled_components", "Icon", "styled", "Icon", "React", "Wrapper", "React", "Wrapper", "import_react", "import_styled_components", "styled", "import_react", "React", "import_styled_components", "import_styled_components", "styled", "Wrapper", "styled", "Header", "Body", "Footer", "FooterAction", "React", "import_react", "React", "ReactDOM", "Wrapper", "Header", "Body", "Footer", "import_react", "import_styled_components", "List", "styled", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "Body", "Item", "React", "Item", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "Body", "List", "import_styled_components", "styled", "import_react", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Action", "React", "Item", "Action", "List", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Action", "Label", "React", "Item", "Action", "Label", "List", "React", "import_react", "import_react", "import_styled_components", "styled", "Bar", "import_react", "Handle", "React", "import_react", "Track", "React", "index", "React", "Bar", "Handle", "Track", "x", "getSteps", "init", "React", "React", "React", "FooterAction", "React", "import_react", "import_styled_components", "Wrapper", "styled", "List", "Item", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Description", "Label", "import_react", "import_styled_components", "Item", "styled", "Action", "List", "React", "Item", "Action", "List", "index", "import_react", "import_react", "context", "React", "Wrapper", "LazyLoad", "Heading", "Description", "Label", "document", "React", "Wrapper", "List", "Item", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Action", "React", "Wrapper", "Label", "Action", "import_react", "React", "value", "React", "import_react", "import_styled_components", "Wrapper", "styled", "Icon", "Content", "Heading", "React", "Wrapper", "Icon", "Content", "Heading", "React", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Label", "import_styled_components", "Price", "styled", "OldPrice", "React", "List", "Item", "Label", "Price", "OldPrice", "React", "import_styled_components", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "Content", "React", "Wrapper", "import_react", "import_styled_components", "Wrapper", "styled", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "Wrapper", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "Action", "React", "Wrapper", "Action", "import_react", "index", "scrollIntoView", "React", "import_styled_components", "styled", "import_client", "React", "import_styled_components", "Wrapper", "styled", "UiBlock", "Content", "Header", "Heading", "Close", "CloseBtn", "Body", "Image", "Wrapper", "UiBlock", "Content", "Header", "Heading", "Close", "CloseBtn", "Body", "import_react", "import_react", "React", "import_styled_components", "Wrapper", "styled", "Logo", "Content", "Wrapper", "Logo", "Content", "import_react", "import_styled_components", "List", "styled", "Item", "Label", "Value", "React", "List", "Item", "Label", "Value", "React", "Image", "import_react", "import_client", "import_client", "FinancialOptionDetail", "import_react", "import_styled_components", "styled", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Value", "React", "Wrapper", "Label", "Value", "import_react", "import_react_compound_slider", "React", "Bar", "Handle", "Track", "React", "React", "React", "React", "index", "import_react", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Description", "Footer", "React", "Wrapper", "Heading", "Description", "Footer", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Info", "Extend", "React", "Wrapper", "Header", "Info", "Extend", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_react", "import_styled_components", "Wrapper", "styled", "Input", "React", "Wrapper", "Input", "React", "React", "import_styled_components", "Label", "styled", "Wrapper", "Input", "import_react", "import_styled_components", "iconSize", "Wrapper", "styled", "Select", "Option", "Icon", "React", "Wrapper", "Select", "Option", "Icon", "import_styled_components", "styled", "import_styled_components", "styled", "import_client", "import_client", "React", "React", "index", "import_react", "import_marked", "import_react", "React", "Insurance", "React", "index", "React", "import_react", "import_marked", "React", "import_react", "import_react", "import_react", "React", "React", "import_react", "import_styled_components", "List", "styled", "Item", "Icon", "Label", "React", "Item", "Icon", "Label", "List", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Body", "Info", "Action", "InfoBtn", "Title", "React", "Wrapper", "Header", "Info", "Title", "InfoBtn", "Action", "Body", "import_react", "import_react", "React", "import_react", "import_marked", "React", "React", "packageOption", "index", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Action", "React", "Wrapper", "Heading", "Action", "import_styled_components", "styled", "import_react", "import_react", "id", "React", "document", "import_react", "import_marked", "React", "index", "import_react", "import_styled_components", "styled", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "import_react", "React", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Image", "React", "Wrapper", "Image", "Branch", "React", "import_react", "import_client", "import_client", "HoursOpen", "import_react", "React", "import_react", "React", "import_react", "index", "import_react", "import_styled_components", "styled", "React", "React", "import_styled_components", "Wrapper", "styled", "List", "Item", "Action", "props", "Wrapper", "List", "Item", "Action", "React", "index", "import_react", "import_styled_components", "styled", "theme", "document", "React", "WaykeEcomWeb", "vehicle", "React", "import_react", "import_react", "import_client", "React", "ApolloProviderBase", "import_react", "import_styled_components", "React", "ThemeProviderBase", "import_react", "import_react", "json", "index", "value", "React", "import_styled_components", "styled", "import_react", "React", "import_react", "React", "import_react", "import_react", "React", "import_react", "import_react", "React", "React", "import_react", "import_react", "import_react", "React", "React", "import_react", "React"]
3
+ "sources": ["../node_modules/@wayke-se/ecom/dist-src/config/index.js", "../node_modules/@wayke-se/ecom/dist-src/errors/request-error.js", "../node_modules/@wayke-se/ecom/dist-src/errors/vehicle-unavailable-error.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/handle-response-error.js", "../node_modules/@wayke-se/ecom/dist-src/http/http-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/http/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/customers.js", "../node_modules/@wayke-se/ecom/dist-src/customers/address-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/customers/address-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/customers/customer-builder.js", "../node_modules/@wayke-se/ecom/dist-src/customers/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/insurances.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/insurance-options-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/insurance-options-response.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/orders.js", "../node_modules/@wayke-se/ecom/dist-src/orders/insurance-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-create-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-create-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-options-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/payments/payment-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-options-response.js", "../node_modules/@wayke-se/ecom/dist-src/orders/payment-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/order-credit-assessment-builder.js", "../node_modules/@wayke-se/ecom/dist-src/orders/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/payments.js", "../node_modules/@wayke-se/ecom/dist-src/payments/payment-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/payments/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/vehicles.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-lookup-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-lookup-response.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/vehicle-trade-builder.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/index.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/types.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/utils.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/auth.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/collect.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid/cancel.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/bankid.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-auth-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-auth-response.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-collect-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/message-resolver.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-collect-response.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/bankid-cancel-request-builder.js", "../node_modules/@wayke-se/ecom/dist-src/bankid/index.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/get-status.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/new-case.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/sign.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/cancel-sign.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/decline.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment/accept.js", "../node_modules/@wayke-se/ecom/dist-src/http/apis/credit-assessment.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/sign-response.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/types.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-status.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-decision.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/convert-recommendation.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/status-response.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/validator.js", "../node_modules/@wayke-se/ecom/dist-src/credit-assessment/index.js", "../node_modules/@wayke-se/ecom/dist-src/insurances/types.js", "../node_modules/@wayke-se/ecom/dist-src/orders/types.js", "../node_modules/@wayke-se/ecom/dist-src/vehicles/types.js", "../src/layouts/search/index.tsx", "../src/components/Container/index.tsx", "../src/components/Container/wrapper.tsx", "../src/layout/theme.ts", "../src/layout/helpers.tsx", "../src/components/Page/index.tsx", "../src/components/Result/index.tsx", "../src/components/Result/wrapper.tsx", "../src/components/ProgressBar/index.tsx", "../src/components/ProgressBar/wrapper.tsx", "../src/components/Button/index.tsx", "../src/components/Utility/index.tsx", "../src/components/Loader/index.tsx", "../src/components/Loader/wrapper.tsx", "../src/layout/keyframes.tsx", "../src/components/SrOnly/index.tsx", "../src/utils/formats.ts", "../src/utils/constants.ts", "../src/State/Search/useSearch.ts", "../src/State/Search/SearchContext.ts", "../src/components/SortSelect/index.tsx", "../src/components/SortSelect/wrapper.tsx", "../src/components/Icon/index.tsx", "../src/utils/sortOptions.ts", "../src/components/Filter/index.tsx", "../src/components/Filter/wrapper.tsx", "../src/components/FilterPanel/index.tsx", "../src/components/Panel/index.tsx", "../src/components/Panel/wrapper.tsx", "../src/components/Heading/index.tsx", "../src/components/Portal/portal-namespace.ts", "../src/components/Portal/portal-element.tsx", "../src/components/Portal/portal.tsx", "../src/components/Accordion/index.tsx", "../src/components/Accordion/wrapper.tsx", "../src/components/Repeat/index.tsx", "../src/components/FilterPanel/faceSelector.tsx", "../src/components/FilterPanel/checkListFacet.tsx", "../src/components/Checklist/index.tsx", "../src/components/Checklist/wrapper.tsx", "../src/components/OverflowBox/index.tsx", "../src/components/OverflowBox/wrapper.tsx", "../src/components/FilterPanel/colorFacet.tsx", "../src/components/ColorSelect/index.tsx", "../src/components/ColorSelect/wrapper.tsx", "../src/utils/converters.ts", "../src/components/FilterPanel/rangeFacet.tsx", "../src/components/RangeSlider/index.tsx", "../src/components/RangeSlider/wrapper.tsx", "../src/components/RangeSlider/handle.tsx", "../src/components/RangeSlider/track.tsx", "../src/components/Grid/index.tsx", "../src/components/Grid/wrapper.tsx", "../src/components/ProductCard/index.tsx", "../src/components/ProductCard/wrapper.tsx", "../src/components/UspList/index.tsx", "../src/components/UspList/wrapper.tsx", "../src/State/Path/usePath.ts", "../src/State/Path/PathContext.ts", "../src/components/SearchTerm/index.tsx", "../src/components/SearchTerm/wrapper.tsx", "../src/components/SearchFilter/index.tsx", "../src/components/SearchBar/index.tsx", "../src/components/InputSearch/index.tsx", "../src/components/InputSearch/wrapper.tsx", "../src/hooks/useOutsideClick.ts", "../src/components/Snackbar/index.tsx", "../src/components/Snackbar/wrapper.tsx", "../src/utils/pubsub/pubsub.ts", "../src/layouts/searchItem/index.tsx", "../src/components/PriceTable/index.tsx", "../src/components/PriceTable/wrapper.tsx", "../src/components/Price/index.tsx", "../src/components/LogoBox/index.tsx", "../src/components/LogoBox/wrapper.tsx", "../src/components/Content/index.tsx", "../src/components/Content/wrapper.tsx", "../src/components/Blockquote/index.tsx", "../src/components/Blockquote/wrapper.tsx", "../src/components/Avatar/index.tsx", "../src/components/Avatar/wrapper.tsx", "../src/components/ExtendContent/index.tsx", "../src/components/ExtendContent/wrapper.tsx", "../src/components/Gallery/index.tsx", "../src/components/Gallery/wrapper.tsx", "../src/components/Lightbox/index.tsx", "../src/components/Lightbox/wrapper.tsx", "../src/components/Video/EmbeddedVideoLightbox.tsx", "../src/components/Video/YoutubePlayer.tsx", "../src/components/Video/utils.ts", "../src/components/Video/wrapper.tsx", "../src/components/Video/VimeoPlayer.tsx", "../src/components/Video/CustomPlayer.tsx", "../src/components/Video/Video.tsx", "../src/components/ThreeSixty/ThreeSixtLightbox.tsx", "../src/components/Gallery/MediaButton.tsx", "../src/components/ThreeSixty/Rotation.tsx", "../src/components/Video/EmbededVideo.tsx", "../src/components/Video/useThumbnail.ts", "../src/hooks/useVimeoThumbnail.ts", "../src/hooks/useFetch.ts", "../src/components/Modal/index.tsx", "../src/components/Modal/wrapper.tsx", "../src/components/Video/QuickNavEmbeded.tsx", "../src/components/ThreeSixty/ThreeSixty.tsx", "../src/components/ProductPage/index.tsx", "../src/hooks/useSearchItem.ts", "../src/queries/SEARCH_ITEM_QUERY.ts", "../src/components/FinancialOptions/index.tsx", "../src/components/FinancialOptions/leasing.tsx", "../src/components/OptionBox/index.tsx", "../src/components/OptionBox/wrapper.tsx", "../src/components/DataList/index.tsx", "../src/components/DataList/wrapper.tsx", "../src/components/FinancialOptions/loan.tsx", "../src/hooks/useLoan.ts", "../src/queries/LOAN_CALCULATION.ts", "../src/components/FinancialOptions/LoanModal.tsx", "../src/components/ContentLogo/index.tsx", "../src/components/RangeSlider/SliderWithLabel.tsx", "../src/components/RangeSliderLabel/index.tsx", "../src/components/RangeSliderLabel/wrapper.tsx", "../src/components/RangeSlider/RangeSliderSimple.tsx", "../src/components/InsuranceOptions/index.tsx", "../src/components/InsuranceOptions/Insurance.tsx", "../src/components/InsuranceOptions/InsuranceModal.tsx", "../src/components/DetailBox/index.tsx", "../src/components/DetailBox/wrapper.tsx", "../src/components/ExtendInfo/index.tsx", "../src/components/ExtendInfo/wrapper.tsx", "../src/components/InputLabel/index.tsx", "../src/components/InputLabel/wrapper.tsx", "../src/components/InputText/index.tsx", "../src/components/InputText/wrapper.tsx", "../src/components/InputCheckbox/index.tsx", "../src/components/InputCheckbox/wrapper.tsx", "../src/components/InputSelect/index.tsx", "../src/components/InputSelect/wrapper.tsx", "../src/components/InputGroup/index.tsx", "../src/components/ColumnRow/index.tsx", "../src/hooks/useInsurance.ts", "../src/queries/INSURANCE_CALCULATION.ts", "../src/utils/ssn.ts", "../src/components/InsuranceOptions/InsuranceFree.tsx", "../src/components/InsuranceOptions/InsuranceFreeModal.tsx", "../src/layouts/searchItem/ManufacturerPackagesOption.tsx", "../src/layouts/searchItem/CheckList.tsx", "../src/components/ActionList/index.tsx", "../src/components/ActionList/toggle-item.tsx", "../src/utils/phonenumbers.ts", "../src/utils/metadata.min.ts", "../src/components/CheckMarkList/index.tsx", "../src/components/CheckMarkList/wrapper.tsx", "../src/components/SwitchBar/index.tsx", "../src/components/SwitchBar/wrapper.tsx", "../src/layouts/searchItem/BranchModal.tsx", "../src/State/CentralStorage/CentralStorageContext.ts", "../src/layouts/searchItem/PackageOptionModal.tsx", "../src/layouts/searchItem/Related.tsx", "../src/components/SectionHeader/index.tsx", "../src/components/SectionHeader/wrapper.tsx", "../src/components/OverflowGrid/index.tsx", "../src/State/RelatedSearch/useRelatedSearch.ts", "../src/State/RelatedSearch/RelatedSearchContext.ts", "../src/utils/regex.ts", "../src/layouts/searchItem/PackageOptions.tsx", "../src/layouts/searchItem/Branch.tsx", "../src/components/TableColumn/index.tsx", "../src/components/OpeningHours/index.tsx", "../src/components/Badge/index.tsx", "../src/components/Badge/wrapper.tsx", "../src/components/PhoneNumber/index.tsx", "../src/components/Map/index.tsx", "../src/State/Settings/useSettings.ts", "../src/State/Settings/SettingsContext.ts", "../src/components/Map/wrapper.tsx", "../src/State/CentralStorage/useCentralStorage.ts", "../src/hooks/useSearchItemBranch.ts", "../src/queries/SEARCH_ITEM_BRANCH_QUERY.ts", "../src/layouts/searchItem/Page404.tsx", "../src/layouts/searchItem/PageLoading.tsx", "../src/layouts/searchItem/Property.tsx", "../src/utils/vehicle-properties/property-tree-creator.ts", "../src/utils/vehicle-properties/compare-categories.ts", "../src/utils/vehicle-properties/compare-properties.ts", "../src/utils/vehicle-properties/compare-basic-properties.ts", "../src/utils/vehicle-properties/property-tree-sorter.ts", "../src/utils/deep-copy.ts", "../src/utils/vehicle-properties/property-hint-enricher.ts", "../src/utils/vehicle-properties/custom-property-adder.ts", "../src/utils/vehicle-properties/property-remover.ts", "../src/layouts/searchItem/MetadataItem.tsx", "../src/components/TableList/index.tsx", "../src/components/Tabs/index.tsx", "../src/components/Tabs/wrapper.tsx", "../src/components/Pdf/index.tsx", "../src/components/Pdf/wrapper.tsx", "../src/providers/WaykeProvider.tsx", "../src/providers/graphqlProvider.tsx", "../src/providers/themeProvider.tsx", "../src/State/Search/SearchProvider.tsx", "../src/utils/url.ts", "../src/components/Root/index.tsx", "../src/hooks/useEcom.ts", "../src/State/Settings/SettingsProvider.tsx", "../src/State/RelatedSearch/RelatedSearchProvider.tsx", "../src/State/CentralStorage/CentralStorageProvider.tsx", "../src/hooks/useSessionStorage.ts", "../src/State/Path/PathProvider.tsx", "../src/hooks/usePrevious.ts", "../src/State/Path/reducer.ts", "../src/layouts/WaykeCompositeWithProvider.tsx", "../src/layouts/WaykeComposite.tsx", "../src/hooks/useHashGuid.ts", "../src/providers/WaykeItemProvidet.tsx", "../src/index.ts"],
4
+ "sourcesContent": ["const createDefaultOrigin = () => {\n if (!window || !window.location)\n return undefined;\n const topic = window.location.host.replace(\"www.\", \"\");\n const channel = \"Web\";\n return {\n topic,\n channel,\n };\n};\nconst createDefaultConfig = () => {\n if (process.env.WAYKE_ECOM_API_ADDRESS) {\n return {\n api: {\n address: process.env.WAYKE_ECOM_API_ADDRESS,\n },\n origin: createDefaultOrigin(),\n };\n }\n return undefined;\n};\nclass Configuration {\n constructor() {\n this.config = createDefaultConfig();\n }\n static current() {\n if (Configuration.instance) {\n return Configuration.instance;\n }\n const instance = new Configuration();\n if (!instance.config) {\n throw Configuration.notBoundError;\n }\n Configuration.instance = instance;\n return Configuration.instance;\n }\n static bind(newConfig) {\n Configuration.instance = new Configuration();\n Configuration.instance.config = {\n api: {\n address: newConfig.api.address,\n },\n origin: newConfig.origin\n ? {\n topic: newConfig.origin.topic,\n channel: newConfig.origin.channel,\n }\n : createDefaultOrigin(),\n bankIdThumbprint: newConfig.bankIdThumbprint,\n };\n return Configuration.instance;\n }\n static destroy() {\n Configuration.instance = undefined;\n }\n getApiAddress() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.api.address;\n }\n getOrigin() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.origin;\n }\n useBankIdThumbprint() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return !!this.config.bankIdThumbprint;\n }\n getBankIdThumbprint() {\n if (!this.config) {\n throw Configuration.notBoundError;\n }\n return this.config.bankIdThumbprint;\n }\n}\nConfiguration.instance = undefined;\nConfiguration.notBoundError = new Error(\"Configuration not bound yet\");\nexport default Configuration;\n", "export class ResponseError extends Error {\n constructor(response, message) {\n super(message);\n this.response = response;\n Object.setPrototypeOf(this, ResponseError.prototype);\n }\n getResponse() {\n return this.response;\n }\n}\n", "export class VehicleUnavailableError extends Error {\n constructor() {\n super(\"The vehicle is not available for purchase\");\n Object.setPrototypeOf(this, VehicleUnavailableError.prototype);\n }\n}\n", "import { VehicleUnavailableError } from \"../../errors/vehicle-unavailable-error\";\nconst throwErrorByType = (errorBody) => {\n switch (errorBody.errorCode) {\n case 1:\n throw new VehicleUnavailableError();\n default:\n throw new Error(errorBody.message);\n }\n};\nconst handleResponseError = (error) => {\n const response = error.getResponse();\n return response.json().then(throwErrorByType);\n};\nexport default handleResponseError;\n", "export const BANK_ID_THUMBPRINT_HEADER = \"x-certificate-thumbprint\";\nclass HttpRequestBuilder {\n constructor() {\n this._method = \"get\";\n this._headers = {};\n this._body = null;\n }\n accept(acceptHeader) {\n this._headers.Accept = acceptHeader;\n return this;\n }\n method(method) {\n this._method = method;\n return this;\n }\n authorization(token) {\n this._headers.Authorization = `Bearer ${token}`;\n return this;\n }\n requestForgeryToken(token) {\n if (!token)\n throw new Error(\"Missing request forgery token\");\n this._headers[\"x-rf-token\"] = token;\n return this;\n }\n content(body, contentType = \"application/json\") {\n switch (contentType) {\n case \"application/json\":\n this._body = JSON.stringify(body);\n break;\n default:\n this._body = body;\n break;\n }\n if (contentType)\n this._headers[\"Content-Type\"] = contentType;\n return this;\n }\n bankIdThumbprint(thumbprint) {\n if (!thumbprint)\n throw new Error(\"Bank id thumbprint can not be falsy\");\n this._headers[BANK_ID_THUMBPRINT_HEADER] = thumbprint;\n return this;\n }\n build() {\n return {\n body: this._body,\n headers: this._headers,\n method: this._method,\n };\n }\n}\nexport default HttpRequestBuilder;\n", "import { ResponseError } from \"../errors/request-error\";\nimport handleResponseError from \"./apis/handle-response-error\";\nimport HttpRequestBuilder from \"./http-request-builder\";\nconst httpStatusCheck = (response, request) => {\n if (response.status >= 200 && response.status < 300) {\n return response;\n }\n if (process.env.NODE_ENV === \"development\") {\n console.group(`Asynchronous request failed!`);\n console.log(`URL was ${response.url}`);\n console.log(`Status code: ${response.status}`);\n console.log(`Request:`, request);\n console.groupEnd();\n }\n throw new ResponseError(response, String(response.status));\n};\nconst httpStateContext = {\n requestForgeryToken: undefined,\n};\nexport const context = () => ({ ...httpStateContext });\nexport const contextualize = (response) => {\n httpStateContext.requestForgeryToken =\n response.requestForgeryToken || httpStateContext.requestForgeryToken;\n return response;\n};\nexport const raw = (url, options) => fetch(url, options).then((response) => httpStatusCheck(response, options));\nconst noContentCodes = [\"202\", \"204\"];\nexport const json = (url, options) => raw(url, options)\n .then((response) => {\n if (noContentCodes.includes(String(response.status)))\n return null;\n return response.json();\n})\n .catch((err) => {\n if (err instanceof ResponseError) {\n return handleResponseError(err);\n }\n throw err;\n});\nexport const captureStateContext = (promise) => promise.then(contextualize);\nexport const builder = () => new HttpRequestBuilder();\n", "import * as http from \"../index\";\nconst buildLookupRequest = ({ requestForgeryToken, }) => http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .build();\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookupAddress = (lookupRequest, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v2/address?SocialId=${lookupRequest.personalNumber}`, buildLookupRequest(http.context())))\n .then(validateResponse);\n", "export class AddressLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing address lookup request\");\n }\n if (!request.personalNumber) {\n throw new Error(\"Missing personal number in address lookup request\");\n }\n }\n forCustomer(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class AddressLookupResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing address lookup response data\");\n }\n this.response = response;\n }\n getAddress() {\n return {\n city: this.response.city,\n name: this.response.name,\n givenName: this.response.givenName,\n surname: this.response.surname,\n postalCode: this.response.postalCode,\n street: this.response.street,\n street2: this.response.street2,\n distance: this.response.distance,\n };\n }\n}\n", "export class CustomerBuilder {\n constructor() {\n this.properties = {};\n }\n withAddress(address) {\n this.properties.address = address;\n this.properties.name = address.name;\n this.properties.givenName = address.givenName;\n this.properties.surname = address.surname;\n return this;\n }\n withPersonalNumber(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withEmail(email) {\n this.properties.email = email;\n return this;\n }\n withPhoneNumber(phoneNumber) {\n this.properties.phoneNumber = phoneNumber;\n return this;\n }\n withGivenName(givenName) {\n this.properties.givenName = givenName;\n return this;\n }\n withSurname(surname) {\n this.properties.surname = surname;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/customers\";\nimport { AddressLookupRequestBuilder } from \"./address-lookup-request-builder\";\nimport { AddressLookupResponse } from \"./address-lookup-response\";\nimport { CustomerBuilder } from \"./customer-builder\";\nexport const newAddressLookupRequest = () => new AddressLookupRequestBuilder();\nexport const newCustomer = () => new CustomerBuilder();\nexport const lookupAddress = (request) => {\n AddressLookupRequestBuilder.validateRequest(request);\n return api\n .lookupAddress(request, Configuration.current())\n .then((response) => new AddressLookupResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildInsuranceRequest = (request, { requestForgeryToken }) => {\n const content = {\n drivingDistance: request.drivingDistance,\n socialId: request.personalNumber,\n vehicleId: request.id,\n branchId: request.branchId,\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .content(content)\n .build();\n};\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const find = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v3/insurance`, buildInsuranceRequest(request, http.context())))\n .then(validateResponse);\n", "export class InsuranceOptionsRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing insurance options request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID for insurance options request\");\n }\n if (!request.personalNumber) {\n throw new Error(\"Missing personal number for insurance options request\");\n }\n if (!request.drivingDistance) {\n throw new Error(\"Missing driving distance for insurance options request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n forCustomer(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withDrivingDistance(drivingDistance) {\n this.properties.drivingDistance = drivingDistance;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class InsuranceOptionsResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing insurance options response data\");\n }\n this.response = response;\n }\n getInsuranceOptions() {\n return this.response.insurances;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/insurances\";\nimport { InsuranceOptionsRequestBuilder } from \"./insurance-options-request-builder\";\nimport { InsuranceOptionsResponse } from \"./insurance-options-response\";\nexport const newInsuranceOptionsRequest = () => new InsuranceOptionsRequestBuilder();\nexport const getOptions = (request) => {\n InsuranceOptionsRequestBuilder.validateRequest(request);\n return api\n .find(request, Configuration.current())\n .then((response) => new InsuranceOptionsResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildOptionsRequest = () => http.builder().method(\"get\").accept(\"application/json\").build();\nconst buildCreateRequest = (request, config, { requestForgeryToken }) => {\n const content = {\n vehicleId: request.id,\n tradeIn: request.tradein,\n insurance: request.insurance\n ? {\n ...request.insurance,\n socialId: request.insurance.personalNumber\n ? request.insurance.personalNumber\n : request.customer.personalNumber,\n }\n : undefined,\n payment: request.payment,\n delivery: request.deliveryType,\n customer: {\n socialId: request.customer.personalNumber,\n email: request.customer.email,\n phone: request.customer.phoneNumber,\n name: request.customer.name,\n address: request.customer.address,\n givenName: request.customer.givenName,\n surname: request.customer.surname,\n },\n accessories: request.accessories,\n urls: request.urls,\n origin: config.getOrigin(),\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .content(content)\n .build();\n};\nconst validateOptionsResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nconst validateCreateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nconst getInitUrl = ({ id, branchId }) => {\n const url = `/v3/orders/new?vehicleId=${id}`;\n if (!branchId)\n return url;\n return `${url}&branchId=${branchId}`;\n};\nexport const init = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}${getInitUrl(request)}`, buildOptionsRequest()))\n .then(validateOptionsResponse);\nconst getCreateUrl = () => \"/v3/orders\";\nexport const create = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}${getCreateUrl()}`, buildCreateRequest(request, config, http.context())))\n .then(validateCreateResponse);\n", "export class InsuranceBuilder {\n constructor() {\n this.properties = {};\n }\n forPersonalNumber(personalNumber) {\n this.properties.personalNumber = personalNumber;\n return this;\n }\n withDrivingDistance(drivingDistance) {\n this.properties.drivingDistance = drivingDistance;\n return this;\n }\n withAddOns(addons) {\n this.properties.addons = addons;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreateRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing order creation request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in order creation request\");\n }\n if (!request.customer) {\n throw new Error(\"Missing customer in order creation request\");\n }\n if (!request.payment) {\n throw new Error(\"Missing payment in order creation request\");\n }\n if (!request.deliveryType) {\n throw new Error(\"Missing delivery type in order creation request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n withAccessories(accessories) {\n this.properties.accessories = accessories.map((a) => {\n return { id: a.id };\n });\n return this;\n }\n withCustomer(customer) {\n this.properties.customer = customer;\n return this;\n }\n withPayment(payment) {\n this.properties.payment = payment;\n return this;\n }\n withDeliveryType(deliveryType) {\n this.properties.deliveryType = deliveryType;\n return this;\n }\n withInsurance(insurance) {\n this.properties.insurance = insurance;\n return this;\n }\n withTradeIn(tradein) {\n this.properties.tradein = tradein;\n return this;\n }\n withUrls(redirect, payment) {\n this.properties.urls = { redirect, payment };\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreateResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing order create response data\");\n }\n this.response = response;\n }\n getId() {\n return this.response.id;\n }\n getPayment() {\n return this.response.payment;\n }\n getOrderNumber() {\n return this.response.orderNumber;\n }\n}\n", "export class OrderOptionsRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing order setup request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in order setup request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class PaymentLookupResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing payment lookup response data\");\n }\n this.response = response;\n }\n getCosts() {\n return {\n monthlyCost: this.response.monthlyCost,\n totalCreditCost: this.response.totalCreditCost,\n };\n }\n getFees() {\n return {\n setupFee: this.response.setupFee,\n administrationFee: this.response.administrationFee,\n };\n }\n getInterests() {\n return {\n interest: this.response.interest,\n effectiveInterest: this.response.effectiveInterest,\n };\n }\n getDurationSpec() {\n return this.response.duration;\n }\n getDownPaymentSpec() {\n return this.response.downPayment;\n }\n getResidualValueSpec() {\n return this.response.residual;\n }\n getTotalResidualValue() {\n return this.response.totalResidualValue;\n }\n getPublicURL() {\n return this.response.link;\n }\n shouldUseCreditScoring() {\n return this.response.useCreditScoring;\n }\n getFinancialProductCode() {\n return this.response.financialProductCode;\n }\n getPrice() {\n return this.response.vehiclePrice;\n }\n getCreditAmount() {\n return this.response.loanAmount;\n }\n hasPrivacyPolicy() {\n return !!this.response.privacyPolicyUrl;\n }\n getPrivacyPolicyUrl() {\n return this.response.privacyPolicyUrl;\n }\n}\n", "import { PaymentLookupResponse } from \"../payments/payment-lookup-response\";\nexport class OrderOptionsResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Missing order options response data\");\n }\n this.response = response;\n }\n getOrderVehicle() {\n return this.response.vehicle;\n }\n getAccessories() {\n if (!this.response.accessories || !this.response.accessories.length) {\n return [];\n }\n return this.response.accessories.map((accessory) => ({\n id: accessory.id,\n articleNumber: accessory.articleNumber,\n logoUrl: accessory.logoUrl,\n longDescription: accessory.longDescription,\n shortDescription: accessory.shortDescription,\n manufacturer: accessory.manufacturer,\n model: accessory.model,\n name: accessory.name,\n price: accessory.price,\n assemblyPrice: accessory.assemblyPrice,\n salePrice: accessory.salePrice,\n productPageLink: accessory.productPageLink,\n productPageLinkText: accessory.productPageLinkText,\n media: accessory.media\n ? accessory.media.map((m) => {\n return {\n externalId: m.externalId,\n sortOrder: m.sortOrder,\n url: m.url,\n };\n })\n : [],\n }));\n }\n requiresDealerSelection() {\n return this.response.dealers && this.response.dealers.length > 1;\n }\n getDealerSites() {\n if (!this.response.dealers || !this.response.dealers.length) {\n return [];\n }\n return this.response.dealers;\n }\n getPaymentOptions() {\n if (!this.response.payment || !this.response.payment.length) {\n return [];\n }\n return this.response.payment.map((payment) => ({\n loanDetails: payment.loanDetails\n ? new PaymentLookupResponse(payment.loanDetails)\n : undefined,\n logo: payment.logo,\n name: payment.name,\n price: payment.price,\n type: payment.type,\n unit: payment.unit,\n externalId: payment.externalId,\n }));\n }\n getDeliveryOptions() {\n if (!this.response.delivery || !this.response.delivery.length) {\n return [];\n }\n return this.response.delivery.map((delivery) => ({\n type: delivery.type,\n deliveryTime: delivery.deliveryTime,\n startupCost: delivery.startupCost,\n unitPrice: delivery.unitPrice,\n unit: delivery.unit,\n minQuantity: delivery.minQuantity,\n maxQuantity: delivery.maxQuantity,\n }));\n }\n getInsuranceOption() {\n return this.response.insurance\n ? {\n institute: this.response.insurance.institute,\n identifier: this.response.insurance.identifier,\n longDescription: this.response.insurance.longDescription,\n description: this.response.insurance.description,\n logo: this.response.insurance.logo,\n title: this.response.insurance.title,\n url: this.response.insurance.url,\n ecomInsuranceText: this.response.insurance.ecomInsuranceText,\n requiresDistance: this.response.insurance.requiresDistance,\n requiresPersonalNumber: this.response.insurance\n .requiresPersonalNumber,\n }\n : undefined;\n }\n getOrderConditions() {\n return this.response.conditions;\n }\n getOrderReturnConditions() {\n return this.response.returnConditions;\n }\n getConditionsPdfUri() {\n return this.response.conditionsPdfUri;\n }\n getContactInformation() {\n return this.response.contactInformation;\n }\n allowsTradeIn() {\n return this.response.tradeIn;\n }\n isUnavailable() {\n return this.response.unavailable;\n }\n isPaymentRequired() {\n return this.response.paymentRequired;\n }\n}\n", "export class PaymentBuilder {\n constructor() {\n this.properties = {};\n }\n withType(paymentType) {\n this.properties.type = paymentType;\n return this;\n }\n withDuration(duration) {\n this.properties.months = duration;\n return this;\n }\n withDownPayment(downPayment) {\n this.properties.downPayment = downPayment;\n return this;\n }\n withResidualValue(residualValue) {\n this.properties.residualValue = residualValue;\n return this;\n }\n withExternalId(externalId) {\n this.properties.externalId = externalId;\n return this;\n }\n withCreditAssessment(creditAssessment) {\n this.properties.creditAssessment = creditAssessment;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class OrderCreditAssessmentBuilder {\n constructor() {\n this.properties = {};\n }\n withScoreId(scoreId) {\n this.properties.scoreId = scoreId;\n return this;\n }\n withFinancialProductCode(code) {\n this.properties.financialProductCode = code;\n return this;\n }\n withRecommendation(recommendation) {\n this.properties.recommendation = recommendation;\n return this;\n }\n withDecision(decision) {\n this.properties.decision = decision;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/orders\";\nimport { InsuranceBuilder } from \"./insurance-builder\";\nimport { OrderCreateRequestBuilder } from \"./order-create-request-builder\";\nimport { OrderCreateResponse } from \"./order-create-response\";\nimport { OrderOptionsRequestBuilder } from \"./order-options-request-builder\";\nimport { OrderOptionsResponse } from \"./order-options-response\";\nimport { PaymentBuilder } from \"./payment-builder\";\nimport { OrderCreditAssessmentBuilder } from \"./order-credit-assessment-builder\";\nexport const newOptionsRequest = () => new OrderOptionsRequestBuilder();\nexport const newCreateRequest = () => new OrderCreateRequestBuilder();\nexport const newInsurance = () => new InsuranceBuilder();\nexport const newPayment = () => new PaymentBuilder();\nexport const newCreditAssessment = () => new OrderCreditAssessmentBuilder();\nexport const getOptions = (request) => {\n OrderOptionsRequestBuilder.validateRequest(request);\n return api\n .init(request, Configuration.current())\n .then((response) => new OrderOptionsResponse(response));\n};\nexport const create = (request) => {\n OrderCreateRequestBuilder.validateRequest(request);\n return api\n .create(request, Configuration.current())\n .then((response) => new OrderCreateResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildLookupRequest = (lookupRequest) => {\n const content = {\n branchId: lookupRequest.branchId,\n duration: lookupRequest.duration,\n downPayment: lookupRequest.downPayment,\n residual: lookupRequest.residual,\n };\n return http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .content(content)\n .build();\n};\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookup = (lookupRequest, config) => http\n .json(`${config.getApiAddress()}/payment/${lookupRequest.id}`, buildLookupRequest(lookupRequest))\n .then(validateResponse);\n", "export class PaymentLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing payment lookup request\");\n }\n if (!request.id) {\n throw new Error(\"Missing vehicle ID in payment lookup request\");\n }\n if (!request.duration || request.duration < 1) {\n throw new Error(\"Missing month duration in payment lookup request\");\n }\n if (!request.downPayment || request.downPayment < 1) {\n throw new Error(\"Missing cash deposit in payment lookup request\");\n }\n }\n forVehicle(id) {\n this.properties.id = id;\n return this;\n }\n forDealer(id) {\n this.properties.branchId = id;\n return this;\n }\n withDuration(duration) {\n this.properties.duration = duration;\n return this;\n }\n withDownPayment(downPayment) {\n this.properties.downPayment = downPayment;\n return this;\n }\n withResidualValue(residual) {\n this.properties.residual = residual;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/payments\";\nimport { PaymentLookupRequestBuilder } from \"./payment-lookup-request-builder\";\nimport { PaymentLookupResponse } from \"./payment-lookup-response\";\nexport const newLookupRequest = () => new PaymentLookupRequestBuilder();\nexport const lookupPayment = (request) => {\n PaymentLookupRequestBuilder.validateRequest(request);\n return api\n .lookup(request, Configuration.current())\n .then((response) => new PaymentLookupResponse(response));\n};\n", "import * as http from \"../index\";\nconst buildLookupRequest = ({ requestForgeryToken, }) => http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken)\n .build();\nconst validateResponse = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const lookup = (request, config) => http\n .captureStateContext(http.json(`${config.getApiAddress()}/v2/tradein/${request.registrationNumber}?mileage=${request.mileage}&condition=${request.condition}`, buildLookupRequest(http.context())))\n .then(validateResponse);\n", "export class VehicleLookupRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validateRequest(request) {\n if (!request) {\n throw new Error(\"Missing vehicle lookup request\");\n }\n if (!request.registrationNumber) {\n throw new Error(\"Missing registration number in vehicle lookup request\");\n }\n if (request.mileage && !request.condition) {\n throw new Error(\"Missing vehicle condition for valuation in vehicle lookup request\");\n }\n if (request.condition && !request.mileage) {\n throw new Error(\"Missing mileage for valuation in vehicle lookup request\");\n }\n }\n withRegistrationNumber(registrationNumber) {\n this.properties.registrationNumber = registrationNumber;\n return this;\n }\n withMileage(mileage) {\n this.properties.mileage = mileage;\n return this;\n }\n withCondition(condition) {\n this.properties.condition = condition;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "export class VehicleLookupResponse {\n constructor(response, registrationNumber) {\n if (!response) {\n throw new Error(\"Missing vehicle lookup response data\");\n }\n this.response = response;\n this.registrationNumber = registrationNumber;\n }\n getVehicle() {\n return {\n manufacturer: this.response.manufacturer,\n modelName: this.response.modelName,\n modelSeries: this.response.modelSeries,\n modelYear: this.response.modelYear,\n valuation: this.response.valuation,\n };\n }\n}\n", "export class VehicleTradeBuilder {\n constructor() {\n this.properties = {};\n }\n forVehicle(registrationNumber) {\n this.properties.registrationNumber = registrationNumber;\n return this;\n }\n withMileage(mileage) {\n this.properties.mileage = mileage;\n return this;\n }\n withCondition(condition) {\n this.properties.condition = condition;\n return this;\n }\n withComment(comment) {\n this.properties.comments = comment;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import Configuration from \"../config/index\";\nimport * as api from \"../http/apis/vehicles\";\nimport { VehicleLookupRequestBuilder } from \"./vehicle-lookup-request-builder\";\nimport { VehicleLookupResponse } from \"./vehicle-lookup-response\";\nimport { VehicleTradeBuilder } from \"./vehicle-trade-builder\";\nexport const newLookupRequest = () => new VehicleLookupRequestBuilder();\nexport const newVehicleTrade = () => new VehicleTradeBuilder();\nexport const lookupVehicle = (request) => {\n VehicleLookupRequestBuilder.validateRequest(request);\n return api\n .lookup(request, Configuration.current())\n .then((response) => new VehicleLookupResponse(response, request.registrationNumber));\n};\n", "export var AuthMethod;\n(function (AuthMethod) {\n AuthMethod[\"SameDevice\"] = \"SameDevice\";\n AuthMethod[\"QrCode\"] = \"QrCode\";\n})(AuthMethod || (AuthMethod = {}));\nexport var AuthStatus;\n(function (AuthStatus) {\n AuthStatus[\"Pending\"] = \"pending\";\n AuthStatus[\"Failed\"] = \"failed\";\n AuthStatus[\"Complete\"] = \"complete\";\n AuthStatus[\"Unknown\"] = \"unknown\";\n})(AuthStatus || (AuthStatus = {}));\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const createRequest = () => {\n const requestForgeryToken = http.context().requestForgeryToken;\n const builder = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(requestForgeryToken);\n if (Configuration.current().useBankIdThumbprint()) {\n const thumbprint = Configuration.current().getBankIdThumbprint();\n builder.bankIdThumbprint(thumbprint);\n }\n const request = builder.build();\n return request;\n};\n", "import { AuthMethod, } from \"../../../bankid/types\";\nimport * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nconst getRoute = (method) => {\n switch (method) {\n case AuthMethod.QrCode:\n return \"/qr-code\";\n case AuthMethod.SameDevice:\n return \"/same-device\";\n default:\n throw new Error(\"BankId auth method not supported\");\n }\n};\nexport const getUrl = (requestOptions) => {\n const route = getRoute(requestOptions.method);\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/auth${route}`;\n return url;\n};\nexport const auth = (requestOptions) => {\n const url = getUrl(requestOptions);\n const request = createRequest();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nexport const getUrl = (orderRef) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/collect/${orderRef}`;\n return url;\n};\nexport const collect = (requestOptions) => {\n const url = getUrl(requestOptions.orderRef);\n const request = createRequest();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nimport { createRequest } from \"./utils\";\nexport const getUrl = (orderRef) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/bankid/cancel/${orderRef}`;\n return url;\n};\nexport const cancel = (requestOptions) => {\n const url = getUrl(requestOptions.orderRef);\n const request = createRequest();\n return http.raw(url, request);\n};\n", "import { auth as doAuthRequest } from \"./bankid/auth\";\nimport { collect as doCollectRequest } from \"./bankid/collect\";\nimport { cancel as doCancelRequest } from \"./bankid/cancel\";\nconst validate = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const auth = (requestOptions) => doAuthRequest(requestOptions).then(validate);\nexport const collect = (requestOptions) => doCollectRequest(requestOptions).then(validate);\nexport const cancel = (requestOptions) => doCancelRequest(requestOptions).then(() => true);\n", "export class BankIdAuthRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.method) {\n throw new Error(\"Missing auth method\");\n }\n }\n withMethod(method) {\n this.properties.method = method;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import { AuthMethod, } from \"./types\";\nexport class BankIdAuthResponse {\n constructor(response, method) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n if (!method) {\n throw new Error(\"Method can not be falsy\");\n }\n this.orderRef = response.orderRef;\n this.qrCodeAsBase64 = response.qrCodeAsBase64;\n this.autoLaunchUrl = response.autoLaunchUrl;\n this.method = method;\n }\n getMethod() {\n return this.method;\n }\n isQrCode() {\n return this.method === AuthMethod.QrCode;\n }\n isSameDevice() {\n return this.method === AuthMethod.SameDevice;\n }\n getOrderRef() {\n return this.orderRef;\n }\n getQrCode() {\n if (!this.isQrCode()) {\n throw new Error(\"Not qr code response\");\n }\n return this.qrCodeAsBase64;\n }\n getAutoLaunchUrl() {\n if (!this.isSameDevice()) {\n throw new Error(\"Not same device response\");\n }\n return this.autoLaunchUrl;\n }\n}\n", "export class BankIdCollectRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.orderRef) {\n throw new Error(\"Missing order ref\");\n }\n }\n withOrderRef(orderRef) {\n this.properties.orderRef = orderRef;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "const outstandingTransaction = () => \"Starta BankID-appen.\";\nconst noClient = () => \"Starta BankID-appen.\";\nconst started = () => \"S\u00F6ker efter BankID, det kan ta en liten stund... Om det har g\u00E5tt n\u00E5gra sekunder och inget BankID har hittats har du sannolikt inget BankID som g\u00E5r att anv\u00E4nda f\u00F6r den aktuella identifieringen/underskriften i den h\u00E4r enheten. Om du inte har n\u00E5got BankID kan du h\u00E4mta ett hos din internetbank.\";\nconst userSign = () => \"Skriv in din s\u00E4kerhetskod i BankID-appen och v\u00E4lj Legitimera eller Skriv under.\";\nconst expiredTransaction = () => \"BankID-appen svarar inte. Kontrollera att den \u00E4r startad och att du har internetanslutning. Om du inte har n\u00E5got giltigt BankID kan du h\u00E4mta ett hos din Bank. F\u00F6rs\u00F6k sedan igen.\";\nconst certificateErr = () => \"Det BankID du f\u00F6rs\u00F6ker anv\u00E4nda \u00E4r f\u00F6r gammalt eller sp\u00E4rrat. Anv\u00E4nd ett annat BankID eller h\u00E4mta ett nytt hos din internetbank.\";\nconst userCancel = () => \"\u00C5tg\u00E4rden avbruten.\";\nconst cancelled = () => \"\u00C5tg\u00E4rden avbruten. Fo\u0308rso\u0308k igen.\";\nconst startFailed = () => \"Starta BankID-appen.\";\nconst resolvers = {};\nresolvers[\"outstandingTransaction\"] = outstandingTransaction;\nresolvers[\"noClient\"] = noClient;\nresolvers[\"started\"] = started;\nresolvers[\"userSign\"] = userSign;\nresolvers[\"expiredTransaction\"] = expiredTransaction;\nresolvers[\"certificateErr\"] = certificateErr;\nresolvers[\"userCancel\"] = userCancel;\nresolvers[\"cancelled\"] = cancelled;\nresolvers[\"startFailed\"] = startFailed;\nexport default (hintCode) => {\n if (!hintCode) {\n return \"\";\n }\n const resolve = resolvers[hintCode];\n if (!resolve) {\n return \"\";\n }\n const message = resolve();\n return message;\n};\n", "import { AuthStatus, } from \"./types\";\nimport resolveMessage from \"./message-resolver\";\nexport class BankIdCollectResponse {\n constructor(response) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n this.orderRef = response.orderRef;\n this.status = this.parseStatus(response.status);\n this.hintCode = response.hintCode;\n this.message = resolveMessage(response.hintCode);\n if (this.isCompleted() && !!response.completionData) {\n this.personalNumber = response.completionData.personalNumber;\n this.address = response.completionData.address;\n }\n }\n parseStatus(status) {\n switch (status) {\n case \"pending\":\n return AuthStatus.Pending;\n case \"complete\":\n return AuthStatus.Complete;\n case \"failed\":\n return AuthStatus.Failed;\n default:\n return AuthStatus.Unknown;\n }\n }\n getOrderRef() {\n return this.orderRef;\n }\n getStatus() {\n return this.status;\n }\n isPending() {\n return this.status === AuthStatus.Pending;\n }\n getHintCode() {\n return this.hintCode;\n }\n hasMessage() {\n return !!this.message;\n }\n getMessage() {\n return this.message;\n }\n shouldRenew() {\n return (this.hintCode === BankIdCollectResponse.START_FAILED_CODE ||\n this.hintCode === BankIdCollectResponse.USER_CANCEL_CODE);\n }\n isCompleted() {\n return this.status === AuthStatus.Complete;\n }\n getPersonalNumber() {\n return this.personalNumber;\n }\n getAddress() {\n return this.address;\n }\n}\nBankIdCollectResponse.START_FAILED_CODE = \"startFailed\";\nBankIdCollectResponse.USER_CANCEL_CODE = \"userCancel\";\n", "export class BankIdCancelRequestBuilder {\n constructor() {\n this.properties = {};\n }\n static validate(request) {\n if (!request) {\n throw new Error(\"Request can not be falsy\");\n }\n if (!request.orderRef) {\n throw new Error(\"Missing order ref\");\n }\n }\n withOrderRef(orderRef) {\n this.properties.orderRef = orderRef;\n return this;\n }\n build() {\n return this.properties;\n }\n}\n", "import * as api from \"../http/apis/bankid\";\nimport { BankIdAuthRequestBuilder } from \"./bankid-auth-request-builder\";\nimport { BankIdAuthResponse } from \"./bankid-auth-response\";\nimport { BankIdCollectRequestBuilder } from \"./bankid-collect-request-builder\";\nimport { BankIdCollectResponse } from \"./bankid-collect-response\";\nimport { BankIdCancelRequestBuilder } from \"./bankid-cancel-request-builder\";\nexport const newAuthRequest = () => new BankIdAuthRequestBuilder();\nexport const newCollectRequest = () => new BankIdCollectRequestBuilder();\nexport const newCancelRequest = () => new BankIdCancelRequestBuilder();\nexport const auth = (request) => {\n BankIdAuthRequestBuilder.validate(request);\n return api\n .auth(request)\n .then((response) => new BankIdAuthResponse(response, request.method));\n};\nexport const collect = (request) => {\n BankIdCollectRequestBuilder.validate(request);\n return api\n .collect(request)\n .then((response) => new BankIdCollectResponse(response));\n};\nexport const cancel = (request) => {\n BankIdCancelRequestBuilder.validate(request);\n return api.cancel(request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestCaseStatus = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"get\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestNewCase = (inquery) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .content(inquery)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import { AuthMethod } from \"../../../bankid/types\";\nimport * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nconst getRoute = (method) => {\n switch (method) {\n case AuthMethod.QrCode:\n return \"/qr-code\";\n case AuthMethod.SameDevice:\n return \"/same-device\";\n default:\n throw new Error(\"BankId auth method not supported\");\n }\n};\nexport const getUrl = (requestOptions) => {\n const route = getRoute(requestOptions.method);\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/sign/${requestOptions.caseId}${route}`;\n return url;\n};\nexport const requestSignCase = (requestOptions) => {\n const url = getUrl(requestOptions);\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"post\")\n .accept(\"application/json\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.captureStateContext(http.json(url, request));\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestCancelSignCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/sign/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"delete\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestDeclineCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"delete\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import * as http from \"../../index\";\nimport Configuration from \"../../../config/index\";\nexport const requestAcceptCase = (caseId) => {\n const host = Configuration.current().getApiAddress();\n const url = `${host}/credit-assessment/${caseId}/accept`;\n const forgeryToken = http.context().requestForgeryToken;\n const request = http\n .builder()\n .method(\"put\")\n .requestForgeryToken(forgeryToken)\n .build();\n return http.raw(url, request);\n};\n", "import { requestCaseStatus } from \"./credit-assessment/get-status\";\nimport { requestNewCase } from \"./credit-assessment/new-case\";\nimport { requestSignCase } from \"./credit-assessment/sign\";\nimport { requestCancelSignCase } from \"./credit-assessment/cancel-sign\";\nimport { requestDeclineCase } from \"./credit-assessment/decline\";\nimport { requestAcceptCase } from \"./credit-assessment/accept\";\nconst validate = (response) => {\n if (!response || !response.successful || !response.response) {\n throw new Error(\"The request did not succeed\");\n }\n return response.response;\n};\nexport const newCase = (inquiry) => requestNewCase(inquiry).then(validate);\nexport const getStatus = (caseId) => requestCaseStatus(caseId).then(validate);\nexport const signCase = (request) => requestSignCase(request).then(validate);\nexport const cancelSigning = (caseId) => requestCancelSignCase(caseId).then(() => true);\nexport const decline = (caseId) => requestDeclineCase(caseId).then(() => true);\nexport const accept = (caseId) => requestAcceptCase(caseId).then(() => true);\n", "import { AuthMethod } from \"../bankid/types\";\nexport class CreditAssessmentSignResponse {\n constructor(response, request) {\n if (!response) {\n throw new Error(\"Response can not be falsy\");\n }\n if (!request.method) {\n throw new Error(\"Method can not be falsy\");\n }\n this.qrCodeAsBase64 = response.qrCodeAsBase64;\n this.autoLaunchUrl = response.autoLaunchUrl;\n this.method = request.method;\n this.caseId = request.caseId;\n }\n getMethod() {\n return this.method;\n }\n isQrCode() {\n return this.method === AuthMethod.QrCode;\n }\n isSameDevice() {\n return this.method === AuthMethod.SameDevice;\n }\n getQrCode() {\n if (!this.isQrCode()) {\n throw new Error(\"Not qr code response\");\n }\n return this.qrCodeAsBase64;\n }\n getAutoLaunchUrl() {\n if (!this.isSameDevice()) {\n throw new Error(\"Not same device response\");\n }\n return this.autoLaunchUrl;\n }\n getCaseId() {\n return this.caseId;\n }\n}\n", "export var MaritalStatus;\n(function (MaritalStatus) {\n MaritalStatus[\"Married\"] = \"married\";\n MaritalStatus[\"Single\"] = \"single\";\n})(MaritalStatus || (MaritalStatus = {}));\nexport var Employment;\n(function (Employment) {\n Employment[\"Other\"] = \"other\";\n Employment[\"Retired\"] = \"retired\";\n Employment[\"FullTimeEmployed\"] = \"fullTimeEmployed\";\n Employment[\"Student\"] = \"student\";\n Employment[\"TemporarilyEmployed\"] = \"temporarilyEmployed\";\n Employment[\"SelfEmployed\"] = \"selfEmployed\";\n})(Employment || (Employment = {}));\nexport var CreditAssessmentStatus;\n(function (CreditAssessmentStatus) {\n CreditAssessmentStatus[\"Received\"] = \"received\";\n CreditAssessmentStatus[\"SigningInitiated\"] = \"signingInitiated\";\n CreditAssessmentStatus[\"SigningFailed\"] = \"signingFailed\";\n CreditAssessmentStatus[\"Signed\"] = \"signed\";\n CreditAssessmentStatus[\"ScoringInitiated\"] = \"scoringInitiated\";\n CreditAssessmentStatus[\"Scored\"] = \"scored\";\n CreditAssessmentStatus[\"NotScored\"] = \"notScored\";\n CreditAssessmentStatus[\"Accepted\"] = \"accepted\";\n CreditAssessmentStatus[\"Declined\"] = \"declined\";\n CreditAssessmentStatus[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentStatus || (CreditAssessmentStatus = {}));\nexport var CreditAssessmentDecision;\n(function (CreditAssessmentDecision) {\n CreditAssessmentDecision[\"Approved\"] = \"approved\";\n CreditAssessmentDecision[\"Rejected\"] = \"rejected\";\n CreditAssessmentDecision[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentDecision || (CreditAssessmentDecision = {}));\nexport var CreditAssessmentRecommendation;\n(function (CreditAssessmentRecommendation) {\n CreditAssessmentRecommendation[\"Approve\"] = \"approve\";\n CreditAssessmentRecommendation[\"AssessManually\"] = \"assessManually\";\n CreditAssessmentRecommendation[\"Reject\"] = \"reject\";\n CreditAssessmentRecommendation[\"Unknown\"] = \"unknown\";\n})(CreditAssessmentRecommendation || (CreditAssessmentRecommendation = {}));\n", "import { CreditAssessmentStatus } from \"./types\";\nconst asStatus = (statusString) => {\n switch (statusString) {\n case \"received\":\n return CreditAssessmentStatus.Received;\n case \"signingInitiated\":\n return CreditAssessmentStatus.SigningInitiated;\n case \"signingFailed\":\n return CreditAssessmentStatus.SigningFailed;\n case \"signed\":\n return CreditAssessmentStatus.Signed;\n case \"scoringInitiated\":\n return CreditAssessmentStatus.ScoringInitiated;\n case \"scored\":\n return CreditAssessmentStatus.Scored;\n case \"notScored\":\n return CreditAssessmentStatus.NotScored;\n case \"accepted\":\n return CreditAssessmentStatus.Accepted;\n case \"declined\":\n return CreditAssessmentStatus.Declined;\n default:\n return CreditAssessmentStatus.Unknown;\n }\n};\nexport default asStatus;\n", "import { CreditAssessmentDecision } from \"./types\";\nconst asDecision = (text) => {\n switch (text) {\n case \"approved\":\n return CreditAssessmentDecision.Approved;\n case \"rejected\":\n return CreditAssessmentDecision.Rejected;\n default:\n return CreditAssessmentDecision.Unknown;\n }\n};\nexport default asDecision;\n", "import { CreditAssessmentRecommendation } from \"./types\";\nconst asRecommendation = (text) => {\n switch (text) {\n case \"approve\":\n return CreditAssessmentRecommendation.Approve;\n case \"assessManually\":\n return CreditAssessmentRecommendation.AssessManually;\n case \"reject\":\n return CreditAssessmentRecommendation.Reject;\n default:\n return CreditAssessmentRecommendation.Unknown;\n }\n};\nexport default asRecommendation;\n", "import { CreditAssessmentStatus, } from \"./types\";\nimport asStatus from \"./convert-status\";\nimport resolveMessage from \"../bankid/message-resolver\";\nimport asDecision from \"./convert-decision\";\nimport asRecommendation from \"./convert-recommendation\";\nexport class CreditAssessmentStatusResponse {\n constructor(response) {\n this.hintCode = response.bankIdHintCode;\n this.vfScoreCaseId = response.vfScoreCaseId;\n this.signingMessage = resolveMessage(response.bankIdHintCode);\n this.status = asStatus(response.status);\n this.decision = asDecision(response.decision);\n this.recommendation = asRecommendation(response.recommendation);\n }\n getSigningMessage() {\n return this.signingMessage;\n }\n shouldRenewSigning() {\n const hasFailedSigning = this.status === CreditAssessmentStatus.SigningFailed;\n const isRenewHintCode = this.hintCode ===\n CreditAssessmentStatusResponse.START_FAILED_CODE ||\n this.hintCode === CreditAssessmentStatusResponse.USER_CANCEL_CODE;\n return hasFailedSigning && isRenewHintCode;\n }\n isSigned() {\n return (this.status === CreditAssessmentStatus.Signed ||\n this.status === CreditAssessmentStatus.ScoringInitiated ||\n this.status === CreditAssessmentStatus.Scored ||\n this.status === CreditAssessmentStatus.NotScored ||\n this.status === CreditAssessmentStatus.Accepted);\n }\n getAddress() {\n throw new Error(\"Method not implemented.\");\n }\n getStatus() {\n return this.status;\n }\n hasPendingSigning() {\n return this.status === CreditAssessmentStatus.SigningInitiated;\n }\n getHintCode() {\n return this.hintCode;\n }\n hasPendingScoring() {\n return (this.status === CreditAssessmentStatus.Signed ||\n this.status === CreditAssessmentStatus.ScoringInitiated);\n }\n isScored() {\n return (this.status === CreditAssessmentStatus.Scored ||\n this.status === CreditAssessmentStatus.Accepted);\n }\n hasScoringError() {\n return this.status === CreditAssessmentStatus.NotScored;\n }\n getScoringId() {\n return this.vfScoreCaseId;\n }\n getRecommendation() {\n return this.recommendation;\n }\n getDecision() {\n return this.decision;\n }\n isAccepted() {\n return this.status === CreditAssessmentStatus.Accepted;\n }\n}\nCreditAssessmentStatusResponse.START_FAILED_CODE = \"startFailed\";\nCreditAssessmentStatusResponse.USER_CANCEL_CODE = \"userCancel\";\n", "export const validateHouseholdEconomy = (householdEconomy) => {\n if (!householdEconomy) {\n throw new TypeError(\"Household economy can not be falsy\");\n }\n if (!householdEconomy.employment) {\n throw new TypeError(\"Household economy must have employment\");\n }\n if (!householdEconomy.maritalStatus) {\n throw new TypeError(\"Household economy must have marital status\");\n }\n if (!householdEconomy.income && householdEconomy.income !== 0) {\n throw new TypeError(\"Household economy must have income\");\n }\n if (!householdEconomy.householdChildren &&\n householdEconomy.householdChildren !== 0) {\n throw new TypeError(\"Household economy must have household children\");\n }\n if (!householdEconomy.householdDebt &&\n householdEconomy.householdDebt !== 0) {\n throw new TypeError(\"Household economy must have household debt\");\n }\n if (!householdEconomy.householdHousingCost &&\n householdEconomy.householdHousingCost !== 0) {\n throw new TypeError(\"Household economy must have household housing cost\");\n }\n if (!householdEconomy.householdIncome &&\n householdEconomy.householdIncome !== 0) {\n throw new TypeError(\"Household economy must have household income\");\n }\n};\nexport const validateLoan = (loan) => {\n if (!loan) {\n throw new TypeError(\"Loan can not be falsy\");\n }\n if (!loan.financialProductId) {\n throw new TypeError(\"Loan must have financial product id\");\n }\n if (!loan.credit && loan.credit !== 0) {\n throw new TypeError(\"Loan must have credit\");\n }\n if (!loan.downPayment && loan.downPayment !== 0) {\n throw new TypeError(\"Loan must have down payment\");\n }\n if (!loan.interestRate && loan.interestRate !== 0) {\n throw new TypeError(\"Loan must have interest rate\");\n }\n if (!loan.monthlyCost && loan.monthlyCost !== 0) {\n throw new TypeError(\"Loan must have monthly cost\");\n }\n if (!loan.price && loan.price !== 0) {\n throw new TypeError(\"Loan must have price\");\n }\n};\nexport const validateCustomer = (customer) => {\n if (!customer) {\n throw new TypeError(\"Customer can not be falsy\");\n }\n if (!customer.socialId) {\n throw new TypeError(\"Customer must have social id\");\n }\n if (!customer.email) {\n throw new TypeError(\"Customer must have email\");\n }\n if (!customer.phone) {\n throw new TypeError(\"Customer must have phone\");\n }\n};\nexport const validateInquiry = (inquiry) => {\n if (!inquiry) {\n throw new TypeError(\"Inquiry can not be falsy\");\n }\n if (!inquiry.externalId) {\n throw new TypeError(\"Inquiry must have external id\");\n }\n validateHouseholdEconomy(inquiry.householdEconomy);\n validateLoan(inquiry.loan);\n validateCustomer(inquiry.customer);\n};\n", "import * as api from \"../http/apis/credit-assessment\";\nimport { CreditAssessmentSignResponse } from \"./sign-response\";\nimport { CreditAssessmentStatusResponse } from \"./status-response\";\nimport { validateInquiry } from \"./validator\";\nexport const newCase = (request) => {\n validateInquiry(request);\n return api.newCase(request);\n};\nexport const getStatus = (caseId) => api\n .getStatus(caseId)\n .then((response) => new CreditAssessmentStatusResponse(response));\nexport const signCase = (request) => api\n .signCase(request)\n .then((response) => new CreditAssessmentSignResponse(response, request));\nexport const cancelSigning = (caseId) => api.cancelSigning(caseId);\nexport const accept = (caseId) => api.accept(caseId);\nexport const decline = (caseId) => api.decline(caseId);\n", "export var DrivingDistance;\n(function (DrivingDistance) {\n DrivingDistance[\"Between0And1000\"] = \"Between0And1000\";\n DrivingDistance[\"Between1000And1500\"] = \"Between1000And1500\";\n DrivingDistance[\"Between1500And2000\"] = \"Between1500And2000\";\n DrivingDistance[\"Between2000And2500\"] = \"Between2000And2500\";\n DrivingDistance[\"Over2500\"] = \"Over2500\";\n})(DrivingDistance || (DrivingDistance = {}));\n", "export var DeliveryType;\n(function (DeliveryType) {\n DeliveryType[\"None\"] = \"None\";\n DeliveryType[\"Pickup\"] = \"Pickup\";\n DeliveryType[\"Delivery\"] = \"Delivery\";\n})(DeliveryType || (DeliveryType = {}));\nexport var PaymentType;\n(function (PaymentType) {\n PaymentType[\"Cash\"] = \"Cash\";\n PaymentType[\"Lease\"] = \"Lease\";\n PaymentType[\"Loan\"] = \"Loan\";\n})(PaymentType || (PaymentType = {}));\n", "export var VehicleCondition;\n(function (VehicleCondition) {\n VehicleCondition[\"VeryGood\"] = \"VeryGood\";\n VehicleCondition[\"Good\"] = \"Good\";\n VehicleCondition[\"Ok\"] = \"Ok\";\n})(VehicleCondition || (VehicleCondition = {}));\n", "import React, { useEffect, useCallback, useMemo } from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Result from '../../components/Result/index';\nimport Filter from '../../components/Filter/index';\nimport Grid from '../../components/Grid/index';\nimport SearchTerm from '../../components/SearchTerm/index';\nimport { PortalElement, PortalNamespace } from '../../components/Portal/index';\nimport SearchFilter from '../../components/SearchFilter/index';\nimport Snackbar from '../../components/Snackbar/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes } from '../../@types/filter';\nimport PubSub from '../../utils/pubsub/pubsub';\n\nexport interface WaykeSearchProps {\n filterList?: SearchFilterTypes[];\n initialQueryParams?: URLSearchParams | string;\n removeSearchBar?: boolean;\n removeFilterOptions?: boolean;\n placeholderImage?: string;\n hashRoute?: boolean;\n pathRoute?: string;\n modifyDocumentTitleSearch?: string;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearch = ({\n filterList,\n initialQueryParams,\n hashRoute,\n pathRoute,\n removeSearchBar,\n placeholderImage,\n removeFilterOptions,\n modifyDocumentTitleSearch,\n onClickSearchItem,\n}: WaykeSearchProps) => {\n const { error, documents, queryFilter, onFilterUpdate, onInitialize } = useSearch();\n\n useEffect(() => {\n if (modifyDocumentTitleSearch) {\n document.title = modifyDocumentTitleSearch;\n }\n onInitialize(\n typeof initialQueryParams === 'string'\n ? new URLSearchParams(initialQueryParams)\n : initialQueryParams\n );\n }, []);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n const onClearQuery = useCallback(() => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n nextQuery.delete('query');\n onFilterUpdate(nextQuery.toString());\n }, [queryFilter.searchParams]);\n\n const searchQuery = useMemo(() => queryFilter.searchParams.get('query'), [documents]);\n\n return (\n <>\n <Page>\n {!removeSearchBar && (\n <PageSection>\n <Container>\n <SearchFilter />\n </Container>\n </PageSection>\n )}\n {searchQuery && (\n <PageSection>\n <Container>\n <SearchTerm onClear={onClearQuery}>{searchQuery}</SearchTerm>\n </Container>\n </PageSection>\n )}\n {!removeFilterOptions && (\n <PageSection>\n <Container>\n <Filter filterList={filterList} />\n </Container>\n </PageSection>\n )}\n <PageSection accent fillSpace className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n <Result>\n <>\n {error && (\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n )}\n {!error && documents && documents.length > 0 && (\n <Grid\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickItem={onItemClicked}\n documents={documents}\n placeholderImage={placeholderImage}\n />\n )}\n {!error && documents && documents.length === 0 && (\n <Snackbar severity=\"warning\" icon heading=\"Inga resultat\">\n Det finns inga resultat som matchar din s\u00F6kning.\n </Snackbar>\n )}\n </>\n </Result>\n </Container>\n </PageSection>\n </Page>\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearch;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Container = ({ children }: Props) => <Wrapper>{children}</Wrapper>;\n\nexport default Container;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n width: 100%;\n max-width: ${(props) => props.theme.distances.containerMaxWidth};\n margin: 0 auto;\n padding: 0 ${size(3)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: 0 ${size(2)};\n }\n`;\n", "const _colors = {\n black: '#000',\n white: '#fff',\n gray: '#ddd',\n grayLight: '#f8f8f8',\n grayLightTransparent: 'rgba(248, 248, 248, 0)',\n grayLightDarker: '#ebebeb',\n grayDark: '#717171',\n blue: '#1d61ca',\n ui: {\n greenLight: '#cdf5c8',\n green: '#2b8747',\n redLight: '#ffd0d0',\n red: '#c71f1f',\n yellowLight: '#fff4c7',\n blueLight: '#daf7fc',\n },\n};\n\nconst theme = {\n color: {\n bg: _colors.white,\n link: _colors.blue,\n accent: _colors.grayLight,\n accentTransparent: _colors.grayLightTransparent,\n accentDark: _colors.grayLightDarker,\n border: _colors.gray,\n textDark: _colors.black,\n textDarkLighten: _colors.grayDark,\n textLight: _colors.white,\n hoverOverlay: 'rgba(0, 0, 0, 0.04)',\n disabledBg: _colors.gray,\n disabledText: _colors.grayDark,\n placeholder: _colors.grayDark,\n ui: {\n positiveLight: _colors.ui.greenLight,\n positive: _colors.ui.green,\n neutralLight: _colors.ui.yellowLight,\n negativeLight: _colors.ui.redLight,\n negative: _colors.ui.red,\n infoLight: _colors.ui.blueLight,\n },\n },\n breakpoint: {\n Sm: '@media (min-width: 600px)',\n LtSm: '@media (max-width: 599px)',\n Md: '@media (min-width: 900px)',\n LtMd: '@media (max-width: 899px)',\n Lg: '@media (min-width: 1200px)',\n LtLg: '@media (max-width: 1199px)',\n },\n distances: {\n baseUnit: '8px',\n inputHeight: '48px',\n containerMaxWidth: '1312px',\n },\n};\n\nexport type Theme = typeof theme;\nexport default theme;\n", "import theme from './theme';\n\nexport const size = (multiplier = 1) => {\n const baseUnit = parseFloat(theme.distances.baseUnit);\n return `${multiplier * baseUnit}px`;\n};\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Page = styled.div``;\n\ntype PageSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n accent?: boolean;\n large?: boolean;\n fillSpace?: boolean;\n};\n\nexport const PageSection = styled.section<PageSectionProps>`\n margin-bottom: ${size(4)};\n\n ${({ accent }: { accent?: boolean }) =>\n accent &&\n css`\n padding: ${size(4)} 0;\n background-color: ${(props) => props.theme.color.accent};\n margin-bottom: 0;\n `}\n\n ${({ large }: { large?: boolean }) =>\n large &&\n css`\n margin-bottom: ${size(8)};\n `}\n\n ${({ accent, large }) =>\n accent &&\n large &&\n css`\n padding: ${size(8)} 0;\n margin-bottom: 0;\n `}\n\n ${({ fillSpace }: { fillSpace?: boolean }) =>\n fillSpace &&\n css`\n flex: 1 1 auto;\n `}\n`;\n", "import React, { useCallback } from 'react';\n\nimport {\n Wrapper,\n Header,\n HeaderCount,\n HeaderSort,\n Body,\n Footer,\n FooterProgress,\n FooterAction,\n ResultCount,\n} from './wrapper';\nimport ProgressBar from '../ProgressBar/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useSearch from '../../State/Search/useSearch';\nimport SortSelect, { OptionProps } from '../SortSelect/index';\nimport { getTranslatedSortOptionDisplayName } from '../../utils/sortOptions';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst Result = ({ children }: Props) => {\n const { loading, response, documents, queryFilter, onLoadMore, onFilterUpdate } = useSearch();\n\n const onSortOptionChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => onFilterUpdate(e.currentTarget.value),\n []\n );\n\n const numberOfDocuments = documents?.length || 0;\n const numberOfHits = response?.documentList.numberOfHits || 0;\n const useSkeletons = !!queryFilter?.concatResult;\n\n const selectedSortOption = response?.documentList.sortOptions.find((x) => x.selected)?.query;\n const sortOptions = response?.documentList.sortOptions\n .filter((x) => x.displayName !== 'relevance')\n .map(\n (so): OptionProps => ({\n value: so.query,\n displayName: getTranslatedSortOptionDisplayName(so.displayName),\n })\n );\n\n if (loading && !useSkeletons) {\n return <Loader />;\n }\n return (\n <Wrapper>\n <Header>\n <HeaderCount>\n <ResultCount>{`${numberSeparator(numberOfHits)} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ResultCount>\n </HeaderCount>\n {sortOptions && selectedSortOption && (\n <HeaderSort>\n <SortSelect\n value={selectedSortOption}\n options={sortOptions}\n onChange={onSortOptionChange}\n />\n </HeaderSort>\n )}\n </Header>\n <Body>{children}</Body>\n <Footer>\n <FooterProgress>\n <ProgressBar unit=\"bilar\" valueCurrent={numberOfDocuments} valueMax={numberOfHits} />\n </FooterProgress>\n {numberOfDocuments !== numberOfHits && (\n <FooterAction>\n <ButtonSecondary\n disabled={loading}\n onClick={onLoadMore}\n title=\"Visa fler\"\n aria-label=\"Visa fler\"\n >\n <ButtonContent>Visa fler</ButtonContent>\n </ButtonSecondary>\n </FooterAction>\n )}\n </Footer>\n </Wrapper>\n );\n};\n\nexport default Result;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.header`\n display: flex;\n margin-bottom: ${size(4)};\n`;\n\nexport const HeaderCount = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const HeaderSort = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Body = styled.div``;\n\nexport const Footer = styled.footer`\n margin-top: ${size(8)};\n text-align: center;\n`;\n\nexport const FooterProgress = styled.div`\n max-width: 175px;\n margin: 0 auto;\n`;\n\nexport const FooterAction = styled.div`\n margin-top: ${size(3)};\n`;\n\nexport const ResultCount = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Description, Bar, BarActive } from './wrapper';\n\ninterface Props {\n unit: string;\n valueCurrent: number;\n valueMax: number;\n}\n\nconst ProgressBar = ({ unit, valueCurrent, valueMax }: Props) => {\n const barWidth = (valueCurrent / valueMax) * 100;\n\n return (\n <Wrapper>\n <Description>\n Visar {valueCurrent.toString()} av {valueMax.toString()} {unit}\n </Description>\n <Bar>\n <BarActive\n style={{ width: `${barWidth}%` }}\n aria-valuenow={valueCurrent}\n aria-valuemin={0}\n aria-valuemax={valueMax}\n />\n </Bar>\n </Wrapper>\n );\n};\n\nexport default ProgressBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n text-align: center;\n`;\n\nexport const Description = styled.div`\n margin-bottom: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n width: 100%;\n height: 2px;\n background-color: ${(props) => props.theme.color.accentDark};\n`;\n\nexport const BarActive = styled.div.attrs(() => ({\n role: 'progressbar',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background-color: ${(props) => props.theme.color.textDark};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { UtilityTextRight } from '../Utility/index';\n\nexport const ButtonReset = styled.button.attrs(() => ({\n type: 'button',\n}))`\n display: inline-block;\n vertical-align: middle;\n padding: 0;\n margin: 0;\n background-color: transparent;\n border: 0;\n border-radius: 0;\n font-family: sans-serif;\n font-weight: 400;\n font-size: 1em;\n color: currentColor;\n line-height: 1.2;\n text-align: center;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n\n :focus {\n outline: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\ntype ButtonResetProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n fullWidth?: boolean;\n inputHeight?: boolean;\n};\n\nconst ButtonBase = styled(ButtonReset)<ButtonResetProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${size(1.75)} ${size(6)};\n border-radius: 3px;\n font-size: 1rem;\n line-height: 1.2;\n text-decoration: none;\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n &[disabled] {\n background-color: ${(props) => props.theme.color.disabledBg};\n border-color: ${(props) => props.theme.color.disabledBg};\n color: ${(props) => props.theme.color.disabledText};\n }\n\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n display: flex;\n width: 100%;\n `}\n\n ${({ inputHeight }) =>\n inputHeight &&\n css`\n height: ${(props) => props.theme.distances.inputHeight};\n `}\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(1.75)} ${size(2.5)};\n font-size: 0.875rem;\n }\n`;\n\nexport const ButtonPrimary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg wayke__font--bold',\n}))``;\n\nexport const ButtonSecondary = styled(ButtonBase).attrs(() => ({\n className: 'wayke__theme wayke__color--secondary-bg wayke__font--bold',\n}))`\n background-color: ${(props) => props.theme.color.accentDark};\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const ButtonContent = styled.div`\n position: relative;\n z-index: 1;\n\n & + & {\n margin-left: ${size(0.5)};\n }\n`;\n\nexport const ButtonClear = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n position: relative;\n font-size: 0.875rem;\n padding: ${size(1.5)};\n margin: ${size(-1.5)};\n text-align: left;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n ${UtilityTextRight} & {\n text-align: right;\n }\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\ntype ButtonInlineProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n inline?: boolean;\n as?: string;\n};\n\nexport const ButtonInline = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: underline;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDark};\n }\n\n ${({ inline }) =>\n inline &&\n css`\n display: inline;\n `}\n`;\n\nexport const ButtonInlineBold = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n\nexport const ButtonInlineLight = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n text-decoration: none;\n\n :not(:hover) {\n color: ${(props) => props.theme.color.textDarkLighten};\n }\n`;\n\nexport const ButtonInlinePrimary = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--regular',\n}))<ButtonInlineProps>`\n display: inline-flex;\n vertical-align: baseline;\n text-align: left;\n\n :hover {\n text-decoration: underline;\n }\n`;\n", "import styled from 'styled-components';\n\nexport const UtilityTextRight = styled.div`\n text-align: right;\n`;\n\nexport const UtilityFontSizeSmall = styled.span`\n font-size: 0.875rem;\n`;\n\nexport const UtilityTextPrimary = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))``;\n\nexport const UtilityTextBold = styled.span.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n", "import * as React from 'react';\n\nimport { Spinner, Wrapper } from './wrapper';\nimport { SrOnly } from '../SrOnly/index';\n\ninterface Props {\n inline?: boolean;\n center?: boolean;\n}\n\nconst Loader = ({ inline, center }: Props) => (\n <Wrapper inline={inline} center={center}>\n <Spinner aria-hidden=\"true\" />\n <SrOnly>Laddar...</SrOnly>\n </Wrapper>\n);\n\nexport default Loader;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { rotate } from '../../layout/keyframes';\n\nexport const Spinner = styled.div`\n display: block;\n margin: 0 auto;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n border: 2px solid currentColor;\n border-top-color: transparent;\n animation: ${rotate} 600ms linear infinite;\n`;\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n inline?: boolean;\n center?: boolean;\n};\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n role: 'status',\n}))<WrapperProps>`\n ${({ inline }) =>\n inline &&\n css`\n display: inline-block;\n vertical-align: middle;\n color: currentColor !important;\n\n ${Spinner} {\n width: 1em;\n height: 1em;\n }\n `}\n\n ${({ center }) =>\n center &&\n css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n `}\n`;\n", "import { keyframes } from 'styled-components';\n\nexport const noTransform = keyframes`\n to {\n transform: none;\n }\n`;\n\nexport const fadeIn = keyframes`\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n`;\n\nexport const rotate = keyframes`\n to {\n transform: rotate(360deg);\n }\n`;\n", "import styled from 'styled-components';\n\n// Adds element only visible to screen readers\nexport const SrOnly = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n", "import { format as formatFns } from 'date-fns';\nimport sv from 'date-fns/locale/sv';\n\n// Filter function to remove any null/undefined values.\nexport const notEmpty = <TValue>(value: TValue | null | undefined): value is TValue =>\n value !== null && value !== undefined;\n\nexport const numberSeparator = (value: number, n = 0, x = 3, s = ' ', c = '.') => {\n if (value === null || value === undefined) {\n return null;\n }\n\n const re = `\\\\d(?=(\\\\d{${x || 3}})+${n > 0 ? '\\\\D' : '$'})`;\n const num = value.toFixed(Math.max(0, ~~n));\n\n return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), `$&${s || ','}`);\n};\n\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n} from './constants';\n\nexport const FacetIdToTitle = (f: string) => {\n switch (f) {\n case MANUFACTURER:\n return 'Tillverkare';\n case MODEL_SERIES:\n return 'Modell';\n case FUEL_TYPE:\n return 'Drivmedel';\n case GEARBOX_TYPE:\n return 'V\u00E4xell\u00E5da';\n case SEGMENT:\n return 'Segment';\n case DRIVING_WHEEL:\n return 'Drivhjul';\n case ENVIRONMENT_CLASS:\n return 'Milj\u00F6klass';\n case COLOR:\n return 'F\u00E4rg';\n case PRICE:\n return 'Pris';\n case BRANCH:\n return 'Anl\u00E4ggning';\n case MILEAGE:\n return 'Miltal';\n case MODEL_YEAR:\n return 'Modell\u00E5r';\n case LEASING_PRICE:\n return 'Privatleasing';\n default:\n return f;\n }\n};\n\nexport const dateTimeFormat = {\n YearMonth: 1,\n DayMonth: 2,\n\n format: (value: string | Date, format: number) => {\n const date = new Date(value);\n switch (format) {\n case dateTimeFormat.YearMonth:\n return formatFns(date, 'MMMM yyyy', { locale: sv });\n case dateTimeFormat.DayMonth:\n return formatFns(date, 'd MMMM yyyy', { locale: sv });\n default:\n return formatFns(date, 'yyyy-MM-dd HH:mm', { locale: sv });\n }\n },\n};\n", "export const MANUFACTURER = 'manufacturer';\nexport const MODEL_SERIES = 'modelSeries';\nexport const FUEL_TYPE = 'fuelType';\nexport const GEARBOX_TYPE = 'gearboxType';\nexport const BRANCH = 'branch';\nexport const COLOR = 'color';\nexport const ENVIRONMENT_CLASS = 'environmentClass';\nexport const SEGMENT = 'properties.segment';\nexport const DRIVING_WHEEL = 'drivingWheel';\nexport const PRICE = 'price';\nexport const MILEAGE = 'mileage';\nexport const MODEL_YEAR = 'modelYear';\nexport const LEASING_PRICE = 'leasingPrice';\n\nexport const COLOR_WHITE = { displayName: 'Vit', hex: '#ffffff' };\nexport const COLOR_BLACK = { displayName: 'Svart', hex: '#000000' };\nexport const COLOR_GRAY = { displayName: 'Gr\u00E5', hex: '#808080' };\nexport const COLOR_SILVER = { displayName: 'Silver', hex: '#c0c0c0' };\nexport const COLOR_BLUE = { displayName: 'Bl\u00E5', hex: '#0000ff' };\nexport const COLOR_RED = { displayName: 'R\u00F6d', hex: '#ff0000' };\nexport const COLOR_BROWN = { displayName: 'Brun', hex: '#a52a2a' };\nexport const COLOR_GREEN = { displayName: 'Gr\u00F6n', hex: '#008000' };\nexport const COLOR_ORANGE = { displayName: 'Orange', hex: '#ffa500' };\nexport const COLOR_YELLOW = { displayName: 'Gul', hex: '#ffff00' };\nexport const COLOR_PURPLE = { displayName: 'Lila', hex: '#800080' };\nexport const COLOR_BEIGE = { displayName: 'Beige', hex: '#f5f5dc' };\n\n/*\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'https://cdn.wayke.se/wui/images/placeholders/placeholder_product_card.jpg';\n*/\n\nexport const DEFAULT_PLACEHOLDER_IMAGE =\n 'data:image/jpeg;base64,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';\n", "import { useContext } from 'react';\nimport { SearchContext } from './SearchContext';\n\nconst useSearch = () => useContext(SearchContext);\n\nexport default useSearch;\n", "import { createContext } from 'react';\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\n\nexport interface SearchContextProps {\n loading: boolean;\n response?: Search;\n error: boolean;\n documents?: Document[];\n initialFacets?: Facet[];\n queryFilter: QueryFilter;\n onFilterUpdate: (nextQuery: string) => void;\n onLoadMore: () => void;\n onInitialize: (initialQueryParams?: URLSearchParams) => void;\n}\n\nexport const SearchContext = createContext<SearchContextProps>({\n loading: false,\n error: false,\n response: undefined,\n documents: undefined,\n initialFacets: undefined,\n queryFilter: { searchParams: new URLSearchParams() },\n onFilterUpdate: (_) => {},\n onLoadMore: () => {},\n onInitialize: (_) => {},\n});\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\nimport { DrivingDistance } from '../../@types/codegen';\n\nexport interface OptionProps {\n value: number | string | DrivingDistance;\n displayName?: number | string;\n}\n\ninterface SortSelectProps {\n value: string | number;\n options: OptionProps[];\n unit?: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst SortSelect = ({ value, options, onChange, unit }: SortSelectProps) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title=\"Sortering\" aria-label=\"Sortering\">\n {options.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default SortSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\n\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0;\n padding-right: calc(${iconSize} + ${size(1)});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n text-decoration: underline;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\ntype SharedIconProps = {\n block?: boolean;\n};\n\ntype IconProps = React.SVGProps<SVGSVGElement> & SharedIconProps;\n\nconst Icon = styled.svg.attrs(() => ({\n xmlns: 'http://www.w3.org/2000/svg',\n}))<IconProps>`\n display: inline-block;\n vertical-align: middle;\n width: 1em;\n height: 1em;\n fill: currentColor;\n\n ${({ block }) =>\n block &&\n css`\n display: block;\n `}\n`;\n\ntype IconInfoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> &\n SharedIconProps;\n\nexport const IconInfo = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 24 24\" block={block}>\n <path d=\"M12 0C5.371 0 0 5.371 0 12s5.371 12 12 12 12-5.371 12-12S18.629 0 12 0zm0 2c5.5234 0 10 4.4766 10 10s-4.4766 10-10 10S2 17.5234 2 12 6.4766 2 12 2zm0 3.8125c-.1836 0-.336-.004-.5.0313-.164.0351-.3164.125-.4375.2187-.121.0938-.211.2227-.2813.375s-.0937.332-.0937.5625c0 .2266.0234.4063.0938.5625.0703.1563.1601.2813.2812.375.121.0938.2734.1484.4375.1875.164.039.3164.0625.5.0625.1797 0 .371-.0234.5313-.0625.1601-.039.2851-.0938.4062-.1875.121-.0938.211-.2188.2813-.375.0703-.1523.125-.336.125-.5625 0-.2305-.0547-.4102-.125-.5625-.0704-.1523-.1602-.2813-.2813-.375-.121-.0938-.246-.1836-.4063-.2188-.1601-.0351-.3515-.0312-.5312-.0312zm-1.2188 3.3438v8.9687h2.4375V9.1562z\" />\n </Icon>\n);\n\nexport const IconCancel = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.7 14.3c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3s-.5-.1-.7-.3L8 9.4l-6.3 6.3c-.2.2-.4.3-.7.3s-.5-.1-.7-.3c-.4-.4-.4-1 0-1.4L6.6 8 .3 1.7C-.1 1.3-.1.7.3.3c.4-.4 1-.4 1.4 0L8 6.6 14.3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L9.4 8l6.3 6.3z\" />\n </Icon>\n);\n\nexport const IconChevronDown = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M17.7 5L9 13.7.3 5l.7-.7 8 8 8-8 .7.7z\" />\n </Icon>\n);\n\nexport const IconChevronLeft = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M13 17.7L4.3 9 13 .3l.7.7-8 8 8 8-.7.7z\" />\n </Icon>\n);\n\nexport const IconChevronRight = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 18 18\" block={block}>\n <path d=\"M5 .3L13.7 9 5 17.7l-.7-.7 8-8-8-8L5 .3z\" />\n </Icon>\n);\n\nexport const IconCheck = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.6 4.3l-9.3 9.4c-.5.5-1.4.5-1.9 0l-4-4c-.5-.5-.5-1.4 0-1.9s1.3-.5 1.9 0l3.1 3.1 8.4-8.5c.5-.5 1.4-.5 1.9 0s.4 1.3-.1 1.9z\" />\n </Icon>\n);\n\nexport const IconRadio = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M13 8c0 2.8-2.2 5-5 5s-5-2.2-5-5 2.2-5 5-5 5 2.2 5 5zm3 0c0 4.4-3.6 8-8 8s-8-3.6-8-8 3.6-8 8-8 8 3.6 8 8zm-1 0c0-3.9-3.1-7-7-7S1 4.1 1 8s3.1 7 7 7 7-3.1 7-7z\" />\n </Icon>\n);\n\nexport const IconSearch = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 16 16\" block={block}>\n <path d=\"M15.5 15.3L11 10.8c1.2-1.1 2-2.7 2-4.5C13 2.9 10.2.1 6.8.1S.5 2.8.5 6.2s2.8 6.2 6.2 6.2c1.3 0 2.5-.4 3.5-1.1l4.6 4.6.7-.6zM1.4 6.2C1.4 3.3 3.8 1 6.7 1S12 3.3 12 6.2c0 1.5-.7 2.9-1.7 3.9l-.7.5c-.8.5-1.8.8-2.8.8-3 .1-5.4-2.3-5.4-5.2z\" />\n </Icon>\n);\n\nexport const IconExclamationCircle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M14.482 21.893c0-0.857 0.694-1.551 1.551-1.551s1.551 0.694 1.551 1.551c0 0.857-0.694 1.551-1.551 1.551s-1.551-0.694-1.551-1.551zM16.033 2.838c-7.271 0-13.187 5.916-13.187 13.187s5.916 13.187 13.187 13.187 13.187-5.916 13.187-13.187c0-7.271-5.916-13.187-13.187-13.187zM16.033 27.203c-6.163 0-11.178-5.015-11.178-11.178s5.015-11.178 11.178-11.178c6.164 0 11.178 5.015 11.178 11.178s-5.014 11.178-11.178 11.178zM16.033 8.308c-0.555 0-1.004 0.45-1.004 1.004v8.227c0 0.555 0.45 1.004 1.004 1.004s1.004-0.45 1.004-1.004v-8.227c0-0.555-0.45-1.004-1.004-1.004z\" />\n </Icon>\n);\n\nexport const IconExclamationTriangle = ({ block }: IconInfoProps) => (\n <Icon viewBox=\"0 0 32 32\" block={block}>\n <path d=\"M15.951 19.663c-0.457 0-0.828-0.37-0.828-0.828v-4.357c0-0.457 0.37-0.828 0.828-0.828s0.828 0.37 0.828 0.828v4.357c0 0.457-0.371 0.828-0.828 0.828zM15.952 22.906c-0.305 0-0.606-0.126-0.821-0.341s-0.338-0.514-0.338-0.818 0.122-0.606 0.338-0.821c0.431-0.43 1.209-0.43 1.639 0 0.215 0.215 0.341 0.516 0.341 0.821s-0.126 0.603-0.341 0.818c-0.215 0.215-0.513 0.341-0.818 0.341zM27.049 27.070h-22.196c-0.352 0-0.677-0.186-0.855-0.489s-0.184-0.677-0.014-0.985l11.098-20.105c0.175-0.317 0.508-0.513 0.87-0.513s0.695 0.197 0.87 0.513l11.098 20.105c0.17 0.308 0.165 0.683-0.014 0.985s-0.504 0.489-0.856 0.489zM6.536 25.083h18.83l-9.415-17.056-9.415 17.056z\" />\n </Icon>\n);\n", "const SortOptionDisplayName = {\n PublishedAsc: 'published-asc',\n PublishedDesc: 'published-desc',\n PriceAsc: 'price-asc',\n Pricedesc: 'price-desc',\n ModelAsc: 'model-asc',\n Modeldesc: 'model-desc',\n};\n\ntype SortOptionDisplayName =\n | 'relevance'\n | 'published-asc'\n | 'published-desc'\n | 'price-asc'\n | 'price-desc'\n | 'model-asc'\n | 'model-desc';\n\nexport const getTranslatedSortOptionDisplayName = (str: string | SortOptionDisplayName): string => {\n switch (str) {\n case SortOptionDisplayName.PublishedAsc:\n return 'Publicerad \u00E4ldst';\n case SortOptionDisplayName.PublishedDesc:\n return 'Publicerad senast';\n case SortOptionDisplayName.PriceAsc:\n return 'Pris l\u00E4gst';\n case SortOptionDisplayName.Pricedesc:\n return 'Pris h\u00F6gst';\n case SortOptionDisplayName.ModelAsc:\n return '\u00C5rsmodell \u00E4ldst';\n case SortOptionDisplayName.Modeldesc:\n return '\u00C5rsmodell nyast';\n default:\n return str;\n }\n};\n", "import React, { useState, useCallback } from 'react';\n\nimport { List, Item, Action, Label, Indicator, IndicatorValue } from './wrapper';\nimport { Facet } from '../../@types/search';\nimport { FacetIdToTitle } from '../../utils/formats';\nimport { PRICE, MILEAGE, MODEL_YEAR } from '../../utils/constants';\nimport useSearch from '../../State/Search/useSearch';\nimport { SearchFilterTypes, SearchFilterNameTypes } from '../../@types/filter';\nimport FilterPanel from '../FilterPanel/index';\n\nconst isSelected = (f: Facet, searchParams: URLSearchParams) => {\n switch (f.id) {\n case PRICE:\n case MILEAGE:\n case MODEL_YEAR:\n return searchParams.has(`${f.id}.min`) || searchParams.has(`${f.id}.max`) ? 1 : 0;\n default:\n return f.filters.filter((filter) => filter.selected).length;\n }\n};\n\ninterface FilterProps {\n filterList?: SearchFilterTypes[];\n}\n\nconst Filter = ({ filterList }: FilterProps) => {\n const { queryFilter, initialFacets, loading, response, onFilterUpdate } = useSearch();\n\n const facets = response?.facets;\n\n const [facet, setFacet] = useState<Facet>();\n const onSelectFacet = useCallback((nextFacet: Facet) => setFacet(nextFacet), []);\n const onClose = useCallback(() => setFacet(undefined), []);\n\n if (!facets) {\n return null;\n }\n const filterNames = filterList ? filterList.map((x) => x.filterName) : undefined;\n\n const filteredFacets = facets\n ?.filter((x) => x.id !== 'segment')\n ?.filter((f) => (filterNames ? filterNames.includes(f.id as SearchFilterNameTypes) : true))\n .sort((a, b) =>\n filterNames\n ? filterNames.indexOf(a.id as SearchFilterNameTypes) -\n filterNames.indexOf(b.id as SearchFilterNameTypes)\n : 0\n )\n .map((x) => {\n const match = filterList?.find((y) => y.filterName === x.id);\n if (match?.displayName) {\n return {\n ...x,\n displayName: match.displayName,\n };\n }\n return {\n ...x,\n displayName: FacetIdToTitle(x.id),\n };\n });\n\n return (\n <>\n {initialFacets && facet && (\n <FilterPanel\n filterList={filterList}\n facet={facet}\n loading={loading}\n filteredFacets={filteredFacets}\n numberOfHits={response?.documentList.numberOfHits || 0}\n onFilterUpdate={onFilterUpdate}\n onClose={onClose}\n />\n )}\n <List>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => {\n const selected = isSelected(f, queryFilter.searchParams);\n return (\n <Item key={f.id}>\n <Action\n onClick={() => onSelectFacet(f)}\n title={f.displayName}\n aria-label={f.displayName}\n className={\n selected > 0\n ? 'wayke__theme wayke__color--primary-bg wayke__font--bold'\n : 'wayke__theme wayke__font--regular'\n }\n >\n <Label>{f.displayName}</Label>\n {selected > 0 && (\n <Indicator>\n <IndicatorValue>{selected}</IndicatorValue>\n </Indicator>\n )}\n </Action>\n </Item>\n );\n })}\n </List>\n </>\n );\n};\n\nexport default Filter;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n`;\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(3)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n line-height: 1;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 3px;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Label = styled.div`\n z-index: 1;\n`;\n\nexport const Indicator = styled.div`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n background-color: currentColor;\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n color: white;\n mix-blend-mode: difference;\n`;\n", "import React, { useCallback } from 'react';\n\nimport { Facet } from '../../@types/search';\nimport Panel from '../Panel/index';\nimport { FooterAction, FooterActionItem } from '../Panel/wrapper';\nimport { ButtonSecondary, ButtonContent, ButtonPrimary } from '../Button/index';\nimport Accordion, { AccordionItem } from '../Accordion/index';\nimport { Repeat } from '../Repeat/index';\nimport FacetSelector from './faceSelector';\nimport { SearchFilterTypes } from '../../@types/filter';\n\nexport interface FilterProps {\n label: string;\n activeFilters?: number;\n}\n\nexport interface Props {\n facet?: Facet;\n loading: boolean;\n filteredFacets: Facet[];\n filterList?: SearchFilterTypes[];\n numberOfHits: number;\n onClose: () => void;\n onFilterUpdate: (nextQuery: string) => void;\n}\n\nconst FilterPanel = ({\n facet,\n filteredFacets,\n numberOfHits,\n loading,\n onFilterUpdate,\n onClose,\n}: Props) => {\n const onClearFilters = useCallback(() => onFilterUpdate(''), []);\n\n return (\n <Panel\n title=\"Filtrera\"\n onClose={onClose}\n footer={\n <>\n <FooterAction>\n <FooterActionItem>\n <ButtonSecondary fullWidth disabled={loading} onClick={onClearFilters}>\n <ButtonContent>Rensa alla</ButtonContent>\n </ButtonSecondary>\n </FooterActionItem>\n <FooterActionItem>\n <ButtonPrimary fullWidth disabled={loading} onClick={onClose}>\n <ButtonContent>{`Visa ${numberOfHits} ${\n numberOfHits === 1 ? 'bil' : 'bilar'\n }`}</ButtonContent>\n </ButtonPrimary>\n </FooterActionItem>\n </FooterAction>\n </>\n }\n >\n <Accordion>\n {filteredFacets\n .filter((x) => x.filters.length)\n .map((f) => (\n <AccordionItem\n key={f.displayName}\n heading={f.displayName}\n isActive={f.id === facet?.id}\n >\n <Repeat>\n <FacetSelector facet={f} />\n </Repeat>\n </AccordionItem>\n ))}\n </Accordion>\n </Panel>\n );\n};\n\nexport default FilterPanel;\n", "import * as React from 'react';\n\nimport {\n PanelWrapper,\n Close,\n CloseBtn,\n Header,\n Heading,\n Body,\n Footer,\n UiBlock,\n Wrapper,\n} from './wrapper';\nimport { Portal, PortalNamespace } from '../Portal/index';\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\n\ninterface IPanelPortal {\n id?: string | null;\n title: string | null;\n onClose: () => void;\n children: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nconst Panel = ({ id, title, footer, onClose, children }: IPanelPortal) => {\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper>\n <UiBlock title=\"St\u00E4ng panel\" onClick={onClose} />\n <PanelWrapper>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn title=\"St\u00E4ng panel\" aria-label=\"St\u00E4ng panel\" onClick={onClose}>\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n {footer && <Footer>{footer}</Footer>}\n </PanelWrapper>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Panel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: relative;\n z-index: 80;\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n animation: ${fadeIn} 200ms ease;\n`;\n\nexport const PanelWrapper = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n background-color: ${(props) => props.theme.color.accent};\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n z-index: 1;\n animation: ${noTransform} 200ms ease forwards;\n\n ${(props) => props.theme.breakpoint.Sm} {\n max-width: 450px;\n transform: translateX(100%);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: auto;\n max-height: 100%;\n transform: translateY(100%);\n }\n`;\n\nexport const Header = styled.header`\n position: relative;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n min-height: 45px;\n padding: ${size(3)};\n padding-bottom: 0;\n\n :after {\n content: '';\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: ${size(3)};\n background-image: linear-gradient(\n ${(props) => props.theme.color.accent},\n ${(props) => props.theme.color.accentTransparent}\n );\n z-index: 1;\n }\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n padding: ${size(2)};\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n z-index: 2;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n opacity: 0;\n transition: opacity 200ms ease;\n z-index: -1;\n }\n\n :active {\n transform: scale(0.9);\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: ${size(3)};\n`;\n\nexport const Footer = styled.footer`\n position: relative;\n flex-shrink: 0;\n padding: ${size(3)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n`;\n\nexport const FooterAction = styled.div.attrs(() => ({\n role: 'group',\n}))`\n display: flex;\n align-items: center;\n margin: ${size(-0.5)};\n`;\n\nexport const FooterActionItem = styled.div`\n flex: 1 1 50%;\n padding: ${size(0.5)};\n\n ${ButtonReset} {\n padding: ${size(1.75)} ${size(2)};\n }\n`;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype HeadingBaseProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n noMargin?: boolean;\n};\n\nconst HeadingBase = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<HeadingBaseProps>`\n margin-top: 0;\n margin-bottom: ${size(2)};\n font-weight: normal;\n line-height: 1.2;\n\n ${({ noMargin }) =>\n noMargin &&\n css`\n margin-bottom: 0;\n `}\n`;\n\nexport const H1 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h1',\n}))`\n font-size: 1.875rem;\n`;\n\nexport const H2 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h2',\n}))`\n font-size: 1.5rem;\n`;\n\n/*\nexport const H3 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h3',\n}))`\n font-size: 1.125rem;\n`;\n*/\n\nexport const H4 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h4',\n}))`\n font-size: 1rem;\n`;\n\nexport const H5 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h5',\n}))`\n font-size: 0.875rem;\n`;\n\n/*\nexport const H6 = styled(HeadingBase).attrs<{ as: string }>((props) => ({\n as: props.as || 'h6',\n}))`\n font-size: 0.67rem;\n`;\n*/\n\nexport const VisualHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1em;\n`;\n", "export const DefaultPortal = 'DEFAULT_PORTAL';\n", "import * as React from 'react';\n\nexport interface IPortalElement {\n id: string;\n}\n\nconst PortalElement = ({ id }: IPortalElement) => <div id={id} />;\n\nexport default PortalElement;\n", "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nexport interface IPortal {\n id: string;\n children: React.ReactNode;\n}\n\nconst Portal = ({ id, children }: IPortal) => {\n const el = React.useRef(document.getElementById(id) || document.createElement('div'));\n if (!el.current) {\n return null;\n }\n\n const { current } = el;\n\n const [dynamic] = React.useState(!current.parentElement);\n\n React.useEffect(() => {\n if (dynamic) {\n current.id = id;\n if (document.body) {\n document.body.appendChild(current);\n }\n }\n return () => {\n if (dynamic && current.parentElement) {\n current.parentElement.removeChild(current);\n }\n };\n }, [id]);\n\n return ReactDOM.createPortal(children, current);\n};\n\nexport default React.memo<IPortal>(Portal);\n", "import React, { useState, useCallback } from 'react';\n\nimport {\n List,\n Item,\n Header,\n Label,\n Heading,\n Indicator,\n IndicatorValue,\n Icon,\n Body,\n} from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\n\nexport interface IAccordionItem {\n heading: string;\n activeCount?: number;\n children: React.ReactNode;\n isActive?: boolean;\n}\n\nexport interface IAccordion {\n children?: React.ReactNode;\n}\n\nexport const AccordionItem = ({ heading, children, activeCount, isActive }: IAccordionItem) => {\n const [extend, setExtend] = useState(isActive || false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Item isOpen={extend}>\n <Header onClick={onToggleExtend} title=\"Visa mer\">\n <Label>\n <Heading\n className={activeCount && activeCount > 0 ? 'wayke__theme wayke__font--bold' : ''}\n >\n {heading}\n </Heading>\n {activeCount && activeCount > 0 && (\n <Indicator>\n <IndicatorValue>{activeCount}</IndicatorValue>\n </Indicator>\n )}\n </Label>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Header>\n <Body>{children}</Body>\n </Item>\n );\n};\n\nconst Accordion = ({ children }: IAccordion) => <List>{children}</List>;\n\nexport default Accordion;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 1rem;\n`;\n\nexport const Header = styled(ButtonReset)`\n display: flex;\n align-items: center;\n width: 100%;\n padding: ${size(3)} 0;\n text-align: left;\n font: inherit;\n`;\n\nexport const Label = styled.div`\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n`;\n\nexport const Heading = styled.div`\n line-height: 1;\n`;\n\nexport const Indicator = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${size(0.375)};\n margin-left: ${size(0.5)};\n min-width: 1em;\n height: 1em;\n border-radius: 999px;\n z-index: 1;\n`;\n\nexport const IndicatorValue = styled.div`\n font-family: sans-serif; // Default font to guarantee visibility\n font-size: 0.75rem;\n font-weight: bold;\n`;\n\nexport const Icon = styled.div`\n position: relative;\n flex-shrink: 0;\n padding-left: ${size(1)};\n transition: color 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: 0;\n right: ${size(-1)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accent};\n z-index: -1;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Header}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Body = styled.div`\n display: none;\n padding-bottom: ${size(3)};\n`;\n\ntype ItemProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLLIElement>, HTMLLIElement> & {\n isOpen?: boolean;\n};\n\nexport const Item = styled.li<ItemProps>`\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n\n ${({ isOpen }) =>\n isOpen &&\n css`\n ${Body} {\n display: block;\n }\n\n ${Icon} {\n svg {\n transform: rotate(180deg);\n }\n }\n `}\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Repeat = styled.div`\n & + & {\n margin-top: ${size(3)};\n }\n`;\n\nexport const RepeatTiny = styled.div`\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const RepeatSmall = styled.div`\n & + & {\n margin-top: ${size(2)};\n }\n`;\n", "import React from 'react';\n\nimport { Facet } from '../../@types/search';\nimport CheckListFacet from './checkListFacet';\nimport ColorSelectFacet from './colorFacet';\nimport RangeFacet from './rangeFacet';\nimport {\n MANUFACTURER,\n MODEL_SERIES,\n FUEL_TYPE,\n GEARBOX_TYPE,\n ENVIRONMENT_CLASS,\n SEGMENT,\n DRIVING_WHEEL,\n COLOR,\n PRICE,\n BRANCH,\n MILEAGE,\n MODEL_YEAR,\n LEASING_PRICE,\n} from '../../utils/constants';\n\ninterface FacetSelectorProps {\n facet: Facet;\n}\n\nconst FacetSelector = ({ facet }: FacetSelectorProps) => {\n switch (facet.id) {\n case MANUFACTURER:\n case MODEL_SERIES:\n case FUEL_TYPE:\n case GEARBOX_TYPE:\n case BRANCH:\n case ENVIRONMENT_CLASS:\n case SEGMENT:\n case DRIVING_WHEEL:\n return <CheckListFacet facet={facet} />;\n case COLOR:\n return <ColorSelectFacet facet={facet} />;\n case PRICE:\n return <RangeFacet facet={facet} unit=\"kr\" formatValues />;\n case LEASING_PRICE:\n return <RangeFacet facet={facet} unit=\"kr/m\u00E5n\" formatValues />;\n case MILEAGE:\n return <RangeFacet facet={facet} unit=\"mil\" formatValues />;\n case MODEL_YEAR:\n return <RangeFacet facet={facet} unit=\"\u00E5r\" />;\n default:\n return null;\n }\n};\n\nexport default FacetSelector;\n", "import React, { useState, useEffect, useCallback } from 'react';\nimport Checklist from '../Checklist/index';\nimport OverflowBox from '../OverflowBox/index';\nimport { Facet, FacetFilter } from '../../@types/search';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface ChecklistFacetProps {\n facet: Facet;\n}\n\nconst ChecklistFacet = ({ facet }: ChecklistFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <OverflowBox>\n <Checklist\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n }))}\n />\n </OverflowBox>\n );\n};\n\nexport default ChecklistFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, ActionIcon, ActionLabel } from './wrapper';\nimport { IconCheck, IconRadio } from '../Icon/index';\n\nexport interface IChecklistItem {\n label: string;\n onClick: () => void;\n active?: boolean;\n radio?: boolean;\n}\n\nexport interface IChecklist {\n items: IChecklistItem[];\n radio?: boolean;\n}\n\nconst ChecklistItem = ({ label, onClick, active, radio }: IChecklistItem) => (\n <Item>\n <Action onClick={onClick}>\n {active && <ActionIcon>{radio ? <IconRadio block /> : <IconCheck block />}</ActionIcon>}\n <ActionLabel\n className={active ? 'wayke__theme wayke__font--bold wayke__color--primary-text' : ''}\n >\n {label}\n </ActionLabel>\n </Action>\n </Item>\n);\n\nconst Checklist = ({ items, radio }: IChecklist) => {\n if (!items?.length) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ChecklistItem\n key={item.label}\n label={item.label}\n onClick={item.onClick}\n active={item.active}\n radio={radio}\n />\n ))}\n </List>\n );\n};\n\nexport default Checklist;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n list-style: none;\n padding: 0;\n margin: ${size(-1)} 0;\n font-size: 0.875rem;\n overflow: hidden;\n`;\n\nexport const Item = styled.li`\n ${List} {\n padding-left: ${size(5)};\n margin: 0;\n }\n`;\n\nexport const Action = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n text-align: left;\n font: inherit;\n padding: ${size(1)} 0;\n\n :before {\n content: '';\n position: absolute;\n left: 0;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 3px;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-top: 2px; // Magic number\n }\n`;\n\nexport const ActionIcon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n top: ${size(1)};\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n margin-top: 2px; // Magic number\n font-size: ${size(1.5)};\n`;\n\nexport const ActionLabel = styled.div`\n padding-left: ${size(3)};\n transition: transform 150ms ease;\n\n ${Action}:hover & {\n transform: translateX(${size(0.5)});\n }\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst OverflowBox = ({ children }: IProps) => <Wrapper>{children}</Wrapper>;\n\nexport default OverflowBox;\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.div`\n max-height: 400px;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, FacetFilter } from '../../@types/search';\nimport ColorSelect from '../ColorSelect/index';\nimport useSearch from '../../State/Search/useSearch';\nimport { getHexColorFromDisplayName } from '../../utils/converters';\n\ninterface ColorSelectFacetProps {\n facet: Facet;\n}\n\nconst ColorSelectFacet = ({ facet }: ColorSelectFacetProps) => {\n const { loading, error, onFilterUpdate } = useSearch();\n const [selected, setSelected] = useState<{ [key: string]: boolean }>();\n\n useEffect(() => {\n setSelected(undefined);\n }, [facet, error]);\n\n const onClick = useCallback(\n (f: FacetFilter) => {\n if (!loading) {\n setSelected({\n ...selected,\n [f.displayName]: !f.selected,\n });\n onFilterUpdate(f.query);\n }\n },\n [loading]\n );\n\n return (\n <ColorSelect\n items={facet.filters\n .sort((a, b) => a.displayName.localeCompare(b.displayName))\n .map((f) => ({\n label: f.displayName,\n onClick: () => onClick(f),\n active: selected?.[f.displayName] !== undefined ? selected[f.displayName] : f.selected,\n hex: [getHexColorFromDisplayName(f.displayName)],\n }))}\n />\n );\n};\n\nexport default ColorSelectFacet;\n", "import React from 'react';\n\nimport { List, Item, Action, Color, Label } from './wrapper';\n\nexport interface ItemProps {\n label: string;\n hex: string[];\n onClick?: () => void;\n active?: boolean;\n disabled?: boolean;\n boxShadow?: boolean;\n}\n\nexport interface Props {\n items?: ItemProps[];\n}\n\nconst ColorSelectItem = ({ label, hex, onClick, active, disabled, boxShadow }: ItemProps) => {\n return (\n <Item>\n <Action onClick={onClick} disabled={disabled} title={label} aria-label={label}>\n <Color\n style={{\n backgroundColor: hex.length === 1 ? hex[0] : '',\n backgroundImage: hex.length > 1 ? `linear-gradient(${hex.join()})` : '',\n }}\n active={active}\n boxShadow={boxShadow}\n className={active ? 'wayke__theme wayke__color--primary-text' : ''}\n />\n <Label\n className={active ? 'wayke__theme wayke__color--primary-text wayke__font--bold' : ''}\n >\n {label}\n </Label>\n </Action>\n </Item>\n );\n};\n\nconst ColorSelect = ({ items }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List>\n {items.map((item) => (\n <ColorSelectItem\n key={item.label}\n label={item.label}\n hex={item.hex}\n onClick={item.onClick}\n active={item.active}\n disabled={item.disabled}\n boxShadow={item.boxShadow}\n />\n ))}\n </List>\n );\n};\n\nexport default ColorSelect;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-1.5)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 33.333%;\n max-width: 33.333%;\n padding: ${size(1.5)};\n`;\n\nexport const Action = styled(ButtonReset)`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n font: inherit;\n\n &[disabled] {\n opacity: 0.4;\n cursor: default;\n }\n`;\n\ntype ColorProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n active?: boolean;\n boxShadow?: boolean;\n};\n\nexport const Color = styled.div<ColorProps>`\n position: relative;\n width: ${size(3.75)};\n height: ${size(3.75)};\n border-radius: 50%;\n color: ${(props) => props.theme.color.border};\n\n :before {\n content: '';\n position: absolute;\n top: -5px;\n bottom: -5px;\n left: -5px;\n right: -5px;\n border: 2px solid;\n border-radius: 50%;\n display: none;\n }\n\n ${Action}:not([disabled]):hover & {\n :before {\n display: block;\n }\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n display: block;\n }\n `}\n\n ${({ boxShadow }) =>\n boxShadow &&\n css`\n box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);\n `}\n`;\n\nexport const Label = styled.div`\n margin-top: ${size(1.25)};\n font-size: 0.875rem;\n`;\n", "import {\n COLOR_WHITE,\n COLOR_BLACK,\n COLOR_GRAY,\n COLOR_SILVER,\n COLOR_BLUE,\n COLOR_RED,\n COLOR_BROWN,\n COLOR_GREEN,\n COLOR_ORANGE,\n COLOR_YELLOW,\n COLOR_PURPLE,\n COLOR_BEIGE,\n} from './constants';\n\nexport const getHexColorFromDisplayName = (displayName: string) => {\n switch (displayName) {\n case COLOR_WHITE.displayName:\n return COLOR_WHITE.hex;\n case COLOR_BLACK.displayName:\n return COLOR_BLACK.hex;\n case COLOR_GRAY.displayName:\n return COLOR_GRAY.hex;\n case COLOR_SILVER.displayName:\n return COLOR_SILVER.hex;\n case COLOR_BLUE.displayName:\n return COLOR_BLUE.hex;\n case COLOR_RED.displayName:\n return COLOR_RED.hex;\n case COLOR_BROWN.displayName:\n return COLOR_BROWN.hex;\n case COLOR_GREEN.displayName:\n return COLOR_GREEN.hex;\n case COLOR_ORANGE.displayName:\n return COLOR_ORANGE.hex;\n case COLOR_YELLOW.displayName:\n return COLOR_YELLOW.hex;\n case COLOR_PURPLE.displayName:\n return COLOR_PURPLE.hex;\n case COLOR_BEIGE.displayName:\n return COLOR_BEIGE.hex;\n default:\n return '#fff';\n }\n};\n", "import React, { useCallback, useState, useEffect } from 'react';\nimport { Facet } from '../../@types/search';\nimport RangeSlider from '../RangeSlider/index';\nimport useSearch from '../../State/Search/useSearch';\n\ninterface RangeFacetProps {\n facet: Facet;\n unit?: string;\n formatValues?: boolean;\n}\n\nconst getInitialValues = (domain: number[], facet: Facet, searchParams: URLSearchParams) => {\n const facetMin = domain[0]; //parseInt(facet.filters[0].displayName, 10);\n const _queryMin = searchParams?.get(`${facet.id}.min`) || null;\n const facetMax = domain[domain.length - 1]; //parseInt(facet.filters[facet.filters.length - 1].displayName, 10);\n const _queryMax = searchParams?.get(`${facet.id}.max`) || null;\n\n const queryMin = parseInt(_queryMin === null ? `${facetMin}` : _queryMin, 10);\n const min = facetMin > queryMin ? facetMin : queryMin;\n const queryMax = parseInt(_queryMax === null ? `${facetMax}` : _queryMax, 10);\n const max = queryMax > facetMax ? facetMin : queryMax;\n\n return min || max ? [min ? min : domain[0], max ? max : domain[1]] : domain;\n};\n\nconst averageDelta = ([x, ...xs]: number[]) => {\n if (x === undefined) return NaN;\n\n return xs.reduce(([acc, last], x) => [acc + (x - last), x], [0, x])[0] / xs.length;\n};\n\nconst getSteps = (initialAllValues: number[]) => {\n const delta = averageDelta(initialAllValues);\n const max = Math.floor(initialAllValues[initialAllValues.length - 1] * 1000) / 1000;\n if (delta > 1000) return new Array(max / 1000 + 1).fill('').map((x, i) => i * 1000);\n if (delta <= 1000 && delta >= 500)\n return new Array(max / 500 + 1).fill('').map((x, i) => i * 500);\n return initialAllValues;\n};\n\nconst RangeFacet = ({ facet, unit, formatValues }: RangeFacetProps) => {\n const { loading, queryFilter, initialFacets, onFilterUpdate } = useSearch();\n const initialFacet = initialFacets?.find((x) => x.id === facet.id);\n const maxPrefix =\n initialFacet?.filters[initialFacet?.filters.length - 1]?.displayName?.includes('+');\n const [state, setValues] = useState<\n { id: string | undefined; steps: number[]; domain: number[]; values: number[] } | undefined\n >(undefined);\n\n useEffect(() => {\n const _initialAllValues = initialFacet?.filters.map((f) =>\n parseInt(f.displayName.replace(/[\\<\\>+-]+/g, ''), 10)\n ) || [1, 2];\n\n const _steps = getSteps(_initialAllValues);\n const domain = [_steps[0], _steps[_steps.length - 1]];\n\n setValues({\n id: initialFacet?.id,\n steps: _steps,\n domain: [_steps[0], _steps[_steps.length - 1]],\n values: initialFacet?.filters.length\n ? getInitialValues(domain, initialFacet, queryFilter.searchParams)\n : [0, 0],\n });\n }, [initialFacet?.id]);\n\n useEffect(() => {\n if (state?.id) {\n const init = initialFacet?.filters.length\n ? getInitialValues(state.domain, initialFacet, queryFilter.searchParams)\n : [0, 0];\n const minStr = queryFilter.searchParams?.get(`${facet.id}.min`);\n const maxStr = queryFilter.searchParams?.get(`${facet.id}.max`);\n\n const min = minStr ? parseFloat(minStr) : init[0];\n const max = maxStr ? parseFloat(maxStr) : init[1];\n if (min !== state.values[0] || max !== state.values[1]) {\n onChange([min, max]);\n }\n }\n }, [queryFilter.searchParams?.toString()]);\n\n const onChange = useCallback(\n (nextValues: readonly number[]) => {\n if (state?.id) {\n if (state.values[0] !== nextValues[0] || state.values[1] !== nextValues[1]) {\n setValues({ ...state, values: nextValues.slice() });\n const query = new URLSearchParams(queryFilter.searchParams);\n query.set('hits', '30');\n query.delete(`${facet.id}.min`);\n query.delete(`${facet.id}.max`);\n\n if (nextValues[0] !== state.domain[0]) {\n query.set(`${facet.id}.min`, `${nextValues[0]}`);\n }\n\n if (nextValues[1] !== state.domain[1]) {\n query.set(`${facet.id}.max`, `${nextValues[1]}`);\n }\n\n query.sort();\n onFilterUpdate(query.toString());\n }\n }\n },\n [queryFilter.searchParams, state]\n );\n\n return (\n <>\n {state && (\n <RangeSlider\n loading={loading}\n domain={state.domain}\n values={state.values}\n maxPrefix={maxPrefix ? '+' : undefined}\n steps={state.steps}\n unit={unit}\n onChange={onChange}\n formatValues={formatValues}\n />\n )}\n </>\n );\n};\n\nexport default RangeFacet;\n", "import React, { useState, useCallback, useEffect } from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport {\n Bar,\n RangeSpan,\n RangeSpanItem,\n Slider as OwnSlider,\n Track as OwnTrack,\n Handle as OwnHandle,\n} from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\nconst getSteps = (steps: number[]) => {\n let current = Number.MAX_SAFE_INTEGER;\n steps.forEach((step, index) => {\n if (index !== 0) {\n const c = step - steps[index - 1];\n if (c < current) {\n current = c;\n }\n }\n });\n return current;\n};\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n maxPrefix?: string;\n onChange: (values: readonly number[]) => void;\n}\n\nconst RangeSlider = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n maxPrefix,\n onChange,\n}: RangeSliderProps) => {\n const [current, setCurrent] = useState<number[]>(values);\n const onUpdate = useCallback(\n (nextValues: readonly number[]) => {\n if (!isNaN(nextValues[0]) && !isNaN(nextValues[1])) {\n setCurrent(nextValues.slice());\n }\n },\n [values]\n );\n\n const step = getSteps(steps);\n\n const currentMin = formatValues ? numberSeparator(current[0]) : current[0];\n const currentMax = formatValues ? numberSeparator(current[1]) : current[1];\n const equal = domain[0] === domain[1];\n const _maxPrefix = maxPrefix && domain[1] === current[1] ? maxPrefix : undefined;\n\n useEffect(() => {\n if (values[0] !== current[0] || values[1] !== current[1]) {\n setCurrent(values);\n }\n }, [values]);\n\n return (\n <>\n {equal ? (\n <OwnSlider>\n <Bar>\n <OwnTrack style={{ left: '0', width: '100%' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '0' }} />\n <OwnHandle role=\"slider\" aria-disabled style={{ left: '100%' }} />\n </Bar>\n </OwnSlider>\n ) : (\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks left={false} right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n )}\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${_maxPrefix ? _maxPrefix : ''}${\n unit ? ` ${unit}` : ''\n }`}</RangeSpanItem>\n </RangeSpan>\n </>\n );\n};\n\nexport default RangeSlider;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const RangeSpan = styled.div`\n display: flex;\n align-items: center;\n margin-top: ${size(1)};\n user-select: none;\n`;\n\nexport const RangeSpanItem = styled.div`\n font-size: 0.875rem;\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :first-child {\n flex: 1 1 auto;\n }\n\n :last-child {\n flex-shrink: 0;\n }\n`;\n\nexport const Slider = styled.div`\n padding: 10px 12px;\n`;\n\nexport const Bar = styled.div`\n position: relative;\n height: 4px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -12px;\n right: -12px;\n background-color: ${(props) => props.theme.color.accentDark};\n }\n`;\n\nexport const Track = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 0;\n height: 4px;\n margin-left: -12px;\n margin-right: -12px;\n`;\n\nexport const Handle = styled.div.attrs(() => ({\n role: 'slider',\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n position: absolute;\n top: 50%;\n transform-origin: 50% 50%;\n display: block;\n width: 24px;\n height: 24px;\n margin-top: -12px;\n margin-left: -12px;\n border-radius: 50%;\n cursor: move;\n cursor: ew-resize;\n cursor: -webkit-grab;\n cursor: grab;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :active {\n transform: scale(1.3);\n\n :before {\n opacity: 1;\n }\n }\n`;\n", "import React from 'react';\nimport { Handle as OwnHandle } from './wrapper';\nimport { SliderItem, GetHandleProps } from 'react-compound-slider';\n\ninterface IHandleProps {\n domain: number[];\n handle: SliderItem;\n getHandleProps: GetHandleProps;\n}\n\nexport const Handle = ({\n domain: [min, max],\n handle: { id, value, percent },\n getHandleProps,\n}: IHandleProps) => (\n <OwnHandle\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n style={{\n left: `${percent}%`,\n }}\n {...getHandleProps(id)}\n />\n);\n", "import React from 'react';\nimport { Track as OwnTrack } from './wrapper';\nimport { SliderItem, GetTrackProps } from 'react-compound-slider';\n\ninterface ITrackProps {\n source: SliderItem;\n target: SliderItem;\n getTrackProps: GetTrackProps;\n}\n\nexport const Track = ({ source, target, getTrackProps }: ITrackProps) => (\n <OwnTrack\n style={{\n left: `${source.percent}%`,\n width: `${target.percent - source.percent}%`,\n }}\n {...getTrackProps()}\n />\n);\n", "import React from 'react';\n\nimport { Wrapper, List, Item } from './wrapper';\nimport ProductCard from '../ProductCard/index';\nimport { Document } from '../../@types/search';\nimport { numberSeparator } from '../../utils/formats';\n\nconst resolveImage = (document: Document) => {\n const img = document.featuredImage?.files?.[0]?.url;\n if (img) {\n return `${img}?w=567&q=72`;\n }\n return undefined;\n};\n\ninterface GridProps {\n documents?: Document[];\n hashRoute?: boolean;\n pathRoute?: string;\n placeholderImage?: string;\n onClickItem?: (id: string) => void;\n}\n\nconst Grid = ({ documents, placeholderImage, hashRoute, pathRoute, onClickItem }: GridProps) => {\n if (!documents) {\n return null;\n }\n\n return (\n <Wrapper>\n <List>\n {documents.map((document) => {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n\n const prefix = _path ? `/${_path}/` : '/';\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <Item key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onClickItem}\n title={document.title}\n pathRoute={pathRoute}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={resolveImage(document)}\n placeholderImage={placeholderImage}\n description={document.shortDescription}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(document.mileage)} mil`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} kr`}\n leasingPrice={\n document.leasingPrice !== undefined\n ? `${numberSeparator(document.leasingPrice)} kr`\n : undefined\n }\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} kr`\n : undefined\n }\n />\n </Item>\n );\n })}\n </List>\n </Wrapper>\n );\n};\n\nexport default Grid;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\nexport const List = styled.ul`\n display: flex;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-2)} ${size(-1)};\n`;\n\nexport const Item = styled.li`\n flex: 1 1 auto;\n width: 100%;\n max-width: 100%;\n padding: ${size(2)} ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: 50%;\n max-width: 50%;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import React, { useCallback, useMemo } from 'react';\nimport LazyLoad from 'react-lazy-load';\n\nimport {\n Wrapper,\n Image,\n Picture,\n Source,\n Img,\n Content,\n ContentBody,\n ContentFooter,\n Heading,\n Link,\n Description,\n Usp,\n Price,\n CurrentPrice,\n OldPrice,\n PriceCell,\n Label,\n} from './wrapper';\nimport UspList, { ItemProps } from '../UspList/index';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\nimport usePath from '../../State/Path/usePath';\n\ninterface Props {\n id: string;\n title: string;\n href?: string;\n image?: string;\n pathRoute?: string;\n placeholderImage?: string;\n description?: string;\n uspList?: ItemProps[];\n price: string;\n leasingPrice?: string;\n oldPrice?: string;\n onClick?: (id: string) => void;\n}\n\nconst ProductCard = ({\n id,\n title,\n href,\n image,\n pathRoute,\n placeholderImage,\n description,\n uspList,\n price,\n oldPrice,\n leasingPrice,\n onClick,\n}: Props) => {\n const { pushState } = usePath();\n const _onClick = useMemo(() => (onClick ? () => onClick(id) : undefined), [id]);\n\n const onHrefClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (!!pathRoute && href) {\n e.preventDefault();\n pushState(href);\n }\n },\n [id, pathRoute, href]\n );\n\n return (\n <Wrapper onClick={_onClick}>\n <Image>\n <LazyLoad>\n {image ? (\n <>\n <Picture>\n <Source\n type=\"image/webp\"\n srcSet={`${image}?spec=822x548&format=webp 822w, ${image}?spec=750x500&format=webp 750w, ${image}?spec=411x274&format=webp 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n />\n <Img\n srcSet={`${image}?spec=822x548 822w, ${image}?spec=750x500 750w, ${image}?spec=411x274 411w`}\n sizes=\"(min-width: 600px) calc(((100vw - 48px) / 2) - 8px), (min-width: 900px) calc(((100vw - 48px) / 3) - 10.666px), (min-width: 1312px) 410px, calc(100vw - 32px)\"\n src={`${image}?spec=411x274`}\n alt={title}\n />\n </Picture>\n </>\n ) : (\n <Picture>\n <Img src={placeholderImage || DEFAULT_PLACEHOLDER_IMAGE} />\n </Picture>\n )}\n </LazyLoad>\n </Image>\n <Content>\n <ContentBody>\n <Heading>\n {href ? (\n <Link onClick={onHrefClick} href={href} title={title} aria-label={title}>\n {title}\n </Link>\n ) : (\n title\n )}\n </Heading>\n {description && <Description>{description}</Description>}\n {uspList && (\n <Usp>\n <UspList small items={uspList} />\n </Usp>\n )}\n </ContentBody>\n <ContentFooter>\n <Price>\n <PriceCell>\n {oldPrice ? <OldPrice>{oldPrice}</OldPrice> : <Label>Pris</Label>}\n <CurrentPrice>{price}</CurrentPrice>\n </PriceCell>\n {leasingPrice && (\n <PriceCell>\n <Label>Leasingpris</Label>\n <CurrentPrice>{leasingPrice}</CurrentPrice>\n </PriceCell>\n )}\n </Price>\n </ContentFooter>\n </Content>\n </Wrapper>\n );\n};\n\nexport default ProductCard;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.article`\n position: relative;\n height: 100%;\n display: flex;\n flex-direction: column;\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :active {\n transform: scale(0.98);\n }\n`;\n\nexport const Image = styled.div`\n flex-shrink: 0;\n position: relative;\n height: 0;\n padding-bottom: 66.666%;\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n ${Wrapper}:hover & {\n :before {\n opacity: 1;\n }\n }\n`;\n\nexport const Picture = styled.picture``;\n\nexport const Source = styled.source``;\n\nexport const Img = styled.img`\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n top: auto;\n left: auto;\n border-radius: 3px;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n margin-top: ${size(2)};\n`;\n\nexport const ContentBody = styled.div``;\n\nexport const ContentFooter = styled.div`\n margin-top: auto;\n padding-top: ${size(1)};\n`;\n\nexport const Heading = styled.h1.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n font-weight: 400;\n margin: 0;\n font-size: 1rem;\n`;\n\nexport const Link = styled.a`\n display: block;\n color: inherit;\n text-decoration: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n :focus {\n text-decoration: underline;\n }\n`;\n\nexport const Description = styled.div`\n font-size: 0.875rem;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n margin-top: ${size(0.25)};\n`;\n\nexport const Usp = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Price = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 100%;\n`;\n\nexport const CurrentPrice = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1rem;\n margin-right: ${size(1)};\n`;\n\nexport const PriceCell = styled.div`\n flex: 1 1 auto;\n padding-right: ${size(1)};\n`;\n\nexport const OldPrice = styled.div`\n text-decoration: line-through;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 0.875rem;\n`;\n\nexport const Label = styled.label`\n color: ${(props) => props.theme.color.disabledText};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { List, Item, Box, ItemSection, Action } from './wrapper';\nimport { IconInfo } from '../Icon/index';\n\nexport interface ItemProps {\n title: string | number | null;\n onClick?: () => void;\n}\n\nexport interface Props {\n items?: ItemProps[];\n small?: boolean;\n}\n\nconst UspItem = ({ title, onClick }: ItemProps) => {\n return (\n <Item>\n <Box>\n <ItemSection>{title}</ItemSection>\n {onClick && (\n <ItemSection>\n <Action onClick={onClick}>\n <IconInfo block />\n </Action>\n </ItemSection>\n )}\n </Box>\n </Item>\n );\n};\n\nconst UspList = ({ items, small }: Props) => {\n if (!items) {\n return null;\n }\n\n return (\n <List isSmall={small}>\n {items.map((item, index) => (\n <UspItem key={`${item.title}-${index}`} title={item.title} onClick={item.onClick} />\n ))}\n </List>\n );\n};\n\nexport default UspList;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Item = styled.li`\n padding: ${size(0.5)};\n`;\n\nexport const Box = styled.div`\n display: flex;\n align-items: center;\n background-color: ${(props) => props.theme.color.accentDark};\n padding: ${size(1)} ${size(1.5)};\n border-radius: 3px;\n font-size: 0.875rem;\n overflow-wrap: break-word;\n hyphens: auto;\n`;\n\nexport const ItemSection = styled.div`\n & + & {\n margin-left: ${size(1)};\n }\n`;\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const List = styled.ul`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n list-style: none;\n padding: 0;\n margin: ${size(-0.5)};\n\n ${({ isSmall }: { isSmall?: boolean }) =>\n isSmall &&\n css`\n margin: ${size(-0.25)};\n\n ${Item} {\n padding: ${size(0.25)};\n }\n\n ${Box} {\n padding: ${size(0.5)} ${size(1)};\n font-size: 0.75rem;\n }\n\n ${ItemSection} {\n & + & {\n margin-left: ${size(0.5)};\n }\n }\n `}\n`;\n", "import { useContext } from 'react';\nimport { PathContext, PathContextProps } from './PathContext';\n\nconst usePath = (): PathContextProps => {\n const context = useContext(PathContext);\n\n if (!context) {\n throw new Error('usePath must be used within a PathProvider');\n }\n\n return context;\n};\nexport default usePath;\n", "import { createContext } from 'react';\n\nexport interface PathContextProps {\n path: string;\n previousPath?: string;\n id?: string;\n pushState: (id: string) => void;\n replaceState: (id: string) => void;\n}\n\nexport const PathContext = createContext<PathContextProps | undefined>(undefined);\n", "import React from 'react';\n\nimport { Wrapper, Query, Clear } from './wrapper';\nimport { IconCancel } from '../Icon/index';\n\ninterface Props {\n children: string;\n onClear?: () => void;\n clearTitle?: string;\n}\n\nconst SearchTerm = ({ children, onClear, clearTitle }: Props) => (\n <Wrapper>\n <Query>{children}</Query>\n {onClear && (\n <Clear onClick={onClear} title={clearTitle ? clearTitle : 'Rensa fritext'}>\n <IconCancel block />\n </Clear>\n )}\n </Wrapper>\n);\n\nexport default SearchTerm;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Query = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 2.25rem;\n min-width: 0;\n overflow-wrap: break-word;\n hyphens: auto;\n\n :before,\n :after {\n content: '\"';\n }\n`;\n\nexport const Clear = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(2)};\n height: ${size(2)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.accentDark};\n margin-left: ${size(1)};\n font-size: ${size(1)};\n transform-origin: 50% 50%;\n transition: transform 150ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-1)};\n bottom: ${size(-1)};\n left: ${size(-1)};\n right: ${size(-1)};\n border-radius: 50%;\n }\n\n :after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :after {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n", "import React, { useCallback, useState } from 'react';\nimport useSearch from '../../State/Search/useSearch';\nimport SearchBar from '../SearchBar/index';\n\nconst SearchFilter = () => {\n const [value, setValue] = useState('');\n const { queryFilter, onFilterUpdate } = useSearch();\n\n const onSearch = useCallback(\n (value: string) => {\n const nextQuery = new URLSearchParams(queryFilter.searchParams);\n if (value === nextQuery.get('query')) {\n return;\n }\n\n if (value) {\n nextQuery.set('query', value);\n } else {\n nextQuery.delete('qquery');\n }\n\n onFilterUpdate(nextQuery.toString());\n setValue('');\n },\n [queryFilter]\n );\n\n return <SearchBar value={value} setValue={setValue} onSearch={onSearch} />;\n};\n\nexport default SearchFilter;\n", "import React, { useCallback, useRef } from 'react';\nimport InputSearch from '../InputSearch/index';\nimport useOutsideClick from '../../hooks/useOutsideClick';\n\ninterface SearchBarProps {\n value: string;\n setValue: (value: string) => void;\n onSearch: (value: string) => void;\n}\n\nconst SearchBar = ({ value, setValue, onSearch }: SearchBarProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setValue(e.currentTarget.value),\n []\n );\n\n useOutsideClick(ref, () => setValue(''));\n\n const _onSearch = useCallback(() => {\n onSearch(value);\n }, [value]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13) {\n _onSearch();\n }\n },\n [value, _onSearch]\n );\n\n return (\n <InputSearch\n ref={ref}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onSearch={_onSearch}\n placeholder=\"S\u00F6k\"\n label=\"S\u00F6k\"\n id=\"main-search\"\n />\n );\n};\n\nexport default SearchBar;\n", "import React from 'react';\n\nimport { Wrapper, Search, Action, ActionBtn, Input, Label } from './wrapper';\nimport { IconSearch } from '../Icon/index';\n\ntype InputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n>;\n\ntype Props = InputProps & {\n placeholder: string;\n label: string;\n value?: string;\n id: string;\n onSearch: () => void;\n};\n\nconst InputSearch = React.forwardRef(\n (\n { placeholder, label, value, id, onSearch, onChange, onKeyDown }: Props,\n ref:\n | ((instance: HTMLDivElement | null) => void)\n | React.RefObject<HTMLDivElement>\n | null\n | undefined\n ) => (\n <Wrapper ref={ref}>\n <Label htmlFor={id}>{label}</Label>\n <Search>\n <Input\n placeholder={placeholder}\n name=\"search\"\n value={value}\n id={id}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Search>\n <Action>\n <ActionBtn onClick={onSearch} title={`Genomf\u00F6r ${label}`} aria-label={`Genomf\u00F6r ${label}`}>\n <IconSearch block />\n </ActionBtn>\n </Action>\n </Wrapper>\n )\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'search',\n}))`\n display: flex;\n align-items: stretch;\n border-radius: 3px;\n`;\n\nexport const Label = styled.label`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\nexport const Search = styled.div`\n flex: 1 1 auto;\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accentDark};\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n`;\n\nexport const ActionBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-bg',\n}))`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) => props.theme.distances.inputHeight};\n height: ${(props) => props.theme.distances.inputHeight};\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n font-size: 1rem;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'search',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import { useEffect } from 'react';\n\nconst useOutsideClick = (ref: React.RefObject<HTMLElement>, callback: () => void) => {\n const handleClick = (e: MouseEvent) => {\n if (ref.current && e.target && !ref.current.contains(e.target as Node)) {\n callback();\n }\n };\n\n useEffect(() => {\n document.addEventListener('click', handleClick);\n\n return () => {\n document.removeEventListener('click', handleClick);\n };\n });\n};\n\nexport default useOutsideClick;\n", "import React from 'react';\n\nimport { Wrapper, Icon, Content, Heading, Message } from './wrapper';\n\nimport { IconCheck, IconInfo, IconExclamationCircle, IconExclamationTriangle } from '../Icon/index';\n\ninterface Props {\n severity?: string;\n icon?: boolean;\n heading?: string;\n children?: React.ReactNode;\n}\n\nconst Snackbar = ({ severity, icon, heading, children }: Props) => {\n let iconSelector = <IconInfo block />;\n if (severity === 'error') {\n iconSelector = <IconExclamationCircle block />;\n } else if (severity === 'warning') {\n iconSelector = <IconExclamationTriangle block />;\n } else if (severity === 'success') {\n iconSelector = <IconCheck block />;\n }\n\n return (\n <Wrapper severity={severity}>\n {icon && <Icon>{iconSelector}</Icon>}\n <Content>\n {heading && <Heading>{heading}</Heading>}\n <Message>{children}</Message>\n </Content>\n </Wrapper>\n );\n};\n\nexport default Snackbar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getSnackbarBg = (severity: string | undefined): string => {\n let bg = theme.color.accent;\n\n if (severity === 'error') {\n bg = theme.color.ui.negativeLight;\n } else if (severity === 'warning') {\n bg = theme.color.ui.neutralLight;\n } else if (severity === 'info') {\n bg = theme.color.ui.infoLight;\n } else if (severity === 'success') {\n bg = theme.color.ui.positiveLight;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'alert',\n}))<Wrapper>`\n display: flex;\n align-items: center;\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props): string => getSnackbarBg(props.severity)};\n color: ${(props): string => props.theme.color.textDark};\n border-radius: 3px;\n`;\n\nexport const Icon = styled.div`\n flex-shrink: 0;\n padding-right: ${size(2)};\n font-size: ${size(3)};\n\n > svg {\n display: block;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n font-size: 1rem;\n`;\n\nexport const Heading = styled.div`\n font-weight: 700;\n`;\n\nexport const Message = styled.div`\n > * {\n &:first-child {\n margin-top: 0;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n`;\n", "import {\n ActionAll,\n ActionNames,\n ActionOnFilterUpdate,\n ActionTypes,\n CallbackOnFilterUpdate,\n} from './Actions';\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './Events';\n\nexport type EventSubscriptions = {\n HashRouteChange: EventHashRouteChange[];\n ItemClicked: EventItemClicked[];\n EcomOnUserEvent: EventEcomOnUser[];\n ImagesClick: EventImagesClick[];\n OptionsClick: EventOptionsClick[];\n PhonenumberVisible: EventPhonenumberVisible[];\n PhonenumberCall: EventPhonenumberCall[];\n MailVisible: EventMailVisible[];\n InsuranceInterest: EventInsuranceInterest[];\n FinanceInterest: EventFinanceInterest[];\n All: EventAll[];\n};\n\nexport type ActionSubscriptions = {\n onFilterUpdate: ActionOnFilterUpdate[];\n All: ActionAll[];\n};\n\nclass PubSub {\n private static events: EventSubscriptions = {\n HashRouteChange: [],\n ItemClicked: [],\n EcomOnUserEvent: [],\n ImagesClick: [],\n OptionsClick: [],\n PhonenumberVisible: [],\n PhonenumberCall: [],\n MailVisible: [],\n InsuranceInterest: [],\n FinanceInterest: [],\n All: [],\n };\n\n private static actions: ActionSubscriptions = {\n onFilterUpdate: [],\n All: [],\n };\n\n public static subscribeAction = (event: ActionTypes) =>\n PubSub.actions[event.actionName].push(event as any);\n\n public static unsubscribeAction = (event: ActionTypes) => {\n if (PubSub.actions[event.actionName]) {\n for (let i = 0; i < PubSub.actions[event.actionName].length; i++) {\n if (PubSub.actions[event.actionName][i] === event) {\n PubSub.actions[event.actionName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publishAction = (eventName: ActionNames, ...args: any) => {\n if (PubSub.actions.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.actions[eventName]) {\n PubSub.actions[eventName].forEach((event: ActionTypes) => {\n switch (eventName) {\n case 'onFilterUpdate':\n (event.callback as CallbackOnFilterUpdate)(args[0]);\n break;\n default:\n break;\n }\n });\n }\n };\n\n public static subscribe = (event: EventType) => PubSub.events[event.eventName].push(event as any);\n\n public static unsubscribe = (event: EventType) => {\n if (PubSub.events[event.eventName]) {\n for (let i = 0; i < PubSub.events[event.eventName].length; i++) {\n if (PubSub.events[event.eventName][i] === event) {\n PubSub.events[event.eventName].splice(i, 1);\n break;\n }\n }\n }\n };\n\n public static publish = (eventName: EventNames, ...args: any) => {\n if (PubSub.events.All) {\n PubSub.events.All.forEach((event) => event.callback(eventName, args));\n }\n if (PubSub.events[eventName]) {\n PubSub.events[eventName].forEach((event: EventType) => {\n switch (eventName) {\n case 'HashRouteChange':\n (event.callback as CallbackHashRouteChange)(args[0]);\n break;\n case 'ItemClicked':\n (event.callback as CallbackEventItemClicked)(args[0]);\n break;\n case 'EcomOnUserEvent':\n (event.callback as CallbackEcomOnUserEvent)(args[0], args[1]);\n break;\n case 'ImagesClick':\n case 'OptionsClick':\n case 'PhonenumberVisible':\n case 'PhonenumberCall':\n case 'MailVisible':\n case 'InsuranceInterest':\n case 'FinanceInterest':\n (event.callback as CallbackEmpty)();\n break;\n default:\n break;\n }\n });\n }\n };\n}\nexport default PubSub;\n", "import React, { useMemo, useRef, useCallback, useEffect } from 'react';\nimport WaykeEcomWeb from '@wayke-se/ecom-web';\n// import '@wayke-se/ecom-web/dist/index.css';\n\nimport Container from '../../components/Container/index';\nimport UspList from '../../components/UspList/index';\nimport { Repeat, RepeatSmall } from '../../components/Repeat/index';\nimport PriceTable from '../../components/PriceTable/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport Content from '../../components/Content/index';\nimport Blockquote from '../../components/Blockquote/index';\nimport ExtendContent from '../../components/ExtendContent/index';\nimport Gallery from '../../components/Gallery/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport {\n ProductPage,\n ProductPageMainSection,\n ProductPageAside,\n ProductPageMain,\n ProductPageAsideSection,\n} from '../../components/ProductPage/index';\nimport { H1, H2 } from '../../components/Heading/index';\nimport { ButtonPrimary, ButtonContent, ButtonInlineLight } from '../../components/Button/index';\nimport { UtilityFontSizeSmall } from '../../components/Utility/index';\nimport { IconChevronLeft } from '../../components/Icon/index';\nimport useSearchItem from '../../hooks/useSearchItem';\nimport { notEmpty, numberSeparator, dateTimeFormat } from '../../utils/formats';\nimport { PortalNamespace, PortalElement } from '../../components/Portal/index';\nimport Modal from '../../components/Modal/index';\nimport FinancialOptions from '../../components/FinancialOptions/index';\nimport InsuranceOptions from '../../components/InsuranceOptions/index';\n// import Ecom from '../../components/Ecom/index';\nimport ManufacturerPackageOption from './ManufacturerPackagesOption';\nimport CheckList from './CheckList';\nimport Related from './Related';\nimport PackageOptions from './PackageOptions';\nimport Branch from './Branch';\nimport useCentralStorage from '../../State/CentralStorage/useCentralStorage';\nimport Page404 from './Page404';\nimport PageLoading from './PageLoading';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport Property from './Property';\nimport PdfDownloadContainer from '../../components/Pdf/index';\nimport useSettings from '../../State/Settings/useSettings';\n\nexport interface WaykeSearchItemProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n disableResetScrollOnInit?: boolean;\n placeholderImage?: string;\n modifyDocumentTitleItem?: boolean;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst WaykeSearchItem = ({\n id,\n hashRoute,\n pathRoute,\n disableResetScrollOnInit,\n placeholderImage,\n modifyDocumentTitleItem,\n onClickSearchItem,\n}: WaykeSearchItemProps) => {\n const { ecomSettings } = useSettings();\n const ecomContext = useRef<WaykeEcomWeb | undefined>();\n\n const { loading, data: result } = useSearchItem(id);\n const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } =\n useCentralStorage(result?.vehicle);\n\n useEffect(() => {\n if (ecomSettings) {\n ecomContext.current = new WaykeEcomWeb({\n id,\n ecomSdkConfig: {\n api: {\n address: ecomSettings.url,\n },\n bankIdThumbprint: ecomSettings?.bankIdThumbprint,\n },\n logo: ecomSettings.serviceLogotypeUrl,\n onEvent(view, event, currentStep?, data?) {\n PubSub.publish('EcomOnUserEvent', view, event, currentStep, data);\n },\n });\n }\n return () => {\n if (ecomContext.current) {\n ecomContext.current.destroy();\n }\n };\n }, []);\n\n useEffect(() => {\n if (!disableResetScrollOnInit) {\n window.scrollTo(0, 0);\n }\n }, []);\n\n useEffect(() => {\n if (result?.vehicle?.data && modifyDocumentTitleItem) {\n const { vehicle } = result;\n const { registrationNumber } = vehicle.data;\n document.title = `${registrationNumber} | ${vehicle.title} | ${vehicle.shortDescription}`;\n }\n }, [result]);\n\n const options = useMemo(\n () => result?.vehicle?.data?.options?.filter(notEmpty).map((opt) => ({ title: opt })),\n [result?.vehicle?.data?.options]\n );\n\n const onShowMoreOptionsClick = useCallback(() => PubSub.publish('OptionsClick'), []);\n\n if (loading) {\n return <PageLoading />;\n }\n\n if (!result?.vehicle?.data) {\n return <Page404 />;\n }\n\n const { vehicle } = result;\n const contact = centralStorageVehicle?.contact;\n const branch = centralStorageVehicle?.branch;\n const {\n title,\n shortDescription,\n media,\n description,\n price,\n financialOptions,\n manufacturer,\n ecommerce,\n packageOptions,\n publishedAt,\n documents,\n } = vehicle;\n const insuranceOptions = centralStorageVehicle?.insuranceOptions\n ? centralStorageVehicle.insuranceOptions\n : vehicle.insuranceOptions;\n const { fuelType, mileage, gearbox, modelYear, propertySet } = vehicle.data;\n\n const uspList = [\n {\n title: modelYear,\n },\n {\n title: `${numberSeparator(mileage)} mil`,\n },\n ];\n if (gearbox) {\n uspList.push({ title: gearbox });\n }\n\n if (fuelType) {\n uspList.push({ title: fuelType });\n }\n\n return (\n <>\n <Page>\n <PageSection large>\n <Container>\n <ProductPage>\n <ProductPageAside>\n <ProductPageAsideSection mobileOrder={1}>\n {!pathRoute && hashRoute ? (\n <Repeat>\n <UtilityFontSizeSmall>\n <ButtonInlineLight as=\"a\" href=\"#\" title=\"Tillbaka till bils\u00F6k\">\n <ButtonContent>\n <IconChevronLeft block />\n </ButtonContent>\n <ButtonContent>Tillbaka till bils\u00F6k</ButtonContent>\n </ButtonInlineLight>\n </UtilityFontSizeSmall>\n </Repeat>\n ) : null}\n {manufacturer?.logotype && (\n <Repeat>\n <LogoBox logo={manufacturer.logotype} alt={manufacturer.name} />\n </Repeat>\n )}\n <Repeat>\n <RepeatSmall>\n <H1 noMargin>{title}</H1>\n </RepeatSmall>\n {shortDescription && (\n <RepeatSmall>\n <div>{shortDescription}</div>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <UspList small items={uspList} />\n </RepeatSmall>\n </Repeat>\n </ProductPageAsideSection>\n\n <ProductPageAsideSection mobileOrder={2}>\n <PriceTable price={price} />\n </ProductPageAsideSection>\n\n {(financialOptions.length > 0 || insuranceOptions.length > 0) && (\n <ProductPageAsideSection mobileOrder={4}>\n {financialOptions.length > 0 && (\n <FinancialOptions id={id} financialOptions={financialOptions} />\n )}\n {insuranceOptions.length > 0 && (\n <InsuranceOptions\n id={id}\n branch={centralStorageVehicle?.branch}\n insuranceOptions={insuranceOptions}\n />\n )}\n </ProductPageAsideSection>\n )}\n\n <ProductPageAsideSection mobileOrder={5}>\n <CheckList\n manufacturer={manufacturer}\n packageOptions={packageOptions}\n ecommerce={ecommerce}\n branch={branch}\n contact={centralStorageVehicle?.contact}\n loadingCentralStorageVehicle={loadingCentralStorageVehicle}\n toggleEcomModal={() => ecomContext.current?.start()}\n />\n </ProductPageAsideSection>\n </ProductPageAside>\n <ProductPageMain>\n <ProductPageAsideSection mobileOrder={3}>\n <Gallery media={media} placeholderImage={placeholderImage} />\n </ProductPageAsideSection>\n\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Biluppgifter</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Information direkt fr\u00E5n Transportstyrelsen och tillverkaren.</p>\n </Content>\n </Repeat>\n <Repeat>\n <Property propertySet={propertySet} vehicleData={vehicle.data} />\n </Repeat>\n </ProductPageMainSection>\n\n {description && (\n <ProductPageMainSection>\n <Blockquote\n author={contact && contact.name ? contact.name : null}\n date={\n publishedAt\n ? dateTimeFormat.format(publishedAt, dateTimeFormat.DayMonth)\n : undefined\n }\n avatar={contact?.avatar || undefined}\n >\n {!!description && <p>{description}</p>}\n </Blockquote>\n </ProductPageMainSection>\n )}\n\n {(options?.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Utrustning</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Kompletterande uppgifter om bilen.</p>\n </Content>\n </Repeat>\n <Repeat>\n <ExtendContent actionTitle=\"Visa mer\" onClick={onShowMoreOptionsClick}>\n <UspList items={options} />\n </ExtendContent>\n </Repeat>\n </ProductPageMainSection>\n )}\n\n {(documents.length || 0) > 0 && (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>Dokument</H2>\n </Repeat>\n <Repeat>\n <Content>\n <p>Tillh\u00F6rande dokument f\u00F6r bilen.</p>\n </Content>\n </Repeat>\n <Repeat>\n <PdfDownloadContainer documents={documents} />\n </Repeat>\n </ProductPageMainSection>\n )}\n\n <ProductPageMainSection>\n <Branch branch={branch} loading={loadingCentralStorageVehicle} />\n {ecommerce && ecommerce.enabled && (\n <Repeat>\n <ButtonPrimary\n disabled={!!ecommerce.reserved}\n title=\"K\u00F6p bilen online\"\n onClick={() => ecomContext.current?.start()}\n >\n K\u00F6p bilen online\n </ButtonPrimary>\n </Repeat>\n )}\n </ProductPageMainSection>\n <PackageOptions packageOptions={packageOptions} />\n <ManufacturerPackageOption packageOption={manufacturer?.packageOption} />\n </ProductPageMain>\n </ProductPage>\n </Container>\n </PageSection>\n <Related\n id={id}\n hashRoute={hashRoute}\n pathRoute={pathRoute}\n onClickSearchItem={onClickSearchItem}\n />\n </Page>\n {false && (\n <Modal title=\"Modal\" onClose={() => {}}>\n <Content>\n <p>\n Priset \u00E4r ett cirkapris och baserat p\u00E5 ditt avtals antal m\u00E5nader och din ber\u00E4knade\n \u00E5rliga k\u00F6rstr\u00E4cka. Kostnad f\u00F6r f\u00F6rs\u00E4kring och serviceavtal tillkommer. Kontakta\n s\u00E4ljare f\u00F6r komplett kostnadsf\u00F6rslag.{' '}\n </p>\n </Content>\n </Modal>\n )}\n <PortalElement id={PortalNamespace.DefaultPortal} />\n </>\n );\n};\n\nexport default WaykeSearchItem;\n", "import React from 'react';\n\nimport { List, Item, Value, Label } from './wrapper';\nimport { VisualHeading } from '../Heading/index';\nimport { Price, OldPrice } from '../Price/index';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface PriceTableProps {\n price: number;\n oldPrice?: number;\n}\n\nconst PriceTable = ({ price, oldPrice }: PriceTableProps) => (\n <List>\n <Item>\n <Label>\n <VisualHeading>Pris</VisualHeading>\n </Label>\n <Value>\n <Price>{numberSeparator(price)} kr</Price>\n </Value>\n </Item>\n {oldPrice !== undefined && (\n <Item>\n <Label />\n <Value>\n <OldPrice>{numberSeparator(oldPrice)} kr</OldPrice>\n </Value>\n </Item>\n )}\n </List>\n);\n\nexport default PriceTable;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-end;\n line-height: 1;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div`\n flex-shrink: 0;\n`;\n", "import styled from 'styled-components';\n\nexport const Price = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n font-size: 1.375rem;\n`;\n\nexport const OldPrice = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n text-decoration: line-through;\n`;\n", "import * as React from 'react';\n\nimport { Logo } from './wrapper';\n\ninterface ILogoBox {\n logo: string;\n logo2x?: string | null;\n alt?: string;\n wide?: boolean;\n}\n\nconst LogoBox = ({ logo, logo2x, alt, wide }: ILogoBox) => {\n let logoRetina = logo;\n\n if (logo2x) {\n logoRetina = `${logo2x} 2x`;\n }\n\n return <Logo src={logo} srcSet={logoRetina} alt={alt} wide={wide} />;\n};\n\nexport default LogoBox;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype LogoProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n wide?: boolean;\n};\n\nexport const Logo = styled.img<LogoProps>`\n display: block;\n max-width: ${size(9.5)};\n max-height: ${size(6)};\n\n ${({ wide }) =>\n wide &&\n css`\n max-width: ${size(20)};\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n small?: boolean;\n};\n\nconst Content = ({ children, small, dangerouslySetInnerHTML }: Props) => (\n <Wrapper small={small} dangerouslySetInnerHTML={dangerouslySetInnerHTML}>\n {children}\n </Wrapper>\n);\n\nexport default Content;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n small?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n font-size: 1rem;\n line-height: 1.5;\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: ${size(4)};\n margin-bottom: ${size(1)};\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n\n & + p,\n & + table {\n margin-top: ${size(1)};\n }\n }\n\n p {\n margin: ${size(2)} 0;\n\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n display: block;\n width: 100%;\n }\n\n ${({ small }) =>\n small &&\n css`\n font-size: 0.875rem;\n `}\n`;\n", "import React from 'react';\n\nimport { Wrapper, Quote, Author, AvatarWrapper, Info, Name, Date } from './wrapper';\nimport Avatar from '../Avatar/index';\n\ninterface Props {\n children: React.ReactNode;\n author?: string | null;\n avatar?: string;\n date?: string;\n}\n\nconst Blockquote = ({ children, author, avatar, date }: Props) => (\n <Wrapper>\n <Quote>{children}</Quote>\n {author && (\n <Author>\n {avatar && (\n <AvatarWrapper>\n <Avatar image={avatar} alt={`${author} avatar`} />\n </AvatarWrapper>\n )}\n <Info>\n <Name>{author}</Name>\n {date && <Date>{date}</Date>}\n </Info>\n </Author>\n )}\n </Wrapper>\n);\n\nexport default Blockquote;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.blockquote`\n display: flex;\n flex-direction: column;\n max-width: 600px;\n margin: 0 auto;\n\n ${(props) => props.theme.breakpoint.Sm} {\n align-items: center;\n }\n`;\n\nexport const Quote = styled.div`\n > * {\n :first-child {\n margin-top: 0;\n }\n\n :last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nexport const Author = styled.footer`\n display: inline-flex;\n align-items: center;\n margin-top: ${size(3)};\n\n ${(props) => props.theme.breakpoint.Md} {\n margin-top: ${size(4)};\n }\n`;\n\nexport const AvatarWrapper = styled.div`\n flex-shrink: 0;\n padding-right: ${size(1.5)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n font-size: 0.875rem;\n`;\n\nexport const Name = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))``;\n\nexport const Date = styled.div``;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n image: string;\n alt?: string;\n}\n\nconst Avatar = ({ image, alt }: Props) => <Wrapper image={image} aria-label={alt} />;\n\nexport default Avatar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\ninterface Wrapper {\n image: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'image',\n}))<Wrapper>`\n display: block;\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-image: ${(props): string => `url(${props.image})`};\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n background-color: ${(props) => props.theme.color.accent};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Extend, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n actionTitle: string;\n onClick?: () => void;\n}\n\nconst ExtendContent = ({ children, actionTitle, onClick }: Props) => {\n const [extend, setExtend] = useState(false);\n const onExtend = useCallback(() => {\n setExtend(true);\n if (onClick) {\n onClick();\n }\n }, []);\n\n const onRef = (ref: HTMLDivElement | null) => {\n const refHeight = ref?.clientHeight || 0;\n\n if (refHeight < 207) {\n setExtend(true);\n }\n };\n\n return (\n <Wrapper ref={onRef}>\n <Extend extended={extend}>{children}</Extend>\n {!extend && (\n <Action>\n <ButtonClear onClick={onExtend} title={actionTitle}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n );\n};\n\nexport default ExtendContent;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div``;\n\ntype ExtendProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n extended?: boolean;\n};\n\nexport const Extend = styled.div<ExtendProps>`\n position: relative;\n max-height: 175px;\n overflow: hidden;\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(6)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n }\n\n ${({ extended }) =>\n extended &&\n css`\n max-height: none;\n\n :after {\n content: none;\n }\n `}\n`;\n\nexport const Action = styled.div`\n display: flex;\n justify-content: flex-end;\n margin-top: ${size(2)};\n`;\n", "import React, { useState, useCallback, useRef, useMemo } from 'react';\nimport Slider from 'react-slick';\nimport scrollIntoView from 'scroll-into-view-if-needed';\n\nimport {\n Wrapper,\n SliderWrapper,\n Item,\n Image,\n ArrowLeft,\n ArrowRight,\n Main,\n Alt,\n QuickNav,\n QuickNavItem,\n QuickNavBtn,\n QuickNavImg,\n EnableNavigationButton,\n} from './wrapper';\nimport { IconChevronLeft, IconChevronRight } from '../Icon/index';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport Lightbox from '../Lightbox/index';\nimport EmbededVideo from '../Video/EmbededVideo';\nimport QuickNavEmbeded from '../Video/QuickNavEmbeded';\nimport { notEmpty } from '../../utils/formats';\nimport ThreeSixty from '../ThreeSixty/ThreeSixty';\n\nimport { Media } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { DEFAULT_PLACEHOLDER_IMAGE } from '../../utils/constants';\n\ninterface GalleryProps {\n media?: Media[];\n placeholderImage?: string;\n}\n\nconst sliderSettings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 300,\n slidesToShow: 1,\n slidesToScroll: 1,\n};\n\nconst Gallery = ({ media, placeholderImage }: GalleryProps) => {\n const slider = useRef<Slider>(null);\n const quickNavRef = useRef<HTMLUListElement>(null);\n const isDragging = useRef(false);\n const [index, setIndex] = useState(0);\n const [lightbox, setLightbox] = useState(false);\n const [navigationDisabled, setNavigationDisabled] = useState(false);\n\n const beforeChange = useCallback((_: number, newIndex: number) => {\n const element = quickNavRef.current?.querySelectorAll('li')?.[newIndex];\n if (element) {\n scrollIntoView(element, { scrollMode: 'if-needed', block: 'nearest', inline: 'nearest' });\n }\n setIndex(newIndex);\n }, []);\n\n const onMouseDown = useCallback(() => {\n if (isDragging.current) {\n isDragging.current = false;\n }\n }, []);\n const onMouseMove = useCallback(() => {\n if (!isDragging.current) {\n isDragging.current = true;\n }\n }, []);\n\n const onClick = useCallback(() => {\n PubSub.publish('ImagesClick');\n if (!isDragging.current && !lightbox && !!media?.length) {\n setLightbox(true);\n }\n }, [lightbox, media]);\n\n const nextImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickNext();\n }, [slider]);\n\n const prevImage = useCallback((): void => {\n if (!slider || !slider.current) {\n return;\n }\n slider.current.slickPrev();\n }, [slider]);\n\n const goTo = (target: number) => {\n if (!slider || !slider.current) {\n return;\n }\n if (slider.current) {\n setIndex(target);\n slider.current.slickGoTo(target);\n }\n };\n\n const onDisableNavigation = () => {\n if (!isDragging.current) setNavigationDisabled(true);\n };\n const onEnableNavigation = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n isDragging.current = false;\n setNavigationDisabled(false);\n };\n\n const onToggleLightbox = useCallback(() => setLightbox(!lightbox), [lightbox]);\n\n const mediaLength = media?.length || 0;\n const placeholder = useMemo(\n () => placeholderImage || DEFAULT_PLACEHOLDER_IMAGE,\n [placeholderImage]\n );\n\n return (\n <>\n <Wrapper>\n <Main>\n <SliderWrapper onMouseDown={onMouseDown} onMouseMove={onMouseMove} onClick={onClick}>\n <Slider\n {...sliderSettings}\n swipe={!navigationDisabled}\n touchMove={!navigationDisabled}\n swipeToSlide={!navigationDisabled}\n ref={slider}\n beforeChange={beforeChange}\n >\n {!!media?.length ? (\n media\n .filter((x) => x.type !== 'sphere')\n .map((m, i) => (\n <Item key={m.files[0].url || i}>\n {m.type === 'image' && (\n <Image\n src={\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '1170x')\n ?.url\n }\n alt={`Bild ${i + 1}`}\n />\n )}\n {m.type === 'threesixty' && (\n <ThreeSixty\n urls={m.files.map((x) => x.url)}\n visible={i === index}\n onDisableNavigation={onDisableNavigation}\n navigationDisabled={navigationDisabled}\n />\n )}\n {m.type === 'embedded' && <EmbededVideo src={m.files[0].url} index={i + 1} />}\n </Item>\n ))\n ) : (\n <Item key={placeholder}>\n <Image src={placeholder} alt={`Bild 1`} />\n </Item>\n )}\n </Slider>\n {navigationDisabled && mediaLength > 1 && (\n <EnableNavigationButton>\n <ButtonSecondary onClick={onEnableNavigation} title=\"St\u00E4ng\">\n <ButtonContent>St\u00E4ng</ButtonContent>\n </ButtonSecondary>\n </EnableNavigationButton>\n )}\n </SliderWrapper>\n {!navigationDisabled && mediaLength > 1 && (\n <>\n <ArrowLeft onClick={prevImage} title=\"F\u00F6reg\u00E5ende bild\">\n <IconChevronLeft block />\n </ArrowLeft>\n <ArrowRight onClick={nextImage} title=\"N\u00E4sta bild\">\n <IconChevronRight block />\n </ArrowRight>\n </>\n )}\n </Main>\n <Alt>\n <QuickNav ref={quickNavRef}>\n {!!media?.length ? (\n media.map((m, i) => {\n const src =\n m.files[0].formats.filter(notEmpty).find((x) => x.format === '225x150')?.url ||\n m.files[0].url;\n return (\n <QuickNavItem key={src || i} active={index === i}>\n <QuickNavBtn onClick={() => goTo(i)} title={`G\u00E5 till bild ${i + 1}`}>\n {m.type === 'image' && <QuickNavImg src={src} alt={`Bild ${i + 1}`} />}\n {m.type === 'threesixty' && <QuickNavImg src={src} alt={`Bild ${i + 1}`} />}\n {m.type === 'embedded' && <QuickNavEmbeded src={src} index={i} />}\n {m.type === 'sphere' && (\n <QuickNavImg src={m.files[0].url} alt={`Bild ${i + 1}`} />\n )}\n </QuickNavBtn>\n </QuickNavItem>\n );\n })\n ) : (\n <QuickNavItem key={placeholder} active>\n <QuickNavBtn onClick={() => goTo(0)} title={`G\u00E5 till bild 0`}>\n <QuickNavImg src={placeholder} alt={`Bild 1`} />\n </QuickNavBtn>\n </QuickNavItem>\n )}\n </QuickNav>\n </Alt>\n </Wrapper>\n {lightbox && !!media?.length && (\n <Lightbox media={media} index={index} onClose={onToggleLightbox} />\n )}\n </>\n );\n};\n\nexport default Gallery;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nconst quickNavWidth = 83; // 75px + 8px\n\nexport const Wrapper = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n margin-left: ${size(-3)};\n margin-right: ${size(-3)};\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n position: relative;\n padding-right: ${quickNavWidth}px;\n }\n`;\n\nexport const Main = styled.div`\n position: relative;\n height: 0;\n padding-bottom: 66.66666667%;\n\n ${(props) => props.theme.breakpoint.Md} {\n //background-color: ${(props) => props.theme.color.accent};\n }\n\n .slick-slider,\n .slick-list,\n .slick-track,\n .slick-slide,\n .slick-slide > * {\n height: 100%;\n }\n\n .slick-slide > * {\n font-size: 0;\n\n > * {\n font-size: 1rem;\n }\n }\n`;\n\nexport const Alt = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: ${quickNavWidth}px;\n padding-left: ${size(1)};\n\n ${(props) => props.theme.breakpoint.LtMd} {\n display: none;\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: ${size(2.5)};\n background-image: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));\n pointer-events: none;\n }\n`;\n\nexport const Item = styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n :focus {\n outline: none;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n //background-color: ${(props) => props.theme.color.textDark};\n transition: border-radius 150ms ease;\n }\n`;\n\nexport const SliderWrapper = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n .slick-slider {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n user-select: none;\n touch-action: pan-y;\n -webkit-tap-highlight-color: transparent;\n\n .slick-list,\n .slick-track {\n transform: translate3d(0, 0, 0);\n }\n }\n\n .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n &:focus {\n outline: none;\n }\n\n &.dragging {\n cursor: pointer;\n cursor: hand;\n }\n }\n\n .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n &::before,\n &::after {\n content: '';\n display: table;\n }\n\n &::after {\n clear: both;\n }\n }\n\n .slick-slide {\n display: none;\n float: left;\n min-height: 1px;\n }\n\n .slick-loading {\n .slick-track {\n visibility: hidden;\n }\n\n img {\n display: none;\n }\n }\n\n .slick-initialized {\n .slick-slide {\n display: block;\n }\n }\n\n .slick-slide.dragging img {\n pointer-events: none;\n }\n\n ${(props) => props.theme.breakpoint.LtMd} {\n overflow: hidden;\n\n .slick-list {\n overflow: visible;\n width: 95%;\n }\n\n .slick-slide {\n border-right: ${size(1)} solid ${(props) => props.theme.color.bg};\n //transform: scale(0.95);\n transform-origin: 0 50%;\n transition: transform 150ms ease;\n }\n\n .slick-slide.slick-active {\n transform: none;\n\n ${Item} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n }\n`;\n\nexport const Image = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n cursor: pointer;\n`;\n\nexport const ImageFull = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Arrow Nav\n\nconst Arrow = styled(ButtonReset)`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${size(4)};\n height: ${size(4)};\n border-radius: 50%;\n font-size: 1rem;\n line-height: 1;\n background-color: rgba(255, 255, 255, 0.4);\n backdrop-filter: blur(5px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n color: ${(props) => props.theme.color.textDark};\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 50%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: translateY(-50%) scale(0.95);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n display: none;\n }\n`;\n\nexport const ArrowLeft = styled(Arrow)`\n left: ${size(2)};\n`;\n\nexport const ArrowRight = styled(Arrow)`\n right: ${size(2)};\n`;\n\n// Quick Nav\n\nexport const QuickNav = styled.ul`\n position: relative;\n max-height: 100%;\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\ntype QuickNavItemProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLLIElement>,\n HTMLLIElement\n> & {\n active?: boolean;\n};\n\nexport const QuickNavItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))<QuickNavItemProps>`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n\n ${({ active }) =>\n active &&\n css`\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 3px solid currentColor;\n z-index: 2;\n }\n `}\n`;\n\nexport const QuickNavBtn = styled(ButtonReset)`\n position: relative;\n display: block;\n width: 100%;\n height: 0;\n padding-bottom: 66.66666667%; // 3:2\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.15);\n opacity: 0;\n z-index: 1;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const QuickNavImg = styled.img`\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\n// Media Button\n\nexport const MediaButtonWrapper = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n\n// Sphere Close Button\n\nexport const EnableNavigationButton = styled.div`\n position: absolute;\n bottom: ${size(2)};\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n`;\n", "import React from 'react';\n\nimport { Wrapper, UiBlock, Item, Img, CloseBtn } from './wrapper';\nimport { IconCancel } from '../Icon/index';\nimport EmbeddedVideoLightbox from '../Video/EmbeddedVideoLightbox';\nimport ThreeSixtyLightbox from '../ThreeSixty/ThreeSixtLightbox';\nimport { Media } from '../../@types/codegen';\n\ninterface LightboxProps {\n index: number;\n media: Media[];\n onClose: () => void;\n}\n\nconst Lightbox = ({ index, media, onClose }: LightboxProps) => {\n const onRef = (ref: HTMLDivElement | null) => {\n if (ref) {\n setTimeout(() => {\n ref.scrollIntoView();\n }, 300);\n }\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.keyCode === 27) {\n onClose();\n }\n };\n\n return (\n <Wrapper ref={(ref) => ref?.focus()} onKeyDown={onKeyDown} tabIndex={0}>\n <UiBlock onClick={onClose} aria-hidden />\n {media\n .filter((x) => x.type !== 'sphere')\n .map((m, i) => (\n <Item key={i} ref={index === i ? onRef : undefined}>\n {m.type === 'image' && (\n <Img id={`lightbox-image-${i}`} src={m.files[0].url} alt={`Bild ${i + 1}`} />\n )}\n {m.type === 'threesixty' && <ThreeSixtyLightbox urls={m.files.map((x) => x.url)} />}\n {m.type === 'embedded' && <EmbeddedVideoLightbox url={m.files[0].url} />}\n </Item>\n ))}\n <CloseBtn onClick={onClose} title=\"St\u00E4ng\">\n <IconCancel block />\n </CloseBtn>\n </Wrapper>\n );\n};\n\nexport default Lightbox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n padding: ${size(3)};\n z-index: 90;\n overflow: auto;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: -1;\n`;\n\nexport const Item = styled.div`\n position: relative;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Img = styled.img`\n position: relative;\n display: block;\n max-width: 100%;\n max-height: calc(100vh - ${size(6)});\n margin: 0 auto;\n z-index: 1;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n max-height: calc(100vh - ${size(4)});\n }\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: flex;\n align-items: center;\n justify-content: center;\n position: fixed;\n top: ${size(2)};\n right: ${size(2)};\n width: ${size(5)};\n height: ${size(5)};\n border-radius: 50%;\n background-color: ${(props) => props.theme.color.bg};\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transform-origin: 50% 50%;\n transition: 200ms ease, transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n z-index: 1;\n\n :before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${(props) => props.theme.color.hoverOverlay};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.97);\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n top: ${size(1)};\n right: ${size(1)};\n }\n`;\n", "import React from 'react';\n\nimport YouTubePlayer from './YoutubePlayer';\nimport VimeoPlayer from './VimeoPlayer';\nimport CustomPlayer from '../Video/CustomPlayer';\n\nconst ytNames = ['youtube.com', 'youtu.be'];\nconst isYouTubeVideo = (url: string): boolean =>\n ytNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\nconst vNames = ['vimeo.com'];\nconst isVimeoVideo = (url: string): boolean =>\n vNames.some((host: string): boolean => url.indexOf(host) >= 0);\n\ntype PropsType = {\n url: string;\n autoplay?: boolean;\n controls?: boolean;\n};\n\nconst VideoPlayer = ({ url, autoplay = false, controls = true }: PropsType) => {\n if (!url) return null;\n\n if (isYouTubeVideo(url)) return <YouTubePlayer url={url} autoplay={autoplay} />;\n\n if (isVimeoVideo(url)) return <VimeoPlayer url={url} autoplay={autoplay} />;\n\n return <CustomPlayer ratio=\"56.25%\" controls={controls} url={url} />;\n};\n\nexport default VideoPlayer;\n", "import React from 'react';\nimport { getYouTubeId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst YouTubePlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://www.youtube.com/embed/${getYouTubeId(url)}?&enablejsapi=1&?rel=0${\n autoplay ? '&autoplay=1' : ''\n }`}\n />\n </Wrapper>\n);\n\nexport default YouTubePlayer;\n", "export const getVimeoId = (url: string): string => {\n const regExp = /\\/(\\d+)/;\n const match = url.match(regExp);\n return match && match[1].length > 3 ? match[1] : '';\n};\n\nexport const getYouTubeId = (url: string): string => {\n const regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return match && match[7].length === 11 ? match[7] : '';\n};\n\nconst youtubeBase = 'https://img.youtube.com/vi/';\nexport const getYoutubeThumbnail = (url: string) => {\n const id = getYouTubeId(url);\n if (!id) {\n return undefined;\n }\n return {\n maxresdefault: `${youtubeBase}${id}/maxresdefault.jpg`,\n hqdefault: `${youtubeBase}${id}/hqdefault.jpg`,\n mqdefault: `${youtubeBase}${id}/mqdefault.jpg`,\n };\n};\n\nexport const onImageLoad = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (\n thumbnail?.length === 2 &&\n e.currentTarget.src === thumbnail[0] &&\n e.currentTarget.naturalWidth === 120 &&\n e.currentTarget.naturalHeight === 90\n ) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n\nexport const onImageError = (\n e: React.SyntheticEvent<HTMLImageElement, Event>,\n thumbnail?: string[]\n) => {\n if (thumbnail?.length === 2) {\n e.currentTarget.src = thumbnail[1];\n }\n};\n", "import styled from 'styled-components';\n\ntype WrapperProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n ratio?: string;\n isPreview?: boolean;\n};\n\nexport const Wrapper = styled.div<WrapperProps>`\n position: relative;\n width: 100%;\n height: ${(props) => (props.isPreview ? '100%' : 0)};\n padding-bottom: ${(props): string => (props.ratio ? props.ratio : '56.25%')};\n`;\n\nexport const Iframe = styled.iframe.attrs(() => ({\n width: '100%',\n height: '100%',\n allowFullScreen: true,\n frameBorder: '0',\n}))`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;\n", "import React from 'react';\nimport { getVimeoId } from './utils';\n\nimport { Wrapper, Iframe } from './wrapper';\n\ntype PropsType = {\n url: string;\n autoplay: boolean;\n};\n\nconst VimeoPlayer = ({ url, autoplay }: PropsType) => (\n <Wrapper>\n <Iframe\n src={`https://player.vimeo.com/video/${getVimeoId(url)}?${\n autoplay ? '&autoplay=1' : ''\n }&loop=0&autopause=0`}\n />\n </Wrapper>\n);\n\nexport default VimeoPlayer;\n", "import React from 'react';\nimport { Wrapper } from './wrapper';\nimport Video from './Video';\n\ntype PropsType = {\n url?: string;\n modal?: boolean;\n controls?: boolean;\n ratio?: string;\n isPreview?: boolean;\n};\n\nconst CustomPlayer = ({ url, controls, modal, ratio = '56.25%', isPreview }: PropsType) => {\n return (\n <Wrapper ratio={ratio} isPreview={isPreview}>\n <Video\n key={url}\n modal={modal}\n preload=\"metadata\"\n controls={controls}\n width=\"100%\"\n height=\"100%\"\n src={url}\n />\n </Wrapper>\n );\n};\nexport default CustomPlayer;\n", "import React from 'react';\nimport styled from 'styled-components';\n\ntype VideoProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLVideoElement>,\n HTMLVideoElement\n> & {\n modal?: boolean;\n};\n\nconst Video = styled.video<VideoProps>`\n position: absolute;\n top: 0;\n left: 0;\n object-fit: ${({ modal }) => (modal ? 'contain' : 'cover')};\n`;\n\nexport default Video;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Item, Img } from '../Lightbox/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\n\ntype PropsType = {\n urls: string[];\n};\n\nconst ThreeSixtyLightbox = ({ urls }: PropsType) => {\n const [started, setStarted] = useState(false);\n\n const onStart = useCallback(() => setStarted(true), []);\n\n if (!started) {\n return (\n <Item>\n <Img src={urls[0]} alt=\"alt\" />\n <MediaButton text=\"Starta 360\u00B0 exteri\u00F6rt\" onClick={onStart} />\n </Item>\n );\n }\n\n return (\n <Rotation>\n {urls.map((image, i) => (\n <Img key={image} src={image} alt={`Bild ${i + 1}`} />\n ))}\n </Rotation>\n );\n};\n\nexport default ThreeSixtyLightbox;\n", "import React from 'react';\n\nimport { MediaButtonWrapper } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\n\ninterface MediaButtonProps {\n text: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst MediaButton = ({ text, onClick }: MediaButtonProps) => (\n <MediaButtonWrapper>\n <ButtonSecondary onClick={onClick} title={text}>\n <ButtonContent>{text}</ButtonContent>\n </ButtonSecondary>\n </MediaButtonWrapper>\n);\n\nexport default MediaButton;\n", "import React, { useState, useEffect, useRef, cloneElement, Children } from 'react';\n\nconst calculateCurrentFrame = (startFrame: number, delta: number, length: number): number => {\n const frame = (startFrame + delta) % length;\n if (frame < 0) {\n return frame + length;\n }\n\n return frame;\n};\n\ntype PropsType = {\n children: React.ReactNode;\n};\n\ntype RotationEvent = any;\n\nconst Rotation = ({ children }: PropsType) => {\n const startFrame = useRef(0);\n const pointerPosition = useRef<number>();\n const max = useRef(0);\n\n const [state, setState] = useState({\n current: 0,\n outsideMouseMove: false,\n });\n\n useEffect(() => {\n document.addEventListener('mouseup', touchEnd);\n\n return () => {\n window.document.removeEventListener('mouseup', touchEnd);\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n };\n }, []);\n\n const touchMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched) {\n return;\n }\n\n const childCount = Children.count(children);\n\n const { offsetWidth } = event.currentTarget;\n const pointer = calculatePointerPosition(event);\n const max = offsetWidth;\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseMove = (event: RotationEvent) => {\n const notTouched = typeof pointerPosition.current !== 'number';\n event.preventDefault();\n if (notTouched || !state.outsideMouseMove) return;\n\n const childCount = Children.count(children);\n\n const pointer = calculatePointerPosition(event);\n const offset = pointer - (pointerPosition.current || 0);\n const delta = Math.floor((offset / max.current) * childCount);\n setCurrentFrame(calculateCurrentFrame(startFrame.current, delta, childCount));\n };\n\n const mouseUp = () => {\n window.document.body.removeEventListener('mousemove', mouseMove);\n window.document.body.removeEventListener('mouseup', mouseUp);\n\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const touchStart = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = calculatePointerPosition(event);\n startFrame.current = state.current;\n\n const { offsetWidth } = event.currentTarget;\n max.current = offsetWidth;\n\n window.document.body.addEventListener('mousemove', mouseMove);\n window.document.body.addEventListener('mouseup', mouseUp);\n };\n\n const touchEnd = (event: RotationEvent) => {\n event.preventDefault();\n pointerPosition.current = undefined;\n startFrame.current = 0;\n };\n\n const onMouseEnter = () => {\n if (state.outsideMouseMove) setState({ ...state, outsideMouseMove: false });\n };\n\n const onMouseLeave = () => {\n if (!state.outsideMouseMove) setState({ ...state, outsideMouseMove: true });\n };\n\n const setCurrentFrame = (current: number) => {\n if (current !== state.current) {\n setState({ ...state, current });\n }\n };\n\n const calculatePointerPosition = (event: RotationEvent): number => {\n const { clientX } = event.type.indexOf('touch') === 0 ? event.changedTouches[0] : event;\n const { offsetLeft } = event.currentTarget;\n return clientX - offsetLeft;\n };\n\n return (\n <div\n onTouchStart={touchStart}\n onTouchMove={touchMove}\n onTouchEnd={touchEnd}\n onMouseDown={touchStart}\n onMouseMove={touchMove}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {Children.map(children, (child, i) =>\n cloneElement(child as React.ReactElement, {\n style: {\n width: '100%',\n display: state.current === i ? 'block' : 'none',\n },\n })\n )}\n </div>\n );\n};\n\nexport default Rotation;\n", "import React, { useState, useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { ImageFull } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Modal from '../Modal/index';\nimport VideoPlayer from './EmbeddedVideoLightbox';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\n\ninterface GalleryEmbed {\n src: string;\n index: number;\n controls?: boolean;\n}\n\nconst GalleryEmbed = ({ src, index }: GalleryEmbed) => {\n const [modal, setModal] = useState<string>();\n const thumbnail = useThumbnail(src);\n\n const onClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(src);\n };\n\n const onCloseModal = (e: React.MouseEvent<HTMLButtonElement | HTMLDivElement, MouseEvent>) => {\n e.stopPropagation();\n setModal(undefined);\n };\n\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo) {\n return (\n <>\n <ImageFull onLoad={onLoad} src={thumbnail[0]} onError={onError} alt={`Bild ${index + 1}`} />\n <MediaButton text=\"Spela video\" onClick={onClick} />\n {modal && (\n <Modal title=\"Video\" onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n }\n\n if (customVideo)\n return (\n <>\n <CustomPlayer ratio=\"66.66%\" isPreview controls={false} url={src} />\n <MediaButton text=\"Spela video\" onClick={onClick} />\n {modal && (\n <Modal title=\"Video\" onClose={onCloseModal}>\n <VideoPlayer url={modal} />\n </Modal>\n )}\n </>\n );\n return null;\n};\n\nexport default GalleryEmbed;\n", "import { useEffect, useState } from 'react';\nimport { getVimeoId, getYoutubeThumbnail } from './utils';\nimport useVimeoThumbnail from '../../hooks/useVimeoThumbnail';\n\nconst useThumbnail = (url?: string | null, small?: boolean) => {\n if (url?.toLowerCase().endsWith('.mp4')) return;\n\n const [thumbnail, setThumbnail] = useState<string[]>();\n const vimeoId = url ? getVimeoId(url) : undefined;\n const vimeoThumbnail = useVimeoThumbnail(vimeoId, small);\n\n useEffect(() => {\n if (url) {\n const youtubeThumbnail = getYoutubeThumbnail(url);\n if (youtubeThumbnail) {\n if (small) {\n setThumbnail([youtubeThumbnail.mqdefault]);\n } else {\n setThumbnail([youtubeThumbnail.maxresdefault, youtubeThumbnail.hqdefault]);\n }\n }\n }\n }, [url]);\n\n return vimeoThumbnail ? [vimeoThumbnail] : thumbnail;\n};\n\nexport default useThumbnail;\n", "import { useEffect, useState } from 'react';\nimport useFetch from './useFetch';\n\ninterface VimeoItem {\n thumbnail_large: string;\n thumbnail_small: string;\n}\n\nconst useVimeoThumbnail = (id?: string, small?: boolean) => {\n const [thumbnail, setThumbnail] = useState<string>();\n const { data } = useFetch<VimeoItem[]>(\n `http://vimeo.com/api/v2/video/${id}.json`,\n {},\n !id || !!thumbnail,\n true\n );\n\n useEffect(() => {\n if (data?.[0]) {\n if (small && data[0].thumbnail_small) {\n setThumbnail(data[0].thumbnail_small);\n } else if (data[0].thumbnail_large) {\n setThumbnail(data[0].thumbnail_large);\n }\n }\n }, [data]);\n\n return thumbnail;\n};\n\nexport default useVimeoThumbnail;\n", "import { useEffect, useState, useCallback } from 'react';\n\nconst cache: { [key: string]: unknown | undefined } = {};\n\nconst getCachedResult = <T>(key: string) => (cache?.[key] as T) || undefined;\nconst setCachedResult = <T>(key: string, value: T) => {\n cache[key] = value;\n};\n\n/**\n * Reusing already fired request by attaching to same promise.\n * Usefull if multiple request is fetching from same endpoint, while\n * the first request has not been finished (so no cache exist yet).\n */\n\nlet pendingPromise: { [key: string]: Promise<globalThis.Response> } = {};\nconst isPendingPromise = (url: string) => !!pendingPromise[url];\nconst setPendingPromise = (url: string, promise: Promise<globalThis.Response>) => {\n pendingPromise = {\n ...pendingPromise,\n [url]: promise,\n };\n};\nconst clearPendingPromise = (url: string) => {\n delete pendingPromise[url];\n};\n\ninterface Response<T> {\n loading: boolean;\n data?: T;\n error: boolean;\n}\n\nconst useFetch = <T>(\n path: RequestInfo,\n options?: RequestInit,\n skip?: boolean,\n promiseCache?: boolean\n): Response<T> => {\n const [data, setData] = useState<T | undefined>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n\n const doFetch = useCallback(async () => {\n const key = path.toString();\n const cached = getCachedResult<T>(key);\n setError(false);\n if (cached) {\n setData(cached);\n return;\n }\n setLoading(true);\n try {\n const reusePromise = promiseCache && isPendingPromise(key);\n const request = reusePromise ? pendingPromise[key] : fetch(path, options);\n if (promiseCache) {\n setPendingPromise(key, request);\n }\n\n const result = await request;\n if (result.ok) {\n const json = await result.clone().json();\n setCachedResult(key, json);\n setData(json);\n }\n } catch (e) {\n setError(true);\n } finally {\n setLoading(false);\n clearPendingPromise(key);\n }\n return;\n }, [path, options]);\n\n useEffect(() => {\n if (!skip) {\n doFetch();\n }\n }, [path, skip]);\n\n return {\n loading,\n data,\n error,\n };\n};\n\nexport default useFetch;\n", "import * as React from 'react';\n\nimport { Portal, PortalNamespace } from '../Portal/index';\n\nimport { H1 } from '../Heading/index';\nimport { IconCancel } from '../Icon/index';\nimport {\n Body,\n Content,\n Dialog,\n Header,\n Heading,\n UiBlock,\n Wrapper,\n Close,\n CloseBtn,\n} from './wrapper';\n\ninterface ModalProps {\n id?: string | null;\n title: string | null;\n children: React.ReactNode;\n onClose: (e: React.MouseEvent<HTMLDivElement | HTMLButtonElement, MouseEvent>) => void;\n}\n\nconst Modal = ({ id, title, onClose, children }: ModalProps) => {\n return (\n <Portal id={id || PortalNamespace.DefaultPortal}>\n <Wrapper onClick={(e) => e.stopPropagation()}>\n <UiBlock onClick={onClose} title=\"St\u00E4ng modal\" />\n <Dialog>\n <Content>\n <Header>\n <Heading>\n <H1 noMargin>{title}</H1>\n </Heading>\n <Close>\n <CloseBtn onClick={onClose} title=\"St\u00E4ng modal\">\n <IconCancel block />\n </CloseBtn>\n </Close>\n </Header>\n <Body>{children}</Body>\n </Content>\n </Dialog>\n </Wrapper>\n </Portal>\n );\n};\n\nexport default Modal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { fadeIn, noTransform } from '../../layout/keyframes';\n\nimport { ButtonReset } from '../Button/index';\nimport { H1 } from '../Heading/index';\n\nexport const Wrapper = styled.div.attrs(() => ({\n role: 'dialog',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n white-space: normal;\n text-align: left;\n z-index: 90;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ${(props) => props.theme.breakpoint.Sm} {\n padding: ${size(2)};\n }\n`;\n\nexport const UiBlock = styled.div.attrs(() => ({\n 'aria-hidden': 'true',\n role: 'button',\n}))`\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(0, 0, 0, 0.35);\n z-index: -1;\n\n ${(props) => props.theme.breakpoint.LtMd} {\n animation: ${fadeIn} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n animation: ${fadeIn} 400ms ease forwards;\n }\n`;\n\nexport const Dialog = styled.article.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.color.bg};\n z-index: 1;\n width: 100%;\n max-width: 680px;\n max-height: 100%;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n align-self: flex-end;\n transform: translateY(100%);\n animation: ${noTransform} 300ms ease forwards;\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n transform: translateY(${size(2)});\n animation: ${fadeIn} 400ms ease, ${noTransform} 400ms ease forwards;\n }\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const Header = styled.header`\n display: flex;\n align-items: center;\n min-height: 60px;\n padding: ${size(3)};\n padding-bottom: 0;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n\n ${H1} {\n font-size: 1.5rem;\n }\n`;\n\nexport const Close = styled.div`\n flex-shrink: 0;\n margin: ${size(-2)};\n padding-left: ${size(3)};\n`;\n\nexport const CloseBtn = styled(ButtonReset)`\n display: block;\n padding: ${size(2)};\n`;\n\nexport const Body = styled.div`\n padding: ${size(3)};\n`;\n\nexport const Image = styled.img`\n display: block;\n width: calc(100% + ${size(6)});\n margin-left: ${size(-3)};\n margin-bottom: ${size(3)};\n`;\n\nexport const ModalFoldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n margin: ${size(-3)};\n margin-top: ${size(3)};\n padding: ${size(3)};\n`;\n\nexport const ModalFoldoutBody = styled.div``;\n", "import React, { useCallback } from 'react';\n\nimport useThumbnail from './useThumbnail';\nimport { QuickNavImg } from '../Gallery/wrapper';\nimport { onImageLoad, onImageError } from './utils';\nimport CustomPlayer from '../Video/CustomPlayer';\n\ninterface QuickNavEmbededProps {\n src?: string;\n index: number;\n}\n\nconst QuickNavEmbeded = ({ src, index }: QuickNavEmbededProps) => {\n const thumbnail = useThumbnail(src);\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageError(e, thumbnail),\n [thumbnail]\n );\n\n const onLoad = useCallback(\n (e: React.SyntheticEvent<HTMLImageElement, Event>) => onImageLoad(e, thumbnail),\n [thumbnail]\n );\n\n const customVideo = src?.toLowerCase().endsWith('.mp4');\n\n if (thumbnail?.length && !customVideo)\n return (\n <QuickNavImg onLoad={onLoad} src={thumbnail[0]} onError={onError} alt={`Bild ${index + 1}`} />\n );\n if (customVideo) return <CustomPlayer key={index} url={src} ratio=\"66.66%\" />;\n return null;\n};\n\nexport default QuickNavEmbeded;\n", "import React from 'react';\n\nimport { Image } from '../Gallery/wrapper';\nimport MediaButton from '../Gallery/MediaButton';\nimport Rotation from './Rotation';\n\nconst onMediaClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>, func: () => void) => {\n e.stopPropagation();\n e.preventDefault();\n func();\n};\n\ntype PropsType = {\n urls: string[];\n navigationDisabled: boolean;\n visible: boolean;\n onDisableNavigation: () => void;\n};\n\nconst ThreeSixty = ({ urls, visible, onDisableNavigation, navigationDisabled }: PropsType) => {\n if (!visible || (!navigationDisabled && visible)) {\n return (\n <>\n <Image src={urls[0]} alt=\"alt\" />\n <MediaButton\n text=\"Starta 360\u00B0 exteri\u00F6rt\"\n onClick={(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void =>\n onMediaClick(e, onDisableNavigation)\n }\n />\n </>\n );\n }\n if (navigationDisabled && visible) {\n return (\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <Rotation>\n {urls.map((image, i) => (\n <Image key={image} src={image} alt={`Bild ${i + 1}`} />\n ))}\n </Rotation>\n </div>\n );\n }\n return null;\n};\n\nexport default ThreeSixty;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const ProductPage = styled.div`\n display: flex;\n flex-direction: column;\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-direction: row;\n }\n`;\n\nexport const ProductPageAside = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex-shrink: 0;\n width: calc(375px + ${size(2)});\n padding-right: ${size(2)};\n }\n`;\n\nexport const ProductPageMain = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n display: contents;\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n flex: 1 1 100%;\n min-width: 0;\n padding-left: ${size(2)};\n }\n`;\n\ntype ProductPageAsideSectionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n mobileOrder?: number;\n};\n\nexport const ProductPageAsideSection = styled.div<ProductPageAsideSectionProps>`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: ${(props) => props.mobileOrder};\n\n & + & {\n margin-top: ${size(2)};\n }\n\n :last-child {\n margin-bottom: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-top: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(4)};\n }\n\n ${ProductPageMain} & {\n margin-bottom: ${size(8)};\n }\n }\n`;\n\nexport const ProductPageMainSection = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n order: 99;\n padding: ${size(4)} 0;\n border-top: ${size(1)} solid ${(props) => props.theme.color.accent};\n\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n padding-left: ${size(2)};\n padding-right: ${size(2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n & + & {\n margin-top: ${size(8)};\n padding-top: ${size(8)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n }\n`;\n\nexport const ProductPageContentLimit = styled.div`\n max-width: 420px;\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_QUERY from '../queries/SEARCH_ITEM_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen';\n\nconst useSearchItem = (id?: string): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_QUERY, {\n variables: { id: id as string },\n skip: !id,\n });\n\nexport default useSearchItem;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_QUERY = gql`\n query SearchItem($id: ID!) {\n vehicle(id: $id) {\n id\n documents\n contact {\n name\n email\n phonenumber\n avatar\n }\n manufacturer {\n description\n logotype\n name\n packageOption {\n description\n image\n link {\n title\n url\n }\n title\n }\n }\n packageOptions {\n description\n image\n link {\n title\n url\n }\n title\n }\n publishedAt\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n data {\n enginePower\n equipmentLevel\n fuelType\n gearbox\n gearboxType\n manufactureYear\n manufacturer\n mileage\n modelName\n modelSeries\n modelYear\n properties\n propertySet\n options\n registrationNumber\n salesName\n vin\n }\n description\n ecommerce {\n enabled\n reserved\n withTradeIn\n withHomeDelivery\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n financialOptions {\n description\n administrationFee\n downPayment {\n ...FinancialOptionDetail\n }\n duration {\n ...FinancialOptionDetail\n }\n effectiveInterest\n image\n includes\n includes\n interest\n link {\n title\n url\n }\n loanAmount\n logotype\n mileage {\n ...FinancialOptionDetail\n }\n monthlyCost\n name\n residual {\n ...FinancialOptionDetail\n }\n setupFee\n terms\n totalCreditCost\n totalResidualValue\n type\n url\n }\n media {\n type\n files {\n formats {\n format\n url\n }\n url\n }\n }\n location {\n city\n county\n streetAddress\n postalCode\n }\n price\n shortDescription\n title\n }\n }\n ${HoursOpen}\n ${FinancialOptionDetail}\n`;\n\nexport default SEARCH_ITEM_QUERY;\n", "import React, { Fragment } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport Leasing from './leasing';\nimport Loan from './loan';\nimport { FinancialOption } from '../../@types/codegen';\n\ninterface FinancialOptionsProps {\n id: string;\n financialOptions: FinancialOption[];\n}\n\nconst FinancialOptions = ({ id, financialOptions }: FinancialOptionsProps) => (\n <Repeat>\n <RepeatTiny>\n <VisualHeading>Andra finansieringsalternativ</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n {financialOptions.map((financialOption, index) => (\n <Fragment key={index}>\n {financialOption.type === 'leasing' && <Leasing financialOption={financialOption} />}\n {financialOption.type === 'loan' && <Loan id={id} financialOption={financialOption} />}\n </Fragment>\n ))}\n </RepeatTiny>\n </Repeat>\n);\n\nexport default FinancialOptions;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility/index';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport Modal from '../Modal/index';\nimport { Image, ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption } from '../../@types/codegen';\n\ninterface LeasingProps {\n financialOption: FinancialOption;\n}\n\nconst Leasing = ({ financialOption }: LeasingProps) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { image, description, monthlyCost, duration, mileage } = financialOption;\n\n return (\n <>\n {modal && (\n <Modal title=\"Privatleasing\" onClose={toggleModal}>\n {image && <Image src={image} alt=\"Privatleasing\" />}\n {description && <Content dangerouslySetInnerHTML={{ __html: description }} />}\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: 'M\u00E5nadskostnad',\n value: `${numberSeparator(monthlyCost || 0)} kr/m\u00E5n`,\n },\n {\n label: 'Bindningstid',\n value: `${duration?.current} m\u00E5nader`,\n },\n {\n label: '\u00C5rlig k\u00F6rstr\u00E4cka',\n value: `${numberSeparator(mileage?.current || 0)} mil/\u00E5r`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n </Modal>\n )}\n <OptionBox>\n <>\n {monthlyCost !== null && monthlyCost !== undefined && (\n <OptionBoxHeading>{`ca ${numberSeparator(monthlyCost)} kr/m\u00E5n`}</OptionBoxHeading>\n )}\n </>\n <OptionBoxContent>\n <p>\n Privatleasing{' '}\n {mileage?.current && duration?.current && (\n <>\n <UtilityTextPrimary>{numberSeparator(mileage?.current)} mil/\u00E5r</UtilityTextPrimary>{' '}\n i <UtilityTextPrimary>{duration?.current} m\u00E5n</UtilityTextPrimary>.{' '}\n </>\n )}\n </p>\n <p>\n <ButtonInline onClick={toggleModal}>L\u00E4s mer</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n </>\n );\n};\n\nexport default Leasing;\n", "import * as React from 'react';\n\nimport { Logo, LogoImg, Content, Wrapper } from './wrapper';\n\ninterface IOptionBox {\n logo?: string;\n logo2x?: string;\n logoAlt?: string;\n children: React.ReactNode;\n}\n\nconst OptionBox = ({ logo, logo2x, logoAlt, children }: IOptionBox) => (\n <Wrapper>\n {logo && (\n <Logo>\n <LogoImg src={logo} srcSet={logo2x} alt={logoAlt} />\n </Logo>\n )}\n <Content>{children}</Content>\n </Wrapper>\n);\n\nexport default OptionBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n padding: ${size(1)};\n border: 1px solid ${(props) => props.theme.color.border};\n border-radius: 3px;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Logo = styled.div`\n position: relative;\n flex-shrink: 0;\n margin-right: ${size(1)};\n width: ${size(9.5)};\n height: ${size(6)};\n`;\n\nexport const LogoImg = styled.img`\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: auto;\n bottom: 0;\n margin: auto;\n max-width: 100%;\n max-height: 100%;\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n text-align: right;\n line-height: 1.4;\n`;\n\nexport const OptionBoxHeading = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n\nexport const OptionBoxContent = styled.div`\n margin-top: ${size(0.5)};\n font-size: 0.875rem;\n\n p {\n margin: 0;\n }\n`;\n", "import React from 'react';\n\nimport { List, Item, Label, Value } from './wrapper';\n\ninterface ItemProps {\n label: string;\n value: string;\n}\n\ninterface Props {\n items: ItemProps[];\n}\n\nconst DataList = ({ items }: Props) => (\n <List>\n {items.map((item) => (\n <Item key={item.label}>\n <Label>{item.label}</Label>\n <Value>{item.value}</Value>\n </Item>\n ))}\n </List>\n);\n\nexport default DataList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n display: flex;\n align-items: flex-start;\n\n & + & {\n margin-top: ${size(1)};\n }\n`;\n\nexport const Label = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { UtilityTextPrimary } from '../Utility/index';\nimport { ButtonInline } from '../Button/index';\nimport { numberSeparator } from '../../utils/formats';\nimport useLoanCalculation from '../../hooks/useLoan';\nimport { FinancialOption } from '../../@types/codegen';\nimport LoanModal from './LoanModal';\n\ninterface LoanProps {\n id: string;\n financialOption: FinancialOption;\n}\n\nconst Loan = ({ id, financialOption }: LoanProps) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n\n const { data } = useLoanCalculation(\n id,\n financialOption.duration?.current,\n financialOption.downPayment?.current,\n financialOption.residual?.current\n );\n\n const interest = data?.loan?.interest;\n const duration = data?.loan?.duration?.current;\n const monthlyCost = data?.loan?.monthlyCost;\n\n const logo = financialOption?.logotype || 'https://placehold.it/67x10';\n\n // Skeleton?\n if (\n financialOption.loanAmount === undefined ||\n financialOption.loanAmount === null ||\n interest === undefined ||\n duration === undefined ||\n monthlyCost === undefined ||\n interest === null ||\n duration === null ||\n monthlyCost === null\n ) {\n return (\n <OptionBox logo={logo} logoAlt=\"Logotyp\">\n <OptionBoxHeading>Laddar...</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>Laddar...</p>\n </OptionBoxContent>\n </OptionBox>\n );\n }\n\n return (\n <>\n {modal && <LoanModal id={id} financialOption={financialOption} onClose={toggleModal} />}\n <OptionBox logo={logo} logoAlt=\"Logotyp\">\n <>\n <OptionBoxHeading>{`${numberSeparator(monthlyCost)} kr/m\u00E5n*`}</OptionBoxHeading>\n\n <OptionBoxContent>\n <p>\n Delbetala{' '}\n {financialOption.loanAmount && duration && (\n <>\n <UtilityTextPrimary>\n {numberSeparator(financialOption.loanAmount)} kr\n </UtilityTextPrimary>{' '}\n i <UtilityTextPrimary>{duration} m\u00E5n</UtilityTextPrimary>.\n </>\n )}\n </p>\n\n <p>\n {`*Ber\u00E4knat p\u00E5 ${(interest * 100).toFixed(2)}% r\u00E4nta. `}\n <ButtonInline onClick={toggleModal}>L\u00E4s mer</ButtonInline>\n </p>\n </OptionBoxContent>\n </>\n </OptionBox>\n </>\n );\n};\n\nexport default Loan;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport LOAN_CALCULATION from '../queries/LOAN_CALCULATION';\nimport { QueryLoanArgs, Query } from '../@types/codegen';\n\nconst useLoanCalculation = (\n id: string,\n duration?: number,\n downPayment?: number,\n residual?: number\n): QueryResult<Query, QueryLoanArgs> =>\n useQuery<Query, QueryLoanArgs>(LOAN_CALCULATION, {\n variables: {\n id,\n duration: duration as number,\n downPayment: downPayment as number,\n residual: (residual as number) || 0,\n },\n skip: duration === undefined || downPayment === undefined,\n });\n\nexport default useLoanCalculation;\n", "import { gql } from '@apollo/client';\n\nconst FinancialOptionDetail = gql`\n fragment FinancialOptionDetail on FinancialOptionDetail {\n current\n default\n max\n min\n step\n }\n`;\n\nconst LOAN_CALCULATION = gql`\n query LoanCalculation($id: ID!, $duration: Int!, $downPayment: Int!, $residual: Float!) {\n loan(id: $id, duration: $duration, downPayment: $downPayment, residual: $residual) {\n downPayment {\n ...FinancialOptionDetail\n }\n effectiveInterest\n duration {\n ...FinancialOptionDetail\n }\n residual {\n ...FinancialOptionDetail\n }\n mileage {\n ...FinancialOptionDetail\n }\n interest\n loanAmount\n totalCreditCost\n totalResidualValue\n monthlyCost\n }\n }\n ${FinancialOptionDetail}\n`;\n\nexport default LOAN_CALCULATION;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport useLoanCalculation from '../../hooks/useLoan';\nimport Modal from '../Modal/index';\nimport { ModalFoldout, ModalFoldoutBody } from '../Modal/wrapper';\nimport Content from '../Content/index';\nimport LogoBox from '../LogoBox/index';\nimport { Repeat, RepeatSmall, RepeatTiny } from '../Repeat/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { ButtonClear, ButtonContent } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport DataList from '../DataList/index';\nimport { FinancialOption, Query } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport SliderWithLabel from '../RangeSlider/SliderWithLabel';\n\nconst stepGenerator = (\n step: number,\n max: number,\n steps: number[] = [],\n current?: number\n): number[] => {\n if (step === 0 && current === undefined) return steps;\n\n if (current !== undefined && current >= max && step !== 0) {\n return steps;\n }\n\n const nextCurrent = current ? step + current : step;\n steps.push(nextCurrent);\n return stepGenerator(step, max, steps, nextCurrent);\n};\n\ninterface LoanModalProps {\n id: string;\n financialOption: FinancialOption;\n onClose: () => void;\n}\n\nconst LoanModal = ({ id, financialOption, onClose }: LoanModalProps) => {\n const [tmp, setTmp] = useState<Query>();\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => {\n if (!extend) {\n PubSub.publish('FinanceInterest');\n }\n setExtend(!extend);\n }, [extend]);\n\n const [variables, setVariables] = useState({\n duration: financialOption.duration?.current,\n downPayment: financialOption.downPayment?.current,\n residual: financialOption.residual?.current,\n });\n\n const { duration, downPayment, residual } = variables;\n const { loading, data } = useLoanCalculation(id, duration, downPayment, residual);\n useEffect(() => {\n if (data) {\n setTmp(data);\n setVariables({\n duration: data?.loan?.duration?.current || 0,\n downPayment: data?.loan?.downPayment?.current || 0,\n residual: data?.loan?.residual?.current || 0,\n });\n }\n }, [data]);\n\n const loan = data?.loan || tmp?.loan;\n\n const downPaymentCurrent = loan?.downPayment?.current || 0;\n const downPaymentMin = loan?.downPayment?.min || 0;\n const downPaymentMax = loan?.downPayment?.max || 0;\n const downPaymentStep = loan?.downPayment?.step || 0;\n const downPaymentSteps = stepGenerator(downPaymentStep, downPaymentMax);\n const onDownPaymentChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, downPayment: values[0] });\n },\n [variables]\n );\n\n const durationCurrent = loan?.duration?.current || 0;\n const durationMin = loan?.duration?.min || 0;\n const durationMax = loan?.duration?.max || 0;\n const durationStep = loan?.duration?.step || 0;\n const durationSteps = stepGenerator(durationStep, durationMax);\n const onDurationChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, duration: values[0] });\n },\n [variables]\n );\n\n const residualCurrent = (loan?.residual?.current || 0) * 100 || 0;\n const residualMin = (loan?.residual?.min || 0) * 100 || 0;\n const residualMax = (loan?.residual?.max || 0) * 100 || 0;\n const residualStep = (loan?.residual?.step || 0) * 100 || 0;\n const residualSteps = stepGenerator(residualStep, residualMax);\n const onResidualChange = useCallback(\n (values: readonly number[]) => {\n PubSub.publish('FinanceInterest');\n setVariables({ ...variables, residual: values[0] / 100 });\n },\n [variables]\n );\n\n const interestText = ((loan?.interest || 0) * 100).toFixed(2);\n const effectiveInterestText = ((loan?.effectiveInterest || 0) * 100).toFixed(2);\n\n return (\n <Modal title=\"L\u00E5nealternativ\" onClose={onClose}>\n <Repeat>\n <ContentLogo>\n {financialOption?.description && (\n <ContentLogoText>\n <Content>\n <p>{financialOption.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {financialOption?.image && (\n <ContentLogoMedia>\n <LogoBox logo={financialOption.image} alt={financialOption.name || 'Logotyp'} wide />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n <Repeat>\n <RepeatSmall>\n <SliderWithLabel\n label=\"Kontantinsatts\"\n values={[downPaymentCurrent]}\n domain={[downPaymentMin, downPaymentMax]}\n steps={downPaymentSteps}\n unit=\"kr\"\n formatValues\n loading={loading}\n onChange={onDownPaymentChange}\n />\n </RepeatSmall>\n <RepeatSmall>\n <SliderWithLabel\n label=\"Avbetalning\"\n values={[durationCurrent]}\n domain={[durationMin, durationMax]}\n steps={durationSteps}\n unit=\"m\u00E5n\"\n loading={loading}\n onChange={onDurationChange}\n />\n </RepeatSmall>\n {residual !== undefined && residualMax !== 0 && (\n <RepeatSmall>\n <SliderWithLabel\n label=\"Restskuld\"\n values={[residualCurrent]}\n domain={[residualMin, residualMax]}\n steps={residualSteps}\n unit=\"%\"\n loading={loading}\n onChange={onResidualChange}\n />\n </RepeatSmall>\n )}\n <RepeatSmall>\n <RepeatTiny>\n <Content small>\n <p>{`*Ber\u00E4knat p\u00E5 ${interestText} % r\u00E4nta (effektivt ${effectiveInterestText} %)${\n loan?.mileage !== null ? `och en \u00E5rlig k\u00F6rstr\u00E4cka om ${loan?.mileage} mil.` : ''\n }`}</p>\n </Content>\n </RepeatTiny>\n </RepeatSmall>\n\n <RepeatSmall>\n <ButtonClear\n onClick={onToggleExtend}\n title={extend ? 'Visa mindre information' : 'Visa mer information'}\n >\n <ButtonContent>{extend ? 'Mindre information' : 'Mer information'}</ButtonContent>\n </ButtonClear>\n </RepeatSmall>\n <>\n {extend && (\n <ModalFoldout>\n <ModalFoldoutBody>\n <DataList\n items={[\n {\n label: 'R\u00E4nta',\n value: `${interestText} %`,\n },\n {\n label: 'Effektiv r\u00E4nta',\n value: `${effectiveInterestText} %`,\n },\n {\n label: 'Uppl\u00E4ggningskostnad',\n value: `${numberSeparator(financialOption?.setupFee || 0)} kr`,\n },\n {\n label: 'Administrativa avgifter',\n value: `${numberSeparator(financialOption?.administrationFee || 0)} kr/m\u00E5n`,\n },\n {\n label: 'Total kreditkostnad',\n value: `${numberSeparator(loan?.totalCreditCost || 0)} kr`,\n },\n ]}\n />\n </ModalFoldoutBody>\n </ModalFoldout>\n )}\n </>\n </Repeat>\n </Modal>\n );\n};\n\nexport default LoanModal;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ContentLogo = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n }\n`;\n\nexport const ContentLogoText = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 auto;\n }\n`;\n\nexport const ContentLogoMedia = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-top: ${size(2)};\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex-shrink: 0;\n padding-left: ${size(4)};\n }\n`;\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { numberSeparator } from '../../utils/formats';\nimport RangeSliderLabel from '../RangeSliderLabel/index';\nimport { RepeatTiny } from '../Repeat/index';\nimport RangeSliderSimple from './RangeSliderSimple';\n\ninterface SliderWithLabelProps {\n label: string;\n values: number[];\n domain: number[];\n steps: number[];\n loading: boolean;\n unit: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n}\n\nconst SliderWithLabel = ({\n label,\n values,\n domain,\n steps,\n loading,\n unit,\n formatValues,\n onChange,\n}: SliderWithLabelProps) => {\n const [local, setLocal] = useState<number[] | undefined>(steps);\n\n const onUpdate = useCallback((nextValues: readonly number[]) => {\n setLocal([...nextValues]);\n }, []);\n\n useEffect(() => {\n if (!loading) setLocal(undefined);\n }, [loading]);\n\n return (\n <>\n <RepeatTiny>\n <RangeSliderLabel\n label={label}\n value={`${numberSeparator(local?.[0] || values[0])}${unit ? ` ${unit}` : ''}`}\n />\n </RepeatTiny>\n <RepeatTiny>\n <RangeSliderSimple\n loading={loading}\n values={values}\n domain={domain}\n steps={steps}\n onChange={onChange}\n onUpdate={onUpdate}\n unit={unit}\n formatValues={formatValues}\n />\n </RepeatTiny>\n </>\n );\n};\n\nexport default SliderWithLabel;\n", "import React from 'react';\n\nimport { Wrapper, Label, Value } from './wrapper';\n\ninterface Props {\n label: string;\n value?: React.ReactNode;\n highlight?: boolean;\n}\n\nconst RangeSliderLabel = ({ label, value, highlight }: Props) => (\n <Wrapper>\n <Label>{label}</Label>\n {value && <Value isHighlighted={highlight}>{value}</Value>}\n </Wrapper>\n);\n\nexport default RangeSliderLabel;\n", "import styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: flex-end;\n`;\n\nexport const Label = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n flex: 1 1 auto;\n`;\n\ntype ValueProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n isHighlighted?: boolean;\n};\n\nexport const Value = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold wayke__color--primary-text',\n}))<ValueProps>`\n flex-shrink: 0;\n padding-left: ${size(2)};\n font-size: 1.125rem;\n\n ${({ isHighlighted }) =>\n isHighlighted &&\n css`\n font-size: 1.375rem;\n color: ${(props) => props.theme.color.textDark} !important;\n `}\n`;\n", "import React from 'react';\nimport { Slider, Rail, Handles, Tracks } from 'react-compound-slider';\n\nimport { Bar, RangeSpan, RangeSpanItem, Slider as OwnSlider } from './wrapper';\nimport { Handle } from './handle';\nimport { Track } from './track';\nimport { numberSeparator } from '../../utils/formats';\n\ninterface RangeSliderProps {\n loading: boolean;\n domain: number[];\n values: number[];\n steps: number[];\n unit?: string;\n formatValues?: boolean;\n onChange: (values: readonly number[]) => void;\n onUpdate?: (values: readonly number[]) => void;\n}\n\nconst RangeSliderSimple = ({\n loading,\n values,\n domain,\n steps,\n unit,\n formatValues,\n onChange,\n onUpdate,\n}: RangeSliderProps) => {\n const first = steps[0];\n const second = steps[1];\n const step = second - first;\n\n const currentMin = formatValues ? numberSeparator(domain[0]) : domain[0];\n const currentMax = formatValues ? numberSeparator(domain[1]) : domain[1];\n\n if (steps.length < 2) {\n return null;\n }\n\n return (\n <>\n <OwnSlider>\n <Slider\n disabled={loading}\n mode={1}\n step={step}\n domain={domain}\n onChange={onChange}\n onUpdate={onUpdate}\n values={values}\n rootStyle={{ position: 'relative' }}\n >\n <Rail>{({ getRailProps }) => <Bar {...getRailProps()} />}</Rail>\n <Handles>\n {({ handles, getHandleProps }) => (\n <div className=\"slider-handles\">\n {handles.map((handle) => (\n <Handle\n key={handle.id}\n handle={handle}\n domain={domain}\n getHandleProps={getHandleProps}\n />\n ))}\n </div>\n )}\n </Handles>\n <Tracks right={false}>\n {({ tracks, getTrackProps }) => (\n <div className=\"slider-tracks\">\n {tracks.map(({ id, source, target }) => (\n <Track key={id} source={source} target={target} getTrackProps={getTrackProps} />\n ))}\n </div>\n )}\n </Tracks>\n </Slider>\n </OwnSlider>\n {false && (\n <RangeSpan>\n <RangeSpanItem>{`${currentMin}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n <RangeSpanItem>{`${currentMax}${unit ? ` ${unit}` : ''}`}</RangeSpanItem>\n </RangeSpan>\n )}\n </>\n );\n};\n\nexport default RangeSliderSimple;\n", "import React from 'react';\nimport { InsuranceOption, Branch } from '../../@types/codegen';\nimport Insurance from './Insurance';\nimport InsuranceFree from './InsuranceFree';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst InsuranceOptions = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n if (!insuranceOptions.length) {\n return null;\n }\n\n if (insuranceOptions.length > 0) {\n if (insuranceOptions[0].requiresDistance && insuranceOptions[0].requiresPersonalNumber)\n return <Insurance id={id} branch={branch} insuranceOptions={insuranceOptions} />;\n\n return <InsuranceFree insuranceOptions={insuranceOptions} />;\n }\n\n return null;\n};\n\nexport default InsuranceOptions;\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxHeading, OptionBoxContent } from '../OptionBox/wrapper';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption, Branch } from '../../@types/codegen';\nimport InsuranceModal from './InsuranceModal';\n\ninterface InsuranceOptions {\n id: string;\n branch?: Branch | null;\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ id, branch, insuranceOptions }: InsuranceOptions) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <InsuranceModal\n id={id}\n branch={branch}\n onClose={toggleModal}\n insuranceOptions={insuranceOptions[0]}\n />\n )}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>V\u00E4lj till f\u00F6rs\u00E4kring</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || 'Logotyp'}\n >\n <OptionBoxHeading>F\u00E5 prisf\u00F6rslag</OptionBoxHeading>\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>Mer information</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React, { useState, useCallback } from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat, RepeatTiny, RepeatSmall } from '../Repeat/index';\nimport LogoBox from '../LogoBox/index';\nimport DetailBox from '../DetailBox/index';\nimport ExtendInfo from '../ExtendInfo/index';\nimport Snackbar from '../Snackbar/index';\nimport { UtilityTextBold } from '../Utility/index';\nimport InputLabel from '../InputLabel/index';\nimport InputText from '../InputText/index';\nimport InputCheckbox from '../InputCheckbox/index';\nimport InputSelect, { OptionProps } from '../InputSelect/index';\nimport { H4 } from '../Heading/index';\nimport { InputGroup, InputGroupColumn } from '../InputGroup/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../Button/index';\nimport { ContentLogo, ContentLogoText, ContentLogoMedia } from '../ContentLogo/index';\nimport { ColumnRow, ColumnRowItem } from '../ColumnRow/index';\nimport useInsuranceCalculation from '../../hooks/useInsurance';\nimport { ssnIsValid } from '../../utils/ssn';\nimport Loader from '../Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport { DrivingDistance, InsuranceOption, Branch } from '../../@types/codegen';\nimport PubSub from '../../utils/pubsub/pubsub';\n\ninterface FormData {\n ssn: string;\n drivingDistance: DrivingDistance;\n}\n\ninterface InsuranceModal {\n id: string;\n branch?: Branch | null;\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceModal = ({ id, branch, onClose, insuranceOptions }: InsuranceModal) => {\n const [form, setForm] = useState<FormData>({\n ssn: '',\n drivingDistance: DrivingDistance.Between0And1000,\n });\n const [payload, setPayload] = useState<FormData>();\n const { loading, data, error } = useInsuranceCalculation(\n id,\n branch?.id ? branch?.id : undefined,\n ssnIsValid(payload?.ssn) ? payload?.ssn : undefined,\n payload?.drivingDistance\n );\n\n const onChangeSsn = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setForm({ ...form, ssn: e.currentTarget.value }),\n [form]\n );\n\n const onChangeDrivingDistance = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) =>\n setForm({ ...form, drivingDistance: e.currentTarget.value as DrivingDistance }),\n [form]\n );\n\n const onShowInsurances = useCallback(() => {\n PubSub.publish('InsuranceInterest');\n setPayload(form);\n }, [form]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.keyCode === 13 && ssnIsValid(form.ssn) && !loading) {\n onShowInsurances();\n }\n },\n [form]\n );\n\n const options: OptionProps[] = [\n { value: DrivingDistance.Between0And1000, displayName: '0 - 1000' },\n { value: DrivingDistance.Between1000And1500, displayName: '1000 - 1500' },\n { value: DrivingDistance.Between1500And2000, displayName: '1500 - 2000' },\n { value: DrivingDistance.Between2000And2500, displayName: '2000 - 2500' },\n { value: DrivingDistance.Over2500, displayName: '2500+' },\n ];\n\n return (\n <Modal title=\"F\u00F6rs\u00E4kring\" onClose={onClose}>\n {(insuranceOptions?.description || insuranceOptions?.logotype) && (\n <Repeat>\n <ContentLogo>\n {insuranceOptions.description && (\n <ContentLogoText>\n <Content>\n <p>{insuranceOptions.description}</p>\n </Content>\n </ContentLogoText>\n )}\n {insuranceOptions.logotype && (\n <ContentLogoMedia>\n <LogoBox\n logo={insuranceOptions.logotype}\n alt={insuranceOptions.name || 'Logotyp'}\n wide\n />\n </ContentLogoMedia>\n )}\n </ContentLogo>\n </Repeat>\n )}\n\n <Repeat>\n <RepeatSmall>\n <RepeatTiny>\n <InputGroup>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-personalnumber\">Personnummer</InputLabel>\n <InputText\n placeholder=\"\u00C5\u00C5\u00C5\u00C5MMDD-XXXX\"\n label=\"Personnummer\"\n value={form.ssn}\n onChange={onChangeSsn}\n onKeyDown={onKeyDown}\n id=\"input-insurance-personalnumber\"\n />\n </InputGroupColumn>\n <InputGroupColumn>\n <InputLabel htmlFor=\"input-insurance-mileage\">\n Uppskattad k\u00F6rstr\u00E4cka per \u00E5r\n </InputLabel>\n <InputSelect\n value={form.drivingDistance}\n onChange={onChangeDrivingDistance}\n options={options}\n unit=\"mil\"\n title=\"Uppskattad k\u00F6rstr\u00E4cka per \u00E5r\"\n />\n </InputGroupColumn>\n </InputGroup>\n </RepeatTiny>\n <RepeatTiny>\n <ButtonPrimary\n fullWidth\n disabled={!ssnIsValid(form.ssn) || loading}\n onClick={onShowInsurances}\n >\n <ButtonContent>Visa f\u00F6rs\u00E4kringar</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n </RepeatSmall>\n {false && (\n <RepeatSmall>\n <InputCheckbox id=\"input-insurance-save-personalnumber\">\n Spara personnummer p\u00E5 denna enhet\n </InputCheckbox>\n </RepeatSmall>\n )}\n <RepeatSmall>\n <Content small>\n <p>\n Spara personnummer p\u00E5 denna dator f\u00F6r att direkt visa f\u00F6rs\u00E4kringskostnaderna i Wayke.\n Personnumret lagras inte hos Wayke utan finns bara sparad i din webbl\u00E4sare.\n </p>\n </Content>\n </RepeatSmall>\n </Repeat>\n\n {loading && (\n <Repeat>\n <Loader />\n </Repeat>\n )}\n\n {error && (\n <Repeat>\n <Snackbar severity=\"error\" icon heading=\"Ett fel har intr\u00E4ffat\">\n Kunde inte h\u00E4mta f\u00F6rs\u00E4kringar. V\u00E4nligen f\u00F6rs\u00F6k igen.\n </Snackbar>\n </Repeat>\n )}\n\n <>\n {data?.insurances && (\n <Repeat>\n {data?.insurances.map((insurance) => (\n <Repeat key={insurance.name}>\n <DetailBox\n heading={`${numberSeparator(insurance.price)} ${insurance.unit}`}\n description={insurance.name}\n >\n <Repeat>\n <>\n {insurance.description && (\n <RepeatTiny>\n <Content>\n <p>{insurance.description}</p>\n </Content>\n </RepeatTiny>\n )}\n </>\n <>\n {insurance.url && (\n <RepeatTiny>\n <ButtonInline\n as=\"a\"\n href={insurance.url || ''}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n F\u00F6rk\u00F6psinformation och villkor (\u00F6ppnas i ny flik)\n </ButtonInline>\n </RepeatTiny>\n )}\n </>\n </Repeat>\n {insurance.items && insurance.items.length > 0 && (\n <Repeat>\n <H4>F\u00F6rs\u00E4kringen inneh\u00E5ller</H4>\n {insurance.items.map((item) => (\n <RepeatSmall key={item.name || ''}>\n <ExtendInfo title={item.name || ''}>{item.description}</ExtendInfo>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n {insurance.addons && insurance.addons.length > 0 && (\n <Repeat>\n <H4>V\u00E4lj till</H4>\n {insurance.addons.map((addon) => (\n <RepeatSmall key={addon.title || ''}>\n <ColumnRow>\n <ColumnRowItem>\n <ExtendInfo title={addon.title || ''}>{addon.description}</ExtendInfo>\n </ColumnRowItem>\n <ColumnRowItem>\n <UtilityTextBold>\n +{addon.price} {addon.unit}\n </UtilityTextBold>\n </ColumnRowItem>\n </ColumnRow>\n </RepeatSmall>\n ))}\n </Repeat>\n )}\n </DetailBox>\n </Repeat>\n ))}\n </Repeat>\n )}\n </>\n </Modal>\n );\n};\n\nexport default InsuranceModal;\n", "import React from 'react';\n\nimport { Wrapper, Main, Heading, Description, Footer, Foldout } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n heading: string;\n description?: string;\n children: React.ReactNode;\n}\n\nconst DetailBox = ({ heading, description, children }: Props) => {\n const [extend, setExtend] = React.useState(false);\n const onToggleExtend = React.useCallback(() => setExtend(!extend), [extend]);\n\n const extendBtnText = extend ? 'Mindre information' : 'Mer information';\n\n return (\n <Wrapper>\n <Main>\n <Heading>{heading}</Heading>\n {description && <Description>{description}</Description>}\n <Footer>\n <ButtonClear onClick={onToggleExtend}>\n <ButtonContent>{extendBtnText}</ButtonContent>\n </ButtonClear>\n </Footer>\n </Main>\n {extend && <Foldout>{children}</Foldout>}\n </Wrapper>\n );\n};\n\nexport default DetailBox;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { H2 } from '../Heading/index';\n\nexport const Wrapper = styled.article`\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n overflow: hidden;\n`;\n\nexport const Main = styled.div`\n padding: ${size(2.5)};\n`;\n\nexport const Heading = styled(H2).attrs(() => ({\n as: 'h1',\n}))`\n margin-bottom: 0;\n`;\n\nexport const Description = styled.div`\n margin-top: ${size(1)};\n`;\n\nexport const Footer = styled.div`\n margin-top: ${size(1)};\n color: red;\n`;\n\nexport const Foldout = styled.div`\n background-color: ${(props) => props.theme.color.accent};\n padding: ${size(2.5)};\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Title, Info, InfoBtn, Extend } from './wrapper';\nimport { IconInfo } from '../Icon/index';\n\ninterface Props {\n title: string;\n children?: React.ReactNode;\n}\n\nconst ExtendInfo = ({ title, children }: Props) => {\n const [extend, setExtend] = useState(false);\n const onToggleExtend = useCallback(() => setExtend(!extend), [extend]);\n\n return (\n <Wrapper>\n <Header>\n <Title>{title}</Title>\n {children && (\n <Info>\n <InfoBtn onClick={onToggleExtend} title=\"Mer information\">\n <IconInfo block />\n </InfoBtn>\n </Info>\n )}\n </Header>\n {extend && <Extend>{children}</Extend>}\n </Wrapper>\n );\n};\n\nexport default ExtendInfo;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div``;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Title = styled.div``;\n\nexport const Info = styled.div`\n margin-left: ${size(1)};\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n font: inherit;\n font-size: 1em;\n transform-origin: 50% 50%;\n transition: transform 300ms cubic-bezier(0.47, 1.64, 0.41, 0.8);\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Extend = styled.div`\n padding-top: ${size(1)};\n margin-top: ${size(1)};\n border-top: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875em;\n`;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n children: string;\n htmlFor?: string;\n}\n\nconst InputLabel = ({ children, htmlFor }: Props) => (\n <Wrapper htmlFor={htmlFor}>{children}</Wrapper>\n);\n\nexport default InputLabel;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n margin-bottom: ${size(0.5)};\n font-size: 0.875rem;\n`;\n", "import React from 'react';\n\nimport { Wrapper, Input } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n value: string;\n placeholder: string;\n label: string;\n};\n\nconst InputText = ({ placeholder, label, value, id, onChange, onKeyDown }: Props) => (\n <Wrapper>\n <Input\n placeholder={placeholder}\n value={value}\n id={id}\n aria-label={label}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </Wrapper>\n);\n\nexport default InputText;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n position: relative;\n display: flex;\n align-items: stretch;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Input = styled.input.attrs(() => ({\n type: 'text',\n className: 'wayke__theme wayke__font--regular',\n}))`\n flex: 1 1 auto;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n padding: 0 ${size(2)};\n background-color: transparent;\n font-size: 16px;\n border: none;\n border-radius: 0;\n box-shadow: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n\n :focus {\n outline: none;\n }\n\n &::-webkit-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &::-moz-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n\n &:-ms-input-placeholder {\n font-family: inherit;\n color: ${(props) => props.theme.color.textDarkLighten};\n font-size: 1em;\n }\n`;\n", "import * as React from 'react';\n\nimport { Input, Label, LabelText, Wrapper } from './wrapper';\n\ntype Props = React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n> & {\n id: string;\n children: React.ReactNode;\n};\n\nconst InputCheckbox = ({ children, ...props }: Props) => {\n const { id } = props;\n return (\n <Wrapper aria-labelledby={id ? `${id}-label` : undefined}>\n <Input\n {...(props as React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n >)}\n />\n <Label id={`${id}-label`} htmlFor={id}>\n <LabelText>{children}</LabelText>\n </Label>\n </Wrapper>\n );\n};\n\nexport default InputCheckbox;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Label = styled.label.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: flex;\n align-items: flex-start;\n font-size: 1rem;\n line-height: 1.2;\n cursor: pointer;\n\n :before {\n content: '';\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${size(2.5)};\n height: ${size(2.5)};\n margin-right: ${size(1)};\n background-color: ${(props) => props.theme.color.accent};\n color: currentColor;\n border: none;\n box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.07);\n text-align: center;\n font-size: 15px;\n cursor: pointer;\n border-radius: 3px;\n margin-top: -2px;\n }\n`;\n\nexport const Wrapper = styled((props) => <div {...props} />).attrs(({ type, checked }) => ({\n role: type || 'checkbox',\n 'aria-checked': checked,\n}))`\n ${({ error }) =>\n error &&\n css`\n ${Label} {\n color: ${(props) => props.theme.color.ui.negative};\n\n :before {\n background-color: ${(props) => props.theme.color.ui.negativeLight};\n }\n }\n `}\n`;\n\nexport const Input = styled((props) => (\n <input {...props} className={`${props.checked ? 'checked' : undefined} ${props.className}`} />\n)).attrs(({ type, checked }) => ({\n checked,\n type: type || 'checkbox',\n}))`\n position: fixed;\n left: -9999px;\n opacity: 0;\n\n &[disabled] {\n & + ${Label} {\n color: ${(props) => props.theme.color.disabledText};\n\n &:before {\n background-color: ${(props) => props.theme.color.disabledBg};\n cursor: not-allowed;\n }\n }\n }\n\n &:checked,\n &.checked {\n & + ${Label} {\n :before {\n content: '\u2713';\n }\n }\n }\n`;\n\nexport const LabelText = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\n", "import React from 'react';\n\nimport { Wrapper, Select, Option, Icon } from './wrapper';\nimport { IconChevronDown } from '../Icon/index';\n\nexport interface OptionProps {\n value: number | string;\n displayName?: number | string | null;\n}\n\ninterface Props {\n value?: string | number;\n options?: OptionProps[];\n unit?: string;\n title: string;\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n}\n\nconst InputSelect = ({ value, options, onChange, unit, title }: Props) => (\n <Wrapper>\n <Select value={value} onChange={onChange} title={title} aria-label={title}>\n {options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.displayName || option.value}\n {unit ? ` ${unit}` : ''}\n </Option>\n ))}\n </Select>\n <Icon>\n <IconChevronDown block />\n </Icon>\n </Wrapper>\n);\n\nexport default InputSelect;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nconst iconSize = '0.875rem';\nconst selectPadding = size(2);\n\nexport const Wrapper = styled.div`\n position: relative;\n background-color: ${(props) => props.theme.color.accent};\n border-radius: 3px;\n`;\n\nexport const Select = styled.select.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n position: relative;\n display: block;\n width: 100%;\n height: ${(props) => props.theme.distances.inputHeight};\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n text-indent: 0.01px;\n border: 0;\n padding: 0 ${selectPadding};\n padding-right: calc(${iconSize} + ${selectPadding});\n background-color: transparent;\n color: ${(props) => props.theme.color.textDark};\n border-radius: 0;\n font-size: 16px;\n cursor: pointer;\n z-index: 1;\n\n :focus {\n outline: none;\n }\n\n ::-ms-expand {\n display: none;\n }\n\n ::-moz-focus-inner {\n border: 0;\n }\n`;\n\nexport const Option = styled.option`\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const Icon = styled.div`\n position: absolute;\n top: 50%;\n right: ${selectPadding};\n transform: translateY(-50%);\n font-size: ${iconSize};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const InputGroup = styled.div`\n ${(props) => props.theme.breakpoint.Sm} {\n display: flex;\n align-items: flex-start;\n margin: ${size(-0.5)};\n }\n`;\n\nexport const InputGroupColumn = styled.div`\n ${(props) => props.theme.breakpoint.LtSm} {\n & + & {\n margin-top: ${size(1)};\n }\n }\n\n ${(props) => props.theme.breakpoint.Sm} {\n flex: 1 1 50%;\n padding: ${size(0.5)};\n }\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const ColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n`;\n\nexport const ColumnRowItem = styled.div`\n flex: 1 1 auto;\n\n :last-child:not(:only-child) {\n flex: 0 0 auto;\n }\n\n & + & {\n padding-left: ${size(2)};\n }\n`;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport INSURANCE_CALCULATION from '../queries/INSURANCE_CALCULATION';\n\nimport { DrivingDistance, QueryInsurancesArgs, Query } from '../@types/codegen';\n\nconst useInsuranceCalculation = (\n id: string,\n branchId?: string,\n personalNumber?: string,\n drivingDistance?: DrivingDistance\n): QueryResult<Query, QueryInsurancesArgs> =>\n useQuery<Query, QueryInsurancesArgs>(INSURANCE_CALCULATION, {\n variables: {\n id,\n branch: branchId as string,\n personalNumber: personalNumber as string,\n drivingDistance: drivingDistance as DrivingDistance,\n },\n skip: personalNumber === undefined || drivingDistance === undefined || branchId === undefined,\n });\n\nexport default useInsuranceCalculation;\n", "import { gql } from '@apollo/client';\n\nconst INSURANCE_CALCULATION = gql`\n query InsuranceCalculation(\n $id: ID!\n $branch: ID\n $personalNumber: PersonalNumber!\n $drivingDistance: DrivingDistance!\n ) {\n insurances(\n id: $id\n branch: $branch\n personalNumber: $personalNumber\n drivingDistance: $drivingDistance\n ) {\n name\n price\n unit\n description\n logotype\n addons {\n id\n title\n description\n price\n unit\n exclusions\n }\n items {\n name\n description\n }\n legality {\n description\n url\n }\n terms\n url\n }\n }\n`;\n\nexport default INSURANCE_CALCULATION;\n", "export const ssnIsValid = (s?: string) => (s ? /^\\d{2,4}\\d{2}\\d{2}\\-?\\d{4}$/.test(s) : false);\n", "import React, { useState, useCallback } from 'react';\nimport { Repeat, RepeatTiny } from '../Repeat/index';\nimport { VisualHeading } from '../Heading/index';\nimport OptionBox from '../OptionBox/index';\nimport { OptionBoxContent } from '../OptionBox/wrapper';\nimport Content from '../Content/index';\nimport { marked } from 'marked';\nimport { ButtonInline } from '../Button/index';\nimport { InsuranceOption } from '../../@types/codegen';\nimport InsuranceFreeModal from './InsuranceFreeModal';\n\ninterface InsuranceOptions {\n insuranceOptions: InsuranceOption[];\n}\n\nconst Insurance = ({ insuranceOptions }: InsuranceOptions) => {\n const [modal, setModal] = useState(false);\n const toggleModal = useCallback(() => setModal(!modal), [modal]);\n if (!insuranceOptions.length) {\n return null;\n }\n\n return (\n <>\n {modal && <InsuranceFreeModal onClose={toggleModal} insuranceOptions={insuranceOptions[0]} />}\n <Repeat>\n <RepeatTiny>\n <VisualHeading>{insuranceOptions[0]?.insuranceHeader ?? 'F\u00F6rs\u00E4kring'}</VisualHeading>\n </RepeatTiny>\n <RepeatTiny>\n <>\n {insuranceOptions.map((insuranceOption, index) => (\n <OptionBox\n key={`${insuranceOption.url}-${index}`}\n logo={insuranceOption.logotype || undefined}\n logoAlt={insuranceOption.name || 'Logotyp'}\n >\n {insuranceOption.description && (\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOption.description),\n }}\n />\n )}\n <OptionBoxContent>\n <p>\n <ButtonInline onClick={toggleModal}>Mer information</ButtonInline>\n </p>\n </OptionBoxContent>\n </OptionBox>\n ))}\n </>\n </RepeatTiny>\n </Repeat>\n </>\n );\n};\n\nexport default Insurance;\n", "import React from 'react';\n\nimport Modal from '../Modal/index';\nimport Content from '../Content/index';\nimport { Repeat } from '../Repeat/index';\nimport { ButtonInline } from '../Button/index';\nimport LogoBox from '../LogoBox/index';\nimport { InsuranceOption } from '../../@types/codegen';\nimport { marked } from 'marked';\n\ninterface InsuranceFreeModal {\n onClose: () => void;\n insuranceOptions: InsuranceOption;\n}\n\nconst InsuranceFreeModal = ({ onClose, insuranceOptions }: InsuranceFreeModal) => {\n return (\n <Modal title={insuranceOptions?.insuranceHeader ?? 'F\u00F6rs\u00E4kring'} onClose={onClose}>\n {insuranceOptions?.longDescription && (\n <Repeat>\n <Content\n dangerouslySetInnerHTML={{\n __html: marked(insuranceOptions.longDescription),\n }}\n ></Content>\n </Repeat>\n )}\n {insuranceOptions?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={insuranceOptions.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n L\u00E4s mer om f\u00F6rs\u00E4kringen (\u00D6ppnas i ett nytt f\u00F6nster)\n </ButtonInline>\n </Repeat>\n )}\n {insuranceOptions?.logotype && (\n <Repeat>\n <LogoBox logo={insuranceOptions.logotype} alt={insuranceOptions.name || 'Logotyp'} wide />\n </Repeat>\n )}\n </Modal>\n );\n};\n\nexport default InsuranceFreeModal;\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { Maybe, PackageOption } from '../../@types/codegen';\n\ninterface ManufacturerPackageOption {\n packageOption?: Maybe<PackageOption>;\n}\n\nconst ManufacturerPackageOption = ({ packageOption }: ManufacturerPackageOption) => {\n if (!packageOption) {\n return null;\n }\n\n return (\n <ProductPageMainSection>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title\n ? packageOption.link.title\n : 'L\u00E4s mer (\u00D6ppnas i ett nytt f\u00F6nster)'}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt=\"Logotyp\" wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n );\n};\n\nexport default ManufacturerPackageOption;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport ActionList from '../../components/ActionList/index';\nimport { ButtonPrimary, ButtonContent, ButtonInline } from '../../components/Button/index';\nimport CheckMarkList, { CheckMarkListItem } from '../../components/CheckMarkList/index';\nimport Content from '../../components/Content/index';\nimport SwitchBar from '../../components/SwitchBar/index';\nimport {\n Manufacturer,\n PackageOption,\n Ecommerce,\n ContactOptions,\n Branch,\n} from '../../@types/codegen';\nimport BranchModal from './BranchModal';\nimport PackageOptionModal, { PackageOptionModalData } from './PackageOptionModal';\n\ninterface CheckList {\n manufacturer?: Manufacturer | null;\n packageOptions: PackageOption[];\n ecommerce?: Ecommerce | null;\n branch?: Branch | null;\n contact?: ContactOptions | null;\n loadingCentralStorageVehicle: boolean;\n toggleEcomModal: () => void;\n}\n\nconst CheckList = ({\n manufacturer,\n packageOptions,\n ecommerce,\n branch,\n contact,\n toggleEcomModal,\n loadingCentralStorageVehicle,\n}: CheckList) => {\n const [modalBranch, setModalBranch] = useState(false);\n const openModalBranch = useCallback(() => setModalBranch(true), []);\n const closeModalBranch = useCallback(() => setModalBranch(false), []);\n\n const [modal, setModal] = useState<PackageOptionModalData>();\n const onOpen = useCallback((nextModal: PackageOptionModalData) => setModal(nextModal), []);\n const onClose = useCallback(() => setModal(undefined), []);\n\n useEffect(() => {\n if ((branch || contact) && modalBranch) {\n setModalBranch(false);\n }\n }, [branch, contact]);\n\n const packageOption = manufacturer?.packageOption;\n\n return (\n <>\n {modalBranch && (\n <BranchModal\n loading={loadingCentralStorageVehicle}\n connections={branch?.connections}\n onClose={closeModalBranch}\n />\n )}\n {modal && <PackageOptionModal packageOption={modal} onClose={onClose} />}\n <Repeat>\n <CheckMarkList>\n {packageOption?.title && (\n <CheckMarkListItem>\n <>\n Inkl.{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>{' '}\n begagnatgaranti\n </>\n </CheckMarkListItem>\n )}\n {packageOptions?.map((packageOption, index) => (\n <CheckMarkListItem key={packageOption.title || index}>\n <>\n Inkl.{' '}\n <ButtonInline\n onClick={() =>\n onOpen({\n title: packageOption?.title,\n image: packageOption?.image,\n description: packageOption?.description,\n link: packageOption?.link,\n })\n }\n >\n {packageOption.title}\n </ButtonInline>\n </>\n </CheckMarkListItem>\n ))}\n {ecommerce?.withHomeDelivery && <CheckMarkListItem>Hemleverans</CheckMarkListItem>}\n </CheckMarkList>\n </Repeat>\n <Repeat>\n {ecommerce && ecommerce.enabled && (\n <RepeatTiny>\n <ButtonPrimary disabled={!!ecommerce.reserved} fullWidth onClick={toggleEcomModal}>\n <ButtonContent>K\u00F6p bilen online</ButtonContent>\n </ButtonPrimary>\n </RepeatTiny>\n )}\n {ecommerce?.reserved && (\n <RepeatTiny>\n <SwitchBar\n title=\"Bilen \u00E4r reserverad\"\n body=\"Denna bil \u00E4r reserverad av en annan k\u00F6pare.\"\n >\n <Content>\n <p>Denna bil \u00E4r reserverad av en annan k\u00F6pare.</p>\n </Content>\n </SwitchBar>\n </RepeatTiny>\n )}\n <ActionList branch={branch} contact={contact} />\n </Repeat>\n {(branch?.connections.length || 0) > 1 && (\n <Repeat>\n <SwitchBar title=\"Centrallagerbil\" actionTitle=\"Byt anl\u00E4ggning\" onClick={openModalBranch}>\n <Content>\n <p>\n Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar. Byt\n anl\u00E4ggning f\u00F6r att visa kontaktuppgifter till just den anl\u00E4ggningen.\n </p>\n </Content>\n </SwitchBar>\n </Repeat>\n )}\n </>\n );\n};\n\nexport default CheckList;\n", "import React, { useCallback } from 'react';\n\nimport ToggleItem from './toggle-item';\nimport { Maybe, ContactOptions, Branch } from '../../@types/codegen';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\nimport PubSub from '../../utils/pubsub/pubsub';\n\ninterface ActionListProps {\n branch?: Maybe<Branch>;\n contact?: Maybe<ContactOptions>;\n}\n\nconst ActionList = ({ contact, branch }: ActionListProps) => {\n const email = contact?.email || branch?.contact?.email;\n const phonenumber = contact?.phonenumber || branch?.contact?.phonenumber;\n\n const onClickMailVisible = useCallback(() => PubSub.publish('MailVisible'), []);\n const onClickPhoneVisible = useCallback(() => PubSub.publish('PhonenumberVisible'), []);\n const onClickPhoneValue = useCallback(() => PubSub.publish('PhonenumberCall'), []);\n\n if (!email && !phonenumber) {\n return null;\n }\n\n return (\n <>\n {email && (\n <ToggleItem\n onClickVisible={onClickMailVisible}\n title=\"Visa mailadress\"\n value={email}\n type=\"mailto\"\n />\n )}\n {phonenumber && (\n <ToggleItem\n title=\"Visa telefonnummer\"\n value={formatPhonenumber(phonenumber)}\n type=\"tel\"\n onClickVisible={onClickPhoneVisible}\n onClickValue={onClickPhoneValue}\n />\n )}\n </>\n );\n};\n\nexport default ActionList;\n", "import React, { useState, useCallback } from 'react';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { RepeatTiny } from '../Repeat/index';\n\ninterface ToggleItemProps {\n title: string;\n value: string;\n type: 'tel' | 'mailto';\n onClickVisible?: () => void;\n onClickValue?: () => void;\n}\n\nconst initialValue: { [key: string]: boolean | undefined } = {};\n\nconst getInitialValue = (title: string) => title && !!initialValue[title];\n\nconst ToggleItem = ({ title, value, type, onClickVisible, onClickValue }: ToggleItemProps) => {\n const [visible, setVisible] = useState(() => getInitialValue(type));\n\n const _onClickValue = useCallback(() => {\n if (onClickValue) {\n onClickValue();\n }\n }, []);\n\n const onClick = useCallback(() => {\n if (!visible) {\n initialValue[type] = true;\n setVisible(true);\n if (onClickVisible) {\n onClickVisible();\n }\n }\n }, [visible]);\n\n const visibleTitle = type === 'tel' ? 'Ring' : type === 'mailto' ? 'Skicka ett mail till' : '';\n\n return (\n <RepeatTiny>\n {visible ? (\n <ButtonSecondary\n onClick={_onClickValue}\n as=\"a\"\n href={`${type}:${value}`}\n title={`${visibleTitle} ${value}`}\n fullWidth\n >\n <ButtonContent>{value}</ButtonContent>\n </ButtonSecondary>\n ) : (\n <ButtonSecondary onClick={onClick} title={title} fullWidth>\n <ButtonContent>{title}</ButtonContent>\n </ButtonSecondary>\n )}\n </RepeatTiny>\n );\n};\n\nexport default ToggleItem;\n", "import { MetadataJson, parsePhoneNumberFromString } from 'libphonenumber-js/core';\n\nimport metadata from './metadata.min';\n\nconst typedMetadata = metadata as unknown as MetadataJson;\n\nexport const formatPhonenumber = (text: string) => {\n try {\n const parsed = parsePhoneNumberFromString(\n text.replace('-', '').replace(/ /g, ''),\n typedMetadata\n );\n return parsed?.formatNational() || text;\n } catch (e) {\n return text;\n }\n};\n", "const Metadata = {\n version: '1.7.53',\n country_calling_codes: { '46': ['SE'] },\n countries: {\n SE: [\n '46',\n '00',\n '(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}',\n [6, 7, 8, 9, 10],\n [\n ['(\\\\d{2})(\\\\d{2,3})(\\\\d{2})', '$1-$2 $3', ['20'], '0$1', 0, '$1 $2 $3'],\n ['(\\\\d{3})(\\\\d{4})', '$1-$2', ['9(?:00|39|44)'], '0$1', 0, '$1 $2'],\n [\n '(\\\\d{2})(\\\\d{3})(\\\\d{2})',\n '$1-$2 $3',\n ['[12][136]|3[356]|4[0246]|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2,3})(\\\\d{2})',\n '$1-$2 $3',\n [\n '1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])',\n ],\n '0$1',\n 0,\n '$1 $2 $3',\n ],\n ['(\\\\d{3})(\\\\d{2,3})(\\\\d{3})', '$1-$2 $3', ['9(?:00|39|44)'], '0$1', 0, '$1 $2 $3'],\n [\n '(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})', '$1-$2 $3 $4', ['10|7'], '0$1', 0, '$1 $2 $3 $4'],\n ['(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})', '$1-$2 $3 $4', ['8'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4',\n ['[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])'],\n '0$1',\n 0,\n '$1 $2 $3 $4',\n ],\n ['(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})', '$1-$2 $3 $4', ['9'], '0$1', 0, '$1 $2 $3 $4'],\n [\n '(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})',\n '$1-$2 $3 $4 $5',\n ['[26]'],\n '0$1',\n 0,\n '$1 $2 $3 $4 $5',\n ],\n ],\n '0',\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}',\n [7, 8, 9],\n ],\n ['7[02369]\\\\d{7}', [9]],\n ['20\\\\d{4,7}', [6, 7, 8, 9]],\n ['649\\\\d{6}|9(?:00|39|44)[1-8]\\\\d{3,6}', [7, 8, 9, 10]],\n ['75[1-8]\\\\d{6}', [9]],\n 0,\n ['10[1-8]\\\\d{6}', [9]],\n ['74[02-9]\\\\d{6}', [9]],\n 0,\n ['77[0-7]\\\\d{6}', [9]],\n ],\n ],\n },\n nonGeographic: {},\n};\n\nexport default Metadata;\n", "import React from 'react';\n\nimport { List, Item, Icon, Label } from './wrapper';\nimport { IconCheck } from '../Icon/index';\n\nexport interface ICheckMarkList {\n children: React.ReactNode;\n}\n\nexport const CheckMarkListItem = ({ children }: ICheckMarkList) => (\n <Item>\n <Icon>\n <IconCheck block />\n </Icon>\n <Label>{children}</Label>\n </Item>\n);\n\nconst CheckMarkList = ({ children }: ICheckMarkList) => <List>{children}</List>;\n\nexport default CheckMarkList;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nexport const Item = styled.li`\n position: relative;\n font-size: 0.875rem;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n`;\n\nexport const Icon = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: absolute;\n left: 0;\n top: 4px; // Magic number\n font-size: 0.875em;\n`;\n\nexport const Label = styled.div`\n padding-left: calc(1em + ${size(1)});\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Wrapper, Header, Body, Info, Action, InfoContent, InfoBtn, Title } from './wrapper';\nimport Modal from '../Modal/index';\nimport { ButtonInline } from '../Button/index';\nimport { IconInfo } from '../Icon/index';\n\ninterface Props {\n title: string;\n body?: string;\n actionTitle?: string;\n children: React.ReactNode;\n onClick?: () => void;\n}\n\nconst SwitchBar = ({ title, body, actionTitle, children, onClick }: Props) => {\n const [info, setInfo] = useState(false);\n const onToggleInfo = useCallback(() => setInfo(!info), [info]);\n\n return (\n <>\n <Wrapper>\n <Header>\n <Info>\n <InfoContent>\n <Title>{title}</Title>\n </InfoContent>\n {children && (\n <InfoContent>\n <InfoBtn onClick={onToggleInfo} title=\"Mer information\">\n <IconInfo block />\n </InfoBtn>\n </InfoContent>\n )}\n </Info>\n {actionTitle && (\n <Action>\n <ButtonInline onClick={onClick} title={actionTitle}>\n {actionTitle}\n </ButtonInline>\n </Action>\n )}\n </Header>\n {body && <Body>{body}</Body>}\n </Wrapper>\n {info && (\n <Modal title={title} onClose={onToggleInfo}>\n {children}\n </Modal>\n )}\n </>\n );\n};\n\nexport default SwitchBar;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { ButtonReset } from '../Button/index';\n\nexport const Wrapper = styled.div`\n padding: ${size(1.5)} ${size(2)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 3px;\n font-size: 0.875rem;\n`;\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Body = styled.div`\n font-size: 0.875rem;\n margin-top: ${size(1)};\n`;\n\nexport const Info = styled.div`\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1.5)};\n font-size: 0.875rem;\n`;\n\nexport const InfoContent = styled.div`\n & + & {\n margin-left: ${size(0.75)};\n }\n`;\n\nexport const InfoBtn = styled(ButtonReset).attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n position: relative;\n display: block;\n\n :before {\n content: '';\n position: absolute;\n top: ${size(-0.5)};\n bottom: ${size(-0.5)};\n left: ${size(-0.5)};\n right: ${size(-0.5)};\n background-color: ${(props) => props.theme.color.accentDark};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n`;\n\nexport const Title = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))`\n font-size: 1rem;\n`;\n", "import React, { useState, useCallback, useContext } from 'react';\n\nimport { Repeat, RepeatTiny } from '../../components/Repeat/index';\nimport InputSelect from '../../components/InputSelect/index';\nimport { ButtonPrimary, ButtonContent } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport InputLabel from '../../components/InputLabel/index';\nimport { BranchConnection } from '../../@types/codegen';\nimport { CentralStorageContext } from '../../State/CentralStorage/CentralStorageContext';\n\ninterface BranchModalProps {\n loading: boolean;\n connections?: BranchConnection[];\n onClose: () => void;\n}\n\nconst BranchModal = ({ loading, connections, onClose }: BranchModalProps) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n const [localValue, setLocalValue] = useState(centralStorageId);\n\n const onConfirm = useCallback((id: string) => {\n if (id) {\n setCentralStorageId(id);\n }\n }, []);\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => setLocalValue(e.currentTarget.value),\n []\n );\n\n if (!localValue) {\n return null;\n }\n\n return (\n <Modal title=\"Byt anl\u00E4ggning\" onClose={onClose}>\n <Repeat>\n <RepeatTiny>\n <Content>\n <p>V\u00E4lj den anl\u00E4ggning du vill visa kontaktuppgifter f\u00F6r.</p>\n </Content>\n </RepeatTiny>\n <RepeatTiny>\n <InputLabel>V\u00E4lj anl\u00E4ggning</InputLabel>\n <InputSelect\n value={localValue}\n onChange={onChange}\n options={connections?.map((x) => ({\n value: x.id,\n displayName: x.name,\n }))}\n title=\"V\u00E4lj anl\u00E4ggning\"\n />\n </RepeatTiny>\n </Repeat>\n <Repeat>\n <ButtonPrimary disabled={loading} fullWidth onClick={() => onConfirm(localValue)}>\n <ButtonContent>V\u00E4lj</ButtonContent>\n </ButtonPrimary>\n </Repeat>\n </Modal>\n );\n};\n\nexport default BranchModal;\n", "import { createContext } from 'react';\n\nexport interface CentralStorageContextProps {\n centralStorageId?: string | null;\n setCentralStorageId: (id?: string) => void;\n}\n\nexport const CentralStorageContext = createContext<CentralStorageContextProps>({\n setCentralStorageId: (_) => {},\n});\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\nimport LogoBox from '../../components/LogoBox/index';\n\ninterface ModelLink {\n href?: string | null;\n title?: string | null;\n}\n\nexport interface PackageOptionModalData {\n title?: string | null;\n image?: string | null;\n description?: string | null;\n link?: ModelLink | null;\n}\n\ninterface PackageOptionsModalProps {\n packageOption: PackageOptionModalData;\n onClose: () => void;\n}\n\nconst PackageOptionModal = ({ packageOption, onClose }: PackageOptionsModalProps) => (\n <Modal title={packageOption.title || ''} onClose={onClose}>\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt={packageOption.title || undefined} wide />\n </Repeat>\n )}\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.href && packageOption.link.title && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n >\n {packageOption.link.title}\n </ButtonInline>\n </Repeat>\n )}\n </Modal>\n);\n\nexport default PackageOptionModal;\n", "import React, { useCallback } from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Repeat } from '../../components/Repeat/index';\n\nimport { PageSection } from '../../components/Page/index';\nimport SectionHeader from '../../components/SectionHeader/index';\nimport {\n OverflowGridList,\n OverflowGrid,\n OverflowGridItem,\n} from '../../components/OverflowGrid/index';\nimport ProductCard from '../../components/ProductCard/index';\nimport { H2 } from '../../components/Heading/index';\nimport useRelatedSearch from '../../State/RelatedSearch/useRelatedSearch';\nimport Loader from '../../components/Loader/index';\nimport { numberSeparator } from '../../utils/formats';\nimport PubSub from '../../utils/pubsub/pubsub';\nimport { regexPathGuid } from '../../utils/regex';\n\ninterface RelatedProps {\n id: string;\n hashRoute?: boolean;\n pathRoute?: string;\n onClickSearchItem?: (id: string) => void;\n}\n\nconst Related = ({ id, hashRoute, pathRoute, onClickSearchItem }: RelatedProps) => {\n const { loading, response, moreLikeThisUrl } = useRelatedSearch(id);\n\n const onItemClicked = useCallback((id: string) => {\n PubSub.publish('ItemClicked', id);\n if (onClickSearchItem) {\n onClickSearchItem(id);\n }\n }, []);\n\n if (!response?.documentList.documents.length || response?.documentList.documents.length === 0) {\n return null;\n }\n\n if (loading) {\n return <Loader />;\n }\n\n return (\n <PageSection accent large className=\"wayke__theme wayke__color--accent-bg\">\n <Container>\n {moreLikeThisUrl ? (\n <Repeat>\n <SectionHeader onClick={() => {}}>\n <H2 noMargin>Relaterade fordon</H2>\n </SectionHeader>\n </Repeat>\n ) : (\n <Repeat>\n <SectionHeader onClick={() => {}} actionTitle=\"Visa alla\">\n <H2 noMargin>Senast inkomna</H2>\n </SectionHeader>\n </Repeat>\n )}\n\n <Repeat>\n <OverflowGrid>\n <OverflowGridList>\n {response?.documentList.documents.map((document) => {\n const prefix = pathRoute ? `/${pathRoute}` : '/';\n\n const r = regexPathGuid(pathRoute);\n\n const pathRouteUrl =\n window.location.pathname === '/'\n ? `${prefix}${document._id}`\n : r.test(`${pathRoute}${id}`)\n ? window.location.pathname.replace(r, `${pathRoute}${document._id}`)\n : `${window.location.pathname}${prefix}${document._id}`;\n\n return (\n <OverflowGridItem key={document._id}>\n <ProductCard\n id={document._id}\n onClick={onItemClicked}\n title={document.title}\n href={pathRoute ? pathRouteUrl : hashRoute ? `#${document._id}` : undefined}\n image={document.featuredImage?.files?.[0]?.url}\n description={document.shortDescription}\n uspList={[\n {\n title: document.modelYear,\n },\n {\n title: `${numberSeparator(document.mileage)} mil`,\n },\n {\n title: document.gearboxType,\n },\n {\n title: document.fuelType,\n },\n ]}\n price={`${numberSeparator(document.price)} kr`}\n oldPrice={\n document.oldPrice !== undefined && document.price < document.oldPrice\n ? `${numberSeparator(document.oldPrice)} kr`\n : undefined\n }\n pathRoute={pathRoute}\n />\n </OverflowGridItem>\n );\n })}\n </OverflowGridList>\n </OverflowGrid>\n </Repeat>\n </Container>\n </PageSection>\n );\n};\n\nexport default Related;\n", "import React from 'react';\n\nimport { Wrapper, Heading, Action } from './wrapper';\nimport { ButtonClear, ButtonContent } from '../Button/index';\n\ninterface Props {\n children: React.ReactNode;\n onClick?: () => void;\n actionTitle?: string;\n}\n\nconst SectionHeader = ({ children, onClick, actionTitle }: Props) => (\n <Wrapper>\n <Heading>{children}</Heading>\n {onClick && actionTitle && (\n <Action>\n <ButtonClear as=\"a\" href=\"#\" onClick={onClick}>\n <ButtonContent>{actionTitle}</ButtonContent>\n </ButtonClear>\n </Action>\n )}\n </Wrapper>\n);\n\nexport default SectionHeader;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const Heading = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport { Wrapper as Container } from '../Container/wrapper';\n\nexport const OverflowGrid = styled.div`\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n margin-left: ${size(-3)};\n margin-right: ${size(-2)};\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n margin-left: ${size(-2)};\n margin-right: ${size(-1)};\n }\n }\n`;\n\nexport const OverflowGridList = styled.ul`\n display: flex;\n align-items: flex-start;\n list-style: none;\n padding: 0;\n margin: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtMd} {\n ${Container} & {\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding: 0 ${size(3)};\n\n :after {\n content: '';\n flex: 0 0 auto;\n height: 1px;\n width: ${size(2)};\n }\n }\n }\n\n ${(props) => props.theme.breakpoint.LtSm} {\n ${Container} & {\n padding: 0 ${size(2)};\n\n :after {\n width: ${size(1)};\n }\n }\n }\n`;\n\nexport const OverflowGridItem = styled.li`\n flex: 1 0 auto;\n width: calc(100% - ${size(2)});\n max-width: calc(100% - ${size(2)});\n padding: ${size(1)};\n\n ${(props) => props.theme.breakpoint.Sm} {\n width: calc(50% - ${size(3)});\n max-width: calc(50% - ${size(3)});\n }\n\n ${(props) => props.theme.breakpoint.Md} {\n width: 33.333%;\n max-width: 33.333%;\n }\n`;\n", "import { useContext, useEffect } from 'react';\n\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\nconst useRelatedSearch = (id: string) => {\n const data = useContext(RelatedSearchContext);\n\n useEffect(() => {\n const searchParams = new URLSearchParams();\n searchParams.set('hits', '3');\n if (data.moreLikeThisUrl && id) {\n searchParams.set('id', id);\n }\n data.fetchRelated(searchParams);\n }, [id]);\n\n return data;\n};\n\nexport default useRelatedSearch;\n", "import { createContext } from 'react';\nimport { Search } from '../../@types/search';\n\nexport interface RelatedSearchContextProps {\n moreLikeThisUrl: boolean;\n loading: boolean;\n response?: Search;\n error: boolean;\n fetchRelated: (searchParmas: URLSearchParams) => void;\n}\n\nexport const RelatedSearchContext = createContext<RelatedSearchContextProps>({\n moreLikeThisUrl: false,\n loading: false,\n error: false,\n response: undefined,\n fetchRelated: (_) => {},\n});\n", "export const regexGuid =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst regexEndGuid = /[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\nexport const escapeRegExpString = (s: string) => s.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n\nexport const regexPathGuid = (path?: string) => {\n if (!path) {\n return regexEndGuid;\n }\n const r = new RegExp(`${escapeRegExpString(path)}${regexEndGuid.source}`, 'gi');\n return r;\n};\n", "import React from 'react';\nimport { marked } from 'marked';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport { ProductPageMainSection } from '../../components/ProductPage/index';\nimport Content from '../../components/Content/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport LogoBox from '../../components/LogoBox/index';\nimport { PackageOption } from '../../@types/codegen';\n\ninterface PackageOptionsProps {\n packageOptions?: PackageOption[] | null;\n}\n\nconst PackageOptions = ({ packageOptions }: PackageOptionsProps) => {\n if (!packageOptions) {\n return null;\n }\n\n return (\n <>\n {packageOptions.map((packageOption, index) => (\n <ProductPageMainSection key={packageOption.title || index}>\n <Repeat>\n <H2 noMargin>{packageOption.title}</H2>\n </Repeat>\n {packageOption.description && (\n <Repeat>\n <Content dangerouslySetInnerHTML={{ __html: marked(packageOption.description) }} />\n </Repeat>\n )}\n {packageOption.link?.url && (\n <Repeat>\n <ButtonInline\n as=\"a\"\n href={packageOption.link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {packageOption.link.title\n ? packageOption.link.title\n : 'L\u00E4s mer (\u00D6ppnas i ett nytt f\u00F6nster)'}\n </ButtonInline>\n </Repeat>\n )}\n {packageOption.image && (\n <Repeat>\n <LogoBox logo={packageOption.image} alt=\"Logotyp\" wide />\n </Repeat>\n )}\n </ProductPageMainSection>\n ))}\n </>\n );\n};\n\nexport default PackageOptions;\n", "import React, { useState, useCallback, useEffect } from 'react';\n\nimport { Repeat } from '../../components/Repeat/index';\nimport Content from '../../components/Content/index';\nimport { ProductPageContentLimit } from '../../components/ProductPage/index';\nimport { H2 } from '../../components/Heading/index';\nimport { ButtonContent, ButtonInline, ButtonInlineBold } from '../../components/Button/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../../components/TableColumn/index';\n\nimport OpeningHours from '../../components/OpeningHours/index';\nimport PhoneNumber from '../../components/PhoneNumber/index';\nimport Map from '../../components/Map/index';\n\nimport { Branch, Maybe } from '../../@types/codegen';\nimport BranchModal from './BranchModal';\nimport { formatPhonenumber } from '../../utils/phonenumbers';\n\ninterface BranchProps {\n branch?: Maybe<Branch>;\n loading: boolean;\n}\n\nconst Branch = ({ branch, loading }: BranchProps) => {\n const [modal, setModal] = useState(false);\n\n const openModal = useCallback(() => setModal(true), []);\n const closeModal = useCallback(() => setModal(false), []);\n\n useEffect(() => {\n if (branch && modal) {\n setModal(false);\n }\n }, [branch]);\n\n if (!branch) {\n return null;\n }\n\n return (\n <>\n {modal && (\n <BranchModal loading={loading} connections={branch?.connections} onClose={closeModal} />\n )}\n <Repeat>\n <H2 noMargin>\n {branch?.location?.city\n ? `Den h\u00E4r bilen finns p\u00E5 v\u00E5r anl\u00E4ggning i ${branch?.location?.city}`\n : 'Kontakt'}\n </H2>\n </Repeat>\n <Repeat>\n <Map position={branch?.location?.position} />\n </Repeat>\n {(branch?.connections?.length || 0) > 1 && (\n <Repeat>\n <Content>\n <p>\n Denna bil tillh\u00F6r ett centrallager och g\u00E5r att k\u00F6pa genom flera anl\u00E4ggningar.{' '}\n <ButtonInline as=\"span\" role=\"button\" onClick={openModal} inline>\n Klicka h\u00E4r f\u00F6r att visa kontaktuppgifter till en annan anl\u00E4ggning\n </ButtonInline>\n .\n </p>\n </Content>\n </Repeat>\n )}\n <Repeat>\n <ProductPageContentLimit>\n <Repeat>\n <TableColumn>\n {branch?.location?.streetAddress && branch?.location?.city && (\n <TableColumnRow>\n <TableColumnCell>Adress</TableColumnCell>\n <TableColumnCell>\n <ButtonInlineBold>\n <ButtonContent>{`${branch?.location?.streetAddress}, ${branch?.location?.city}`}</ButtonContent>\n </ButtonInlineBold>\n </TableColumnCell>\n </TableColumnRow>\n )}\n {branch?.contact?.phonenumber && (\n <PhoneNumber phoneNumber={formatPhonenumber(branch.contact.phonenumber)} />\n )}\n </TableColumn>\n </Repeat>\n {branch?.openingHours && (\n <Repeat>\n <OpeningHours openingHours={branch.openingHours} />\n </Repeat>\n )}\n </ProductPageContentLimit>\n </Repeat>\n </>\n );\n};\n\nexport default Branch;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableColumn = styled.div`\n line-height: 1.2;\n`;\n\nexport const TableColumnRow = styled.div`\n display: flex;\n align-items: flex-start;\n margin: ${size(-1)};\n`;\n\nexport const TableColumnCell = styled.div`\n flex: 1 0 50%;\n padding: ${size(1)};\n`;\n", "import React, { useMemo } from 'react';\nimport { RepeatSmall } from '../Repeat/index';\nimport Badge from '../Badge/index';\nimport { TableColumn, TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { UtilityTextBold } from '../Utility/index';\n\nimport { OpeningHours, Maybe } from '../../@types/codegen';\n\ntype Days = Omit<OpeningHours, '__typename'>;\ntype KeyType = keyof Days;\nconst KeyOrder: KeyType[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n];\n\nconst TranslateWeekDays = (d: KeyType) => {\n switch (d) {\n case 'monday':\n return 'M\u00E5n';\n case 'tuesday':\n return 'Tis';\n case 'wednesday':\n return 'Ons';\n case 'thursday':\n return 'Tor';\n case 'friday':\n return 'Fre';\n case 'saturday':\n return 'L\u00F6r';\n case 'sunday':\n return 'S\u00F6n';\n }\n};\n\ninterface OpeningHoursSample {\n titleFrom: string;\n titleTo?: string;\n from?: string | null;\n until?: string | null;\n}\n\nconst arr: OpeningHoursSample[] = [];\n\nconst GetOpeningHours = (o: OpeningHours) =>\n KeyOrder.reduce((prev, current) => {\n const title = TranslateWeekDays(current);\n const item = o[current];\n const previous = prev?.[prev.length - 1];\n if (previous && previous.from == item?.from && previous.until === item?.until) {\n prev[prev.length - 1].titleTo = title;\n } else {\n prev.push({\n titleFrom: title,\n from: item?.from,\n until: item?.until,\n });\n }\n\n return prev;\n }, arr.slice());\n\nconst GetOpeningHoursToday = (o: OpeningHours) => {\n const dayNumber = new Date().getDay();\n const day = KeyOrder[dayNumber === 0 ? 6 : dayNumber - 1] as KeyType;\n const current = o[day];\n return {\n title: current ? '\u00D6ppetider idag' : 'St\u00E4ngt idag',\n from: current?.from,\n until: current?.until,\n };\n};\n\nconst valuOfDateString = (s: string) => {\n const splitted = s.split(':').map((x) => parseInt(x, 10));\n return new Date().setHours(splitted[0], splitted[1]).valueOf();\n};\n\ninterface OpeningHoursProps {\n openingHours?: Maybe<OpeningHours>;\n}\n\nconst OpeningHours = ({ openingHours }: OpeningHoursProps) => {\n const today = useMemo(\n () => (openingHours ? GetOpeningHoursToday(openingHours) : null),\n [openingHours]\n );\n\n const currentlyOpen = useMemo(() => {\n try {\n if (today?.from && today?.until) {\n const currentDate = new Date().valueOf();\n const from = valuOfDateString(today.from);\n const until = valuOfDateString(today.until);\n return currentDate >= from && currentDate <= until;\n }\n } catch (e) {\n return false;\n }\n }, [today]);\n\n const oh = useMemo(() => (openingHours ? GetOpeningHours(openingHours) : null), [openingHours]);\n if (!oh) {\n return null;\n }\n\n return (\n <>\n <RepeatSmall>\n <Badge\n label={currentlyOpen ? '\u00D6ppet' : 'St\u00E4ngt'}\n severity={currentlyOpen ? 'positive' : 'negative'}\n />\n </RepeatSmall>\n <RepeatSmall>\n <TableColumn>\n <TableColumnRow>\n <TableColumnCell>\n <UtilityTextBold>{today?.title}</UtilityTextBold>\n </TableColumnCell>\n <TableColumnCell>\n <UtilityTextBold>\n {today?.from ? `${today.from}-${today.until}` : 'St\u00E4ngt'}\n </UtilityTextBold>\n </TableColumnCell>\n </TableColumnRow>\n {oh.map((o) => (\n <TableColumnRow key={o.titleFrom}>\n <TableColumnCell>\n {o.titleTo ? `${o.titleFrom}-${o.titleTo}` : o.titleFrom}\n </TableColumnCell>\n <TableColumnCell>{o.from ? `${o.from}-${o.until}` : 'St\u00E4ngt'}</TableColumnCell>\n </TableColumnRow>\n ))}\n </TableColumn>\n </RepeatSmall>\n </>\n );\n};\n\nexport default OpeningHours;\n", "import React from 'react';\n\nimport { Wrapper } from './wrapper';\n\ninterface Props {\n label: string;\n severity?: 'positive' | 'negative';\n}\n\nconst Badge = ({ label, severity }: Props) => <Wrapper severity={severity}>{label}</Wrapper>;\n\nexport default Badge;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\nimport theme from '../../layout/theme';\n\nconst getBg = (severity: string | undefined): string => {\n let bg = theme.color.textDark;\n\n if (severity === 'positive') {\n bg = theme.color.ui.positive;\n } else if (severity === 'negative') {\n bg = theme.color.ui.negative;\n }\n\n return bg;\n};\n\ninterface Wrapper {\n severity?: string;\n}\n\nexport const Wrapper = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--bold',\n}))<Wrapper>`\n display: inline-block;\n background-color: ${(props): string => getBg(props.severity)};\n padding: ${size(0.75)} ${size(1.5)};\n color: ${(props) => props.theme.color.textLight};\n border-radius: 3px;\n font-size: 0.75rem;\n line-height: 1.2;\n`;\n", "import React, { useState, useCallback } from 'react';\n\nimport { TableColumnRow, TableColumnCell } from '../TableColumn/index';\nimport { ButtonContent, ButtonInlineBold } from '../Button/index';\n\ninterface PhoneNumberProps {\n phoneNumber: string;\n}\n\nconst PhoneNumber = ({ phoneNumber }: PhoneNumberProps) => {\n const [visible, setVisible] = useState(false);\n\n const onClick = useCallback(() => !visible && setVisible(true), [visible]);\n\n return (\n <TableColumnRow>\n <TableColumnCell>Telefonnummer</TableColumnCell>\n <TableColumnCell>\n {visible ? (\n <ButtonInlineBold as=\"a\" href={`tel:${phoneNumber}`} title={`Ring ${phoneNumber}`}>\n <ButtonContent>{phoneNumber}</ButtonContent>\n </ButtonInlineBold>\n ) : (\n <ButtonInlineBold onClick={onClick} title=\"Visa telefonnummer\">\n <ButtonContent>Visa telefonnummer</ButtonContent>\n </ButtonInlineBold>\n )}\n </TableColumnCell>\n </TableColumnRow>\n );\n};\n\nexport default PhoneNumber;\n", "import React, { useState, useCallback } from 'react';\nimport useSettings from '../../State/Settings/useSettings';\n\nimport { Wrapper, Image, Placeholder, PlaceholderAction } from './wrapper';\nimport { ButtonSecondary, ButtonContent } from '../Button/index';\nimport { Position, Maybe } from '../../@types/codegen';\n\ninterface StaticMapProps {\n position?: Maybe<Position>;\n}\n\nconst StaticMap = ({ position }: StaticMapProps) => {\n const { googleMapsApiKey, googleMapsMarker } = useSettings();\n const [visible, setVisible] = useState(false);\n\n const onShowMap = useCallback((e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n if (googleMapsApiKey) {\n e.preventDefault();\n setVisible(true);\n }\n }, []);\n\n if (!position) {\n return null;\n }\n\n const { latitude, longitude } = position;\n\n if (visible && googleMapsApiKey) {\n return (\n <Wrapper\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n title=\"Visa p\u00E5 Google Maps\"\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n >\n <Image\n src={`https://maps.googleapis.com/maps/api/staticmap?center=${latitude},${longitude}&zoom=10&size=640x280&maptype=roadmap&markers=${\n googleMapsMarker ? `icon:${encodeURIComponent(googleMapsMarker)}` : ''\n }%7C${latitude},${longitude}&key=${googleMapsApiKey}`}\n alt=\"Karta\"\n />\n </Wrapper>\n );\n }\n return (\n <Placeholder\n href={`http://maps.google.com/maps?q=${latitude},${longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n onClick={onShowMap}\n >\n <PlaceholderAction>\n <ButtonSecondary as=\"div\">\n <ButtonContent>Visa karta</ButtonContent>\n </ButtonSecondary>\n </PlaceholderAction>\n </Placeholder>\n );\n};\n\nexport default StaticMap;\n", "import { useContext } from 'react';\n\nimport { SettingsContext } from './SettingsContext';\n\nconst useSettings = () => useContext(SettingsContext);\n\nexport default useSettings;\n", "import { createContext } from 'react';\n\nexport interface SettingsContextProps {\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n ecomSettings?: {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n };\n}\n\nexport const SettingsContext = createContext<SettingsContextProps>({});\n", "import styled from 'styled-components';\n\nexport const Wrapper = styled.a`\n display: block;\n`;\n\nexport const Image = styled.img`\n display: block;\n width: 100%;\n border-radius: 3px;\n`;\n\nexport const Placeholder = styled.a`\n display: block;\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 43.75%; // Proportions of Google Static Map (640x280)\n background-image: linear-gradient(-15deg, #dfe4ce, #c1d6ea, #dfe4ce);\n border-radius: 3px;\n color: ${(props) => props.theme.color.textDark};\n`;\n\nexport const PlaceholderAction = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n`;\n", "import { useContext, useEffect } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport { Vehicle } from '../../@types/codegen';\nimport useSearchItemBranch from '../../hooks/useSearchItemBranch';\n\nconst useCentralStorage = (vehicle?: Vehicle | null) => {\n const { centralStorageId, setCentralStorageId } = useContext(CentralStorageContext);\n\n const connections = vehicle?.branch?.connections;\n const branchId = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)?.id\n : undefined;\n\n const { data, loading } = useSearchItemBranch(vehicle?.id, branchId);\n\n useEffect(() => {\n if ((connections?.length || 0) > 0) {\n const match = centralStorageId\n ? connections?.find((x) => x.id === centralStorageId)\n : undefined;\n\n if (!match) {\n const first = connections?.[0];\n if (first) {\n setCentralStorageId(first.id);\n }\n }\n }\n }, [connections]);\n\n return {\n vehicle: (connections?.length || 0) > 0 ? data?.vehicle : vehicle,\n loading,\n };\n};\n\nexport default useCentralStorage;\n", "import { useQuery, QueryResult } from '@apollo/client';\nimport SEARCH_ITEM_BRANCH_QUERY from '../queries/SEARCH_ITEM_BRANCH_QUERY';\nimport { QueryVehicleArgs, Query } from '../@types/codegen';\n\nconst useSearchItemBranch = (\n id?: string | null,\n branch?: string | null\n): QueryResult<Query, QueryVehicleArgs> =>\n useQuery<Query, QueryVehicleArgs>(SEARCH_ITEM_BRANCH_QUERY, {\n variables: { id: id as string, branch: branch as string },\n skip: !id || !branch,\n });\n\nexport default useSearchItemBranch;\n", "import { gql } from '@apollo/client';\n\nconst HoursOpen = gql`\n fragment HoursOpen on HoursOpen {\n from\n until\n }\n`;\n\nconst SEARCH_ITEM_BRANCH_QUERY = gql`\n query SearchItemBranch($id: ID!, $branch: ID) {\n vehicle(id: $id, branch: $branch) {\n contact {\n name\n email\n phonenumber\n avatar\n }\n branch {\n connections {\n id\n name\n location {\n city\n county\n streetAddress\n postalCode\n position {\n latitude\n longitude\n }\n }\n }\n contact {\n name\n email\n phonenumber\n avatar\n }\n id\n description\n name\n homepage\n flags {\n mrf\n centralStorage\n ecommerce\n }\n logotype\n openingHours {\n monday {\n ...HoursOpen\n }\n tuesday {\n ...HoursOpen\n }\n wednesday {\n ...HoursOpen\n }\n thursday {\n ...HoursOpen\n }\n friday {\n ...HoursOpen\n }\n saturday {\n ...HoursOpen\n }\n sunday {\n ...HoursOpen\n }\n }\n organization {\n branches {\n id\n }\n parent {\n id\n }\n }\n location {\n position {\n latitude\n longitude\n }\n city\n county\n streetAddress\n postalCode\n }\n promos {\n description\n image\n title\n }\n services {\n markdown\n title\n }\n }\n insuranceOptions {\n insuranceHeader\n institute\n identifier\n logotype\n name\n description\n longDescription\n url\n insuranceText\n requiresPersonalNumber\n requiresDistance\n terms\n }\n }\n }\n ${HoursOpen}\n`;\n\nexport default SEARCH_ITEM_BRANCH_QUERY;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport { H1 } from '../../components/Heading/index';\n\nconst Page404 = () => (\n <Page>\n <PageSection large>\n <Container>\n <H1 noMargin>404</H1>\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default Page404;\n", "import React from 'react';\n\nimport Container from '../../components/Container/index';\nimport { Page, PageSection } from '../../components/Page/index';\nimport Loader from '../../components/Loader/index';\n\nconst PageLoading = () => (\n <Page>\n <PageSection large>\n <Container>\n <Loader />\n </Container>\n </PageSection>\n </Page>\n);\n\nexport default PageLoading;\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Category, Property } from '../../@types/vehicle-properties';\nimport PropertyTreeCreator from '../../utils/vehicle-properties/property-tree-creator';\nimport sortTree from '../../utils/vehicle-properties/property-tree-sorter';\nimport enrichWithHint from '../../utils/vehicle-properties/property-hint-enricher';\nimport addCustomProperties from '../../utils/vehicle-properties/custom-property-adder';\nimport removeProperties from '../../utils/vehicle-properties/property-remover';\nimport MetadataItem from './MetadataItem';\n\nimport { H5 } from '../../components/Heading/index';\nimport { Repeat } from '../../components/Repeat/index';\nimport { TableList } from '../../components/TableList/index';\nimport Tabs from '../../components/Tabs/index';\nimport { VehicleData } from '../../@types/codegen';\n\ninterface MetadataSubCategoryProps {\n name: string;\n properties: Property[];\n}\n\nconst MetadataSubCategory = ({ name, properties }: MetadataSubCategoryProps) => (\n <Repeat>\n <H5 as=\"h3\">{name}</H5>\n <TableList>\n {!!properties.length &&\n properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n);\n\ninterface MetadataCaregoryProps {\n properties: Property[];\n subCategories: Category[];\n}\n\nconst MetadataCategory = ({ properties, subCategories }: MetadataCaregoryProps) => (\n <div className=\"tab-section\">\n {!!properties.length && (\n <Repeat>\n <TableList>\n {properties.map((property, index) => (\n <MetadataItem\n name={property.name}\n hint={property.hint}\n value={property.value}\n unit={property.unit}\n key={`${property.name}-${index}`}\n />\n ))}\n </TableList>\n </Repeat>\n )}\n {!!subCategories.length &&\n subCategories.map((subCategory, index) => (\n <MetadataSubCategory\n name={subCategory.name}\n properties={subCategory.properties}\n key={`${subCategory.name}-${index}`}\n />\n ))}\n </div>\n);\n\ninterface PropertySetProps {\n propertySet: any;\n vehicleData: VehicleData;\n}\n\nconst PropertySet = ({ propertySet, vehicleData }: PropertySetProps) => {\n const [activeCategoryId, setActiveCategoryId] = useState(-1);\n const mappedProperties = useMemo(() => {\n if (!propertySet) {\n return undefined;\n }\n\n let newProperties = removeProperties(propertySet);\n newProperties = addCustomProperties(vehicleData, newProperties);\n const enrichedProperties = enrichWithHint(newProperties);\n\n const tree = new PropertyTreeCreator(enrichedProperties).create();\n sortTree(tree);\n return tree;\n }, [propertySet]);\n\n useEffect(() => {\n const categories =\n mappedProperties?.categories?.length !== undefined ? mappedProperties?.categories : undefined;\n\n if (activeCategoryId < 0 && categories !== undefined && categories.length > 0) {\n setActiveCategoryId(categories[0].id);\n }\n }, [mappedProperties]);\n\n const onTab = useCallback((id: string) => setActiveCategoryId(parseInt(id, 10)), []);\n\n const activeCategory = mappedProperties?.categories?.find(\n (category) => category.id === activeCategoryId\n );\n\n return (\n <>\n <Repeat>\n <Tabs\n tabs={\n mappedProperties?.categories?.map((category) => ({\n name: `${category.id}`,\n displayName: category.name,\n })) || []\n }\n active={`${activeCategoryId}`}\n onClick={onTab}\n />\n </Repeat>\n {activeCategory && (\n <Repeat>\n <MetadataCategory\n properties={activeCategory.properties}\n subCategories={activeCategory.subCategories}\n />\n </Repeat>\n )}\n </>\n );\n};\n\nexport default PropertySet;\n", "import { EnhancedProperty, Tree, Category, ItemCategory } from '../../@types/vehicle-properties';\n\nclass PropertyTreeCreator {\n private properties: { [key: string]: EnhancedProperty };\n\n constructor(properties: { [key: string]: EnhancedProperty }) {\n this.properties = properties;\n }\n\n create(): Tree {\n const categories = this.createTreeCategories();\n const rootProperties = this.getRootProperties();\n if (rootProperties.length) {\n categories.push({\n name: PropertyTreeCreator.DEFAULT_CATEGORY_NAME,\n id: PropertyTreeCreator.DEFAULT_CATEGORY_ID,\n subCategories: [],\n properties: rootProperties,\n });\n }\n\n const tree = {\n categories,\n };\n\n return tree;\n }\n\n private getRootProperties() {\n const rootProperties = Object.keys(this.properties)\n .filter(this.propertiesWithoutCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n return rootProperties;\n }\n\n private propertiesWithCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.id;\n\n private propertiesWithoutCategory = (propertyKey: string) =>\n !this.propertiesWithCategory(propertyKey);\n\n private isList = (property: EnhancedProperty) =>\n property.type === PropertyTreeCreator.TEXT_LIST_TYPE;\n\n private isNonList = (property: EnhancedProperty) => !this.isList(property);\n\n private createTreeCategories() {\n const categories = this.getCategories();\n const treeCategories = this.convertToTreeCategories(categories);\n return treeCategories;\n }\n\n private getCategories() {\n const categories = Object.keys(this.properties)\n .filter(this.propertiesWithCategory)\n .map((key) => this.properties[key].category as unknown as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n return categories;\n }\n\n private convertToTreeCategories(categories: ItemCategory[]) {\n return categories.map((category) => {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, category.id))\n .filter(this.propertiesWithoutSubCategory)\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n const subCategories = this.createTreeSubCategories(category.id);\n\n return {\n id: category.id,\n name: category.name,\n properties,\n subCategories,\n };\n });\n }\n\n private hasCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.id === categoryId;\n\n private propertiesWithSubCategory = (propertyKey: string) =>\n !!this.properties[propertyKey].category?.subCategory?.id;\n\n private propertiesWithoutSubCategory = (propertyKey: string) =>\n !this.propertiesWithSubCategory(propertyKey);\n\n private createTreeSubCategories(categoryId: number) {\n const subCategories = this.getSubCategoriesOfCategory(categoryId);\n const convertedSubCategories = subCategories\n .map((subCategory) => this.convertSubCategory(subCategory))\n .filter((category) => category.properties.length > 0);\n const createdSubCategories = this.createListSubCategories(categoryId);\n const treeCategories = convertedSubCategories.concat(createdSubCategories);\n\n return treeCategories;\n }\n\n private getSubCategoriesOfCategory(id: number) {\n const categories = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, id))\n .filter(this.propertiesWithSubCategory)\n .map((key) => this.properties[key].category?.subCategory as ItemCategory)\n .filter(PropertyTreeCreator.distinctCategories);\n\n return categories;\n }\n\n private convertSubCategory(subCategory: ItemCategory): Category {\n const properties = Object.keys(this.properties)\n .filter((key) => this.hasSubCategoryWithId(key, subCategory.id))\n .map((key) => this.properties[key])\n .filter(this.isNonList);\n\n return {\n id: subCategory.id,\n name: subCategory.name,\n properties,\n subCategories: [],\n };\n }\n\n private hasSubCategoryWithId = (propertyKey: string, categoryId: number) =>\n this.properties[propertyKey].category?.subCategory?.id === categoryId;\n\n private static distinctCategories = (\n category: ItemCategory,\n index: number,\n self: ItemCategory[]\n ) => {\n const firstOccuranceOfId = self.find((value) => value.id === category.id);\n return !!firstOccuranceOfId && self.indexOf(firstOccuranceOfId) === index;\n };\n\n private createListSubCategories(categoryId: number): Category[] {\n const listProperties = Object.keys(this.properties)\n .filter((key) => this.hasCategoryWithId(key, categoryId))\n .map((key) => this.properties[key])\n .filter(this.isList)\n .filter((prop) => (prop.value as string[]).length > 0);\n\n const createdSubCategories = listProperties.map((property, index) => ({\n id: PropertyTreeCreator.LIST_CATEGORY_START_ID + index,\n name: property.name,\n properties: this.asBoolProperties(property),\n subCategories: [],\n }));\n\n return createdSubCategories;\n }\n\n private asBoolProperties(listProperty: EnhancedProperty) {\n const values = listProperty.value as string[];\n const boolProperties = values.map((prop) => ({\n name: prop,\n value: true,\n type: 'bool',\n unit: listProperty.unit,\n hint: listProperty.hint,\n }));\n return boolProperties;\n }\n\n static DEFAULT_CATEGORY_NAME = 'Okategoriserat';\n static DEFAULT_CATEGORY_ID = 0;\n static TEXT_LIST_TYPE = 'text-list';\n static LIST_CATEGORY_START_ID = 100000;\n}\n\nexport default PropertyTreeCreator;\n", "import { Category } from '../../@types/vehicle-properties';\n\ninterface ID_ORDER_TYPE {\n '1000': 1;\n '71': 2;\n '2': 3;\n '1': 4;\n '8': 5;\n '6': 6;\n '119': 7;\n}\n\nconst ID_ORDER: ID_ORDER_TYPE = Object.freeze({\n '1000': 1,\n '71': 2,\n '2': 3,\n '1': 4,\n '8': 5,\n '6': 6,\n '119': 7,\n});\n\ntype ID_ORDER_KEY = keyof ID_ORDER_TYPE;\n\nconst compareById = (firstId: string, secondId: string) => {\n const firstOrder = ID_ORDER[firstId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ID_ORDER[secondId as ID_ORDER_KEY] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Category, second: Category) => {\n const result = compareById(`${first.id}`, `${second.id}`);\n\n if (result !== 0) {\n return result;\n }\n\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nexport default (first: Property, second: Property) => {\n return first.name.localeCompare(second.name);\n};\n", "import { Property } from '../../@types/vehicle-properties';\n\nimport compareProperties from './compare-properties';\n\ninterface Order {\n Varum\u00E4rke: 1;\n Modell: 2;\n Version: 3;\n Modell\u00E5r: 4;\n Tillverknings\u00E5r: 5;\n M\u00E4tarst\u00E4llning: 6;\n V\u00E4xell\u00E5da: 7;\n F\u00E4rg: 8;\n Registreringsnummer: 9;\n Br\u00E4nslegrupp: 10;\n Kaross: 11;\n Segment: 12;\n Skatt: 13;\n Malus: 14;\n Bonus: 15;\n}\n\nconst ORDER: Order = Object.freeze({\n Varum\u00E4rke: 1,\n Modell: 2,\n Version: 3,\n Modell\u00E5r: 4,\n Tillverknings\u00E5r: 5,\n M\u00E4tarst\u00E4llning: 6,\n V\u00E4xell\u00E5da: 7,\n F\u00E4rg: 8,\n Registreringsnummer: 9,\n Br\u00E4nslegrupp: 10,\n Kaross: 11,\n Segment: 12,\n Skatt: 13,\n Malus: 14,\n Bonus: 15,\n});\n\ntype OrderKey = keyof Order;\n\nconst compareByPredefinedOrder = (firstId: string, secondId: string) => {\n const firstOrder = ORDER[firstId as OrderKey] || Number.MAX_SAFE_INTEGER;\n const secondOrder = ORDER[secondId as OrderKey] || Number.MAX_SAFE_INTEGER;\n\n if (firstOrder < secondOrder) {\n return -1;\n } else if (secondOrder < firstOrder) {\n return 1;\n }\n return 0;\n};\n\nexport default (first: Property, second: Property) => {\n const result = compareByPredefinedOrder(`${first.name}`, `${second.name}`);\n\n if (result !== 0) {\n return result;\n }\n\n return compareProperties(first, second);\n};\n", "import { Tree } from '../../@types/vehicle-properties';\nimport compareCategories from './compare-categories';\nimport compareBasicProperties from './compare-basic-properties';\nimport compareProperties from './compare-properties';\n\nconst sort = (tree: Tree) => {\n tree.categories.sort(compareCategories);\n tree.categories.forEach((category) => {\n if (category.id === 1000) {\n category.properties.sort(compareBasicProperties);\n } else {\n category.properties.sort(compareProperties);\n category.subCategories.forEach((subCategory) => {\n subCategory.properties.sort(compareProperties);\n });\n }\n });\n};\n\nexport default sort;\n", "/**\n * Does not copy complex objects such as Date, functions etc.\n */\nconst deepCopy = <T extends Object>(object: T) => JSON.parse(JSON.stringify(object)) as T;\n\nexport default deepCopy;\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const HINTS = Object.freeze<{ [key: string]: string }>({\n abs: 'F\u00F6rhindrar att bromsarna l\u00E5ser sig och reducerar bromsstr\u00E4ckan.',\n acceleration: 'Antal sekunder som bilen beh\u00F6ver f\u00F6r att ta sig till 100 km/h.',\n adultOccupantNCAP:\n 'Po\u00E4ngen f\u00F6r skydd av vuxna best\u00E4ms genom tester av frontalkrockar, sidokrockar och whiplash som utf\u00F6rs f\u00F6r att bed\u00F6ma det skydd som bilen erbjuder f\u00F6r vuxna f\u00F6rare och passagerare samt bed\u00F6ma tillg\u00E4ngliga \u00E5tg\u00E4rder f\u00F6r snabb och s\u00E4ker r\u00E4ddning.',\n aeb: 'Bilen \u00E4r utrustad med ett bromssystem som hj\u00E4lper dig att undvika olyckor. Beroende p\u00E5 vilken niv\u00E5 av AEB bilen \u00E4r utrustad med kan de uppt\u00E4cka \u00E4ven cyklister och fotg\u00E4ngare, fr\u00E4mst i l\u00E4gre hastigheter i stadsmilj\u00F6 men \u00E4ven vid h\u00F6gre hastigheter och landsv\u00E4gsk\u00F6rning. Bilen f\u00F6rvarnar f\u00F6raren om potentiell fara och hj\u00E4lper \u00E4ven till att bromsa f\u00F6r att s\u00E4kerst\u00E4lla att olyckor undviks s\u00E5 l\u00E5ngt det g\u00E5r.',\n airbagCutOffSwitch:\n 'Det g\u00E5r att koppla ur krockkudden p\u00E5 passagerarsidan f\u00F6r att kunna s\u00E4tta dit en barnstol.',\n airbagDriver: 'Krockkudde f\u00F6r f\u00F6raren.',\n airbagFrontal: '',\n airbagFrontalHead: '',\n airbagKnees: '',\n airbagPassenger: 'Krockkudde f\u00F6r passagerare.',\n airbagSideChest: '',\n airbagSidePelvis: '',\n alcolock: 'F\u00F6r att kunna starta bilen beh\u00F6vs ett bl\u00E5stest som m\u00E4ter alkoholniv\u00E5n.',\n androidAuto:\n 'Bilen har st\u00F6d f\u00F6r dig med Androidtelefon att koppla upp den direkt till bilen. D\u00E5 f\u00F6ljer bland annat navigering, meddelanden samt musiken med fr\u00E5n telefonen.',\n annualBonus:\n 'Det h\u00E4r fordonet \u00E4r ber\u00E4ttigat till klimatbonus. Bonusen delas ut till den f\u00F6rsta registrerade \u00E4garen efter 6 m\u00E5nader. Klicka <a target=\"_blank\" rel=\"noopener noreferrer\" title=\"L\u00E4s mer om bonus/malus\" href=\"https://www.transportstyrelsen.se/bonusmalus\">h\u00E4r</a> f\u00F6r att l\u00E4sa mer.',\n annualMalus: 'Bilen har en f\u00F6rh\u00F6jd skatt de tre f\u00F6rsta \u00E5ren och d\u00E4refter g\u00E4ller ordinarie skatt.',\n annualTax: 'Summan fordonsskatt som m\u00E5ste betalas varje \u00E5r.',\n antiTheftAlarm: 'Bilen har ett larmsystem vid f\u00F6rs\u00F6k till inbrott.',\n appConnect:\n 'Med App Connect kan du koppla din mobiltelefon s\u00E5 att anpassade appar syns direkt i bilens display. Fungerar b\u00E5de f\u00F6r iPhone och Android.',\n appleCarPlay:\n 'Bilen har st\u00F6d f\u00F6r Apple i bilens inbyggda display, s\u00E5 du enkelt kan koppla upp din telefon och prata med bilen med hj\u00E4lp av Siri.',\n aux: 'Bilen har en AUX-ing\u00E5ng, f\u00F6r att exempelvis spela musik fr\u00E5n en telefon.',\n auxiliaryLamps: '',\n batteryCapacity: 'Anger hur m\u00E5nga kilowatt-timmar batteriet innehar.',\n batteryWarrantyDistance: '',\n batteryWarrantyTime: '',\n blindSpotWarner:\n 'En varningslampa indikerar i ytterbackspegeln n\u00E4r ett fordon befinner sig i d\u00F6da vinkeln.',\n bluetooth: 'Bilen kan ansluta enheter via Bluetooth, f\u00F6r exempelvis mobilsamtal eller musik.',\n bluetoothAudio: 'Bilen kan ansluta enheter via Bluetooth f\u00F6r att lyssna p\u00E5 musik.',\n bluetoothPhone: 'Bilen kan ansluta enheter via Bluetooth f\u00F6r telefonsamtal.',\n brakeAssistance: 'S\u00E4kerhetssystem som kan hj\u00E4lpa till att bromsa och undvika olyckor.',\n carDamageWarrantyDistance: '',\n carDamageWarrantyTime: '',\n centerDisplay: 'Bilen har en sk\u00E4rm mitt i bilen, mellan f\u00F6rare och passagerare.',\n centralLocking: 'Elektriskt l\u00E5ssystem, som g\u00F6r att alla d\u00F6rrar l\u00E5ses och \u00F6ppnas samtidigt.',\n chargeTimeNormal: 'Hur l\u00E5ng tid tar det att ladda bilen i ett standard eln\u00E4t.',\n chargeTimeQuick:\n 'Hur l\u00E5ng tid tar det att ladda bilen med en snabbladdare anpassad f\u00F6r laddning av elbilar.',\n chassis: 'Vilken typ/form bilen har.',\n childOccupantNCAP:\n 'Bed\u00F6mningen av skyddet av barn t\u00E4cker tre viktiga aspekter: det skydd som erbjuds av bilbarnstolar i frontal- och sidokrockstest; fordonets m\u00F6jligheter att inhysa bilbarnstolar med olika storlek och utformning; och tillg\u00E4ngliga \u00E5tg\u00E4rder f\u00F6r s\u00E4ker transport av barn i bilen.',\n childSafetyLocks:\n 'D\u00F6rrarna l\u00E5ses automatiskt n\u00E4r man k\u00F6r iv\u00E4g, s\u00E5 att de inte ska \u00F6ppnas under k\u00F6rning.',\n childSeatBeltPassenger: 'Passagerars\u00E4tet har utf\u00E4llbar sittkudde f\u00F6r barn.',\n childSeatBeltRear: 'Baks\u00E4tet har utf\u00E4llbar sittkudde f\u00F6r barn.',\n co2: 'Anger hur mycket koldioxid fordonet sl\u00E4pper ut enligt m\u00E4tmetoden NEDC baserat p\u00E5 teoretisk k\u00F6rning.',\n colorName: '',\n combinedEmissionsWLTP:\n 'Anger hur mycket koldioxid fordonet sl\u00E4pper ut enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning.',\n cruiseControl: 'Hj\u00E4lpmedel som h\u00E5ller bilens hastighet automatiskt.',\n curtainAirbags: '',\n displacementCC: 'Den sammanlagda volymen av motorns cylindrar. M\u00E4ts i kubikcentimeter.',\n displacementLitres: 'Den sammanlagda volymen av motorns cylindrar. M\u00E4ts i liter.',\n driverAlertnessDetection:\n 'Varningssignal uppst\u00E5r n\u00E4r k\u00F6rningss\u00E4ttet tyder p\u00E5 bristande uppm\u00E4rksamhet.',\n drivingWheel: 'Vilka hjul som motorn ger kraft till och snurrar.',\n electricalEngine: '',\n electricalRange: 'R\u00E4ckvidd enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning',\n electricalRangeEPA:\n 'R\u00E4ckvidd enligt den amerikanska m\u00E4tmetoden EPA. Enligt m\u00E5nga den allra str\u00E4ngaste metoden.',\n electricalRangeNEDC: 'R\u00E4ckvidd enligt m\u00E4tmetoden NEDC baserat p\u00E5 teoretisk k\u00F6rning.',\n electricalRangeWLTP: 'R\u00E4ckvidd enligt m\u00E4tmetoden WLTP baserat p\u00E5 verklig k\u00F6rning.',\n electricalSeatDriver:\n 'Bilens f\u00F6rarstol g\u00E5r att man\u00F6vrera med el f\u00F6r mjukare och mer precis positionering.',\n electricalSeatPassenger: 'Bilens passagerarstol g\u00E5r att man\u00F6vrera med el.',\n emergencyCalling: 'Bilen kan automatiskt larma SOS vid en olycka.',\n engineConfiguration: 'Anger fordonets typ av motor, vilken typ av cylindrar den innehar.',\n engineCylinders:\n \"Antalet ger en indikation p\u00E5 motorns storlek. Ett 'vanligt' antal ligger p\u00E5 4 st.\",\n engineName: '',\n engineVolume: '',\n enrichmentProviderEquipPackages: '',\n enrichmentProviderExteriorPackages: '',\n enrichmentProviderInteriorPackages: '',\n enrichmentProviderTrimPackages: '',\n environmentClass: 'Anv\u00E4nds f\u00F6r att st\u00E4lla krav p\u00E5 fordonets utsl\u00E4pp.',\n finish: '',\n fuelConsumptionCityDriving: 'Br\u00E4nslef\u00F6rbrukning vid stadsk\u00F6rning.',\n fuelConsumptionCountryRoadDriving: 'Br\u00E4nslef\u00F6rbrukning vid landsv\u00E4gsk\u00F6rning.',\n fuelConsumptionMixedDriving:\n 'Br\u00E4nslef\u00F6rbrukning vid blandad k\u00F6rning. Dvs. stadsk\u00F6rning och landsv\u00E4gsk\u00F6rning under en och samma f\u00E4rd.',\n fuelType: 'Vad bilen ska tankas med och drivs av.',\n gearboxName: '',\n gestureControls: 'Mittsk\u00E4rmen g\u00E5r att man\u00F6vrera med r\u00F6relser.',\n gps: 'Bilen \u00E4r utrustad med navigationsutrustning s\u00E5 du enkelt kan ta dig dit du ska.',\n grossWeight: 'Anger bilens vikt inklusive max till\u00E5ten lastvikt.',\n groundClearence: 'Avst\u00E5ndet mellan bilens undersida och marken.',\n hasAutomaticGearbox: '',\n hdmi: 'Bilen har en HDMI-port.',\n headRoomFront: 'L\u00E4gsta takh\u00F6jden i frams\u00E4tet.',\n headRoomRear: 'L\u00E4gsta takh\u00F6jden i baks\u00E4tet.',\n headUpDisplay:\n 'Bilen \u00E4r utrustad med en projicerad display i ditt synf\u00E4lt, s\u00E5 du kan se exempelvis nuvarande hastighet utan att beh\u00F6va v\u00E4nda bort blicken fr\u00E5n v\u00E4gen.',\n heatedSteeringWheel: '',\n height: 'Avst\u00E5ndet fr\u00E5n bilens undersida till \u00F6versida.',\n hybridComponentsWarrantyDistance: '',\n hybridComponentsWarrantyTime: '',\n interiorMaterial: 'Material p\u00E5 interi\u00F6ren i bilen, dvs detaljer i bilens insida.',\n isofixRearSeat: 'Universell f\u00E4stanordning f\u00F6r barnstolar.',\n keylessEntry:\n 'Bilens d\u00F6rrar och bagage \u00F6ppnas n\u00E4r den k\u00E4nner av att bilnyckeln \u00E4r i n\u00E4rheten och du tar tag i handtaget. Du beh\u00F6ver d\u00E4rmed inte anv\u00E4nda nyckeln i sig f\u00F6r att \u00F6ppna bilens d\u00F6rrar. ',\n keylessStart:\n 'Bilen startas med ett knapptryck ist\u00E4llet f\u00F6r att bilnyckeln beh\u00F6ver vridas om. Det r\u00E4cker med att bilnyckeln befinner sig i bilen (kan du mao ha den i fickan hela bilresan).',\n laneAssistance: 'Funktion som hj\u00E4lper till att h\u00E5lla bilen inom k\u00F6rf\u00E4ltet.',\n legRoomFront: 'Avst\u00E5nd mellan instrumentpanelen och frams\u00E4te.',\n legRoomRear: 'Avst\u00E5nd mellan frams\u00E4tets rygg och baks\u00E4tet',\n length: 'Avst\u00E5ndet fr\u00E5n bilens baksida till framsida.',\n lowBeam: '',\n mainBeam: '',\n mainBeamAssistance: 'Bilen sl\u00E5r p\u00E5 och av helljuset per automatik, s\u00E5 du slipper g\u00F6ra det sj\u00E4lv.',\n manufactureYear: '\u00C5ret bilen tillverkades.',\n massage: 'Bilens s\u00E4te har inbyggd massage.',\n maxLoadWeight: '',\n maxRoofWeight: 'Hur m\u00E5nga kilo last taket klarar av.',\n maxSpeed: 'H\u00F6gsta hastigheten som bilen g\u00E5r att k\u00F6ra.',\n maxTrailerLoadBraked8Percent: '',\n maxTrailerLoadUnbraked: 'Vikten du f\u00E5r dra p\u00E5 ett sl\u00E4p som inte \u00E4r utrustat med egna bromsar.',\n mildHybrid:\n 'Bilen \u00E4r utrustad med en elmotor som fungerar b\u00E5de som startmotor och generator och st\u00F6ttar f\u00F6rbr\u00E4nningsmotorn, vilket ger l\u00E4gre br\u00E4nslef\u00F6rbrukning och d\u00E4rmed minskade utsl\u00E4ppsniv\u00E5er.',\n mileage: 'Antal mil som bilen har k\u00F6rts. I bilen anges det i kilometer ist\u00E4llet.',\n modelName: 'Vilket utf\u00F6rande av bilmodellen det \u00E4r.',\n modelYear:\n 'Modell\u00E5r s\u00E4tts av tillverkaren. Handlaren \u00E4ndrar ibland modell\u00E5ret f\u00F6r att matcha transportstyrelsens definition f\u00F6r <i>\u00E5rsmodell</i>. Definitionen f\u00F6r \u00E5rsmodell inneb\u00E4r att bilar tillverkade andra halvan av \u00E5ret f\u00E5r n\u00E4sta \u00E5rs modell\u00E5r.',\n ncapStar:\n 'Universellt s\u00E4kerhetsbetyg f\u00F6r bilar, fler stj\u00E4rnor inneb\u00E4r h\u00F6gre s\u00E4kerhet. Skalan g\u00E5r fr\u00E5n 0 till 5 d\u00E4r 5 \u00E4r det h\u00F6gsta betyget. S\u00E5 h\u00E4r beskriver Euro NCAP sj\u00E4lva att slutbetyget ska utl\u00E4sas: <br/>' +\n '<br/>' +\n '5 stj\u00E4rnor: Som helhet utm\u00E4rkt prestanda inom krockskydd och v\u00E4l utrustad med omfattande teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '4 stj\u00E4rnor: Som helhet bra prestanda inom krockskydd, det kan finnas ytterligare teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '3 stj\u00E4rnor: \u00C5tminstone genomsnittligt passagerarskydd men inte alltid utrustad med de senaste funktionerna f\u00F6r att undvika kollisioner<br/><br/>' +\n '2 stj\u00E4rnor: Nominellt krockskydd men saknar teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '1 stj\u00E4rna: Marginellt krockskydd och viss teknik f\u00F6r att undvika kollisioner<br/><br/>' +\n '0 stj\u00E4rnor: Uppfyller standarder f\u00F6r typgodk\u00E4nnande s\u00E5 att fordonet f\u00E5r s\u00E4ljas men saknar kritisk modern s\u00E4kerhetsteknik.',\n ncapYear: '\u00C5ret som bilen s\u00E4kerhets- och krocktestades.',\n newVehicleWarrantyDistance: '',\n newVehicleWarrantyTime: '',\n noiseReducingWindows: 'Bilens rutor \u00E4r ljudisolerade f\u00F6r h\u00F6gre komfort.',\n numberOfGears: 'Antal v\u00E4xlar i v\u00E4xell\u00E5dan.',\n numberOfSpeakers: 'Anger totalt antal h\u00F6gtalare i bilen, ju fler h\u00F6gtalare desto h\u00E4ftigare ljud!',\n numberOfUSBPorts: '',\n otherAirbags: '',\n parkingAssistance: 'Funktion som assisterar vid fickparkering.',\n parkingSensorsFront: 'Ljudsignal som indikerar n\u00E4r bilens fr\u00E4mre del n\u00E4rmar sig ett objekt.',\n parkingSensorsRear: 'Ljudsignal som indikerar n\u00E4r bilens bakre del n\u00E4rmar sig ett objekt.',\n pedestrianNCAP:\n 'Euro NCAP bed\u00F6mer hur v\u00E4l bilar skyddar sina passagerare men testar \u00E4ven hur bilar skyddar oskyddade trafikanter \u2013 fotg\u00E4ngare och cyklister \u2013 som de kan kollidera med.',\n preHeater: 'V\u00E4rmer motorn n\u00E4r det \u00E4r kallt ute f\u00F6r att underl\u00E4tta start.',\n rainSensors: 'Vindrutetorkarna aktiveras och anpassas automatiskt i f\u00F6rh\u00E5llande till regnet.',\n remoteStart:\n 'M\u00F6jligg\u00F6r att du kan starta bilens motor med hj\u00E4lp av exempelvis en app i telefonen',\n rimSize: 'F\u00E4lgstorlek angivet i tum.',\n roofColor: 'N\u00E5gon del av bilen, ex taket skiljer sig i kul\u00F6r mot \u00F6vriga bilen.',\n roofRailing: 'Bilen har takreling som du kan f\u00E4sta takr\u00E4cken i.',\n safetyAssistNCAP:\n 'Po\u00E4ngen f\u00F6r f\u00F6rarst\u00F6dsystem best\u00E4ms genom tester av de viktigaste f\u00F6rarst\u00F6d teknikerna som st\u00F6der s\u00E4ker k\u00F6rning f\u00F6r att undvika och begr\u00E4nsa olyckor.',\n seats: 'Antal personer som f\u00E5r \u00E5ka i bilen.',\n segment: 'Vilken typ av bil det handlar om - t.ex. familjebil',\n serviceWeight: 'Anger hur mycket bilen v\u00E4ger med en passagerare som v\u00E4ger ca 75kg.',\n shoulderRoomFront: 'Avst\u00E5nd i bredd f\u00F6r bilens frams\u00E4te.',\n shoulderRoomRear: 'Avst\u00E5nd i bredd f\u00F6r bilens baks\u00E4te.',\n sideMirrorFolding:\n 'Bilens yttre backspeglar g\u00E5r att automatiskt f\u00E4lla in, exempelvis bra p\u00E5 tr\u00E5nga parkeringar.',\n speakerBrand: '',\n startAndStop: 'Bilens motor stoppas n\u00E4r bilen st\u00E5r still f\u00F6r att minska utsl\u00E4ppen.',\n steeringWheelMaterial: '',\n sunRoof: '',\n tankVolume: 'Antal liter br\u00E4nsle som ryms i tanken.',\n timingBeltServiceIntervalDistance:\n 'Bilen \u00E4r utrustad med kamrem som m\u00E5ste bytas vid olika distansintervall.',\n timingBeltServiceIntervalTime:\n 'Bilen \u00E4r utrustad med kamrem som m\u00E5ste bytas vid olika tidsintervall.',\n tintedWindows: 'Bilens rutor har en m\u00F6rkare toning.',\n tiresFront:\n 'D\u00E4ckdimension fram. Presenteras i h\u00F6jd/bredd och inom ett spann. D\u00E4cken som sitter p\u00E5 bilen m\u00E5ste allts\u00E5 falla inom det spannet.',\n tiresRear:\n 'D\u00E4ckdimension bak. Presenteras i h\u00F6jd/bredd och inom ett spann. D\u00E4cken som sitter p\u00E5 bilen m\u00E5ste allts\u00E5 falla inom det spannet.',\n torque:\n 'Bilens vridkraft. H\u00F6g siffra m\u00F6jligg\u00F6r att t.ex. dra tunga sl\u00E4p. Dieselmotorer har generellt mer vridmoment.',\n touchScreen: 'Mittsk\u00E4rmen i bilen \u00E4r en peksk\u00E4rm.',\n towHitch: '',\n towHitchDetachable: '',\n towHitchFoldable: '',\n trafficSignRecognition: 'Bilen \u00E4r utrustad med kameror som l\u00E4ser av g\u00E4llande trafikskyltar.',\n trailerTotalWeightB: 'Vikten man f\u00E5r dra med sl\u00E4p och ett vanligt B-k\u00F6rkort.',\n transmissionKnobMaterial: '',\n trcSystem: 'F\u00E5r bilen att skicka kraft till hjulet som har b\u00E4sta kontakt med underlaget.',\n tripComputer:\n 'I f\u00E4rddatorn som sitter framf\u00F6r ratten kan du se lite information om motorn och br\u00E4nslef\u00F6rbrukningen, bland annat kan du ofta l\u00E4sa ut den \u00E5terst\u00E5ende k\u00F6rstr\u00E4ckan p\u00E5 nuvarande br\u00E4nslevolym.',\n trunkDepth: '',\n trunkHeight: '',\n trunkOutlet: '',\n trunkSpace: 'Volym p\u00E5 bagageutrymmet med uppf\u00E4llda s\u00E4ten. Det m\u00E4ts i liter.',\n trunkSpaceFront: '',\n trunkWidth: '',\n typeOfElectricCar: 'Anger om bilen drivs av el eller om den \u00E4r en hybrid av el och br\u00E4nsle.',\n upholstery: '',\n usb: 'Bilen \u00E4r utrustad med en USB-port',\n ventilatedSeats:\n 'Bilens stolar har ventilation inbyggd, bland annat bra f\u00F6r att f\u00E5 bort fukt fr\u00E5n s\u00E4tena.',\n wheelBase: 'Avst\u00E5ndet mellan fram- och bakhjul.',\n wiFi: 'Bilen \u00E4r utrustad med ett internt WIFI som du kan koppla upp dina egna enheter mot.',\n width: 'Avst\u00E5ndet mellan bilens b\u00E5da yttre l\u00E5ngsidor.',\n windowLifts: '',\n wirelessPhoneCharger:\n 'Bilen \u00E4r utrustad med induktionsladdare, s\u00E5 att telefoner som st\u00F6djer tr\u00E5dl\u00F6s laddning kan laddas i bilen utan laddningssladd.',\n});\n\nconst enrichWithHint = (properties: { [key: string]: EnhancedProperty }) => {\n const clone = deepCopy(properties);\n\n const keys = Object.keys(clone);\n keys.forEach((key) => {\n if (!!HINTS[key]) {\n clone[key].hint = HINTS[key];\n }\n });\n\n return clone;\n};\n\nexport default enrichWithHint;\n", "import { VehicleData } from '../../@types/codegen';\nimport { EnhancedProperty, ItemCategory } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nexport const TEXT_TYPE = 'text';\nexport const NUMBER_TYPE = 'number';\nexport const BASIC_CATEGORY: ItemCategory = Object.freeze({\n id: 1000,\n name: 'Basuppgifter',\n subCategory: null,\n});\nexport const ENGINE_SUBCATEGORY: ItemCategory = Object.freeze({\n id: 6,\n name: 'Motor & Prestanda',\n subCategory: {\n id: 54,\n name: 'Motor',\n subCategory: null,\n },\n});\n\nclass PropertyBuilder {\n name: string = '';\n value: string | number = '';\n type: string = 'unknown';\n unit: string | null = null;\n hint: string | null = null;\n category: ItemCategory | null = null;\n\n withName(name: string) {\n this.name = name;\n return this;\n }\n\n withValue(value: string | number) {\n this.value = value;\n return this;\n }\n\n withType(type: string) {\n this.type = type;\n return this;\n }\n\n withCategory(category: ItemCategory) {\n this.category = category;\n return this;\n }\n\n withUnit(unit: string) {\n this.unit = unit;\n return this;\n }\n\n build(): EnhancedProperty {\n return {\n name: this.name,\n value: this.value,\n type: this.type,\n unit: this.unit,\n hint: this.hint,\n category: this.category,\n };\n }\n}\n\nexport default (item: VehicleData, properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n if (!!item.manufacturer) {\n newProperties.manufacturer = new PropertyBuilder()\n .withName('Varum\u00E4rke')\n .withValue(item.manufacturer)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelSeries) {\n newProperties.modelSeries = new PropertyBuilder()\n .withName('Modell')\n .withValue(item.modelSeries)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelName) {\n newProperties.modelName = new PropertyBuilder()\n .withName('Version')\n .withValue(item.modelName)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.modelYear) {\n newProperties.modelYear = new PropertyBuilder()\n .withName('Modell\u00E5r')\n .withValue(item.modelYear)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.manufactureYear) {\n newProperties.manufactureYear = new PropertyBuilder()\n .withName('Tillverknings\u00E5r')\n .withValue(item.manufactureYear)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.mileage) {\n newProperties.mileage = new PropertyBuilder()\n .withName('M\u00E4tarst\u00E4llning')\n .withValue(item.mileage)\n .withType(NUMBER_TYPE)\n .withCategory(BASIC_CATEGORY)\n .withUnit('mil')\n .build();\n }\n\n if (!!item.gearboxType) {\n newProperties.gearboxType = new PropertyBuilder()\n .withName('V\u00E4xell\u00E5da')\n .withValue(item.gearboxType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.registrationNumber) {\n newProperties.registrationNumber = new PropertyBuilder()\n .withName('Registreringsnummer')\n .withValue(item.registrationNumber)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (!!item.fuelType) {\n newProperties.fuelType = new PropertyBuilder()\n .withName('Br\u00E4nslegrupp')\n .withValue(item.fuelType)\n .withType(TEXT_TYPE)\n .withCategory(BASIC_CATEGORY)\n .build();\n }\n\n if (item.enginePower) {\n newProperties.enginePower = new PropertyBuilder()\n .withName('Effekt')\n .withValue(item.enginePower)\n .withUnit('hk')\n .withType(NUMBER_TYPE)\n .withCategory(ENGINE_SUBCATEGORY)\n .build();\n }\n\n return newProperties;\n};\n", "import { EnhancedProperty } from '../../@types/vehicle-properties';\nimport deepCopy from '../deep-copy';\n\nconst PROPERTY_BLACK_LIST = Object.freeze(['towHitchFoldable']);\n\nconst isForbiddenProperty = (key: string) => PROPERTY_BLACK_LIST.includes(key);\n\nconst CATEGORY_WHITE_LIST = Object.freeze([1, 2, 6, 8, 71, 119, 1000]);\n\nconst hasForbiddenCategory = (property: EnhancedProperty) =>\n !property.category ||\n !property.category.id ||\n !CATEGORY_WHITE_LIST.includes(property.category.id);\n\nexport default (properties: { [key: string]: EnhancedProperty }) => {\n const newProperties = deepCopy(properties);\n\n Object.keys(properties).forEach((key) => {\n const property = properties[key];\n if (hasForbiddenCategory(property)) {\n delete newProperties[key];\n } else if (isForbiddenProperty(key)) {\n delete newProperties[key];\n }\n });\n\n return newProperties;\n};\n", "import React, { useState, useCallback } from 'react';\nimport { Property } from '../../@types/vehicle-properties';\n\nimport {\n TableListItem,\n TableListKey,\n TableListValue,\n TableListBooleanPos,\n TableListBooleanNeg,\n} from '../../components/TableList/index';\nimport { IconCheck, IconCancel } from '../../components/Icon/index';\nimport { SrOnly } from '../../components/SrOnly/index';\nimport { ButtonInline } from '../../components/Button/index';\nimport Modal from '../../components/Modal/index';\nimport Content from '../../components/Content/index';\n\nconst formatValue = (value: Property['value'], unit: Property['unit']) => {\n if (typeof value === 'boolean') {\n return value ? (\n <TableListBooleanPos title=\"Ja\">\n <SrOnly>Ja</SrOnly>\n <IconCheck block />\n </TableListBooleanPos>\n ) : (\n <TableListBooleanNeg title=\"Nej\">\n <SrOnly>Nej</SrOnly>\n <IconCancel block />\n </TableListBooleanNeg>\n );\n }\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n if (!!value && !!unit) {\n return `${value} ${unit}`;\n }\n return value;\n};\n\ninterface MetadataItemProps {\n name: string;\n hint?: string | null | undefined;\n value: Property['value'];\n unit: Property['unit'];\n}\n\nconst MetadataItem = ({ name, hint, value, unit }: MetadataItemProps) => {\n const [foldout, setFoldout] = useState(false);\n const onToggleFoldout = useCallback(() => setFoldout(!foldout), [foldout]);\n\n const presentedValue = formatValue(value, unit);\n\n return (\n <TableListItem>\n <TableListKey>\n {hint ? (\n <ButtonInline onClick={onToggleFoldout} title={`Mer information om ${name}`}>\n {name}\n </ButtonInline>\n ) : (\n name\n )}\n </TableListKey>\n <TableListValue>{value !== undefined ? presentedValue : 'Uppgift saknas'}</TableListValue>\n {hint && foldout && (\n <Modal title={name} onClose={onToggleFoldout}>\n <Content dangerouslySetInnerHTML={{ __html: hint }} />\n </Modal>\n )}\n </TableListItem>\n );\n};\n\nexport default MetadataItem;\n", "import styled from 'styled-components';\n\nimport { size } from '../../layout/helpers';\n\nexport const TableList = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n border-top: 1px solid ${(props) => props.theme.color.border};\n border-bottom: 1px solid ${(props) => props.theme.color.border};\n font-size: 0.875rem;\n`;\n\nexport const TableListItem = styled.li`\n display: flex;\n align-items: center;\n padding: ${size(1)} 0;\n\n & + & {\n border-top: 1px solid ${(props) => props.theme.color.border};\n }\n`;\n\nexport const TableListKey = styled.div`\n flex: 1 1 auto;\n`;\n\nexport const TableListValue = styled.div`\n flex-shrink: 0;\n padding-left: ${size(1)};\n`;\n\nexport const TableListBooleanPos = styled.div`\n color: ${(props) => props.theme.color.ui.positive};\n`;\n\nexport const TableListBooleanNeg = styled.div`\n color: ${(props) => props.theme.color.ui.negative};\n`;\n", "import * as React from 'react';\n\nimport { Action, Item, List, Wrapper } from './wrapper';\n\nexport interface ITabItem {\n name: string;\n displayName: string;\n}\n\nexport interface ITabInterface<T> {\n tabs: ITabItem[];\n active: string;\n onClick?: (name: T) => void;\n}\n\nconst Tabs = <T extends {}>({ tabs, active, onClick }: ITabInterface<T>) => (\n <Wrapper>\n <List>\n {tabs.map((tab) => (\n <Item key={tab.name}>\n <Action\n title={tab.displayName}\n onClick={onClick ? () => onClick(tab.name as unknown as T) : undefined}\n active={tab.name === active ? 'true' : undefined}\n >\n {tab.displayName}\n </Action>\n </Item>\n ))}\n </List>\n </Wrapper>\n);\n\nexport default Tabs;\n", "import * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { ButtonReset } from '../Button/index';\nimport { size } from '../../layout/helpers';\n\nexport const Wrapper = styled.div`\n overflow: hidden;\n margin-top: ${size(-1)};\n margin-left: ${size(-1)};\n margin-right: ${size(-1)};\n\n ${(props) => props.theme.breakpoint.LtSm} {\n margin-left: ${size(-2)};\n margin-right: ${size(-2)};\n }\n`;\n\nexport const List = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n white-space: nowrap;\n font-size: 0;\n\n ${(props) => props.theme.breakpoint.LtSm} {\n padding-left: ${size(1)};\n padding-right: ${size(1)};\n }\n`;\n\nexport const Item = styled.li`\n display: inline-block;\n vertical-align: bottom;\n font-size: 1rem;\n`;\n\ntype ActionProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n> & {\n active?: boolean | string;\n};\n\nexport const Action = styled(ButtonReset).attrs(() => ({\n role: 'tab',\n className: 'wayke__theme wayke__font--bold',\n}))<ActionProps>`\n position: relative;\n display: block;\n padding: ${size(1)};\n color: ${(props) => props.theme.color.textDarkLighten};\n\n :hover {\n color: ${(props) => props.theme.color.textDark};\n }\n\n :after {\n content: '';\n position: absolute;\n bottom: 0;\n left: ${size(1)};\n right: ${size(1)};\n height: 2px;\n background-color: ${(props) => props.theme.color.textDark};\n transform: scaleY(0);\n transition: transform 200ms ease;\n z-index: 1;\n }\n\n ${(props) =>\n props.active &&\n css`\n color: ${(props) => props.theme.color.textDark};\n\n :after {\n transform: scaleY(1);\n }\n `}\n`;\n", "import React from 'react';\n\nimport { Scalars } from '../../@types/codegen';\nimport {\n PdfListItem,\n PdfSubtitle,\n PdfTitle,\n PdfContainer,\n PdfListInner,\n PdfLink,\n PdfColumn,\n} from './wrapper';\n\ninterface PdfDownloadItemProps {\n document: Scalars['FileDocument'];\n}\n\nexport const PdfDownloadItem = ({ document }: PdfDownloadItemProps) => (\n <PdfListItem>\n <PdfListInner>\n <PdfColumn>\n <PdfTitle>{document.name}</PdfTitle>\n <PdfSubtitle>{document.contentType}</PdfSubtitle>\n </PdfColumn>\n <PdfColumn>\n <PdfLink href={document.url} rel=\"noopener noreferrer nofollow\" target=\"_blank\">\n \u00D6ppna\n </PdfLink>\n </PdfColumn>\n </PdfListInner>\n </PdfListItem>\n);\n\ninterface PdfDownloadContainerProps {\n documents: Scalars['FileDocument'][];\n}\n\nexport const PdfDownloadContainer = ({ documents }: PdfDownloadContainerProps) => (\n <PdfContainer>\n {documents.map((document, i) => (\n <PdfDownloadItem key={`${document.url}-${i}`} document={document} />\n ))}\n </PdfContainer>\n);\n\nexport default PdfDownloadContainer;\n", "import styled from 'styled-components';\nimport { size } from '../../layout/helpers';\n\nexport const PdfListItem = styled.li.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text',\n}))`\n flex: 0 0 50%;\n padding: ${size(1)};\n\n ${({ theme }) => theme.breakpoint.LtSm} {\n flex: 0 0 100%;\n }\n`;\n\nexport const PdfContainer = styled.ul`\n list-style: none;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n margin: ${size(-1)};\n`;\n\nexport const PdfLink = styled.a.attrs(() => ({\n className: 'wayke__theme wayke__color--primary-text wayke__font--bold',\n}))`\n text-decoration: none;\n font-size: 0.875rem;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const PdfTitle = styled.div`\n color: ${(props) => props.theme.color.textDark};\n`;\nexport const PdfSubtitle = styled.div`\n color: ${(props) => props.theme.color.textDarkLighten};\n`;\n\nexport const PdfColumn = styled.div`\n flex 0 0 auto;\n &:first-child {\n flex: 1 1 auto;\n }\n`;\n\nexport const PdfListInner = styled.div`\n position: relative;\n border: 1px solid ${(props) => props.theme.color.border};\n padding: ${size(1.5)};\n display: flex;\n align-items: center;\n :hover {\n background-color: ${(props) => props.theme.color.hoverOverlay};\n }\n`;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport SearchProvider from '../State/Search/SearchProvider';\nimport Root from '../components/Root/index';\n\nimport useEcom from '../hooks/useEcom';\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeProviderSettings {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n graphQlUrl: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n}\n\nexport type WaykeProviderProps = WaykeProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: WaykeProviderProps) => {\n useEcom(ecomSettings);\n\n return (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <SearchProvider\n url={url}\n apiKey={apiKey}\n useQueryParamsFromUrl={useQueryParamsFromUrl}\n pathRoute={pathRoute}\n >\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </SearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n );\n};\n\nexport default WaykeProvider;\n", "import React from 'react';\nimport { ApolloProvider as ApolloProviderBase, ApolloClient, InMemoryCache } from '@apollo/client';\n\nconst GraphqlProvider = ({ uri, children }: { uri: string; children: React.ReactNode }) => {\n const client = new ApolloClient({ uri, cache: new InMemoryCache() });\n return <ApolloProviderBase client={client}>{children}</ApolloProviderBase>;\n};\n\nexport default GraphqlProvider;\n", "import React from 'react';\n\nimport { ThemeProvider as ThemeProviderBase } from 'styled-components';\n\nimport theme from '../layout/theme';\n\ninterface ThemeProps {\n children: React.ReactNode;\n}\n\nconst ThemeProvider = ({ children }: ThemeProps) => (\n <ThemeProviderBase theme={theme}>{children}</ThemeProviderBase>\n);\n\nexport default ThemeProvider;\n", "import React, { useState, useEffect, useCallback } from 'react';\n\nimport { Facet, Document, Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { SearchContext } from './SearchContext';\nimport { getUrlSearchParamsFromUrl } from '../../utils/url';\nimport { WaykePubSub } from '../../index';\nimport { ActionOnFilterUpdate } from '../../utils/pubsub/Actions';\nimport usePath from '../Path/usePath';\n\ninterface SearchProviderProps {\n url: string;\n apiKey?: string;\n useQueryParamsFromUrl?: boolean;\n pathRoute?: string;\n children: React.ReactNode;\n}\n\nconst initialSearchParams = new URLSearchParams();\ninitialSearchParams.set('hits', '30');\ninitialSearchParams.set('sort', 'published-desc');\n\nconst SearchProvider = ({\n url,\n apiKey,\n useQueryParamsFromUrl,\n pathRoute,\n children,\n}: SearchProviderProps) => {\n const { replaceState, pushState } = usePath();\n const [queryFilter, setQueryFilter] = useState<QueryFilter>({\n searchParams: initialSearchParams,\n });\n\n const [initialFacets, setInitialFacets] = useState<Facet[]>();\n const [documents, setDocuments] = useState<Document[]>();\n const [initialize, setInitialize] = useState(false);\n\n const { data: initialDataRepsonse } = useFetch<Search>(\n `${url}?hits=0`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !!initialFacets\n );\n\n const query = queryFilter.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !initialize || !!queryFilter?.block\n );\n\n const popStateEvent = (event: PopStateEvent) => {\n const { currentTarget } = event;\n if (currentTarget) {\n const nextSearchParams = new URLSearchParams((currentTarget as Window).location.search);\n\n if (!nextSearchParams.has('sort')) {\n nextSearchParams.set('sort', 'published-desc');\n }\n\n setQueryFilter({\n searchParams: nextSearchParams,\n });\n }\n };\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n window.addEventListener('popstate', popStateEvent);\n }\n\n const onFilterUpdateEvent: ActionOnFilterUpdate = {\n actionName: 'onFilterUpdate',\n callback: onFilterUpdate,\n };\n\n WaykePubSub.subscribeAction(onFilterUpdateEvent);\n return () => {\n window.removeEventListener('popstate', popStateEvent);\n WaykePubSub.unsubscribeAction(onFilterUpdateEvent);\n };\n }, []);\n\n useEffect(() => {\n if (initialDataRepsonse) {\n setInitialFacets(initialDataRepsonse.facets);\n }\n }, [initialDataRepsonse]);\n\n useEffect(() => {\n if (useQueryParamsFromUrl) {\n const nextSearchParams = new URLSearchParams(queryFilter.searchParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n if (nextSearchParams.get('sort') === 'published-desc') {\n nextSearchParams.delete('sort');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (initialize) {\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n const _path = pathRoute?.replace(/^\\/|\\/$/g, '');\n const prefix = _path ? `/${_path}/` : '/';\n\n const index = _path ? window.location.pathname.indexOf(prefix) : -1;\n let pathname = window.location.pathname;\n if (index > -1) {\n pathname = pathname.substr(0, index);\n }\n\n pushState(`${pathname}${nextSearch}`);\n }\n }\n }\n }, [queryFilter, initialize, useQueryParamsFromUrl]);\n\n useEffect(() => {\n if (response) {\n if (!initialFacets && !useQueryParamsFromUrl) {\n setInitialFacets(response.facets);\n }\n\n if (useQueryParamsFromUrl && response.query?.parameters) {\n const nextSearchParams = new URLSearchParams(response.query.parameters);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n if (window.location.search.localeCompare(nextSearch) !== 0) {\n replaceState(`${window.location.pathname}${nextSearch}`);\n setQueryFilter({\n searchParams: new URLSearchParams(nextSearch),\n block: true,\n });\n }\n }\n\n if (queryFilter?.concatResult) {\n setDocuments([...(documents || []), ...(response.documentList.documents || [])]);\n } else {\n setDocuments(response.documentList.documents || []);\n }\n }\n }, [response, useQueryParamsFromUrl]);\n\n const onFilterUpdate = useCallback(\n (nextQuery: string) => {\n {\n if (!initialize) {\n setInitialize(true);\n }\n\n setQueryFilter({\n searchParams: new URLSearchParams(nextQuery),\n });\n }\n },\n [initialize]\n );\n\n const onLoadMore = useCallback(() => {\n if (response) {\n setQueryFilter({\n searchParams: new URLSearchParams(response?.documentList.pagination.nextPage?.query),\n concatResult: true,\n });\n }\n }, [response]);\n\n const onInitialize = useCallback(\n (_initialQueryParams?: URLSearchParams) => {\n if (!initialize) {\n const searchParamsFromUrl = getUrlSearchParamsFromUrl();\n\n const initialQueryParams = useQueryParamsFromUrl\n ? searchParamsFromUrl\n : _initialQueryParams;\n\n if (useQueryParamsFromUrl && _initialQueryParams) {\n _initialQueryParams.forEach((value, key) => {\n if (!initialQueryParams?.getAll(key)?.some((v) => v === value)) {\n initialQueryParams?.append(key, value);\n }\n });\n }\n\n if (initialQueryParams) {\n const nextSearchParams = new URLSearchParams(initialQueryParams);\n nextSearchParams.delete('hits');\n nextSearchParams.delete('offset');\n\n if (!initialQueryParams.has('hits')) {\n initialQueryParams.set('hits', '30');\n }\n if (!initialQueryParams.has('sort')) {\n initialQueryParams.set('sort', 'published-desc');\n }\n\n const nextSearch = nextSearchParams.toString() ? `?${nextSearchParams}` : '';\n\n setQueryFilter({\n searchParams: initialQueryParams,\n });\n replaceState(`${window.location.pathname}${nextSearch}`);\n }\n setInitialize(true);\n }\n },\n [initialize]\n );\n\n const value = {\n loading,\n error,\n response,\n documents,\n initialFacets,\n queryFilter,\n onFilterUpdate,\n onLoadMore,\n onInitialize,\n };\n\n return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;\n};\n\nexport default SearchProvider;\n", "export const getUrlSearchParamsFromUrl = () => new URLSearchParams(window.location.search);\n", "import styled from 'styled-components';\n\nconst Root = styled.div.attrs(() => ({\n className: 'wayke__theme wayke__font--regular',\n}))`\n background-color: ${(props) => props.theme.color.bg};\n color: ${(props) => props.theme.color.textDark};\n font-size: 1rem;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n\n a img {\n border: 0;\n }\n`;\n\nexport default Root;\n", "import { EcomSettings } from '../providers/WaykeProvider';\n\nconst useEcom = (ecomSettings?: EcomSettings) => {\n if (ecomSettings?.url) {\n import('@wayke-se/ecom').then(({ config }) => {\n config.bind({\n api: {\n address: ecomSettings.url,\n },\n /** Specifying an origin is optional **/\n origin: {\n topic: 'Wayke',\n channel: 'wayke.se',\n },\n bankIdThumbprint: ecomSettings.bankIdThumbprint,\n });\n });\n }\n};\n\nexport default useEcom;\n", "import React from 'react';\nimport { SettingsContext } from './SettingsContext';\nimport { EcomSettings } from '../../providers/WaykeProvider';\n\ninterface SettingsProps {\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n children: React.ReactNode;\n}\n\nconst SettingsProvider = ({\n googleMapsApiKey,\n googleMapsMarker,\n ecomSettings,\n children,\n}: SettingsProps) => (\n <SettingsContext.Provider value={{ ecomSettings, googleMapsApiKey, googleMapsMarker }}>\n {children}\n </SettingsContext.Provider>\n);\n\nexport default SettingsProvider;\n", "import React, { useState, useCallback } from 'react';\n\nimport { Search } from '../../@types/search';\nimport { QueryFilter } from '../../@types/queryFilter';\nimport useFetch from '../../hooks/useFetch';\nimport { RelatedSearchContext } from './RelatedSearchContext';\n\ninterface RelatedSearchProviderProps {\n url: string;\n urlMlt?: string;\n apiKey?: string;\n children: React.ReactNode;\n}\n\nconst RelatedSearchProvider = ({ url, urlMlt, apiKey, children }: RelatedSearchProviderProps) => {\n const [queryFilter, setQueryFilter] = useState<QueryFilter>();\n\n const query = queryFilter?.searchParams.toString();\n const {\n loading,\n data: response,\n error,\n } = useFetch<Search>(\n `${urlMlt || url}${query ? `?${query}` : ''}`,\n {\n headers: apiKey\n ? {\n 'x-api-key': apiKey,\n }\n : {},\n },\n !queryFilter\n );\n\n const fetchRelated = useCallback(\n (searchParams: URLSearchParams) =>\n setQueryFilter({\n searchParams,\n }),\n []\n );\n\n const value = {\n moreLikeThisUrl: !!urlMlt,\n loading,\n error,\n response,\n queryFilter,\n fetchRelated,\n };\n\n return <RelatedSearchContext.Provider value={value}>{children}</RelatedSearchContext.Provider>;\n};\n\nexport default RelatedSearchProvider;\n", "import React, { useCallback } from 'react';\nimport { CentralStorageContext } from './CentralStorageContext';\nimport useSessionStorage from '../../hooks/useSessionStorage';\n\ninterface CentralStorageProviderProps {\n children: React.ReactNode;\n}\n\nconst CentralStorageProvider = ({ children }: CentralStorageProviderProps) => {\n const { value, set, remove } = useSessionStorage('centralStorage');\n\n const setCentralStorageId = useCallback((id?: string) => (id ? set(id) : remove()), []);\n\n return (\n <CentralStorageContext.Provider value={{ centralStorageId: value, setCentralStorageId }}>\n {children}\n </CentralStorageContext.Provider>\n );\n};\n\nexport default CentralStorageProvider;\n", "import { useState, useCallback } from 'react';\n\nconst useSessionStorage = (key: string) => {\n const [value, setValue] = useState(sessionStorage.getItem(key));\n\n const set = useCallback(\n (v: string) => {\n sessionStorage.setItem(key, v);\n setValue(v);\n },\n [key]\n );\n\n const remove = useCallback(() => {\n sessionStorage.removeItem(key);\n setValue(null);\n }, [key]);\n\n const clear = useCallback(() => {\n sessionStorage.clear();\n setValue(null);\n }, [key]);\n\n return {\n value,\n set,\n remove,\n clear,\n };\n};\n\nexport default useSessionStorage;\n", "import React, { useCallback, useEffect, useMemo, useReducer } from 'react';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport { PathContext, PathContextProps } from './PathContext';\nimport reducer, { initialState, SET_PATH } from './reducer';\n\nconst regexGuidAnyWhere =\n /(\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1}/g;\nconst POP_STATE = 'popstate';\n\ninterface PathProviderProps {\n children: React.ReactNode;\n}\n\nconst PathProvider = ({ children }: PathProviderProps) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n const previousPath = usePrevious(state.path);\n\n useEffect(() => {\n const onPopState = () => {\n dispatch({ type: SET_PATH, path: window.location.pathname });\n };\n\n window.addEventListener(POP_STATE, onPopState);\n return () => {\n window.removeEventListener(POP_STATE, onPopState);\n };\n }, []);\n\n const pushState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.pushState(null, '', `${path}`);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const replaceState = useCallback((path: string) => {\n const h1 = window.location.hash;\n history.replaceState(null, '', path);\n const h2 = window.location.hash;\n if (h1.localeCompare(h2) !== 0) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n }\n dispatch({ type: SET_PATH, path });\n }, []);\n\n const id = useMemo(() => state.path.match(regexGuidAnyWhere)?.pop(), [state.path]);\n\n const value: PathContextProps = useMemo(\n () => ({\n ...state,\n previousPath,\n id,\n pushState,\n replaceState,\n }),\n [state]\n );\n\n return <PathContext.Provider value={value}>{children}</PathContext.Provider>;\n};\n\nexport default PathProvider;\n", "import { useRef, useEffect } from 'react';\n\nconst usePrevious = <T>(value: T) => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport default usePrevious;\n", "import { BaseAction } from '../../@types/action';\n\nexport const SET_PATH = 'SET_PATH';\ntype SET_PATH_TYPE = BaseAction<typeof SET_PATH> & {\n path: string;\n};\n\ntype PathAction = SET_PATH_TYPE;\n\ninterface PathState {\n path: string;\n}\n\nexport const initialState: PathState = {\n path: window.location.pathname,\n};\n\nconst pathReducer = (state: PathState, action: PathAction) => {\n const next = { ...state };\n switch (action.type) {\n case SET_PATH:\n next.path = action.path;\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default pathReducer;\n", "import React from 'react';\n\nimport WaykeProvider, { WaykeProviderProps } from '../providers/WaykeProvider';\nimport WaykeComposite, { WaykeCompositeProps } from './WaykeComposite';\n\nexport interface WaykeCompositeWithProviderProps {\n provider: WaykeProviderProps;\n composite?: WaykeCompositeProps;\n}\n\nconst WaykeCompositeWithProvider = ({ provider, composite }: WaykeCompositeWithProviderProps) => (\n <WaykeProvider {...provider}>\n <WaykeComposite {...composite} />\n </WaykeProvider>\n);\n\nexport default WaykeCompositeWithProvider;\n", "import React, { useEffect } from 'react';\nimport useHashGuid from '../hooks/useHashGuid';\nimport PubSub from '../utils/pubsub/pubsub';\n\nimport WaykeSearch, { WaykeSearchProps } from './search/index';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './searchItem/index';\nimport usePath from '../State/Path/usePath';\n\nexport type WaykeCompositeProps = Omit<WaykeSearchProps & WaykeSearchItemProps, 'id'>;\n\nconst WaykeComposite = ({\n filterList,\n initialQueryParams,\n removeSearchBar,\n removeFilterOptions,\n disableResetScrollOnInit,\n placeholderImage,\n pathRoute,\n modifyDocumentTitleItem,\n modifyDocumentTitleSearch,\n}: WaykeCompositeProps) => {\n const hashId = useHashGuid();\n const { id: pathId } = usePath();\n\n useEffect(() => {\n if (!pathRoute) {\n if (hashId) {\n PubSub.publish('HashRouteChange', hashId);\n } else {\n PubSub.publish('HashRouteChange');\n }\n }\n }, [hashId]);\n\n const id = pathId || hashId;\n\n return (\n <>\n {id ? (\n <WaykeSearchItem\n id={id}\n hashRoute={!pathRoute}\n disableResetScrollOnInit={disableResetScrollOnInit}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n modifyDocumentTitleItem={modifyDocumentTitleItem}\n />\n ) : (\n <WaykeSearch\n filterList={filterList}\n initialQueryParams={initialQueryParams}\n removeSearchBar={removeSearchBar}\n hashRoute={!pathRoute}\n placeholderImage={placeholderImage}\n pathRoute={pathRoute}\n removeFilterOptions={removeFilterOptions}\n modifyDocumentTitleSearch={modifyDocumentTitleSearch}\n />\n )}\n </>\n );\n};\n\nexport default WaykeComposite;\n", "import { useState, useEffect } from 'react';\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst HASH_CHANGE = 'hashchange';\n\nconst getGuid = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n return regexGuid.test(guid) || !guid ? guid : undefined;\n};\n\nconst useHashGuid = () => {\n const [id, setId] = useState<string | undefined>(() => getGuid());\n const onHashChange = () => {\n const guid = window.location.hash.substr(1, window.location.hash.length);\n if (regexGuid.test(guid) || !guid) {\n setId(window.location.hash.substr(1, window.location.hash.length));\n } else {\n throw 'Invalid Guid';\n }\n };\n\n useEffect(() => {\n onHashChange();\n window.addEventListener(HASH_CHANGE, onHashChange);\n return () => {\n window.removeEventListener(HASH_CHANGE, onHashChange);\n };\n }, []);\n\n return id;\n};\n\nexport default useHashGuid;\n", "import React from 'react';\n\nimport GraphqlProvider from './graphqlProvider';\nimport Theme from './themeProvider';\nimport Root from '../components/Root/index';\n\nimport useEcom from '../hooks/useEcom';\nimport SettingsProvider from '../State/Settings/SettingsProvider';\nimport RelatedSearchProvider from '../State/RelatedSearch/RelatedSearchProvider';\nimport CentralStorageProvider from '../State/CentralStorage/CentralStorageProvider';\nimport PathProvider from '../State/Path/PathProvider';\n\nexport interface EcomSettings {\n url: string;\n useBankId?: boolean;\n displayBankIdAlert?: boolean;\n serviceLogotypeUrl?: string;\n bankIdThumbprint?: string;\n}\n\nexport interface WaykeItemProviderSettings {\n url: string;\n urlMlt?: string;\n graphQlUrl: string;\n apiKey?: string;\n ecomSettings?: EcomSettings;\n googleMapsApiKey?: string;\n googleMapsMarker?: string;\n}\n\nexport type WaykeItemProviderProps = WaykeItemProviderSettings & {\n children?: React.ReactNode;\n};\n\nconst WaykeItemProvider = ({\n url,\n urlMlt,\n apiKey,\n ecomSettings,\n graphQlUrl,\n googleMapsApiKey,\n googleMapsMarker,\n children,\n}: WaykeItemProviderProps) => {\n useEcom(ecomSettings);\n\n return (\n <PathProvider>\n <SettingsProvider\n googleMapsApiKey={googleMapsApiKey}\n googleMapsMarker={googleMapsMarker}\n ecomSettings={ecomSettings}\n >\n <CentralStorageProvider>\n <GraphqlProvider uri={graphQlUrl}>\n <RelatedSearchProvider url={url} urlMlt={urlMlt} apiKey={apiKey}>\n <Theme>\n <Root>{children}</Root>\n </Theme>\n </RelatedSearchProvider>\n </GraphqlProvider>\n </CentralStorageProvider>\n </SettingsProvider>\n </PathProvider>\n );\n};\n\nexport default WaykeItemProvider;\n", "import './styles.scss';\n\nimport WaykeSearch, { WaykeSearchProps } from './layouts/search';\nimport WaykeSearchItem, { WaykeSearchItemProps } from './layouts/searchItem';\nimport WaykeProvider, { WaykeProviderSettings } from './providers/WaykeProvider';\nimport WaykeComposite, {\n WaykeCompositeWithProviderProps,\n} from './layouts/WaykeCompositeWithProvider';\nimport SearchBar from './components/SearchBar/index';\nimport WaykeThemeProvider from './providers/themeProvider';\nimport WaykeItemProvider, { WaykeItemProviderSettings } from './providers/WaykeItemProvidet';\nimport WaykePubSub, { EventSubscriptions } from './utils/pubsub/pubsub';\nimport { SearchFilterTypes, SearchFilterNameTypes } from './@types/filter';\n\nimport {\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n} from './utils/pubsub/Events';\n\nexport {\n WaykeProvider,\n WaykeItemProvider,\n WaykeSearch,\n WaykeSearchItem,\n SearchBar,\n WaykeThemeProvider,\n WaykeItemProviderSettings,\n WaykePubSub,\n WaykeCompositeWithProviderProps,\n WaykeProviderSettings,\n WaykeSearchProps,\n WaykeSearchItemProps,\n SearchFilterTypes,\n SearchFilterNameTypes,\n EventSubscriptions,\n EventHashRouteChange,\n EventItemClicked,\n EventEcomOnUser,\n EventImagesClick,\n EventOptionsClick,\n EventPhonenumberVisible,\n EventPhonenumberCall,\n EventMailVisible,\n EventInsuranceInterest,\n EventFinanceInterest,\n EventAll,\n EventType,\n EventNames,\n CallbackHashRouteChange,\n CallbackEventItemClicked,\n CallbackEcomOnUserEvent,\n CallbackEmpty,\n};\n\nexport default WaykeComposite;\n"],
5
+ "mappings": "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",
6
+ "names": ["DrivingDistance", "lookupAddress", "validateResponse", "getOptions", "create", "buildLookupRequest", "lookup", "newLookupRequest", "getUrl", "auth", "collect", "cancel", "getRoute", "validate", "newCase", "getStatus", "signCase", "cancelSigning", "accept", "decline", "http\n .builder", "http\n .captureStateContext", "http.json", "http.context", "api\n .lookupAddress", "http\n .builder", "api\n .find", "http.builder", "api\n .init", "api\n .create", "http\n .json", "api\n .lookup", "AuthMethod", "AuthStatus", "builder", "http.captureStateContext", "http.raw", "doAuthRequest", "doCollectRequest", "doCancelRequest", "api\n .auth", "api\n .collect", "api.cancel", "MaritalStatus", "Employment", "CreditAssessmentStatus", "CreditAssessmentDecision", "CreditAssessmentRecommendation", "api.newCase", "api\n .getStatus", "api\n .signCase", "api.cancelSigning", "api.accept", "api.decline", "DeliveryType", "PaymentType", "VehicleCondition", "import_react", "styled", "React", "import_styled_components", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_styled_components", "import_styled_components", "styled", "styled", "React", "import_styled_components", "import_styled_components", "styled", "Wrapper", "import_styled_components", "styled", "Wrapper", "formatFns", "sv", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "React", "import_styled_components", "Icon", "styled", "React", "Wrapper", "React", "Wrapper", "import_react", "import_styled_components", "styled", "import_react", "React", "import_styled_components", "import_styled_components", "styled", "Wrapper", "styled", "Header", "Body", "Footer", "FooterAction", "React", "import_react", "React", "ReactDOM", "Wrapper", "Header", "Body", "Footer", "import_react", "import_styled_components", "List", "styled", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "Body", "Item", "React", "Item", "Header", "Label", "Heading", "Indicator", "IndicatorValue", "Icon", "Body", "List", "import_styled_components", "styled", "import_react", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Action", "React", "Item", "Action", "List", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Action", "Label", "React", "Item", "Action", "Label", "List", "React", "import_react", "import_react", "import_styled_components", "styled", "Bar", "import_react", "Handle", "React", "import_react", "Track", "React", "index", "React", "Bar", "Handle", "Track", "x", "getSteps", "init", "React", "React", "React", "FooterAction", "React", "import_react", "import_styled_components", "Wrapper", "styled", "List", "Item", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Description", "Label", "import_react", "import_styled_components", "Item", "styled", "Action", "List", "React", "Item", "Action", "List", "index", "import_react", "import_react", "context", "React", "Wrapper", "LazyLoad", "Heading", "Description", "Label", "document", "React", "Wrapper", "List", "Item", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Action", "React", "Wrapper", "Label", "Action", "import_react", "React", "value", "React", "import_react", "import_styled_components", "Wrapper", "styled", "Icon", "Content", "Heading", "React", "Wrapper", "Icon", "Content", "Heading", "React", "import_react", "import_react", "import_styled_components", "List", "styled", "Item", "Label", "import_styled_components", "Price", "styled", "OldPrice", "React", "List", "Item", "Label", "Price", "OldPrice", "React", "import_styled_components", "styled", "import_react", "import_styled_components", "Wrapper", "styled", "Content", "React", "Wrapper", "import_react", "import_styled_components", "Wrapper", "styled", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "Wrapper", "Date", "import_react", "import_styled_components", "Wrapper", "styled", "Action", "React", "Wrapper", "Action", "import_react", "import_styled_components", "Wrapper", "styled", "Item", "Image", "import_react", "import_styled_components", "Wrapper", "styled", "UiBlock", "Item", "Img", "CloseBtn", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_react", "React", "Wrapper", "import_react", "import_styled_components", "styled", "React", "Wrapper", "React", "import_react", "import_react", "React", "import_react", "max", "React", "started", "React", "Item", "Img", "index", "React", "Wrapper", "UiBlock", "Item", "Img", "CloseBtn", "import_react", "import_react", "import_react", "import_react", "json", "React", "import_styled_components", "Wrapper", "styled", "UiBlock", "Content", "Header", "Heading", "Close", "CloseBtn", "Body", "Image", "Wrapper", "UiBlock", "Content", "Header", "Heading", "Close", "CloseBtn", "Body", "index", "React", "import_react", "index", "React", "import_react", "React", "Image", "index", "scrollIntoView", "React", "Wrapper", "Slider", "Item", "Image", "import_styled_components", "styled", "import_client", "import_react", "import_react", "React", "import_styled_components", "Wrapper", "styled", "Logo", "Content", "Wrapper", "Logo", "Content", "import_react", "import_styled_components", "List", "styled", "Item", "Label", "Value", "React", "List", "Item", "Label", "Value", "React", "Image", "import_react", "import_client", "import_client", "FinancialOptionDetail", "import_react", "import_styled_components", "styled", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Label", "Value", "React", "Wrapper", "Label", "Value", "import_react", "import_react_compound_slider", "React", "Bar", "Handle", "Track", "React", "React", "React", "React", "index", "import_react", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Main", "Heading", "Description", "Footer", "React", "Wrapper", "Main", "Heading", "Description", "Footer", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Info", "Extend", "React", "Wrapper", "Header", "Info", "Extend", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "import_react", "import_styled_components", "Wrapper", "styled", "Input", "React", "Wrapper", "Input", "React", "React", "import_styled_components", "Label", "styled", "Wrapper", "Input", "import_react", "import_styled_components", "iconSize", "Wrapper", "styled", "Select", "Option", "Icon", "React", "Wrapper", "Select", "Option", "Icon", "import_styled_components", "styled", "import_styled_components", "styled", "import_client", "import_client", "React", "React", "index", "import_react", "import_marked", "import_react", "React", "Insurance", "React", "index", "React", "import_react", "import_marked", "React", "import_react", "import_react", "import_react", "React", "React", "import_react", "import_styled_components", "List", "styled", "Item", "Icon", "Label", "React", "Item", "Icon", "Label", "List", "import_react", "import_styled_components", "Wrapper", "styled", "Header", "Body", "Info", "Action", "InfoBtn", "Title", "React", "Wrapper", "Header", "Info", "Title", "InfoBtn", "Action", "Body", "import_react", "import_react", "React", "import_react", "import_marked", "React", "React", "packageOption", "index", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Heading", "Action", "React", "Wrapper", "Heading", "Action", "import_styled_components", "styled", "import_react", "import_react", "id", "React", "document", "import_react", "import_marked", "React", "index", "import_react", "import_styled_components", "styled", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "React", "Wrapper", "React", "import_react", "React", "import_react", "import_react", "import_react", "import_styled_components", "Wrapper", "styled", "Image", "React", "Wrapper", "Image", "Branch", "React", "import_react", "import_client", "import_client", "HoursOpen", "import_react", "React", "import_react", "React", "import_react", "index", "import_react", "import_styled_components", "styled", "React", "React", "import_styled_components", "Wrapper", "styled", "List", "Item", "Action", "props", "Wrapper", "List", "Item", "Action", "React", "index", "import_react", "import_styled_components", "styled", "theme", "document", "React", "WaykeEcomWeb", "vehicle", "React", "import_react", "import_react", "import_client", "React", "ApolloProviderBase", "import_react", "import_styled_components", "React", "ThemeProviderBase", "import_react", "index", "value", "React", "import_styled_components", "styled", "import_react", "React", "import_react", "React", "import_react", "import_react", "React", "import_react", "import_react", "React", "React", "import_react", "import_react", "import_react", "React", "React", "import_react", "React"]
7
7
  }