Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add support for data-analytics- [FC-3152] #2424

Merged
merged 70 commits into from
Dec 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
212e8d6
chore: added support for datepicker
tewarig Nov 25, 2024
98fb3b6
chore: add support for file upload
tewarig Nov 25, 2024
c9e39f9
fix: error
tewarig Nov 26, 2024
7fd033e
chore: add support for data-analytics-* in accordion and add tests
tewarig Nov 26, 2024
76d3617
feat: support for alert & added test cases
tewarig Nov 26, 2024
caa40ed
feat: add support for data-analytics-* in amount and add tests
tewarig Nov 26, 2024
9444f9b
feat: add support in avatar and avatar group
tewarig Nov 26, 2024
3b9ce61
feat: add support & test for data-analytics in badge
tewarig Nov 26, 2024
d6a07c7
chore: add support in BaseFooter
tewarig Nov 26, 2024
8d7f1f9
feat: add support in bottomNav and bottomNav items
tewarig Nov 26, 2024
652c61b
feat: add support and tests in Bottom sheet
tewarig Nov 26, 2024
960ed1d
feat: add support for baselink and bread crumb
tewarig Nov 26, 2024
2c05f81
feat: add support for button
tewarig Nov 26, 2024
0824a70
chore: add tests
tewarig Nov 26, 2024
1f4af85
feat: add support for button group
tewarig Nov 26, 2024
15cec92
feat: add support for card , link , counter
tewarig Nov 26, 2024
5da169d
feat: add support for carousel
tewarig Nov 26, 2024
298f043
feat: add support for checkbox and checkbox group
tewarig Nov 26, 2024
fa49977
feat: add support for Chip and ChipGroup
tewarig Nov 26, 2024
5b8ecaa
feat: add collapsible
tewarig Nov 26, 2024
828a1a5
feat: add Drawer
tewarig Nov 26, 2024
a1389a8
fix: ts error
tewarig Nov 26, 2024
6ed60cd
feat: add support for dropdown & action list
tewarig Nov 26, 2024
e21f883
feat: added file upload test
tewarig Nov 26, 2024
46fba90
fix: ts error
tewarig Nov 26, 2024
ada7582
feat: add indicator
tewarig Nov 26, 2024
163f8b1
feat: fix types
tewarig Nov 26, 2024
44621b5
feat: add BaseInput and textInput
tewarig Nov 26, 2024
9336db1
feat: add text area
tewarig Nov 26, 2024
95c1e8c
feat: add searchInput
tewarig Nov 26, 2024
2a90feb
feat: phoneNumber Input
tewarig Nov 26, 2024
30aebdb
feat: add passwordInput
tewarig Nov 26, 2024
01f2bbb
feat: add otp input
tewarig Nov 26, 2024
32283cc
feat: add other input
tewarig Nov 26, 2024
1c56bf7
feat: add menuItem
tewarig Nov 27, 2024
0f3b624
feat: add modal
tewarig Nov 27, 2024
6ac4827
feat: add popover , progressbar, radio and radio group
tewarig Nov 27, 2024
6bc7be9
feat: add SideNav
tewarig Nov 27, 2024
eff3462
feat: add stepgroup
tewarig Nov 27, 2024
28f1942
chore: remove extra import
tewarig Nov 27, 2024
625b117
feat: add switch
tewarig Nov 27, 2024
505b56d
feat: add support for data attribute in tab
tewarig Nov 27, 2024
e2943c8
feat: add support for tag
tewarig Nov 27, 2024
124e4ef
feat: add support in toast
tewarig Nov 27, 2024
f640c59
feat: add tool tip --no-verify
tewarig Nov 27, 2024
79664d1
feat: add tab nav
tewarig Nov 27, 2024
69b83b3
feat: add support for table
tewarig Nov 27, 2024
22e5352
chore: sync with main
tewarig Nov 27, 2024
45ebe6f
chore: update snap
tewarig Nov 27, 2024
ce07d2d
fix: test for popover
tewarig Nov 27, 2024
dc355ae
fix: card test case
tewarig Nov 27, 2024
ecfca98
chore: code refactor
tewarig Nov 28, 2024
c467509
chore: fix accordion
tewarig Nov 28, 2024
c30c912
fix: build issues
tewarig Nov 28, 2024
4201e74
fix: update code owner
tewarig Nov 28, 2024
97de4ac
chore: update aria label
tewarig Nov 28, 2024
59cd2da
fix: lint
tewarig Nov 28, 2024
3248710
fix: disable type-assertion
tewarig Nov 28, 2024
9379edd
chore: add support for data-analytics
tewarig Nov 28, 2024
e562965
chore: update snap
tewarig Nov 28, 2024
18025ac
fix: update snap
tewarig Nov 28, 2024
fa2fee7
chore: bump minor verison
tewarig Nov 28, 2024
70594fb
chore: add snap test for checkbox
tewarig Dec 1, 2024
3837d18
chore: add checkbox test for checkbox group
tewarig Dec 1, 2024
7ac2c4f
chore: move data analytics inside in case of otp input
tewarig Dec 1, 2024
ed270df
chore: add more data attribute
tewarig Dec 1, 2024
bc2811a
chore: sync with main
tewarig Dec 1, 2024
0c3ad46
chore: add support for test id in top nav
tewarig Dec 1, 2024
7b97272
chore: update snap
tewarig Dec 2, 2024
f1b23cf
fix: datepicker test cases
tewarig Dec 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shaggy-masks-develop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@razorpay/blade': minor
---

feat: add support for data-analytics attribute
6 changes: 4 additions & 2 deletions packages/blade/src/components/Accordion/Accordion.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { BoxProps } from '~components/Box';
import { size as sizeTokens } from '~tokens/global';
import { makeSize } from '~utils';
import { metaAttribute, MetaConstants } from '~utils/metaAttribute';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

const MIN_WIDTH: BoxProps['minWidth'] = {
s: makeSize(sizeTokens[200]),
Expand Down Expand Up @@ -71,7 +72,7 @@ const Accordion = ({
size = 'large',
maxWidth,
testID,
...styledProps
...rest
}: AccordionProps): ReactElement => {
const [expandedAccordionItemIndex, setExpandedAccordionItemIndex] = useState<number | undefined>(
defaultExpandedIndex,
Expand Down Expand Up @@ -119,7 +120,8 @@ const Accordion = ({
<AccordionContext.Provider value={accordionContext}>
<BaseBox
{...metaAttribute({ name: MetaConstants.Accordion, testID })}
{...getStyledProps(styledProps)}
{...getStyledProps(rest)}
{...makeAnalyticsAttribute(rest)}
>
<BaseBox
{...getVariantStyles(variant)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { useCollapsible } from '~components/Collapsible/CollapsibleContext';
import { makeAccessible } from '~utils/makeAccessible';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import { throwBladeError } from '~utils/logger';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

const _AccordionButton = ({
index,
Expand All @@ -18,6 +19,7 @@ const _AccordionButton = ({
isDeprecatedAPI,
header,
isDisabled,
...rest
}: AccordionButtonProps): ReactElement => {
const { onExpandChange, isExpanded, collapsibleBodyId } = useCollapsible();
const { showNumberPrefix, expandedIndex, size } = useAccordion();
Expand Down Expand Up @@ -50,6 +52,7 @@ const _AccordionButton = ({
<BaseBox
// a11y guidelines suggest having an apt heading surround a button but heading level is hardcoded here
{...makeAccessible({ role: 'heading', level: 3 })}
{...makeAnalyticsAttribute(rest)}
width="100%"
>
<StyledAccordionButton
Expand Down
12 changes: 9 additions & 3 deletions packages/blade/src/components/Accordion/AccordionItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import { MetaConstants, metaAttribute } from '~utils/metaAttribute';
import { isReactNative } from '~utils';
import { Collapsible } from '~components/Collapsible/Collapsible';
import { CollapsibleBody } from '~components/Collapsible';
import type { TestID } from '~utils/types';
import type { TestID, DataAnalyticsAttribute } from '~utils/types';
import { getComponentId } from '~utils/isValidAllowedChildren';
import { throwBladeError } from '~utils/logger';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

type AccordionItemProps = {
/**
Expand Down Expand Up @@ -60,7 +61,8 @@ type AccordionItemProps = {
* instead pass `showNumberPrefix` to root `Accordion`
*/
_index?: number;
} & TestID;
} & TestID &
DataAnalyticsAttribute;

const AccordionItem = ({
title,
Expand All @@ -70,6 +72,7 @@ const AccordionItem = ({
isDisabled,
_index,
testID,
...rest
}: AccordionItemProps): ReactElement => {
const {
expandedIndex,
Expand Down Expand Up @@ -117,7 +120,10 @@ const AccordionItem = ({
isDisabled,
}}
>
<BaseBox {...metaAttribute({ name: MetaConstants.AccordionItem, testID })}>
<BaseBox
{...metaAttribute({ name: MetaConstants.AccordionItem, testID })}
{...makeAnalyticsAttribute(rest)}
>
<Collapsible
isExpanded={isExpanded}
defaultIsExpanded={isDefaultExpanded}
Expand Down
11 changes: 8 additions & 3 deletions packages/blade/src/components/Accordion/AccordionItemBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import BaseBox from '~components/Box/BaseBox';
import { Text } from '~components/Typography';
import { isReactNative } from '~utils';
import { makeAccessible } from '~utils/makeAccessible';
import type { StringChildrenType } from '~utils/types';
import type { DataAnalyticsAttribute, StringChildrenType } from '~utils/types';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import { MetaConstants, metaAttribute } from '~utils/metaAttribute';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

const BLANK_SPACE = ' ';

Expand All @@ -32,10 +33,11 @@ const descriptionSizeToken = {
const _AccordionItemBody = ({
children,
_description,
...rest
}: {
children?: React.ReactNode | StringChildrenType;
_description?: string;
}): React.ReactElement => {
} & DataAnalyticsAttribute): React.ReactElement => {
const { size } = useAccordion();

const childrenElement =
Expand Down Expand Up @@ -75,7 +77,10 @@ const _AccordionItemBody = ({
);

return (
<BaseBox {...metaAttribute({ name: MetaConstants.AccordionItemBody })}>
<BaseBox
{...metaAttribute({ name: MetaConstants.AccordionItemBody })}
{...makeAnalyticsAttribute(rest)}
>
{collapsibleBodyContent}
</BaseBox>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import { Text } from '~components/Typography';
import BaseBox from '~components/Box/BaseBox';
import { CollapsibleChevronIcon } from '~components/Collapsible/CollapsibleChevronIcon';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import type { DataAnalyticsAttribute } from '~utils/types';
import { metaAttribute, MetaConstants } from '~utils/metaAttribute';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

const _AccordionItemHeader = ({
title,
Expand All @@ -15,10 +17,12 @@ const _AccordionItemHeader = ({
children,
trailing,
titleSuffix,
...rest
}: Pick<
BaseHeaderProps,
'title' | 'subtitle' | 'leading' | 'children' | 'trailing' | 'titleSuffix'
>): React.ReactElement => {
> &
DataAnalyticsAttribute): React.ReactElement => {
const { size, showNumberPrefix } = useAccordion();
const { index, isDisabled } = useAccordionItemIndex();

Expand Down Expand Up @@ -52,6 +56,7 @@ const _AccordionItemHeader = ({
size="large"
/>
}
{...makeAnalyticsAttribute(rest)}
>
{children}
</BaseHeader>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,4 +366,38 @@ describe('Deprecated <Accordion />', () => {
expect(getByRole('button', { name: button2 })).toHaveAttribute('aria-expanded', 'false');
expect(getAllByRole('region', { hidden: true })[1]).toHaveAttribute('aria-hidden', 'true');
});
it('should render data attributes with correct values', () => {
const { container } = renderWithTheme(
<Accordion data-analytics-accordion-name="razorpay-faq">
<AccordionItem data-analytics-accordion-item="first">
<AccordionItemHeader
data-analytics-accordion-header="setup route query"
title="How can I setup Route?"
/>
<AccordionItemBody data-analytics-item-body="router query answer">
You can use Razorpay Route from the Dashboard or using APIs to transfer money to
customers. You may also check our docs for detailed instructions.
</AccordionItemBody>
</AccordionItem>
</Accordion>,
);

// Check presence and values of data attributes
expect(container.querySelector('[data-analytics-accordion-header]')).toHaveAttribute(
'data-analytics-accordion-header',
'setup route query',
);
expect(container.querySelector('[data-analytics-item-body]')).toHaveAttribute(
'data-analytics-item-body',
'router query answer',
);
expect(container.querySelector('[data-analytics-accordion-item]')).toHaveAttribute(
'data-analytics-accordion-item',
'first',
);
expect(container.querySelector('[data-analytics-accordion-name]')).toHaveAttribute(
'data-analytics-accordion-name',
'razorpay-faq',
);
});
});
4 changes: 2 additions & 2 deletions packages/blade/src/components/Accordion/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type React from 'react';
import type { BoxProps } from '~components/Box';
import type { StyledPropsBlade } from '~components/Box/styledProps';
import type { IconComponent } from '~components/Icons';
import type { TestID } from '~utils/types';
import type { DataAnalyticsAttribute, TestID } from '~utils/types';

type AccordionVariantType = 'filled' | 'transparent';

Expand All @@ -17,7 +17,7 @@ type AccordionButtonProps = {
isDeprecatedAPI: boolean;
header: React.ReactNode;
isDisabled?: boolean;
};
} & DataAnalyticsAttribute;

type AccordionProps = {
/**
Expand Down
10 changes: 7 additions & 3 deletions packages/blade/src/components/ActionList/ActionList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,18 @@ import { useDropdown } from '~components/Dropdown/useDropdown';
import { useBottomSheetContext } from '~components/BottomSheet/BottomSheetContext';
import { makeAccessible } from '~utils/makeAccessible';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import type { TestID } from '~utils/types';
import type { DataAnalyticsAttribute, TestID } from '~utils/types';
import BaseBox from '~components/Box/BaseBox';
import { metaAttribute, MetaConstants } from '~utils/metaAttribute';
import { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

type ActionListProps = {
children: React.ReactNode[];
} & TestID;
} & TestID &
DataAnalyticsAttribute;

const _ActionList = ({ children, testID }: ActionListProps): React.ReactElement => {
const _ActionList = ({ children, testID, ...rest }: ActionListProps): React.ReactElement => {
const {
setOptions,
actionListItemRef,
Expand Down Expand Up @@ -68,6 +70,7 @@ const _ActionList = ({ children, testID }: ActionListProps): React.ReactElement
sectionData={sectionData}
isMultiSelectable={isMultiSelectable}
ref={actionListItemRef as any}
{...makeAnalyticsAttribute(rest)}
/>
) : (
<BaseBox
Expand All @@ -78,6 +81,7 @@ const _ActionList = ({ children, testID }: ActionListProps): React.ReactElement
labelledBy: `${dropdownBaseId}-label`,
})}
{...metaAttribute({ name: MetaConstants.ActionList, testID })}
{...makeAnalyticsAttribute(rest)}
>
<ActionListBox
isInBottomSheet={isInBottomSheet}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,19 @@ import type { SectionData } from './actionListUtils';
import { useBottomSheetContext } from '~components/BottomSheet/BottomSheetContext';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import { makeAccessible } from '~utils/makeAccessible';
import type { DataAnalyticsAttribute } from '~utils/types';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

type ActionListBoxProps = {
childrenWithId?: React.ReactNode[] | null;
sectionData: SectionData;
actionListItemWrapperRole: 'listbox' | 'menu' | undefined;
isMultiSelectable: boolean;
isInBottomSheet: boolean;
};
} & DataAnalyticsAttribute;

const _ActionListBox = React.forwardRef<HTMLDivElement, ActionListBoxProps>(
({ childrenWithId, actionListItemWrapperRole, isMultiSelectable }, ref) => {
({ childrenWithId, actionListItemWrapperRole, isMultiSelectable, ...rest }, ref) => {
const { isInBottomSheet } = useBottomSheetContext();

return (
Expand All @@ -26,6 +28,7 @@ const _ActionListBox = React.forwardRef<HTMLDivElement, ActionListBoxProps>(
role: actionListItemWrapperRole,
multiSelectable: actionListItemWrapperRole === 'listbox' ? isMultiSelectable : undefined,
})}
{...makeAnalyticsAttribute(rest)}
>
{childrenWithId}
</StyledListBoxWrapper>
Expand Down
12 changes: 9 additions & 3 deletions packages/blade/src/components/ActionList/ActionListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { Text } from '~components/Typography';
import type { Platform } from '~utils';
import { castWebType, isReactNative } from '~utils';
import { metaAttribute, MetaConstants } from '~utils/metaAttribute';
import type { StringChildrenType, TestID } from '~utils/types';
import type { DataAnalyticsAttribute, StringChildrenType, TestID } from '~utils/types';
import { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';
import { makeSize } from '~utils/makeSize';
import { makeAccessible } from '~utils/makeAccessible';
Expand All @@ -27,6 +27,7 @@ import { BaseMenuItem, useBaseMenuItem } from '~components/BaseMenu';
import { Checkbox } from '~components/Checkbox';
import type { AvatarProps } from '~components/Avatar/types';
import { Avatar } from '~components/Avatar';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

type ActionListItemProps = {
title: string;
Expand Down Expand Up @@ -86,7 +87,8 @@ type ActionListItemProps = {
* @private
*/
_index?: number;
} & TestID;
} & TestID &
DataAnalyticsAttribute;

const StyledActionListSectionTitle = styled(BaseBox)((props) => ({
// @TODO: replace this styled-component with new layout box when we have padding shorthand
Expand All @@ -110,13 +112,15 @@ type ActionListSectionProps = {
* @private
*/
_sectionChildValues?: string[];
} & TestID;
} & TestID &
DataAnalyticsAttribute;
const _ActionListSection = ({
title,
children,
testID,
_hideDivider,
_sectionChildValues,
...rest
}: ActionListSectionProps): React.ReactElement => {
const { hasAutoCompleteInBottomSheetHeader, dropdownTriggerer, filteredValues } = useDropdown();
const hasAutoComplete =
Expand Down Expand Up @@ -147,6 +151,7 @@ const _ActionListSection = ({
label: title,
})}
{...metaAttribute({ name: MetaConstants.ActionListSection, testID })}
{...makeAnalyticsAttribute(rest as Record<string, unknown>)}
>
{/* We're announcing title as group label so we can hide this */}
{isSectionVisible ? (
Expand Down Expand Up @@ -387,6 +392,7 @@ const _ActionListItem = (props: ActionListItemProps): React.ReactElement => {
props.onClick?.({ name: props.value, value: isSelected, event: castWebType(e) });
}
})}
{...makeAnalyticsAttribute({ ...props })}
{...metaAttribute({ name: MetaConstants.ActionListItem, testID: props.testID })}
onMouseDown={() => {
// We want to keep focus on Dropdown's trigger while option is being clicked
Expand Down
11 changes: 7 additions & 4 deletions packages/blade/src/components/Alert/Alert.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ import BaseButton from '~components/Button/BaseButton';
import { BaseLink } from '~components/Link/BaseLink';
import type { FeedbackColors, SubtleOrIntense } from '~tokens/theme/theme';
import { useTheme } from '~components/BladeProvider';
import type { DotNotationSpacingStringToken, TestID } from '~utils/types';
import type { DataAnalyticsAttribute, DotNotationSpacingStringToken, TestID } from '~utils/types';
import { makeAccessible } from '~utils/makeAccessible';
import { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';

type PrimaryAction = {
text: string;
Expand Down Expand Up @@ -109,7 +110,8 @@ type AlertProps = {
secondary?: SecondaryAction;
};
} & TestID &
StyledPropsBlade;
StyledPropsBlade &
DataAnalyticsAttribute;

const isReactNative = getPlatformType() === 'react-native';

Expand All @@ -135,7 +137,7 @@ const Alert = ({
actions,
testID,
icon,
...styledProps
...rest
}: AlertProps): ReactElement | null => {
const { theme } = useTheme();
const { matchedDeviceType } = useBreakpoint({ breakpoints: theme.breakpoints });
Expand Down Expand Up @@ -300,7 +302,8 @@ const Alert = ({
<BaseBox
{...a11yProps}
{...metaAttribute({ name: MetaConstants.Alert, testID })}
{...getStyledProps(styledProps)}
{...getStyledProps(rest)}
{...makeAnalyticsAttribute(rest)}
>
<StyledAlert
color={color}
Expand Down
Loading
Loading