Merge pull request #20598 from overleaf/jdt-ae-dropbox-limit-notif

Add go to project for 2000 file limit notification

GitOrigin-RevId: dfd69773ebd5c2160dfce75f56b8fa1e93792c23
This commit is contained in:
Jimmy Domagala-Tang 2024-10-08 13:34:46 -04:00 committed by Copybot
parent 874c0211d7
commit c6aec5c5c0
7 changed files with 21 additions and 16 deletions

View file

@ -198,12 +198,13 @@ function ipMatcherAffiliation(userId) {
function tpdsFileLimit(userId) { function tpdsFileLimit(userId) {
return { return {
key: `tpdsFileLimit-${userId}`, key: `tpdsFileLimit-${userId}`,
create(projectName, callback) { create(projectName, projectId, callback) {
if (callback == null) { if (callback == null) {
callback = function () {} callback = function () {}
} }
const messageOpts = { const messageOpts = {
projectName, projectName,
projectId,
} }
NotificationsHandler.createNotification( NotificationsHandler.createNotification(
userId, userId,

View file

@ -62,7 +62,7 @@ async function mergeUpdate(req, res) {
{ err, userId, filePath }, { err, userId, filePath },
'tpds trying to append to project over file limit' 'tpds trying to append to project over file limit'
) )
NotificationsBuilder.tpdsFileLimit(userId).create(projectName) NotificationsBuilder.tpdsFileLimit(userId).create(projectName, projectId)
return res.sendStatus(400) return res.sendStatus(400)
} else { } else {
throw err throw err

View file

@ -201,19 +201,23 @@ function CommonNotification({ notification }: CommonNotificationProps) {
<Notification <Notification
type="error" type="error"
onDismiss={() => id && handleDismiss(id)} onDismiss={() => id && handleDismiss(id)}
title={`${notification?.messageOpts?.projectName || 'A project'} exceeds the 2000 file limit`}
content={ content={
<> <>
Error: Your project {notification.messageOpts.projectName} has You can't add more files to the project or sync it with any
gone over the 2000 file limit using an integration (e.g. Dropbox integrations until you reduce the number of files.
or GitHub) <br />
Please decrease the size of your project to prevent further
errors.
</> </>
} }
action={ action={
<OLButton variant="secondary" href="/user/settings"> notification.messageOpts.projectId ? (
Account Settings <OLButton
</OLButton> variant="secondary"
onClick={() => id && handleDismiss(id)}
href={`/project/${notification.messageOpts.projectId}`}
>
Open project
</OLButton>
) : undefined
} }
/> />
) : templateKey === 'notification_dropbox_duplicate_project_names' ? ( ) : templateKey === 'notification_dropbox_duplicate_project_names' ? (

View file

@ -3,7 +3,7 @@ import NewNotification from '@/shared/components/notification'
type NotificationProps = Pick< type NotificationProps = Pick<
React.ComponentProps<typeof NewNotification>, React.ComponentProps<typeof NewNotification>,
'type' | 'action' | 'content' | 'onDismiss' | 'className' 'type' | 'action' | 'content' | 'onDismiss' | 'className' | 'title'
> >
function Notification({ className, ...props }: NotificationProps) { function Notification({ className, ...props }: NotificationProps) {

View file

@ -295,14 +295,12 @@ describe('<UserNotifications />', function () {
screen.getByRole('alert') screen.getByRole('alert')
screen.getByText(/file limit/i) screen.getByText(/file limit/i)
screen.getByText( screen.getByText(/You can't add more files to the project or sync it/i)
/please decrease the size of your project to prevent further errors/i
)
const accountSettings = screen.getByRole('link', { const accountSettings = screen.getByRole('link', {
name: /account settings/i, name: /Open project/i,
}) })
expect(accountSettings.getAttribute('href')).to.equal('/user/settings') expect(accountSettings.getAttribute('href')).to.equal('/project/123')
const closeBtn = screen.getByRole('button', { name: /close/i }) const closeBtn = screen.getByRole('button', { name: /close/i })
fireEvent.click(closeBtn) fireEvent.click(closeBtn)

View file

@ -36,6 +36,7 @@ export const notificationIPMatchedAffiliation = {
export const notificationTPDSFileLimit = { export const notificationTPDSFileLimit = {
messageOpts: { messageOpts: {
projectName: 'Abc Project', projectName: 'Abc Project',
projectId: '123',
}, },
} as DeepReadonly<NotificationTPDSFileLimit> } as DeepReadonly<NotificationTPDSFileLimit>

View file

@ -42,6 +42,7 @@ export interface NotificationTPDSFileLimit extends NotificationBase {
templateKey: Extract<TemplateKey, 'notification_tpds_file_limit'> templateKey: Extract<TemplateKey, 'notification_tpds_file_limit'>
messageOpts: { messageOpts: {
projectName: string projectName: string
projectId?: string
} }
} }