[ui] add deletion of objects

feat/vaults
Tomáš Mládek 2022-02-20 18:04:47 +01:00
parent 1470d91719
commit a2337fde30
No known key found for this signature in database
GPG Key ID: 65E225C8B3E2ED8A
3 changed files with 31 additions and 5 deletions

View File

@ -54,6 +54,7 @@
{index} {index}
{detail} {detail}
on:resolved on:resolved
on:close
/> />
</div> </div>

View File

@ -4,7 +4,7 @@
import UpObject from "./display/UpObject.svelte"; import UpObject from "./display/UpObject.svelte";
import { UpType } from "../lib/types"; import { UpType } from "../lib/types";
import BlobPreview from "./display/BlobPreview.svelte"; import BlobPreview from "./display/BlobPreview.svelte";
import { setContext } from "svelte"; import { createEventDispatcher, setContext } from "svelte";
import { writable } from "svelte/store"; import { writable } from "svelte/store";
import type { UpEntry } from "upend"; import type { UpEntry } from "upend";
import Spinner from "./utils/Spinner.svelte"; import Spinner from "./utils/Spinner.svelte";
@ -17,6 +17,8 @@
import { useParams } from "svelte-navigator"; import { useParams } from "svelte-navigator";
import { GROUP_TYPE_ADDR } from "upend/constants"; import { GROUP_TYPE_ADDR } from "upend/constants";
import { deleteEntry, putEntityAttribute, putEntry } from "../lib/api"; import { deleteEntry, putEntityAttribute, putEntry } from "../lib/api";
import Icon from "./utils/Icon.svelte";
const dispatch = createEventDispatcher();
const params = useParams(); const params = useParams();
export let address: string; export let address: string;
@ -139,6 +141,12 @@
revalidate(); revalidate();
} }
let identities = [address];
function onResolved(ev: CustomEvent<string[]>) {
identities = ev.detail;
dispatch("resolved", ev.detail);
}
let groupToAdd: IValue | undefined; let groupToAdd: IValue | undefined;
async function addGroup() { async function addGroup() {
if (!groupToAdd) { if (!groupToAdd) {
@ -166,17 +174,24 @@
groupToAdd = undefined; groupToAdd = undefined;
} }
async function removeGroup(address: string) { async function removeGroup(groupAddress: string) {
await deleteEntry(address); await deleteEntry(groupAddress);
revalidate(); revalidate();
} }
async function deleteObject() {
if (confirm(`Really delete "${identities.join(" | ")}"?`)) {
await deleteEntry(address);
dispatch("close");
}
}
</script> </script>
<div class="inspect"> <div class="inspect">
<header> <header>
<h2> <h2>
{#if $entity} {#if $entity}
<UpObject banner {address} on:resolved /> <UpObject banner {address} on:resolved={onResolved} />
{:else} {:else}
<Spinner centered /> <Spinner centered />
{/if} {/if}
@ -244,6 +259,12 @@
/> />
{/if} {/if}
</div> </div>
{#if editable}
<div class="button" on:click={deleteObject}>
<Icon name="trash" />
</div>
{/if}
{:else} {:else}
<Spinner centered /> <Spinner centered />
{/if} {/if}

View File

@ -12,7 +12,11 @@
function close(idx: number) { function close(idx: number) {
let _addresses = addresses.concat(); let _addresses = addresses.concat();
_addresses.splice(idx, 1); _addresses.splice(idx, 1);
navigate(`/browse/${_addresses.join(",")}`); if (_addresses.length) {
navigate(`/browse/${_addresses.join(",")}`);
} else {
navigate("/");
}
} }
$: { $: {