Added Linaria for performance optimization (#5693)

- Added Linaria to have compiled CSS on our optimized field displays
- Refactored mocks for performance stories on fields
- Refactored generateRecordChipData into a global context, computed only
when we fetch object metadata items.
- Refactored ChipFieldDisplay 
- Refactored PhoneFieldDisplay
This commit is contained in:
Lucas Bordeau
2024-06-12 16:31:07 +02:00
committed by GitHub
parent 30d3ebc68a
commit 732e8912da
43 changed files with 2166 additions and 519 deletions

View File

@ -0,0 +1,24 @@
import { useMemo } from 'react';
import { Decorator } from '@storybook/react';
import { PreComputedChipGeneratorsContext } from '@/object-metadata/context/PreComputedChipGeneratorsContext';
import { getRecordChipGeneratorPerObjectPerField } from '@/object-record/utils/getRecordChipGeneratorPerObjectPerField';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/objectMetadataItems';
export const ChipGeneratorsDecorator: Decorator = (Story) => {
const chipGeneratorPerObjectPerField = useMemo(() => {
return getRecordChipGeneratorPerObjectPerField(
generatedMockObjectMetadataItems,
);
}, []);
return (
<PreComputedChipGeneratorsContext.Provider
value={{
chipGeneratorPerObjectPerField,
}}
>
<Story />
</PreComputedChipGeneratorsContext.Provider>
);
};

View File

@ -1,11 +1,13 @@
import { useEffect } from 'react';
import { useEffect, useMemo } from 'react';
import { Decorator } from '@storybook/react';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { currentUserState } from '@/auth/states/currentUserState';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/ObjectMetadataItemsLoadEffect';
import { PreComputedChipGeneratorsContext } from '@/object-metadata/context/PreComputedChipGeneratorsContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { getRecordChipGeneratorPerObjectPerField } from '@/object-record/utils/getRecordChipGeneratorPerObjectPerField';
import { mockedUsersData } from '~/testing/mock-data/users';
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
@ -21,10 +23,20 @@ export const ObjectMetadataItemsDecorator: Decorator = (Story) => {
setCurrentUser(mockedUsersData[0]);
}, [setCurrentUser, setCurrentWorkspaceMember]);
const chipGeneratorPerObjectPerField = useMemo(() => {
return getRecordChipGeneratorPerObjectPerField(objectMetadataItems);
}, [objectMetadataItems]);
return (
<>
<ObjectMetadataItemsLoadEffect />
{!!objectMetadataItems.length && <Story />}
<PreComputedChipGeneratorsContext.Provider
value={{
chipGeneratorPerObjectPerField,
}}
>
{!!objectMetadataItems.length && <Story />}
</PreComputedChipGeneratorsContext.Provider>
</>
);
};

View File

@ -0,0 +1,125 @@
import { useEffect } from 'react';
import { Decorator } from '@storybook/react';
import { useRecoilCallback } from 'recoil';
import { Company } from '@/companies/types/Company';
import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition';
import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField';
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
import {
RecordFieldValueSelectorContextProvider,
useSetRecordValue,
} from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { Person } from '@/people/types/Person';
import { mockedCompaniesDataV2 } from '~/testing/mock-data/companiesV2';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/objectMetadataItems';
import { mockPeopleDataV2 } from '~/testing/mock-data/peopleV2';
import { isDefined } from '~/utils/isDefined';
const RecordMockSetterEffect = ({
companies,
people,
}: {
companies: Company[];
people: Person[];
}) => {
const setRecordValue = useSetRecordValue();
const setRecordInBothStores = useRecoilCallback(
({ set }) =>
(record: ObjectRecord) => {
set(recordStoreFamilyState(record.id), record);
setRecordValue(record.id, record);
},
[setRecordValue],
);
useEffect(() => {
for (const company of companies) {
setRecordInBothStores(company);
}
for (const person of people) {
setRecordInBothStores(person);
}
}, [setRecordInBothStores, companies, people]);
return null;
};
export const getFieldDecorator =
(
objectNameSingular: 'company' | 'person',
fieldName: string,
fieldValue?: any,
): Decorator =>
(Story) => {
const companies =
objectNameSingular === 'company' && isDefined(fieldValue)
? [
{ ...mockedCompaniesDataV2[0], [fieldName]: fieldValue },
...mockedCompaniesDataV2.slice(1),
]
: mockedCompaniesDataV2;
const people =
objectNameSingular === 'person' && isDefined(fieldValue)
? [
{ ...mockPeopleDataV2[0], [fieldName]: fieldValue },
...mockPeopleDataV2.slice(1),
]
: mockPeopleDataV2;
const record = objectNameSingular === 'company' ? companies[0] : people[0];
if (isDefined(fieldValue)) {
(record as any)[fieldName] = fieldValue;
}
const objectMetadataItem = generatedMockObjectMetadataItems.find(
(objectMetadataItem) =>
objectMetadataItem.nameSingular === objectNameSingular,
);
const fieldMetadataItem = objectMetadataItem?.fields.find(
(field) => field.name === fieldName,
);
if (!isDefined(objectMetadataItem)) {
throw new Error(`Object ${objectNameSingular} not found`);
}
if (!isDefined(fieldMetadataItem)) {
throw new Error(
`Field ${fieldName} not found in object ${objectNameSingular}`,
);
}
const isLabelIdentifier = isLabelIdentifierField({
fieldMetadataItem,
objectMetadataItem,
});
return (
<RecordFieldValueSelectorContextProvider>
<FieldContext.Provider
value={{
entityId: record.id,
basePathToShowPage: '/object-record/',
isLabelIdentifier,
fieldDefinition: formatFieldMetadataItemAsColumnDefinition({
field: fieldMetadataItem,
position: record.position ?? 0,
objectMetadataItem,
}),
hotkeyScope: 'hotkey-scope',
}}
>
<RecordMockSetterEffect companies={companies} people={people} />
<Story />
</FieldContext.Provider>
</RecordFieldValueSelectorContextProvider>
);
};

View File

@ -0,0 +1,78 @@
import { ReactNode } from 'react';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition';
import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage';
import {
FieldContext,
RecordUpdateHook,
} from '@/object-record/record-field/contexts/FieldContext';
import { InlineCellHotkeyScope } from '@/object-record/record-inline-cell/types/InlineCellHotkeyScope';
export const useMockFieldContext = ({
clearable,
fieldMetadataName,
fieldPosition,
isLabelIdentifier = false,
objectNameSingular,
objectRecordId,
customHotkeyScope,
}: {
clearable?: boolean;
fieldMetadataName: string;
fieldPosition: number;
isLabelIdentifier?: boolean;
objectNameSingular: string;
objectRecordId: string;
customHotkeyScope?: string;
}) => {
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
const basePathToShowPage = getBasePathToShowPage({
objectNameSingular,
});
const fieldMetadataItem = objectMetadataItem?.fields.find(
(field) => field.name === fieldMetadataName,
);
const useUpdateOneObjectMutation: RecordUpdateHook = () => {
const updateEntity = () => {};
return [updateEntity, { loading: false }];
};
const FieldContextProvider =
fieldMetadataItem && objectMetadataItem
? ({ children }: { children: ReactNode }) => (
<FieldContext.Provider
key={objectRecordId + fieldMetadataItem.id}
value={{
basePathToShowPage: isLabelIdentifier
? basePathToShowPage
: undefined,
entityId: objectRecordId,
recoilScopeId: objectRecordId + fieldMetadataItem.id,
isLabelIdentifier,
fieldDefinition: formatFieldMetadataItemAsColumnDefinition({
field: fieldMetadataItem,
position: fieldPosition,
objectMetadataItem,
}),
useUpdateRecord: useUpdateOneObjectMutation,
hotkeyScope:
customHotkeyScope ?? InlineCellHotkeyScope.InlineCell,
clearable,
}}
>
{children}
</FieldContext.Provider>
)
: undefined;
return {
FieldContextProvider,
};
};

View File

@ -0,0 +1,493 @@
import { Company } from '@/companies/types/Company';
import { Favorite } from '@/favorites/types/Favorite';
import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember';
import { mockedCompaniesData } from '~/testing/mock-data/companies';
type MockedCompanyV2 = Omit<Company, 'deletedAt'> & {
accountOwner: WorkspaceMember | null;
Favorite?: Pick<Favorite, 'id'> | null;
};
export const mockedCompaniesDataV2: Array<MockedCompanyV2> = [
{
__typename: 'Company',
domainName: 'paris.com',
name: 'Test',
employees: null,
address: 'Paris France',
createdAt: '2024-05-27T11:23:05.954Z',
id: 'd55c240e-e4e0-4248-b56d-8004d1218a9c',
position: 6.109375,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1000000000,
currencyCode: 'USD',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: 'paris.com',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1553-45c6-a028-5a9064cce07f',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-7169-42cf-bc47-1cfef15264b8',
userEmail: 'phil.schiler@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Phil',
lastName: 'Shiler',
},
},
},
{
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
address: 'Paris France',
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-0687-4c41-b707-ed1bfca972a7',
colorScheme: 'Light',
updatedAt: '2024-05-30T09:00:31.127Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-9e3b-46d4-a556-88b9ddc2b034',
userEmail: 'tim@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Tim',
lastName: 'Apple',
},
},
},
{
__typename: 'Company',
domainName: 'hasura.io',
name: 'Hasura',
employees: 102938102938,
address: '',
createdAt: '2024-05-16T13:16:29.000Z',
id: '20202020-f86b-419f-b794-02319abe8637',
position: 10,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-77d5-4cb6-b60a-f4a835a85d61',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-3957-4908-9c36-2929a23f8357',
userEmail: 'jony.ive@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Jony',
lastName: 'Ive',
},
},
},
{
__typename: 'Company',
domainName: 'netflix.com',
name: 'Netflix',
employees: null,
address: '',
createdAt: '2024-05-15T13:16:29.000Z',
id: '20202020-707e-44dc-a1d2-30030bf1a944',
position: 7,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 2000000000,
currencyCode: 'USD',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1553-45c6-a028-5a9064cce07f',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-7169-42cf-bc47-1cfef15264b8',
userEmail: 'phil.schiler@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Phil',
lastName: 'Shiler',
},
},
},
{
__typename: 'Company',
domainName: 'claap.io',
name: 'Claap',
employees: 2131920,
address: 'asdasd',
createdAt: '2024-05-10T13:16:29.000Z',
id: '20202020-cfbf-4156-a790-e39854dcd4eb',
position: 9,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: 'asmdlkasd',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-0687-4c41-b707-ed1bfca972a7',
colorScheme: 'Light',
updatedAt: '2024-05-30T09:00:31.127Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-9e3b-46d4-a556-88b9ddc2b034',
userEmail: 'tim@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Tim',
lastName: 'Apple',
},
},
},
{
__typename: 'Company',
domainName: 'libeo.io',
name: 'Libeo',
employees: 1239819238,
address: '',
createdAt: '2024-05-09T13:16:29.000Z',
id: '20202020-3f74-492d-a101-2a70f50a1645',
position: 8,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1553-45c6-a028-5a9064cce07f',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-7169-42cf-bc47-1cfef15264b8',
userEmail: 'phil.schiler@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Phil',
lastName: 'Shiler',
},
},
},
{
__typename: 'Company',
domainName: 'qonto.com',
name: 'Qonto',
employees: 123123123,
address: '',
createdAt: '2024-05-08T13:16:29.000Z',
id: '20202020-0713-40a5-8216-82802401d33e',
position: 9.5,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1553-45c6-a028-5a9064cce07f',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-7169-42cf-bc47-1cfef15264b8',
userEmail: 'phil.schiler@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Phil',
lastName: 'Shiler',
},
},
},
{
__typename: 'Company',
domainName: 'wework.com',
name: 'Wework',
employees: 123123123,
address: '',
createdAt: '2024-05-08T13:16:29.000Z',
id: '20202020-5518-4553-9433-42d8eb82834b',
position: 11,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-0687-4c41-b707-ed1bfca972a7',
colorScheme: 'Light',
updatedAt: '2024-05-30T09:00:31.127Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-9e3b-46d4-a556-88b9ddc2b034',
userEmail: 'tim@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Tim',
lastName: 'Apple',
},
},
},
{
__typename: 'Company',
domainName: 'linkedin.com',
name: 'Linkedin',
employees: 10102,
accountOwner: null,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-3ec3-4fe3-8997-b76aa0bfa408',
position: 1,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: 'adasd',
url: 'adasd',
},
},
{
__typename: 'Company',
domainName: 'airbnb.com',
name: 'Airbnb',
employees: 123333,
accountOwner: null,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-171e-4bcc-9cf7-43448d6fb278',
position: 5,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
},
{
__typename: 'Company',
domainName: 'samsung.com',
name: 'Samsung',
employees: 10000,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-f79e-40dd-bd06-c36e6abb4678',
position: 12,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1553-45c6-a028-5a9064cce07f',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-7169-42cf-bc47-1cfef15264b8',
userEmail: 'phil.schiler@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Phil',
lastName: 'Shiler',
},
},
},
{
__typename: 'Company',
domainName: 'algolia.com',
name: 'Algolia',
employees: 10000,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1455-4c57-afaf-dd5dc086361d',
position: 13,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-77d5-4cb6-b60a-f4a835a85d61',
colorScheme: 'Light',
updatedAt: '2024-05-01T13:16:29.046Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-3957-4908-9c36-2929a23f8357',
userEmail: 'jony.ive@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Jony',
lastName: 'Ive',
},
},
},
{
__typename: 'Company',
domainName: 'facebook.com',
name: 'Facebook',
employees: 220323,
accountOwner: null,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-5d81-46d6-bf83-f7fd33ea6102',
position: 6.0625,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: 'asdasd',
},
},
{
__typename: 'Company',
domainName: 'microsoft.com',
name: 'Microsoft',
employees: 10000,
address: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-ed89-413a-b31a-962986e67bb4',
position: 6.09375,
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 10000000000,
currencyCode: 'USD',
},
linkedinLink: {
__typename: 'Link',
label: '',
url: '',
},
accountOwner: {
__typename: 'WorkspaceMember',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-0687-4c41-b707-ed1bfca972a7',
colorScheme: 'Light',
updatedAt: '2024-05-30T09:00:31.127Z',
locale: 'en',
avatarUrl: '',
userId: '20202020-9e3b-46d4-a556-88b9ddc2b034',
userEmail: 'tim@apple.dev',
name: {
__typename: 'FullName',
firstName: 'Tim',
lastName: 'Apple',
},
},
},
];
export const mockedDuplicateCompanyData: MockedCompanyV2 = {
...mockedCompaniesData[0],
id: '8b40856a-2ec9-4c03-8bc0-c032c89e1824',
};
export const mockedEmptyCompanyData = {
id: '9231e6ee-4cc2-4c7b-8c55-dff16f4d968a',
name: '',
domainName: '',
address: '',
accountOwner: null,
annualRecurringRevenue: null,
createdAt: null,
updatedAt: null,
employees: null,
idealCustomerProfile: null,
linkedinLink: null,
xLink: null,
_activityCount: null,
__typename: 'Company',
};

View File

@ -13249,3 +13249,4 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
] as ObjectEdge[],
},
} as ObjectMetadataItemsQuery;

View File

@ -3,6 +3,13 @@ import {
FieldMetadataType,
RelationMetadataType,
} from '~/generated-metadata/graphql';
import { mockedStandardObjectMetadataQueryResult } from '~/testing/mock-data/generated/standard-metadata-query-result';
export const generatedMockObjectMetadataItems: ObjectMetadataItem[] =
mockedStandardObjectMetadataQueryResult.objects.edges.map((edge) => ({
...edge.node,
fields: edge.node.fields.edges.map((edge) => edge.node),
}));
export const mockObjectMetadataItem: ObjectMetadataItem = {
__typename: 'object',

View File

@ -1,11 +1,11 @@
import { Company } from '@/companies/types/Company';
import { Person } from '@/people/types/Person';
type RequiredAndNotNull<T> = {
export type RequiredAndNotNull<T> = {
[P in keyof T]-?: Exclude<T[P], null | undefined>;
};
type MockedPerson = RequiredAndNotNull<
export type MockedPerson = RequiredAndNotNull<
Pick<
Person,
| '__typename'

View File

@ -0,0 +1,533 @@
import { Company } from '@/companies/types/Company';
import { Person } from '@/people/types/Person';
export type MockedPersonV2 = Pick<
Person,
| '__typename'
| 'id'
| 'name'
| 'linkedinLink'
| 'xLink'
| 'links'
| 'jobTitle'
| 'email'
| 'phone'
| 'city'
| 'avatarUrl'
| 'createdAt'
| 'updatedAt'
| 'companyId'
| 'position'
> & {
company?: Company;
};
export const mockPeopleDataV2: MockedPersonV2[] = [
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1c0e-494c-a1b6-85b1c6fefaa5',
email: 'christoph.calisto@linkedin.com',
phone: '+33789012345',
position: 1,
name: {
__typename: 'FullName',
firstName: 'Christoph',
lastName: 'Callisto',
},
linkedinLink: { __typename: 'Link', label: '', url: 'asd' },
xLink: { __typename: 'Link', label: '', url: 'asd' },
company: {
__typename: 'Company',
domainName: 'linkedin.com',
name: 'Linkedin',
employees: 10102,
accountOwnerId: null,
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-3ec3-4fe3-8997-b76aa0bfa408',
position: 1,
updatedAt: '2024-05-23T13:21:41.159Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: 'adasd', url: 'adasd' },
},
},
{
__typename: 'Person',
city: 'Los Angeles',
jobTitle: '@',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-ac73-4797-824e-87a1f5aea9e0',
email: 'sylvie.palmer@linkedin.com',
phone: '+33780123456',
position: 2,
name: { __typename: 'FullName', firstName: 'Sylvie', lastName: 'Palmer' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'algolia.com',
name: 'Algolia',
employees: 10000,
accountOwnerId: '20202020-77d5-4cb6-b60a-f4a835a85d61',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-1455-4c57-afaf-dd5dc086361d',
position: 13,
updatedAt: '2024-05-28T15:52:31.839Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-f517-42fd-80ae-14173b3b70ae',
email: 'christopher.gonzalez@qonto.com',
phone: '+33789012345',
position: 3,
name: {
__typename: 'FullName',
firstName: 'Christopher',
lastName: 'Gonzalez',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'qonto.com',
name: 'Qonto',
employees: 123123123,
accountOwnerId: '20202020-1553-45c6-a028-5a9064cce07f',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-08T13:16:29.000Z',
id: '20202020-0713-40a5-8216-82802401d33e',
position: 9.5,
updatedAt: '2024-05-28T15:52:46.961Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Los Angeles',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-eee1-4690-ad2c-8619e5b56a2e',
email: 'ashley.parker@qonto.com',
phone: '+33780123456',
position: 4,
name: { __typename: 'FullName', firstName: 'Ashley', lastName: 'Parker' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'qonto.com',
name: 'Qonto',
employees: 123123123,
accountOwnerId: '20202020-1553-45c6-a028-5a9064cce07f',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-08T13:16:29.000Z',
id: '20202020-0713-40a5-8216-82802401d33e',
position: 9.5,
updatedAt: '2024-05-28T15:52:46.961Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-6784-4449-afdf-dc62cb8702f2',
email: 'nicholas.wright@microsoft.com',
phone: '+33781234567',
position: 5,
name: { __typename: 'FullName', firstName: 'Nicholas', lastName: 'Wright' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'microsoft.com',
name: 'Microsoft',
employees: 10000,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-ed89-413a-b31a-962986e67bb4',
position: 6.09375,
updatedAt: '2024-05-28T15:52:35.621Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 10000000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'New York',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-490f-4466-8391-733cfd66a0c8',
email: 'isabella.scott@microsoft.com',
phone: '+33782345678',
position: 6,
name: { __typename: 'FullName', firstName: 'Isabella', lastName: 'Scott' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'microsoft.com',
name: 'Microsoft',
employees: 10000,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-ed89-413a-b31a-962986e67bb4',
position: 6.09375,
updatedAt: '2024-05-28T15:52:35.621Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 10000000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-80f1-4dff-b570-a74942528de3',
email: 'matthew.green@microsoft.com',
phone: '+33783456789',
position: 7,
name: { __typename: 'FullName', firstName: 'Matthew', lastName: 'Green' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'microsoft.com',
name: 'Microsoft',
employees: 10000,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-ed89-413a-b31a-962986e67bb4',
position: 6.09375,
updatedAt: '2024-05-28T15:52:35.621Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 10000000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'New York',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-338b-46df-8811-fa08c7d19d35',
email: 'elizabeth.baker@airbnb.com',
phone: '+33784567890',
position: 8,
name: { __typename: 'FullName', firstName: 'Elizabeth', lastName: 'Baker' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'airbnb.com',
name: 'Airbnb',
employees: 123333,
accountOwnerId: null,
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-171e-4bcc-9cf7-43448d6fb278',
position: 5,
updatedAt: '2024-05-28T15:52:27.902Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'San Francisco',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-64ad-4b0e-bbfd-e9fd795b7016',
email: 'christopher.nelson@airbnb.com',
phone: '+33785678901',
position: 9,
name: {
__typename: 'FullName',
firstName: 'Christopher',
lastName: 'Nelson',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'airbnb.com',
name: 'Airbnb',
employees: 123333,
accountOwnerId: null,
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-171e-4bcc-9cf7-43448d6fb278',
position: 5,
updatedAt: '2024-05-28T15:52:27.902Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'New York',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-5d54-41b7-ba36-f0d20e1417ae',
email: 'avery.carter@airbnb.com',
phone: '+33786789012',
position: 10,
name: { __typename: 'FullName', firstName: 'Avery', lastName: 'Carter' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'airbnb.com',
name: 'Airbnb',
employees: 123333,
accountOwnerId: null,
address: '',
idealCustomerProfile: false,
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-171e-4bcc-9cf7-43448d6fb278',
position: 5,
updatedAt: '2024-05-28T15:52:27.902Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: null,
currencyCode: '',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Los Angeles',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-623d-41fe-92e7-dd45b7c568e1',
email: 'ethan.mitchell@google.com',
phone: '+33787890123',
position: 11,
name: { __typename: 'FullName', firstName: 'Ethan', lastName: 'Mitchell' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: 'Paris France',
idealCustomerProfile: false,
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
updatedAt: '2024-05-28T15:53:28.838Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-2d40-4e49-8df4-9c6a049190ef',
email: 'madison.perez@google.com',
phone: '+33788901234',
position: 12,
name: { __typename: 'FullName', firstName: 'Madison', lastName: 'Perez' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: 'Paris France',
idealCustomerProfile: false,
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
updatedAt: '2024-05-28T15:53:28.838Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-2d40-4e49-8df4-9c6a049190df',
email: 'bertrand.voulzy@google.com',
phone: '+33788901234',
position: 13,
name: { __typename: 'FullName', firstName: 'Bertrand', lastName: 'Voulzy' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: 'Paris France',
idealCustomerProfile: false,
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
updatedAt: '2024-05-28T15:53:28.838Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-2d40-4e49-8df4-9c6a049191de',
email: 'louis.duss@google.com',
phone: '+33788901234',
position: 14,
name: { __typename: 'FullName', firstName: 'Louis', lastName: 'Duss' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: 'Paris France',
idealCustomerProfile: false,
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
updatedAt: '2024-05-28T15:53:28.838Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
{
__typename: 'Person',
city: 'Seattle',
jobTitle: '',
createdAt: '2024-05-01T13:16:29.046Z',
id: '20202020-2d40-4e49-8df4-9c6a049191df',
email: 'lorie.vladim@google.com',
phone: '+33788901235',
position: 15,
name: { __typename: 'FullName', firstName: 'Lorie', lastName: 'Vladim' },
linkedinLink: { __typename: 'Link', label: '', url: '' },
xLink: { __typename: 'Link', label: '', url: '' },
company: {
__typename: 'Company',
domainName: 'google.com',
name: 'Google',
employees: 10202,
accountOwnerId: '20202020-0687-4c41-b707-ed1bfca972a7',
address: 'Paris France',
idealCustomerProfile: false,
createdAt: '2024-05-21T13:16:29.000Z',
id: '20202020-c21e-4ec2-873b-de4264d89025',
position: 7.5,
updatedAt: '2024-05-28T15:53:28.838Z',
xLink: { __typename: 'Link', label: '', url: '' },
annualRecurringRevenue: {
__typename: 'Currency',
amountMicros: 1001000000,
currencyCode: 'USD',
},
linkedinLink: { __typename: 'Link', label: '', url: '' },
},
},
];