mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #3832 from overleaf/ae-modal-beta
* Add BetaBadge component * Add beta_badge_tooltip translation * Add beta badge to modal headers * Enable Share and Add Files modals for beta users GitOrigin-RevId: df0933830a0745c0ecf57db34f2cb75104a570cd
This commit is contained in:
parent
a2be1f8981
commit
be804b5fc1
6 changed files with 62 additions and 9 deletions
|
@ -744,10 +744,10 @@ const ProjectController = {
|
||||||
)
|
)
|
||||||
const wantsOldFileTreeUI =
|
const wantsOldFileTreeUI =
|
||||||
req.query && req.query.new_file_tree_ui === 'false'
|
req.query && req.query.new_file_tree_ui === 'false'
|
||||||
const wantsNewShareModalUI =
|
const wantsOldShareModalUI =
|
||||||
req.query && req.query.new_share_modal_ui === 'true'
|
req.query && req.query.new_share_modal_ui === 'false'
|
||||||
const wantsNewAddFilesModalUI =
|
const wantsOldAddFilesModalUI =
|
||||||
req.query && req.query.new_add_files_modal_ui === 'true'
|
req.query && req.query.new_add_files_modal_ui === 'false'
|
||||||
|
|
||||||
AuthorizationManager.getPrivilegeLevelForProject(
|
AuthorizationManager.getPrivilegeLevelForProject(
|
||||||
userId,
|
userId,
|
||||||
|
@ -865,8 +865,9 @@ const ProjectController = {
|
||||||
showNewNavigationUI:
|
showNewNavigationUI:
|
||||||
req.query && req.query.new_navigation_ui === 'true',
|
req.query && req.query.new_navigation_ui === 'true',
|
||||||
showReactFileTree: !wantsOldFileTreeUI,
|
showReactFileTree: !wantsOldFileTreeUI,
|
||||||
showReactShareModal: wantsNewShareModalUI,
|
showReactShareModal: user.betaProgram && !wantsOldShareModalUI,
|
||||||
showReactAddFilesModal: wantsNewAddFilesModalUI
|
showReactAddFilesModal:
|
||||||
|
user.betaProgram && !wantsOldAddFilesModalUI
|
||||||
})
|
})
|
||||||
timer.done()
|
timer.done()
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"autocomplete": "",
|
"autocomplete": "",
|
||||||
"autocomplete_references": "",
|
"autocomplete_references": "",
|
||||||
"back_to_your_projects": "",
|
"back_to_your_projects": "",
|
||||||
|
"beta_badge_tooltip": "",
|
||||||
"blocked_filename": "",
|
"blocked_filename": "",
|
||||||
"can_edit": "",
|
"can_edit": "",
|
||||||
"cancel": "",
|
"cancel": "",
|
||||||
|
@ -201,4 +202,4 @@
|
||||||
"zotero_reference_loading_error_expired": "",
|
"zotero_reference_loading_error_expired": "",
|
||||||
"zotero_reference_loading_error_forbidden": "",
|
"zotero_reference_loading_error_forbidden": "",
|
||||||
"zotero_sync_description": ""
|
"zotero_sync_description": ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,34 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
import { useTranslation } from 'react-i18next'
|
||||||
import { Modal } from 'react-bootstrap'
|
import { Modal } from 'react-bootstrap'
|
||||||
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
|
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
|
||||||
import FileTreeCreateFormProvider from '../../contexts/file-tree-create-form'
|
import FileTreeCreateFormProvider from '../../contexts/file-tree-create-form'
|
||||||
import FileTreeModalCreateFileBody from '../file-tree-create/file-tree-modal-create-file-body'
|
import FileTreeModalCreateFileBody from '../file-tree-create/file-tree-modal-create-file-body'
|
||||||
import FileTreeModalCreateFileFooter from '../file-tree-create/file-tree-modal-create-file-footer'
|
import FileTreeModalCreateFileFooter from '../file-tree-create/file-tree-modal-create-file-footer'
|
||||||
import AccessibleModal from '../../../../shared/components/accessible-modal'
|
import AccessibleModal from '../../../../shared/components/accessible-modal'
|
||||||
|
import BetaBadge from '../../../../shared/components/beta-badge'
|
||||||
|
|
||||||
export default function FileTreeModalCreateFile() {
|
export default function FileTreeModalCreateFile() {
|
||||||
const { isCreatingFile, cancel } = useFileTreeActionable()
|
const { isCreatingFile, cancel } = useFileTreeActionable()
|
||||||
|
const { t } = useTranslation()
|
||||||
|
|
||||||
if (!isCreatingFile) {
|
if (!isCreatingFile) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tooltip = {
|
||||||
|
id: 'create-file-beta-tooltip',
|
||||||
|
text: t('beta_badge_tooltip', { feature: 'adding files' })
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FileTreeCreateFormProvider>
|
<FileTreeCreateFormProvider>
|
||||||
<AccessibleModal bsSize="large" onHide={cancel} show>
|
<AccessibleModal bsSize="large" onHide={cancel} show>
|
||||||
<Modal.Header closeButton>
|
<Modal.Header closeButton>
|
||||||
<Modal.Title>Add Files</Modal.Title>
|
<Modal.Title>
|
||||||
|
Add Files
|
||||||
|
<BetaBadge tooltip={tooltip} />
|
||||||
|
</Modal.Title>
|
||||||
</Modal.Header>
|
</Modal.Header>
|
||||||
|
|
||||||
<Modal.Body className="modal-new-file">
|
<Modal.Body className="modal-new-file">
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { Button, Modal, Grid } from 'react-bootstrap'
|
import { Button, Modal, Grid } from 'react-bootstrap'
|
||||||
import { Trans } from 'react-i18next'
|
import { Trans, useTranslation } from 'react-i18next'
|
||||||
import ShareModalBody from './share-modal-body'
|
import ShareModalBody from './share-modal-body'
|
||||||
import Icon from '../../../shared/components/icon'
|
import Icon from '../../../shared/components/icon'
|
||||||
import AccessibleModal from '../../../shared/components/accessible-modal'
|
import AccessibleModal from '../../../shared/components/accessible-modal'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import { ReadOnlyTokenLink } from './link-sharing'
|
import { ReadOnlyTokenLink } from './link-sharing'
|
||||||
|
import BetaBadge from '../../../shared/components/beta-badge'
|
||||||
|
|
||||||
export default function ShareProjectModalContent({
|
export default function ShareProjectModalContent({
|
||||||
show,
|
show,
|
||||||
|
@ -14,11 +15,20 @@ export default function ShareProjectModalContent({
|
||||||
inFlight,
|
inFlight,
|
||||||
error
|
error
|
||||||
}) {
|
}) {
|
||||||
|
const { t } = useTranslation()
|
||||||
|
|
||||||
|
const tooltip = {
|
||||||
|
id: 'create-file-beta-tooltip',
|
||||||
|
text: t('beta_badge_tooltip', { feature: 'project sharing' })
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AccessibleModal show={show} onHide={cancel} animation={animation}>
|
<AccessibleModal show={show} onHide={cancel} animation={animation}>
|
||||||
<Modal.Header closeButton>
|
<Modal.Header closeButton>
|
||||||
<Modal.Title>
|
<Modal.Title>
|
||||||
<Trans i18nKey="share_project" />
|
<Trans i18nKey="share_project" />
|
||||||
|
|
||||||
|
<BetaBadge tooltip={tooltip} />
|
||||||
</Modal.Title>
|
</Modal.Title>
|
||||||
</Modal.Header>
|
</Modal.Header>
|
||||||
|
|
||||||
|
|
29
services/web/frontend/js/shared/components/beta-badge.js
Normal file
29
services/web/frontend/js/shared/components/beta-badge.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import React from 'react'
|
||||||
|
import { OverlayTrigger, Tooltip } from 'react-bootstrap'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
|
||||||
|
export default function BetaBadge({ tooltip }) {
|
||||||
|
return (
|
||||||
|
<OverlayTrigger
|
||||||
|
placement="bottom"
|
||||||
|
overlay={<Tooltip id={tooltip.id}>{tooltip.text}</Tooltip>}
|
||||||
|
delayHide={100}
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
href="/beta/participate"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="badge beta-badge"
|
||||||
|
>
|
||||||
|
<span className="sr-only">{tooltip.text}</span>
|
||||||
|
</a>
|
||||||
|
</OverlayTrigger>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
BetaBadge.propTypes = {
|
||||||
|
tooltip: PropTypes.exact({
|
||||||
|
id: PropTypes.string.isRequired,
|
||||||
|
text: PropTypes.string.isRequired
|
||||||
|
})
|
||||||
|
}
|
|
@ -657,6 +657,7 @@
|
||||||
"manage_beta_program_membership": "Manage Beta Program Membership",
|
"manage_beta_program_membership": "Manage Beta Program Membership",
|
||||||
"beta_program_opt_out_action": "Opt-Out of Beta Program",
|
"beta_program_opt_out_action": "Opt-Out of Beta Program",
|
||||||
"disable_beta": "Disable Beta",
|
"disable_beta": "Disable Beta",
|
||||||
|
"beta_badge_tooltip": "We made some improvements to __feature__. We hope you like it! Click here to manage your beta program membership",
|
||||||
"beta_program_badge_description": "While using __appName__, you will see beta features marked with this badge:",
|
"beta_program_badge_description": "While using __appName__, you will see beta features marked with this badge:",
|
||||||
"beta_program_current_beta_features_description": "We are currently testing the following new features in beta:",
|
"beta_program_current_beta_features_description": "We are currently testing the following new features in beta:",
|
||||||
"enable_beta": "Enable Beta",
|
"enable_beta": "Enable Beta",
|
||||||
|
|
Loading…
Reference in a new issue