split into components
parent
768bac3bcf
commit
25cbf12880
|
@ -2,6 +2,9 @@
|
||||||
import { intros } from './store.ts';
|
import { intros } from './store.ts';
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
|
||||||
|
export let guild = null;
|
||||||
|
export let channel = null;
|
||||||
|
|
||||||
export let introList = null;
|
export let introList = null;
|
||||||
export let exclude = null;
|
export let exclude = null;
|
||||||
export let btnLabel = 'Add';
|
export let btnLabel = 'Add';
|
||||||
|
@ -10,7 +13,11 @@
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
const onConfirm = () => {
|
const onConfirm = () => {
|
||||||
dispatch('confirm', selectedIntros)
|
dispatch('confirm', {
|
||||||
|
guild: guild,
|
||||||
|
channel: channel,
|
||||||
|
intros: selectedIntros
|
||||||
|
})
|
||||||
selectedIntros = [];
|
selectedIntros = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,10 +27,10 @@
|
||||||
<div id="list">
|
<div id="list">
|
||||||
{#if !!introList}
|
{#if !!introList}
|
||||||
{#if introList.length > 0}
|
{#if introList.length > 0}
|
||||||
{#each introList as i}
|
{#each introList as intro}
|
||||||
<label id="list-item">
|
<label id="list-item">
|
||||||
<input type="checkbox" bind:group={selectedIntros} name="selectedIntros" value={i}>
|
<input type="checkbox" bind:group={selectedIntros} name="selectedIntros" value={intro}>
|
||||||
{$intros[i].name} ({!!$intros[i].filename ? $intros[i].filename : $intros[i].url})
|
{$intros[intro.index].name} ({!!$intros[intro.index].filename ? $intros[intro.index].filename : $intros[intro.index].url})
|
||||||
</label>
|
</label>
|
||||||
{/each}
|
{/each}
|
||||||
{:else if !!emptyMsg}
|
{:else if !!emptyMsg}
|
||||||
|
@ -32,7 +39,7 @@
|
||||||
{/if}
|
{/if}
|
||||||
{:else if !!exclude}
|
{:else if !!exclude}
|
||||||
{#each $intros as intro, i}
|
{#each $intros as intro, i}
|
||||||
{#if (!exclude.includes(i))}
|
{#if (!exclude.map((e) => e.index).includes(i))}
|
||||||
<label id="list-item">
|
<label id="list-item">
|
||||||
<input type="checkbox" bind:group={selectedIntros} name="selectedIntros" value={i}>
|
<input type="checkbox" bind:group={selectedIntros} name="selectedIntros" value={i}>
|
||||||
{intro.name} ({!!intro.filename ? intro.filename : intro.url})
|
{intro.name} ({!!intro.filename ? intro.filename : intro.url})
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
await member._fakeLogin(username);
|
await member._fakeLogin(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let loginPromise = null;
|
||||||
|
|
||||||
let enteredUsername = '';
|
let enteredUsername = '';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
24
src/app.html
24
src/app.html
|
@ -18,6 +18,30 @@
|
||||||
color: lightgrey;
|
color: lightgrey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div#intros {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #323259;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#guild-settings {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #2a2a4a;
|
||||||
|
margin: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#channel-settings {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #2a2a4a;
|
||||||
|
margin: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
div#list {
|
div#list {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
width: 85%;
|
width: 85%;
|
||||||
|
|
|
@ -4,12 +4,41 @@
|
||||||
import IntroSelector from '../IntroSelector.svelte';
|
import IntroSelector from '../IntroSelector.svelte';
|
||||||
|
|
||||||
const addIntros = (event) => {
|
const addIntros = (event) => {
|
||||||
console.log($member.intros)
|
let guildIndex = $member.guilds.findIndex((e) => e.name === event.detail.guild);
|
||||||
$member.intros = $member.intros.concat(event.detail);
|
console.log(guildIndex)
|
||||||
console.log($member.intros)
|
|
||||||
|
if (guildIndex >= 0) {
|
||||||
|
let channelIndex = $member.guilds[guildIndex].channels.findIndex((e) => e.name === event.detail.channel);
|
||||||
|
console.log(channelIndex)
|
||||||
|
|
||||||
|
if (channelIndex >= 0) {
|
||||||
|
$member.guilds[guildIndex].channels[channelIndex].intros =
|
||||||
|
$member
|
||||||
|
.guilds[guildIndex]
|
||||||
|
.channels[channelIndex]
|
||||||
|
.intros
|
||||||
|
.concat(
|
||||||
|
event.detail.intros.map((index) => {
|
||||||
|
return { index: index, volume: 20 }
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const removeIntros = (event) => {
|
const removeIntros = (event) => {
|
||||||
$member.intros = $member.intros.filter((intro) => !event.detail.includes(intro));
|
let guildIndex = $member.guilds.findIndex((e) => e.name == event.detail.guild);
|
||||||
|
|
||||||
|
if (guildIndex >= 0) {
|
||||||
|
let channelIndex = $member.guilds[guildIndex].channels.findIndex((e) => e.name === event.detail.channel);
|
||||||
|
|
||||||
|
if (channelIndex >= 0) {
|
||||||
|
$member.guilds[guildIndex].channels[channelIndex].intros =
|
||||||
|
$member
|
||||||
|
.guilds[guildIndex]
|
||||||
|
.channels[channelIndex]
|
||||||
|
.intros
|
||||||
|
.filter((intro) => !event.detail.intros.includes(intro));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -18,15 +47,35 @@
|
||||||
{#if !!$member}
|
{#if !!$member}
|
||||||
<p>{$member.username}</p>
|
<p>{$member.username}</p>
|
||||||
|
|
||||||
<h3>Your Intros</h3>
|
<h3>Your Intros</h3>
|
||||||
<IntroSelector
|
<div id="intros">
|
||||||
introList={$member.intros}
|
{#each $member.guilds as guild}
|
||||||
on:confirm={removeIntros}
|
<h4>{guild.name}</h4>
|
||||||
btnLabel="Remove"
|
<div id="guild-settings">
|
||||||
emptyMsg="You don't have any intros, try adding one"/>
|
{#each guild.channels as channel}
|
||||||
|
<div id="channel-settings">
|
||||||
|
<h4>{channel.name}</h4>
|
||||||
|
<IntroSelector
|
||||||
|
guild={guild.name}
|
||||||
|
channel={channel.name}
|
||||||
|
introList={channel.intros}
|
||||||
|
on:confirm={removeIntros}
|
||||||
|
btnLabel="Remove"
|
||||||
|
emptyMsg="You don't have any intros, try adding one"
|
||||||
|
/>
|
||||||
|
|
||||||
<h3>Add Intros</h3>
|
<h3>Add Intros</h3>
|
||||||
<IntroSelector exclude={$member.intros} on:confirm={addIntros} />
|
<IntroSelector
|
||||||
|
guild={guild.name}
|
||||||
|
channel={channel.name}
|
||||||
|
exclude={channel.intros}
|
||||||
|
on:confirm={addIntros}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<Login />
|
<Login />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -26,12 +26,7 @@ function createMemberStore(): MemberStore {
|
||||||
if (response === "NoUserFound") {
|
if (response === "NoUserFound") {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
set(
|
set(response.Me)
|
||||||
{
|
|
||||||
username: username,
|
|
||||||
intros: response.Settings[0].intros.map((intro) => intro[0])
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue