1
0
mirror of https://github.com/garraflavatra/rolens.git synced 2025-04-10 21:51:03 +00:00
2023-08-07 18:21:45 +02:00

100 lines
2.1 KiB
Svelte

<script>
import Icon from '$components/icon.svelte';
import ObjectGrid from '$components/grid/objectgrid.svelte';
export let collection;
export let visible = false;
let activePath = [];
let _indexes = [];
let error = '';
let busy = false;
async function refresh() {
if (!visible) {
return;
}
busy = 'Fetching indexes…';
error = await collection.getIndexes();
if (!error) {
_indexes = collection.indexes.map(idx => {
return {
name: idx.name,
background: idx.background || false,
unique: idx.unique || false,
sparse: idx.sparse || false,
model: idx.model,
};
});
}
busy = false;
}
async function createIndex() {
const newIndexName = await collection.newIndex();
if (newIndexName) {
await refresh();
}
}
async function dropIndex(indexName) {
if (typeof indexName !== 'string') {
indexName = activePath[0];
}
const success = await collection.getIndexByName(indexName).drop();
if (success) {
activePath[0] = '';
await refresh();
}
}
$: visible && refresh();
</script>
<div class="indexes">
<div class="grid">
<ObjectGrid
key="name"
data={_indexes}
getRootMenu={(_, idx) => [ { label: 'Drop this index', fn: () => dropIndex(idx.name) } ]}
errorTitle={error ? 'Error while getting indexes' : ''}
errorDescription={error}
bind:activePath
{busy}
/>
</div>
<div class="actions">
<button class="button" on:click={refresh}>
<Icon name="reload" spin={busy} /> Reload
</button>
<button class="button" on:click={createIndex}>
<Icon name="+" /> Create index…
</button>
<button class="button danger" on:click={dropIndex} disabled={!_indexes.length || !activePath[0]}>
<Icon name="x" /> Drop selected
</button>
</div>
</div>
<style>
.indexes {
display: grid;
gap: 0.5rem;
grid-template: 1fr auto / 1fr;
}
.indexes .grid {
min-height: 0;
min-width: 0;
border: 1px solid #ccc;
}
</style>