Setup GraphQL Code Generator (#74)

* chore: add types of schema

* Ease codegen use on FE

* chore: ignore prettier in generated files

* lint: generated files

* feature: strongly type filter of query

* chore: ignore generated files in prettier

* chore: eslint ignore generated files

---------

Co-authored-by: Sammy Teillet <sammy.teillet@gmail.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Charles Bochet
2023-04-25 17:25:30 +02:00
committed by GitHub
parent a93c92c65c
commit ae7bad65ca
13 changed files with 13478 additions and 30 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@ import { peopleColumns, sortsAvailable } from './people-table';
import { mapPerson } from '../../interfaces/person.interface';
import { useCallback, useState } from 'react';
import {
OrderBy,
PeopleSelectedSortType,
defaultOrderBy,
reduceSortsToOrderBy,
usePeopleQuery,
} from '../../services/people';
@ -17,12 +17,6 @@ const StyledPeopleContainer = styled.div`
width: 100%;
`;
const defaultOrderBy: OrderBy[] = [
{
created_at: 'desc',
},
];
function People() {
const [, setSorts] = useState([] as Array<PeopleSelectedSortType>);
const [orderBy, setOrderBy] = useState(defaultOrderBy);

View File

@ -1,36 +1,32 @@
import { QueryResult, gql, useQuery } from '@apollo/client';
import { GraphqlQueryPerson } from '../../interfaces/person.interface';
import { SelectedSortType } from '../../components/table/table-header/SortAndFilterBar';
import { Order_By, People_Order_By } from '../../generated/graphql';
export type OrderByFields =
| keyof GraphqlQueryPerson
| 'fullname'
| 'company_name';
export type OrderBy = Partial<{
[key in keyof GraphqlQueryPerson]:
| 'asc'
| 'desc'
| { [key in string]: 'asc' | 'desc' };
}>;
export type OrderByFields = keyof People_Order_By | 'fullname' | 'company_name';
export type PeopleSelectedSortType = SelectedSortType<OrderByFields>;
const mapOrder = (order: 'asc' | 'desc'): Order_By => {
return order === 'asc' ? Order_By.Asc : Order_By.Desc;
};
export const reduceSortsToOrderBy = (
sorts: Array<PeopleSelectedSortType>,
): OrderBy[] => {
): People_Order_By[] => {
const mappedSorts = sorts.reduce((acc, sort) => {
const id = sort.id;
const order = mapOrder(sort.order);
if (id === 'fullname') {
acc['firstname'] = sort.order;
acc['lastname'] = sort.order;
acc['firstname'] = order;
acc['lastname'] = order;
} else if (id === 'company_name') {
acc['company'] = { company_name: sort.order };
acc['company'] = { company_name: order };
} else {
acc[id] = sort.order;
acc[id] = order;
}
return acc;
}, {} as OrderBy);
}, {} as People_Order_By);
return [mappedSorts];
};
@ -54,9 +50,15 @@ export const GET_PEOPLE = gql`
`;
export function usePeopleQuery(
orderBy: OrderBy[],
orderBy: People_Order_By[],
): QueryResult<{ people: GraphqlQueryPerson[] }> {
return useQuery<{ people: GraphqlQueryPerson[] }>(GET_PEOPLE, {
variables: { orderBy },
});
}
export const defaultOrderBy: People_Order_By[] = [
{
created_at: Order_By.Desc,
},
];