feat: add Calendar Settings section to Settings/Accounts/Calendars page (#4104)

* feat: add Calendar Settings section to Settings/Accounts/Calendars page

Closes #4060

* refactor: rename components
This commit is contained in:
Thaïs
2024-02-21 13:18:57 -03:00
committed by GitHub
parent 15510c9fbe
commit 5a8a9cd029
8 changed files with 56 additions and 17 deletions

View File

@ -6,7 +6,7 @@ export enum CoreObjectNameSingular {
Blocklist = 'blocklist', Blocklist = 'blocklist',
Comment = 'comment', Comment = 'comment',
Company = 'company', Company = 'company',
ConenctedAccount = 'conenctedAccount', ConnectedAccount = 'connectedAccount',
Favorite = 'favorite', Favorite = 'favorite',
Message = 'message', Message = 'message',
MessageChannel = 'messageChannel', MessageChannel = 'messageChannel',

View File

@ -0,0 +1,38 @@
import { useRecoilValue } from 'recoil';
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { SettingsAccountsListEmptyStateCard } from '@/settings/accounts/components/SettingsAccountsListEmptyStateCard';
import { SettingsAccountsListSkeletonCard } from '@/settings/accounts/components/SettingsAccountsListSkeletonCard';
import { H2Title } from '@/ui/display/typography/components/H2Title';
import { Section } from '@/ui/layout/section/components/Section';
export const SettingsAccountsCalendarSettingsSection = () => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { records: accounts, loading } = useFindManyRecords<ConnectedAccount>({
objectNameSingular: CoreObjectNameSingular.ConnectedAccount,
filter: {
accountOwnerId: {
eq: currentWorkspaceMember?.id,
},
},
});
return (
<Section>
<H2Title
title="Calendar settings"
description="Sync your calendars and set your preferences"
/>
{loading ? (
<SettingsAccountsListSkeletonCard />
) : !accounts.length ? (
<SettingsAccountsListEmptyStateCard />
) : null}
</Section>
);
};

View File

@ -4,7 +4,7 @@ import { H2Title } from '@/ui/display/typography/components/H2Title';
import { Section } from '@/ui/layout/section/components/Section'; import { Section } from '@/ui/layout/section/components/Section';
import { SettingsAccountsCard } from './SettingsAccountsCard'; import { SettingsAccountsCard } from './SettingsAccountsCard';
import { SettingsAccountsEmptyStateCard } from './SettingsAccountsEmptyStateCard'; import { SettingsAccountsListEmptyStateCard } from './SettingsAccountsListEmptyStateCard';
export const SettingsAccountsConnectedAccountsSection = ({ export const SettingsAccountsConnectedAccountsSection = ({
accounts, accounts,
@ -30,7 +30,7 @@ export const SettingsAccountsConnectedAccountsSection = ({
onAccountRemove={handleAccountRemove} onAccountRemove={handleAccountRemove}
/> />
) : ( ) : (
<SettingsAccountsEmptyStateCard /> <SettingsAccountsListEmptyStateCard />
)} )}
</Section> </Section>
); );

View File

@ -3,20 +3,20 @@ import { useRecoilValue } from 'recoil';
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount'; import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
import { MessageChannel } from '@/accounts/types/MessageChannel'; import { MessageChannel } from '@/accounts/types/MessageChannel';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { SettingsAccountEmailsSkeletonCard } from '@/settings/accounts/components/SettingsAccountEmailsSkeletonCard'; import { SettingsAccountsEmailsCard } from '@/settings/accounts/components/SettingsAccountsEmailsCard';
import { SettingsAccountsListEmptyStateCard } from '@/settings/accounts/components/SettingsAccountsListEmptyStateCard';
import { SettingsAccountsListSkeletonCard } from '@/settings/accounts/components/SettingsAccountsListSkeletonCard';
import { H2Title } from '@/ui/display/typography/components/H2Title'; import { H2Title } from '@/ui/display/typography/components/H2Title';
import { Section } from '@/ui/layout/section/components/Section'; import { Section } from '@/ui/layout/section/components/Section';
import { SettingsAccountsEmailsCard } from './SettingsAccountsEmailsCard';
import { SettingsAccountsEmptyStateCard } from './SettingsAccountsEmptyStateCard';
export const SettingsAccountsEmailsSyncSection = () => { export const SettingsAccountsEmailsSyncSection = () => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState); const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { records: accounts, loading: accountsLoading } = const { records: accounts, loading: accountsLoading } =
useFindManyRecords<ConnectedAccount>({ useFindManyRecords<ConnectedAccount>({
objectNameSingular: 'connectedAccount', objectNameSingular: CoreObjectNameSingular.ConnectedAccount,
filter: { filter: {
accountOwnerId: { accountOwnerId: {
eq: currentWorkspaceMember?.id, eq: currentWorkspaceMember?.id,
@ -51,13 +51,13 @@ export const SettingsAccountsEmailsSyncSection = () => {
/> />
{loading ? ( {loading ? (
<SettingsAccountEmailsSkeletonCard /> <SettingsAccountsListSkeletonCard />
) : accounts.length ? ( ) : accounts.length ? (
<SettingsAccountsEmailsCard <SettingsAccountsEmailsCard
messageChannels={messageChannelsWithSyncedEmails} messageChannels={messageChannelsWithSyncedEmails}
/> />
) : ( ) : (
<SettingsAccountsEmptyStateCard /> <SettingsAccountsListEmptyStateCard />
)} )}
</Section> </Section>
); );

View File

@ -20,13 +20,13 @@ const StyledBody = styled(CardContent)`
justify-content: center; justify-content: center;
`; `;
type SettingsAccountsEmptyStateCardProps = { type SettingsAccountsListEmptyStateCardProps = {
label?: string; label?: string;
}; };
export const SettingsAccountsEmptyStateCard = ({ export const SettingsAccountsListEmptyStateCard = ({
label, label,
}: SettingsAccountsEmptyStateCardProps) => { }: SettingsAccountsListEmptyStateCardProps) => {
const [generateTransientToken] = useGenerateTransientTokenMutation(); const [generateTransientToken] = useGenerateTransientTokenMutation();
const handleGmailLogin = useCallback(async () => { const handleGmailLogin = useCallback(async () => {

View File

@ -7,4 +7,4 @@ const StyledCard = styled(Card)`
height: 40px; height: 40px;
`; `;
export const SettingsAccountEmailsSkeletonCard = () => <StyledCard />; export { StyledCard as SettingsAccountsListSkeletonCard };

View File

@ -1,8 +1,7 @@
import { SettingsAccountsListEmptyStateCard } from '@/settings/accounts/components/SettingsAccountsListEmptyStateCard';
import { H2Title } from '@/ui/display/typography/components/H2Title'; import { H2Title } from '@/ui/display/typography/components/H2Title';
import { Section } from '@/ui/layout/section/components/Section'; import { Section } from '@/ui/layout/section/components/Section';
import { SettingsAccountsEmptyStateCard } from './SettingsAccountsEmptyStateCard';
export const SettingsNewAccountSection = () => { export const SettingsNewAccountSection = () => {
return ( return (
<Section> <Section>
@ -10,7 +9,7 @@ export const SettingsNewAccountSection = () => {
title="New account" title="New account"
description="Connect a new account to your workspace" description="Connect a new account to your workspace"
/> />
<SettingsAccountsEmptyStateCard label="Connect a Google account" /> <SettingsAccountsListEmptyStateCard label="Connect a Google account" />
</Section> </Section>
); );
}; };

View File

@ -1,3 +1,4 @@
import { SettingsAccountsCalendarSettingsSection } from '@/settings/accounts/components/SettingsAccountsCalendarSettingsSection';
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath'; import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
import { SettingsPath } from '@/types/SettingsPath'; import { SettingsPath } from '@/types/SettingsPath';
@ -17,6 +18,7 @@ export const SettingsAccountsCalendars = () => (
{ children: 'Calendars' }, { children: 'Calendars' },
]} ]}
/> />
<SettingsAccountsCalendarSettingsSection />
</SettingsPageContainer> </SettingsPageContainer>
</SubMenuTopBarContainer> </SubMenuTopBarContainer>
); );