* wip * wip * adding favorite works in the database * favorites are showing in the left drawer * update favoorite NavItem link * wip * adding favorite works * everything seems to work * fix delete bug * fix update favorite position * update Favorite type * Fix --------- Co-authored-by: Charles Bochet <charles@twenty.com>
129 lines
5.1 KiB
TypeScript
129 lines
5.1 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useNavigate, useParams } from 'react-router-dom';
|
|
|
|
import { ActivityTargetableEntityType } from '@/activities/types/ActivityTargetableEntity';
|
|
import { CompanyTeam } from '@/companies/components/CompanyTeam';
|
|
import { useCompanyQuery } from '@/companies/hooks/useCompanyQuery';
|
|
import { useFavorites } from '@/favorites/hooks/useFavorites';
|
|
import { AppPath } from '@/types/AppPath';
|
|
import { IconBuildingSkyscraper } from '@/ui/display/icon';
|
|
import { PageBody } from '@/ui/layout/page/PageBody';
|
|
import { PageContainer } from '@/ui/layout/page/PageContainer';
|
|
import { PageFavoriteButton } from '@/ui/layout/page/PageFavoriteButton';
|
|
import { PageHeader } from '@/ui/layout/page/PageHeader';
|
|
import { ShowPageAddButton } from '@/ui/layout/show-page/components/ShowPageAddButton';
|
|
import { ShowPageLeftContainer } from '@/ui/layout/show-page/components/ShowPageLeftContainer';
|
|
import { ShowPageRightContainer } from '@/ui/layout/show-page/components/ShowPageRightContainer';
|
|
import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSummaryCard';
|
|
import { ShowPageRecoilScopeContext } from '@/ui/layout/states/ShowPageRecoilScopeContext';
|
|
import { FieldContext } from '@/ui/object/field/contexts/FieldContext';
|
|
import { RecordInlineCell } from '@/ui/object/record-inline-cell/components/RecordInlineCell';
|
|
import { PropertyBox } from '@/ui/object/record-inline-cell/property-box/components/PropertyBox';
|
|
import { InlineCellHotkeyScope } from '@/ui/object/record-inline-cell/types/InlineCellHotkeyScope';
|
|
import { PageTitle } from '@/ui/utilities/page-title/PageTitle';
|
|
import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope';
|
|
import { useUpdateOneCompanyMutation } from '~/generated/graphql';
|
|
import { getLogoUrlFromDomainName } from '~/utils';
|
|
|
|
import { CompanyNameEditableField } from '../../modules/companies/editable-field/components/CompanyNameEditableField';
|
|
import { ShowPageContainer } from '../../modules/ui/layout/page/ShowPageContainer';
|
|
|
|
import { companyShowFieldDefinitions } from './constants/companyShowFieldDefinitions';
|
|
|
|
export const CompanyShow = () => {
|
|
const companyId = useParams().companyId ?? '';
|
|
const { createFavorite, deleteFavorite } = useFavorites();
|
|
const navigate = useNavigate();
|
|
const { data, loading } = useCompanyQuery(companyId);
|
|
const company = data?.findUniqueCompany;
|
|
|
|
useEffect(() => {
|
|
if (!loading && !company) {
|
|
navigate(AppPath.NotFound);
|
|
}
|
|
}, [loading, company, navigate]);
|
|
|
|
if (!company) return <></>;
|
|
|
|
const isFavorite =
|
|
company.Favorite && company.Favorite?.length > 0 ? true : false;
|
|
|
|
const handleFavoriteButtonClick = async () => {
|
|
if (isFavorite) deleteFavorite(companyId);
|
|
else createFavorite('company', companyId);
|
|
};
|
|
|
|
return (
|
|
<PageContainer>
|
|
<PageTitle title={company.name || 'No Name'} />
|
|
<PageHeader
|
|
title={company.name ?? ''}
|
|
hasBackButton
|
|
Icon={IconBuildingSkyscraper}
|
|
>
|
|
<PageFavoriteButton
|
|
isFavorite={isFavorite}
|
|
onClick={handleFavoriteButtonClick}
|
|
/>
|
|
<ShowPageAddButton
|
|
key="add"
|
|
entity={{
|
|
id: company.id,
|
|
type: ActivityTargetableEntityType.Company,
|
|
}}
|
|
/>
|
|
</PageHeader>
|
|
<PageBody>
|
|
<RecoilScope CustomRecoilScopeContext={ShowPageRecoilScopeContext}>
|
|
<ShowPageContainer>
|
|
<ShowPageLeftContainer>
|
|
<ShowPageSummaryCard
|
|
id={company.id}
|
|
logoOrAvatar={getLogoUrlFromDomainName(
|
|
company.domainName ?? '',
|
|
)}
|
|
title={company.name ?? 'No name'}
|
|
date={company.createdAt ?? ''}
|
|
renderTitleEditComponent={() => (
|
|
<CompanyNameEditableField company={company} />
|
|
)}
|
|
avatarType="squared"
|
|
/>
|
|
<PropertyBox extraPadding={true}>
|
|
{companyShowFieldDefinitions.map((fieldDefinition) => {
|
|
return (
|
|
<FieldContext.Provider
|
|
key={company.id + fieldDefinition.fieldMetadataId}
|
|
value={{
|
|
entityId: company.id,
|
|
recoilScopeId:
|
|
company.id + fieldDefinition.fieldMetadataId,
|
|
fieldDefinition,
|
|
useUpdateEntityMutation: useUpdateOneCompanyMutation,
|
|
hotkeyScope: InlineCellHotkeyScope.InlineCell,
|
|
}}
|
|
>
|
|
<RecordInlineCell />
|
|
</FieldContext.Provider>
|
|
);
|
|
})}
|
|
</PropertyBox>
|
|
<CompanyTeam company={company}></CompanyTeam>
|
|
</ShowPageLeftContainer>
|
|
<ShowPageRightContainer
|
|
entity={{
|
|
id: company.id,
|
|
type: ActivityTargetableEntityType.Company,
|
|
}}
|
|
timeline
|
|
tasks
|
|
notes
|
|
emails
|
|
/>
|
|
</ShowPageContainer>
|
|
</RecoilScope>
|
|
</PageBody>
|
|
</PageContainer>
|
|
);
|
|
};
|