From 02083d8e2f1a85bfb71c525640a6d1b6dccc88a5 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Tue, 22 Oct 2024 14:08:25 -0700 Subject: [PATCH] teacher tool: add gear menu to host privacy links --- teachertool/src/components/HeaderBar.tsx | 104 ++++++++++++------ .../components/styling/HeaderBar.module.scss | 29 +++-- teachertool/src/constants.ts | 4 + 3 files changed, 96 insertions(+), 41 deletions(-) diff --git a/teachertool/src/components/HeaderBar.tsx b/teachertool/src/components/HeaderBar.tsx index aa8613db7757..7b0c62b487a0 100644 --- a/teachertool/src/components/HeaderBar.tsx +++ b/teachertool/src/components/HeaderBar.tsx @@ -14,7 +14,7 @@ const betaTag = () => { return
{lf("Beta")}
; }; -interface HeaderBarProps {} +interface HeaderBarProps { } export const HeaderBar: React.FC = () => { const { state: teacherTool } = useContext(AppStateContext); @@ -151,45 +151,61 @@ export const HeaderBar: React.FC = () => { <> ); return ( - <> -
+
+ {teacherTool.userProfile ? ( + + ) : (
-
- {teacherTool.userProfile ? ( - - ) : ( -
- + )} +
); } + const privacyUrl = pxt?.appTarget?.appTheme?.privacyUrl; + const termsOfUseUrl = pxt?.appTarget?.appTheme?.termsOfUseUrl; + + const getSettingItems = () => { + const items: MenuItem[] = []; + + if (privacyUrl) { + items.push({ + id: "privacy", + title: Strings.Privacy, + label: Strings.Privacy, + onClick: () => pxt.tickEvent(Ticks.PrivacyStatementClicked), + href: privacyUrl, + }); + } + + if (termsOfUseUrl) { + items.push({ + id: "termsOfUse", + title: Strings.TermsOfUse, + label: Strings.TermsOfUse, + onClick: () => pxt.tickEvent(Ticks.TermsOfUseClicked), + href: termsOfUseUrl, + }); + } + + return items; + }; + + const settingItems = getSettingItems(); + return (
@@ -208,7 +224,27 @@ export const HeaderBar: React.FC = () => {
-
{getUserMenu()}
+
+
+
+ + {getUserMenu()} +
); }; diff --git a/teachertool/src/components/styling/HeaderBar.module.scss b/teachertool/src/components/styling/HeaderBar.module.scss index 9bb782639c47..f7be55f6385e 100644 --- a/teachertool/src/components/styling/HeaderBar.module.scss +++ b/teachertool/src/components/styling/HeaderBar.module.scss @@ -74,13 +74,6 @@ color: var(--pxt-page-foreground); } - div[class*="common-menu-dropdown-pane"] { - border-radius: 0 0 0.25rem 0.25rem; - box-shadow: 0 1px 3px 0 var(--pxt-page-foreground-shadow); - background: var(--pxt-page-background); - padding: 0.15rem; - } - .avatar { display: flex; align-items: center; @@ -95,6 +88,28 @@ } } } + + div[class~="common-menu-dropdown"] { + &:hover { + background-color: var(--pxt-headerbar-background-smoke); + } + + button[class~="menu-button"] { + background-color: var(--pxt-headerbar-background); + } + + div[class~="common-menu-dropdown-pane"] { + border-radius: 0 0 0.25rem 0.25rem; + box-shadow: 0 4px 4px 0 var(--pxt-page-foreground-shadow); + background: var(--pxt-page-background); + padding: 0.15rem; + width: unset !important; + + button[class~="common-menu-dropdown-item"]:hover { + background-color: var(--pxt-page-foreground-shadow); + } + } + } } .beta-tag { diff --git a/teachertool/src/constants.ts b/teachertool/src/constants.ts index a62f5b5ab314..8c066913ffa8 100644 --- a/teachertool/src/constants.ts +++ b/teachertool/src/constants.ts @@ -59,6 +59,8 @@ export namespace Strings { export const ExceedsMax = lf("Exceeds maximum value"); export const InvalidValue = lf("Invalid value"); export const InvalidShareLink = lf("Invalid share link"); + export const Privacy = lf("Privacy"); + export const TermsOfUse = lf("Terms of Use"); } export namespace Ticks { @@ -95,6 +97,8 @@ export namespace Ticks { export const LoadProjectInvalid = "teachertool.loadproject.invalid"; export const BlockPickerBlockSelected = "teachertool.blockpicker.blockselected"; export const BlockPickerOpened = "teachertool.blockpicker.opened"; + export const PrivacyStatementClicked = "teachertool.privacystatement.clicked"; + export const TermsOfUseClicked = "teachertool.termsofuse.clicked"; } namespace Misc {