Skip to content

Commit

Permalink
UX improvements (#97)
Browse files Browse the repository at this point in the history
* Making the greeting panel links visible

This fixes #86

* Ensuring that a realm wont be opened twice

* Default server url and username

* Making links open in the external browser

* Fixing the sidebar width

This fixes #96
  • Loading branch information
kraenhansen authored Sep 13, 2017
1 parent c07143d commit e019e41
Show file tree
Hide file tree
Showing 11 changed files with 65 additions and 26 deletions.
11 changes: 9 additions & 2 deletions src/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,15 @@ export const showOpenLocalRealm = (options?: void) => {
ipcRenderer.sendSync(Actions.ShowOpenLocalRealm, options);
};

export const showRealmBrowser = (options: IRealmBrowserOptions) => {
ipcRenderer.sendSync(Actions.ShowRealmBrowser, options);
export const showRealmBrowser = async (options: IRealmBrowserOptions) => {
return new Promise((resolve, reject) => {
const success = ipcRenderer.sendSync(Actions.ShowRealmBrowser, options);
if (success) {
resolve();
} else {
reject();
}
});
};

export const showServerAdministration = (options: IServerAdministrationOptions) => {
Expand Down
15 changes: 9 additions & 6 deletions src/main/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ export default class Application {
this.showOpenLocalRealm();
event.returnValue = true;
},
[Actions.ShowRealmBrowser]: (event, ...args) => {
this.showRealmBrowser(args[0] as IRealmBrowserOptions);
[Actions.ShowRealmBrowser]: async (event, ...args) => {
await this.showRealmBrowser(args[0] as IRealmBrowserOptions);
event.returnValue = true;
},
[Actions.ShowServerAdministration]: (event, ...args) => {
Expand Down Expand Up @@ -92,10 +92,13 @@ export default class Application {
});
}

public showRealmBrowser(options: IRealmBrowserOptions) {
const window = this.windowManager.createWindow(WindowType.RealmBrowser, options);
window.once("ready-to-show", () => {
window.show();
public async showRealmBrowser(options: IRealmBrowserOptions) {
return new Promise((resolve) => {
const window = this.windowManager.createWindow(WindowType.RealmBrowser, options);
window.once("ready-to-show", () => {
window.show();
resolve();
});
});
}

Expand Down
8 changes: 7 additions & 1 deletion src/main/window-manager.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BrowserWindow, screen } from "electron";
import { BrowserWindow, screen, shell } from "electron";
import * as path from "path";
import * as url from "url";

Expand Down Expand Up @@ -58,6 +58,12 @@ export default class WindowManager {
event.preventDefault();
});

// Open all links in the external browser
window.webContents.on("new-window", (event, openedUrl: string) => {
event.preventDefault();
shell.openExternal(openedUrl);
});

window.on("closed", () => {
const index = this.windows.indexOf(window);
if (index > -1) {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/connect-to-server/ConnectToServer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export const ConnectToServer = ({
<div className="ConnectToServer__ServerUrl">
<FormGroup className="ConnectToServer__ServerUrlGroup">
<Label for="serverUrl">URL</Label>
<Input type="url" name="serverUrl" id="serverUrl" placeholder="https://…" required
<Input type="url" name="serverUrl" id="serverUrl" placeholder="http://localhost:9080"
value={url} onChange={onUrlChanged} />
</FormGroup>
</div>
Expand Down
17 changes: 14 additions & 3 deletions src/ui/connect-to-server/ConnectToServerContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export class ConnectToServerContainer extends React.Component<{}, {
const { url, username, password, token } = this.state;

const preparedUrl = this.prepareUrl(url);
const preparedUsername = this.prepareUsername(username);

this.setState({
isConnecting: true,
Expand All @@ -54,7 +55,7 @@ export class ConnectToServerContainer extends React.Component<{}, {
},
});
} else {
Realm.Sync.User.login(preparedUrl, username, password, (err, user) => {
Realm.Sync.User.login(preparedUrl, preparedUsername, password, (err, user) => {
this.setState({
isConnecting: false,
});
Expand All @@ -68,7 +69,7 @@ export class ConnectToServerContainer extends React.Component<{}, {
showServerAdministration({
url: user.server,
credentials: {
username,
username: preparedUsername,
password,
},
});
Expand Down Expand Up @@ -110,10 +111,20 @@ export class ConnectToServerContainer extends React.Component<{}, {
}

private prepareUrl(url: string) {
if (url.indexOf("http") !== 0) {
if (url === "") {
return "http://localhost:9080";
} else if (url.indexOf("http") !== 0) {
return `http://${url}`;
} else {
return url;
}
}

private prepareUsername(username: string) {
if (username === "") {
return "realm-admin";
} else {
return username;
}
}
}
2 changes: 1 addition & 1 deletion src/ui/connect-to-server/UsernamePasswordForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const UsernamePasswordForm = ({
}) => (
<div>
<CredentialsFormGroup label="Username" labelFor="username">
<Input type="text" name="username" id="username" size="sm" required={isRequired}
<Input type="text" name="username" id="username" size="sm" placeholder="realm-admin"
value={username} onChange={onUsernameChanged} />
</CredentialsFormGroup>
<CredentialsFormGroup label="Password" labelFor="password">
Expand Down
4 changes: 4 additions & 0 deletions src/ui/greeting/Greeting.scss
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ $history-panel-icon-size: 20px;
justify-content: center;
padding: $spacer / 2;
user-select: none;

a {
text-decoration: underline;
}
}
}

Expand Down
5 changes: 2 additions & 3 deletions src/ui/greeting/HistoryPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,8 @@ export const HistoryPanel = ({
<div className="Greeting__HistoryPanel__Empty">
<p>Welcome to Realm Studio!</p>
<p>
Download and start the&nbsp;
<a href="https://realm.io/docs/realm-object-server/" target="browser">
Realm Object Server
<a href="https://realm.io/docs/realm-object-server/" target="_blank">
Download and start the Realm Object Server
</a>, if you have not already done that.
</p>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/ui/realm-browser/RealmBrowser.scss
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ $realm-browser-header-handle-width: 8px;

&__Sidebar {
background: $window-background;
flex: 0 2 200px;
padding: $spacer / 2;
width: 30%;

&__Header {
border-bottom: 1px solid $color-dove;
Expand Down Expand Up @@ -58,7 +58,7 @@ $realm-browser-header-handle-width: 8px;
}

&__Content {
width: 70%;
flex: 1 1 0;

&__HeaderCell,
&__Cell {
Expand Down
4 changes: 3 additions & 1 deletion src/ui/server-administration/ServerAdministration.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ export enum Tab {

export const ServerAdministration = ({
activeTab,
isRealmOpening,
onRealmOpened,
onTabChanged,
user,
}: {
activeTab: Tab,
isRealmOpening: boolean,
onRealmOpened: (path: string) => void,
onTabChanged: (tab: Tab) => void,
user: Realm.Sync.User | null,
Expand Down Expand Up @@ -79,7 +81,7 @@ export const ServerAdministration = ({
<div className="ServerAdministration__content">
{content}
</div>
<LoadingOverlay loading={!user} fade={false} />
<LoadingOverlay loading={!user || isRealmOpening} fade={false} />
</div>
);
};
19 changes: 13 additions & 6 deletions src/ui/server-administration/ServerAdministrationContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ import { ServerAdministration, Tab } from "./ServerAdministration";

export class ServerAdministrationContainer extends React.Component<IServerAdministrationOptions, {
activeTab: Tab,
isRealmOpening: boolean,
user: Realm.Sync.User | null,
}> {

constructor() {
super();
this.state = {
activeTab: Tab.Realms,
isRealmOpening: false,
user: null,
};
}
Expand Down Expand Up @@ -52,12 +54,17 @@ export class ServerAdministrationContainer extends React.Component<IServerAdmini

// TODO: Once the user serializes better, this method should be moved to the ./realms/RealmsTableContainer.tsx
public onRealmOpened = (path: string) => {
showRealmBrowser({
mode: RealmBrowserMode.Synced,
serverUrl: this.props.url,
path,
credentials: this.props.credentials,
} as ISyncedRealmBrowserOptions);
if (!this.state.isRealmOpening) {
this.setState({ isRealmOpening: true });
// Let the UI update before sync waiting on the window to appear
showRealmBrowser({
mode: RealmBrowserMode.Synced,
serverUrl: this.props.url,
path,
credentials: this.props.credentials,
} as ISyncedRealmBrowserOptions);
this.setState({ isRealmOpening: false });
}
}

public onTabChanged = (tab: Tab) => {
Expand Down

0 comments on commit e019e41

Please sign in to comment.