Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement new SnackBar design #5515

Merged
merged 10 commits into from
May 23, 2024
Prev Previous commit
Next Next commit
fix: fix typecheck
  • Loading branch information
thaisguigon committed May 22, 2024
commit 14e4c0898f6263579cb515105de1a1d57c23243d
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {

import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';

type CustomResolverQueryResult<
Expand Down Expand Up @@ -62,7 +63,7 @@ export const useCustomResolver = <
variables: queryVariables,
onError: (error) => {
enqueueSnackBar(error.message || `Error loading ${objectName}`, {
variant: 'error',
variant: SnackBarVariant.Error,
});
},
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { useCallback } from 'react';

import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { useEmailPasswordResetLinkMutation } from '~/generated/graphql';

Expand All @@ -12,7 +13,7 @@ export const useHandleResetPassword = () => {
return async () => {
if (!email) {
enqueueSnackBar('Invalid email', {
variant: 'error',
variant: SnackBarVariant.Error,
});
return;
}
Expand All @@ -24,16 +25,16 @@ export const useHandleResetPassword = () => {

if (data?.emailPasswordResetLink?.success === true) {
enqueueSnackBar('Password reset link has been sent to the email', {
variant: 'success',
variant: SnackBarVariant.Success,
});
} else {
enqueueSnackBar('There was some issue', {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
} catch (error) {
enqueueSnackBar((error as Error).message, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { Form } from '@/auth/sign-in-up/hooks/useSignInUpForm';
import { useReadCaptchaToken } from '@/captcha/hooks/useReadCaptchaToken';
import { useRequestFreshCaptchaToken } from '@/captcha/hooks/useRequestFreshCaptchaToken';
import { AppPath } from '@/types/AppPath';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation';

Expand Down Expand Up @@ -75,7 +76,7 @@ export const useSignInUp = (form: UseFormReturn<Form>) => {
},
onError: (error) => {
enqueueSnackBar(`${error.message}`, {
variant: 'error',
variant: SnackBarVariant.Error,
});
},
onCompleted: (data) => {
Expand Down Expand Up @@ -124,7 +125,7 @@ export const useSignInUp = (form: UseFormReturn<Form>) => {
navigateAfterSignInUp(currentWorkspace, currentWorkspaceMember);
} catch (err: any) {
enqueueSnackBar(err?.message, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React, { useCallback, useEffect } from 'react';

import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';

export const PromiseRejectionEffect = () => {
Expand All @@ -15,12 +16,12 @@ export const PromiseRejectionEffect = () => {
enqueueSnackBar(
`Error with custom object that cannot be found : ${event.reason}`,
{
variant: 'error',
variant: SnackBarVariant.Error,
},
);
} else {
enqueueSnackBar(`Error: ${event.reason}`, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { useMemo } from 'react';
import { useQuery } from '@apollo/client';

import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import {
FieldFilter,
Expand Down Expand Up @@ -43,7 +44,7 @@ export const useFindManyObjectMetadataItems = ({
enqueueSnackBar(
`Error during useFindManyObjectMetadataItems, ${error.message}`,
{
variant: 'error',
variant: SnackBarVariant.Error,
},
);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/
import { useFindDuplicateRecordsQuery } from '@/object-record/hooks/useFindDuplicatesRecordsQuery';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { getFindDuplicateRecordsQueryResponseField } from '@/object-record/utils/getFindDuplicateRecordsQueryResponseField';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { logError } from '~/utils/logError';

Expand Down Expand Up @@ -54,7 +55,7 @@ export const useFindDuplicateRecords = <T extends ObjectRecord = ObjectRecord>({
enqueueSnackBar(
`Error during useFindDuplicateRecords for "${objectMetadataItem.nameSingular}", ${error.message}`,
{
variant: 'error',
variant: SnackBarVariant.Error,
},
);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { RecordGqlOperationVariables } from '@/object-record/graphql/types/Recor
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { filterUniqueRecordEdgesByCursor } from '@/object-record/utils/filterUniqueRecordEdgesByCursor';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { isDefined } from '~/utils/isDefined';
import { logError } from '~/utils/logError';
Expand Down Expand Up @@ -115,7 +116,7 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
enqueueSnackBar(
`Error during useFindManyRecords for "${objectMetadataItem.namePlural}", ${error.message}`,
{
variant: 'error',
variant: SnackBarVariant.Error,
},
);
},
Expand Down Expand Up @@ -190,7 +191,7 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
enqueueSnackBar(
`Error during fetchMoreObjects for "${objectMetadataItem.namePlural}", ${error}`,
{
variant: 'error',
variant: SnackBarVariant.Error,
},
);
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { IconCopy } from 'twenty-ui';

import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { LightIconButton } from '@/ui/input/button/components/LightIconButton';

Expand All @@ -24,7 +25,7 @@ export const LightCopyIconButton = ({ copyText }: LightCopyIconButtonProps) => {
Icon={IconCopy}
onClick={() => {
enqueueSnackBar('Text copied to clipboard', {
variant: 'success',
variant: SnackBarVariant.Success,
icon: <IconCopy size={theme.icon.size.md} />,
duration: 2000,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { useCreateManyRecords } from '@/object-record/hooks/useCreateManyRecords
import { getSpreadSheetValidation } from '@/object-record/spreadsheet-import/util/getSpreadSheetValidation';
import { useSpreadsheetImport } from '@/spreadsheet-import/hooks/useSpreadsheetImport';
import { SpreadsheetOptions, Validation } from '@/spreadsheet-import/types';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { isDefined } from '~/utils/isDefined';
Expand Down Expand Up @@ -163,7 +164,7 @@ export const useSpreadsheetRecordImport = (objectNameSingular: string) => {
await createManyRecords(createInputs);
} catch (error: any) {
enqueueSnackBar(error?.message || 'Something went wrong', {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { IconCopy } from 'twenty-ui';

import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Button } from '@/ui/input/button/components/Button';
import { TextInput } from '@/ui/input/components/TextInput';
Expand Down Expand Up @@ -32,7 +33,7 @@ export const ApiKeyInput = ({ apiKey }: ApiKeyInputProps) => {
title="Copy"
onClick={() => {
enqueueSnackBar('Api Key copied to clipboard', {
variant: 'success',
variant: SnackBarVariant.Success,
icon: <IconCopy size={theme.icon.size.md} />,
duration: 2000,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { getConnectionDbName } from '@/settings/integrations/utils/getConnection
import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
import { SettingsPath } from '@/types/SettingsPath';
import { Info } from '@/ui/display/info/components/Info';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Breadcrumb } from '@/ui/navigation/bread-crumb/components/Breadcrumb';
import {
Expand Down Expand Up @@ -91,7 +92,7 @@ export const SettingsIntegrationEditDatabaseConnectionContent = ({
);
} catch (error) {
enqueueSnackBar((error as Error).message, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useRecoilValue } from 'recoil';
import { H2Title } from 'twenty-ui';

import { currentUserState } from '@/auth/states/currentUserState';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Button } from '@/ui/input/button/components/Button';
import { useEmailPasswordResetLinkMutation } from '~/generated/graphql';
Expand All @@ -16,7 +17,7 @@ export const ChangePassword = () => {
const handlePasswordResetClick = async () => {
if (!currentUser?.email) {
enqueueSnackBar('Invalid email', {
variant: 'error',
variant: SnackBarVariant.Error,
});
return;
}
Expand All @@ -29,16 +30,16 @@ export const ChangePassword = () => {
});
if (data?.emailPasswordResetLink?.success === true) {
enqueueSnackBar('Password reset link has been sent to the email', {
variant: 'success',
variant: SnackBarVariant.Success,
});
} else {
enqueueSnackBar('There was some issue', {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
} catch (error) {
enqueueSnackBar((error as Error).message, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { useRecoilState } from 'recoil';

import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Toggle } from '@/ui/input/components/Toggle';
import { useUpdateWorkspaceMutation } from '~/generated/graphql';
Expand Down Expand Up @@ -32,7 +33,7 @@ export const ToggleImpersonate = () => {
});
} catch (err: any) {
enqueueSnackBar(err?.message, {
variant: 'error',
variant: SnackBarVariant.Error,
});
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { setColumn } from '@/spreadsheet-import/utils/setColumn';
import { setIgnoreColumn } from '@/spreadsheet-import/utils/setIgnoreColumn';
import { setSubColumn } from '@/spreadsheet-import/utils/setSubColumn';
import { useDialogManager } from '@/ui/feedback/dialog-manager/hooks/useDialogManager';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Modal } from '@/ui/layout/modal/components/Modal';

Expand Down Expand Up @@ -170,7 +171,7 @@ export const MatchColumnsStep = <T extends string>({
} else if (index === existingFieldIndex) {
enqueueSnackBar('Columns cannot duplicate', {
title: 'Another column unselected',
variant: 'error',
variant: SnackBarVariant.Error,
});
return setColumn(column);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { RawData } from '@/spreadsheet-import/types';
import { exceedsMaxRecords } from '@/spreadsheet-import/utils/exceedsMaxRecords';
import { mapWorkbook } from '@/spreadsheet-import/utils/mapWorkbook';
import { CircularProgressBar } from '@/ui/feedback/progress-bar/components/CircularProgressBar';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Modal } from '@/ui/layout/modal/components/Modal';

Expand Down Expand Up @@ -80,7 +81,7 @@ export const UploadFlow = ({ nextStep }: UploadFlowProps) => {
(description: string) => {
enqueueSnackBar(description, {
title: 'Error',
variant: 'error',
variant: SnackBarVariant.Error,
});
},
[enqueueSnackBar],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import * as XLSX from 'xlsx-ugnis';

import { useSpreadsheetImportInternal } from '@/spreadsheet-import/hooks/useSpreadsheetImportInternal';
import { readFileAsync } from '@/spreadsheet-import/utils/readFilesAsync';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { MainButton } from '@/ui/input/button/components/MainButton';

Expand Down Expand Up @@ -114,7 +115,7 @@ export const DropZone = ({ onContinue, isLoading }: DropZoneProps) => {
fileRejections.forEach((fileRejection) => {
enqueueSnackBar(fileRejection.errors[0].message, {
title: `${fileRejection.file.name} upload rejected`,
variant: 'error',
variant: SnackBarVariant.Error,
});
});
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export type SnackBarProps = Pick<
icon?: ReactNode;
message?: string;
onCancel?: () => void;
onClose: () => void;
onClose?: () => void;
role?: 'alert' | 'status';
variant?: SnackBarVariant;
};
Expand Down Expand Up @@ -165,7 +165,9 @@ export const SnackBar = ({
{title}
<StyledActions>
{!!onCancel && <LightButton title="Cancel" onClick={onCancel} />}
<LightIconButton title="Close" Icon={IconX} onClick={onClose} />
{!!onClose && (
<LightIconButton title="Close" Icon={IconX} onClick={onClose} />
)}
</StyledActions>
</StyledHeader>
<StyledDescription>{children || message}</StyledDescription>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { css } from '@emotion/react';

import { ThemeType } from './ThemeLight';
import { ThemeType } from 'twenty-ui';

export const OVERLAY_BACKGROUND = (props: { theme: ThemeType }) => css`
backdrop-filter: blur(12px) saturate(200%) contrast(50%) brightness(130%);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { css } from '@emotion/react';

import { ThemeType } from './ThemeLight';
import { ThemeType } from 'twenty-ui';

export const TEXT_INPUT_STYLE = (props: { theme: ThemeType }) => css`
background-color: transparent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { IconCopy, IconLink } from 'twenty-ui';

import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Button } from '@/ui/input/button/components/Button';
import { TextInput } from '@/ui/input/components/TextInput';
Expand Down Expand Up @@ -40,7 +41,7 @@ export const WorkspaceInviteLink = ({
title="Copy link"
onClick={() => {
enqueueSnackBar('Link copied to clipboard', {
variant: 'success',
variant: SnackBarVariant.Success,
icon: <IconCopy size={theme.icon.size.md} />,
duration: 2000,
});
Expand Down
Loading