tidy up and lint ✨
This commit is contained in:
parent
d08db301af
commit
7e2e90e23c
|
@ -83,7 +83,9 @@ export const getBackendUiStore = () => {
|
|||
delete: async model => {
|
||||
await api.delete(`/api/models/${model._id}/${model._rev}`)
|
||||
store.update(state => {
|
||||
state.models = state.models.filter(existing => existing._id !== model._id)
|
||||
state.models = state.models.filter(
|
||||
existing => existing._id !== model._id
|
||||
)
|
||||
state.selectedModel = state.models[0] || {}
|
||||
return state
|
||||
})
|
||||
|
@ -105,7 +107,7 @@ export const getBackendUiStore = () => {
|
|||
store.actions.models.save(state.draftModel)
|
||||
return state
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
views: {
|
||||
select: view =>
|
||||
|
@ -126,7 +128,9 @@ export const getBackendUiStore = () => {
|
|||
await api.post(`/api/views`, view)
|
||||
|
||||
store.update(state => {
|
||||
const viewModel = state.models.find(model => model._id === view.modelId)
|
||||
const viewModel = state.models.find(
|
||||
model => model._id === view.modelId
|
||||
)
|
||||
// TODO: Cleaner?
|
||||
if (!viewModel.views) viewModel.views = {}
|
||||
if (view.originalName) delete viewModel.views[view.originalName]
|
||||
|
@ -136,7 +140,7 @@ export const getBackendUiStore = () => {
|
|||
state.selectedView = view
|
||||
return state
|
||||
})
|
||||
}
|
||||
},
|
||||
},
|
||||
users: {
|
||||
create: user =>
|
||||
|
|
|
@ -27,7 +27,10 @@
|
|||
let search
|
||||
|
||||
$: {
|
||||
if ($backendUiStore.selectedView && $backendUiStore.selectedView.name.startsWith("all_")) {
|
||||
if (
|
||||
$backendUiStore.selectedView &&
|
||||
$backendUiStore.selectedView.name.startsWith("all_")
|
||||
) {
|
||||
api.fetchDataForView($backendUiStore.selectedView).then(records => {
|
||||
data = records || []
|
||||
})
|
||||
|
|
|
@ -30,37 +30,36 @@
|
|||
},
|
||||
{
|
||||
name: "min",
|
||||
key: "value.min"
|
||||
key: "value.min",
|
||||
},
|
||||
{
|
||||
name: "max",
|
||||
key: "value.max"
|
||||
key: "value.max",
|
||||
},
|
||||
{
|
||||
name: "sumsqr",
|
||||
key: "value.sumsqr"
|
||||
key: "value.sumsqr",
|
||||
},
|
||||
{
|
||||
name: "count",
|
||||
key: "value.count"
|
||||
key: "value.count",
|
||||
},
|
||||
{
|
||||
name: "avg",
|
||||
key: "value.avg"
|
||||
}
|
||||
key: "value.avg",
|
||||
},
|
||||
]
|
||||
|
||||
export let view = {}
|
||||
|
||||
let data = []
|
||||
|
||||
$: viewName = view.name
|
||||
$: !viewName.startsWith("all_") && fetchViewData(viewName)
|
||||
$: !view.name.startsWith("all_") && fetchViewData(view)
|
||||
|
||||
async function fetchViewData(viewName) {
|
||||
let QUERY_VIEW_URL = `/api/views/${viewName}?stats=true`
|
||||
if (view.groupBy) {
|
||||
QUERY_VIEW_URL += `&group=${view.groupBy}`
|
||||
async function fetchViewData({ name, groupBy }) {
|
||||
let QUERY_VIEW_URL = `/api/views/${name}?stats=true`
|
||||
if (groupBy) {
|
||||
QUERY_VIEW_URL += `&group=${groupBy}`
|
||||
}
|
||||
|
||||
const response = await api.get(QUERY_VIEW_URL)
|
||||
|
@ -68,11 +67,7 @@
|
|||
}
|
||||
</script>
|
||||
|
||||
<Table
|
||||
title={decodeURI(view.name)}
|
||||
columns={COLUMNS}
|
||||
{data}
|
||||
>
|
||||
<CalculationPopover {view} />
|
||||
<GroupByPopover {view} />
|
||||
<Table title={decodeURI(view.name)} columns={COLUMNS} {data}>
|
||||
<CalculationPopover {view} />
|
||||
<GroupByPopover {view} />
|
||||
</Table>
|
|
@ -19,8 +19,7 @@
|
|||
$: viewModel = $backendUiStore.models.find(
|
||||
({ _id }) => _id === $backendUiStore.selectedView.modelId
|
||||
)
|
||||
$: fields =
|
||||
viewModel && Object.keys(viewModel.schema)
|
||||
$: fields = viewModel && Object.keys(viewModel.schema)
|
||||
|
||||
function saveView() {
|
||||
backendUiStore.actions.views.save(view)
|
||||
|
@ -40,7 +39,7 @@
|
|||
<div class="input-group-row">
|
||||
<p>Group By</p>
|
||||
<Select secondary thin bind:value={view.groupBy}>
|
||||
<option value={false}>None</option>
|
||||
<option value={false}>Remove Group By</option>
|
||||
{#each fields as field}
|
||||
<option value={field}>{field}</option>
|
||||
{/each}
|
||||
|
|
|
@ -14,12 +14,17 @@
|
|||
$: fields = Object.keys($backendUiStore.selectedModel.schema).filter(key => {
|
||||
return $backendUiStore.selectedModel.schema[key].type === "number"
|
||||
})
|
||||
$: views = $backendUiStore.models.flatMap(model => Object.keys(model.views))
|
||||
|
||||
function saveView() {
|
||||
if (views.includes(name)) {
|
||||
notifier.danger(`View exists with name ${name}.`)
|
||||
return
|
||||
}
|
||||
backendUiStore.actions.views.save({
|
||||
name,
|
||||
modelId: $backendUiStore.selectedModel._id,
|
||||
field
|
||||
field,
|
||||
})
|
||||
notifier.success(`View ${name} created`)
|
||||
dropdown.hide()
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
function save() {
|
||||
backendUiStore.actions.views.save({
|
||||
originalName,
|
||||
...view
|
||||
...view,
|
||||
})
|
||||
notifier.success("Renamed View Successfully.")
|
||||
hideEditor()
|
||||
|
|
|
@ -21,6 +21,7 @@ exports.save = async function(ctx) {
|
|||
const modelToSave = {
|
||||
type: "model",
|
||||
_id: newid(),
|
||||
views: {},
|
||||
...ctx.request.body,
|
||||
}
|
||||
|
||||
|
|
|
@ -83,14 +83,14 @@ exports.fetchView = async function(ctx) {
|
|||
const { stats, group } = ctx.query
|
||||
const response = await db.query(`database/${ctx.params.viewName}`, {
|
||||
include_docs: !stats,
|
||||
group
|
||||
group,
|
||||
})
|
||||
|
||||
if (stats) {
|
||||
for (row of response.rows) {
|
||||
for (let row of response.rows) {
|
||||
row.value = {
|
||||
...row.value,
|
||||
avg: row.value.sum / row.value.count
|
||||
avg: row.value.sum / row.value.count,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -98,7 +98,6 @@ exports.fetchView = async function(ctx) {
|
|||
}
|
||||
|
||||
ctx.body = response.rows
|
||||
|
||||
}
|
||||
|
||||
exports.fetchModelRecords = async function(ctx) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const CouchDB = require("../../../db")
|
||||
const statsViewTemplate = require("./viewBuilder");
|
||||
const statsViewTemplate = require("./viewBuilder")
|
||||
|
||||
const controller = {
|
||||
fetch: async ctx => {
|
||||
|
@ -43,12 +43,11 @@ const controller = {
|
|||
|
||||
await db.put(designDoc)
|
||||
|
||||
|
||||
// add views to model document
|
||||
const model = await db.get(ctx.request.body.modelId)
|
||||
model.views = {
|
||||
...(model.views ? model.views : {}),
|
||||
[newView.name]: view.meta
|
||||
[newView.name]: view.meta,
|
||||
}
|
||||
|
||||
if (originalName) {
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
function statsViewTemplate({
|
||||
field,
|
||||
modelId,
|
||||
groupBy
|
||||
}) {
|
||||
function statsViewTemplate({ field, modelId, groupBy }) {
|
||||
return {
|
||||
meta: {
|
||||
field,
|
||||
|
@ -14,15 +10,15 @@ function statsViewTemplate({
|
|||
max: "number",
|
||||
count: "number",
|
||||
sumsqr: "number",
|
||||
avg: "number"
|
||||
}
|
||||
avg: "number",
|
||||
},
|
||||
},
|
||||
map: `function (doc) {
|
||||
if (doc.modelId === "${modelId}") {
|
||||
emit(doc["${groupBy || "_id"}"], doc["${field}"]);
|
||||
}
|
||||
}`,
|
||||
reduce: "_stats"
|
||||
reduce: "_stats",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ const server = http.createServer(app.callback())
|
|||
|
||||
server.on("close", () => console.log("Server Closed"))
|
||||
|
||||
process.on('SIGINT', () => process.exit(1));
|
||||
process.on("SIGINT", () => process.exit(1))
|
||||
|
||||
module.exports = server.listen(env.PORT || 4001, () => {
|
||||
console.log(`Budibase running on ${JSON.stringify(server.address())}`)
|
||||
|
|
Loading…
Reference in New Issue