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:
Anders Borch
2023-04-27 12:46:43 +02:00
committed by GitHub
parent 42bf653e4a
commit d4b1b2f661
21 changed files with 450 additions and 12 deletions

View File

@ -0,0 +1 @@
export * from './select';

View 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' }]);
});
});

View 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,
},
];