@wayke-se/components-react 3.1.0 → 3.3.0
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-node/index.js +158 -18
- package/dist-node/index.js.map +1 -1
- package/dist-src/components/Columns/index.js +76 -0
- package/dist-src/components/PriceTable/index.js +3 -3
- package/dist-src/components/StateIndicator/index.js +23 -0
- package/dist-src/layout/theme.js +2 -0
- package/dist-src/layouts/searchItem/CheckList.js +40 -26
- package/dist-src/layouts/searchItem/DemoCarModal.js +7 -0
- package/dist-src/layouts/searchItem/index.js +18 -8
- package/dist-src/queries/SEARCH_ITEM_QUERY.js +5 -0
- package/dist-types/@types/codegen/types.d.ts +2 -0
- package/dist-types/components/Columns/index.d.ts +16 -0
- package/dist-types/components/PriceTable/index.d.ts +2 -2
- package/dist-types/components/StateIndicator/index.d.ts +5 -0
- package/dist-types/layout/theme.d.ts +1 -0
- package/dist-types/layouts/searchItem/CheckList.d.ts +2 -1
- package/dist-types/layouts/searchItem/DemoCarModal.d.ts +6 -0
- package/dist-web/index.js +164 -36
- package/dist-web/index.js.map +1 -1
- package/package.json +1 -1
package/dist-web/index.js
CHANGED
|
@@ -11,6 +11,8 @@ import scrollIntoView from 'scroll-into-view-if-needed';
|
|
|
11
11
|
import { gql, useQuery, ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
|
|
12
12
|
import { marked } from 'marked';
|
|
13
13
|
import { parsePhoneNumberFromString } from 'libphonenumber-js/core';
|
|
14
|
+
import { format as format$1 } from 'date-fns/esm';
|
|
15
|
+
import sv$1 from 'date-fns/locale/sv';
|
|
14
16
|
|
|
15
17
|
const _colors = {
|
|
16
18
|
black: '#000',
|
|
@@ -27,6 +29,7 @@ const _colors = {
|
|
|
27
29
|
redLight: '#ffd0d0',
|
|
28
30
|
red: '#c71f1f',
|
|
29
31
|
yellowLight: '#fff4c7',
|
|
32
|
+
yellow: '#ffc700',
|
|
30
33
|
blueLight: '#daf7fc',
|
|
31
34
|
},
|
|
32
35
|
};
|
|
@@ -49,6 +52,7 @@ const theme = {
|
|
|
49
52
|
positiveLight: _colors.ui.greenLight,
|
|
50
53
|
positive: _colors.ui.green,
|
|
51
54
|
neutralLight: _colors.ui.yellowLight,
|
|
55
|
+
neutral: _colors.ui.yellow,
|
|
52
56
|
negativeLight: _colors.ui.redLight,
|
|
53
57
|
negative: _colors.ui.red,
|
|
54
58
|
infoLight: _colors.ui.blueLight,
|
|
@@ -2493,7 +2497,7 @@ const OldPrice$1 = styled.div `
|
|
|
2493
2497
|
text-decoration: line-through;
|
|
2494
2498
|
`;
|
|
2495
2499
|
|
|
2496
|
-
const PriceTable = ({ price,
|
|
2500
|
+
const PriceTable = ({ price, discount }) => (React__default.createElement(List$6, null,
|
|
2497
2501
|
React__default.createElement(Item$6, null,
|
|
2498
2502
|
React__default.createElement(Label$5, null,
|
|
2499
2503
|
React__default.createElement(VisualHeading, null, "Pris")),
|
|
@@ -2501,11 +2505,11 @@ const PriceTable = ({ price, oldPrice }) => (React__default.createElement(List$6
|
|
|
2501
2505
|
React__default.createElement(Price$1, null,
|
|
2502
2506
|
numberSeparator(price),
|
|
2503
2507
|
" kr"))),
|
|
2504
|
-
|
|
2508
|
+
discount !== undefined && (React__default.createElement(Item$6, null,
|
|
2505
2509
|
React__default.createElement(Label$5, null),
|
|
2506
2510
|
React__default.createElement(Value, null,
|
|
2507
2511
|
React__default.createElement(OldPrice$1, null,
|
|
2508
|
-
numberSeparator(
|
|
2512
|
+
numberSeparator(price + discount),
|
|
2509
2513
|
" kr"))))));
|
|
2510
2514
|
|
|
2511
2515
|
const Logo = styled.img `
|
|
@@ -4322,8 +4326,13 @@ const SEARCH_ITEM_QUERY = gql `
|
|
|
4322
4326
|
postalCode
|
|
4323
4327
|
}
|
|
4324
4328
|
price
|
|
4329
|
+
discount
|
|
4325
4330
|
shortDescription
|
|
4326
4331
|
title
|
|
4332
|
+
availableFrom
|
|
4333
|
+
flags {
|
|
4334
|
+
demoVersion
|
|
4335
|
+
}
|
|
4327
4336
|
}
|
|
4328
4337
|
}
|
|
4329
4338
|
${HoursOpen}
|
|
@@ -5460,6 +5469,103 @@ const ActionList = ({ contact, branch }) => {
|
|
|
5460
5469
|
phonenumber && (React__default.createElement(ToggleItem, { title: "Visa telefonnummer", value: formatPhonenumber(phonenumber), type: "tel", onClickVisible: onClickPhoneVisible, onClickValue: onClickPhoneValue }))));
|
|
5461
5470
|
};
|
|
5462
5471
|
|
|
5472
|
+
const Column = styled.div `
|
|
5473
|
+
flex: 0 1 auto;
|
|
5474
|
+
|
|
5475
|
+
${({ grow }) => grow &&
|
|
5476
|
+
css `
|
|
5477
|
+
flex-grow: 1;
|
|
5478
|
+
`}
|
|
5479
|
+
|
|
5480
|
+
${({ noShrink }) => noShrink &&
|
|
5481
|
+
css `
|
|
5482
|
+
flex-shrink: 0;
|
|
5483
|
+
`}
|
|
5484
|
+
`;
|
|
5485
|
+
const Columns = styled.div `
|
|
5486
|
+
display: flex;
|
|
5487
|
+
align-items: flex-start;
|
|
5488
|
+
|
|
5489
|
+
${({ valign }) => valign === 'end'
|
|
5490
|
+
? css `
|
|
5491
|
+
align-items: flex-end;
|
|
5492
|
+
`
|
|
5493
|
+
: valign === 'center'
|
|
5494
|
+
? css `
|
|
5495
|
+
align-items: center;
|
|
5496
|
+
`
|
|
5497
|
+
: css `
|
|
5498
|
+
align-items: flex-start;
|
|
5499
|
+
`}
|
|
5500
|
+
|
|
5501
|
+
${({ align }) => align === 'end'
|
|
5502
|
+
? css `
|
|
5503
|
+
justify-content: flex-end;
|
|
5504
|
+
`
|
|
5505
|
+
: align === 'center'
|
|
5506
|
+
? css `
|
|
5507
|
+
justify-content: center;
|
|
5508
|
+
`
|
|
5509
|
+
: css `
|
|
5510
|
+
justify-content: flex-start;
|
|
5511
|
+
`}
|
|
5512
|
+
|
|
5513
|
+
${({ $spacing }) => $spacing &&
|
|
5514
|
+
css `
|
|
5515
|
+
margin: ${size($spacing / -2)};
|
|
5516
|
+
|
|
5517
|
+
& > ${Column} {
|
|
5518
|
+
padding: ${size($spacing / 2)};
|
|
5519
|
+
}
|
|
5520
|
+
`}
|
|
5521
|
+
|
|
5522
|
+
${({ flexWrap }) => flexWrap &&
|
|
5523
|
+
css `
|
|
5524
|
+
flex-wrap: wrap;
|
|
5525
|
+
`}
|
|
5526
|
+
|
|
5527
|
+
${({ flexInline }) => flexInline &&
|
|
5528
|
+
css `
|
|
5529
|
+
display: inline-flex;
|
|
5530
|
+
`}
|
|
5531
|
+
|
|
5532
|
+
${({ clearLtSm }) => clearLtSm &&
|
|
5533
|
+
css `
|
|
5534
|
+
${(props) => props.theme.breakpoint.LtSm} {
|
|
5535
|
+
display: block;
|
|
5536
|
+
}
|
|
5537
|
+
`}
|
|
5538
|
+
|
|
5539
|
+
${({ clearLtMd }) => clearLtMd &&
|
|
5540
|
+
css `
|
|
5541
|
+
${(props) => props.theme.breakpoint.LtMd} {
|
|
5542
|
+
display: block;
|
|
5543
|
+
}
|
|
5544
|
+
`}
|
|
5545
|
+
`;
|
|
5546
|
+
|
|
5547
|
+
const StateIndicator = styled.div `
|
|
5548
|
+
width: ${size(1)};
|
|
5549
|
+
height: ${size(1)};
|
|
5550
|
+
border-radius: 50%;
|
|
5551
|
+
|
|
5552
|
+
${({ $tone }) => $tone === 'success'
|
|
5553
|
+
? css `
|
|
5554
|
+
background-color: ${(props) => props.theme.color.ui.positive};
|
|
5555
|
+
`
|
|
5556
|
+
: $tone === 'pending'
|
|
5557
|
+
? css `
|
|
5558
|
+
background-color: ${(props) => props.theme.color.ui.neutral};
|
|
5559
|
+
`
|
|
5560
|
+
: $tone === 'error'
|
|
5561
|
+
? css `
|
|
5562
|
+
background-color: ${(props) => props.theme.color.ui.negative};
|
|
5563
|
+
`
|
|
5564
|
+
: css `
|
|
5565
|
+
background-color: ${(props) => props.theme.color.textDarkLighten};
|
|
5566
|
+
`}
|
|
5567
|
+
`;
|
|
5568
|
+
|
|
5463
5569
|
const List$8 = styled.ul `
|
|
5464
5570
|
list-style: none;
|
|
5465
5571
|
padding: 0;
|
|
@@ -5618,7 +5724,7 @@ const PackageOptionModal = ({ packageOption, onClose }) => (React__default.creat
|
|
|
5618
5724
|
packageOption.link?.href && packageOption.link.title && (React__default.createElement(Repeat, null,
|
|
5619
5725
|
React__default.createElement(ButtonInline, { as: "a", href: packageOption.link.href, target: "_blank", rel: "noopener noreferrer nofollow" }, packageOption.link.title)))));
|
|
5620
5726
|
|
|
5621
|
-
const CheckList = ({ manufacturer, packageOptions, ecommerce, branch, contact, toggleEcomModal, loadingCentralStorageVehicle, }) => {
|
|
5727
|
+
const CheckList = ({ manufacturer, packageOptions, ecommerce, branch, contact, availableFrom, toggleEcomModal, loadingCentralStorageVehicle, }) => {
|
|
5622
5728
|
const [modalBranch, setModalBranch] = useState(false);
|
|
5623
5729
|
const openModalBranch = useCallback(() => setModalBranch(true), []);
|
|
5624
5730
|
const closeModalBranch = useCallback(() => setModalBranch(false), []);
|
|
@@ -5634,31 +5740,6 @@ const CheckList = ({ manufacturer, packageOptions, ecommerce, branch, contact, t
|
|
|
5634
5740
|
return (React__default.createElement(React__default.Fragment, null,
|
|
5635
5741
|
modalBranch && (React__default.createElement(BranchModal, { loading: loadingCentralStorageVehicle, connections: branch?.connections, onClose: closeModalBranch })),
|
|
5636
5742
|
modal && React__default.createElement(PackageOptionModal, { packageOption: modal, onClose: onClose }),
|
|
5637
|
-
React__default.createElement(Repeat, null,
|
|
5638
|
-
React__default.createElement(CheckMarkList, null,
|
|
5639
|
-
packageOption?.title && (React__default.createElement(CheckMarkListItem, null,
|
|
5640
|
-
React__default.createElement(React__default.Fragment, null,
|
|
5641
|
-
"Inkl.",
|
|
5642
|
-
' ',
|
|
5643
|
-
React__default.createElement(ButtonInline, { onClick: () => onOpen({
|
|
5644
|
-
title: packageOption?.title,
|
|
5645
|
-
image: packageOption?.image,
|
|
5646
|
-
description: packageOption?.description,
|
|
5647
|
-
link: packageOption?.link,
|
|
5648
|
-
}) }, packageOption.title),
|
|
5649
|
-
' ',
|
|
5650
|
-
"begagnatgaranti"))),
|
|
5651
|
-
packageOptions?.map((packageOption, index) => (React__default.createElement(CheckMarkListItem, { key: packageOption.title || index },
|
|
5652
|
-
React__default.createElement(React__default.Fragment, null,
|
|
5653
|
-
"Inkl.",
|
|
5654
|
-
' ',
|
|
5655
|
-
React__default.createElement(ButtonInline, { onClick: () => onOpen({
|
|
5656
|
-
title: packageOption?.title,
|
|
5657
|
-
image: packageOption?.image,
|
|
5658
|
-
description: packageOption?.description,
|
|
5659
|
-
link: packageOption?.link,
|
|
5660
|
-
}) }, packageOption.title))))),
|
|
5661
|
-
ecommerce?.withHomeDelivery && React__default.createElement(CheckMarkListItem, null, "Hemleverans"))),
|
|
5662
5743
|
React__default.createElement(Repeat, null,
|
|
5663
5744
|
ecommerce && ecommerce.enabled && (React__default.createElement(RepeatTiny, null,
|
|
5664
5745
|
React__default.createElement(ButtonPrimary, { disabled: !!ecommerce.reserved, fullWidth: true, onClick: toggleEcomModal },
|
|
@@ -5668,6 +5749,40 @@ const CheckList = ({ manufacturer, packageOptions, ecommerce, branch, contact, t
|
|
|
5668
5749
|
React__default.createElement(Content$2, null,
|
|
5669
5750
|
React__default.createElement("p", null, "Denna bil \u00E4r reserverad av en annan k\u00F6pare."))))),
|
|
5670
5751
|
React__default.createElement(ActionList, { branch: branch, contact: contact })),
|
|
5752
|
+
React__default.createElement(Repeat, null,
|
|
5753
|
+
availableFrom && new Date(availableFrom).valueOf() > new Date().valueOf() && (React__default.createElement(RepeatTiny, null,
|
|
5754
|
+
React__default.createElement(Columns, { "$spacing": 1, valign: "center" },
|
|
5755
|
+
React__default.createElement(Column, { noShrink: true },
|
|
5756
|
+
React__default.createElement(StateIndicator, { "$tone": "pending" })),
|
|
5757
|
+
React__default.createElement(Column, null,
|
|
5758
|
+
React__default.createElement(UtilityFontSizeSmall, null,
|
|
5759
|
+
"Tillg\u00E4nglig fr\u00E5n ",
|
|
5760
|
+
format$1(new Date(availableFrom), 'dd MMMM yyyy', { locale: sv$1 })))))),
|
|
5761
|
+
React__default.createElement(RepeatTiny, null,
|
|
5762
|
+
React__default.createElement(CheckMarkList, null,
|
|
5763
|
+
packageOption?.title && (React__default.createElement(CheckMarkListItem, null,
|
|
5764
|
+
React__default.createElement(React__default.Fragment, null,
|
|
5765
|
+
"Inkl.",
|
|
5766
|
+
' ',
|
|
5767
|
+
React__default.createElement(ButtonInline, { onClick: () => onOpen({
|
|
5768
|
+
title: packageOption?.title,
|
|
5769
|
+
image: packageOption?.image,
|
|
5770
|
+
description: packageOption?.description,
|
|
5771
|
+
link: packageOption?.link,
|
|
5772
|
+
}) }, packageOption.title),
|
|
5773
|
+
' ',
|
|
5774
|
+
"begagnatgaranti"))),
|
|
5775
|
+
packageOptions?.map((packageOption, index) => (React__default.createElement(CheckMarkListItem, { key: packageOption.title || index },
|
|
5776
|
+
React__default.createElement(React__default.Fragment, null,
|
|
5777
|
+
"Inkl.",
|
|
5778
|
+
' ',
|
|
5779
|
+
React__default.createElement(ButtonInline, { onClick: () => onOpen({
|
|
5780
|
+
title: packageOption?.title,
|
|
5781
|
+
image: packageOption?.image,
|
|
5782
|
+
description: packageOption?.description,
|
|
5783
|
+
link: packageOption?.link,
|
|
5784
|
+
}) }, packageOption.title))))),
|
|
5785
|
+
ecommerce?.withHomeDelivery && React__default.createElement(CheckMarkListItem, null, "Hemleverans")))),
|
|
5671
5786
|
(branch?.connections.length || 0) > 1 && (React__default.createElement(Repeat, null,
|
|
5672
5787
|
React__default.createElement(SwitchBar, { title: "Centrallagerbil", actionTitle: "Byt anl\u00E4ggning", onClick: openModalBranch },
|
|
5673
5788
|
React__default.createElement(Content$2, null,
|
|
@@ -6979,6 +7094,10 @@ const PropertySet = ({ propertySet, vehicleData }) => {
|
|
|
6979
7094
|
React__default.createElement(MetadataCategory, { properties: activeCategory.properties, subCategories: activeCategory.subCategories })))));
|
|
6980
7095
|
};
|
|
6981
7096
|
|
|
7097
|
+
const DemoCarModal = ({ onClose }) => (React__default.createElement(Modal, { title: "Demobil", onClose: onClose },
|
|
7098
|
+
React__default.createElement(Content$2, null,
|
|
7099
|
+
React__default.createElement("p", null, "En demobil \u00E4r en bil som st\u00E5tt i utst\u00E4llning eller som p\u00E5 annat s\u00E4tt anv\u00E4nts f\u00F6r att visa upp en viss modell. Bilarna \u00E4r ofta v\u00E4lutrustade och har blivit v\u00E4l omh\u00E4ndertagna. Dessutom har de vanligtvis g\u00E5tt f\u00E5 mil och har fortfarande nybilsgarantierna kvar."))));
|
|
7100
|
+
|
|
6982
7101
|
const PdfListItem = styled.li.attrs(() => ({
|
|
6983
7102
|
className: 'wayke__theme wayke__color--primary-text',
|
|
6984
7103
|
})) `
|
|
@@ -7047,6 +7166,8 @@ const WaykeSearchItem = ({ id, hashRoute, pathRoute, disableResetScrollOnInit, p
|
|
|
7047
7166
|
const ecomContext = useRef();
|
|
7048
7167
|
const { loading, data: result } = useSearchItem(id);
|
|
7049
7168
|
const { vehicle: centralStorageVehicle, loading: loadingCentralStorageVehicle } = useCentralStorage(result?.vehicle);
|
|
7169
|
+
const [demoCarModal, setDemoCarModal] = useState(false);
|
|
7170
|
+
const onToggleDemoCarModal = useCallback(() => setDemoCarModal(!demoCarModal), [demoCarModal]);
|
|
7050
7171
|
useEffect(() => {
|
|
7051
7172
|
if (ecomSettings) {
|
|
7052
7173
|
ecomContext.current = new WaykeEcomWeb({
|
|
@@ -7093,7 +7214,7 @@ const WaykeSearchItem = ({ id, hashRoute, pathRoute, disableResetScrollOnInit, p
|
|
|
7093
7214
|
const { vehicle } = result;
|
|
7094
7215
|
const contact = centralStorageVehicle?.contact;
|
|
7095
7216
|
const branch = centralStorageVehicle?.branch;
|
|
7096
|
-
const { title, shortDescription, media, description, price, financialOptions, manufacturer, ecommerce, packageOptions, publishedAt, documents, } = vehicle;
|
|
7217
|
+
const { title, shortDescription, media, description, price, discount, financialOptions, manufacturer, ecommerce, packageOptions, publishedAt, documents, availableFrom, flags, } = vehicle;
|
|
7097
7218
|
const insuranceOptions = centralStorageVehicle?.insuranceOptions
|
|
7098
7219
|
? centralStorageVehicle.insuranceOptions
|
|
7099
7220
|
: vehicle.insuranceOptions;
|
|
@@ -7102,10 +7223,16 @@ const WaykeSearchItem = ({ id, hashRoute, pathRoute, disableResetScrollOnInit, p
|
|
|
7102
7223
|
{
|
|
7103
7224
|
title: modelYear,
|
|
7104
7225
|
},
|
|
7105
|
-
{
|
|
7106
|
-
title: `${numberSeparator(mileage)} mil`,
|
|
7107
|
-
},
|
|
7108
7226
|
];
|
|
7227
|
+
if (flags?.demoVersion) {
|
|
7228
|
+
uspList.push({
|
|
7229
|
+
title: 'Demobil',
|
|
7230
|
+
onClick: onToggleDemoCarModal,
|
|
7231
|
+
});
|
|
7232
|
+
}
|
|
7233
|
+
uspList.push({
|
|
7234
|
+
title: `${numberSeparator(mileage)} mil`,
|
|
7235
|
+
});
|
|
7109
7236
|
if (gearbox) {
|
|
7110
7237
|
uspList.push({ title: gearbox });
|
|
7111
7238
|
}
|
|
@@ -7135,12 +7262,12 @@ const WaykeSearchItem = ({ id, hashRoute, pathRoute, disableResetScrollOnInit, p
|
|
|
7135
7262
|
React__default.createElement(RepeatSmall, null,
|
|
7136
7263
|
React__default.createElement(UspList, { small: true, items: uspList })))),
|
|
7137
7264
|
React__default.createElement(ProductPageAsideSection, { mobileOrder: 2 },
|
|
7138
|
-
React__default.createElement(PriceTable, { price: price })),
|
|
7265
|
+
React__default.createElement(PriceTable, { price: price, discount: discount || undefined })),
|
|
7139
7266
|
(financialOptions.length > 0 || insuranceOptions.length > 0) && (React__default.createElement(ProductPageAsideSection, { mobileOrder: 4 },
|
|
7140
7267
|
financialOptions.length > 0 && (React__default.createElement(FinancialOptions, { id: id, financialOptions: financialOptions })),
|
|
7141
7268
|
insuranceOptions.length > 0 && (React__default.createElement(InsuranceOptions, { id: id, branch: centralStorageVehicle?.branch, insuranceOptions: insuranceOptions })))),
|
|
7142
7269
|
React__default.createElement(ProductPageAsideSection, { mobileOrder: 5 },
|
|
7143
|
-
React__default.createElement(CheckList, { manufacturer: manufacturer, packageOptions: packageOptions, ecommerce: ecommerce, branch: branch, contact: centralStorageVehicle?.contact, loadingCentralStorageVehicle: loadingCentralStorageVehicle, toggleEcomModal: () => ecomContext.current?.start() }))),
|
|
7270
|
+
React__default.createElement(CheckList, { manufacturer: manufacturer, packageOptions: packageOptions, ecommerce: ecommerce, branch: branch, contact: centralStorageVehicle?.contact, loadingCentralStorageVehicle: loadingCentralStorageVehicle, availableFrom: availableFrom, toggleEcomModal: () => ecomContext.current?.start() }))),
|
|
7144
7271
|
React__default.createElement(ProductPageMain, null,
|
|
7145
7272
|
React__default.createElement(ProductPageAsideSection, { mobileOrder: 3 },
|
|
7146
7273
|
React__default.createElement(Gallery, { media: media, placeholderImage: placeholderImage })),
|
|
@@ -7181,7 +7308,8 @@ const WaykeSearchItem = ({ id, hashRoute, pathRoute, disableResetScrollOnInit, p
|
|
|
7181
7308
|
React__default.createElement(ManufacturerPackageOption, { packageOption: manufacturer?.packageOption }))))),
|
|
7182
7309
|
React__default.createElement(Related, { id: id, hashRoute: hashRoute, pathRoute: pathRoute, onClickSearchItem: onClickSearchItem })),
|
|
7183
7310
|
false ,
|
|
7184
|
-
React__default.createElement(PortalElement, { id: DefaultPortal })
|
|
7311
|
+
React__default.createElement(PortalElement, { id: DefaultPortal }),
|
|
7312
|
+
demoCarModal && React__default.createElement(DemoCarModal, { onClose: onToggleDemoCarModal })));
|
|
7185
7313
|
};
|
|
7186
7314
|
|
|
7187
7315
|
const GraphqlProvider = ({ uri, children }) => {
|