Feat/filter activity inbox (#1032)

* Move files

* Add filtering for tasks inbox

* Add filter dropdown for single entity

* Minor

* Fill empty button

* Refine logic for filter dropdown

* remove log

* Fix unwanted change

* Set current user as default filter

* Add avatar on filter

* Improve initialization of assignee filter

* Add story for Tasks page

* Add more stories

* Add sotry with no tasks

* Improve dates

* Enh tests

---------

Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
This commit is contained in:
Emilien Chauvet
2023-08-02 21:36:16 +02:00
committed by GitHub
parent 2128d44212
commit 4252a0a2c3
28 changed files with 601 additions and 189 deletions

View File

@ -7,6 +7,7 @@ import {
IconUser,
IconUsers,
} from '@/ui/icon/index';
import { TableContext } from '@/ui/table/states/TableContext';
import { icon } from '@/ui/theme/constants/icon';
import { FilterDropdownUserSearchSelect } from '@/users/components/FilterDropdownUserSearchSelect';
import { Company } from '~/generated/graphql';
@ -49,6 +50,8 @@ export const companiesFilters: FilterDefinitionByEntity<Company>[] = [
label: 'Account owner',
icon: <IconUser size={icon.size.md} stroke={icon.stroke.sm} />,
type: 'entity',
entitySelectComponent: <FilterDropdownUserSearchSelect />,
entitySelectComponent: (
<FilterDropdownUserSearchSelect context={TableContext} />
),
},
];

View File

@ -1,8 +1,10 @@
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { TaskGroups } from '@/tasks/components/TaskGroups';
import { TasksContext } from '@/tasks/states/TasksContext';
import { TaskGroups } from '@/activities/components/TaskGroups';
import { TasksContext } from '@/activities/states/TasksContext';
import { FilterDropdownButton } from '@/ui/filter-n-sort/components/FilterDropdownButton';
import { FiltersHotkeyScope } from '@/ui/filter-n-sort/types/FiltersHotkeyScope';
import { IconArchive, IconCheck, IconCheckbox } from '@/ui/icon/index';
import { WithTopBarContainer } from '@/ui/layout/components/WithTopBarContainer';
import { TabList } from '@/ui/tab/components/TabList';
@ -52,6 +54,13 @@ export function Tasks() {
<TabList context={TasksContext} tabs={TASK_TABS} />
</StyledTabListContainer>
}
rightComponents={[
<FilterDropdownButton
key="tasks-filter-dropdown-button"
context={TasksContext}
HotkeyScope={FiltersHotkeyScope.FilterDropdownButton}
/>,
]}
/>
<TaskGroups />
</RecoilScope>

View File

@ -0,0 +1,26 @@
import type { Meta, StoryObj } from '@storybook/react';
import {
PageDecorator,
type PageDecoratorArgs,
} from '~/testing/decorators/PageDecorator';
import { graphqlMocks } from '~/testing/graphqlMocks';
import { Tasks } from '../Tasks';
const meta: Meta<PageDecoratorArgs> = {
title: 'Pages/Tasks/Default',
component: Tasks,
decorators: [PageDecorator],
args: { currentPath: '/tasks' },
parameters: {
docs: { story: 'inline', iframeHeight: '500px' },
msw: graphqlMocks,
},
};
export default meta;
export type Story = StoryObj<typeof Tasks>;
export const Default: Story = {};

View File

@ -0,0 +1,18 @@
import { IconUser } from '@tabler/icons-react';
import { TasksContext } from '@/activities/states/TasksContext';
import { FilterDefinitionByEntity } from '@/ui/filter-n-sort/types/FilterDefinitionByEntity';
import { FilterDropdownUserSearchSelect } from '@/users/components/FilterDropdownUserSearchSelect';
import { Activity } from '~/generated/graphql';
export const tasksFilters: FilterDefinitionByEntity<Activity>[] = [
{
field: 'assigneeId',
label: 'Assignee',
icon: <IconUser />,
type: 'entity',
entitySelectComponent: (
<FilterDropdownUserSearchSelect context={TasksContext} />
),
},
];