@bytebrand/fe-ui-core 4.1.172 → 4.1.174

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/common.ts +5 -0
  2. package/media/svg/common/arrow_breadcrumps.svg +2 -2
  3. package/media/svg/common/home.svg +6 -8
  4. package/media/svg/common/whyAutodeIconSet-F.svg +8 -12
  5. package/media/svg/common/whyAutodeIconSet-G.svg +6 -8
  6. package/media/svg/common/whyAutodeIconSet-Q.svg +5 -15
  7. package/media/svg/common/whyAutodeIconSet-R.svg +8 -13
  8. package/media/svg/infoBlocks/whyAutodeIconSet-F.svg +8 -8
  9. package/media/svg/infoBlocks/whyAutodeIconSet-G.svg +7 -6
  10. package/media/svg/infoBlocks/whyAutodeIconSet-Q.svg +5 -11
  11. package/media/svg/infoBlocks/whyAutodeIconSet-R.svg +8 -9
  12. package/package.json +1 -1
  13. package/source/components/AccordionWidget/AccordionWidget.styl +0 -3
  14. package/source/components/AccordionWidget/AccordionWidget.tsx +1 -3
  15. package/source/components/Alternative/DealerInfo.styl +7 -1
  16. package/source/components/Alternative/DealerInfo.tsx +64 -38
  17. package/source/components/Breadcrumbs/Breadcrumbs.styl +31 -19
  18. package/source/components/Breadcrumbs/Breadcrumbs.tsx +3 -3
  19. package/source/components/Breadcrumbs/FirstInfoBlock/FirstInfoBlock.styl +11 -18
  20. package/source/components/PriceRating/PriceRating.styl +1 -0
  21. package/source/components/SearchFilters/common/RangeControlled/RangeControlled.tsx +2 -1
  22. package/source/components/SearchPage/SearchTopBar/SearchTopBar.styl +13 -3
  23. package/source/components/SearchPage/SearchTopBar/SearchTopBar.tsx +3 -3
  24. package/source/components/Vehicle/VehicleFormattedPrice/VehicleFormattedPrice.styl +23 -17
  25. package/source/components/VehicleDetailedSidebar/partials/Properties.styl +0 -4
  26. package/source/components/VehicleDetailedSidebar/partials/Properties.tsx +1 -1
  27. package/source/components/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +54 -40
  28. package/source/components/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +38 -16
  29. package/source/components/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +47 -18
  30. package/source/components/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +13 -6
  31. package/source/components/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +48 -28
  32. package/source/components/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +50 -16
  33. package/source/components/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +6 -8
  34. package/source/components/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.styl +31 -12
  35. package/source/components/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +8 -3
  36. package/source/components/VehicleSmallCard/VehicleSmallCard.styl +51 -19
  37. package/source/components/VehicleSmallCard/VehicleSmallCard.tsx +39 -9
  38. package/source/components/_common/Badge/Badge.styl +13 -7
  39. package/source/components/_common/Badge/Badge.tsx +1 -1
  40. package/source/components/_common/Button/Button.styled.tsx +13 -8
  41. package/source/components/_common/Button/Button.tsx +1 -1
  42. package/source/components/_common/ExpansionPanel/ExpansionPanel.tsx +14 -4
  43. package/source/components/_common/IconSVG/IconSVG.story.js +1 -1
  44. package/source/components/_common/IconSVG/IconSVGConfig.tsx +90 -1
  45. package/source/components/_common/IconSVG/SVG/CloseIconSelect.tsx +1 -1
  46. package/source/components/_common/IconSVG/SVG/common/AddressDashboard.tsx +29 -0
  47. package/source/components/_common/IconSVG/SVG/common/CallbackDashboard.tsx +30 -0
  48. package/source/components/_common/IconSVG/SVG/common/CloseGrey.tsx +22 -0
  49. package/source/components/_common/IconSVG/SVG/common/DashboardQuestionMark.tsx +20 -0
  50. package/source/components/_common/IconSVG/SVG/common/DeliveryDashboard.tsx +25 -0
  51. package/source/components/_common/IconSVG/SVG/common/EditPriceIcon.tsx +20 -0
  52. package/source/components/_common/IconSVG/SVG/common/HandingOverDashboard.tsx +32 -0
  53. package/source/components/_common/IconSVG/SVG/common/MenuGrey.tsx +22 -0
  54. package/source/components/_common/IconSVG/SVG/common/MyOrderIcon.tsx +20 -0
  55. package/source/components/_common/IconSVG/SVG/common/OrderReceivedDashboard.tsx +27 -0
  56. package/source/components/_common/IconSVG/SVG/common/PickupDashboard.tsx +30 -0
  57. package/source/components/_common/IconSVG/SVG/common/PreparationDashboard.tsx +29 -0
  58. package/source/components/_common/IconSVG/SVG/common/ProfileDashboard.tsx +24 -0
  59. package/source/components/_common/IconSVG/SVG/common/RegistrationDashboard.tsx +31 -0
  60. package/source/components/_common/IconSVG/SVG/common/SliderEye.tsx +2 -3
  61. package/source/components/_common/IconSVG/SVG/common/StarRoundedCorners.tsx +1 -1
  62. package/source/components/_common/IconSVG/SVG/flags/AT.tsx +19 -0
  63. package/source/components/_common/IconSVG/SVG/flags/BE.tsx +20 -0
  64. package/source/components/_common/IconSVG/SVG/flags/BG.tsx +20 -0
  65. package/source/components/_common/IconSVG/SVG/flags/CH.tsx +22 -0
  66. package/source/components/_common/IconSVG/SVG/flags/CZ.tsx +18 -0
  67. package/source/components/_common/IconSVG/SVG/flags/DE.tsx +18 -0
  68. package/source/components/_common/IconSVG/SVG/flags/DK.tsx +18 -0
  69. package/source/components/_common/IconSVG/SVG/flags/ES.tsx +2585 -0
  70. package/source/components/_common/IconSVG/SVG/flags/FI.tsx +18 -0
  71. package/source/components/_common/IconSVG/SVG/flags/FR.tsx +20 -0
  72. package/source/components/_common/IconSVG/SVG/flags/GB.tsx +26 -0
  73. package/source/components/_common/IconSVG/SVG/flags/HR.tsx +135 -0
  74. package/source/components/_common/IconSVG/SVG/flags/HU.tsx +20 -0
  75. package/source/components/_common/IconSVG/SVG/flags/IT.tsx +20 -0
  76. package/source/components/_common/IconSVG/SVG/flags/LI.tsx +106 -0
  77. package/source/components/_common/IconSVG/SVG/flags/LU.tsx +18 -0
  78. package/source/components/_common/IconSVG/SVG/flags/NL.tsx +18 -0
  79. package/source/components/_common/IconSVG/SVG/flags/NO.tsx +20 -0
  80. package/source/components/_common/IconSVG/SVG/flags/PL.tsx +19 -0
  81. package/source/components/_common/IconSVG/SVG/flags/RO.tsx +20 -0
  82. package/source/components/_common/IconSVG/SVG/flags/RU.tsx +20 -0
  83. package/source/components/_common/IconSVG/SVG/flags/SE.tsx +20 -0
  84. package/source/components/_common/IconSVG/SVG/flags/SI.tsx +54 -0
  85. package/source/components/_common/IconSVG/SVG/flags/SK.tsx +35 -0
  86. package/source/components/_common/IconSVG/SVG/flags/UA.tsx +19 -0
  87. package/source/components/_common/IconSVG/SVG/searchWidgets/drive/AllWheelDrive.tsx +2 -2
  88. package/source/components/_common/IconSVG/SVG/searchWidgets/drive/FrontWheelDrive.tsx +2 -2
  89. package/source/components/_common/IconSVG/SVG/searchWidgets/drive/RearWheelDrive.tsx +2 -2
  90. package/source/components/_common/IconSVG/SVG/searchWidgets/fuel/FuelDiesel.tsx +4 -14
  91. package/source/components/_common/IconSVG/SVG/searchWidgets/fuel/FuelPetrol.tsx +1 -1
  92. package/source/components/_common/IconSVG/SVG/settings/RemoveEye.tsx +1 -1
  93. package/source/components/_common/IconSVG/SVG/settings/RemoveEyeOff.tsx +1 -1
  94. package/source/components/_common/IconSVG/SVG/slider/360New.tsx +20 -0
  95. package/source/components/_common/IconSVG/SVG/vehicle/CarAvailability.tsx +3 -3
  96. package/source/components/_common/IconSVG/SVG/vehicle/CheckoutChecked.tsx +2 -2
  97. package/source/components/_common/IconSVG/SVG/vehicle/Date.tsx +2 -2
  98. package/source/components/_common/IconSVG/SVG/vehicle/Door.tsx +5 -7
  99. package/source/components/_common/IconSVG/SVG/vehicle/FuelConsumption.tsx +1 -1
  100. package/source/components/_common/IconSVG/SVG/vehicle/NewCar.tsx +7 -9
  101. package/source/components/_common/IconSVG/SVG/vehicle/Ps.tsx +1 -1
  102. package/source/components/_common/IconSVG/SVG/vehicle/SelectorGearboxAutomatic.tsx +2 -2
  103. package/source/components/_common/MaterialAccordionGroup/MaterialAccordionGroup.styled.tsx +17 -1
  104. package/source/components/_common/MaterialAccordionGroup/MaterialAccordionGroup.tsx +3 -4
  105. package/source/components/_common/MaterialAutocomplete/MaterialAutocomplete.styled.tsx +6 -3
  106. package/source/components/_common/MaterialAutocomplete/MaterialAutocomplete.tsx +28 -3
  107. package/source/components/_common/MaterialSelect/MaterialSelect.styled.tsx +0 -7
  108. package/source/components/_common/MaterialSelect/MaterialSelect.tsx +16 -9
  109. package/source/components/_common/Modal/CookieModal.tsx +10 -7
  110. package/source/components/_common/Modal/Modal.styled.tsx +2 -1
  111. package/source/components/_common/Modal/modals/ManageCookieModal/ManageCookieModal.styl +15 -3
  112. package/source/components/_common/Modal/modals/ManageCookieModal/ManageCookieModal.tsx +5 -3
  113. package/source/components/_common/Modal/modals/PreviewCookieModal/PreviewCookieModal.styl +11 -1
  114. package/source/components/_common/Modal/modals/PreviewCookieModal/PreviewCookieModal.tsx +2 -0
  115. package/source/components/_common/TimePicker/TimePicker.styl +3 -1
  116. package/source/components/_common/TimePicker/TimePicker.tsx +6 -2
  117. package/source/components/_common/UserMenu/MaterialMenu.styled.tsx +2 -1
  118. package/source/components/_common/withStats/withStats.styl +43 -87
  119. package/source/components/_common/withStats/withStats.tsx +17 -8
  120. package/source/components/containers/SearchPage/FiltersContainer/FiltersContainer.styl +7 -3
  121. package/source/framework/constants/common.ts +15 -3
  122. package/source/framework/factories/BreadcrumbsFactory.tsx +19 -8
  123. package/source/framework/factories/FactoryTypes.d.ts +1 -0
  124. package/source/framework/types/types.ts +4 -2
  125. package/source/framework/utils/CommonUtils.ts +26 -9
  126. package/source/framework/vehiclesProps/decoratedProps.tsx +19 -23
  127. package/source/framework/vehiclesProps/equipment.ts +4 -3
  128. package/source/locales/data.ts +2 -0
  129. package/source/theme/priceReviewColors.styl +3 -1
  130. package/utils.ts +16 -0
@@ -4,8 +4,9 @@ import classnames from 'classnames';
4
4
  import VehiclePriceItem from '../VechiclePriceItem/VechiclePriceItem';
5
5
  import { IBuy, ILeasing, IFinancing, ICommonFinancing } from '../../../../framework/types/types';
6
6
  import { Hidden } from 'react-grid-system';
7
+ import { isMobileOnly } from 'react-device-detect';
7
8
  import Button from '../../../../components/_common/Button/Button';
8
- import Checkbox from '../../../../components/_common/Checkbox/Checkbox';
9
+ import CheckboxMaterial from '../../../../components/_common/CheckboxMaterial/CheckboxMaterial';
9
10
  import IconSVG from '../../../_common/IconSVG/IconSVG';
10
11
 
11
12
  export interface IVehiclePriceSectionProps {
@@ -18,15 +19,20 @@ export interface IVehiclePriceSectionProps {
18
19
  isDealerSuperAdmin?: boolean;
19
20
  routeObj?: any;
20
21
  linkTag?: string;
22
+ classButton?: string;
21
23
  showAboIcon?: boolean;
24
+ dashboardButtonText?: string;
22
25
  isNewPriceCategory?: boolean;
23
- vehicleComponentName?: 'comparable' | 'landing' | 'search' | 'main' | 'myVehicles' | 'favorite';
26
+ vehicleComponentName?: 'comparable' | 'landing' | 'search' | 'main' | 'myVehicles' | 'favorite' | 'recently';
24
27
  monthlyInstallment?: number;
25
28
  oldMonthlyInstallment?: number;
26
29
  positionY?: string;
27
30
  url?: string;
31
+ target?: string;
32
+ rel?: string;
28
33
  iconName?: string;
29
34
  mainImageId?: string;
35
+ showCompareCheckboxes?: boolean;
30
36
  toRound?: boolean;
31
37
  showOfferBtn?: boolean;
32
38
  margin?: number;
@@ -74,9 +80,10 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
74
80
  };
75
81
 
76
82
  onDetailsClick = (event: React.MouseEvent<HTMLButtonElement>) => {
83
+ const { id, onDetailsClick } = this.props;
77
84
  event.preventDefault();
78
85
  event.stopPropagation();
79
- this.props.onDetailsClick(this.props.url);
86
+ onDetailsClick(id);
80
87
  };
81
88
 
82
89
  render(): React.ReactNode {
@@ -84,13 +91,18 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
84
91
  t,
85
92
  combineRefAlternative,
86
93
  url,
94
+ target,
95
+ rel,
87
96
  isDealerSuperAdmin,
88
97
  linkTag,
89
98
  showOfferBtn,
90
99
  routeObj,
91
100
  toggleCarToCompare,
92
101
  toCompare,
102
+ dashboardButtonText,
103
+ classButton,
93
104
  onRemoveClick,
105
+ showCompareCheckboxes,
94
106
  vatRate,
95
107
  iconName,
96
108
  vehicleComponentName,
@@ -112,33 +124,43 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
112
124
  const vehiclePriceSectionClassName = classnames(
113
125
  styles.vehiclePriceSection,
114
126
  { [styles.vehiclePriceSectionSearch]: vehicleComponentName === 'search' || vehicleComponentName === 'myVehicles' },
115
- { [styles.vehiclePriceSectionFavorite]: vehicleComponentName === 'favorite' }
127
+ { [styles.vehiclePriceSectionFavorite]: vehicleComponentName === 'favorite' },
128
+ { [styles.vehiclePriceSectionRecently]: vehicleComponentName === 'recently' }
116
129
  );
117
130
 
118
131
  const vehiclePriceTitleClassName = classnames(
119
132
  styles.vehiclePriceTitle,
120
- { [styles.vehiclePriceTitleSearch]: vehicleComponentName === 'search' || 'myVehicles' || 'favorite' }
133
+ { [styles.vehiclePriceTitleFavorite]: vehicleComponentName === 'favorite' },
134
+ { [styles.vehiclePriceTitleRecently]: vehicleComponentName === 'recently' },
135
+ { [styles.vehiclePriceTitleSearch]: vehicleComponentName === 'search' || 'myVehicles' }
121
136
  );
122
137
  const priceItemsGlobal = [
123
138
  {
124
139
  perMonthOld: oldMonthlyInstallment,
125
140
  perMonthCurrent: monthlyInstallment,
126
141
  title: t('vehicleProps:title.financing'),
142
+ prefixOldPrice: vehicleComponentName === 'search' && !isMobileOnly && t('vehicleProps:value.prefixOldPrice'),
127
143
  postfix: '3',
144
+ priceSub: t('vehicleProps:value.priceSub'),
128
145
  tooltipDescription: !combineRefAlternative && t('vehicleProps:title.financingDescription')
129
146
  },
130
147
  {
131
148
  perMonthOld: lOldMonthlyInstallment,
132
149
  perMonthCurrent: lMonthlyInstallment,
133
- isNewPriceCategory: true,
150
+ prefixOldPrice: vehicleComponentName === 'search' && !isMobileOnly && t('vehicleProps:value.prefixOldPrice'),
134
151
  postfix: '1,3',
135
152
  isPriceDisable: !isLeasingActive,
136
153
  title: t('vehicleProps:title.leasing'),
154
+ priceSub: t('vehicleProps:value.priceSub'),
137
155
  tooltipDescription: !combineRefAlternative && t('vehicleProps:title.leasingDescription')
138
156
  }
139
157
  ];
140
158
 
141
- const Abo = vehicleComponentName !== 'favorite' ? [
159
+ const showAboCondition = vehicleComponentName !== 'favorite' &&
160
+ vehicleComponentName !== 'recently' &&
161
+ vehicleComponentName !== 'search';
162
+
163
+ const Abo = showAboCondition ? [
142
164
  {
143
165
  perMonthOld: oldMonthlyInstallment,
144
166
  perMonthCurrent: monthlyInstallment,
@@ -181,6 +203,8 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
181
203
  const ListPrices = priceData.map((
182
204
  {
183
205
  title,
206
+ priceSub,
207
+ prefixOldPrice,
184
208
  totalCurrent,
185
209
  tooltipDescription,
186
210
  perMonthOld,
@@ -206,10 +230,14 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
206
230
  showAboIcon={showAboIcon}
207
231
  totalOld={highestPriceExtra}
208
232
  isTotal={isTotal}
233
+ priceSub={priceSub}
209
234
  positionY={positionY}
210
235
  url={url}
236
+ target={target}
237
+ rel={rel}
211
238
  isStrikeShown={isStrikeShown}
212
239
  iconName={iconName}
240
+ prefixOldPrice={prefixOldPrice}
213
241
  totalCurrent={totalCurrent}
214
242
  postfix={postfix}
215
243
  linkTag={linkTag}
@@ -220,28 +248,36 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
220
248
  );
221
249
  });
222
250
  const buttonClassNames = classnames(
251
+ classButton,
223
252
  styles.buttonDetails,
224
253
  { [styles.isAlternativeButton]: typeAlternative }
225
254
  );
226
255
  return (
227
256
  <section className={vehiclePriceSectionClassName}>
228
- {vehicleComponentName === 'favorite' ? (
229
- <Checkbox
257
+ {vehicleComponentName === 'favorite' && showCompareCheckboxes && (
258
+ <CheckboxMaterial
230
259
  checked={toCompare}
231
260
  onChange={toggleCarToCompare}
261
+ labelPlacement='start'
232
262
  label={t('FavoritesPage:toCompare')}
233
- labelClassName={styles.wrapCheckbox}
263
+ formControlClassName={styles.wrapCheckbox}
234
264
  />
235
- ) : <span className={vehiclePriceTitleClassName}>{t('vehicleProps:title.monthlyFrom')}</span>}
265
+ )}
266
+ {vehicleComponentName !== 'favorite' && vehicleComponentName !== 'search' && (
267
+ <span className={vehiclePriceTitleClassName}>{t('vehicleProps:title.monthlyFrom')}</span>
268
+ )}
269
+ {vehicleComponentName === 'search' && isMobileOnly && (
270
+ <span className={vehiclePriceTitleClassName}>{t('vehicleProps:title.monthlyFrom')}</span>
271
+ )}
236
272
  {ListPrices}
237
- {vehicleComponentName === 'favorite' && (
273
+ {vehicleComponentName === 'favorite' && showCompareCheckboxes && (
238
274
  <div className={styles.wrapHandleCompare}>
239
275
  <Button variant='outlined' onClick={onRemoveClick} className={styles.btnCompareRemove} color='error'>
240
276
  <IconSVG className={styles.removeIcon} name='trashRed' customDimensions />
241
277
  </Button>
242
278
  <Button className={styles.btnCarToCompare} variant='outlined' onClick={toggleCarToCompare}>
243
279
  <span className={styles.btnPlusIcon}>{!toCompare ? '+' : '-'}</span>
244
- <span className={styles.btnText}>{t('FavoritesPage:compare')}</span>
280
+ {t('FavoritesPage:compare')}
245
281
  </Button>
246
282
  </div>
247
283
  )}
@@ -251,9 +287,7 @@ class VehiclePrice extends React.Component<IVehiclePriceSectionProps> {
251
287
  </Button>
252
288
  ) : null}
253
289
  {showOfferBtn ? (
254
- <Hidden xs>
255
- <Button color='primary' className={buttonClassNames} onClick={this.onDetailsClick}>{t('vehicleProps:title.toOffer')}</Button>
256
- </Hidden>
290
+ <Button color='primary' className={buttonClassNames} onClick={this.onDetailsClick}>{t('vehicleProps:title.toOffer')}</Button>
257
291
  ) : ''}
258
292
  </section>
259
293
  );
@@ -5,17 +5,15 @@
5
5
  box-sizing: border-box;
6
6
  font-size: 12px
7
7
  line-height: 1;
8
- color: $grey-3
8
+ color: rgba(76, 78, 100, 0.87);
9
9
  align-items: center;
10
- border-bottom: 1px solid $grey-d
11
-
12
- +media-phone-up()
13
- font-size: 11px
10
+ border-bottom: 1px solid rgba(76, 78, 100, 0.12);
14
11
 
15
12
  .carIcon
16
- max-width: 16px;
17
- margin-right: 6px
13
+ width: 28px;
14
+ height: 30px;
15
+ margin-right: 5px
18
16
  flex-shrink: 0
19
17
 
20
- +media-phone-up()
18
+ +media-tablet-landscape-up()
21
19
  margin-right: 10px
@@ -2,21 +2,22 @@
2
2
 
3
3
  .infoSection
4
4
  position: relative
5
- display: flex
6
5
  align-items: center;
7
6
  box-sizing: border-box
8
- padding: 7px 6px;
9
-
10
- +media-phone-only()
11
- display: block
12
- padding: 10px 30px 10px 10px
13
-
7
+ display: block
8
+ padding: 10px 30px 10px 16px
9
+ +media-tablet-landscape-up()
10
+ padding: 6px;
11
+ display: flex
14
12
  &.infoSectionSearch
15
13
  +media-tablet-landscape-up()
16
14
  padding 0;
17
15
  &.infoSectionMyVehicles
18
16
  +media-phone-only()
19
17
  display: flex
18
+ &.infoSectionRecently
19
+ +media-tablet-landscape-down()
20
+ padding: 12px 30px 12px 16px
20
21
 
21
22
  .wrapTitles
22
23
  display flex;
@@ -25,8 +26,14 @@
25
26
  display block
26
27
  &.wrapTitlesSearch
27
28
  display block
28
- & p
29
- margin: 0;
29
+ +media-tablet-landscape-up()
30
+ display flex
31
+ &.wrapTitlesFavorite
32
+ display: flex;
33
+ +media-tablet-landscape-up()
34
+ display: block;
35
+ &.wrapTitlesRecently
36
+ display: flex;
30
37
 
31
38
  .manufacturerModel
32
39
  font-size: 16px
@@ -48,7 +55,7 @@
48
55
  margin 0
49
56
  max-width: 88vw
50
57
 
51
- +media-phone-up()
58
+ +media-tablet-landscape-up()
52
59
  margin: 0 0 -1px 3px
53
60
  max-width: 100%;
54
61
 
@@ -61,13 +68,25 @@
61
68
  truncate();
62
69
 
63
70
  &.optionTitleSearch
64
- font-size: 14px;
71
+ font-size: 12px;
72
+ margin-top: 3px;
73
+ +media-tablet-landscape-up()
74
+ margin-left: 8px;
75
+ margin-top: 0;
76
+ &.optionTitleFavorite
77
+ font-size: 12px;
78
+ margin-left: 8px;
79
+ +media-tablet-landscape-up()
80
+ margin-left: -3px;
81
+ margin-top: 3px;
82
+ &.optionTitleRecently
83
+ font-size: 12px;
84
+ margin-left: 8px;
65
85
  &.optionTitleIsAlternative
66
86
  overflow: hidden;
67
87
  max-width: 260px;
68
88
 
69
89
  .sponsored
70
- font-family: 'Arial Fett', 'Arial Standard', 'Arial'
71
90
  font-weight: 700
72
91
  font-style: normal
73
92
  font-size: 10px
@@ -24,17 +24,22 @@ const VehicleTitle: React.FC<IVehicleTitleProps> = ({
24
24
 
25
25
  const infoSectionClassName = classnames(
26
26
  styles.infoSection,
27
- { [styles.infoSectionSearch]: vehicleComponentName === 'search' || 'favorite' },
27
+ { [styles.infoSectionSearch]: vehicleComponentName === 'search' },
28
+ { [styles.infoSectionRecently]: vehicleComponentName === 'recently' },
28
29
  { [styles.infoSectionMyVehicles]: vehicleComponentName === 'myVehicles' }
29
30
  );
30
31
 
31
32
  const wrapTitlesClassName = classnames(
32
33
  styles.wrapTitles,
33
- { [styles.wrapTitlesSearch]: vehicleComponentName === 'search' || 'myVehicles' || 'favorite' }
34
+ { [styles.wrapTitlesFavorite]: vehicleComponentName === 'favorite' },
35
+ { [styles.wrapTitlesRecently]: vehicleComponentName === 'recently' },
36
+ { [styles.wrapTitlesSearch]: vehicleComponentName === 'search' || vehicleComponentName === 'myVehicles' }
34
37
  );
35
38
  const optionTitleClassName = classnames(
36
39
  styles.optionTitle,
37
- { [styles.optionTitleSearch]: vehicleComponentName === 'search' || 'myVehicles' || 'favorite' },
40
+ { [styles.optionTitleFavorite]: vehicleComponentName === 'favorite' },
41
+ { [styles.optionTitleRecently]: vehicleComponentName === 'recently' },
42
+ { [styles.optionTitleSearch]: vehicleComponentName === 'search' || vehicleComponentName === 'myVehicles' },
38
43
  { [styles.optionTitleIsAlternative]: combineRefAlternative }
39
44
  );
40
45
 
@@ -7,8 +7,8 @@
7
7
  display: grid;
8
8
 
9
9
  +media-tablet-landscape-up()
10
- border-radius: 3px;
11
- border: 1px solid $grey-e
10
+ border-radius: 10px;
11
+ border: 1px solid rgba(76, 78, 100, 0.12)
12
12
 
13
13
  &.disableBorder
14
14
  border-bottom: 0;
@@ -27,14 +27,14 @@
27
27
  border-bottom: 6px solid $skyBlue;
28
28
 
29
29
  +media-tablet-landscape-up()
30
- border: 1px solid $grey-e;
30
+ border: 1px solid rgba(76, 78, 100, 0.12);
31
31
  grid-template-columns: 112px 1fr;
32
32
 
33
33
  &.vehicleWrapComparable
34
34
  min-width: 230px
35
35
  margin: 0 4px
36
36
  border-radius 3px
37
- border: 1px solid $grey-e
37
+ border: 1px solid rgba(76, 78, 100, 0.12);
38
38
  grid-template-columns: 100px 1fr;
39
39
 
40
40
  +media-tablet-down()
@@ -50,7 +50,7 @@
50
50
  &.vehicleWrapMain
51
51
  grid-template-columns: 112px 1fr;
52
52
  border-radius 3px
53
- border: 1px solid $grey-e
53
+ border: 1px solid rgba(76, 78, 100, 0.12);
54
54
 
55
55
  +media-phone-only()
56
56
  grid-template-columns: 155px 1fr;
@@ -61,13 +61,18 @@
61
61
  'image image'\
62
62
  'info price'\
63
63
  'seoText seoText'
64
- grid-template-columns: 50% 50%;
65
- border-bottom: 6px solid $skyBlue;
64
+ grid-template-columns: 55% 45%;
65
+ border-bottom: 1px solid #DFDFDF;
66
+ border-top: 1px solid #DFDFDF;
67
+ margin-bottom: 5px;
68
+ padding-bottom: 8px;
66
69
  +media-tablet-landscape-up()
67
- border: 1px solid $grey-e;
70
+ height: 252px;
71
+ box-sizing: border-box;
72
+ border: 1px solid rgba(76, 78, 100, 0.12);
68
73
  padding: 10px;
69
74
  grid-gap: 10px 15px;
70
- grid-template-columns: 260px 1fr 169px;
75
+ grid-template-columns: 260px 1fr 189px;
71
76
  grid-template-areas:
72
77
  'title title price'\
73
78
  'image info price'
@@ -78,12 +83,11 @@
78
83
  'image image'\
79
84
  'info price'\
80
85
  'seoText seoText'
81
- grid-template-columns: 155px 1fr;
82
- border: 1px solid $grey-e;
86
+ grid-template-columns: 160px 1fr;
87
+ border: 1px solid rgba(76, 78, 100, 0.12);
83
88
  border-radius: 10px;
84
89
  padding-bottom: 15px;
85
90
  +media-tablet-landscape-up()
86
- border: 1px solid $grey-e;
87
91
  padding: 10px;
88
92
  grid-gap: 10px 15px;
89
93
  grid-template-columns: 260px 1fr 245px;
@@ -91,6 +95,30 @@
91
95
  'title title price'\
92
96
  'image info price'
93
97
 
98
+ &.vehicleWrapRecently
99
+ box-sizing: border-box;
100
+ grid-template-areas:
101
+ 'title title'\
102
+ 'image image'\
103
+ 'info price'\
104
+ 'seoText seoText'
105
+ grid-template-columns: 160px 1fr;
106
+ border: 1px solid rgba(76, 78, 100, 0.12);
107
+ border-radius: 10px;
108
+ padding-bottom: 15px;
109
+
110
+ & [class*='withStats__topWrapper']
111
+ left: 16px;
112
+ right: 16px;
113
+
114
+ & [class*='withStats__controls']
115
+ padding: 0 16px;
116
+
117
+ +media-tablet-up()
118
+ max-width: 98%;
119
+ +media-tablet-landscape-up()
120
+ max-width: 346px;
121
+
94
122
  &.vehicleWrapMyVeicles
95
123
  grid-template-areas:
96
124
  'title title'\
@@ -102,7 +130,7 @@
102
130
  grid-template-columns: 50% 50%;
103
131
  border-bottom: 6px solid $skyBlue;
104
132
  +media-tablet-landscape-up()
105
- border: 1px solid $grey-e;
133
+ border: 1px solid rgba(76, 78, 100, 0.12);
106
134
  padding: 10px;
107
135
  grid-gap: 0 15px;
108
136
  grid-template-columns: 260px 1fr 169px 236px;
@@ -143,8 +171,6 @@
143
171
  text-decoration: none;
144
172
  display: block;
145
173
 
146
- .gridAreaImage
147
-
148
174
  .gridAreaTitle
149
175
  grid-area: title;
150
176
  max-width: 100%;
@@ -172,9 +198,15 @@
172
198
  &:first-of-type
173
199
  color: $skyBlue;
174
200
 
175
- .svgIcon
176
- margin-right: 10px;
177
-
178
201
  .isFirstReferenceCar
179
202
  border: 1px solid $skyBlue !important;
180
- background-color: #005CCB0D;
203
+ background-color: #005CCB0D;
204
+ justify-content: space-between;
205
+ margin-top: 5px;
206
+
207
+ & > div
208
+ display flex
209
+ align-items: center
210
+
211
+ &:first-of-type
212
+ color: $skyBlue;
@@ -3,7 +3,7 @@ import classnames from 'classnames';
3
3
  import _get from 'lodash/get';
4
4
  import LazyLoad from 'react-lazyload';
5
5
  import withLabel from '../_common/withLabel/withLabel';
6
- import withStats, { IStatsWrapperProps, IStatsData } from '../_common/withStats/withStats';
6
+ import withStats, { IStatsWrapperProps } from '../_common/withStats/withStats';
7
7
  import Image from '../_common/Image/Image';
8
8
  import IconSVG from '../_common/IconSVG/IconSVG';
9
9
  import VehicleSlider from '../_common/VehicleSlider/VehicleSlider';
@@ -32,16 +32,16 @@ interface IVehicleSmallCardProps {
32
32
  t?: (key: string, options?: object) => string;
33
33
  i18nPrefixForPriceRating?: string;
34
34
  language?: string;
35
- vehicleComponentName?: 'comparable' | 'landing' | 'search' | 'main' | 'myVehicles' | 'favorite';
35
+ vehicleComponentName?: 'comparable' | 'landing' | 'search' | 'main' | 'myVehicles' | 'favorite' | 'recently';
36
36
  isTop?: boolean;
37
37
  isDealer?: boolean;
38
38
  isDealerSuperAdmin?: boolean;
39
39
  isReferenceSearch?: boolean;
40
+ dashboardButtonText?: string;
40
41
  showNewLabel?: boolean;
41
42
  CircularProgressbar?: any;
42
43
  slider?: IVehicleSliderProps | IVehicleSliderForSRLProps;
43
44
  stats?: IStatsWrapperProps;
44
- statsData?: IStatsData;
45
45
  title?: IVehicleTitleProps;
46
46
  info?: IVehicleInfo;
47
47
  location?: IVehicleLocation;
@@ -53,6 +53,7 @@ interface IVehicleSmallCardProps {
53
53
  offer?: object;
54
54
  price?: IPrice;
55
55
  seoText?: string;
56
+ classButton?: string;
56
57
  mainImageId?: string;
57
58
  crawledAt?: string;
58
59
  modificationDate?: string;
@@ -69,6 +70,8 @@ interface IVehicleSmallCardProps {
69
70
  children?: ReactNode;
70
71
  showSlider?: boolean;
71
72
  showOfferBtn?: boolean;
73
+ hasInteriorExteriorPhoto?: boolean;
74
+ showCompareCheckboxes?: boolean;
72
75
  showFavoriteStar?: boolean;
73
76
  minimizeData?: boolean;
74
77
  onContainerClick?: (event?: any) => void;
@@ -91,7 +94,6 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
91
94
  vehicleComponentName,
92
95
  i18nPrefixForPriceRating,
93
96
  stats,
94
- statsData,
95
97
  compareProps,
96
98
  title,
97
99
  info,
@@ -99,6 +101,7 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
99
101
  consumption,
100
102
  environmentEmissions,
101
103
  isReferenceSearch,
104
+ showCompareCheckboxes,
102
105
  CircularProgressbar,
103
106
  engineData,
104
107
  offer,
@@ -109,6 +112,8 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
109
112
  language,
110
113
  className,
111
114
  url,
115
+ target,
116
+ rel,
112
117
  onContainerClick,
113
118
  onAddOfferToMainSlideClick,
114
119
  isDealer,
@@ -130,6 +135,9 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
130
135
  iconName,
131
136
  showSlider,
132
137
  percentage,
138
+ classButton,
139
+ hasInteriorExteriorPhoto,
140
+ dashboardButtonText,
133
141
  showOfferBtn = false,
134
142
  showFavoriteStar = true,
135
143
  minimizeData = false,
@@ -154,6 +162,7 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
154
162
  { [styles.vehicleWrapComparable]: vehicleComponentName === 'comparable' },
155
163
  { [styles.vehicleWrapMyVeicles]: vehicleComponentName === 'myVehicles' },
156
164
  { [styles.vehicleWrapFavorite]: vehicleComponentName === 'favorite' },
165
+ { [styles.vehicleWrapRecently]: vehicleComponentName === 'recently' },
157
166
  { [styles.topVehicle]: isTop },
158
167
  { [styles.disableBorder]: minimizeData },
159
168
  { [styles.isFirstReferenceCar]: isReferenceSearch && index === 0 && currentPage === 1 },
@@ -163,6 +172,7 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
163
172
  const decoratedSliderProps = {
164
173
  t,
165
174
  id,
175
+ hasInteriorExteriorPhoto,
166
176
  ...label,
167
177
  ...stats,
168
178
  ...slider,
@@ -185,7 +195,9 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
185
195
  combineRefAlternative
186
196
  };
187
197
 
188
- const routeObj = linkTag !== 'a' ? { to: { pathname: url, state: { mainImageUrl: src } } } : '';
198
+ const routeObj = linkTag !== 'a'
199
+ ? { to: { pathname: url, state: { mainImageId, mainImageUrl: src, carId: id, isSavedCheckout: showOfferBtn, ...title } } }
200
+ : '';
189
201
 
190
202
  const vehicleInfoProps = {
191
203
  t,
@@ -200,6 +212,8 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
200
212
  linkTag,
201
213
  routeObj,
202
214
  url,
215
+ target,
216
+ rel,
203
217
  engineData,
204
218
  ...price,
205
219
  ...info
@@ -209,8 +223,12 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
209
223
  t,
210
224
  id,
211
225
  url,
226
+ target,
227
+ rel,
212
228
  iconName,
229
+ dashboardButtonText,
213
230
  vehicleComponentName,
231
+ classButton,
214
232
  linkTag,
215
233
  onAddOfferToMainSlideClick,
216
234
  isDealerSuperAdmin,
@@ -221,6 +239,7 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
221
239
  combineRefAlternative,
222
240
  typeAlternative,
223
241
  isAlternative,
242
+ showCompareCheckboxes,
224
243
  ...price,
225
244
  ...compareProps
226
245
  };
@@ -241,13 +260,17 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
241
260
  t,
242
261
  price,
243
262
  showNewLabel,
244
- statsData
263
+ ...stats
245
264
  };
246
265
 
247
266
  const linkBaseUrl = (e: MouseEvent<HTMLImageElement>) => {
248
267
  e.preventDefault();
249
268
  if (baseUrl) window.open(baseUrl, '_blank');
250
269
  };
270
+ const showComponentLikeSlider = vehicleComponentName === 'search' ||
271
+ vehicleComponentName === 'myVehicles' ||
272
+ vehicleComponentName === 'favorite' ||
273
+ vehicleComponentName === 'recently';
251
274
  return (
252
275
  <section className={wrapperClassName} onClick={onContainerClick} id={id}>
253
276
  {createElement(linkTag, {
@@ -255,7 +278,9 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
255
278
  ...routeObj,
256
279
  className: `${styles.redirectClassLink} ${styles.gridAreaTitle}`,
257
280
  onClick: () => localStorage.setItem('activeTabCDP', t('vehicleProps:title.financing')),
258
- href: url
281
+ href: url,
282
+ target,
283
+ rel
259
284
  })}
260
285
 
261
286
  {createElement(linkTag, {
@@ -263,7 +288,7 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
263
288
  <>
264
289
  {showSlider ? (
265
290
  <>
266
- {vehicleComponentName === 'search' || vehicleComponentName === 'myVehicles' || vehicleComponentName === 'favorite' ? (
291
+ {showComponentLikeSlider ? (
267
292
  <>
268
293
  <DecoratedSliderForSRL {...decoratedSliderProps} />
269
294
  {renderIDInfo && isDealer ? renderIDInfo() : null}
@@ -306,7 +331,9 @@ const VehicleSmallCard: FunctionComponent<IVehicleSmallCardProps> = (props) => {
306
331
  ...routeObj,
307
332
  className: `${styles.redirectClassLink} ${styles.gridAreaImage}`,
308
333
  onClick: () => localStorage.setItem('activeTabCDP', t('vehicleProps:title.financing')),
309
- href: url
334
+ href: url,
335
+ target,
336
+ rel
310
337
  })}
311
338
  <VehicleInfo {...vehicleInfoProps} />
312
339
  <VehiclePrice {...vehiclePriceProps} />
@@ -326,6 +353,7 @@ VehicleSmallCard.defaultProps = {
326
353
  isTop: false,
327
354
  showSlider: false,
328
355
  isDealerSuperAdmin: false,
356
+ showCompareCheckboxes: false,
329
357
  slider: {},
330
358
  stats: {},
331
359
  title: {},
@@ -351,6 +379,7 @@ export default memo(VehicleSmallCard, (props, nextProps) => { // shouldComponent
351
379
  financing: { monthlyInstallment, annualMileage, withFinalInstallment },
352
380
  leasing: { monthlyInstallment: lMonthlyInstallment }
353
381
  },
382
+ stats: { statsData },
354
383
  isCarInFavorite,
355
384
  compareProps,
356
385
  children
@@ -362,6 +391,7 @@ export default memo(VehicleSmallCard, (props, nextProps) => { // shouldComponent
362
391
  && withFinalInstallment === nextProps.price.financing.withFinalInstallment
363
392
  && lMonthlyInstallment === nextProps.price.leasing.monthlyInstallment
364
393
  && isCarInFavorite === nextProps.isCarInFavorite
394
+ && statsData === nextProps.stats.statsData
365
395
  && _get(compareProps, 'toCompare') === _get(compareProps, 'nextProps.toCompare')
366
396
  && children === nextProps.children;
367
397
  });