From c7eafd69c2124f229952bf4828dccc6de8d7d305 Mon Sep 17 00:00:00 2001
From: David <33458145+davidmcpowell@users.noreply.github.com>
Date: Mon, 21 Oct 2024 10:06:30 +0100
Subject: [PATCH] Merge pull request #21014 from
overleaf/dk-review-panel-tc-widget
Add "Track changes is On" button when review panel is closed
GitOrigin-RevId: a165201f611860ba531f2eeb3d89f83a695cd017
---
.../components/review-panel-container.tsx | 11 +++-
.../components/track-changes-on-widget.tsx | 36 +++++++++++++
.../app/editor/review-panel-new.less | 49 ++++++++++++++++++
.../pages/editor/review-panel-new.scss | 50 +++++++++++++++++++
4 files changed, 145 insertions(+), 1 deletion(-)
create mode 100644 services/web/frontend/js/features/review-panel-new/components/track-changes-on-widget.tsx
diff --git a/services/web/frontend/js/features/review-panel-new/components/review-panel-container.tsx b/services/web/frontend/js/features/review-panel-new/components/review-panel-container.tsx
index ade154b061..c24de044a2 100644
--- a/services/web/frontend/js/features/review-panel-new/components/review-panel-container.tsx
+++ b/services/web/frontend/js/features/review-panel-new/components/review-panel-container.tsx
@@ -6,12 +6,15 @@ import { useLayoutContext } from '@/shared/context/layout-context'
import { useRangesContext } from '../context/ranges-context'
import { useThreadsContext } from '@/features/review-panel-new/context/threads-context'
import { hasActiveRange } from '@/features/review-panel-new/utils/has-active-range'
+import TrackChangesOnWidget from './track-changes-on-widget'
+import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context'
function ReviewPanelContainer() {
const view = useCodeMirrorViewContext()
const ranges = useRangesContext()
const threads = useThreadsContext()
const { reviewPanelOpen } = useLayoutContext()
+ const { wantTrackChanges } = useEditorManagerContext()
if (!view) {
return null
@@ -24,7 +27,13 @@ function ReviewPanelContainer() {
// the mini review panel
if (hasActiveRange(ranges, threads)) {
- return ReactDOM.createPortal(, view.scrollDOM)
+ return ReactDOM.createPortal(
+ <>
+ {wantTrackChanges && }
+
+ >,
+ view.scrollDOM
+ )
}
return null
diff --git a/services/web/frontend/js/features/review-panel-new/components/track-changes-on-widget.tsx b/services/web/frontend/js/features/review-panel-new/components/track-changes-on-widget.tsx
new file mode 100644
index 0000000000..63ee10060f
--- /dev/null
+++ b/services/web/frontend/js/features/review-panel-new/components/track-changes-on-widget.tsx
@@ -0,0 +1,36 @@
+import { Trans } from 'react-i18next'
+import { EditorView } from '@codemirror/view'
+import classnames from 'classnames'
+import { useCodeMirrorStateContext } from '@/features/source-editor/components/codemirror-context'
+import { useLayoutContext } from '@/shared/context/layout-context'
+import { useCallback } from 'react'
+
+function TrackChangesOnWidget() {
+ const { setReviewPanelOpen } = useLayoutContext()
+ const state = useCodeMirrorStateContext()
+ const darkTheme = state.facet(EditorView.darkTheme)
+
+ const openReviewPanel = useCallback(() => {
+ setReviewPanelOpen(true)
+ }, [setReviewPanelOpen])
+
+ return (
+
+ )
+}
+
+export default TrackChangesOnWidget
diff --git a/services/web/frontend/stylesheets/app/editor/review-panel-new.less b/services/web/frontend/stylesheets/app/editor/review-panel-new.less
index ac329f176c..b3a3578b4d 100644
--- a/services/web/frontend/stylesheets/app/editor/review-panel-new.less
+++ b/services/web/frontend/stylesheets/app/editor/review-panel-new.less
@@ -642,3 +642,52 @@
.review-panel-tooltip {
pointer-events: none; // this is to prevent mouseLeave event from firing when hovering over the tooltip
}
+
+.review-panel-in-editor-widgets {
+ position: sticky;
+ top: 0;
+ right: 0;
+ font-size: 11px;
+ z-index: 2;
+ font-family: @font-family-sans-serif;
+
+ .review-panel-in-editor-widgets-inner {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .review-panel-track-changes-indicator {
+ border: 0;
+ }
+}
+.review-panel-track-changes-indicator {
+ display: block;
+ padding: 5px 10px;
+ background-color: rgba(240, 240, 240, 0.9);
+ color: @rp-type-blue;
+ text-align: center;
+ border-bottom-left-radius: 3px;
+ white-space: nowrap;
+
+ &.review-panel-track-changes-indicator-on-dark {
+ background-color: rgba(88, 88, 88, 0.8);
+ color: #fff;
+
+ &:hover,
+ &:focus {
+ background-color: rgba(88, 88, 88, 1);
+ color: #fff;
+ }
+ }
+
+ &:hover,
+ &:focus {
+ outline: 0;
+ text-decoration: none;
+ background-color: rgba(240, 240, 240, 1);
+ color: @rp-type-blue;
+ }
+}
diff --git a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
index 31bf1b4954..d48ad9a3ac 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
@@ -646,3 +646,53 @@
.review-panel-tooltip {
pointer-events: none; // this is to prevent mouseLeave event from firing when hovering over the tooltip
}
+
+.review-panel-in-editor-widgets {
+ position: sticky;
+ top: 0;
+ right: 0;
+ font-size: 11px;
+ z-index: 2;
+ font-family: $font-family-base;
+
+ .review-panel-in-editor-widgets-inner {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .review-panel-track-changes-indicator {
+ border: 0;
+ }
+}
+
+.review-panel-track-changes-indicator {
+ display: block;
+ padding: 5px 10px;
+ background-color: rgb(240 240 240 / 90%);
+ color: $rp-type-blue;
+ text-align: center;
+ border-bottom-left-radius: 3px;
+ white-space: nowrap;
+
+ &.review-panel-track-changes-indicator-on-dark {
+ background-color: rgb(88 88 88 / 80%);
+ color: #fff;
+
+ &:hover,
+ &:focus {
+ background-color: rgb(88 88 88 / 100%);
+ color: #fff;
+ }
+ }
+
+ &:hover,
+ &:focus {
+ outline: 0;
+ text-decoration: none;
+ background-color: rgb(240 240 240 / 100%);
+ color: $rp-type-blue;
+ }
+}