* Added Overview page * Revised Getting Started page * Minor revision * Edited readme, minor modifications to docs * Removed sweep.yaml, .devcontainer, .ergomake * Moved security.md to .github, added contributing.md * changes as per code review * updated contributing.md * fixed broken links & added missing links in doc, improved structure * fixed link in wsl setup * fixed server link, added https cloning in yarn-setup * removed package-lock.json * added doc card, admonitions * removed underline from nav buttons * refactoring modules/ui * refactoring modules/ui * Change folder case * Fix theme location * Fix case 2 * Fix storybook --------- Co-authored-by: Nimra Ahmed <nimra1408@gmail.com> Co-authored-by: Nimra Ahmed <50912134+nimraahmed@users.noreply.github.com>
121 lines
4.5 KiB
TypeScript
121 lines
4.5 KiB
TypeScript
import { companiesAvailableColumnDefinitions } from '@/companies/constants/companiesAvailableColumnDefinitions';
|
|
import { getCompaniesOptimisticEffectDefinition } from '@/companies/graphql/optimistic-effect-definitions/getCompaniesOptimisticEffectDefinition';
|
|
import { useCompanyTableActionBarEntries } from '@/companies/hooks/useCompanyTableActionBarEntries';
|
|
import { useCompanyTableContextMenuEntries } from '@/companies/hooks/useCompanyTableContextMenuEntries';
|
|
import { useSpreadsheetCompanyImport } from '@/companies/hooks/useSpreadsheetCompanyImport';
|
|
import { DataTable } from '@/ui/data/data-table/components/DataTable';
|
|
import { DataTableEffect } from '@/ui/data/data-table/components/DataTableEffect';
|
|
import { TableContext } from '@/ui/data/data-table/contexts/TableContext';
|
|
import { useUpsertDataTableItem } from '@/ui/data/data-table/hooks/useUpsertDataTableItem';
|
|
import { TableRecoilScopeContext } from '@/ui/data/data-table/states/recoil-scope-contexts/TableRecoilScopeContext';
|
|
import { ViewBarContext } from '@/ui/data/view-bar/contexts/ViewBarContext';
|
|
import { filtersWhereScopedSelector } from '@/ui/data/view-bar/states/selectors/filtersWhereScopedSelector';
|
|
import { sortsOrderByScopedSelector } from '@/ui/data/view-bar/states/selectors/sortsOrderByScopedSelector';
|
|
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
|
|
import { useTableViews } from '@/views/hooks/useTableViews';
|
|
import {
|
|
UpdateOneCompanyMutationVariables,
|
|
useGetCompaniesQuery,
|
|
useGetWorkspaceMembersLazyQuery,
|
|
useUpdateOneCompanyMutation,
|
|
} from '~/generated/graphql';
|
|
import { companiesFilters } from '~/pages/companies/companies-filters';
|
|
import { companyAvailableSorts } from '~/pages/companies/companies-sorts';
|
|
|
|
export const CompanyTable = () => {
|
|
const sortsOrderBy = useRecoilScopedValue(
|
|
sortsOrderByScopedSelector,
|
|
TableRecoilScopeContext,
|
|
);
|
|
const filtersWhere = useRecoilScopedValue(
|
|
filtersWhereScopedSelector,
|
|
TableRecoilScopeContext,
|
|
);
|
|
|
|
const [updateEntityMutation] = useUpdateOneCompanyMutation();
|
|
const upsertDataTableItem = useUpsertDataTableItem();
|
|
|
|
const [getWorkspaceMember] = useGetWorkspaceMembersLazyQuery();
|
|
const {
|
|
createView,
|
|
deleteView,
|
|
persistColumns,
|
|
submitCurrentView,
|
|
updateView,
|
|
} = useTableViews({
|
|
objectId: 'company',
|
|
columnDefinitions: companiesAvailableColumnDefinitions,
|
|
});
|
|
|
|
const { openCompanySpreadsheetImport } = useSpreadsheetCompanyImport();
|
|
|
|
const { setContextMenuEntries } = useCompanyTableContextMenuEntries();
|
|
const { setActionBarEntries } = useCompanyTableActionBarEntries();
|
|
|
|
const updateCompany = async (
|
|
variables: UpdateOneCompanyMutationVariables,
|
|
) => {
|
|
if (variables.data.accountOwner?.connect?.id) {
|
|
const workspaceMemberAccountOwner = (
|
|
await getWorkspaceMember({
|
|
variables: {
|
|
where: {
|
|
userId: { equals: variables.data.accountOwner.connect?.id },
|
|
},
|
|
},
|
|
})
|
|
).data?.workspaceMembers?.[0];
|
|
variables.data.workspaceMemberAccountOwner = {
|
|
connect: { id: workspaceMemberAccountOwner?.id },
|
|
};
|
|
}
|
|
|
|
updateEntityMutation({
|
|
variables: variables,
|
|
onCompleted: (data) => {
|
|
if (!data.updateOneCompany) {
|
|
return;
|
|
}
|
|
upsertDataTableItem(data.updateOneCompany);
|
|
},
|
|
});
|
|
};
|
|
|
|
return (
|
|
<TableContext.Provider value={{ onColumnsChange: persistColumns }}>
|
|
<DataTableEffect
|
|
getRequestResultKey="companies"
|
|
useGetRequest={useGetCompaniesQuery}
|
|
getRequestOptimisticEffectDefinition={
|
|
getCompaniesOptimisticEffectDefinition
|
|
}
|
|
orderBy={sortsOrderBy}
|
|
whereFilters={filtersWhere}
|
|
filterDefinitionArray={companiesFilters}
|
|
sortDefinitionArray={companyAvailableSorts}
|
|
setContextMenuEntries={setContextMenuEntries}
|
|
setActionBarEntries={setActionBarEntries}
|
|
/>
|
|
<ViewBarContext.Provider
|
|
value={{
|
|
defaultViewName: 'All Companies',
|
|
onCurrentViewSubmit: submitCurrentView,
|
|
onViewCreate: createView,
|
|
onViewEdit: updateView,
|
|
onViewRemove: deleteView,
|
|
onImport: openCompanySpreadsheetImport,
|
|
ViewBarRecoilScopeContext: TableRecoilScopeContext,
|
|
}}
|
|
>
|
|
<DataTable
|
|
updateEntityMutation={({
|
|
variables,
|
|
}: {
|
|
variables: UpdateOneCompanyMutationVariables;
|
|
}) => updateCompany(variables)}
|
|
/>
|
|
</ViewBarContext.Provider>
|
|
</TableContext.Provider>
|
|
);
|
|
};
|