diff --git a/flake.nix b/flake.nix index f482909..5bc1607 100644 --- a/flake.nix +++ b/flake.nix @@ -48,7 +48,7 @@ docker = dockerTools.buildImage { name = "memejoin-svelte"; - tag = "0.1.0"; + tag = "0.1.2_1"; copyToRoot = buildEnv { name = "image-root"; paths = [ nodejs yarnPkg ]; diff --git a/src/components/DeleteSelector.svelte b/src/components/DeleteSelector.svelte new file mode 100644 index 0000000..bec4ee5 --- /dev/null +++ b/src/components/DeleteSelector.svelte @@ -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> diff --git a/src/components/ModDashboard.svelte b/src/components/ModDashboard.svelte index a93b651..5380f32 100644 --- a/src/components/ModDashboard.svelte +++ b/src/components/ModDashboard.svelte @@ -2,21 +2,23 @@ import { member, intros } from '../store.ts'; import IntroSelector from '../IntroSelector.svelte'; 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; - 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); - }; + let allowedGuildList = []; + + $: allowedGuildList = $member.guilds + .filter((guild) => member_can(guild.permissions, Permission.CanDelete)) + .map((guild) => guild); + + $: isModerator = allowedGuildList.length > 0; + </script> +{#if isModerator} <h3>Wow you're a moderator, here is a cool dashboard for you to use</h3> <div id="cardContent" class="noGrid"> <div id="nestedCardContent" class="cardLight cardNoShadow"> @@ -25,25 +27,9 @@ <button on:click={() => dashboardVisible = false}> Hide dashboard ^ </button> - {#if !!deletePromise} - {#await deletePromise} - {:catch err} - <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> + + <DeleteSelector guilds={allowedGuildList}/> + <!--<Permissions />--> </div> {:else} <button on:click={() => dashboardVisible = true}> @@ -52,6 +38,7 @@ {/if} </div> </div> +{/if} <style> h3 { diff --git a/src/components/Permissions.svelte b/src/components/Permissions.svelte new file mode 100644 index 0000000..ab86762 --- /dev/null +++ b/src/components/Permissions.svelte @@ -0,0 +1 @@ +<h3>Permissions</h3> diff --git a/src/permissions.ts b/src/permissions.ts index a7af141..452b27d 100644 --- a/src/permissions.ts +++ b/src/permissions.ts @@ -1,6 +1,7 @@ export const Permission = { None: 0, CanDownload: 1, + CanDelete: 2, } export const member_can = (permissions, perm) => {