reuse modal for edit and create and add delete function
This commit is contained in:
parent
a0dacc9717
commit
f00034544f
|
@ -0,0 +1,89 @@
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
ModalContent,
|
||||||
|
Button,
|
||||||
|
Input,
|
||||||
|
Checkbox,
|
||||||
|
Heading,
|
||||||
|
notifications,
|
||||||
|
} from "@budibase/bbui"
|
||||||
|
import { environment } from "stores/portal"
|
||||||
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
||||||
|
|
||||||
|
export let save
|
||||||
|
export let row
|
||||||
|
|
||||||
|
let deleteDialog
|
||||||
|
let name = row?.name || ""
|
||||||
|
let productionValue
|
||||||
|
let developmentValue
|
||||||
|
|
||||||
|
let useProductionValue = true
|
||||||
|
|
||||||
|
const deleteVariable = name => {
|
||||||
|
try {
|
||||||
|
environment.deleteVariable(name)
|
||||||
|
notifications.success("Environment variable deleted")
|
||||||
|
} catch (err) {
|
||||||
|
notifications.error(err.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ModalContent
|
||||||
|
onConfirm={() =>
|
||||||
|
save({
|
||||||
|
name,
|
||||||
|
production: productionValue,
|
||||||
|
development: developmentValue,
|
||||||
|
})}
|
||||||
|
title={!row ? "Add new environment variable" : "Edit environment variable"}
|
||||||
|
>
|
||||||
|
<Input disabled={row} label="Name" bind:value={name} />
|
||||||
|
<div>
|
||||||
|
<Heading size="XS">Production</Heading>
|
||||||
|
<Input
|
||||||
|
type="password"
|
||||||
|
label="Value"
|
||||||
|
on:change={e => {
|
||||||
|
productionValue = e.detail
|
||||||
|
if (useProductionValue) {
|
||||||
|
developmentValue = e.detail
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
value={productionValue}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Heading size="XS">Development</Heading>
|
||||||
|
<Input
|
||||||
|
type="password"
|
||||||
|
on:change={e => {
|
||||||
|
developmentValue = e.target.value
|
||||||
|
}}
|
||||||
|
disabled={useProductionValue}
|
||||||
|
label="Value"
|
||||||
|
value={useProductionValue ? productionValue : developmentValue}
|
||||||
|
/>
|
||||||
|
<Checkbox bind:value={useProductionValue} text="Use production value" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer" slot="footer">
|
||||||
|
{#if row}
|
||||||
|
<Button on:click={deleteDialog.show} warning>Delete</Button>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</ModalContent>
|
||||||
|
|
||||||
|
<ConfirmDialog
|
||||||
|
bind:this={deleteDialog}
|
||||||
|
onOk={() => {
|
||||||
|
deleteVariable(row.name)
|
||||||
|
}}
|
||||||
|
okText="Delete Environment Variable"
|
||||||
|
title="Confirm Deletion"
|
||||||
|
>
|
||||||
|
Are you sure you wish to delete the environment variable
|
||||||
|
<i>{row.name}?</i>
|
||||||
|
This action cannot be undone.
|
||||||
|
</ConfirmDialog>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<script>
|
||||||
|
import { ActionButton, Modal } from "@budibase/bbui"
|
||||||
|
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
||||||
|
import { environment } from "stores/portal"
|
||||||
|
import CreateEditVariableModal from "./CreateEditVariableModal.svelte"
|
||||||
|
|
||||||
|
export let row
|
||||||
|
|
||||||
|
let editVariableModal
|
||||||
|
let deleteDialog
|
||||||
|
|
||||||
|
const save = data => {
|
||||||
|
environment.updateVariable(data)
|
||||||
|
editVariableModal.hide()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ActionButton size="S" on:click={editVariableModal.show}>Edit</ActionButton>
|
||||||
|
|
||||||
|
<Modal bind:this={editVariableModal}>
|
||||||
|
<CreateEditVariableModal {row} {save} />
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<ConfirmDialog
|
||||||
|
bind:this={deleteDialog}
|
||||||
|
onOk={() => {
|
||||||
|
environment.deleteVariable(row.name)
|
||||||
|
}}
|
||||||
|
okText="Delete Environment Variable"
|
||||||
|
title="Confirm Deletion"
|
||||||
|
>
|
||||||
|
Are you sure you wish to delete the environment variable
|
||||||
|
<i>{row.name}?</i>
|
||||||
|
This action cannot be undone.
|
||||||
|
</ConfirmDialog>
|
|
@ -1,69 +0,0 @@
|
||||||
<script>
|
|
||||||
import {
|
|
||||||
ActionButton,
|
|
||||||
Button,
|
|
||||||
Modal,
|
|
||||||
ModalContent,
|
|
||||||
Input,
|
|
||||||
Heading,
|
|
||||||
Checkbox,
|
|
||||||
} from "@budibase/bbui"
|
|
||||||
import ConfirmDialog from "components/common/ConfirmDialog.svelte"
|
|
||||||
|
|
||||||
export let row
|
|
||||||
|
|
||||||
let editVariableModal
|
|
||||||
let deleteDialog
|
|
||||||
|
|
||||||
let productionTouched = false
|
|
||||||
let developmentTouched = false
|
|
||||||
|
|
||||||
let productionValue = "******"
|
|
||||||
let developmentValue = "******"
|
|
||||||
|
|
||||||
let useProductionValue
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<ActionButton size="S" on:click={editVariableModal.show}>Edit</ActionButton>
|
|
||||||
|
|
||||||
<Modal bind:this={editVariableModal}>
|
|
||||||
<ModalContent disabled={!productionTouched && !developmentTouched}>
|
|
||||||
<Input label="Name" value={row.name} />
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<Heading size="XS">Production</Heading>
|
|
||||||
<Input
|
|
||||||
on:change={() => (productionTouched = true)}
|
|
||||||
label="Value"
|
|
||||||
bind:value={productionValue}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Heading size="XS">Development</Heading>
|
|
||||||
<Input
|
|
||||||
disabled={useProductionValue}
|
|
||||||
on:change={() => (developmentTouched = true)}
|
|
||||||
label="Value"
|
|
||||||
bind:value={developmentValue}
|
|
||||||
/>
|
|
||||||
<Checkbox bind:value={useProductionValue} text="Use production value" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="footer" slot="footer">
|
|
||||||
<Button on:click={deleteDialog.show} warning>Delete</Button>
|
|
||||||
</div>
|
|
||||||
</ModalContent>
|
|
||||||
</Modal>
|
|
||||||
|
|
||||||
<ConfirmDialog
|
|
||||||
bind:this={deleteDialog}
|
|
||||||
onOk={() => {
|
|
||||||
console.log("delete")
|
|
||||||
}}
|
|
||||||
okText="Delete Environment Variable"
|
|
||||||
title="Confirm Deletion"
|
|
||||||
>
|
|
||||||
Are you sure you wish to delete the environment variable
|
|
||||||
<i>{row.name}?</i>
|
|
||||||
This action cannot be undone.
|
|
||||||
</ConfirmDialog>
|
|
|
@ -6,21 +6,15 @@
|
||||||
Button,
|
Button,
|
||||||
Divider,
|
Divider,
|
||||||
Modal,
|
Modal,
|
||||||
ModalContent,
|
|
||||||
Table,
|
Table,
|
||||||
Input,
|
|
||||||
Checkbox,
|
|
||||||
} from "@budibase/bbui"
|
} from "@budibase/bbui"
|
||||||
import { envVars } from "stores/portal"
|
import { environment } from "stores/portal"
|
||||||
import { onMount } from "svelte"
|
import { onMount } from "svelte"
|
||||||
import EditVariableModal from "./_components/editVariableModal.svelte"
|
import CreateEditVariableModal from "./_components/CreateEditVariableModal.svelte"
|
||||||
|
import EditVariableColumn from "./_components/EditVariableColumn.svelte"
|
||||||
|
|
||||||
let modal
|
let modal
|
||||||
|
|
||||||
let useProductionValue = true
|
|
||||||
|
|
||||||
let developmentValue
|
|
||||||
let productionValue
|
|
||||||
const schema = {
|
const schema = {
|
||||||
name: {
|
name: {
|
||||||
width: "2fr",
|
width: "2fr",
|
||||||
|
@ -32,11 +26,16 @@
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const customRenderers = [{ column: "edit", component: EditVariableModal }]
|
const customRenderers = [{ column: "edit", component: EditVariableColumn }]
|
||||||
|
|
||||||
onMount(async () => {
|
onMount(async () => {
|
||||||
await envVars.load()
|
await environment.loadVariables()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const save = data => {
|
||||||
|
environment.createVariable(data)
|
||||||
|
modal.hide()
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Layout noPadding>
|
<Layout noPadding>
|
||||||
|
@ -50,7 +49,7 @@
|
||||||
<Layout noPadding>
|
<Layout noPadding>
|
||||||
<Table
|
<Table
|
||||||
{schema}
|
{schema}
|
||||||
data={$envVars}
|
data={$environment}
|
||||||
allowEditColumns={false}
|
allowEditColumns={false}
|
||||||
allowEditRows={false}
|
allowEditRows={false}
|
||||||
allowSelectRows={false}
|
allowSelectRows={false}
|
||||||
|
@ -63,30 +62,7 @@
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
<Modal bind:this={modal}>
|
<Modal bind:this={modal}>
|
||||||
<ModalContent title="Add new environment variable">
|
<CreateEditVariableModal {save} />
|
||||||
<Input label="Name" value="" />
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<Heading size="XS">Production</Heading>
|
|
||||||
<Input type="password" label="Value" bind:value={productionValue} />
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<Heading size="XS">Development</Heading>
|
|
||||||
<Input
|
|
||||||
type="password"
|
|
||||||
disabled={useProductionValue}
|
|
||||||
label="Value"
|
|
||||||
bind:value={developmentValue}
|
|
||||||
/>
|
|
||||||
<Checkbox
|
|
||||||
on:change={() => {
|
|
||||||
developmentValue = productionValue
|
|
||||||
}}
|
|
||||||
bind:value={useProductionValue}
|
|
||||||
text="Use production value"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</ModalContent>
|
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
import { writable } from "svelte/store"
|
|
||||||
import { API } from "api"
|
|
||||||
|
|
||||||
export function createEnvVarsStore() {
|
|
||||||
const { subscribe, set, update } = writable([])
|
|
||||||
|
|
||||||
async function load() {
|
|
||||||
// const envVars = await API.fetchEnvVars()
|
|
||||||
let testVars = ["blah", "blah123"]
|
|
||||||
const vars = testVars.map(name => ({ name }))
|
|
||||||
console.log(vars)
|
|
||||||
set(vars)
|
|
||||||
}
|
|
||||||
|
|
||||||
async function create() {
|
|
||||||
const envVar = await API.createEnvVar()
|
|
||||||
update(envVars => [envVar, ...envVars])
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
subscribe,
|
|
||||||
load,
|
|
||||||
create,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const envVars = createEnvVarsStore()
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { writable } from "svelte/store"
|
||||||
|
import { API } from "api"
|
||||||
|
|
||||||
|
export function createEnvironmentStore() {
|
||||||
|
const { subscribe, set, update } = writable([])
|
||||||
|
|
||||||
|
async function loadVariables() {
|
||||||
|
let envVars = []
|
||||||
|
envVars = await API.fetchEnvironmentVariables()
|
||||||
|
const mappedVars = envVars.variables.map(name => ({ name }))
|
||||||
|
set(mappedVars)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function createVariable(data) {
|
||||||
|
console.log(data)
|
||||||
|
await API.createEnvironmentVariable(data)
|
||||||
|
let mappedVar = { name: data.name }
|
||||||
|
update(envVars => [mappedVar, ...envVars])
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteVariable(varName) {
|
||||||
|
await API.deleteEnvironmentVariable(varName)
|
||||||
|
update(envVars => envVars.filter(envVar => envVar.name !== varName))
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateVariable(data) {
|
||||||
|
await API.updateEnvironmentVariable(data)
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
subscribe,
|
||||||
|
loadVariables,
|
||||||
|
createVariable,
|
||||||
|
deleteVariable,
|
||||||
|
updateVariable,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const environment = createEnvironmentStore()
|
|
@ -11,4 +11,4 @@ export { groups } from "./groups"
|
||||||
export { plugins } from "./plugins"
|
export { plugins } from "./plugins"
|
||||||
export { backups } from "./backups"
|
export { backups } from "./backups"
|
||||||
export { overview } from "./overview"
|
export { overview } from "./overview"
|
||||||
export { envVars } from "./envVars"
|
export { environment } from "./environment"
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
export const buildEnvironmentVariableEndpoints = API => ({
|
|
||||||
/**
|
|
||||||
* Fetches a list of environment variables
|
|
||||||
*/
|
|
||||||
fetchVariables: async () => {
|
|
||||||
return await API.get({
|
|
||||||
url: `/api/env/variables`,
|
|
||||||
json: false,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
createVariable: async () => {
|
|
||||||
return await API.get({
|
|
||||||
url: `/api/env/variables`,
|
|
||||||
json: false,
|
|
||||||
})
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
export const buildEnvironmentVariableEndpoints = API => ({
|
||||||
|
/**
|
||||||
|
* Fetches a list of environment variables
|
||||||
|
*/
|
||||||
|
fetchEnvironmentVariables: async () => {
|
||||||
|
return await API.get({
|
||||||
|
url: `/api/env/variables`,
|
||||||
|
json: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
createEnvironmentVariable: async data => {
|
||||||
|
return await API.post({
|
||||||
|
url: `/api/env/variables`,
|
||||||
|
body: data,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
deleteEnvironmentVariable: async varName => {
|
||||||
|
return await API.delete({
|
||||||
|
url: `/api/env/variables/${varName}`,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
updateEnvironmentVariable: async data => {
|
||||||
|
return await API.patch({
|
||||||
|
url: `/api/env/variables/${data.name}`,
|
||||||
|
body: data,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
|
@ -26,7 +26,7 @@ import { buildLicensingEndpoints } from "./licensing"
|
||||||
import { buildGroupsEndpoints } from "./groups"
|
import { buildGroupsEndpoints } from "./groups"
|
||||||
import { buildPluginEndpoints } from "./plugins"
|
import { buildPluginEndpoints } from "./plugins"
|
||||||
import { buildBackupsEndpoints } from "./backups"
|
import { buildBackupsEndpoints } from "./backups"
|
||||||
|
import { buildEnvironmentVariableEndpoints } from "./environmentVariables"
|
||||||
const defaultAPIClientConfig = {
|
const defaultAPIClientConfig = {
|
||||||
/**
|
/**
|
||||||
* Certain definitions can't change at runtime for client apps, such as the
|
* Certain definitions can't change at runtime for client apps, such as the
|
||||||
|
@ -247,5 +247,6 @@ export const createAPIClient = config => {
|
||||||
...buildGroupsEndpoints(API),
|
...buildGroupsEndpoints(API),
|
||||||
...buildPluginEndpoints(API),
|
...buildPluginEndpoints(API),
|
||||||
...buildBackupsEndpoints(API),
|
...buildBackupsEndpoints(API),
|
||||||
|
...buildEnvironmentVariableEndpoints(API),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue