Companies table (#79)
* Add columns to companies: * account_owner_id * employees * address Add foreign key constraint companies_account_owner_id_fkey to auth.users.id * Add select permissions to: * account_owner_id * employees * address Add relationship between companies and auth.users. * Update Companies interface to include: * account_owner_id * employees * address Opportunity is expected to be replace by actual opportunity in a separate PR. * Add GetCompanies query * Add initial companies table * Update test to use mock apollo provider * Update to match changed company column names * Add company interface mapping tests * Test entire object * Add test for companies being rendered in table. * Add test for sorting reduce. * Fix prettier errors
This commit is contained in:
1
front/src/services/companies/index.ts
Normal file
1
front/src/services/companies/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './select';
|
||||
12
front/src/services/companies/select.test.ts
Normal file
12
front/src/services/companies/select.test.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { CompaniesSelectedSortType, reduceSortsToOrderBy } from './select';
|
||||
|
||||
describe('reduceSortsToOrderBy', () => {
|
||||
it('should return an array of objects with the id as key and the order as value', () => {
|
||||
const sorts = [
|
||||
{ key: 'name', label: 'name', order: 'asc' },
|
||||
{ key: 'domain_name', label: 'domain_name', order: 'desc' },
|
||||
] satisfies CompaniesSelectedSortType[];
|
||||
const result = reduceSortsToOrderBy(sorts);
|
||||
expect(result).toEqual([{ name: 'asc', domain_name: 'desc' }]);
|
||||
});
|
||||
});
|
||||
56
front/src/services/companies/select.ts
Normal file
56
front/src/services/companies/select.ts
Normal file
@ -0,0 +1,56 @@
|
||||
import { QueryResult, gql, useQuery } from '@apollo/client';
|
||||
import { Order_By, Companies_Order_By } from '../../generated/graphql';
|
||||
import { GraphqlQueryCompany } from '../../interfaces/company.interface';
|
||||
import { SelectedSortType } from '../../components/table/table-header/interface';
|
||||
|
||||
export type OrderByFields = keyof Companies_Order_By | 'domain_name' | 'name';
|
||||
|
||||
export type CompaniesSelectedSortType = SelectedSortType<OrderByFields>;
|
||||
|
||||
const mapOrder = (order: 'asc' | 'desc'): Order_By => {
|
||||
return order === 'asc' ? Order_By.Asc : Order_By.Desc;
|
||||
};
|
||||
|
||||
export const reduceSortsToOrderBy = (
|
||||
sorts: Array<CompaniesSelectedSortType>,
|
||||
): Companies_Order_By[] => {
|
||||
const mappedSorts = sorts.reduce((acc, sort) => {
|
||||
const id = sort.key;
|
||||
const order = mapOrder(sort.order);
|
||||
acc[id] = order;
|
||||
return acc;
|
||||
}, {} as Companies_Order_By);
|
||||
return [mappedSorts];
|
||||
};
|
||||
|
||||
export const GET_COMPANIES = gql`
|
||||
query GetCompanies($orderBy: [companies_order_by!]) {
|
||||
companies(order_by: $orderBy) {
|
||||
id
|
||||
domain_name
|
||||
name
|
||||
created_at
|
||||
address
|
||||
employees
|
||||
account_owner {
|
||||
id
|
||||
email
|
||||
displayName
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export function useCompaniesQuery(
|
||||
orderBy: Companies_Order_By[],
|
||||
): QueryResult<{ companies: GraphqlQueryCompany[] }> {
|
||||
return useQuery<{ companies: GraphqlQueryCompany[] }>(GET_COMPANIES, {
|
||||
variables: { orderBy },
|
||||
});
|
||||
}
|
||||
|
||||
export const defaultOrderBy: Companies_Order_By[] = [
|
||||
{
|
||||
name: Order_By.Asc,
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user