Skip to content

Commit ba66b34

Browse files
authored
fix: button group loading (#2544)
* fix: bug and code refactor * chore: border radius * chore: ts fixes * chore: border radius changes * chore: update snap * fix: loading single button in buttonGroup
1 parent 18fe539 commit ba66b34

File tree

6 files changed

+548
-443
lines changed

6 files changed

+548
-443
lines changed

.changeset/warm-fireants-nail.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@razorpay/blade': patch
3+
---
4+
5+
fix(blade): loading single button in buttonGroup

packages/blade/src/components/Button/BaseButton/BaseButton.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,9 @@ const _BaseButton: React.ForwardRefRenderFunction<BladeElementRef, BaseButtonPro
344344
const isChildrenComponent = React.isValidElement(children);
345345

346346
// Button cannot be disabled when its rendered as Link
347-
const disabled = buttonGroupProps.isDisabled ?? (isLoading || (isDisabled && !isLink));
347+
// button should be allowed to be disabled in any case...
348+
// either through button group or we should allow to disable an individual button
349+
const disabled = buttonGroupProps.isDisabled || isLoading || (isDisabled && !isLink);
348350

349351
if (__DEV__) {
350352
if (!Icon && !childrenString?.trim()) {

packages/blade/src/components/ButtonGroup/StyledButtonGroup.tsx

+21-16
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,38 @@ import styled from 'styled-components';
22
import type { StyledButtonGroupProps } from './types';
33
import BaseBox from '~components/Box/BaseBox';
44
import { makeBorderSize } from '~utils';
5-
import { getBackgroundColorToken } from '~components/Button/BaseButton/BaseButton';
6-
import getIn from '~utils/lodashButBetter/get';
75

86
const StyledButtonGroup = styled(BaseBox)<StyledButtonGroupProps>(
9-
({ theme, isDisabled, variant = 'primary', color, isFullWidth }) => {
7+
({ theme, variant = 'primary', isFullWidth }) => {
108
return {
119
display: 'flex',
1210
width: isFullWidth ? '100%' : 'fit-content',
1311
borderWidth: makeBorderSize(theme.border.width.thin),
1412
borderRadius: makeBorderSize(theme.border.radius.medium),
1513
borderStyle: 'solid',
16-
borderColor: getIn(
17-
theme.colors,
18-
getBackgroundColorToken({
19-
// Only secondary variant has border a border, for other variants we use background color so that the border is not visible
20-
property: variant === 'secondary' ? 'border' : 'background',
21-
variant,
22-
color,
23-
state: isDisabled ? 'disabled' : 'default',
24-
}),
25-
),
26-
14+
borderColor: 'transparent',
15+
overflow: 'hidden',
2716
'button[role="button"]': {
28-
borderRadius: 0,
29-
border: 'none',
3017
flex: isFullWidth ? 1 : 'auto',
18+
borderRadius: 0,
3119
},
20+
21+
...(variant === 'secondary' && {
22+
'button[role="button"]:first-child': {
23+
borderRight: 'none',
24+
borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),
25+
borderBottomLeftRadius: makeBorderSize(theme.border.radius.medium),
26+
},
27+
'button[role="button"]:not(:first-child):not(:last-child)': {
28+
borderLeft: 'none',
29+
borderRight: 'none',
30+
},
31+
'button[role="button"]:last-child': {
32+
borderLeft: 'none',
33+
borderTopRightRadius: makeBorderSize(theme.border.radius.medium),
34+
borderBottomRightRadius: makeBorderSize(theme.border.radius.medium),
35+
},
36+
}),
3237
};
3338
},
3439
);

packages/blade/src/components/ButtonGroup/__tests__/__snapshots__/ButtonGroup.ssr.test.tsx.snap

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`<ButtonGroup /> should render ButtonGroup 1`] = `"<div id="root"><div data-blade-component="button-group" data-testid="button-group-test" role="group" class="BaseBox-bmPWx StyledButtonGroup-gr4xbj-0 jpCXAr"><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">One</div></div></div></button><div data-blade-component="base-box" class="BaseBox-bmPWx ButtonGroupweb__StyledDivider-sc-1lc1evg-0 cbYKkw"></div><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">Two</div></div></div></button><div data-blade-component="base-box" class="BaseBox-bmPWx ButtonGroupweb__StyledDivider-sc-1lc1evg-0 cbYKkw"></div><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">Three</div></div></div></button></div></div>"`;
3+
exports[`<ButtonGroup /> should render ButtonGroup 1`] = `"<div id="root"><div data-blade-component="button-group" data-testid="button-group-test" role="group" class="BaseBox-bmPWx StyledButtonGroup-gr4xbj-0 hxzFGp"><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">One</div></div></div></button><div data-blade-component="base-box" class="BaseBox-bmPWx ButtonGroupweb__StyledDivider-sc-1lc1evg-0 cbYKkw"></div><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">Two</div></div></div></button><div data-blade-component="base-box" class="BaseBox-bmPWx ButtonGroupweb__StyledDivider-sc-1lc1evg-0 cbYKkw"></div><button type="button" data-blade-component="button" role="button" class="StyledBaseButtonweb__StyledBaseButton-sc-26bt38-0 iCiokj"><div data-blade-component="base-box" class="BaseBox-bmPWx AnimatedButtonContentweb__AnimatedButtonContent-sc-1fkx0t6-0 eHcfsa"><div data-blade-component="base-box" class="BaseBox-bmPWx BaseButton__ButtonContent-zf1huq-0 LeezU esItiH"><div class="StyledBaseText-dVBfTO eGcQGV" data-blade-component="base-text">Three</div></div></div></button></div></div>"`;
44

55
exports[`<ButtonGroup /> should render ButtonGroup 2`] = `
66
.c3.c3.c3.c3.c3 {
@@ -25,6 +25,28 @@ exports[`<ButtonGroup /> should render ButtonGroup 2`] = `
2525
z-index: 1;
2626
}
2727
28+
.c0.c0.c0.c0.c0 {
29+
display: -webkit-box;
30+
display: -webkit-flex;
31+
display: -ms-flexbox;
32+
display: flex;
33+
width: -webkit-fit-content;
34+
width: -moz-fit-content;
35+
width: fit-content;
36+
border-width: 1px;
37+
border-radius: 4px;
38+
border-style: solid;
39+
border-color: transparent;
40+
overflow: hidden;
41+
}
42+
43+
.c0.c0.c0.c0.c0 button[role="button"] {
44+
-webkit-flex: auto;
45+
-ms-flex: auto;
46+
flex: auto;
47+
border-radius: 0;
48+
}
49+
2850
.c1.c1.c1.c1.c1 {
2951
min-height: 36px;
3052
width: auto;
@@ -120,28 +142,6 @@ exports[`<ButtonGroup /> should render ButtonGroup 2`] = `
120142
opacity: 1;
121143
}
122144
123-
.c0.c0.c0.c0.c0 {
124-
display: -webkit-box;
125-
display: -webkit-flex;
126-
display: -ms-flexbox;
127-
display: flex;
128-
width: -webkit-fit-content;
129-
width: -moz-fit-content;
130-
width: fit-content;
131-
border-width: 1px;
132-
border-radius: 4px;
133-
border-style: solid;
134-
border-color: hsla(227,100%,59%,1);
135-
}
136-
137-
.c0.c0.c0.c0.c0 button[role="button"] {
138-
border-radius: 0;
139-
border: none;
140-
-webkit-flex: auto;
141-
-ms-flex: auto;
142-
flex: auto;
143-
}
144-
145145
.c6.c6.c6.c6.c6 {
146146
border-width: 0;
147147
border-left-style: solid;

0 commit comments

Comments
 (0)