diff --git a/front/src/pages/people/People.tsx b/front/src/pages/people/People.tsx index 368da4812..c3cf09e2b 100644 --- a/front/src/pages/people/People.tsx +++ b/front/src/pages/people/People.tsx @@ -1,38 +1,9 @@ -import { - faBuildings, - faCalendar, - faEnvelope, - faUser, - faMapPin, - faPhone, - faRectangleHistory, - faList, -} from '@fortawesome/pro-regular-svg-icons'; +import { faUser, faList } from '@fortawesome/pro-regular-svg-icons'; import WithTopBarContainer from '../../layout/containers/WithTopBarContainer'; import Table from '../../components/table/Table'; -import { Company } from '../../interfaces/company.interface'; -import { Pipe } from '../../interfaces/pipe.interface'; -import { createColumnHelper } from '@tanstack/react-table'; import styled from '@emotion/styled'; -import ClickableCell from '../../components/table/ClickableCell'; -import ColumnHead from '../../components/table/ColumnHead'; -import { parsePhoneNumber, CountryCode } from 'libphonenumber-js'; -import Checkbox from '../../components/form/Checkbox'; -import HorizontalyAlignedContainer from '../../layout/containers/HorizontalyAlignedContainer'; -import CompanyChip from '../../components/chips/CompanyChip'; -import PersonChip from '../../components/chips/PersonChip'; - -type Person = { - fullName: string; - picture?: string; - email: string; - company: Company; - phone: string; - creationDate: Date; - pipe: Pipe; - city: string; - countryCode: string; -}; +import { peopleColumns } from './people-table'; +import { defaultData } from './defaultData'; const StyledPeopleContainer = styled.div` display: flex; @@ -44,150 +15,13 @@ const StyledPeopleContainer = styled.div` } `; -const defaultData: Array = [ - { - fullName: 'Alexandre Prot', - picture: 'http://placekitten.com/256', - email: 'alexandre@qonto.com', - company: { id: 1, name: 'Qonto', domain: 'qonto.com' }, - phone: '06 12 34 56 78', - creationDate: new Date('Feb 23, 2018'), - pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, - city: 'Paris', - countryCode: 'FR', - }, - { - fullName: 'Alexandre Prot', - email: 'alexandre@qonto.com', - company: { id: 2, name: 'LinkedIn', domain: 'linkedin.com' }, - phone: '06 12 34 56 78', - creationDate: new Date('Feb 23, 2018'), - pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, - city: 'Paris', - countryCode: 'FR', - }, - { - fullName: 'Alexandre Prot', - picture: 'http://placekitten.com/256', - email: 'alexandre@qonto.com', - company: { id: 1, name: 'Qonto', domain: 'qonto.com' }, - phone: '06 12 34 56 78', - creationDate: new Date('Feb 23, 2018'), - pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, - city: 'Paris', - countryCode: 'FR', - }, - { - fullName: 'Alexandre Prot', - picture: 'https://placekitten.com/g/256', - email: 'alexandre@qonto.com', - company: { id: 1, name: 'Slack', domain: 'slack.com' }, - phone: '06 12 34 56 78', - creationDate: new Date('Feb 23, 2018'), - pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, - city: 'Paris', - countryCode: 'FR', - }, - { - fullName: 'Alexandre Prot', - email: 'alexandre@qonto.com', - company: { id: 2, name: 'Facebook', domain: 'facebook.com' }, - phone: '06 12 34 56 78', - creationDate: new Date('Feb 23, 2018'), - pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, - city: 'Paris', - countryCode: 'FR', - }, -]; - -const columnHelper = createColumnHelper(); - -const columns = [ - columnHelper.accessor('fullName', { - header: () => , - cell: (props) => ( - <> - - - - - - ), - }), - columnHelper.accessor('email', { - header: () => , - cell: (props) => ( - - {props.row.original.email} - - ), - }), - columnHelper.accessor('company', { - header: () => , - cell: (props) => ( - - - - ), - }), - columnHelper.accessor('phone', { - header: () => , - cell: (props) => ( - - {parsePhoneNumber( - props.row.original.phone, - props.row.original.countryCode as CountryCode, - )?.formatInternational() || props.row.original.phone} - - ), - }), - columnHelper.accessor('creationDate', { - header: () => , - cell: (props) => ( - - {new Intl.DateTimeFormat(undefined, { - month: 'short', - day: 'numeric', - year: 'numeric', - }).format(props.row.original.creationDate)} - - ), - }), - columnHelper.accessor('pipe', { - header: () => , - cell: (props) => ( - {props.row.original.pipe.name} - ), - }), - columnHelper.accessor('city', { - header: () => , - cell: (props) => ( - {props.row.original.city} - ), - }), -]; - function People() { return ( diff --git a/front/src/pages/people/defaultData.ts b/front/src/pages/people/defaultData.ts new file mode 100644 index 000000000..be2c06c9d --- /dev/null +++ b/front/src/pages/people/defaultData.ts @@ -0,0 +1,57 @@ +import { Person } from './types'; + +export const defaultData: Array = [ + { + fullName: 'Alexandre Prot', + picture: 'http://placekitten.com/256', + email: 'alexandre@qonto.com', + company: { id: 1, name: 'Qonto', domain: 'qonto.com' }, + phone: '06 12 34 56 78', + creationDate: new Date('Feb 23, 2018'), + pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, + city: 'Paris', + countryCode: 'FR', + }, + { + fullName: 'Alexandre Prot', + email: 'alexandre@qonto.com', + company: { id: 2, name: 'LinkedIn', domain: 'linkedin.com' }, + phone: '06 12 34 56 78', + creationDate: new Date('Feb 23, 2018'), + pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, + city: 'Paris', + countryCode: 'FR', + }, + { + fullName: 'Alexandre Prot', + picture: 'http://placekitten.com/256', + email: 'alexandre@qonto.com', + company: { id: 1, name: 'Qonto', domain: 'qonto.com' }, + phone: '06 12 34 56 78', + creationDate: new Date('Feb 23, 2018'), + pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, + city: 'Paris', + countryCode: 'FR', + }, + { + fullName: 'Alexandre Prot', + picture: 'https://placekitten.com/g/256', + email: 'alexandre@qonto.com', + company: { id: 1, name: 'Slack', domain: 'slack.com' }, + phone: '06 12 34 56 78', + creationDate: new Date('Feb 23, 2018'), + pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, + city: 'Paris', + countryCode: 'FR', + }, + { + fullName: 'Alexandre Prot', + email: 'alexandre@qonto.com', + company: { id: 2, name: 'Facebook', domain: 'facebook.com' }, + phone: '06 12 34 56 78', + creationDate: new Date('Feb 23, 2018'), + pipe: { id: 1, name: 'Sales Pipeline', icon: 'faUser' }, + city: 'Paris', + countryCode: 'FR', + }, +]; diff --git a/front/src/pages/people/people-table.tsx b/front/src/pages/people/people-table.tsx new file mode 100644 index 000000000..b1063a7eb --- /dev/null +++ b/front/src/pages/people/people-table.tsx @@ -0,0 +1,98 @@ +import { + faBuildings, + faCalendar, + faEnvelope, + faUser, + faMapPin, + faPhone, + faRectangleHistory, +} from '@fortawesome/pro-regular-svg-icons'; +import { createColumnHelper } from '@tanstack/react-table'; +import ClickableCell from '../../components/table/ClickableCell'; +import ColumnHead from '../../components/table/ColumnHead'; +import { parsePhoneNumber, CountryCode } from 'libphonenumber-js'; +import Checkbox from '../../components/form/Checkbox'; +import HorizontalyAlignedContainer from '../../layout/containers/HorizontalyAlignedContainer'; +import CompanyChip from '../../components/chips/CompanyChip'; +import PersonChip from '../../components/chips/PersonChip'; +import { Person } from './types'; + +const columnHelper = createColumnHelper(); +export const peopleColumns = [ + columnHelper.accessor('fullName', { + header: () => , + cell: (props) => ( + <> + + + + + + ), + }), + columnHelper.accessor('email', { + header: () => , + cell: (props) => ( + + {props.row.original.email} + + ), + }), + columnHelper.accessor('company', { + header: () => , + cell: (props) => ( + + + + ), + }), + columnHelper.accessor('phone', { + header: () => , + cell: (props) => ( + + {parsePhoneNumber( + props.row.original.phone, + props.row.original.countryCode as CountryCode, + )?.formatInternational() || props.row.original.phone} + + ), + }), + columnHelper.accessor('creationDate', { + header: () => , + cell: (props) => ( + + {new Intl.DateTimeFormat(undefined, { + month: 'short', + day: 'numeric', + year: 'numeric', + }).format(props.row.original.creationDate)} + + ), + }), + columnHelper.accessor('pipe', { + header: () => , + cell: (props) => ( + {props.row.original.pipe.name} + ), + }), + columnHelper.accessor('city', { + header: () => , + cell: (props) => ( + {props.row.original.city} + ), + }), +]; diff --git a/front/src/pages/people/types.ts b/front/src/pages/people/types.ts new file mode 100644 index 000000000..af30e6c53 --- /dev/null +++ b/front/src/pages/people/types.ts @@ -0,0 +1,14 @@ +import { Company } from '../../interfaces/company.interface'; +import { Pipe } from '../../interfaces/pipe.interface'; + +export type Person = { + fullName: string; + picture?: string; + email: string; + company: Company; + phone: string; + creationDate: Date; + pipe: Pipe; + city: string; + countryCode: string; +};