Reuse nav header
This commit is contained in:
parent
72c415e72c
commit
bdfdac9f25
|
@ -1,13 +1,10 @@
|
||||||
<script>
|
<script>
|
||||||
import { Icon, Body } from "@budibase/bbui"
|
|
||||||
import { apps, sideBarCollapsed } from "stores/portal"
|
import { apps, sideBarCollapsed } from "stores/portal"
|
||||||
import { params, goto } from "@roxi/routify"
|
import { params, goto } from "@roxi/routify"
|
||||||
import { tick } from "svelte"
|
|
||||||
import NavItem from "components/common/NavItem.svelte"
|
import NavItem from "components/common/NavItem.svelte"
|
||||||
|
import NavHeader from "components/common/NavHeader.svelte"
|
||||||
|
|
||||||
let searchInput
|
|
||||||
let searchString
|
let searchString
|
||||||
let searching = false
|
|
||||||
|
|
||||||
$: filteredApps = $apps
|
$: filteredApps = $apps
|
||||||
.filter(app => {
|
.filter(app => {
|
||||||
|
@ -21,39 +18,16 @@
|
||||||
const lowerB = b.name.toLowerCase()
|
const lowerB = b.name.toLowerCase()
|
||||||
return lowerA > lowerB ? 1 : -1
|
return lowerA > lowerB ? 1 : -1
|
||||||
})
|
})
|
||||||
|
|
||||||
const startSearching = async () => {
|
|
||||||
searching = true
|
|
||||||
searchString = ""
|
|
||||||
await tick()
|
|
||||||
searchInput.focus()
|
|
||||||
}
|
|
||||||
|
|
||||||
const stopSearching = () => {
|
|
||||||
searching = false
|
|
||||||
searchString = ""
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="side-bar" class:collapsed={$sideBarCollapsed}>
|
<div class="side-bar" class:collapsed={$sideBarCollapsed}>
|
||||||
<div class="side-bar-controls">
|
<div class="side-bar-controls">
|
||||||
{#if searching}
|
<NavHeader
|
||||||
<input
|
title="Apps"
|
||||||
bind:this={searchInput}
|
placeholder="Search for apps"
|
||||||
bind:value={searchString}
|
bind:value={searchString}
|
||||||
placeholder="Search for apps"
|
onAdd={() => $goto("./create")}
|
||||||
/>
|
/>
|
||||||
{:else}
|
|
||||||
<Body size="S">Apps</Body>
|
|
||||||
<Icon name="Search" size="S" hoverable on:click={startSearching} />
|
|
||||||
{/if}
|
|
||||||
<div class="rotational" class:rotated={searching}>
|
|
||||||
<Icon
|
|
||||||
name="Add"
|
|
||||||
hoverable
|
|
||||||
on:click={searching ? stopSearching : () => $goto("./create")}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="side-bar-nav">
|
<div class="side-bar-nav">
|
||||||
<NavItem
|
<NavItem
|
||||||
|
@ -103,44 +77,13 @@
|
||||||
gap: var(--spacing-l);
|
gap: var(--spacing-l);
|
||||||
padding: 0 var(--spacing-l);
|
padding: 0 var(--spacing-l);
|
||||||
}
|
}
|
||||||
.side-bar-controls :global(.spectrum-Body),
|
|
||||||
.side-bar-controls input {
|
|
||||||
flex: 1 1 auto;
|
|
||||||
}
|
|
||||||
.side-bar-controls :global(.spectrum-Icon) {
|
.side-bar-controls :global(.spectrum-Icon) {
|
||||||
color: var(--spectrum-global-color-gray-700);
|
color: var(--spectrum-global-color-gray-700);
|
||||||
}
|
}
|
||||||
|
|
||||||
input {
|
|
||||||
outline: none;
|
|
||||||
border: none;
|
|
||||||
max-width: none;
|
|
||||||
flex: 1 1 auto;
|
|
||||||
color: var(--spectrum-global-color-gray-800);
|
|
||||||
font-size: 14px;
|
|
||||||
padding: 0;
|
|
||||||
transition: border 130ms ease-out;
|
|
||||||
font-family: var(--font-sans);
|
|
||||||
background: inherit;
|
|
||||||
}
|
|
||||||
input::placeholder {
|
|
||||||
color: var(--spectrum-global-color-gray-700);
|
|
||||||
transition: color 130ms ease-out;
|
|
||||||
}
|
|
||||||
input:hover::placeholder {
|
|
||||||
color: var(--spectrum-global-color-gray-800);
|
|
||||||
}
|
|
||||||
|
|
||||||
.side-bar-nav {
|
.side-bar-nav {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.rotational {
|
|
||||||
transition: transform 130ms ease-out;
|
|
||||||
}
|
|
||||||
div.rotational.rotated {
|
|
||||||
transform: rotate(45deg);
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
Loading…
Reference in New Issue