@@ -3,14 +3,19 @@ import styles from "../styles/PackageCard.module.scss";
33
44import { Text , ThemeProvider , ITheme , Shimmer } from "@fluentui/react" ;
55
6- import { CalculatorPercentageIcon } from "@fluentui/react-icons-mdl2" ;
6+ import {
7+ CalculatorPercentageIcon ,
8+ FullScreenIcon ,
9+ } from "@fluentui/react-icons-mdl2" ;
710
811import { PackageIdentifier , packages } from "../PackageDescription" ;
912
1013import { lightTheme } from "../styles/Themes" ;
11- import useHistory from "../hooks/useHistory" ;
1214import TooltipButton from "./TooltipButton" ;
1315
16+ import useHistory from "../hooks/useHistory" ;
17+ import useSearchParamsState from "../hooks/useSearchParamsState" ;
18+
1419import React from "react" ;
1520import usePersistentState from "../hooks/usePersistentState" ;
1621
@@ -82,6 +87,19 @@ const PackageCard: React.FC<PackageCardProps> = ({
8287 showAsPercentageKey ,
8388 false
8489 ) ;
90+ const [ fullScreenKey , setFullScreenKey ] = useSearchParamsState < string | null > (
91+ "fullScreen" ,
92+ null
93+ ) ;
94+ const fullScreen = fullScreenKey === identifier ;
95+
96+ const setFullScreen = ( value : boolean ) => {
97+ if ( value ) {
98+ setFullScreenKey ( identifier ) ;
99+ } else {
100+ setFullScreenKey ( null ) ;
101+ }
102+ } ;
85103
86104 const history = useHistory ( identifier , versionFilter ) ;
87105 const packageDesc = packages [ identifier ] ;
@@ -99,6 +117,7 @@ const PackageCard: React.FC<PackageCardProps> = ({
99117 < CardFrame
100118 theme = { theme ?? lightTheme }
101119 disabled = { history ?. points . length === 0 }
120+ fullScreen = { fullScreen }
102121 >
103122 < div className = { styles . header } >
104123 < div className = { styles . headerLeft } />
@@ -110,13 +129,22 @@ const PackageCard: React.FC<PackageCardProps> = ({
110129 </ div >
111130 < div className = { styles . headerControls } >
112131 < TooltipButton
113- toggle
114- content = "Show as percentage"
115132 aria-label = "Show as percentage"
116- disabled = { disabled }
117- onRenderIcon = { ( ) => < CalculatorPercentageIcon /> }
118133 checked = { showAsPercentage }
134+ content = "Show as percentage"
135+ disabled = { disabled }
119136 onClick = { ( ) => setShowAsPercentage ( ! showAsPercentage ) }
137+ onRenderIcon = { ( ) => < CalculatorPercentageIcon /> }
138+ toggle
139+ />
140+ < TooltipButton
141+ aria-label = "Show full screen"
142+ checked = { fullScreen }
143+ content = "Show full screen"
144+ disabled = { disabled }
145+ onClick = { ( ) => setFullScreen ( ! fullScreen ) }
146+ onRenderIcon = { ( ) => < FullScreenIcon /> }
147+ toggle
120148 />
121149 </ div >
122150 </ div >
@@ -125,15 +153,16 @@ const PackageCard: React.FC<PackageCardProps> = ({
125153 { ! dataIsReady && < ChartFallback /> }
126154 < VersionDownloadChart
127155 className = { ! disabled ? styles . visibleChart : styles . invisibleChart }
156+ fullScreen = { fullScreen }
128157 history = { dataIsReady ? history : undefined }
129158 maxDaysShown = { maxDays ( versionFilter ) }
130- tickInterval = { tickInterval ( versionFilter ) }
131159 maxVersionsShown = { maxVersionsShown ?? 4 }
132160 popularDuring = { popularDuring ( versionFilter ) }
133- unit = { showAsPercentage ? "percentage" : "totalDownloads" }
134- versionLabeler = { packageDesc . versionLabeler }
135161 theme = { theme }
162+ tickInterval = { tickInterval ( versionFilter ) }
136163 tooltipTheme = { tooltipTheme }
164+ unit = { showAsPercentage ? "percentage" : "totalDownloads" }
165+ versionLabeler = { packageDesc . versionLabeler }
137166 />
138167 </ Suspense >
139168 </ div >
@@ -144,15 +173,14 @@ const PackageCard: React.FC<PackageCardProps> = ({
144173const CardFrame : React . FC < {
145174 children : React . ReactNode ;
146175 disabled : boolean ;
176+ fullScreen ?: boolean ;
147177 theme : ITheme ;
148- } > = ( { children, disabled, theme } ) => {
178+ } > = ( { children, disabled, fullScreen , theme } ) => {
149179 return (
150180 < ThemeProvider
151- className = {
152- disabled
153- ? `${ styles . cardFrame } ${ styles . disabledCardFrame } `
154- : styles . cardFrame
155- }
181+ className = { `${ styles . cardFrame } ${
182+ disabled ? styles . disabledCardFrame : ""
183+ } ${ fullScreen ? styles . fullScreenCardFrame : "" } `}
156184 theme = { theme }
157185 >
158186 < div
0 commit comments