2019-08-27 18:32:56 +12:00
|
|
|
<script>
|
|
|
|
|
|
|
|
import Textbox from "./Textbox.svelte";
|
|
|
|
import Form from "./Form.svelte";
|
|
|
|
import Button from "./Button.svelte";
|
2019-09-19 15:35:40 +12:00
|
|
|
import { authenticate } from "./api";
|
2019-08-27 18:32:56 +12:00
|
|
|
|
|
|
|
export let usernameLabel = "Username";
|
|
|
|
export let passwordLabel = "Password";
|
|
|
|
export let loginButtonLabel = "Login";
|
|
|
|
export let loginRedirect = "";
|
2019-09-19 15:35:40 +12:00
|
|
|
export let logo = "";
|
|
|
|
export let buttonClass = "";
|
2019-08-27 18:32:56 +12:00
|
|
|
|
2019-09-28 04:03:31 +12:00
|
|
|
export let _bb;
|
2019-09-26 16:40:58 +12:00
|
|
|
|
2019-08-27 18:32:56 +12:00
|
|
|
let username = "";
|
|
|
|
let password = "";
|
2019-09-19 15:35:40 +12:00
|
|
|
let busy = false;
|
|
|
|
let incorrect = false;
|
|
|
|
|
|
|
|
const login = () => {
|
|
|
|
busy = true;
|
|
|
|
authenticate(username, password)
|
|
|
|
.then(r => {
|
|
|
|
busy = false;
|
|
|
|
if(r.status === 200) {
|
2019-09-26 16:40:58 +12:00
|
|
|
return r.json();
|
2019-09-19 15:35:40 +12:00
|
|
|
} else {
|
|
|
|
incorrect = true;
|
2019-09-26 16:40:58 +12:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.then(user => {
|
|
|
|
if(user) {
|
|
|
|
localStorage.setItem("budibase:user", user);
|
|
|
|
location.reload();
|
2019-09-19 15:35:40 +12:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2019-08-27 18:32:56 +12:00
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<div class="root">
|
|
|
|
|
|
|
|
<div class="content">
|
|
|
|
|
2019-09-19 15:35:40 +12:00
|
|
|
{#if logo}
|
2019-08-27 18:32:56 +12:00
|
|
|
<div class="logo-container">
|
|
|
|
<img src={logo} alt="logo"/>
|
|
|
|
</div>
|
2019-09-19 15:35:40 +12:00
|
|
|
{/if}
|
2019-08-27 18:32:56 +12:00
|
|
|
|
2019-09-19 15:35:40 +12:00
|
|
|
<div class="form-root">
|
|
|
|
<div class="label">
|
|
|
|
{usernameLabel}
|
|
|
|
</div>
|
|
|
|
<div class="control">
|
2019-08-27 18:32:56 +12:00
|
|
|
<Textbox bind:value={username} />
|
2019-09-19 15:35:40 +12:00
|
|
|
</div>
|
|
|
|
<div class="label">
|
|
|
|
{passwordLabel}
|
|
|
|
</div>
|
|
|
|
<div class="control">
|
2019-08-27 18:32:56 +12:00
|
|
|
<Textbox bind:value={password} hideValue=true />
|
2019-09-19 15:35:40 +12:00
|
|
|
</div>
|
|
|
|
</div>
|
2019-08-27 18:32:56 +12:00
|
|
|
|
|
|
|
<div class="login-button-container">
|
2019-09-19 15:35:40 +12:00
|
|
|
<Button disabled={busy}
|
|
|
|
on:click={login}
|
|
|
|
class={buttonClass}>
|
|
|
|
{loginButtonLabel}
|
|
|
|
</Button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
{#if incorrect}
|
|
|
|
<div class="incorrect-details-panel">
|
|
|
|
Incorrect username or password
|
2019-08-27 18:32:56 +12:00
|
|
|
</div>
|
2019-09-19 15:35:40 +12:00
|
|
|
{/if}
|
2019-08-27 18:32:56 +12:00
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
|
|
|
.root {
|
|
|
|
height: 100%;
|
|
|
|
display:grid;
|
|
|
|
grid-template-columns: [left] 1fr [middle] auto [right] 1fr;
|
|
|
|
grid-template-rows: [top] 1fr [center] auto [bottom] 1fr;
|
|
|
|
}
|
|
|
|
|
|
|
|
.content {
|
|
|
|
grid-column-start: middle;
|
|
|
|
grid-row-start: center;
|
|
|
|
width: 400px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.logo-container {
|
|
|
|
margin-bottom: 20px
|
|
|
|
}
|
|
|
|
|
|
|
|
.logo-container > img {
|
|
|
|
max-width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
.login-button-container {
|
|
|
|
text-align: right;
|
|
|
|
margin-top: 20px;
|
|
|
|
}
|
|
|
|
|
2019-09-19 15:35:40 +12:00
|
|
|
.incorrect-details-panel {
|
|
|
|
margin-top: 30px;
|
|
|
|
padding: 10px;
|
|
|
|
border-style: solid;
|
|
|
|
border-width: 1px;
|
|
|
|
border-color: maroon;
|
|
|
|
border-radius: 1px;
|
|
|
|
text-align: center;
|
|
|
|
color: maroon;
|
|
|
|
background-color: mistyrose;
|
|
|
|
}
|
|
|
|
|
|
|
|
.form-root {
|
|
|
|
display: grid;
|
|
|
|
grid-template-columns: [label] auto [control] 1fr; /* [overflow] auto;*/
|
|
|
|
}
|
|
|
|
|
|
|
|
.label {
|
|
|
|
grid-column-start: label;
|
|
|
|
padding: 5px 10px;
|
|
|
|
vertical-align: middle;
|
|
|
|
}
|
|
|
|
.control {
|
|
|
|
grid-column-start: control;
|
|
|
|
padding: 5px 10px;
|
|
|
|
}
|
|
|
|
|
2019-08-27 18:32:56 +12:00
|
|
|
</style>
|