ui for deleting sounds, beginning of permissions
parent
a464e48287
commit
05f6c13c80
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
docker = dockerTools.buildImage {
|
docker = dockerTools.buildImage {
|
||||||
name = "memejoin-svelte";
|
name = "memejoin-svelte";
|
||||||
tag = "0.1.0";
|
tag = "0.1.2_1";
|
||||||
copyToRoot = buildEnv {
|
copyToRoot = buildEnv {
|
||||||
name = "image-root";
|
name = "image-root";
|
||||||
paths = [ nodejs yarnPkg ];
|
paths = [ nodejs yarnPkg ];
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
<script>
|
||||||
|
import { member, intros } from '../store.ts';
|
||||||
|
import { deleteIntro } from '../api.js';
|
||||||
|
import IntroSelector from '../IntroSelector.svelte';
|
||||||
|
|
||||||
|
export let guilds = [];
|
||||||
|
|
||||||
|
let deletePromise = null;
|
||||||
|
|
||||||
|
const apiDeleteIntro = async (guild, selectedIntros) => {
|
||||||
|
await deleteIntro(guild, selectedIntros, $member.token);
|
||||||
|
await member.pullData($member.token);
|
||||||
|
await intros.fetchIntros($member.guilds);
|
||||||
|
};
|
||||||
|
const deleteIntros = (event) => {
|
||||||
|
deletePromise = apiDeleteIntro(event.detail.guild, event.detail.intros);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if !!deletePromise}
|
||||||
|
{#await deletePromise}
|
||||||
|
{:catch err}
|
||||||
|
<p style="color: red">{err}</p>
|
||||||
|
{/await}
|
||||||
|
{/if}
|
||||||
|
<div id="nestedCardContent">
|
||||||
|
{#each guilds as guild}
|
||||||
|
<h4>{guild.name}</h4>
|
||||||
|
<IntroSelector
|
||||||
|
guild={guild.id}
|
||||||
|
exclude={[]}
|
||||||
|
on:confirm={deleteIntros}
|
||||||
|
btnLabel="Delete Intro From Guild"
|
||||||
|
btnDanger={true}
|
||||||
|
emptyMsg="Your guild doesn't have any intros, try adding some below"
|
||||||
|
/>
|
||||||
|
{/each}
|
||||||
|
</div>
|
|
@ -2,21 +2,23 @@
|
||||||
import { member, intros } from '../store.ts';
|
import { member, intros } from '../store.ts';
|
||||||
import IntroSelector from '../IntroSelector.svelte';
|
import IntroSelector from '../IntroSelector.svelte';
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { deleteIntro } from '../api.js';
|
import DeleteSelector from './DeleteSelector.svelte';
|
||||||
|
import Permissions from './Permissions.svelte';
|
||||||
|
import { member_can, Permission } from '../permissions.ts';
|
||||||
|
|
||||||
let deletePromise = null;
|
|
||||||
let dashboardVisible = false;
|
let dashboardVisible = false;
|
||||||
|
|
||||||
const apiDeleteIntro = async (guild, selectedIntros) => {
|
let allowedGuildList = [];
|
||||||
await deleteIntro(guild, selectedIntros, $member.token);
|
|
||||||
await member.pullData($member.token);
|
$: allowedGuildList = $member.guilds
|
||||||
await intros.fetchIntros($member.guilds);
|
.filter((guild) => member_can(guild.permissions, Permission.CanDelete))
|
||||||
};
|
.map((guild) => guild);
|
||||||
const deleteIntros = (event) => {
|
|
||||||
deletePromise = apiDeleteIntro(event.detail.guild, event.detail.intros);
|
$: isModerator = allowedGuildList.length > 0;
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{#if isModerator}
|
||||||
<h3>Wow you're a moderator, here is a cool dashboard for you to use</h3>
|
<h3>Wow you're a moderator, here is a cool dashboard for you to use</h3>
|
||||||
<div id="cardContent" class="noGrid">
|
<div id="cardContent" class="noGrid">
|
||||||
<div id="nestedCardContent" class="cardLight cardNoShadow">
|
<div id="nestedCardContent" class="cardLight cardNoShadow">
|
||||||
|
@ -25,25 +27,9 @@
|
||||||
<button on:click={() => dashboardVisible = false}>
|
<button on:click={() => dashboardVisible = false}>
|
||||||
Hide dashboard ^
|
Hide dashboard ^
|
||||||
</button>
|
</button>
|
||||||
{#if !!deletePromise}
|
|
||||||
{#await deletePromise}
|
<DeleteSelector guilds={allowedGuildList}/>
|
||||||
{:catch err}
|
<!--<Permissions />-->
|
||||||
<p style="color: red">{err}</p>
|
|
||||||
{/await}
|
|
||||||
{/if}
|
|
||||||
<div id="nestedCardContent">
|
|
||||||
{#each $member.guilds as guild}
|
|
||||||
<h4>{guild.name}</h4>
|
|
||||||
<IntroSelector
|
|
||||||
guild={guild.id}
|
|
||||||
exclude={[]}
|
|
||||||
on:confirm={deleteIntros}
|
|
||||||
btnLabel="Delete Intro From Guild"
|
|
||||||
btnDanger={true}
|
|
||||||
emptyMsg="Your guild doesn't have any intros, try adding some below"
|
|
||||||
/>
|
|
||||||
{/each}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<button on:click={() => dashboardVisible = true}>
|
<button on:click={() => dashboardVisible = true}>
|
||||||
|
@ -52,6 +38,7 @@
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
h3 {
|
h3 {
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<h3>Permissions</h3>
|
|
@ -1,6 +1,7 @@
|
||||||
export const Permission = {
|
export const Permission = {
|
||||||
None: 0,
|
None: 0,
|
||||||
CanDownload: 1,
|
CanDownload: 1,
|
||||||
|
CanDelete: 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const member_can = (permissions, perm) => {
|
export const member_can = (permissions, perm) => {
|
||||||
|
|
Reference in New Issue