@nyris/nyris-webapp 0.3.46 → 0.3.48

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 (62) hide show
  1. package/build/asset-manifest.json +16 -12
  2. package/build/index.html +1 -1
  3. package/build/js/settings.example.js +84 -13
  4. package/build/{precache-manifest.003c83b03ba38cefb9af2060ababe0b4.js → precache-manifest.87ecf17e376539dad2c663829130bfdc.js} +26 -10
  5. package/build/service-worker.js +1 -1
  6. package/build/static/css/main.24b5a712.chunk.css +2 -0
  7. package/build/static/css/main.24b5a712.chunk.css.map +1 -0
  8. package/build/static/js/2.f9395632.chunk.js +3 -0
  9. package/build/static/js/2.f9395632.chunk.js.map +1 -0
  10. package/build/static/js/main.e2a2eb38.chunk.js +3 -0
  11. package/build/static/js/main.e2a2eb38.chunk.js.map +1 -0
  12. package/build/static/media/add.ba46a4bf.svg +4 -0
  13. package/build/static/media/arrow_left.fd9d4390.svg +3 -0
  14. package/build/static/media/arrow_right.c6fdab0b.svg +3 -0
  15. package/build/static/media/minus.3fce6c0a.svg +3 -0
  16. package/package.json +4 -4
  17. package/public/js/settings.example.js +84 -13
  18. package/src/Store/Store.ts +1 -0
  19. package/src/Store/search/Search.ts +36 -0
  20. package/src/Store/search/search.initialState.ts +1 -0
  21. package/src/Store/search/types.ts +1 -0
  22. package/src/common/assets/icons/add.svg +4 -0
  23. package/src/common/assets/icons/minus.svg +3 -0
  24. package/src/components/HeaderMobile.tsx +33 -12
  25. package/src/components/ImagePreviewMobile.tsx +52 -134
  26. package/src/components/Inquiry/InquiryBanner.tsx +6 -3
  27. package/src/components/Layout.tsx +19 -1
  28. package/src/components/MobilePostFilter.tsx +14 -5
  29. package/src/components/PanelResult/PostFilter.tsx +314 -0
  30. package/src/components/PanelResult/{index.tsx → PostFilterAlgolia.tsx} +44 -15
  31. package/src/components/PanelResult/expandable-panel.tsx +20 -14
  32. package/src/components/ProductAttribute.tsx +38 -34
  33. package/src/components/ProductDetailView.tsx +37 -22
  34. package/src/components/ProductList/index.tsx +0 -3
  35. package/src/components/ProductList/useProductList.ts +6 -3
  36. package/src/components/SelectedPostFilter.tsx +103 -0
  37. package/src/components/SidePanel.tsx +40 -22
  38. package/src/components/appMobile.scss +7 -0
  39. package/src/components/common.scss +4 -0
  40. package/src/components/current-refinements/getCurrentRefinement.ts +10 -18
  41. package/src/components/drawer/cameraCustom.tsx +14 -64
  42. package/src/components/icon-label/icon-label.tsx +23 -18
  43. package/src/components/input/inputSearch.tsx +2 -2
  44. package/src/components/pre-filter/index.tsx +16 -10
  45. package/src/components/results/ItemResult.tsx +33 -22
  46. package/src/hooks/useFilter.ts +92 -0
  47. package/src/hooks/useFilteredResult.ts +29 -0
  48. package/src/index.css +2 -1
  49. package/src/page/landingPage/AppMD.tsx +1 -5
  50. package/src/page/landingPage/common.scss +10 -3
  51. package/src/page/result/index.tsx +37 -29
  52. package/src/services/image.ts +0 -5
  53. package/src/translations.ts +16 -0
  54. package/src/types.ts +1 -5
  55. package/build/static/css/main.5b89f23f.chunk.css +0 -2
  56. package/build/static/css/main.5b89f23f.chunk.css.map +0 -1
  57. package/build/static/js/2.f3840c8e.chunk.js +0 -3
  58. package/build/static/js/2.f3840c8e.chunk.js.map +0 -1
  59. package/build/static/js/main.d68884f6.chunk.js +0 -3
  60. package/build/static/js/main.d68884f6.chunk.js.map +0 -1
  61. /package/build/static/js/{2.f3840c8e.chunk.js.LICENSE.txt → 2.f9395632.chunk.js.LICENSE.txt} +0 -0
  62. /package/build/static/js/{main.d68884f6.chunk.js.LICENSE.txt → main.e2a2eb38.chunk.js.LICENSE.txt} +0 -0
@@ -1,7 +1,10 @@
1
1
  import React, { memo } from 'react';
2
- import ExpandablePanelComponent from 'components/PanelResult';
2
+
3
+ import PostFilterPanel from './PanelResult/PostFilter';
4
+ import PostFilterPanelAlgolia from './PanelResult/PostFilterAlgolia';
3
5
 
4
6
  import { connectStateResults } from 'react-instantsearch-dom';
7
+ import { useAppSelector } from 'Store/Store';
5
8
 
6
9
  interface Props {
7
10
  allSearchResults: any;
@@ -9,11 +12,17 @@ interface Props {
9
12
  }
10
13
 
11
14
  function MobilePostFilter(props: Props) {
15
+ const settings = useAppSelector(state => state.settings);
12
16
  return (
13
- <ExpandablePanelComponent
14
- disjunctiveFacets={props?.allSearchResults?.disjunctiveFacets}
15
- onApply={props.onApply}
16
- />
17
+ <>
18
+ {settings.algolia.enabled && (
19
+ <PostFilterPanelAlgolia
20
+ disjunctiveFacets={props?.allSearchResults?.disjunctiveFacets}
21
+ onApply={props.onApply}
22
+ />
23
+ )}
24
+ {!settings.algolia.enabled && <PostFilterPanel onApply={props.onApply} />}
25
+ </>
17
26
  );
18
27
  }
19
28
 
@@ -0,0 +1,314 @@
1
+ import { Box, Button, Checkbox } from '@material-ui/core';
2
+ import { DynamicWidgetsCT } from 'components/dynamic-widgets/dynamic-widgets';
3
+ import IconLabel from 'components/icon-label/icon-label';
4
+ import { atom, useAtom } from 'jotai';
5
+ import React, { useCallback, useEffect, useMemo } from 'react';
6
+ import type { CurrentRefinementsProvided } from 'react-instantsearch-core';
7
+ import { useMediaQuery } from 'react-responsive';
8
+ import { useHistory } from 'react-router-dom';
9
+ import { useAppDispatch, useAppSelector } from 'Store/Store';
10
+ import { ExpandablePanelCustom } from './expandable-panel';
11
+ import { getPanelAttributes, getPanelId } from './refinements';
12
+ import { ReactComponent as CloseIcon } from 'common/assets/icons/close.svg';
13
+ import { useTranslation } from 'react-i18next';
14
+ import { setPostFilter } from 'Store/search/Search';
15
+ import { useFilter } from 'hooks/useFilter';
16
+ import { get } from 'lodash';
17
+
18
+ export type ExpandablePanelProps = CurrentRefinementsProvided & {
19
+ children: React.ReactNode;
20
+ className?: string;
21
+ header?: React.ReactNode | string;
22
+ attributes?: string[];
23
+ isOpened?: boolean;
24
+ onToggle?: any;
25
+ };
26
+
27
+ export type Panels = {
28
+ [key: string]: boolean;
29
+ };
30
+
31
+ function togglePanels(panels: Panels, val: boolean) {
32
+ return Object.keys(panels).reduce(
33
+ (acc, panelKey) => ({ ...acc, [panelKey]: val }),
34
+ {},
35
+ );
36
+ }
37
+
38
+ export const refinementsPanelsExpandedAtom = atom(
39
+ get =>
40
+ Boolean(Object.values(get(refinementsPanelsAtom)).find(v => v === true)),
41
+ (get, set, update: (prev: boolean) => boolean) => {
42
+ const expanded = update(get(refinementsPanelsExpandedAtom));
43
+ set(
44
+ refinementsPanelsAtom,
45
+ togglePanels(get(refinementsPanelsAtom), expanded),
46
+ );
47
+ },
48
+ );
49
+
50
+ export const refinementsPanelsAtom = atom<Panels>({});
51
+
52
+ function WidgetPanel({ children, onToggle, panelId, ...props }: any) {
53
+ const onToggleMemoized = useCallback(
54
+ () => onToggle(panelId),
55
+ [onToggle, panelId],
56
+ );
57
+
58
+ return (
59
+ <ExpandablePanelCustom onToggle={onToggleMemoized} {...props}>
60
+ {children}
61
+ </ExpandablePanelCustom>
62
+ );
63
+ }
64
+
65
+ export default function PostFilterPanel({
66
+ dynamicWidgets = true,
67
+ onApply,
68
+ }: any) {
69
+ const stateGlobal = useAppSelector(state => state);
70
+ const {
71
+ settings,
72
+ search: { postFilter, results },
73
+ } = stateGlobal;
74
+ const { refinements } = settings;
75
+ const [panels, setPanels] = useAtom(refinementsPanelsAtom);
76
+ const [refinementsPanelsExpanded, setRefinementsPanelsExpanded] = useAtom(
77
+ refinementsPanelsExpandedAtom,
78
+ );
79
+ const history = useHistory();
80
+ const isMobile = useMediaQuery({ query: '(max-width: 776px)' });
81
+ const { t } = useTranslation();
82
+ const dispatch = useAppDispatch();
83
+
84
+ const filter = useFilter(results);
85
+
86
+ // Set initial panels value
87
+ useEffect(() => {
88
+ setPanels(prevPanels => ({
89
+ ...prevPanels,
90
+ ...refinements.reduce(
91
+ (acc: any, current: any) => ({
92
+ ...acc,
93
+ [getPanelId(current)]: Boolean(current.isExpanded),
94
+ }),
95
+ {},
96
+ ),
97
+ }));
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ }, []);
100
+
101
+ const onToggle = useCallback(
102
+ (panelId: string) => {
103
+ setPanels(prevPanels => {
104
+ return {
105
+ ...prevPanels,
106
+ [panelId]: !prevPanels[panelId],
107
+ };
108
+ });
109
+ },
110
+ [setPanels],
111
+ );
112
+
113
+ const widgets = useMemo(() => {
114
+ return refinements.map((refinement: any) => {
115
+ const filterList = filter?.[refinement.attribute];
116
+
117
+ return (
118
+ <div
119
+ style={{
120
+ display: 'flex',
121
+ flexDirection: 'column',
122
+ rowGap: '16px',
123
+ marginBottom: '8px',
124
+ }}
125
+ >
126
+ {filterList?.map((item: any, index: number) => {
127
+ return (
128
+ <div
129
+ key={index}
130
+ style={{
131
+ display: 'flex',
132
+ alignItems: 'center',
133
+ columnGap: '4px',
134
+ }}
135
+ >
136
+ <Checkbox
137
+ color="primary"
138
+ size="small"
139
+ style={{ padding: '0px' }}
140
+ checked={
141
+ !!get(postFilter, `${refinement.attribute}.${item.value}`)
142
+ }
143
+ onChange={() => {
144
+ dispatch(
145
+ setPostFilter({
146
+ [refinement.attribute]: item.value,
147
+ }),
148
+ );
149
+ }}
150
+ />
151
+ <p style={{ fontSize: '14px', paddingTop: '3px' }}>
152
+ {item.value}
153
+ </p>
154
+ <p style={{ fontSize: '14px', paddingTop: '3px' }}>
155
+ ({item.count})
156
+ </p>
157
+ </div>
158
+ );
159
+ })}
160
+ </div>
161
+ );
162
+ });
163
+ }, [refinements, filter, postFilter, dispatch]);
164
+
165
+ const widgetsPanels = useMemo(
166
+ () =>
167
+ widgets.map((widget: any, i: any) => {
168
+ const refinement = refinements[i];
169
+ const panelId = getPanelId(refinement);
170
+ const panelAttributes = getPanelAttributes(refinement);
171
+
172
+ return widget ? (
173
+ <WidgetPanel
174
+ key={panelId}
175
+ panelId={panelId}
176
+ attributes={panelAttributes}
177
+ header={refinement.header}
178
+ isOpened={isMobile ? !panels[panelId] : panels[panelId]}
179
+ onToggle={onToggle}
180
+ >
181
+ {widget}
182
+ </WidgetPanel>
183
+ ) : (
184
+ <></>
185
+ );
186
+ }),
187
+ [widgets, refinements, onToggle, panels, isMobile],
188
+ );
189
+
190
+ const onTogglePanelsClick = useCallback(() => {
191
+ setRefinementsPanelsExpanded((expanded: boolean) => !expanded);
192
+ }, [setRefinementsPanelsExpanded]);
193
+
194
+ const handlerApplyfillter = () => {
195
+ onApply();
196
+ if (history.location.pathname !== '/result') {
197
+ history.push('/result');
198
+ }
199
+ };
200
+
201
+ return (
202
+ <>
203
+ {!isMobile && (
204
+ <div className="wrap-main-header-panel">
205
+ <Box
206
+ style={{
207
+ cursor: 'pointer',
208
+ paddingBottom: '8px',
209
+ }}
210
+ >
211
+ <div
212
+ onClick={onTogglePanelsClick}
213
+ style={{ display: 'flex', justifyContent: 'flex-end' }}
214
+ >
215
+ <IconLabel
216
+ icon={refinementsPanelsExpanded ? 'remove' : 'add'}
217
+ label={`${
218
+ refinementsPanelsExpanded
219
+ ? t('Collapse all')
220
+ : t('Expand all')
221
+ } `}
222
+ />
223
+ </div>
224
+ </Box>
225
+ </div>
226
+ )}
227
+ <Box>
228
+ {isMobile && (
229
+ <div
230
+ style={{
231
+ display: 'flex',
232
+ justifyContent: 'flex-end',
233
+ position: 'sticky',
234
+ top: '0px',
235
+ zIndex: 100,
236
+ background: 'white',
237
+ alignItems: 'center',
238
+ }}
239
+ >
240
+ <Button
241
+ onClick={onApply}
242
+ style={{
243
+ width: '32px',
244
+ height: '32px',
245
+ }}
246
+ >
247
+ <CloseIcon color="#2B2C46" />
248
+ </Button>
249
+ </div>
250
+ )}
251
+ <Box
252
+ className="box-center-filter"
253
+ style={{
254
+ ...(isMobile
255
+ ? {
256
+ paddingLeft: '24px',
257
+ paddingRight: '24px',
258
+ overflow: 'auto',
259
+ marginBottom: '12px',
260
+ }
261
+ : {}),
262
+ }}
263
+ >
264
+ <DynamicWidgetsCT enabled={dynamicWidgets}>
265
+ {widgetsPanels}
266
+ </DynamicWidgetsCT>
267
+ </Box>
268
+ </Box>
269
+ {isMobile && (
270
+ <Box
271
+ style={{
272
+ position: 'sticky',
273
+ bottom: 0,
274
+ width: '100%',
275
+ display: 'flex',
276
+ }}
277
+ >
278
+ <div
279
+ className="text-white"
280
+ style={{
281
+ width: '100%',
282
+ backgroundColor: settings.theme?.secondaryColor,
283
+ fontWeight: 500,
284
+ fontSize: 14,
285
+ borderRadius: 0,
286
+ height: '66px',
287
+ textTransform: 'none',
288
+ padding: '16px',
289
+ }}
290
+ onClick={handlerApplyfillter}
291
+ >
292
+ Cancel
293
+ </div>
294
+ <div
295
+ className="text-white"
296
+ style={{
297
+ width: '100%',
298
+ backgroundColor: settings.theme?.primaryColor,
299
+ fontWeight: 500,
300
+ fontSize: 14,
301
+ borderRadius: 0,
302
+ height: '66px',
303
+ textTransform: 'none',
304
+ padding: '16px',
305
+ }}
306
+ onClick={handlerApplyfillter}
307
+ >
308
+ Apply filters
309
+ </div>
310
+ </Box>
311
+ )}
312
+ </>
313
+ );
314
+ }
@@ -13,7 +13,7 @@ import { useHistory } from 'react-router-dom';
13
13
  import { useAppSelector } from 'Store/Store';
14
14
  import { ExpandablePanelCustom } from './expandable-panel';
15
15
  import { getPanelAttributes, getPanelId } from './refinements';
16
- import CloseIcon from '@material-ui/icons/Close';
16
+ import { ReactComponent as CloseIcon } from 'common/assets/icons/close.svg';
17
17
  import { useTranslation } from 'react-i18next';
18
18
 
19
19
  export type ExpandablePanelProps = CurrentRefinementsProvided & {
@@ -90,7 +90,7 @@ function WidgetPanel({ children, onToggle, panelId, ...props }: any) {
90
90
  );
91
91
  }
92
92
 
93
- export default function ExpandablePanelComponent({
93
+ export default function PostFilterPanelAlgolia({
94
94
  dynamicWidgets = true,
95
95
  onApply,
96
96
  disjunctiveFacets,
@@ -192,11 +192,15 @@ export default function ExpandablePanelComponent({
192
192
  <>
193
193
  {!isMobile && (
194
194
  <div className="wrap-main-header-panel">
195
- <Box style={{ borderBottom: '1px solid #E0E0E0' }}>
196
- <Button
197
- className="text-neutral-darkest"
195
+ <Box
196
+ style={{
197
+ cursor: 'pointer',
198
+ paddingBottom: '8px',
199
+ }}
200
+ >
201
+ <div
198
202
  onClick={onTogglePanelsClick}
199
- style={{ justifyContent: 'flex-end' }}
203
+ style={{ display: 'flex', justifyContent: 'flex-end' }}
200
204
  >
201
205
  <IconLabel
202
206
  icon={refinementsPanelsExpanded ? 'remove' : 'add'}
@@ -206,7 +210,7 @@ export default function ExpandablePanelComponent({
206
210
  : t('Expand all')
207
211
  } `}
208
212
  />
209
- </Button>
213
+ </div>
210
214
  </Box>
211
215
  </div>
212
216
  )}
@@ -221,12 +225,16 @@ export default function ExpandablePanelComponent({
221
225
  zIndex: 100,
222
226
  background: 'white',
223
227
  alignItems: 'center',
224
- paddingTop: '10px',
225
- paddingRight: '10px',
226
228
  }}
227
229
  >
228
- <Button onClick={onApply}>
229
- <CloseIcon />
230
+ <Button
231
+ onClick={onApply}
232
+ style={{
233
+ width: '32px',
234
+ height: '32px',
235
+ }}
236
+ >
237
+ <CloseIcon color="#2B2C46" />
230
238
  </Button>
231
239
  </div>
232
240
  )}
@@ -238,6 +246,7 @@ export default function ExpandablePanelComponent({
238
246
  paddingLeft: '24px',
239
247
  paddingRight: '24px',
240
248
  overflow: 'auto',
249
+ marginBottom: '12px',
241
250
  }
242
251
  : {}),
243
252
  }}
@@ -253,21 +262,41 @@ export default function ExpandablePanelComponent({
253
262
  position: 'sticky',
254
263
  bottom: 0,
255
264
  width: '100%',
265
+ display: 'flex',
256
266
  }}
257
267
  >
258
- <Button
268
+ <div
269
+ className="text-white"
270
+ style={{
271
+ width: '100%',
272
+ backgroundColor: settings.theme?.secondaryColor,
273
+ fontWeight: 500,
274
+ fontSize: 14,
275
+ borderRadius: 0,
276
+ height: '66px',
277
+ textTransform: 'none',
278
+ padding: '16px',
279
+ }}
280
+ onClick={handlerApplyfillter}
281
+ >
282
+ Cancel
283
+ </div>
284
+ <div
259
285
  className="text-white"
260
286
  style={{
261
287
  width: '100%',
262
288
  backgroundColor: settings.theme?.primaryColor,
263
- fontWeight: 700,
289
+ fontWeight: 500,
264
290
  fontSize: 14,
265
291
  borderRadius: 0,
292
+ height: '66px',
293
+ textTransform: 'none',
294
+ padding: '16px',
266
295
  }}
267
296
  onClick={handlerApplyfillter}
268
297
  >
269
- APPLY
270
- </Button>
298
+ Apply filters
299
+ </div>
271
300
  </Box>
272
301
  )}
273
302
  </>
@@ -1,6 +1,6 @@
1
- import { Box, Button, Typography } from '@material-ui/core';
2
- import AddIcon from '@material-ui/icons/Add';
3
- import RemoveIcon from '@material-ui/icons/Remove';
1
+ import { Box, Button } from '@material-ui/core';
2
+ import { ReactComponent as RemoveIcon } from 'common/assets/icons/minus.svg';
3
+ import { ReactComponent as AddIcon } from 'common/assets/icons/add.svg';
4
4
  import classNames from 'classnames';
5
5
  import { Collapse } from 'components/collapse/collapse';
6
6
  import { useAtomValue } from 'jotai/utils';
@@ -12,7 +12,7 @@ import type {
12
12
  } from 'react-instantsearch-core';
13
13
  import { connectCurrentRefinements } from 'react-instantsearch-dom';
14
14
  import { useMediaQuery } from 'react-responsive';
15
- import { useHasRefinements } from '.';
15
+ import { useHasRefinements } from './PostFilterAlgolia';
16
16
  import { searchResultsAtom } from './virtual-state-results';
17
17
 
18
18
  export type ExpandablePanelProps = CurrentRefinementsProvided & {
@@ -42,17 +42,26 @@ function ExpandablePanelComponent({
42
42
  <Box>
43
43
  <div
44
44
  className={classNames(
45
- 'border-neutral-light',
46
45
  {
47
46
  hidden: !hasRefinements,
48
47
  },
49
48
  className,
50
49
  )}
50
+ style={{
51
+ borderTop: !isMobile ? '1px solid #d3d4d8' : '',
52
+ }}
51
53
  >
52
54
  <Button
53
55
  className="w-full flex items-center justify-between group"
54
56
  aria-expanded={isOpened}
55
- style={{ paddingLeft: 0 }}
57
+ style={{
58
+ paddingLeft: '2px',
59
+ paddingRight: '2px',
60
+ paddingTop: !isMobile ? '8px' : '0px',
61
+ paddingBottom: '8px',
62
+ marginTop: '16px',
63
+ marginBottom: '16px',
64
+ }}
56
65
  onClick={e => {
57
66
  if (typeof onToggle === 'function') {
58
67
  onToggle(e);
@@ -60,22 +69,19 @@ function ExpandablePanelComponent({
60
69
  }}
61
70
  >
62
71
  <div className="flex items-center w-full subhead">
63
- <Typography
64
- className="fw-700"
72
+ <p
65
73
  style={{
66
74
  textTransform: 'none',
67
75
  fontFamily: 'Source Sans 3 !important',
68
76
  fontSize: 14,
77
+ fontWeight: 'bold',
78
+ lineHeight: '16px',
69
79
  }}
70
80
  >
71
81
  {header || attributes[0]}
72
- </Typography>
82
+ </p>
73
83
  </div>
74
- {!isMobile && (
75
- <div className="text-neutral-dark can-hover:transition-colors can-hover:group-hover:text-neutral-light">
76
- {isOpened ? <RemoveIcon /> : <AddIcon />}
77
- </div>
78
- )}
84
+ {!isMobile && <>{isOpened ? <RemoveIcon /> : <AddIcon />}</>}
79
85
  </Button>
80
86
 
81
87
  <Collapse isCollapsed={!isOpened}>
@@ -17,40 +17,44 @@ function ProductAttribute(props: Props) {
17
17
  } = props;
18
18
 
19
19
  return (
20
- <Box
21
- display="flex"
22
- flexDirection={'column'}
23
- borderRadius={2}
24
- width={width}
25
- style={{
26
- backgroundColor: '#E0E0E0',
27
- padding: padding,
28
- flexGrow: 1,
29
- }}
30
- >
31
- <Typography
32
- style={{
33
- color: '#2B2C46',
34
- overflow: 'hidden',
35
- textOverflow: 'ellipsis',
36
- whiteSpace: 'nowrap',
37
- }}
38
- className="text-f12 fw-700"
39
- >
40
- {title}
41
- </Typography>
42
- <Typography
43
- style={{
44
- color: '#2B2C46',
45
- overflow: 'hidden',
46
- textOverflow: 'ellipsis',
47
- whiteSpace: 'nowrap',
48
- }}
49
- className="text-f12 fw-400"
50
- >
51
- {value}
52
- </Typography>
53
- </Box>
20
+ <>
21
+ {title && (
22
+ <Box
23
+ display="flex"
24
+ flexDirection={'column'}
25
+ borderRadius={2}
26
+ width={width}
27
+ style={{
28
+ backgroundColor: '#E0E0E0',
29
+ padding: padding,
30
+ flexGrow: 1,
31
+ }}
32
+ >
33
+ <Typography
34
+ style={{
35
+ color: '#2B2C46',
36
+ overflow: 'hidden',
37
+ textOverflow: 'ellipsis',
38
+ whiteSpace: 'nowrap',
39
+ }}
40
+ className="text-f12 fw-700"
41
+ >
42
+ {title}
43
+ </Typography>
44
+ <Typography
45
+ style={{
46
+ color: '#2B2C46',
47
+ overflow: 'hidden',
48
+ textOverflow: 'ellipsis',
49
+ whiteSpace: 'nowrap',
50
+ }}
51
+ className="text-f12 fw-400"
52
+ >
53
+ {value}
54
+ </Typography>
55
+ </Box>
56
+ )}
57
+ </>
54
58
  );
55
59
  }
56
60