@@ -8,7 +8,8 @@ import ListItem from '@mui/material/ListItem';
88import Slider from '@mui/material/Slider' ;
99import Tooltip from '@mui/material/Tooltip' ;
1010import DragHandleIcon from '@mui/icons-material/DragHandleSharp' ;
11- import MoveToTopIcon from '@mui/icons-material/VerticalAlignTopSharp' ;
11+ import VerticalAlignTopSharp from '@mui/icons-material/VerticalAlignTopSharp' ;
12+ import VerticalAlignBottomSharp from '@mui/icons-material/VerticalAlignBottomSharp' ;
1213import VisibilityIcon from '@mui/icons-material/VisibilitySharp' ;
1314import VisibilityOffIcon from '@mui/icons-material/VisibilityOffSharp' ;
1415import OpacityIcon from '@mui/icons-material/OpacitySharp' ;
@@ -43,14 +44,14 @@ const reorder = (list, startIndex, endIndex) => {
4344
4445/** @private */
4546function Layer ( {
46- resource, layerMetadata = { } , index, handleOpacityChange, setLayerVisibility, moveToTop ,
47+ resource, layerMetadata = { } , index, handleOpacityChange, setLayerVisibility, moveToBackground , moveToFront ,
4748} ) {
4849 const { t } = useTranslation ( ) ;
49- const { width, height } = { height : undefined , width : 50 } ;
50+ const { width, height } = { height : undefined , width : 40 } ;
5051
5152 const layer = {
5253 opacity : 1 ,
53- visibility : true ,
54+ visibility : ! ! resource . preferred ,
5455 ...( layerMetadata || { } ) ,
5556 } ;
5657
@@ -76,8 +77,13 @@ function Layer({
7677 { layer . visibility ? < VisibilityIcon /> : < VisibilityOffIcon /> }
7778 </ MiradorMenuButton >
7879 { layer . index !== 0 && (
79- < MiradorMenuButton aria-label = { t ( 'layer_moveToTop' ) } size = "small" onClick = { ( ) => { moveToTop ( resource . id ) ; } } >
80- < MoveToTopIcon />
80+ < MiradorMenuButton aria-label = { t ( 'layer_moveToBackground' ) } size = "small" onClick = { ( ) => { moveToBackground ( resource . id ) ; } } >
81+ < VerticalAlignTopSharp />
82+ </ MiradorMenuButton >
83+ ) }
84+ { layer . index !== layerMetadata && (
85+ < MiradorMenuButton aria-label = { t ( 'layer_moveToFront' ) } size = "small" onClick = { ( ) => { moveToFront ( resource . id ) ; } } >
86+ < VerticalAlignBottomSharp />
8187 </ MiradorMenuButton >
8288 ) }
8389 </ div >
@@ -133,7 +139,8 @@ Layer.propTypes = {
133139 opacity : PropTypes . number ,
134140 visibility : PropTypes . bool ,
135141 } ) ) , // eslint-disable-line react/forbid-prop-types
136- moveToTop : PropTypes . func . isRequired ,
142+ moveToBackground : PropTypes . func . isRequired ,
143+ moveToFront : PropTypes . func . isRequired ,
137144 resource : PropTypes . object . isRequired , // eslint-disable-line react/forbid-prop-types
138145 setLayerVisibility : PropTypes . func . isRequired ,
139146} ;
@@ -235,7 +242,7 @@ export function CanvasLayers({
235242 } , [ canvasId , updateLayers , windowId ] ) ;
236243
237244 /** */
238- const moveToTop = useCallback ( ( layerId ) => {
245+ const moveToBackground = useCallback ( ( layerId ) => {
239246 const sortedLayers = reorder ( layers . map ( l => l . id ) , layers . findIndex ( l => l . id === layerId ) , 0 ) ;
240247
241248 const payload = layers . reduce ( ( acc , layer ) => {
@@ -246,6 +253,17 @@ export function CanvasLayers({
246253 updateLayers ( windowId , canvasId , payload ) ;
247254 } , [ canvasId , layers , updateLayers , windowId ] ) ;
248255
256+ const moveToFront = useCallback ( ( layerId ) => {
257+ const sortedLayers = reorder ( layers . map ( l => l . id ) , layers . findIndex ( l => l . id === layerId ) , layers . length - 1 ) ;
258+
259+ const payload = layers . reduce ( ( acc , layer ) => {
260+ acc [ layer . id ] = { index : sortedLayers . indexOf ( layer . id ) } ;
261+ return acc ;
262+ } , { } ) ;
263+
264+ updateLayers ( windowId , canvasId , payload ) ;
265+ } , [ canvasId , layers , updateLayers , windowId ] ) ;
266+
249267 return (
250268 < >
251269 { totalSize > 1 && (
@@ -279,7 +297,8 @@ export function CanvasLayers({
279297 layerMetadata = { ( layerMetadata || { } ) [ r . id ] || { } }
280298 handleOpacityChange = { handleOpacityChange }
281299 setLayerVisibility = { setLayerVisibility }
282- moveToTop = { moveToTop }
300+ moveToBackground = { moveToBackground }
301+ moveToFront = { moveToFront }
283302 />
284303 </ DraggableLayer >
285304 ) )
0 commit comments