Skip to content

Commit a55cf0f

Browse files
committed
fix: Add Viewport size monitoring to DevIndex for mobile hamburger menu (#9273)
1 parent f6351db commit a55cf0f

2 files changed

Lines changed: 90 additions & 2 deletions

File tree

apps/devindex/view/Viewport.mjs

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Header from './HeaderToolbar.mjs';
22
import BaseViewport from '../../../src/container/Viewport.mjs';
3+
import NeoArray from '../../../src/util/Array.mjs';
34
import ViewportController from './ViewportController.mjs';
45
import ViewportStateProvider from './ViewportStateProvider.mjs';
56

@@ -8,6 +9,14 @@ import ViewportStateProvider from './ViewportStateProvider.mjs';
89
* @extends Neo.container.Viewport
910
*/
1011
class Viewport extends BaseViewport {
12+
/**
13+
* Valid values for size
14+
* @member {String[]} sizes=['large','medium','small','x-small',null]
15+
* @protected
16+
* @static
17+
*/
18+
static sizes = ['large', 'medium', 'small', 'x-small', null]
19+
1120
static config = {
1221
/**
1322
* @member {String} className='DevIndex.view.Viewport'
@@ -49,7 +58,81 @@ class Viewport extends BaseViewport {
4958
{module: () => import('./home/MainContainer.mjs')},
5059
{module: () => import('./learn/MainContainer.mjs')}
5160
]
52-
}]
61+
}],
62+
/**
63+
* @member {Boolean} monitorSize=true
64+
* @reactive
65+
*/
66+
monitorSize: true,
67+
/**
68+
* Values are: large, medium, small, x-small, null
69+
* @member {String|null} size_=null
70+
* @reactive
71+
*/
72+
size_: null
73+
}
74+
75+
/**
76+
* @param {Object} config
77+
*/
78+
construct(config) {
79+
super.construct(config);
80+
81+
let me = this;
82+
83+
me.on('resize', me.onResize, me)
84+
}
85+
86+
/**
87+
* Triggered after the size config got changed
88+
* @param {String|null} value
89+
* @param {String|null} oldValue
90+
* @protected
91+
*/
92+
afterSetSize(value, oldValue) {
93+
if (value) {
94+
let me = this,
95+
cls = me.cls;
96+
97+
NeoArray.remove(cls, 'devindex-size-' + oldValue);
98+
NeoArray.add( cls, 'devindex-size-' + value);
99+
me.cls = cls;
100+
101+
me.stateProvider.setData({size: value})
102+
}
103+
}
104+
105+
/**
106+
* Triggered before the size config gets changed
107+
* @param {String|null} value
108+
* @param {String|null} oldValue
109+
* @returns {String|null}
110+
* @protected
111+
*/
112+
beforeSetSize(value, oldValue) {
113+
return this.beforeSetEnumValue(value, oldValue, 'size')
114+
}
115+
116+
/**
117+
* @param {Number} width
118+
* @returns {String}
119+
*/
120+
getSize(width) {
121+
if (width <= 640) return 'x-small';
122+
if (width <= 1024) return 'small';
123+
if (width <= 1296) return 'medium';
124+
return 'large'
125+
}
126+
127+
/**
128+
* @param {Object} data
129+
*/
130+
onResize(data) {
131+
let me = this;
132+
133+
if (me.id === data.id) {
134+
me.size = me.getSize(data.borderBoxSize.inlineSize)
135+
}
53136
}
54137
}
55138

apps/devindex/view/ViewportStateProvider.mjs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ class ViewportStateProvider extends StateProvider {
2222
/**
2323
* @member {Boolean} isScrolling=false
2424
*/
25-
isScrolling: false
25+
isScrolling: false,
26+
/**
27+
* Values are: large, medium, small, x-small, null
28+
* @member {String|null} size
29+
*/
30+
size: null
2631
}
2732
}
2833
}

0 commit comments

Comments
 (0)