bulk deletes on grid

This commit is contained in:
Martin McKeaveney 2020-10-13 16:17:07 +01:00
parent 8bac014955
commit 2b3b41e778
7 changed files with 47 additions and 15 deletions

View File

@ -44,7 +44,10 @@
function checkValid(evt) {
const tableName = evt.target.value
if (originalName !== tableName && $backendUiStore.models?.some(model => model.name === tableName)) {
if (
originalName !== tableName &&
$backendUiStore.models?.some(model => model.name === tableName)
) {
error = `Table with name ${tableName} already exists. Please choose another name.`
return
}
@ -59,11 +62,12 @@
{#if editing}
<div class="actions">
<h5>Edit Table</h5>
<Input
label="Table Name" thin bind:value={table.name}
<Input
label="Table Name"
thin
bind:value={table.name}
on:input={checkValid}
{error}
/>
{error} />
<Select
label="Primary Display Column"
thin

View File

@ -73,7 +73,7 @@
<Label extraSmall grey>Current Users</Label>
{#await fetchUsersPromise}
Loading...
{:then users}
{:then [object Object]}
<ul>
{#each users as user}
<li>
@ -83,7 +83,7 @@
<li>No Users found</li>
{/each}
</ul>
{:catch error}
{:catch [object Object]}
Something went wrong when trying to fetch users. Please refresh (CMD + R /
CTRL + R) the page and try again.
{/await}

View File

@ -24,7 +24,7 @@
<div class="spinner-container">
<Spinner size="30" />
</div>
{:then apps}
{:then [object Object]}
<div class="inner">
<div>
<div>
@ -36,7 +36,7 @@
</div>
</div>
</div>
{:catch err}
{:catch [object Object]}
<h1 style="color:red">{err}</h1>
{/await}
</div>

View File

@ -20,7 +20,7 @@
<div class="spinner-container">
<Spinner size="30" />
</div>
{:then templates}
{:then [object Object]}
<div class="templates">
{#each templates as template}
<div class="templates-card">
@ -39,7 +39,7 @@
</div>
{/each}
</div>
{:catch err}
{:catch [object Object]}
<h1 style="color:red">{err}</h1>
{/await}
</div>

View File

@ -77,9 +77,9 @@
{#await promise}
<!-- This should probably be some kind of loading state? -->
<div />
{:then _}
{:then [object Object]}
<slot />
{:catch error}
{:catch [object Object]}
<p>Something went wrong: {error.message}</p>
{/await}
</div>

View File

@ -73,6 +73,12 @@ exports.save = async function(ctx) {
let row = ctx.request.body
row.tableId = ctx.params.tableId
if (ctx.request.body.type === "delete") {
await bulkDelete(ctx)
ctx.body = ctx.request.body.rows
return
}
if (!row._rev && !row._id) {
row._id = generateRowID(row.tableId)
}
@ -101,7 +107,7 @@ exports.save = async function(ctx) {
// make sure link rows are up to date
row = await linkRows.updateLinks({
instanceId,
eventType: linkRows.EventType.ROW_SAVE,
eventType: linkRows.EventType.RECORD_SAVE,
row,
tableId: row.tableId,
table,
@ -348,3 +354,25 @@ const TYPE_TRANSFORM_MAP = {
false: false,
},
}
async function bulkDelete(ctx) {
const instanceId = ctx.user.instanceId
const { rows } = ctx.request.body
const db = new CouchDB(instanceId)
const linkUpdates = rows.map(row =>
linkRows.updateLinks({
instanceId,
eventType: linkRows.EventType.ROW_DELETE,
row,
tableId: row.tableId,
})
)
await db.bulkDocs(rows.map(row => ({ ...row, _deleted: true })))
await Promise.all(linkUpdates)
rows.forEach(row => {
ctx.eventEmitter && ctx.eventEmitter.emitRow(`row:delete`, instanceId, row)
})
}

View File

@ -35,7 +35,7 @@
{#await _appPromise}
loading
{:then _bb}
{:then [object Object]}
<div id="current_component" bind:this={currentComponent} />
{/await}