Skip to content

Commit

Permalink
feat(UserFilter): add avatar rendering and separator option in user f…
Browse files Browse the repository at this point in the history
…ilter
  • Loading branch information
trigoporres committed Jan 31, 2025
1 parent 1b1b1ac commit 9f0309e
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 27 deletions.
3 changes: 3 additions & 0 deletions packages/table/src/filters/UserFilter/UserFilter.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ export const Base: Story = {
email: '[email protected]',
colorScheme: 'error',
},
'separator': {
isSeparator: true
},
'test b': {
name: 'John',
email: '[email protected]',
Expand Down
44 changes: 29 additions & 15 deletions packages/table/src/filters/UserFilter/UserFilter.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,43 @@
import * as React from 'react';

import { SelectControl, type TSelectOption } from '@devoinc/genesys-ui';
import {
SelectControl,
type TSelectOption,
Avatar,
} from '@devoinc/genesys-ui';

import type { TFilterContext, TFilter } from '../../declarations';
import type { TUserFilterValue } from './declarations';
import { FilterContainer } from '../common';
import { TContextUser } from '../../renderers';
import { concatenateValues } from './util';
//import { concatenateValues } from './util';

export const UserFilter: React.FC<TFilter> = ({ colDef, onChange }) => {
const context = colDef?.context as TContextUser & TFilterContext;
const keys = Object.keys(context?.userMapping ?? {});
const concatedOptions = concatenateValues(context?.userMapping ?? {});
const AvatarCmp = ({ user }) => {
return (
<Avatar
imageSrc={user?.avatar}
colorScheme={user?.colorScheme || 'info'}
size="xxxs"
name={user?.name}
/>
);
};
const options = Object.values(context?.userMapping ?? {}).map(
(user, index) => {
return {
value: keys[index],
label: user.name,
description: user.subtitle,
} as TSelectOption;
if (keys[index] === 'separator') {
return {
isSeparator: true,
} as TSelectOption;
} else {
return {
value: keys[index],
label: user.name,
icon: <AvatarCmp user={user} />,
} as TSelectOption;
}
},
);
const filterValue = context?.filterValue as TUserFilterValue;
Expand All @@ -28,8 +47,8 @@ export const UserFilter: React.FC<TFilter> = ({ colDef, onChange }) => {
<SelectControl
isMulti
size="sm"
multipleSubtle
closeMenuOnSelect={false}
multipleSubtle
selectAllBtn
hideSelectedOptions={false}
onChange={(val: TSelectOption[]) => {
Expand All @@ -39,12 +58,7 @@ export const UserFilter: React.FC<TFilter> = ({ colDef, onChange }) => {
defaultInputValue={colDef?.context?.defaultValue as string}
options={options}
value={value}
filterOption={(option, value) => {
const optionValue = option.value;
return concatedOptions[optionValue].includes(
String(value).toLowerCase(),
);
}}
minMenuWidth={'24rem'}
/>
</FilterContainer>
);
Expand Down
10 changes: 3 additions & 7 deletions packages/table/src/renderers/UserRenderer/UserRenderer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ export const UserRenderer: React.FC<TCellRenderer<string, TContextUser>> = ({

const user = userInfo[value];
const name = user?.name || value;

return user?.email || user?.job || user?.role ? (
<Popover placement="bottom-start" id="story-userinfo">
{({ toggle, ref, isOpened, setOpened }) => {
Expand All @@ -32,10 +31,9 @@ export const UserRenderer: React.FC<TCellRenderer<string, TContextUser>> = ({
<UserInfo.Avatar
avatar={user?.avatar}
avatarColorScheme={user?.colorScheme || 'info'}
avatarSize="xs"
avatarSize="xxxs"
format="base"
name={name}
subtitle={user?.subtitle}
/>
</Box>
);
Expand All @@ -45,10 +43,9 @@ export const UserRenderer: React.FC<TCellRenderer<string, TContextUser>> = ({
<UserInfo.Avatar
avatar={user?.avatar}
avatarColorScheme={user?.colorScheme || 'info'}
avatarSize="xs"
avatarSize="xxxs"
format="base"
name={name}
subtitle={user?.subtitle}
/>
</Panel.Header>
<Panel.Body>
Expand All @@ -64,10 +61,9 @@ export const UserRenderer: React.FC<TCellRenderer<string, TContextUser>> = ({
<UserInfo.Avatar
avatar={user?.avatar}
avatarColorScheme={user?.colorScheme || 'info'}
avatarSize="xs"
avatarSize="xxxs"
format="base"
name={name}
subtitle={user?.subtitle}
/>
);
};
20 changes: 15 additions & 5 deletions packages/table/stories/table/BasicTable.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import {
import { ROW_HEIGHT_MD } from '../../src/constants';
import { allTypesData } from './data/allTypesData';
import { AllTypesColumn } from './column/AllTypesColumn';
import { useFilterStruct } from '../../src/hooks/useFilterStruct';
import { filterDataByFilterStruct } from '../../src/helpers/filterDataByFilterStruct';
import { updateColDefsWithFilterStruct } from '../../src/helpers/updateColDefsWithFilterStruct';

// import { Holo } from '@devoinc/holo';
// import { performanceColumn } from './column/performanceColumn';
// import { performanceData } from './data/performanceData';
Expand All @@ -31,9 +35,10 @@ type Story = StoryObj<typeof BasicTable>;
const BasicCmp = ({ data, colDefs }) => {
const [newData, setNewData] = React.useState(data);
const { orderStruct, onSort } = useOrderStruct([{ id: 'id', sort: 'desc' }]);
React.useEffect(() => {
setNewData([...newData].sort(orderDataByOrderStruct(orderStruct)));
}, [onSort]);
const { filterStruct, onFilter } = useFilterStruct();

const newColDef = updateColDefsWithFilterStruct(colDefs, filterStruct);

return (
<Flex flexDirection="column" gap="cmp-md" height={'auto'}>
<Flex.Item>
Expand All @@ -50,8 +55,13 @@ const BasicCmp = ({ data, colDefs }) => {
textsCell={({ rowIndex }) =>
rowIndex % 2 === 0 ? 'soy par' : 'soy impar'
}
data={newData}
colDefs={updateColDefsWithOrderStruct(colDefs, orderStruct)}
onFilter={(curColDef, value, type) => {
onFilter(curColDef.id, value, type);
}}
data={[...newData]
.filter(filterDataByFilterStruct(filterStruct))
.sort(orderDataByOrderStruct(orderStruct))}
colDefs={updateColDefsWithOrderStruct(newColDef, orderStruct)}
defaultColDef={{
isExpandable: true,
}}
Expand Down

0 comments on commit 9f0309e

Please sign in to comment.