diff --git a/services/web/app/src/Features/Project/ProjectListController.mjs b/services/web/app/src/Features/Project/ProjectListController.mjs index 2b29a0e6d9..bb7bf0b2c9 100644 --- a/services/web/app/src/Features/Project/ProjectListController.mjs +++ b/services/web/app/src/Features/Project/ProjectListController.mjs @@ -28,7 +28,6 @@ import SplitTestSessionHandler from '../SplitTests/SplitTestSessionHandler.js' import TutorialHandler from '../Tutorial/TutorialHandler.js' import SubscriptionHelper from '../Subscription/SubscriptionHelper.js' import PermissionsManager from '../Authorization/PermissionsManager.js' -import SubscriptionLocator from '../Subscription/SubscriptionLocator.js' import AnalyticsManager from '../Analytics/AnalyticsManager.js' /** @@ -403,18 +402,6 @@ async function projectListPage(req, res, next) { logger.error({ err: error }, 'Failed to get individual subscription') } - const aiAssistNotificationAssignment = - await SplitTestHandler.promises.getAssignment( - req, - res, - 'ai-assist-notification' - ) - - let showAiAssistNotification = false - if (aiAssistNotificationAssignment.variant !== 'default') { - showAiAssistNotification = await _showAiAssistNotification(user) - } - const affiliations = userAffiliations || [] const inEnterpriseCommons = affiliations.some( affiliation => affiliation.institution?.enterpriseCommons @@ -488,7 +475,6 @@ async function projectListPage(req, res, next) { hasIndividualPaidSubscription, userRestrictions: Array.from(req.userRestrictions || []), customerIoEnabled, - showAiAssistNotification, aiBlocked, hasAiAssist, }) @@ -804,33 +790,6 @@ async function _canUseAIAssist(user) { ]) } -async function _showAiAssistNotification(user) { - // Check if the assistant has been manually disabled by the user - if (user.aiErrorAssistant?.enabled === false) { - return false - } - - // Check if the user can use AI features (policy check) - const canUseAi = await PermissionsManager.promises.checkUserPermissions( - user, - ['use-ai'] - ) - if (!canUseAi) { - return false - } - - // Check if the user has a subscription with manually collected group admins (#22822) - const subscription = await SubscriptionLocator.promises.getUsersSubscription( - user._id - ) - if (subscription?.collectionMethod === 'manual') { - return false - } - - const userHasAiAssist = await _userHasAIAssist(user) - return !userHasAiAssist -} - export default { projectListPage: expressify(projectListPage), getProjectsJson: expressify(getProjectsJson), diff --git a/services/web/app/views/project/list-react.pug b/services/web/app/views/project/list-react.pug index 47bff344b6..74eb8ebc72 100644 --- a/services/web/app/views/project/list-react.pug +++ b/services/web/app/views/project/list-react.pug @@ -87,11 +87,6 @@ block append meta data-type='string' content=usGovBannerVariant ) - meta( - name='ol-showAiAssistNotification' - data-type='boolean' - content=showAiAssistNotification - ) block content #project-list-root diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index c7374f8b74..b1bffb3448 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -428,8 +428,6 @@ "disconnected": "", "discount": "", "discount_of": "", - "discover_research_writing_toolkit": "", - "discover_research_writing_toolkit_description": "", "discover_the_fastest_way_to_search_and_cite": "", "display": "", "display_deleted_user": "", @@ -2134,13 +2132,9 @@ "work_in_vim_or_emacs_emulation_mode": "", "work_offline": "", "work_offline_pull_to_overleaf": "", - "work_smarter_with_ai_assist": "", - "work_smarter_with_ai_assist_description": "", "work_with_non_overleaf_users": "", "work_with_other_github_users": "", "write_faster_smarter_with_overleaf_and_writefull_ai_tools": "", - "write_smarter_right_now": "", - "write_smarter_right_now_description": "", "writefull": "", "writefull_loading_error_body": "", "writefull_loading_error_title": "", diff --git a/services/web/frontend/js/features/project-list/components/notifications/ai-assist-banner.tsx b/services/web/frontend/js/features/project-list/components/notifications/ai-assist-banner.tsx deleted file mode 100644 index dd6d0a0e97..0000000000 --- a/services/web/frontend/js/features/project-list/components/notifications/ai-assist-banner.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { memo, useCallback, useEffect } from 'react' -import Notification from './notification' -import { useTranslation } from 'react-i18next' -import OLButton from '@/features/ui/components/ol/ol-button' -import { sendMB } from '@/infrastructure/event-tracking' -import sparkle from '@/shared/svgs/sparkle-2-stars.svg' -import { useSplitTest } from '@/shared/context/split-test-context' -import { useProjectListContext } from '../../context/project-list-context' -import getMeta from '@/utils/meta' -import usePersistedState from '@/shared/hooks/use-persisted-state' - -function AiAssistBanner() { - const { title, description, cta } = useTitleDescription() - const { totalProjectsCount } = useProjectListContext() - const [dismissed, setDismissed] = usePersistedState( - 'ai-assist-notification-banner-dismissed', - false - ) - const { variant } = useSplitTest('ai-assist-notification') - const { t } = useTranslation() - - useEffect(() => { - if (!dismissed) { - sendMB('promo-prompt', { - location: 'dashboard-banner', - name: 'ai-assist', - variant, - }) - } - }, [dismissed, variant]) - - const handleClose = useCallback(() => { - sendMB('promo-dismiss', { - location: 'dashboard-banner', - name: 'ai-assist', - variant, - }) - setDismissed(true) - }, [setDismissed, variant]) - - const handleUpgradeClick = useCallback(() => { - sendMB('promo-click', { - location: 'dashboard-banner', - name: 'ai-assist', - variant, - type: 'click-upgrade', - }) - }, [variant]) - - const handleLearnMoreClick = useCallback(() => { - sendMB('promo-click', { - location: 'dashboard-banner', - name: 'ai-assist', - type: 'click-learn-more', - variant, - }) - }, [variant]) - - if ( - !title || - dismissed || - totalProjectsCount === 0 || - !getMeta('ol-showAiAssistNotification') - ) { - return null - } - - return ( - } - iconPlacement="center" - title={title} - onDismiss={handleClose} - content={ -
- {description}{' '} - - {t('learn_more')} - - . -
- } - action={ -