When stickerpicker made visible, send visibility over postMessage

This commit is contained in:
Luke Barnard 2018-05-11 16:23:18 +01:00
parent bd0301c666
commit 06919e22d6
2 changed files with 34 additions and 4 deletions

View file

@ -167,6 +167,19 @@ export default class AppTile extends React.Component {
// Widget action listeners // Widget action listeners
this.dispatcherRef = dis.register(this._onWidgetAction); this.dispatcherRef = dis.register(this._onWidgetAction);
}
componentDidUpdate() {
// Allow parents to access widget messaging
if (this.props.collectWidgetMessaging) {
this.props.collectWidgetMessaging(new Promise((resolve) => {
if (this.widgetMessaging) resolve(this.widgetMessaging);
// Expect this to be resolved later
this._exposeWidgetMessaging = resolve;
}));
}
} }
componentWillUnmount() { componentWillUnmount() {
@ -352,6 +365,9 @@ export default class AppTile extends React.Component {
if (!this.widgetMessaging) { if (!this.widgetMessaging) {
this._onInitialLoad(); this._onInitialLoad();
} }
if (this._exposeWidgetMessaging) {
this._exposeWidgetMessaging(this.widgetMessaging);
}
} }
/** /**
@ -390,9 +406,6 @@ export default class AppTile extends React.Component {
console.log(`Failed to get capabilities for widget type ${this.props.type}`, this.props.id, err); console.log(`Failed to get capabilities for widget type ${this.props.type}`, this.props.id, err);
}); });
// Allow parents to access widget messaging
if (this.props.collectWidgetMessaging) this.props.collectWidgetMessaging(this.widgetMessaging);
this.setState({loading: false}); this.setState({loading: false});
} }

View file

@ -38,6 +38,8 @@ export default class Stickerpicker extends React.Component {
this._onResize = this._onResize.bind(this); this._onResize = this._onResize.bind(this);
this._onFinished = this._onFinished.bind(this); this._onFinished = this._onFinished.bind(this);
this._collectWidgetMessaging = this._collectWidgetMessaging.bind(this);
this.popoverWidth = 300; this.popoverWidth = 300;
this.popoverHeight = 300; this.popoverHeight = 300;
@ -102,6 +104,14 @@ export default class Stickerpicker extends React.Component {
} }
} }
componentDidUpdate(prevProps, prevState) {
if (this._appWidgetMessaging &&
prevState.showStickers !== this.state.showStickers
) {
this._appWidgetMessaging.sendVisibility(this.state.showStickers);
}
}
_imError(errorMsg, e) { _imError(errorMsg, e) {
console.error(errorMsg, e); console.error(errorMsg, e);
this.setState({ this.setState({
@ -137,6 +147,12 @@ export default class Stickerpicker extends React.Component {
); );
} }
async _collectWidgetMessaging(prom) {
const widgetMessaging = await prom;
this._appWidgetMessaging = widgetMessaging;
this._appWidgetMessaging.sendVisibility(true);
}
_getStickerpickerContent() { _getStickerpickerContent() {
// Handle Integration Manager errors // Handle Integration Manager errors
if (this.state._imError) { if (this.state._imError) {
@ -173,6 +189,7 @@ export default class Stickerpicker extends React.Component {
> >
<PersistedElement> <PersistedElement>
<AppTile <AppTile
collectWidgetMessaging={this._collectWidgetMessaging}
id={stickerpickerWidget.id} id={stickerpickerWidget.id}
url={stickerpickerWidget.content.url} url={stickerpickerWidget.content.url}
name={stickerpickerWidget.content.name} name={stickerpickerWidget.content.name}
@ -192,7 +209,7 @@ export default class Stickerpicker extends React.Component {
showPopout={false} showPopout={false}
onMinimiseClick={this._onHideStickersClick} onMinimiseClick={this._onHideStickersClick}
handleMinimisePointerEvents={true} handleMinimisePointerEvents={true}
whitelistCapabilities={['m.sticker']} whitelistCapabilities={['m.sticker', 'visibility']}
/> />
</PersistedElement> </PersistedElement>
</div> </div>