Merge pull request #4112 from Budibase/fix/template-row-limit

Home Screen UI fixes
This commit is contained in:
Peter Clement 2022-01-20 13:53:52 +00:00 committed by GitHub
commit 41b4045f7b
4 changed files with 114 additions and 131 deletions

View File

@ -35,7 +35,13 @@ Cypress.Commands.add("login", () => {
Cypress.Commands.add("createApp", name => { Cypress.Commands.add("createApp", name => {
cy.visit(`localhost:${Cypress.env("PORT")}/builder`) cy.visit(`localhost:${Cypress.env("PORT")}/builder`)
cy.wait(500) cy.wait(500)
cy.contains(/Start from scratch/).dblclick() cy.request(`${Cypress.config().baseUrl}api/applications?status=all`)
.its("body")
.then(body => {
if (body.length > 0) {
cy.get(".spectrum-Button").contains("Create app").click({ force: true })
}
})
cy.get(".spectrum-Modal").within(() => { cy.get(".spectrum-Modal").within(() => {
cy.get("input").eq(0).type(name).should("have.value", name).blur() cy.get("input").eq(0).type(name).should("have.value", name).blur()
cy.get(".spectrum-ButtonGroup").contains("Create app").click() cy.get(".spectrum-ButtonGroup").contains("Create app").click()

View File

@ -11,7 +11,6 @@
import { capitalise } from "helpers" import { capitalise } from "helpers"
import { goto } from "@roxi/routify" import { goto } from "@roxi/routify"
import { APP_NAME_REGEX } from "constants" import { APP_NAME_REGEX } from "constants"
import TemplateList from "./TemplateList.svelte"
export let template export let template
export let inline export let inline
@ -147,58 +146,34 @@
} }
</script> </script>
{#if showTemplateSelection} <ModalContent
<ModalContent title={"Name your app"}
title={"Get started quickly"} confirmText={template?.fromFile ? "Import app" : "Create app"}
showConfirmButton={false} onConfirm={createNewApp}
size="L" onCancel={inline ? onCancel : null}
onConfirm={() => { cancelText={inline ? "Back" : undefined}
template = {} showCloseIcon={!inline}
return false disabled={!valid}
}} >
showCancelButton={!inline} {#if template?.fromFile}
showCloseIcon={!inline} <Dropzone
> error={$touched.file && $errors.file}
<TemplateList gallery={false}
onSelect={(selected, { useImport } = {}) => { label="File to import"
if (!selected) { value={[$values.file]}
template = useImport ? { fromFile: true } : {} on:change={e => {
return $values.file = e.detail?.[0]
} $touched.file = true
template = selected
}} }}
/> />
</ModalContent> {/if}
{:else} <Input
<ModalContent bind:value={$values.name}
title={"Name your app"} error={$touched.name && $errors.name}
confirmText={template?.fromFile ? "Import app" : "Create app"} on:blur={() => ($touched.name = true)}
onConfirm={createNewApp} label="Name"
onCancel={inline ? onCancel : null} placeholder={$auth.user.firstName
cancelText={inline ? "Back" : undefined} ? `${$auth.user.firstName}'s app`
showCloseIcon={!inline} : "My app"}
disabled={!valid} />
> </ModalContent>
{#if template?.fromFile}
<Dropzone
error={$touched.file && $errors.file}
gallery={false}
label="File to import"
value={[$values.file]}
on:change={e => {
$values.file = e.detail?.[0]
$touched.file = true
}}
/>
{/if}
<Input
bind:value={$values.name}
error={$touched.name && $errors.name}
on:blur={() => ($touched.name = true)}
label="Name"
placeholder={$auth.user.firstName
? `${$auth.user.firstName}'s app`
: "My app"}
/>
</ModalContent>
{/if}

View File

@ -1,69 +0,0 @@
<script>
import { Heading, Layout, Icon } from "@budibase/bbui"
export let onSelect
</script>
<Layout gap="XS" noPadding>
<div class="template start-from-scratch" on:click={() => onSelect(null)}>
<div
class="background-icon"
style={`background: rgb(50, 50, 50); color: white;`}
>
<Icon name="Add" />
</div>
<Heading size="XS">Start from scratch</Heading>
<p class="detail">BLANK</p>
</div>
<div
class="template import"
on:click={() => onSelect(null, { useImport: true })}
>
<div
class="background-icon"
style={`background: rgb(50, 50, 50); color: white;`}
>
<Icon name="Add" />
</div>
<Heading size="XS">Import an app</Heading>
<p class="detail">BLANK</p>
</div>
</Layout>
<style>
.background-icon {
padding: 10px;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
width: 18px;
color: white;
}
.template {
min-height: 60px;
display: grid;
grid-gap: var(--layout-s);
grid-template-columns: auto 1fr auto;
border: 1px solid #494949;
align-items: center;
cursor: pointer;
border-radius: 4px;
background: var(--background-alt);
padding: 8px 16px;
}
.detail {
text-align: right;
}
.start-from-scratch {
background: var(--spectrum-global-color-gray-50);
margin-top: 20px;
}
.import {
background: var(--spectrum-global-color-gray-50);
}
</style>

View File

@ -11,6 +11,7 @@
notifications, notifications,
Body, Body,
Search, Search,
Icon,
} from "@budibase/bbui" } from "@budibase/bbui"
import Spinner from "components/common/Spinner.svelte" import Spinner from "components/common/Spinner.svelte"
import CreateAppModal from "components/start/CreateAppModal.svelte" import CreateAppModal from "components/start/CreateAppModal.svelte"
@ -27,6 +28,7 @@
import AppRow from "components/start/AppRow.svelte" import AppRow from "components/start/AppRow.svelte"
import { AppStatus } from "constants" import { AppStatus } from "constants"
import analytics, { Events } from "analytics" import analytics, { Events } from "analytics"
import Logo from "assets/bb-space-man.svg"
let sortBy = "name" let sortBy = "name"
let template let template
@ -78,6 +80,7 @@
} }
const initiateAppCreation = () => { const initiateAppCreation = () => {
template = {}
creationModal.show() creationModal.show()
creatingApp = true creatingApp = true
} }
@ -300,14 +303,26 @@
<div class="buttons"> <div class="buttons">
{#if cloud} {#if cloud}
<Button icon="Export" quiet secondary on:click={initiateAppsExport}> <Button
size="L"
icon="Export"
quiet
secondary
on:click={initiateAppsExport}
>
Export apps Export apps
</Button> </Button>
{/if} {/if}
<Button icon="Import" quiet secondary on:click={initiateAppImport}> <Button
icon="Import"
size="L"
quiet
secondary
on:click={initiateAppImport}
>
Import app Import app
</Button> </Button>
<Button icon="Add" cta on:click={initiateAppCreation}> <Button size="L" icon="Add" cta on:click={initiateAppCreation}>
Create app Create app
</Button> </Button>
</div> </div>
@ -389,9 +404,24 @@
{#if !enrichedApps.length && !creatingApp && loaded} {#if !enrichedApps.length && !creatingApp && loaded}
<div class="empty-wrapper"> <div class="empty-wrapper">
<Modal inline> <div class="centered">
<CreateAppModal {template} inline={true} /> <div class="main">
</Modal> <Layout gap="S" justifyItems="center">
<img class="img-size" alt="logo" src={Logo} />
<div class="new-screen-text">
<Detail size="M">Create a business app in minutes!</Detail>
</div>
<Button on:click={() => initiateAppCreation()} size="M" cta>
<div class="new-screen-button">
<div class="background-icon" style="color: white;">
<Icon name="Add" />
</div>
Create App
</div></Button
>
</Layout>
</div>
</div>
</div> </div>
{/if} {/if}
@ -474,12 +504,15 @@
} }
.grid { .grid {
height: 200px;
display: grid; display: grid;
overflow: hidden;
grid-gap: var(--spacing-xl); grid-gap: var(--spacing-xl);
grid-template-columns: repeat(auto-fill, minmax(270px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
grid-template-rows: minmax(70px, 1fr) minmax(100px, 1fr) minmax(0px, 0);
} }
.template-card { .template-card {
height: 80px; height: 70px;
border-radius: var(--border-radius-s); border-radius: var(--border-radius-s);
border: 1px solid var(--spectrum-global-color-gray-300); border: 1px solid var(--spectrum-global-color-gray-300);
cursor: pointer; cursor: pointer;
@ -533,4 +566,42 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.centered {
width: calc(100% - 350px);
height: calc(100% - 100px);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.main {
width: 300px;
}
.new-screen-text {
width: 160px;
text-align: center;
color: #2c2c2c;
font-weight: 600;
}
.new-screen-button {
margin-left: 5px;
height: 20px;
width: 100px;
display: flex;
align-items: center;
}
.img-size {
width: 160px;
height: 160px;
}
.background-icon {
margin-top: 4px;
margin-right: 4px;
}
</style> </style>