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

Develop #2514

Merged
merged 34 commits into from
Jan 30, 2025
Merged

Develop #2514

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
828bc9f
feat(avatarGroup): add status indicator support in avatar group compo…
anuradha9712 Jan 14, 2025
32f8630
Merge pull request #2496 from anuradha9712/feat-avatar-group-status-i…
satyamyadav Jan 19, 2025
377979d
feat(avatarGroup): add presence support in avatar group component
anuradha9712 Jan 14, 2025
600288f
Merge pull request #2505 from anuradha9712/feat-avatar-group-presence…
samyak3009 Jan 22, 2025
5ec3f5f
feat(dateSeparator): add chat date separator component
anuradha9712 Jan 20, 2025
a5105f2
Merge pull request #2509 from anuradha9712/feat-chat-date-separator-c…
anuradha9712 Jan 22, 2025
c5fc0f1
feat(unreadMessage): add chat unread message separator component
anuradha9712 Jan 20, 2025
07a9007
Merge pull request #2510 from anuradha9712/feat-chat-unread-message-c…
anuradha9712 Jan 22, 2025
b6ea6dd
feat(newMessage): add chat new message separator component
anuradha9712 Jan 20, 2025
96be192
Merge pull request #2511 from anuradha9712/feat-chat-new-message-comp…
veekays Jan 22, 2025
c9f7ef4
feat(typingIndicator): add chat typing indicator component
anuradha9712 Jan 20, 2025
1bff962
Merge pull request #2512 from anuradha9712/feat-chat-typing-indicator
veekays Jan 22, 2025
b29e3f2
fix(css): update order of typography components css in final bundled …
anuradha9712 Jan 22, 2025
e15998d
Merge pull request #2513 from anuradha9712/fix-typography-css-bundle
satyamyadav Jan 22, 2025
007425d
feat(avatarSelection): add status & presence support in avatar selection
anuradha9712 Jan 14, 2025
f14dc9b
Merge pull request #2506 from anuradha9712/feat-avatar-selection-stat…
samyak3009 Jan 22, 2025
085ef5c
docs(avatarGroup): add presence & status section in avatar group
anuradha9712 Jan 22, 2025
a1afdc4
Merge pull request #2515 from anuradha9712/docs-avatar-group
samyak3009 Jan 23, 2025
e27e6b3
docs(chat): add chat ancillary components documentation
anuradha9712 Jan 22, 2025
4cd3f2d
Merge pull request #2516 from anuradha9712/docs-ancillary-component
veekays Jan 28, 2025
48c4baa
feat(avatarSelection): add figma code connect for avatar selection co…
anuradha9712 Jan 26, 2025
ef3d403
Merge pull request #2519 from anuradha9712/feat-avatar-selection-figm…
samyak3009 Jan 28, 2025
5af38b7
feat(avatarGroup): add figma code connect for avatar group component
anuradha9712 Jan 24, 2025
6d4b6af
Merge pull request #2517 from anuradha9712/feat-avatar-group-figma-co…
samyak3009 Jan 28, 2025
20646dd
feat(chat): add figma code connect for chat ancillary component
anuradha9712 Jan 24, 2025
30070b3
Merge pull request #2518 from anuradha9712/feat-chat-ancillary-compon…
samyak3009 Jan 28, 2025
25bf60e
feat(chatBubble): add new chat bubble component
anuradha9712 Jan 11, 2025
53a07c5
Merge pull request #2473 from anuradha9712/feat-chat-bubble-component
veekays Jan 29, 2025
4253816
docs(chatBubble): add new chat bubble component documentation
anuradha9712 Jan 14, 2025
f40afa7
Merge pull request #2494 from anuradha9712/docs-chat-bubble-component
samyak3009 Jan 30, 2025
f5322da
feat(typingIndicator): update size from regular to small in typing in…
anuradha9712 Jan 29, 2025
275936f
Merge pull request #2522 from anuradha9712/feat-typing-indicator-size
anuradha9712 Jan 30, 2025
865a024
fix(tooltip): update props order to accept classname in tooltip compo…
anuradha9712 Jan 28, 2025
f8a3180
Merge pull request #2521 from anuradha9712/fix-tooltip-classname
anuradha9712 Jan 30, 2025
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
2 changes: 1 addition & 1 deletion core/components/atoms/avatar/Avatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export const Avatar = (props: AvatarProps) => {
appearance || colors[(initials.charCodeAt(0) + (initials.charCodeAt(1) || 0)) % 8] || DefaultAppearance;

const darkAppearance = ['secondary', 'success', 'warning', 'accent1', 'accent4'];
const showPresence = presence && !disabled && shape === 'round';
const showPresence = presence && !disabled && shape === 'round' && (presence === 'active' || presence === 'away');
const showStatus = status && size === 'regular' && shape === 'round';

const AvatarClassNames = classNames(
Expand Down
16 changes: 16 additions & 0 deletions core/components/atoms/avatarGroup/AvatarGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ export interface AvatarData extends Record<string, any> {
image?: React.ReactNode;
disabled?: boolean;
tooltipSuffix?: string;
status?: React.ReactNode;
presence?: AvatarProps['presence'];
}

interface AvatarPopoverProps {
Expand Down Expand Up @@ -47,9 +49,22 @@ export interface AvatarGroupProps extends BaseProps {
* image?: React.ReactNode;
* disabled?: boolean;
* tooltipSuffix?: string;
* status?: React.ReactNode;
* presence?: 'active' | 'away';
* }
* </pre>
*
* | Name | Description | Default |
* | --- | --- | --- |
* | firstName | First Name of Avatar | |
* | lastName | Last Name of Avatar | |
* | appearance | Appearance of Avatar | |
* | icon | Icon to be rendered inside Avatar | |
* | image | Image to be rendered inside Avatar | |
* | disabled | Disables the Avatar | false |
* | tooltipSuffix | Suffix to be shown in tooltip | |
* | status | Status to be shown in only Regular Round Avatar | |
* | presence | Presence of Avatar |
*/
list: AvatarData[];
/**
Expand Down Expand Up @@ -157,6 +172,7 @@ export const AvatarGroup = (props: AvatarGroupProps) => {
withSearch,
searchPlaceholder,
searchComparator,
size,
};

return (
Expand Down
25 changes: 11 additions & 14 deletions core/components/atoms/avatarGroup/AvatarOptionItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ interface AvatarOptionItemProps {
}

const AvatarOptionItem = (props: AvatarOptionItemProps) => {
const { firstName = '', lastName = '', tooltipSuffix = '', disabled, image, icon, ...rest } = props.avatarData;
const { avatarData } = props;
const { firstName = '', lastName = '', tooltipSuffix = '', disabled, image, icon } = avatarData;
const name = `${firstName} ${lastName} ${tooltipSuffix}`;
const elementRef = React.useRef(null);

const triggerClassName = classNames({
['cursor-not-allowed']: disabled,
['ellipsis--noWrap']: true,
});

const itemClassName = classNames({
Expand All @@ -22,21 +24,16 @@ const AvatarOptionItem = (props: AvatarOptionItemProps) => {
});

return (
<Tooltip showOnTruncation={true} tooltip={name} elementRef={elementRef} triggerClass={triggerClassName}>
<Listbox.Item
disabled={disabled}
className={itemClassName}
tagName="li"
data-test="DesignSystem-AvatarGroup--Item"
>
<Avatar firstName={firstName} lastName={lastName} className="mr-4" withTooltip={false} {...rest}>
{image || icon}
</Avatar>
<Text ref={elementRef} data-test="DesignSystem-AvatarGroup--Text" className="ellipsis--noWrap">
<Listbox.Item disabled={disabled} className={itemClassName} tagName="li" data-test="DesignSystem-AvatarGroup--Item">
<Avatar {...avatarData} withTooltip={false}>
{image || icon}
</Avatar>
<Tooltip showOnTruncation={true} tooltip={name} elementRef={elementRef} triggerClass={triggerClassName}>
<Text ref={elementRef} data-test="DesignSystem-AvatarGroup--Text" className="ellipsis--noWrap ml-4">
{name}
</Text>
</Listbox.Item>
</Tooltip>
</Tooltip>
</Listbox.Item>
);
};

Expand Down
4 changes: 3 additions & 1 deletion core/components/atoms/avatarGroup/AvatarPopperBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ interface AvatarPopperProps {
withSearch?: boolean;
searchPlaceholder?: string;
searchComparator?: (searchValue: string, avatarData: AvatarData) => boolean;
size?: AvatarData['size'];
}

const AvatarPopperBody = (props: AvatarPopperProps) => {
Expand All @@ -30,6 +31,7 @@ const AvatarPopperBody = (props: AvatarPopperProps) => {
withSearch,
searchPlaceholder,
searchComparator,
size,
} = props;

const [searchValue, setSearchValue] = React.useState<string>('');
Expand Down Expand Up @@ -107,7 +109,7 @@ const AvatarPopperBody = (props: AvatarPopperProps) => {
data-test="DesignSystem-AvatarGroup--List"
>
{searchList.map((item: AvatarData, index: number) => {
return <AvatarOptionItem key={index} avatarData={item} />;
return <AvatarOptionItem key={index} avatarData={{ ...item, size }} />;
})}
</Listbox>
)}
Expand Down
13 changes: 2 additions & 11 deletions core/components/atoms/avatarGroup/Avatars.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,13 @@ const Avatars = (props: any) => {
});

const avatars = avatarList.map((item: any, index: any) => {
const { appearance, firstName, lastName, icon, image, disabled, tooltipSuffix } = item;
const { icon, image } = item;

const newAvatarStyle = { ...avatarStyle, zIndex: avatarList.length - index };

return (
<div data-test="DesignSystem-AvatarGroup--Avatar" className={GroupClass} style={newAvatarStyle} key={index}>
<Avatar
size={size}
appearance={appearance}
firstName={firstName}
lastName={lastName}
withTooltip={true}
disabled={disabled}
tooltipPosition={tooltipPosition}
tooltipSuffix={tooltipSuffix}
>
<Avatar size={size} withTooltip={true} tooltipPosition={tooltipPosition} {...item}>
{image || icon}
</Avatar>
</div>
Expand Down
106 changes: 106 additions & 0 deletions core/components/atoms/avatarGroup/__stories__/withPresence.story.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import * as React from 'react';
import { AvatarGroup, Avatar } from '@/index';

export const withPresence = () => {
const presenceList = [
{
firstName: 'John',
lastName: 'Doe',
},
{
firstName: 'Steven',
lastName: 'Packton',
presence: 'active',
},
{
firstName: 'Nancy',
lastName: 'Wheeler',
presence: 'away',
},
{
firstName: 'Monica',
lastName: 'Geller',
},
{
firstName: 'Anuradha',
lastName: 'Aggarwal',
image: <Avatar.Image src="https://design.innovaccer.com/images/avatar2.jpeg" />,
presence: 'active',
},
{
firstName: 'Rachel',
lastName: 'Green',
presence: 'away',
disabled: true,
},
{
firstName: 'Walter',
lastName: 'Wheeler',
presence: 'away',
},
{
firstName: 'Mark',
lastName: 'Snow',
},
];

return <AvatarGroup list={presenceList} />;
};

const customCode = `() => {
const presenceList = [
{
firstName: 'John',
lastName: 'Doe',
},
{
firstName: 'Steven',
lastName: 'Packton',
presence: 'active',
},
{
firstName: 'Nancy',
lastName: 'Wheeler',
presence: 'away',
},
{
firstName: 'Monica',
lastName: 'Geller',
},
{
firstName: 'Anuradha',
lastName: 'Aggarwal',
image: <Avatar.Image src="https://design.innovaccer.com/images/avatar2.jpeg" />,
presence: 'active',
},
{
firstName: 'Rachel',
lastName: 'Green',
presence: 'away',
disabled: true,
},
{
firstName: 'Walter',
lastName: 'Wheeler',
presence: 'away',
},
{
firstName: 'Mark',
lastName: 'Snow',
},
];

return <AvatarGroup list={presenceList} />;
}`;

export default {
title: 'Components/Avatar/AvatarGroup/With Presence',
component: AvatarGroup,
parameters: {
docs: {
docPage: {
customCode,
},
},
},
};
124 changes: 124 additions & 0 deletions core/components/atoms/avatarGroup/__stories__/withStatus.story.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import * as React from 'react';
import { AvatarGroup, Tooltip, Icon, Avatar } from '@/index';

export const withStatus = () => {
const statusList = [
{
firstName: 'John',
lastName: 'Doe',
},
{
firstName: 'Steven',
lastName: 'Packton',
status: (
<Tooltip position="top" tooltip="Verified">
<Icon appearance="white" className="p-1 bg-success" name="done" size={10} />
</Tooltip>
),
},
{
firstName: 'Nancy',
lastName: 'Wheeler',
status: (
<Tooltip position="top" tooltip="On Call">
<Icon appearance="white" className="p-1 bg-primary" name="phone" size={10} />
</Tooltip>
),
},
{
firstName: 'Monica',
lastName: 'Geller',
},
{
firstName: 'Anuradha',
lastName: 'Aggarwal',
image: <Avatar.Image src="https://design.innovaccer.com/images/avatar2.jpeg" />,
status: (
<Tooltip position="top" tooltip="Verified">
<Icon appearance="white" className="p-1 bg-success" name="done" size={10} />
</Tooltip>
),
},
{
firstName: 'Rachel',
lastName: 'Green',
},
{
firstName: 'Walter',
lastName: 'Wheeler',
},
{
firstName: 'Mark',
lastName: 'Snow',
},
];

return <AvatarGroup list={statusList} />;
};

const customCode = `() => {
const statusList = [
{
firstName: 'John',
lastName: 'Doe',
},
{
firstName: 'Steven',
lastName: 'Packton',
status: (
<Tooltip position="top" tooltip="Verified">
<Icon appearance="white" className="p-1 bg-success" name="done" size={10} />
</Tooltip>
),
},
{
firstName: 'Nancy',
lastName: 'Wheeler',
status: (
<Tooltip position="top" tooltip="On Call">
<Icon appearance="white" className="p-1 bg-primary" name="phone" size={10} />
</Tooltip>
),
},
{
firstName: 'Monica',
lastName: 'Geller',
},
{
firstName: 'Anuradha',
lastName: 'Aggarwal',
image: <Avatar.Image src="https://design.innovaccer.com/images/avatar2.jpeg" />,
status: (
<Tooltip position="top" tooltip="Verified">
<Icon appearance="white" className="p-1 bg-success" name="done" size={10} />
</Tooltip>
),
},
{
firstName: 'Rachel',
lastName: 'Green',
},
{
firstName: 'Walter',
lastName: 'Wheeler',
},
{
firstName: 'Mark',
lastName: 'Snow',
},
];

return <AvatarGroup list={statusList} />;
}`;

export default {
title: 'Components/Avatar/AvatarGroup/With Status',
component: AvatarGroup,
parameters: {
docs: {
docPage: {
customCode,
},
},
},
};
Loading