Use enum values for mediaType in popup

This commit is contained in:
hensm
2019-04-30 21:06:06 +01:00
committed by Matt Hensman
parent cd7248eefd
commit 3f8dd90938
2 changed files with 48 additions and 36 deletions

View File

@@ -6,6 +6,15 @@
"message": "" "message": ""
} }
, "popupMediaTypeApp": {
"message": "this site's app"
}
, "popupMediaTypeTab": {
"message": "Tab"
}
, "popupMediaTypeScreen": {
"message": "Screen"
}
, "popupCastButtonLabel": { , "popupCastButtonLabel": {
"message": "Cast" "message": "Cast"
} }

View File

@@ -25,16 +25,9 @@ browser.runtime.getPlatformInfo()
}); });
const winWidth = 350;
let winHeight = 200;
let frameHeight: number;
let frameWidth: number;
interface PopupAppState { interface PopupAppState {
receivers: Receiver[]; receivers: Receiver[];
defaultMediaType: ReceiverSelectorMediaType; mediaType: ReceiverSelectorMediaType;
isLoading: boolean; isLoading: boolean;
} }
@@ -47,15 +40,13 @@ class PopupApp extends Component<{}, PopupAppState> {
this.state = { this.state = {
receivers: [] receivers: []
, defaultMediaType: ReceiverSelectorMediaType.App , mediaType: ReceiverSelectorMediaType.App
, isLoading: false , isLoading: false
}; };
// Store window ref // Store window ref
browser.windows.getCurrent().then(win => { browser.windows.getCurrent().then(win => {
this.win = win; this.win = win;
frameHeight = win.height - window.innerHeight;
frameWidth = win.width - window.innerWidth;
}); });
this.onSelectChange = this.onSelectChange.bind(this); this.onSelectChange = this.onSelectChange.bind(this);
@@ -72,14 +63,7 @@ class PopupApp extends Component<{}, PopupAppState> {
case "popup:/populateReceiverList": { case "popup:/populateReceiverList": {
this.setState({ this.setState({
receivers: message.data.receivers receivers: message.data.receivers
, defaultMediaType: message.data.defaultMediaType , mediaType: message.data.defaultMediaType
}, () => {
// Get height of content without window decoration
winHeight = document.body.clientHeight + frameHeight;
browser.windows.update(this.win.id, {
height: winHeight
});
}); });
break; break;
@@ -93,21 +77,43 @@ class PopupApp extends Component<{}, PopupAppState> {
}); });
} }
public componentDidUpdate () {
setTimeout(() => {
// Fit window to content height
const frameHeight = window.outerHeight - window.innerHeight;
const windowHeight = document.body.clientHeight + frameHeight;
browser.windows.update(this.win.id, {
height: windowHeight
});
}, 1)
}
public render () { public render () {
const shareMedia = const shareMedia =
this.state.defaultMediaType === ReceiverSelectorMediaType.Tab this.state.mediaType === ReceiverSelectorMediaType.Tab
|| this.state.defaultMediaType === ReceiverSelectorMediaType.Screen; || this.state.mediaType === ReceiverSelectorMediaType.Screen
return ( return (
<div> <div>
<div className="media-select"> <div className="media-select">
Cast Cast
<select value={ this.state.defaultMediaType } <select value={ this.state.mediaType }
onChange={ this.onSelectChange } onChange={ this.onSelectChange }
className="media-select-dropdown"> className="media-select-dropdown">
<option value="app" disabled={ shareMedia }>this site's app</option> <option value={ ReceiverSelectorMediaType.App }
<option value="tab" disabled={ !shareMedia }>Tab</option> disabled={ shareMedia }>
<option value="screen" disabled={ !shareMedia }>Screen</option>
{ _("popupMediaTypeApp") }
</option>
<option value={ ReceiverSelectorMediaType.Tab }
disabled={ !shareMedia }>
{ _("popupMediaTypeTab") }
</option>
<option value={ ReceiverSelectorMediaType.Screen }
disabled={ !shareMedia }>
{ _("popupMediaTypeScreen") }
</option>
</select> </select>
to: to:
</div> </div>
@@ -134,20 +140,14 @@ class PopupApp extends Component<{}, PopupAppState> {
subject: "receiverSelectorManager:/selected" subject: "receiverSelectorManager:/selected"
, data: { , data: {
receiver receiver
, defaultMediaType: this.state.defaultMediaType , mediaType: this.state.mediaType
} }
}); });
} }
private onSelectChange (ev: React.ChangeEvent<HTMLSelectElement>) { private onSelectChange (ev: React.ChangeEvent<HTMLSelectElement>) {
const mediaTypeMap: { [key: string]: ReceiverSelectorMediaType } = {
"app": ReceiverSelectorMediaType.App
, "tab": ReceiverSelectorMediaType.Tab
, "screen": ReceiverSelectorMediaType.Screen
};
this.setState({ this.setState({
defaultMediaType: mediaTypeMap[ev.target.value] mediaType: parseInt(ev.target.value)
}); });
} }
} }
@@ -217,6 +217,9 @@ class ReceiverEntry extends Component<ReceiverEntryProps, ReceiverEntryState> {
} }
ReactDOM.render( // Render after CSS has loaded
<PopupApp /> window.addEventListener("load", () => {
, document.querySelector("#root")); ReactDOM.render(
<PopupApp />
, document.querySelector("#root"));
});