budibase/packages/builder/src/components/start/ChooseIconModal.svelte

115 lines
2.1 KiB
Svelte
Raw Normal View History

2021-12-08 19:51:24 +01:00
<script>
2021-12-08 19:52:06 +01:00
import { ModalContent, Modal, Icon, ColorPicker, Label } from "@budibase/bbui"
2021-12-08 19:51:24 +01:00
import { apps } from "stores/portal"
export let app
let modal
let selectedIcon
let selectedColor
let iconsList = [
2021-12-09 10:21:38 +01:00
"Actions",
"Algorithm",
"App",
"Briefcase",
"Money",
"ShoppingCart",
"Form",
"Help",
"Monitoring",
"Sandbox",
"Project",
"Organisations",
"Magnify",
"Launch",
"Actions",
2021-12-08 19:51:24 +01:00
]
export const show = () => {
modal.show()
}
export const hide = () => {
modal.hide()
}
const onCancel = () => {
hide()
}
const changeColor = val => {
selectedColor = val
}
const save = async () => {
await apps.updateIcon(app.instance._id, {
name: selectedIcon,
color: selectedColor,
})
}
</script>
2021-12-08 19:52:06 +01:00
<Modal bind:this={modal} on:hide={onCancel}>
2021-12-08 19:51:24 +01:00
<ModalContent
title={"Edit Icon"}
confirmText={"Save"}
onConfirm={() => save()}
>
<div class="scrollable-icons">
<div class="title-spacing">
<Label>Select an Icon:</Label>
</div>
<div class="grid">
{#each iconsList as item}
<div
class="icon-item"
2021-12-09 10:21:38 +01:00
style="color: {item === selectedIcon ? selectedColor : ''}"
2021-12-08 19:51:24 +01:00
on:click={() => (selectedIcon = item.icon)}
>
2021-12-09 10:21:38 +01:00
<Icon name={item} />
2021-12-08 19:51:24 +01:00
</div>
{/each}
</div>
</div>
<div class="color-selection">
<div>
<Label>Select a Color:</Label>
</div>
<div class="color-selection-item">
<ColorPicker
value={selectedColor}
on:change={e => changeColor(e.detail)}
/>
</div>
</div>
</ModalContent>
</Modal>
<style>
.scrollable-icons {
overflow-y: auto;
2021-12-09 10:21:38 +01:00
height: 150px;
2021-12-08 19:51:24 +01:00
}
.grid {
display: grid;
grid-gap: 20px;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
}
.color-selection {
display: flex;
align-items: center;
}
.color-selection-item {
margin-left: 20px;
}
.title-spacing {
margin-bottom: 20px;
}
.icon-item {
cursor: pointer;
}
</style>