@bytebrand/fe-ui-core 4.8.111 → 4.8.112
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/.husky/pre-push +4 -0
- package/.storybook/addons.js +4 -0
- package/.storybook/config.js +64 -0
- package/.storybook/postcss.config.js +6 -0
- package/.storybook/preview-head.html +10 -0
- package/.storybook/webpack.config.js +130 -0
- package/__tests__/components/Checkout/OrderOverviewItem/OrderOverviewItem.test.tsx +42 -0
- package/__tests__/components/Checkout/PaymentTypeCard/PaymentTypeCard.test.tsx +50 -0
- package/__tests__/components/Checkout/RadioGroup.test.tsx +95 -0
- package/__tests__/components/Checkout/ServiceCardWrapper.test.tsx +53 -0
- package/__tests__/components/Checkout/Switcher.test.tsx +43 -0
- package/__tests__/components/UserDasboardPage/sections/CheckoutSection/CheckoutSection.test.tsx +613 -0
- package/__tests__/components/UserDasboardPage/sections/FavoriteSection/FavoriteSection.test.tsx +335 -0
- package/__tests__/components/UserDasboardPage/sections/OrderStatusSection/AdditionalOrderInfo.test.tsx +127 -0
- package/__tests__/components/UserDasboardPage/sections/OrderStatusSection/OrderStatusCar.test.tsx +58 -0
- package/__tests__/components/UserDasboardPage/sections/OrderStatusSection/OrderStatusCard.test.tsx +74 -0
- package/__tests__/components/UserDasboardPage/sections/OrderStatusSection/OrderStatusSection.test.tsx +62 -0
- package/__tests__/components/UserDasboardPage/sections/RequestedCarsSection/RequestedCarsSection.test.tsx +117 -0
- package/__tests__/components/Vehicle/VehicleFormattedPrice/VehicleFormattedPrice.test.tsx +58 -0
- package/__tests__/components/VehicleSmallCard/VehicleInfo.test.tsx +88 -0
- package/__tests__/components/VehicleSmallCard/VehicleTitle.test.tsx +91 -0
- package/__tests__/components/_common/Badge/Badge.test.tsx +15 -0
- package/__tests__/components/_common/IconSVG/IconSVG.test.tsx +23 -0
- package/__tests__/components/_common/Image/Image.test.tsx +82 -0
- package/__tests__/components/_common/MaterialAutocomplete/MaterialAutocomplete.test.tsx +49 -0
- package/__tests__/components/_common/MaterialDatePicker/MaterialDatePicker.test.tsx +54 -0
- package/__tests__/components/_common/MaterialField/MaterialField.test.tsx +58 -0
- package/__tests__/components/_common/StarButton/StarButton.test.tsx +46 -0
- package/__tests__/mockedData/financingConfig.js +202 -0
- package/__tests__/mockedData/mockedPendingRequestedCar.js +69 -0
- package/__tests__/utils/CommonUtils/addPrefixToKeys.test.ts +18 -0
- package/__tests__/utils/CommonUtils/arrToObj.test.js +32 -0
- package/__tests__/utils/CommonUtils/checkRangeValuesOnEqual.test.ts +17 -0
- package/__tests__/utils/CommonUtils/fixNumber.test.ts +20 -0
- package/__tests__/utils/CommonUtils/formatMileage.test.ts +8 -0
- package/__tests__/utils/CommonUtils/getChipFilterValue.test.ts +22 -0
- package/__tests__/utils/CommonUtils/getFormattedNumber.test.ts +19 -0
- package/__tests__/utils/CommonUtils/getFormattedPrice.test.ts +19 -0
- package/__tests__/utils/CommonUtils/getGroupValuesForQuery.test.ts +51 -0
- package/__tests__/utils/CommonUtils/getOfferSliders.test.ts +64 -0
- package/__tests__/utils/CommonUtils/getPriceRating.test.ts +26 -0
- package/__tests__/utils/CommonUtils/getPriceRatingConfig.test.ts +33 -0
- package/__tests__/utils/CommonUtils/preloadNearbyImages.test.ts +9 -0
- package/__tests__/utils/CommonUtils/sliceLessThan.test.ts +23 -0
- package/__tests__/utils/CommonUtils/sliceMoreThan.test.ts +23 -0
- package/media/locales/de/promoSlider.json +1 -0
- package/media/locales/en/promoSlider.json +1 -0
- package/package.json +118 -120
- package/source/components/AccordionWidget/AccordionWidget.styl +13 -1
- package/source/components/AccordionWidget/AccordionWidget.tsx +49 -8
- package/source/components/AdvantageItem/AdvantageItem.story.js +23 -0
- package/source/components/Alternative/Dealer.story.js +32 -0
- package/source/components/Alternative/Dealer.story.styl +3 -0
- package/source/components/Breadcrumbs/Breadcrumbs.story.js +40 -0
- package/source/components/Breadcrumbs/FirstInfoBlock/FirstInfoBlock.story.js +45 -0
- package/source/components/Checkout/OrderOverviewItem/OrderOverviewItem.story.js +243 -0
- package/source/components/Checkout/OrderOverviewItem/OrderOverviewItem.story.styl +21 -0
- package/source/components/Checkout/RadioCards/RadioGroupCheckout.story.js +105 -0
- package/source/components/Checkout/RadioCards/RadioGroupCheckout.story.styl +37 -0
- package/source/components/Checkout/Switcher/Switcher.story.js +41 -0
- package/source/components/Checkout/Switcher/Switcher.story.styl +2 -0
- package/source/components/CompactSearchWidget/CompactSearchWidget.story.js +187 -0
- package/source/components/ContactForm/ContactForm.story.js +94 -0
- package/source/components/ContactForm/ContactForm.story.styl +0 -0
- package/source/components/ContactInfo/ContactInfo.story.js +58 -0
- package/source/components/CustomerQuote/CustomerQuote.story.js +41 -0
- package/source/components/CustomerQuotesSlider/CustomerQuotesSlider.story.js +73 -0
- package/source/components/CustomerQuotesSlider/CustomerQuotesSlider.story.styl +5 -0
- package/source/components/FormattedNumber/FormattedNumber.story.js +114 -0
- package/source/components/InfoBlocks/InfoBlockWrapper.story.js +101 -0
- package/source/components/InfoBlocks/InfoBlockWrapper.story.styl +46 -0
- package/source/components/OfferPanel/AboAccordion/AboFaq/AboFaq.story.js +97 -0
- package/source/components/OfferPanel/OfferCheckboxGroup/CheckboxContainer.tsx +2 -2
- package/source/components/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.styl +24 -0
- package/source/components/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.tsx +1 -2
- package/source/components/OfferPanel/OfferPanel.story.js +139 -0
- package/source/components/OfferPanel/OfferPanel.tsx +1 -1
- package/source/components/OfferPanel/RangeGroup/RangeGroup.story.js +35 -0
- package/source/components/OfferPanel/RangeGroup/RangeGroup.story.styl +3 -0
- package/source/components/PriceRating/PriceRating.story.js +39 -0
- package/source/components/PriceRating/PriceRating.story.styl +2 -0
- package/source/components/PriceRatingDetailed/PriceRatingDetailed.story.js +78 -0
- package/source/components/PriceRatingDetailed/PriceRatingDetailed.story.styl +11 -0
- package/source/components/RateSearchValue/RateSearchValue.story.js +78 -0
- package/source/components/RateSearchValue/RateSearchValue.story.styl +2 -0
- package/source/components/RateSearchWidget/RateSearchWidget.story.js +57 -0
- package/source/components/RateSearchWidget/RateSearchWidget.story.styl +12 -0
- package/source/components/SearchFilters/FiltersFactory.story.js +273 -0
- package/source/components/SearchPage/Filters/MakeModel/MakeModel.story.js +12 -0
- package/source/components/SearchWidget/BasicDataWidget/BasicDataWidget.story.js +834 -0
- package/source/components/SearchWidget/BasicDataWidget/BasicDataWidget.story.styl +40 -0
- package/source/components/SearchWidget/SearchWidget.story.js +191 -0
- package/source/components/SearchWidget/SearchWidget.story.styl +6 -0
- package/source/components/Stepper/Stepper.story.js +119 -0
- package/source/components/Stepper/Stepper.story.styl +41 -0
- package/source/components/Theme.story.js +36 -0
- package/source/components/Theme.story.styl +85 -0
- package/source/components/TickerText/TickerText.story.js +17 -0
- package/source/components/UserDashboardPage/sections/OrderStatusSection/OrderStatusSection.story.js +95 -0
- package/source/components/UserDashboardPage/sections/RequestedCarsSection/RequestedCarsSection.story.js +97 -0
- package/source/components/Vehicle/VehicleConsumption/VehicleConsumption.story.js +31 -0
- package/source/components/Vehicle/VehicleFormattedPrice/VehicleFormattedPrice.story.js +247 -0
- package/source/components/VehicleCompared/CompareGeneral/CompareGeneral.story.js +30 -0
- package/source/components/VehicleCompared/ComparePrice/ComparePrice.story.js +18 -0
- package/source/components/VehicleCompared/CompareTitle/CompareTitle.story.js +19 -0
- package/source/components/VehicleDetailedSidebar/VehicleDetailedSidebar.story.js +44 -0
- package/source/components/VehicleDetailedSidebar/VehicleDetailedSidebar.tsx +23 -11
- package/source/components/VehicleDetailedSidebar/partials/Properties.styl +5 -0
- package/source/components/VehicleDetailedSidebar/partials/Properties.tsx +56 -18
- package/source/components/VehicleDetailedSlider/VehicleDetailedSlider.story.js +120 -0
- package/source/components/VehicleDetailedSlider/VehicleDetailedSlider.tsx +2 -6
- package/source/components/VehiclePromoSlider/VehiclePromoInfo/VehiclePromoInfo.story.js +42 -0
- package/source/components/VehiclePromoSlider/VehiclePromoSlide/VehiclePromoSlide.story.js +62 -0
- package/source/components/VehiclePromoSlider/VehiclePromoSlider.story.js +42 -0
- package/source/components/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +42 -0
- package/source/components/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +23 -11
- package/source/components/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +60 -5
- package/source/components/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +36 -12
- package/source/components/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +3 -2
- package/source/components/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +18 -7
- package/source/components/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +4 -1
- package/source/components/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.tsx +3 -2
- package/source/components/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +1 -1
- package/source/components/VehicleSmallCard/VehicleSmallCard.story.js +412 -0
- package/source/components/VehicleSmallCard/VehicleSmallCard.story.styl +56 -0
- package/source/components/VehicleSmallCard/VehicleSmallCard.styl +67 -2
- package/source/components/VehicleSmallCard/VehicleSmallCard.tsx +49 -3
- package/source/components/VehicleSmallCardForDealerships/VehicleSmallCardForDealerships.story.js +199 -0
- package/source/components/VehicleSmallCardForDealerships/VehicleSmallCardForDealerships.story.styl +40 -0
- package/source/components/_common/Accordion/Accordion.story.js +36 -0
- package/source/components/_common/Badge/Badge.story.js +27 -0
- package/source/components/_common/Badge/Badge.story.styl +5 -0
- package/source/components/_common/Bubble/Bubble.story.js +52 -0
- package/source/components/_common/Button/Button.story.js +52 -0
- package/source/components/_common/Button/Button.story.styl +5 -0
- package/source/components/_common/ButtonOld/Button.story.js +54 -0
- package/source/components/_common/ButtonOld/Button.story.styl +5 -0
- package/source/components/_common/Checkbox/Checkbox.story.js +85 -0
- package/source/components/_common/Checkbox/Checkbox.story.styl +14 -0
- package/source/components/_common/CheckboxMaterial/CheckboxMaterial.story.js +126 -0
- package/source/components/_common/CheckboxMaterial/CheckboxMaterial.story.styl +14 -0
- package/source/components/_common/Chip/Chip.story.js +43 -0
- package/source/components/_common/ChipList/ChipList.story.js +36 -0
- package/source/components/_common/DropDown/DropDown.story.js +35 -0
- package/source/components/_common/ExpandablePanel/ExpandablePanel.story.js +41 -0
- package/source/components/_common/Histogram/Histogram.story.js +51 -0
- package/source/components/_common/IconSVG/IconSVG.story.js +21 -0
- package/source/components/_common/IconSVG/IconSVG.story.styl +25 -0
- package/source/components/_common/Image/Image.story.js +142 -0
- package/source/components/_common/Image/Image.story.styl +18 -0
- package/source/components/_common/ImagesSet/ImagesSet.story.js +34 -0
- package/source/components/_common/ImagesSet/ImagesSet.story.styl +4 -0
- package/source/components/_common/Loader/Loader.story.js +21 -0
- package/source/components/_common/MaterialAccordionGroup/MaterialAccordionGroup.story.js +49 -0
- package/source/components/_common/MaterialAccordionGroup/MaterialAccordionGroup.styled.tsx +4 -1
- package/source/components/_common/MaterialDatePicker/MaterialDatePicker.story.js +45 -0
- package/source/components/_common/MaterialDatePicker/MaterialDatePicker.story.styl +6 -0
- package/source/components/_common/MaterialField/MaterialField.story.js +87 -0
- package/source/components/_common/MaterialField/MaterialField.story.styl +34 -0
- package/source/components/_common/MaterialSelect/MaterialSelect.story.js +52 -0
- package/source/components/_common/MaterialSelect/MaterialSelect.story.styl +6 -0
- package/source/components/_common/MaterialStepButton/MaterialStepButton.story.js +47 -0
- package/source/components/_common/MaterialStepButton/MaterialStepButton.story.styl +6 -0
- package/source/components/_common/MaterialSwitch/MaterialSwitch.story.js +17 -0
- package/source/components/_common/MaterialTooltip/MaterialTooltip.story.js +10 -0
- package/source/components/_common/MaterialTooltip/MaterialTooltip.tsx +4 -3
- package/source/components/_common/Modal/Modal.story.js +37 -0
- package/source/components/_common/MuiGroupedSelect/MuiGroupedSelect.story.js +21 -0
- package/source/components/_common/PropertySelector/PSGroup.story.js +93 -0
- package/source/components/_common/PropertySelector/PSGroup.story.styl +25 -0
- package/source/components/_common/PropertySelector/ProperySelector.story.js +83 -0
- package/source/components/_common/Radio/FormRadioGroup.story.js +28 -0
- package/source/components/_common/Radio/FormRadioGroup.story.styl +2 -0
- package/source/components/_common/Radio/Radio.story.js +54 -0
- package/source/components/_common/Radio/RadioGroup.story.js +90 -0
- package/source/components/_common/Radio/RadioGroup.story.styl +39 -0
- package/source/components/_common/Range/Range.story.js +46 -0
- package/source/components/_common/Range/Range.story.styl +5 -0
- package/source/components/_common/SliderArrow/SliderArrow.story.js +18 -0
- package/source/components/_common/Tabs/Tabs.story.js +56 -0
- package/source/components/_common/TimePicker/TimePicker.story.js +37 -0
- package/source/components/_common/Tooltip/Tooltip.story.js +28 -0
- package/source/components/_common/UserMenu/MaterialMenu.story.js +73 -0
- package/source/components/_common/VehicleSlider/VehicleSlider.story.js +99 -0
- package/source/components/_common/VehicleSlider/VehicleSlider.story.styl +0 -0
- package/source/components/_common/withLabel/withLabel.story.js +62 -0
- package/source/components/_common/withPopover/withPopover.story.js +48 -0
- package/source/components/_common/withPopover/withPopover.story.styl +54 -0
- package/source/components/_common/withStats/withStats.story.js +75 -0
- package/source/components/_common/withStats/withStats.styl +10 -0
- package/source/framework/DataTransformers.ts +2 -0
- package/source/framework/constants/common.ts +8 -4
- package/source/framework/types/types.ts +1 -0
- package/source/framework/vehiclesProps/decoratedLightProps.tsx +109 -18
- package/source/framework/vehiclesProps/decoratedProps.tsx +68 -9
- package/source/framework/vehiclesProps/vehicleDetails.ts +3 -1
- package/source/locales/data.ts +13 -3
- package/bytebrand-fe-ui-core-4.8.110.tgz +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { storiesOf } from '@storybook/react';
|
|
3
|
+
import MaterialAccordionGroup from './MaterialAccordionGroup';
|
|
4
|
+
|
|
5
|
+
const MaterialAccordionGroupComponent = () => {
|
|
6
|
+
const [switchValue, setSwitchValue] = useState(false);
|
|
7
|
+
const handleSwitch = (value) => {
|
|
8
|
+
setSwitchValue(value);
|
|
9
|
+
};
|
|
10
|
+
const switchProps = {
|
|
11
|
+
value: switchValue,
|
|
12
|
+
onChange: handleSwitch
|
|
13
|
+
}
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
<MaterialAccordionGroup
|
|
17
|
+
title='Collaps item 1'
|
|
18
|
+
tooltipText='tooltipText'
|
|
19
|
+
withSwitch
|
|
20
|
+
switchProps={switchProps}
|
|
21
|
+
>
|
|
22
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
|
|
23
|
+
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
|
|
24
|
+
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
|
|
25
|
+
sit amet blandit leo lobortis eget.
|
|
26
|
+
</MaterialAccordionGroup>
|
|
27
|
+
<MaterialAccordionGroup
|
|
28
|
+
title='collaps item 1'
|
|
29
|
+
>
|
|
30
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
|
|
31
|
+
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
|
|
32
|
+
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
|
|
33
|
+
sit amet blandit leo lobortis eget.
|
|
34
|
+
</MaterialAccordionGroup>
|
|
35
|
+
<MaterialAccordionGroup
|
|
36
|
+
title='collaps item 1'
|
|
37
|
+
tooltipText='tooltipText 3'
|
|
38
|
+
>
|
|
39
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
|
|
40
|
+
malesuada lacus ex, sit amet blandit leo lobortis eget. Lorem ipsum dolor
|
|
41
|
+
sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex,
|
|
42
|
+
sit amet blandit leo lobortis eget.
|
|
43
|
+
</MaterialAccordionGroup>
|
|
44
|
+
</>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
storiesOf('_Common_UI', module)
|
|
49
|
+
.add('MaterialAccordionGroup', () => <MaterialAccordionGroupComponent />)
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { styled, createTheme } from '@mui/material/styles';
|
|
1
|
+
import { styled as muiStyled, createTheme } from '@mui/material/styles';
|
|
2
|
+
|
|
3
|
+
// Cast to any to bypass MUI 5.9 styled() overload mismatch with strict TS in consumers (fe-landing).
|
|
4
|
+
const styled: any = muiStyled;
|
|
2
5
|
|
|
3
6
|
export const AccordionSummaryContent = styled('div')({
|
|
4
7
|
display: 'flex',
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Resizable } from 're-resizable';
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
// Components
|
|
5
|
+
import MaterialDatePicker from './MaterialDatePicker';
|
|
6
|
+
import styles from './MaterialDatePicker.story.styl';
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
_minDate,
|
|
10
|
+
handleMaxDate,
|
|
11
|
+
} from '../../../framework/utils/DateUtils';
|
|
12
|
+
|
|
13
|
+
const resizableProps = {
|
|
14
|
+
defaultSize: {
|
|
15
|
+
width: 360,
|
|
16
|
+
height: 700
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const MaterialDatePickerWrapper = () => {
|
|
21
|
+
const [value, newValue] = useState('');
|
|
22
|
+
|
|
23
|
+
const onHandleChange = (value) => {
|
|
24
|
+
newValue(value);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<Resizable {...resizableProps}>
|
|
29
|
+
<div className={styles.wrapper}>
|
|
30
|
+
<MaterialDatePicker
|
|
31
|
+
language='en'
|
|
32
|
+
maxDate={new Date(handleMaxDate())}
|
|
33
|
+
minDate={_minDate}
|
|
34
|
+
value={value}
|
|
35
|
+
error={true}
|
|
36
|
+
placeholder='Date of Birth DD/MM/YYYY*'
|
|
37
|
+
onChange={(value) => onHandleChange(value)}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
</Resizable>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
storiesOf('_Common_UI', module)
|
|
45
|
+
.add('MaterialDatePicker', () => <MaterialDatePickerWrapper />)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Resizable } from 're-resizable';
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
import styles from './MaterialField.story.styl';
|
|
5
|
+
// Components
|
|
6
|
+
import MaterialField from './MaterialField';
|
|
7
|
+
|
|
8
|
+
const resizableProps = {
|
|
9
|
+
defaultSize: { width: 360, height: 700 }
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const MaterialFieldWrapper = () => {
|
|
13
|
+
const [newData, setNewData] = useState({
|
|
14
|
+
firstName: '',
|
|
15
|
+
lastName: '123123',
|
|
16
|
+
email: '',
|
|
17
|
+
countryCode: '+49',
|
|
18
|
+
areaCode: '',
|
|
19
|
+
phoneNumber: ''
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const onHandleChange = (value, name) => {
|
|
23
|
+
setNewData({ ...newData, [name]: value });
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<Resizable {...resizableProps}>
|
|
28
|
+
<div className={styles.wrapper}>
|
|
29
|
+
<MaterialField
|
|
30
|
+
onChange={value => onHandleChange(value, 'firstName')}
|
|
31
|
+
label='Vorname'
|
|
32
|
+
value={newData.firstName}
|
|
33
|
+
className={styles.firstName}
|
|
34
|
+
error={newData.firstName === '' ? true : false}
|
|
35
|
+
helperText={newData.firstName === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
36
|
+
required
|
|
37
|
+
/>
|
|
38
|
+
<MaterialField
|
|
39
|
+
onChange={value => onHandleChange(value, 'lastName')}
|
|
40
|
+
label='Nachname'
|
|
41
|
+
value={newData.lastName}
|
|
42
|
+
className={styles.lastName}
|
|
43
|
+
error={newData.lastName === '' ? true : false}
|
|
44
|
+
helperText={newData.lastName === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
45
|
+
/>
|
|
46
|
+
<MaterialField
|
|
47
|
+
onChange={value => onHandleChange(value, 'email')}
|
|
48
|
+
label='E-Mail Adresse'
|
|
49
|
+
value={newData.email}
|
|
50
|
+
className={styles.email}
|
|
51
|
+
error={newData.email === '' ? true : false}
|
|
52
|
+
helperText={newData.email === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
53
|
+
/>
|
|
54
|
+
<MaterialField
|
|
55
|
+
onChange={value => onHandleChange(value, 'countryCode')}
|
|
56
|
+
label='Land'
|
|
57
|
+
value={newData.countryCode}
|
|
58
|
+
className={styles.countryCode}
|
|
59
|
+
error={newData.countryCode === '' ? true : false}
|
|
60
|
+
helperText={newData.countryCode === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<MaterialField
|
|
64
|
+
onChange={value => onHandleChange(value, 'areaCode')}
|
|
65
|
+
label='Vorwahl'
|
|
66
|
+
value={newData.areaCode}
|
|
67
|
+
className={styles.areaCode}
|
|
68
|
+
classNameInputLabel={styles.areaCodeInputLabel}
|
|
69
|
+
error={newData.areaCode === '' ? true : false}
|
|
70
|
+
helperText={newData.areaCode === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
71
|
+
/>
|
|
72
|
+
|
|
73
|
+
<MaterialField
|
|
74
|
+
onChange={value => onHandleChange(value, 'phoneNumber')}
|
|
75
|
+
label='Telefonnummer'
|
|
76
|
+
value={newData.phoneNumber}
|
|
77
|
+
className={styles.phoneNumber}
|
|
78
|
+
error={newData.phoneNumber === '' ? true : false}
|
|
79
|
+
helperText={newData.phoneNumber === '' ? '* Bitte geben Sie eine gültige Straße an' : ''}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
</Resizable>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
storiesOf('_Common_UI', module)
|
|
87
|
+
.add('MaterialField', () => <MaterialFieldWrapper />)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
@import '../../../theme/theme.styl'
|
|
2
|
+
|
|
3
|
+
.wrapper
|
|
4
|
+
background-color: #fff;
|
|
5
|
+
box-sizing: border-box;
|
|
6
|
+
padding: 16px
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-gap: 24px 16px
|
|
9
|
+
grid-template-columns: repeat(4, 1fr);
|
|
10
|
+
grid-template-areas:
|
|
11
|
+
'firstName firstName lastName lastName'\
|
|
12
|
+
'email email email email'\
|
|
13
|
+
'countryCode areaCode phoneNumber phoneNumber'
|
|
14
|
+
|
|
15
|
+
.firstName
|
|
16
|
+
grid-area: firstName;
|
|
17
|
+
|
|
18
|
+
.lastName
|
|
19
|
+
grid-area: lastName;
|
|
20
|
+
|
|
21
|
+
.email
|
|
22
|
+
grid-area: email;
|
|
23
|
+
|
|
24
|
+
.countryCode
|
|
25
|
+
grid-area: countryCode;
|
|
26
|
+
|
|
27
|
+
.areaCode
|
|
28
|
+
grid-area: areaCode;
|
|
29
|
+
|
|
30
|
+
.phoneNumber
|
|
31
|
+
grid-area: phoneNumber;
|
|
32
|
+
|
|
33
|
+
.areaCodeInputLabel
|
|
34
|
+
font-size: 13px !important;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Resizable } from 're-resizable';
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
import { MenuItem } from '@mui/material';
|
|
5
|
+
// Components
|
|
6
|
+
import MaterialSelect from './MaterialSelect';
|
|
7
|
+
import styles from './MaterialSelect.story.styl';
|
|
8
|
+
|
|
9
|
+
const resizableProps = {
|
|
10
|
+
defaultSize: { width: 360, height: 700 }
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// const inputFields = [{
|
|
14
|
+
// 'Vorname',
|
|
15
|
+
// 'Nachname'
|
|
16
|
+
// }]
|
|
17
|
+
|
|
18
|
+
const MaterialFieldWrapper = () => {
|
|
19
|
+
const [newData, setNewData] = useState({
|
|
20
|
+
firstName: '',
|
|
21
|
+
lastName: '',
|
|
22
|
+
email: '',
|
|
23
|
+
countryCode: '+49',
|
|
24
|
+
areaCode: '',
|
|
25
|
+
phoneNumber: ''
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const onHandleChange = (event, type) => {
|
|
29
|
+
setNewData({ ...newData, [type]: event.target.value });
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<Resizable {...resizableProps}>
|
|
34
|
+
<div className={styles.wrapper}>
|
|
35
|
+
<MaterialSelect
|
|
36
|
+
onHandleChange={e => onHandleChange(e, 'firstName')}
|
|
37
|
+
label='age'
|
|
38
|
+
value={newData.firstName}
|
|
39
|
+
error={true}
|
|
40
|
+
helperText={`We'll never share your email.`}
|
|
41
|
+
>
|
|
42
|
+
<MenuItem value={1}>Ten</MenuItem>
|
|
43
|
+
<MenuItem value={2}>Twenty</MenuItem>
|
|
44
|
+
<MenuItem value={3}>Thirty</MenuItem>
|
|
45
|
+
</MaterialSelect>
|
|
46
|
+
</div>
|
|
47
|
+
</Resizable>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
storiesOf('_Common_UI', module)
|
|
52
|
+
.add('MaterialSelect', () => <MaterialFieldWrapper />)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Resizable } from 're-resizable';
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
// Components
|
|
5
|
+
import MaterialStepButton from './MaterialStepButton';
|
|
6
|
+
import styles from './MaterialStepButton.story.styl';
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
_minDate,
|
|
10
|
+
handleMaxDate,
|
|
11
|
+
checkingWhenLess18Age,
|
|
12
|
+
createDateAsUTC
|
|
13
|
+
} from '../../../framework/utils/DateUtils';
|
|
14
|
+
|
|
15
|
+
const resizableProps = {
|
|
16
|
+
defaultSize: {
|
|
17
|
+
width: 360,
|
|
18
|
+
height: 700
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const MaterialStepButtonWrapper = () => {
|
|
23
|
+
const [value, newValue] = useState('');
|
|
24
|
+
|
|
25
|
+
const onHandleChange = (value) => {
|
|
26
|
+
newValue(value);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<Resizable {...resizableProps}>
|
|
31
|
+
<div className={styles.wrapper}>
|
|
32
|
+
<MaterialStepButton
|
|
33
|
+
language='en'
|
|
34
|
+
maxDate={new Date(handleMaxDate())}
|
|
35
|
+
minDate={_minDate}
|
|
36
|
+
value={value}
|
|
37
|
+
error={true}
|
|
38
|
+
placeholder='Date of Birth DD/MM/YYYY*'
|
|
39
|
+
onChange={(value) => onHandleChange(createDateAsUTC(value))}
|
|
40
|
+
/>
|
|
41
|
+
</div>
|
|
42
|
+
</Resizable>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
storiesOf('_Common_UI', module)
|
|
47
|
+
.add('MaterialStepButton', () => <MaterialStepButtonWrapper />)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { storiesOf } from '@storybook/react';
|
|
3
|
+
import MaterialSwitch from './MaterialSwitch';
|
|
4
|
+
|
|
5
|
+
const Switch = () => {
|
|
6
|
+
const [value, setValue] = useState(false);
|
|
7
|
+
|
|
8
|
+
const onChange = (checked) => {
|
|
9
|
+
setValue(checked);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return <MaterialSwitch value={value} onChange={onChange} label='switcher' />
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
storiesOf('_Common_UI', module)
|
|
17
|
+
.add('MaterialSwitch', () => <Switch />)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { storiesOf } from '@storybook/react';
|
|
3
|
+
import MaterialTooltip from './MaterialTooltip';
|
|
4
|
+
|
|
5
|
+
const Tooltip = () => {
|
|
6
|
+
return <MaterialTooltip text='info text' icon='infoIcon' />
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
storiesOf('_Common_UI', module)
|
|
10
|
+
.add('MaterialTooltip', () => <Tooltip />)
|
|
@@ -7,12 +7,13 @@ import ClickAwayListener from '@mui/material/ClickAwayListener';
|
|
|
7
7
|
import { debounce } from 'lodash';
|
|
8
8
|
|
|
9
9
|
interface IMaterialTooltip {
|
|
10
|
-
text:
|
|
10
|
+
text: React.ReactNode;
|
|
11
11
|
icon?: string;
|
|
12
12
|
className?: string;
|
|
13
13
|
placement?: 'bottom-end' | 'bottom-start' | 'bottom' | 'left-end' | 'left-start' | 'left' | 'right-end' | 'right-start' | 'right' | 'top-end' | 'top-start' | 'top';
|
|
14
14
|
disabled?: Boolean;
|
|
15
15
|
zindex?: number;
|
|
16
|
+
disablePortal?: boolean;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
const LightTooltip = styled(({ className, ...props }: TooltipProps) => (
|
|
@@ -32,7 +33,7 @@ const LightTooltip = styled(({ className, ...props }: TooltipProps) => (
|
|
|
32
33
|
}
|
|
33
34
|
}));
|
|
34
35
|
|
|
35
|
-
const MaterialTooltip = ({ text, placement, className, disabled, zindex }: IMaterialTooltip) => {
|
|
36
|
+
const MaterialTooltip = ({ text, placement, className, disabled, zindex, disablePortal = true }: IMaterialTooltip) => {
|
|
36
37
|
const [isOpen, setIsOpen] = useState(false);
|
|
37
38
|
|
|
38
39
|
const onHandleMenuOpen = (event: any) => {
|
|
@@ -71,7 +72,7 @@ const MaterialTooltip = ({ text, placement, className, disabled, zindex }: IMate
|
|
|
71
72
|
className={className}
|
|
72
73
|
zindex={zindex}
|
|
73
74
|
PopperProps={{
|
|
74
|
-
disablePortal
|
|
75
|
+
disablePortal
|
|
75
76
|
}}
|
|
76
77
|
>
|
|
77
78
|
<IconButton>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { storiesOf } from '@storybook/react';
|
|
3
|
+
import useModal from '../../../framework/hooks/useModal';
|
|
4
|
+
|
|
5
|
+
import Modal from './Modal';
|
|
6
|
+
|
|
7
|
+
const ModalComponent = () => {
|
|
8
|
+
const { isVisible, toggleModal } = useModal();
|
|
9
|
+
const [modal, setModal] = useState('');
|
|
10
|
+
|
|
11
|
+
const onClearModalState = () => {
|
|
12
|
+
setModal('');
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const onOpenCookieModal = () => {
|
|
16
|
+
setModal('PREVIEW_COOKIE_MODAL');
|
|
17
|
+
toggleModal();
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const modalProps = {
|
|
21
|
+
onClearModalState,
|
|
22
|
+
setModal
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<button onClick={onOpenCookieModal}>
|
|
28
|
+
open modal
|
|
29
|
+
</button>
|
|
30
|
+
<Modal isVisible={isVisible} toggleModal={toggleModal} name={modal} modalProps={modalProps} />
|
|
31
|
+
</>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
storiesOf('_Common_UI', module)
|
|
37
|
+
.add('Modal', () => <ModalComponent />)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Resizable } from 're-resizable';
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
// Components
|
|
5
|
+
import MuiGroupedSelect from './MuiGroupedSelect';
|
|
6
|
+
|
|
7
|
+
const resizableProps = {
|
|
8
|
+
defaultSize: { width: 360, height: 700 }
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const MuiFieldWrapper = () => {
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Resizable {...resizableProps}>
|
|
15
|
+
<MuiGroupedSelect />
|
|
16
|
+
</Resizable>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
storiesOf('_Common_UI', module)
|
|
21
|
+
.add('MuiGroupedSelect', () => <MuiFieldWrapper />)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { storiesOf } from '@storybook/react';
|
|
3
|
+
import { action } from '@storybook/addon-actions';
|
|
4
|
+
|
|
5
|
+
import PropertySelector from './PropertySelector';
|
|
6
|
+
import PSGroup from './PSGroup';
|
|
7
|
+
|
|
8
|
+
import styles from './PSGroup.story.styl';
|
|
9
|
+
|
|
10
|
+
export class PSGroupDefault extends React.Component {
|
|
11
|
+
state = {
|
|
12
|
+
value: ['always']
|
|
13
|
+
};
|
|
14
|
+
action = action('change');
|
|
15
|
+
|
|
16
|
+
onChange = (event, value) => {
|
|
17
|
+
// value here have to be single string|number or array
|
|
18
|
+
this.action(event, value);
|
|
19
|
+
this.setState(() => ({ value }));
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
render() {
|
|
23
|
+
return (
|
|
24
|
+
<PSGroup name='availability' behavior='checkbox' value={this.state.value} containerClassName={styles.default} onChange={this.onChange}>
|
|
25
|
+
<PropertySelector value='1' content='cbd_selector_exterior_color_brown' label='Brown' type='color' />
|
|
26
|
+
<PropertySelector value='2' content='cbd_selector_exterior_color_blue' label='Blue' type='color' />
|
|
27
|
+
<PropertySelector value='3' content='cbd_selector_exterior_color_green' label='Green' type='color' disabled={true} />
|
|
28
|
+
</PSGroup>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export class PSGroupHorizontal extends React.Component {
|
|
34
|
+
state = {
|
|
35
|
+
value: ['M_Sport']
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
action = action('change');
|
|
39
|
+
onChange = (event, value) => {
|
|
40
|
+
this.action(event, value);
|
|
41
|
+
this.setState(() => ({ value }));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
renderSubModel = (index) => {
|
|
45
|
+
const models = ['320 | 2.0 | Automatic', '320 | 2.0 | Diesel', '320 | 2.0'];
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div className={styles.equipment}>
|
|
49
|
+
<div className={styles.column}>
|
|
50
|
+
<span className={styles.value}>
|
|
51
|
+
{models[index]}
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
<div className={styles.column}>
|
|
55
|
+
<span className={styles.title}>
|
|
56
|
+
Power
|
|
57
|
+
</span>
|
|
58
|
+
<span className={styles.value}>
|
|
59
|
+
184 PS / 138 KW
|
|
60
|
+
</span>
|
|
61
|
+
</div>
|
|
62
|
+
<div className={styles.column}>
|
|
63
|
+
<span className={styles.title}>
|
|
64
|
+
Built by
|
|
65
|
+
</span>
|
|
66
|
+
<span className={styles.value}>
|
|
67
|
+
7/2015 – 12/2018
|
|
68
|
+
</span>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
render() {
|
|
75
|
+
return (
|
|
76
|
+
<PSGroup name='sub_model' behavior='radio' containerClassName={styles.horizontal} childClassName={styles.horizontalChild} value={this.state.value} onChange={this.onChange}>
|
|
77
|
+
<PropertySelector label={this.renderSubModel(0)} value='M_Sport' />
|
|
78
|
+
<PropertySelector label={this.renderSubModel(1)} value='M_Sport_Coupe' />
|
|
79
|
+
<PropertySelector label={this.renderSubModel(2)} value='M_Sport_Diesel' />
|
|
80
|
+
</PSGroup>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
storiesOf('_Common_UI', module)
|
|
86
|
+
.add('PSGroup', () => (
|
|
87
|
+
<div>
|
|
88
|
+
<p className={styles.text}>Checkbox behavior</p>
|
|
89
|
+
<PSGroupDefault />
|
|
90
|
+
<p className={styles.text}>Radio button behavior</p>
|
|
91
|
+
<PSGroupHorizontal />
|
|
92
|
+
</div>
|
|
93
|
+
));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@import '../../../theme/theme.styl'
|
|
2
|
+
|
|
3
|
+
.default
|
|
4
|
+
composes: default
|
|
5
|
+
display: flex
|
|
6
|
+
flex-direction: column
|
|
7
|
+
|
|
8
|
+
.horizontal
|
|
9
|
+
border: 1px solid lightgray
|
|
10
|
+
padding: 10px
|
|
11
|
+
border-radius: 5px
|
|
12
|
+
margin-bottom: 20px
|
|
13
|
+
display: flex
|
|
14
|
+
flex-direction: row
|
|
15
|
+
align-items: center
|
|
16
|
+
justify-content: space-between
|
|
17
|
+
|
|
18
|
+
.horizontalChild
|
|
19
|
+
margin-bottom: 0 !important
|
|
20
|
+
margin-right: 10px
|
|
21
|
+
|
|
22
|
+
.text
|
|
23
|
+
font-family: $font-style-arial
|
|
24
|
+
font-size: $font-size-h3
|
|
25
|
+
font-weight: $font-weight-medium
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { storiesOf } from '@storybook/react';
|
|
4
|
+
import { action } from '@storybook/addon-actions';
|
|
5
|
+
|
|
6
|
+
import PropertySelector from './PropertySelector';
|
|
7
|
+
import { CONTAINER_STYLES, ROW_STYLES, COLUMN_STYLES } from '../../../framework/constants';
|
|
8
|
+
import { EXTERIOR_COLORS } from '../../../framework/constants/selectors';
|
|
9
|
+
|
|
10
|
+
const renderColors = () => EXTERIOR_COLORS.map((color, index) => {
|
|
11
|
+
const props = {
|
|
12
|
+
type: 'color',
|
|
13
|
+
checked: index === 2 || index === 3,
|
|
14
|
+
name: color,
|
|
15
|
+
value: color,
|
|
16
|
+
|
|
17
|
+
content: color,
|
|
18
|
+
label: <span>wow so label. <b>much content</b></span>,
|
|
19
|
+
|
|
20
|
+
tooltip: 'some text here',
|
|
21
|
+
onChange: action('change')
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
return index < 5 ? (
|
|
25
|
+
<div key={index} style={ROW_STYLES}>
|
|
26
|
+
<PropertySelector {...props} />
|
|
27
|
+
</div>
|
|
28
|
+
) : false;
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const renderIcons = () => {
|
|
32
|
+
const props = {
|
|
33
|
+
type: 'icon',
|
|
34
|
+
name: 'icon',
|
|
35
|
+
checked: true,
|
|
36
|
+
label: <span>wow so label. <b>much content</b></span>,
|
|
37
|
+
|
|
38
|
+
content: <span></span>,
|
|
39
|
+
onChange: action('change')
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div style={ROW_STYLES}>
|
|
44
|
+
<PropertySelector {...props} />
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const renderText = () => [...Array(5)].map((item, index) => {
|
|
50
|
+
const props = {
|
|
51
|
+
type: 'text',
|
|
52
|
+
checked: index === 1,
|
|
53
|
+
name: index,
|
|
54
|
+
|
|
55
|
+
content: index === 0 ? 'All' : index,
|
|
56
|
+
label: <span>wow so label. <b>much content</b></span>,
|
|
57
|
+
|
|
58
|
+
tooltip: 'some text here',
|
|
59
|
+
onChange: action('change')
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div key={index} style={ROW_STYLES}>
|
|
64
|
+
<PropertySelector {...props} />
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
storiesOf('_Common_UI', module)
|
|
71
|
+
.add('PropertySelector', () => (
|
|
72
|
+
<div style={CONTAINER_STYLES}>
|
|
73
|
+
<div style={COLUMN_STYLES}>
|
|
74
|
+
{renderColors()}
|
|
75
|
+
</div>
|
|
76
|
+
<div style={COLUMN_STYLES}>
|
|
77
|
+
{renderIcons()}
|
|
78
|
+
</div>
|
|
79
|
+
<div style={COLUMN_STYLES}>
|
|
80
|
+
{renderText()}
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
));
|