goobs-frontend 0.7.53 → 0.7.55
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/README.md +68 -87
- package/package.json +29 -33
- package/src/components/Accordion/index.tsx +44 -0
- package/src/components/Button/index.tsx +89 -37
- package/src/components/Card/index.tsx +251 -0
- package/src/components/Card/variants/defaultconfig/index.tsx +237 -0
- package/src/components/Card/variants/detailedpricingsummary/index.tsx +179 -0
- package/src/components/Card/variants/inventory/index.tsx +172 -0
- package/src/components/Card/variants/product/index.tsx +243 -0
- package/src/components/Card/variants/productsummary/index.tsx +143 -0
- package/src/components/Card/variants/simplepricingsummary/index.tsx +131 -0
- package/src/components/CodeCopy/index.tsx +118 -0
- package/src/components/ConfirmationCodeInput/utils/useCodeConfirmation.tsx +31 -10
- package/src/components/Content/Structure/card/useCard.tsx +45 -0
- package/src/components/Content/Structure/codecopy/useCodeCopy.tsx +54 -0
- package/src/components/Content/Structure/pricing/usePricing.tsx +40 -0
- package/src/components/Content/Structure/stepper/useStepper.tsx +47 -0
- package/src/components/Content/Structure/styledcomponent/useStyledComponent.tsx +0 -2
- package/src/components/Content/Structure/transferlist/useTransferList.tsx +52 -0
- package/src/components/Content/index.tsx +76 -99
- package/src/components/Form/Popup/index.tsx +128 -94
- package/src/components/Grid/index.tsx +29 -30
- package/src/components/Nav/HorizontalVariant/index.tsx +206 -0
- package/src/components/Nav/VerticalVariant/index.tsx +423 -0
- package/src/components/Nav/index.tsx +143 -0
- package/src/components/PricingTable/defaultconfig.tsx +287 -0
- package/src/components/PricingTable/index.tsx +337 -0
- package/src/components/RadioGroup/index.tsx +11 -19
- package/src/components/Stepper/index.tsx +126 -0
- package/src/components/StyledComponent/adornments.tsx +11 -7
- package/src/components/StyledComponent/helperfooter/useHelperFooter.tsx +110 -120
- package/src/components/StyledComponent/hooks/usePhoneNumber.tsx +5 -26
- package/src/components/StyledComponent/hooks/useSearchbar.tsx +16 -16
- package/src/components/StyledComponent/index.tsx +120 -44
- package/src/components/Toolbar/index.tsx +139 -0
- package/src/components/Tooltip/index.tsx +63 -0
- package/src/components/TransferList/index.tsx +207 -0
- package/src/components/Typography/index.tsx +23 -2
- package/src/index.ts +64 -6
- package/src/atoms/helperfooter.ts +0 -21
- package/src/main.tsx +0 -7
- package/src/types/async-lock.d.ts +0 -35
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { BoxProps } from '@mui/material'
|
|
3
|
+
import { CustomStepperProps } from '../Stepper'
|
|
4
|
+
import InventoryCard from './variants/inventory'
|
|
5
|
+
import SimplePricingSummary from './variants/simplepricingsummary'
|
|
6
|
+
import DetailedPricingSummary from './variants/detailedpricingsummary'
|
|
7
|
+
import ProductCard from './variants/product'
|
|
8
|
+
import ProductSummaryCard from './variants/productsummary'
|
|
9
|
+
import DefaultCard from './variants/defaultconfig'
|
|
10
|
+
import { columnconfig } from '../Grid'
|
|
11
|
+
import { CustomButtonProps } from '../Button'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Props for the Card component.
|
|
15
|
+
* Extends BoxProps from Material-UI and includes additional custom properties.
|
|
16
|
+
*/
|
|
17
|
+
export interface CardProps extends BoxProps {
|
|
18
|
+
/** Title of the card */
|
|
19
|
+
title?: string
|
|
20
|
+
/** Whether to show an underline for the title */
|
|
21
|
+
titleUnderline?: boolean
|
|
22
|
+
/** Body text of the card */
|
|
23
|
+
body?: string
|
|
24
|
+
/** URL or path of the image to display */
|
|
25
|
+
image?: string
|
|
26
|
+
/** Position of the image in the card */
|
|
27
|
+
imagePosition?: 'top' | 'left'
|
|
28
|
+
/** Text for the parent breadcrumb */
|
|
29
|
+
parentText?: string
|
|
30
|
+
/** Link for the parent breadcrumb */
|
|
31
|
+
parentLink?: string
|
|
32
|
+
/** Text for the child breadcrumb */
|
|
33
|
+
childText?: string
|
|
34
|
+
/** Link for the child breadcrumb */
|
|
35
|
+
childLink?: string
|
|
36
|
+
/** Link for the grandchild breadcrumb */
|
|
37
|
+
grandchildLink?: string
|
|
38
|
+
/** Whether to enable the favorite feature */
|
|
39
|
+
favoriteEnabled?: boolean
|
|
40
|
+
/** Whether to show breadcrumbs */
|
|
41
|
+
breadcrumbEnabled?: boolean
|
|
42
|
+
/** Whether to enable links */
|
|
43
|
+
linkEnabled?: boolean
|
|
44
|
+
/** Width of the card */
|
|
45
|
+
width?: string
|
|
46
|
+
/** Height of the card */
|
|
47
|
+
height?: string | number
|
|
48
|
+
/** Whether to show a stepper */
|
|
49
|
+
stepperEnabled?: boolean
|
|
50
|
+
/** Active step in the stepper */
|
|
51
|
+
stepperActiveStep?: number
|
|
52
|
+
/** Steps configuration for the stepper */
|
|
53
|
+
stepperSteps?: CustomStepperProps['steps']
|
|
54
|
+
/** Variant of the card to render */
|
|
55
|
+
variant?:
|
|
56
|
+
| 'default'
|
|
57
|
+
| 'inventory'
|
|
58
|
+
| 'pricingsummary'
|
|
59
|
+
| 'detailedpricingsummary'
|
|
60
|
+
| 'product'
|
|
61
|
+
| 'productsummary'
|
|
62
|
+
/** Props for the pricing summary variant */
|
|
63
|
+
pricingSummaryProps?: {
|
|
64
|
+
subtotal?: string
|
|
65
|
+
total?: string
|
|
66
|
+
proceedText?: string
|
|
67
|
+
taxText?: string
|
|
68
|
+
discountText?: string
|
|
69
|
+
onProceed?: () => void
|
|
70
|
+
}
|
|
71
|
+
/** Props for the detailed pricing summary variant */
|
|
72
|
+
detailedPricingSummaryProps?: {
|
|
73
|
+
product?: string
|
|
74
|
+
vendor?: string
|
|
75
|
+
vendorPrice?: string
|
|
76
|
+
subtotal?: string
|
|
77
|
+
vat?: string
|
|
78
|
+
total?: string
|
|
79
|
+
proceedText?: string
|
|
80
|
+
onProceed?: () => void
|
|
81
|
+
}
|
|
82
|
+
/** Props for the inventory variant */
|
|
83
|
+
inventoryProps?: {
|
|
84
|
+
license?: string
|
|
85
|
+
developmentUse?: string
|
|
86
|
+
productionUse?: string
|
|
87
|
+
updates?: string
|
|
88
|
+
support?: string
|
|
89
|
+
price?: string
|
|
90
|
+
quantity?: number
|
|
91
|
+
onRemove?: () => void
|
|
92
|
+
}
|
|
93
|
+
/** Props for the product variant */
|
|
94
|
+
productProps?: {
|
|
95
|
+
title?: string
|
|
96
|
+
description?: string
|
|
97
|
+
image?: string
|
|
98
|
+
price?: string
|
|
99
|
+
onBuy?: () => void
|
|
100
|
+
favoriteEnabled?: boolean
|
|
101
|
+
linkEnabled?: boolean
|
|
102
|
+
grandchildLink?: string
|
|
103
|
+
numDevelopers?: number
|
|
104
|
+
onAddDeveloper?: () => void
|
|
105
|
+
licenses?: number
|
|
106
|
+
unitPrice?: number
|
|
107
|
+
total?: number
|
|
108
|
+
rating?: number
|
|
109
|
+
numReviews?: number
|
|
110
|
+
releaseDate?: string
|
|
111
|
+
category?: string
|
|
112
|
+
onContact?: () => void
|
|
113
|
+
createdBy?: string
|
|
114
|
+
featuredescriptions?: string[]
|
|
115
|
+
}
|
|
116
|
+
/** Props for the product summary variant */
|
|
117
|
+
productSummaryProps?: {
|
|
118
|
+
annualPrice?: string
|
|
119
|
+
monthlyPrice?: string
|
|
120
|
+
button1Props?: CustomButtonProps
|
|
121
|
+
button2Props?: CustomButtonProps
|
|
122
|
+
}
|
|
123
|
+
/** Configuration for grid columns */
|
|
124
|
+
columnconfig?: columnconfig
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Card component that renders different card variants based on the provided props.
|
|
129
|
+
* It supports various card types including default, inventory, pricing summary, product, and more.
|
|
130
|
+
*/
|
|
131
|
+
const Card: React.FC<CardProps> = ({
|
|
132
|
+
title,
|
|
133
|
+
titleUnderline = true,
|
|
134
|
+
body,
|
|
135
|
+
image,
|
|
136
|
+
imagePosition = 'top',
|
|
137
|
+
parentText = 'Parent',
|
|
138
|
+
parentLink = '/',
|
|
139
|
+
childText = 'Child',
|
|
140
|
+
childLink = '/',
|
|
141
|
+
grandchildLink = '/',
|
|
142
|
+
favoriteEnabled = false,
|
|
143
|
+
breadcrumbEnabled = false,
|
|
144
|
+
linkEnabled = false,
|
|
145
|
+
width = '100%',
|
|
146
|
+
height,
|
|
147
|
+
stepperEnabled = false,
|
|
148
|
+
stepperActiveStep = -1,
|
|
149
|
+
stepperSteps = [],
|
|
150
|
+
variant = 'default',
|
|
151
|
+
pricingSummaryProps,
|
|
152
|
+
detailedPricingSummaryProps,
|
|
153
|
+
inventoryProps,
|
|
154
|
+
productProps,
|
|
155
|
+
productSummaryProps,
|
|
156
|
+
...rest
|
|
157
|
+
}) => {
|
|
158
|
+
// Render the default card variant
|
|
159
|
+
if (variant === 'default') {
|
|
160
|
+
return (
|
|
161
|
+
<DefaultCard
|
|
162
|
+
title={title}
|
|
163
|
+
titleUnderline={titleUnderline}
|
|
164
|
+
body={body}
|
|
165
|
+
image={image}
|
|
166
|
+
imagePosition={imagePosition}
|
|
167
|
+
parentText={parentText}
|
|
168
|
+
parentLink={parentLink}
|
|
169
|
+
childText={childText}
|
|
170
|
+
childLink={childLink}
|
|
171
|
+
grandchildLink={grandchildLink}
|
|
172
|
+
favoriteEnabled={favoriteEnabled}
|
|
173
|
+
breadcrumbEnabled={breadcrumbEnabled}
|
|
174
|
+
linkEnabled={linkEnabled}
|
|
175
|
+
width={width}
|
|
176
|
+
height={height}
|
|
177
|
+
stepperEnabled={stepperEnabled}
|
|
178
|
+
stepperActiveStep={stepperActiveStep}
|
|
179
|
+
stepperSteps={stepperSteps}
|
|
180
|
+
{...rest}
|
|
181
|
+
/>
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Render the inventory card variant
|
|
186
|
+
if (variant === 'inventory') {
|
|
187
|
+
return (
|
|
188
|
+
<InventoryCard
|
|
189
|
+
title={title}
|
|
190
|
+
image={image}
|
|
191
|
+
width={width}
|
|
192
|
+
height={height}
|
|
193
|
+
{...inventoryProps}
|
|
194
|
+
{...rest}
|
|
195
|
+
/>
|
|
196
|
+
)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Render the simple pricing summary card variant
|
|
200
|
+
if (variant === 'pricingsummary') {
|
|
201
|
+
return (
|
|
202
|
+
<SimplePricingSummary
|
|
203
|
+
width={width}
|
|
204
|
+
height={height}
|
|
205
|
+
{...pricingSummaryProps}
|
|
206
|
+
{...rest}
|
|
207
|
+
/>
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Render the detailed pricing summary card variant
|
|
212
|
+
if (variant === 'detailedpricingsummary') {
|
|
213
|
+
return (
|
|
214
|
+
<DetailedPricingSummary
|
|
215
|
+
width={width}
|
|
216
|
+
height={height}
|
|
217
|
+
{...detailedPricingSummaryProps}
|
|
218
|
+
{...rest}
|
|
219
|
+
/>
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Render the product card variant
|
|
224
|
+
if (variant === 'product') {
|
|
225
|
+
return (
|
|
226
|
+
<ProductCard width={width} height={height} {...productProps} {...rest} />
|
|
227
|
+
)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Render the product summary card variant
|
|
231
|
+
if (variant === 'productsummary') {
|
|
232
|
+
return (
|
|
233
|
+
<ProductSummaryCard
|
|
234
|
+
title={title}
|
|
235
|
+
body={body}
|
|
236
|
+
annualPrice={productSummaryProps?.annualPrice}
|
|
237
|
+
monthlyPrice={productSummaryProps?.monthlyPrice}
|
|
238
|
+
width={width}
|
|
239
|
+
height={height}
|
|
240
|
+
button1Props={productSummaryProps?.button1Props}
|
|
241
|
+
button2Props={productSummaryProps?.button2Props}
|
|
242
|
+
{...rest}
|
|
243
|
+
/>
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Return null if no matching variant is found
|
|
248
|
+
return null
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export default Card
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Box, Paper, BoxProps, useMediaQuery, useTheme } from '@mui/material'
|
|
3
|
+
import Typography from '../../../../components/Typography'
|
|
4
|
+
import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'
|
|
5
|
+
import InfoIcon from '@mui/icons-material/Info'
|
|
6
|
+
import StyledTooltip from '../../../../components/Tooltip'
|
|
7
|
+
import CustomButton from '../../../../components/Button'
|
|
8
|
+
import Link from 'next/link'
|
|
9
|
+
import FavoriteIcon from '../../../../components/Icons/FavoriteIcon'
|
|
10
|
+
import {
|
|
11
|
+
CustomStepper,
|
|
12
|
+
CustomStepperProps,
|
|
13
|
+
} from '../../../../components/Stepper'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Props for the DefaultCard component.
|
|
17
|
+
* Extends BoxProps from Material-UI and includes additional custom properties.
|
|
18
|
+
*/
|
|
19
|
+
interface DefaultCardProps extends BoxProps {
|
|
20
|
+
/** Title of the card */
|
|
21
|
+
title?: string
|
|
22
|
+
/** Whether to show an underline for the title */
|
|
23
|
+
titleUnderline?: boolean
|
|
24
|
+
/** Body text of the card */
|
|
25
|
+
body?: string
|
|
26
|
+
/** URL or path of the image to display */
|
|
27
|
+
image?: string
|
|
28
|
+
/** Position of the image in the card */
|
|
29
|
+
imagePosition?: 'top' | 'left'
|
|
30
|
+
/** Text for the parent breadcrumb */
|
|
31
|
+
parentText?: string
|
|
32
|
+
/** Link for the parent breadcrumb */
|
|
33
|
+
parentLink?: string
|
|
34
|
+
/** Text for the child breadcrumb */
|
|
35
|
+
childText?: string
|
|
36
|
+
/** Link for the child breadcrumb */
|
|
37
|
+
childLink?: string
|
|
38
|
+
/** Link for the grandchild breadcrumb */
|
|
39
|
+
grandchildLink?: string
|
|
40
|
+
/** Whether to enable the favorite feature */
|
|
41
|
+
favoriteEnabled?: boolean
|
|
42
|
+
/** Whether to show breadcrumbs */
|
|
43
|
+
breadcrumbEnabled?: boolean
|
|
44
|
+
/** Whether to enable links */
|
|
45
|
+
linkEnabled?: boolean
|
|
46
|
+
/** Width of the card */
|
|
47
|
+
width?: string
|
|
48
|
+
/** Height of the card */
|
|
49
|
+
height?: string | number
|
|
50
|
+
/** Whether to show a stepper */
|
|
51
|
+
stepperEnabled?: boolean
|
|
52
|
+
/** Active step in the stepper */
|
|
53
|
+
stepperActiveStep?: number
|
|
54
|
+
/** Steps configuration for the stepper */
|
|
55
|
+
stepperSteps?: CustomStepperProps['steps']
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* DefaultCard component renders a customizable card with various features such as
|
|
60
|
+
* image, title, body text, breadcrumbs, favorite icon, and stepper.
|
|
61
|
+
* It adapts its layout based on the screen size and provided props.
|
|
62
|
+
*/
|
|
63
|
+
const DefaultCard: React.FC<DefaultCardProps> = ({
|
|
64
|
+
title,
|
|
65
|
+
titleUnderline = true,
|
|
66
|
+
body,
|
|
67
|
+
image,
|
|
68
|
+
imagePosition = 'top',
|
|
69
|
+
parentText = 'Parent',
|
|
70
|
+
parentLink = '/',
|
|
71
|
+
childText = 'Child',
|
|
72
|
+
childLink = '/',
|
|
73
|
+
grandchildLink = '/',
|
|
74
|
+
favoriteEnabled = false,
|
|
75
|
+
breadcrumbEnabled = false,
|
|
76
|
+
linkEnabled = false,
|
|
77
|
+
width = '100%',
|
|
78
|
+
height,
|
|
79
|
+
stepperEnabled = false,
|
|
80
|
+
stepperActiveStep = -1,
|
|
81
|
+
stepperSteps = [],
|
|
82
|
+
...rest
|
|
83
|
+
}) => {
|
|
84
|
+
const theme = useTheme()
|
|
85
|
+
/** Determines if the current viewport is mobile size */
|
|
86
|
+
const isMobile = useMediaQuery(theme.breakpoints.down('sm'))
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<Paper
|
|
90
|
+
elevation={1}
|
|
91
|
+
sx={{
|
|
92
|
+
position: 'relative',
|
|
93
|
+
display: 'flex',
|
|
94
|
+
flexDirection:
|
|
95
|
+
imagePosition === 'left' ? 'row' : isMobile ? 'row' : 'column',
|
|
96
|
+
justifyContent: isMobile ? 'space-between' : 'flex-start',
|
|
97
|
+
alignItems: isMobile ? 'center' : 'stretch',
|
|
98
|
+
border: '1px solid #e8e8e8',
|
|
99
|
+
width: width,
|
|
100
|
+
height: height,
|
|
101
|
+
...rest.sx,
|
|
102
|
+
}}
|
|
103
|
+
>
|
|
104
|
+
{/* Render image if provided */}
|
|
105
|
+
{image && (
|
|
106
|
+
<Box
|
|
107
|
+
// @ts-ignore
|
|
108
|
+
sx={{
|
|
109
|
+
width: imagePosition === 'left' ? '200px' : '100%',
|
|
110
|
+
height: imagePosition === 'left' ? '100%' : '200px',
|
|
111
|
+
backgroundImage: `url(${image})`,
|
|
112
|
+
backgroundSize: 'cover',
|
|
113
|
+
backgroundPosition: 'center',
|
|
114
|
+
flexShrink: 0,
|
|
115
|
+
}}
|
|
116
|
+
/>
|
|
117
|
+
)}
|
|
118
|
+
<Box sx={{ flexGrow: 1, display: 'flex', flexDirection: 'column' }}>
|
|
119
|
+
{/* Render title and favorite icon if title is provided */}
|
|
120
|
+
{title && (
|
|
121
|
+
<Box
|
|
122
|
+
sx={{
|
|
123
|
+
borderBottom: titleUnderline ? '1px solid #e8e8e8' : 'none',
|
|
124
|
+
width: '100%',
|
|
125
|
+
paddingLeft: '15px',
|
|
126
|
+
paddingRight: '15px',
|
|
127
|
+
paddingBottom: '10px',
|
|
128
|
+
paddingTop: '10px',
|
|
129
|
+
display: 'flex',
|
|
130
|
+
alignItems: 'center',
|
|
131
|
+
justifyContent: 'space-between',
|
|
132
|
+
}}
|
|
133
|
+
>
|
|
134
|
+
<Typography text={title} fontcolor="black" fontvariant="merrih5" />
|
|
135
|
+
{favoriteEnabled && <FavoriteIcon />}
|
|
136
|
+
</Box>
|
|
137
|
+
)}
|
|
138
|
+
{/* Render body text or info icon for mobile */}
|
|
139
|
+
{body && (
|
|
140
|
+
<Box sx={{ padding: isMobile ? '0 15px' : '16px 15px' }}>
|
|
141
|
+
{!isMobile && (
|
|
142
|
+
<Typography
|
|
143
|
+
text={body}
|
|
144
|
+
fontcolor="black"
|
|
145
|
+
fontvariant="merriparagraph"
|
|
146
|
+
/>
|
|
147
|
+
)}
|
|
148
|
+
{isMobile && (
|
|
149
|
+
<StyledTooltip
|
|
150
|
+
title={body}
|
|
151
|
+
placement="right"
|
|
152
|
+
arrow
|
|
153
|
+
tooltipcolor="black"
|
|
154
|
+
tooltipplacement="right"
|
|
155
|
+
offsetX={0}
|
|
156
|
+
offsetY={0}
|
|
157
|
+
disableHoverListener
|
|
158
|
+
>
|
|
159
|
+
<InfoIcon style={{ color: 'black', cursor: 'pointer' }} />
|
|
160
|
+
</StyledTooltip>
|
|
161
|
+
)}
|
|
162
|
+
</Box>
|
|
163
|
+
)}
|
|
164
|
+
{/* Render stepper if enabled */}
|
|
165
|
+
{stepperEnabled && (
|
|
166
|
+
<Box sx={{ padding: '0px 15px' }}>
|
|
167
|
+
<CustomStepper
|
|
168
|
+
activeStep={stepperActiveStep}
|
|
169
|
+
nonLinear
|
|
170
|
+
orientation="vertical"
|
|
171
|
+
steps={stepperSteps}
|
|
172
|
+
sx={{
|
|
173
|
+
'.MuiStepIcon-text': { display: 'none' },
|
|
174
|
+
'.MuiStepConnector-line': { display: 'none' },
|
|
175
|
+
}}
|
|
176
|
+
/>
|
|
177
|
+
</Box>
|
|
178
|
+
)}
|
|
179
|
+
{/* Render breadcrumbs and link button */}
|
|
180
|
+
<Box
|
|
181
|
+
sx={{
|
|
182
|
+
width: '100%',
|
|
183
|
+
display: 'flex',
|
|
184
|
+
justifyContent: 'space-between',
|
|
185
|
+
alignItems: 'center',
|
|
186
|
+
paddingLeft: '15px',
|
|
187
|
+
paddingRight: '15px',
|
|
188
|
+
paddingBottom: '10px',
|
|
189
|
+
marginTop: 'auto',
|
|
190
|
+
}}
|
|
191
|
+
>
|
|
192
|
+
<Box>
|
|
193
|
+
{breadcrumbEnabled && (
|
|
194
|
+
<>
|
|
195
|
+
<Link href={parentLink} passHref>
|
|
196
|
+
<Typography
|
|
197
|
+
text={parentText}
|
|
198
|
+
fontcolor="black"
|
|
199
|
+
fontvariant="merriparagraph"
|
|
200
|
+
/>
|
|
201
|
+
</Link>
|
|
202
|
+
<Typography
|
|
203
|
+
text=">"
|
|
204
|
+
fontcolor="black"
|
|
205
|
+
fontvariant="merriparagraph"
|
|
206
|
+
/>
|
|
207
|
+
<Link href={childLink} passHref>
|
|
208
|
+
<Typography
|
|
209
|
+
text={childText}
|
|
210
|
+
fontcolor="black"
|
|
211
|
+
fontvariant="merriparagraph"
|
|
212
|
+
/>
|
|
213
|
+
</Link>
|
|
214
|
+
</>
|
|
215
|
+
)}
|
|
216
|
+
</Box>
|
|
217
|
+
<Box sx={{ paddingLeft: '10px' }}>
|
|
218
|
+
{linkEnabled && (
|
|
219
|
+
<Link href={grandchildLink} passHref>
|
|
220
|
+
<CustomButton
|
|
221
|
+
icon={<ArrowForwardIosIcon />}
|
|
222
|
+
iconcolor="black"
|
|
223
|
+
iconsize="15px"
|
|
224
|
+
iconlocation="right"
|
|
225
|
+
backgroundcolor="none"
|
|
226
|
+
variant="text"
|
|
227
|
+
/>
|
|
228
|
+
</Link>
|
|
229
|
+
)}
|
|
230
|
+
</Box>
|
|
231
|
+
</Box>
|
|
232
|
+
</Box>
|
|
233
|
+
</Paper>
|
|
234
|
+
)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export default DefaultCard
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Box, Paper } from '@mui/material'
|
|
3
|
+
import Typography from '../../../../components/Typography'
|
|
4
|
+
import CustomButton from '../../../../components/Button'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props for the DetailedPricingSummary component.
|
|
8
|
+
*/
|
|
9
|
+
interface DetailedPricingSummaryProps {
|
|
10
|
+
/** Width of the pricing summary card */
|
|
11
|
+
width?: string
|
|
12
|
+
/** Height of the pricing summary card */
|
|
13
|
+
height?: string | number
|
|
14
|
+
/** Description of the product */
|
|
15
|
+
product?: string
|
|
16
|
+
/** Name of the vendor */
|
|
17
|
+
vendor?: string
|
|
18
|
+
/** Price from the vendor */
|
|
19
|
+
vendorPrice?: string
|
|
20
|
+
/** Subtotal of the order */
|
|
21
|
+
subtotal?: string
|
|
22
|
+
/** VAT amount */
|
|
23
|
+
vat?: string
|
|
24
|
+
/** Total price of the order */
|
|
25
|
+
total?: string
|
|
26
|
+
/** Text for the proceed button */
|
|
27
|
+
proceedText?: string
|
|
28
|
+
/** Function to call when the proceed button is clicked */
|
|
29
|
+
onProceed?: () => void
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* DetailedPricingSummary component renders a card with detailed pricing information.
|
|
34
|
+
* It displays product details, vendor information, subtotal, VAT, total, and a proceed button.
|
|
35
|
+
*/
|
|
36
|
+
const DetailedPricingSummary: React.FC<DetailedPricingSummaryProps> = ({
|
|
37
|
+
width = '100%',
|
|
38
|
+
height,
|
|
39
|
+
product = 'Goobs Repo Unlimited × 1',
|
|
40
|
+
vendor = 'Technologies Unlimited',
|
|
41
|
+
vendorPrice = '$180.00',
|
|
42
|
+
subtotal = '$180.00',
|
|
43
|
+
vat = '$0.00',
|
|
44
|
+
total = '$180.00',
|
|
45
|
+
proceedText = 'Proceed to checkout',
|
|
46
|
+
onProceed,
|
|
47
|
+
}) => {
|
|
48
|
+
return (
|
|
49
|
+
<Paper
|
|
50
|
+
elevation={1}
|
|
51
|
+
sx={{
|
|
52
|
+
position: 'relative',
|
|
53
|
+
display: 'flex',
|
|
54
|
+
flexDirection: 'column',
|
|
55
|
+
justifyContent: 'flex-start',
|
|
56
|
+
alignItems: 'stretch',
|
|
57
|
+
border: '1px solid #e8e8e8',
|
|
58
|
+
width: width,
|
|
59
|
+
minHeight: height,
|
|
60
|
+
padding: '16px',
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
<Box sx={{ display: 'flex', flexDirection: 'column' }}>
|
|
64
|
+
{/* Product section */}
|
|
65
|
+
<Typography
|
|
66
|
+
text="Product"
|
|
67
|
+
fontcolor="black"
|
|
68
|
+
fontvariant="merriparagraph"
|
|
69
|
+
/>
|
|
70
|
+
<Typography
|
|
71
|
+
text={product}
|
|
72
|
+
fontcolor="black"
|
|
73
|
+
fontvariant="merriparagraph"
|
|
74
|
+
sx={{ marginTop: '8px' }}
|
|
75
|
+
/>
|
|
76
|
+
|
|
77
|
+
{/* Vendor section */}
|
|
78
|
+
<Box sx={{ marginTop: '16px' }}>
|
|
79
|
+
<Box
|
|
80
|
+
sx={{
|
|
81
|
+
display: 'flex',
|
|
82
|
+
justifyContent: 'space-between',
|
|
83
|
+
alignItems: 'center',
|
|
84
|
+
}}
|
|
85
|
+
>
|
|
86
|
+
<Typography
|
|
87
|
+
text="Vendor:"
|
|
88
|
+
fontcolor="black"
|
|
89
|
+
fontvariant="merriparagraph"
|
|
90
|
+
/>
|
|
91
|
+
<Typography
|
|
92
|
+
text={vendor}
|
|
93
|
+
fontcolor="black"
|
|
94
|
+
fontvariant="merriparagraph"
|
|
95
|
+
/>
|
|
96
|
+
</Box>
|
|
97
|
+
<Box
|
|
98
|
+
sx={{
|
|
99
|
+
display: 'flex',
|
|
100
|
+
justifyContent: 'flex-end',
|
|
101
|
+
alignItems: 'center',
|
|
102
|
+
}}
|
|
103
|
+
>
|
|
104
|
+
<Typography
|
|
105
|
+
text={vendorPrice}
|
|
106
|
+
fontcolor="black"
|
|
107
|
+
fontvariant="merriparagraph"
|
|
108
|
+
/>
|
|
109
|
+
</Box>
|
|
110
|
+
</Box>
|
|
111
|
+
|
|
112
|
+
{/* Subtotal section */}
|
|
113
|
+
<Box sx={{ marginTop: '16px' }}>
|
|
114
|
+
<Typography
|
|
115
|
+
text="Subtotal"
|
|
116
|
+
fontcolor="black"
|
|
117
|
+
fontvariant="merriparagraph"
|
|
118
|
+
/>
|
|
119
|
+
<Typography
|
|
120
|
+
text={subtotal}
|
|
121
|
+
fontcolor="black"
|
|
122
|
+
fontvariant="merriparagraph"
|
|
123
|
+
align="right"
|
|
124
|
+
/>
|
|
125
|
+
</Box>
|
|
126
|
+
|
|
127
|
+
{/* VAT section */}
|
|
128
|
+
<Box sx={{ marginTop: '8px' }}>
|
|
129
|
+
<Typography
|
|
130
|
+
text="VAT"
|
|
131
|
+
fontcolor="black"
|
|
132
|
+
fontvariant="merriparagraph"
|
|
133
|
+
/>
|
|
134
|
+
<Typography
|
|
135
|
+
text={vat}
|
|
136
|
+
fontcolor="black"
|
|
137
|
+
fontvariant="merriparagraph"
|
|
138
|
+
align="right"
|
|
139
|
+
/>
|
|
140
|
+
</Box>
|
|
141
|
+
|
|
142
|
+
{/* Total section */}
|
|
143
|
+
<Box
|
|
144
|
+
sx={{
|
|
145
|
+
borderTop: '1px solid #e8e8e8',
|
|
146
|
+
marginTop: '8px',
|
|
147
|
+
paddingTop: '8px',
|
|
148
|
+
}}
|
|
149
|
+
>
|
|
150
|
+
<Box
|
|
151
|
+
sx={{
|
|
152
|
+
display: 'flex',
|
|
153
|
+
justifyContent: 'space-between',
|
|
154
|
+
alignItems: 'center',
|
|
155
|
+
}}
|
|
156
|
+
>
|
|
157
|
+
<Typography text="Total" fontcolor="black" fontvariant="merrih5" />
|
|
158
|
+
<Typography text={total} fontcolor="black" fontvariant="merrih5" />
|
|
159
|
+
</Box>
|
|
160
|
+
</Box>
|
|
161
|
+
</Box>
|
|
162
|
+
|
|
163
|
+
{/* Proceed button */}
|
|
164
|
+
<Box sx={{ marginTop: '16px' }}>
|
|
165
|
+
<CustomButton
|
|
166
|
+
text={proceedText}
|
|
167
|
+
variant="contained"
|
|
168
|
+
backgroundcolor="black"
|
|
169
|
+
fontcolor="white"
|
|
170
|
+
fontvariant="merriparagraph"
|
|
171
|
+
onClick={onProceed}
|
|
172
|
+
width="100%"
|
|
173
|
+
/>
|
|
174
|
+
</Box>
|
|
175
|
+
</Paper>
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export default DetailedPricingSummary
|