Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 06919e2

Browse files
committed
When stickerpicker made visible, send visibility over postMessage
1 parent bd0301c commit 06919e2

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/components/views/elements/AppTile.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,19 @@ export default class AppTile extends React.Component {
167167

168168
// Widget action listeners
169169
this.dispatcherRef = dis.register(this._onWidgetAction);
170+
171+
}
172+
173+
componentDidUpdate() {
174+
// Allow parents to access widget messaging
175+
if (this.props.collectWidgetMessaging) {
176+
this.props.collectWidgetMessaging(new Promise((resolve) => {
177+
if (this.widgetMessaging) resolve(this.widgetMessaging);
178+
179+
// Expect this to be resolved later
180+
this._exposeWidgetMessaging = resolve;
181+
}));
182+
}
170183
}
171184

172185
componentWillUnmount() {
@@ -352,6 +365,9 @@ export default class AppTile extends React.Component {
352365
if (!this.widgetMessaging) {
353366
this._onInitialLoad();
354367
}
368+
if (this._exposeWidgetMessaging) {
369+
this._exposeWidgetMessaging(this.widgetMessaging);
370+
}
355371
}
356372

357373
/**
@@ -390,9 +406,6 @@ export default class AppTile extends React.Component {
390406
console.log(`Failed to get capabilities for widget type ${this.props.type}`, this.props.id, err);
391407
});
392408

393-
// Allow parents to access widget messaging
394-
if (this.props.collectWidgetMessaging) this.props.collectWidgetMessaging(this.widgetMessaging);
395-
396409
this.setState({loading: false});
397410
}
398411

src/components/views/rooms/Stickerpicker.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ export default class Stickerpicker extends React.Component {
3838
this._onResize = this._onResize.bind(this);
3939
this._onFinished = this._onFinished.bind(this);
4040

41+
this._collectWidgetMessaging = this._collectWidgetMessaging.bind(this);
42+
4143
this.popoverWidth = 300;
4244
this.popoverHeight = 300;
4345

@@ -102,6 +104,14 @@ export default class Stickerpicker extends React.Component {
102104
}
103105
}
104106

107+
componentDidUpdate(prevProps, prevState) {
108+
if (this._appWidgetMessaging &&
109+
prevState.showStickers !== this.state.showStickers
110+
) {
111+
this._appWidgetMessaging.sendVisibility(this.state.showStickers);
112+
}
113+
}
114+
105115
_imError(errorMsg, e) {
106116
console.error(errorMsg, e);
107117
this.setState({
@@ -137,6 +147,12 @@ export default class Stickerpicker extends React.Component {
137147
);
138148
}
139149

150+
async _collectWidgetMessaging(prom) {
151+
const widgetMessaging = await prom;
152+
this._appWidgetMessaging = widgetMessaging;
153+
this._appWidgetMessaging.sendVisibility(true);
154+
}
155+
140156
_getStickerpickerContent() {
141157
// Handle Integration Manager errors
142158
if (this.state._imError) {
@@ -173,6 +189,7 @@ export default class Stickerpicker extends React.Component {
173189
>
174190
<PersistedElement>
175191
<AppTile
192+
collectWidgetMessaging={this._collectWidgetMessaging}
176193
id={stickerpickerWidget.id}
177194
url={stickerpickerWidget.content.url}
178195
name={stickerpickerWidget.content.name}
@@ -192,7 +209,7 @@ export default class Stickerpicker extends React.Component {
192209
showPopout={false}
193210
onMinimiseClick={this._onHideStickersClick}
194211
handleMinimisePointerEvents={true}
195-
whitelistCapabilities={['m.sticker']}
212+
whitelistCapabilities={['m.sticker', 'visibility']}
196213
/>
197214
</PersistedElement>
198215
</div>

0 commit comments

Comments
 (0)