Skip to content

Commit cdd72b1

Browse files
committed
refactor(custom-button): used ButtonLayout
1 parent e93c076 commit cdd72b1

40 files changed

Lines changed: 883 additions & 811 deletions

File tree

packages/attach/src/__snapshots__/Component.test.tsx.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ exports[`Attach Snapshots tests should match snapshot 1`] = `
66
class="component size-48"
77
>
88
<button
9-
class="component component component component component secondary secondary secondary size48 hug size48 defaultPaddings defaultWidth minHeight component"
9+
class="component component component component component size48 hug defaultPaddings defaultWidth minHeight secondary secondary secondary size48 component"
1010
type="button"
1111
>
1212
<span

packages/button/src/__snapshots__/Component.test.tsx.snap

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ exports[`Button Snapshots tests should match snapshot 1`] = `
66
"baseElement": <body>
77
<div>
88
<button
9-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
9+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
1010
type="button"
1111
/>
1212
</div>
1313
</body>,
1414
"container": <div>
1515
<button
16-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
16+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
1717
type="button"
1818
/>
1919
</div>,
@@ -78,15 +78,15 @@ exports[`Button Snapshots tests should render anchor if href pass 1`] = `
7878
<div>
7979
<a
8080
aria-disabled="false"
81-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
81+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
8282
href="https://some-url"
8383
/>
8484
</div>
8585
</body>,
8686
"container": <div>
8787
<a
8888
aria-disabled="false"
89-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
89+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
9090
href="https://some-url"
9191
/>
9292
</div>,
@@ -150,14 +150,14 @@ exports[`Button Snapshots tests should render button by default 1`] = `
150150
"baseElement": <body>
151151
<div>
152152
<button
153-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
153+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
154154
type="button"
155155
/>
156156
</div>
157157
</body>,
158158
"container": <div>
159159
<button
160-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
160+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
161161
type="button"
162162
/>
163163
</div>,
@@ -221,7 +221,7 @@ exports[`Button Snapshots tests should render left addons 1`] = `
221221
"baseElement": <body>
222222
<div>
223223
<button
224-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
224+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
225225
type="button"
226226
>
227227
<span
@@ -236,7 +236,7 @@ exports[`Button Snapshots tests should render left addons 1`] = `
236236
</body>,
237237
"container": <div>
238238
<button
239-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
239+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
240240
type="button"
241241
>
242242
<span
@@ -309,10 +309,10 @@ exports[`Button Snapshots tests should render loader if loading & href pass 1`]
309309
<div>
310310
<a
311311
aria-disabled="true"
312-
class="component disabled disabled disabled component component component component secondary secondary secondary size56 hug size56 minWidth minHeight loading loading loading component"
312+
class="component disabled disabled disabled disabled disabled component loading component loading component loading component loading size56 hug minWidth minHeight secondary secondary secondary size56 component"
313313
>
314314
<svg
315-
class="spinner component preset24 component loader loader loader visible"
315+
class="spinner component preset24 component loader loader loader loader visible"
316316
style="height: 20px; width: 20px;"
317317
viewBox="0 0 20 20"
318318
xmlns="http://www.w3.org/2000/svg"
@@ -353,10 +353,10 @@ exports[`Button Snapshots tests should render loader if loading & href pass 1`]
353353
"container": <div>
354354
<a
355355
aria-disabled="true"
356-
class="component disabled disabled disabled component component component component secondary secondary secondary size56 hug size56 minWidth minHeight loading loading loading component"
356+
class="component disabled disabled disabled disabled disabled component loading component loading component loading component loading size56 hug minWidth minHeight secondary secondary secondary size56 component"
357357
>
358358
<svg
359-
class="spinner component preset24 component loader loader loader visible"
359+
class="spinner component preset24 component loader loader loader loader visible"
360360
style="height: 20px; width: 20px;"
361361
viewBox="0 0 20 20"
362362
xmlns="http://www.w3.org/2000/svg"
@@ -453,12 +453,12 @@ exports[`Button Snapshots tests should render loader if loading pass 1`] = `
453453
"baseElement": <body>
454454
<div>
455455
<button
456-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight loading loading loading component"
456+
class="component component loading component loading component loading component loading size56 hug minWidth minHeight secondary secondary secondary size56 component"
457457
disabled=""
458458
type="button"
459459
>
460460
<svg
461-
class="spinner component preset24 component loader loader loader visible"
461+
class="spinner component preset24 component loader loader loader loader visible"
462462
style="height: 20px; width: 20px;"
463463
viewBox="0 0 20 20"
464464
xmlns="http://www.w3.org/2000/svg"
@@ -498,12 +498,12 @@ exports[`Button Snapshots tests should render loader if loading pass 1`] = `
498498
</body>,
499499
"container": <div>
500500
<button
501-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight loading loading loading component"
501+
class="component component loading component loading component loading component loading size56 hug minWidth minHeight secondary secondary secondary size56 component"
502502
disabled=""
503503
type="button"
504504
>
505505
<svg
506-
class="spinner component preset24 component loader loader loader visible"
506+
class="spinner component preset24 component loader loader loader loader visible"
507507
style="height: 20px; width: 20px;"
508508
viewBox="0 0 20 20"
509509
xmlns="http://www.w3.org/2000/svg"
@@ -600,7 +600,7 @@ exports[`Button Snapshots tests should render right addons 1`] = `
600600
"baseElement": <body>
601601
<div>
602602
<button
603-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
603+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
604604
type="button"
605605
>
606606
<span
@@ -615,7 +615,7 @@ exports[`Button Snapshots tests should render right addons 1`] = `
615615
</body>,
616616
"container": <div>
617617
<button
618-
class="component component component component component secondary secondary secondary size56 hug size56 minWidth minHeight component"
618+
class="component component component component component size56 hug minWidth minHeight secondary secondary secondary size56 component"
619619
type="button"
620620
>
621621
<span
Lines changed: 15 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import React, { Children, forwardRef } from 'react';
1+
import React, { forwardRef } from 'react';
22
import cn from 'classnames';
33

4+
import { BUTTON_DEFAULT_SHAPE, BUTTON_DEFAULT_SIZE } from '../../constants/const';
45
import { useLoading } from '../../shared';
56
import { type ButtonRef, type CommonButtonProps, type PrivateButtonProps } from '../../typings';
6-
import { BaseButtonCandidate } from '../base-button-candidate';
77
import { ButtonComponent } from '../button-component';
8-
import { ButtonContent } from '../button-content';
8+
import { ButtonLayout } from '../button-layout';
99

1010
import defaultColors from './default.module.css';
1111
import commonStyles from './index.module.css';
@@ -14,117 +14,51 @@ import invertedColors from './inverted.module.css';
1414
const colorStyles = {
1515
default: defaultColors,
1616
inverted: invertedColors,
17-
} as const;
17+
};
1818

1919
export const BaseButton = forwardRef<ButtonRef, CommonButtonProps & PrivateButtonProps>(
2020
(
2121
{
2222
allowBackdropBlur,
23-
children,
2423
view = 'secondary',
25-
shape = 'rectangular',
26-
textResizing = 'hug',
27-
hint,
28-
leftAddons,
29-
rightAddons,
30-
size = 56,
3124
className: classNameFromProps,
3225
spinnerClassName,
3326
loaderClassName = spinnerClassName,
3427
loading: loadingFromProps,
35-
nowrap,
3628
colors = 'default',
3729
Component = ButtonComponent,
38-
styles = {},
39-
colorStylesMap = { default: {}, inverted: {} },
40-
disabled,
30+
styles: stylesFromProps = {},
31+
colorStylesMap,
4132
...restProps
4233
},
4334
ref,
4435
) => {
4536
const loading = useLoading(loadingFromProps);
46-
const hasLabel = Children.toArray(children).length > 0;
47-
const showHint = size >= 56 && Children.toArray(hint).length > 0;
48-
const sizeStyle = `size${size}`;
37+
const { size = BUTTON_DEFAULT_SIZE, shape = BUTTON_DEFAULT_SHAPE, disabled } = restProps;
38+
const styles = [stylesFromProps, colorStyles[colors], colorStylesMap[colors]];
4939
const blurred =
5040
allowBackdropBlur &&
5141
(view === 'secondary' || (disabled && (view === 'accent' || view === 'primary')));
52-
5342
const className = cn(
54-
commonStyles.component,
55-
colorStyles[colors].component,
56-
styles.component,
57-
colorStylesMap[colors].component,
58-
commonStyles[view],
59-
colorStyles[colors][view],
60-
colorStylesMap[colors][view],
61-
commonStyles[sizeStyle],
62-
commonStyles[textResizing],
43+
styles.map((s) => s[view]),
6344
{
64-
[commonStyles[shape]]: shape === 'rounded',
65-
[styles[sizeStyle]]: shape === 'rectangular',
66-
[commonStyles.defaultPaddings]: hasLabel && view !== 'text',
67-
[commonStyles.defaultWidth]: hasLabel && view !== 'text',
68-
[commonStyles.minWidth]: !hasLabel && view !== 'text',
69-
[commonStyles.minHeight]: view !== 'text',
45+
[stylesFromProps[`size${size}`]]: shape === 'rectangular',
7046
[commonStyles.blurred]: blurred,
7147
},
72-
loading && [
73-
commonStyles.loading,
74-
colorStyles[colors].loading,
75-
colorStylesMap[colors].loading,
76-
],
7748
classNameFromProps,
7849
);
7950

8051
return (
81-
<BaseButtonCandidate
52+
<ButtonLayout
8253
{...restProps}
8354
ref={ref}
55+
layout={view === 'text' ? 'text' : 'button'}
8456
className={className}
85-
Content={ButtonContent}
8657
Component={Component}
8758
loading={loading}
88-
loaderClassName={cn(
89-
commonStyles.loader,
90-
colorStyles[colors].loader,
91-
colorStylesMap[colors].loader,
92-
loaderClassName,
93-
)}
94-
disabled={disabled}
95-
disabledClassName={cn(
96-
colorStylesMap[colors].disabled,
97-
colorStyles[colors].disabled,
98-
)}
99-
>
100-
{Children.toArray(leftAddons).length > 0 && (
101-
<span className={commonStyles.addon}>{leftAddons}</span>
102-
)}
103-
{hasLabel && (
104-
<span
105-
className={cn(commonStyles.label, {
106-
[commonStyles.nowrap]: nowrap,
107-
[commonStyles.stretchText]: textResizing === 'fill',
108-
})}
109-
>
110-
{children}
111-
{showHint && (
112-
<span
113-
className={cn(
114-
commonStyles.hint,
115-
colorStylesMap[colors].hint,
116-
colorStyles[colors].hint,
117-
)}
118-
>
119-
{hint}
120-
</span>
121-
)}
122-
</span>
123-
)}
124-
{Children.toArray(rightAddons).length > 0 && (
125-
<span className={commonStyles.addon}>{rightAddons}</span>
126-
)}
127-
</BaseButtonCandidate>
59+
loaderClassName={loaderClassName}
60+
styles={styles}
61+
/>
12862
);
12963
},
13064
);

0 commit comments

Comments
 (0)