diff --git a/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx b/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx index 6525eac211..e90c0578e8 100644 --- a/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx +++ b/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx @@ -2,11 +2,10 @@ import { FC, memo, useState } from 'react' import { ReviewPanelResolvedThreadsButton } from './review-panel-resolved-threads-button' import { ReviewPanelTrackChangesMenu } from './review-panel-track-changes-menu' import ReviewPanelTrackChangesMenuButton from './review-panel-track-changes-menu-button' -import MaterialIcon from '@/shared/components/material-icon' import { useLayoutContext } from '@/shared/context/layout-context' -import SplitTestBadge from '@/shared/components/split-test-badge' import { useTranslation } from 'react-i18next' import getMeta from '@/utils/meta' +import { PanelHeading } from '@/shared/components/panel-heading' const isReviewerRoleEnabled = getMeta('ol-isReviewerRoleEnabled') @@ -18,25 +17,13 @@ const ReviewPanelHeader: FC = () => { return (
-
-
- {t('review')} - - - -
+ setReviewPanelOpen(false)} + splitTestName="review-panel-redesign" + > {isReviewerRoleEnabled && } - -
+ {!isReviewerRoleEnabled && (
diff --git a/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx b/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx index 596c9bd9fc..bd236f95c6 100644 --- a/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx +++ b/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx @@ -16,9 +16,9 @@ import { } from '../../../../../types/change' import { canAggregate } from '../utils/can-aggregate' -import MaterialIcon from '@/shared/components/material-icon' import useOverviewFileCollapsed from '../hooks/use-overview-file-collapsed' import { useThreadsContext } from '../context/threads-context' +import { CollapsibleFileHeader } from '@/shared/components/collapsible-file-header' export const ReviewPanelOverviewFile: FC<{ doc: MainDocument @@ -64,19 +64,12 @@ export const ReviewPanelOverviewFile: FC<{ return ( <>
- + {!collapsed && (
diff --git a/services/web/frontend/js/shared/components/collapsible-file-header.tsx b/services/web/frontend/js/shared/components/collapsible-file-header.tsx new file mode 100644 index 0000000000..efcd51a74f --- /dev/null +++ b/services/web/frontend/js/shared/components/collapsible-file-header.tsx @@ -0,0 +1,21 @@ +import MaterialIcon from '@/shared/components/material-icon' +import { Dispatch, FC, SetStateAction } from 'react' + +export const CollapsibleFileHeader: FC<{ + name: string + count: number + collapsed: boolean + toggleCollapsed: Dispatch> +}> = ({ name, count, collapsed, toggleCollapsed }) => ( + +) diff --git a/services/web/frontend/js/shared/components/panel-heading.tsx b/services/web/frontend/js/shared/components/panel-heading.tsx new file mode 100644 index 0000000000..bdec33779a --- /dev/null +++ b/services/web/frontend/js/shared/components/panel-heading.tsx @@ -0,0 +1,38 @@ +import { FC } from 'react' +import SplitTestBadge from '@/shared/components/split-test-badge' +import MaterialIcon from '@/shared/components/material-icon' +import { useTranslation } from 'react-i18next' + +export const PanelHeading: FC<{ + title: string + splitTestName?: string + children?: React.ReactNode + handleClose(): void +}> = ({ title, splitTestName, children, handleClose }) => { + const { t } = useTranslation() + + return ( +
+
+ {title} + {splitTestName && ( + + )} +
+ + {children} + + +
+ ) +} 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 338e2897e8..8b5e49018c 100644 --- a/services/web/frontend/stylesheets/app/editor/review-panel-new.less +++ b/services/web/frontend/stylesheets/app/editor/review-panel-new.less @@ -498,7 +498,7 @@ } } - .review-panel-overview-file-header { + .collapsible-file-header { all: unset; padding: 6px 8px; font-size: 14px; @@ -524,7 +524,7 @@ padding-bottom: 6px; } - .review-panel-overview-file-entry-count { + .collapsible-file-header-count { background-color: @neutral-20; padding: 2px 4px; margin-left: auto; diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/all.scss b/services/web/frontend/stylesheets/bootstrap-5/components/all.scss index 99f7cd2a45..269a51ec01 100644 --- a/services/web/frontend/stylesheets/bootstrap-5/components/all.scss +++ b/services/web/frontend/stylesheets/bootstrap-5/components/all.scss @@ -34,3 +34,5 @@ @import 'recurly'; @import 'dev-toolbar'; @import 'tos'; +@import 'collapsible-file-header'; +@import 'panel-heading'; diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss b/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss new file mode 100644 index 0000000000..4a510ae798 --- /dev/null +++ b/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss @@ -0,0 +1,18 @@ +.collapsible-file-header { + all: unset; + padding: var(--spacing-03) var(--spacing-04); + font-size: var(--font-size-02); + cursor: pointer; + display: flex; + align-items: center; + gap: var(--spacing-04); + box-sizing: border-box; + width: 100%; +} + +.collapsible-file-header-count { + background-color: var(--neutral-20); + padding: var(--spacing-01) var(--spacing-02); + margin-left: auto; + border-radius: var(--border-radius-base); +} diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss b/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss new file mode 100644 index 0000000000..0792665cc5 --- /dev/null +++ b/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss @@ -0,0 +1,31 @@ +.panel-heading { + display: flex; + align-items: center; + padding: var(--spacing-03) var(--spacing-02); + gap: 2px; +} + +.panel-heading-label { + font-size: var(--font-size-02); + font-weight: bold; + margin: 0; + flex: 1; + text-align: start; + display: flex; + align-items: center; + gap: var(--spacing-02); +} + +.panel-heading-close-button { + display: flex; + align-items: center; + border: none; + background-color: transparent; + color: var(--content-primary); + padding: var(--spacing-01); + + &:hover, + &:focus { + background-color: var(--neutral-20); + } +} 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 2ea853e8e8..22544731ac 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 @@ -253,39 +253,6 @@ } } - .review-panel-heading { - display: flex; - align-items: center; - padding: var(--spacing-03) var(--spacing-02); - gap: 2px; - - .review-panel-label { - font-size: var(--font-size-02); - font-weight: bold; - margin: 0; - flex: 1; - text-align: start; - } - - .review-panel-split-test-badge { - margin-left: var(--spacing-02); - } - - .review-panel-close-button { - display: flex; - align-items: center; - border: none; - background-color: transparent; - color: var(--content-primary); - padding: var(--spacing-01); - - &:hover, - &:focus { - background-color: var(--neutral-20); - } - } - } - &.review-panel-resolved-comments { --bs-popover-border-width: 1px; --bs-popover-bg: var(--bg-light-secondary); @@ -505,18 +472,6 @@ } } - .review-panel-overview-file-header { - all: unset; - padding: var(--spacing-03) var(--spacing-04); - font-size: var(--font-size-02); - cursor: pointer; - display: flex; - align-items: center; - gap: var(--spacing-04); - box-sizing: border-box; - width: 100%; - } - .review-panel-overfile-divider { border-bottom: 1px solid var(--border-divider); margin: var(--spacing-01) 0; @@ -531,13 +486,6 @@ padding-bottom: var(--spacing-03); } - .review-panel-overview-file-entry-count { - background-color: var(--neutral-20); - padding: var(--spacing-01) var(--spacing-02); - margin-left: auto; - border-radius: var(--border-radius-base); - } - .review-panel-footer { position: fixed; height: 60px;